<?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>137333</bug_id>
          
          <creation_ts>2014-10-01 22:18:15 -0700</creation_ts>
          <short_desc>Have is&lt;&gt;(T*) function do a null check on the pointer argument</short_desc>
          <delta_ts>2014-10-02 12:41:34 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1038778</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-01 22:18:15 -0700</bug_when>
    <thetext>Have is&lt;&gt;(T*) function do a null check on the argument instead of a simple assertion. This makes sense for 2 reasons:
1. It is more consistent with downcast&lt;&gt;(T*), which will succeed even if the argument is a nullptr
2. It simplifies the code a bit as it gets rid of a lot of explicit null checks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038780</commentid>
    <comment_count>1</comment_count>
      <attachid>239084</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-01 22:39:19 -0700</bug_when>
    <thetext>Created attachment 239084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038781</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-01 22:42:18 -0700</bug_when>
    <thetext>Attachment 239084 did not pass style-queue:


ERROR: Source/WebCore/editing/CompositeEditCommand.cpp:1354:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/dom/Position.cpp:953:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 247 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>1038785</commentid>
    <comment_count>3</comment_count>
      <attachid>239086</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-01 22:59:34 -0700</bug_when>
    <thetext>Created attachment 239086
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038786</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-01 23:02:30 -0700</bug_when>
    <thetext>Attachment 239086 did not pass style-queue:


ERROR: Source/WebCore/editing/CompositeEditCommand.cpp:1354:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/dom/Position.cpp:953:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 247 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>1038944</commentid>
    <comment_count>5</comment_count>
      <attachid>239129</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-02 12:38:39 -0700</bug_when>
    <thetext>Created attachment 239129
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038946</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-02 12:41:18 -0700</bug_when>
    <thetext>Committed r174225: &lt;http://trac.webkit.org/changeset/174225&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239084</attachid>
            <date>2014-10-01 22:39:19 -0700</date>
            <delta_ts>2014-10-01 22:59:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137333-20141001223919.patch</filename>
            <type>text/plain</type>
            <size>491512</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDllNjRmODkyNjcwNTM2M2Y2ZTZmMjBi
NDZkOThjNTI3NmY5Nzc4N2QuLjc3MjFmYzUxMDUwZGNhNjY4NTE1MjBjODBkNTNmMjI4ZWI5MDYw
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsMjIgQEAKIDIwMTQtMTAtMDEgIENocmlzdG9waGUgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIEhhdmUgaXM8PihUKikgZnVuY3Rpb24gZG8gYSBu
dWxsIGNoZWNrIG9uIHRoZSBwb2ludGVyIGFyZ3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIYXZlIGlzPD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVs
bCBjaGVjayBvbiB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiBhCisgICAgICAgIHNpbXBsZSBhc3Nl
cnRpb24uIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIDIgcmVhc29uczoKKyAgICAgICAgMS4gSXQgaXMg
bW9yZSBjb25zaXN0ZW50IHdpdGggZG93bmNhc3Q8PihUKiksIHdoaWNoIHdpbGwgc3VjY2VlZCBl
dmVuCisgICAgICAgICAgIGlmIHRoZSBhcmd1bWVudCBpcyBhIG51bGxwdHIuCisgICAgICAgIDIu
IEl0IHNpbXBsaWZpZXMgdGhlIGNvZGUgYSBiaXQgYXMgaXQgZ2V0cyByaWQgb2YgYSBsb3Qgb2Yg
ZXhwbGljaXQKKyAgICAgICAgICAgbnVsbCBjaGVja3MuCisKKyAgICAgICAgKiB3dGYvVHlwZUNh
c3RzLmg6CisgICAgICAgIChXVEY6OmlzKToKKworMjAxNC0xMC0wMSAgQ2hyaXN0b3BoZSBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0
ZXIgcjE3NDE5My4KIAogICAgICAgICBBZGRpbmcgYSByZXR1cm4gc3RhdGVtZW50IGFzIHRoYXQg
ZnVuY3Rpb24gaXMgcmV0dXJuaW5nIGEgYm9vbGVhbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MWQxNjg5MTRk
ODM1NThhNWI4MjRjOTI2MDVlYzk3NWJjN2VhMDliLi5lMTA0ZjY1YTMzNTE3YmY0MTRhMWFiYjlh
ZDEwNjMxMmNjNDQ2ZmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODY3IEBACiAyMDE0LTEwLTAx
ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAorICAgICAgICBIYXZlIGlz
PD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVsbCBjaGVjayBvbiB0aGUgcG9pbnRlciBhcmd1bWVudAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzMzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2ZSBpczw+
KFQqKSBmdW5jdGlvbiBkbyBhIG51bGwgY2hlY2sgb24gdGhlIGFyZ3VtZW50IGluc3RlYWQgb2Yg
YQorICAgICAgICBzaW1wbGUgYXNzZXJ0aW9uLiBUaGlzIG1ha2VzIHNlbnNlIGZvciAyIHJlYXNv
bnM6CisgICAgICAgIDEuIEl0IGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGRvd25jYXN0PD4oVCop
LCB3aGljaCB3aWxsIHN1Y2NlZWQgZXZlbgorICAgICAgICAgICBpZiB0aGUgYXJndW1lbnQgaXMg
YSBudWxscHRyLgorICAgICAgICAyLiBJdCBzaW1wbGlmaWVzIHRoZSBjb2RlIGEgYml0IGFzIGl0
IGdldHMgcmlkIG9mIGEgbG90IG9mIGV4cGxpY2l0CisgICAgICAgICAgIG51bGwgY2hlY2tzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHA6CisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVB
dWRpb0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25uZWN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoYWtlTWVzc2FnZSk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUZyb21SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpo
YW5kbGVMaXZlUmVnaW9uQ3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
OjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2Fj
aGU6OmxhYmVsQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyb290
QVhFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb2RlQXJpYVZpc2libGUp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmlzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6aXNTZWxl
Y3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6Y2Fu
U2V0U2VsZWN0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxp
c3RCb3hPcHRpb246OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlMaXN0Qm94T3B0aW9uOjpsaXN0Qm94T3B0aW9uUGFyZW50Tm9kZSk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbik6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6bWVudUxpc3RPcHRpb25B
Y2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FudmFzSGFzRmFsbGJhY2tDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNQcmVzc2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0hvdmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVxdWlyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVl
Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1p
blZhbHVlRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmlzQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YW5jaG9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjppc05vZGVBY3Rpb25FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojptb3VzZUJ1dHRv
bkxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojps
YWJlbEZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OnRpdGxlRWxlbWVudFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmFsdGVybmF0aXZlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6dmlzaWJsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGVscFRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhpZXJhcmNoaWNhbExldmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0aXRsZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNldEZvY3VzQXR0cmlidXRlKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdDo6aGFzVGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpj
bGFzc0xpc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpp
c0ZpbGVVcGxvYWRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YW5jaG9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpoZWxwVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpsYWJlbEVsZW1lbnRDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW50ZXJuYWxMaW5rRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRSYWRpb0J1dHRvbkdyb3Vw
TWVtYmVycyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0
aXRsZVVJRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NLZXkpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEVsZW1lbnRBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRGb2N1c2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3Mp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJp
bGl0eUltYWdlTWFwSGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJP
YmplY3RJc09ic2VydmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5oZXJpdHNQcmVzZW50YXRpb25hbFJvbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEZpZWxk
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
cmVtb3RlU1ZHUm9vdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6c2V0QWNjZXNzaWJsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWVGb3JNU0FBKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTGlua2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1JvbGVGb3JNU0FBKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aEVsZW1lbnQpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNlYXJjaEZpZWxkQnV0dG9ucy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRDYW5jZWxCdXR0
b246OnByZXNzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnRhYmxlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6
dGl0bGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5Q2hpbGRyZW5TZWxlY3Rpb25DaGFuZ2UpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5j
cHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6CisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0TmFtZSk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
R2V0RGVzY3JpcHRpb24pOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMp
OgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NUHJpdmF0ZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OndyYXApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTQXVkaW9Db250ZXh0KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTRE9NR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYW1lZEl0ZW1HZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERv
Y3VtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRp
YWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6aXNSZWFjaGFibGVGcm9tRE9NKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVdyYXBwZXJJbmxpbmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxl
ZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmZyYW1lRnJvbUV4ZWNTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06
CisgICAgICAgIChraXRDbGFzcyk6CisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50
KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
c0FjY2VwdGFibGVDU1NTdHlsZVNoZWV0UGFyZW50KToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JD
aGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUp
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6CisgICAgICAg
IChXZWJDb3JlOjppc0F1dG9maWxsZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXNhYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNDaGVj
a2VkKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNMYW5nUHNldWRvQ2xhc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6bWF0Y2hlc0Z1dHVyZUN1ZVBzZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdGNoZXNQYXN0Q3VlUHNldWRvQ2xhc3MpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29s
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXNGb3JMZW5ndGgp
OgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVtKToKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBdHRyOjpzdHlsZSk6CisgICAgICAgICogZG9tL0NoYXJhY3RlckRh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpzZXREYXRhQW5kVXBkYXRlKToK
KyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGVj
a0FjY2VwdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6Om5vdGlmeUNo
aWxkUmVtb3ZlZCk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUluc2VydGlvbk5vdGlmaWVyOjpub3RpZnlEZXNj
ZW5kYW50SW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVSZW1v
dmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAq
IGRvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJl
bnRTY3JpcHRJbmNyZW1lbnRlcjo6Q3VycmVudFNjcmlwdEluY3JlbWVudGVyKToKKyAgICAgICAg
KiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6
c2V0RHJhZ0ltYWdlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmVsZW1lbnRGcm9tUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnNldFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppY29uVVJMcyk6
CisgICAgICAgIChXZWJDb3JlOjpldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZSk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRz
KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
Ojpjb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpwYXJlbnRFbGVtZW50KToKKyAgICAgICAgKiBkb20vRWxl
bWVudFRyYXZlcnNhbC5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhdmVyc2FsPEVsZW1lbnQ+Ojpu
ZXh0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFRyYXZlcnNhbDo6
bmV4dEluY2x1ZGluZ1BzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2Fs
OjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50VHJhdmVyc2FsOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyk6CisgICAgICAg
ICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dFdmVu
dENvbnRleHQ6OldpbmRvd0V2ZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6bm9kZU9ySG9zdElm
UHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OkV2ZW50UGF0aCk6
CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAqIGRvbS9LZXlib2FyZEV2ZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBk
b20vTGl2ZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdDo6bmFt
ZWRJdGVtKToKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZE1vdXNlRXZlbnQ6OlNpbXVsYXRl
ZE1vdXNlRXZlbnQpOgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TmFtZWROb2RlTWFwOjpzZXROYW1lZEl0ZW0pOgorICAgICAgICAqIGRvbS9Ob2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6Y29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpwYXJlbnRPclNo
YWRvd0hvc3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJvb3RFZGl0YWJsZUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YW5jZXN0b3JFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmFwcGVuZEF0dHJpYnV0ZURlc2MpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2hv
d05vZGVQYXRoRm9yVGhpcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbmNsb3NpbmdMaW5r
RXZlbnRQYXJlbnRPclNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAg
ICAgKiBkb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpub2RlQ2FuQmVEaXN0cmlidXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjp0cmF2ZXJzZVBhcmVudCk6CisgICAgICAg
ICogZG9tL05vZGVUcmF2ZXJzYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNh
bDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZl
cnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVy
c2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbik6CisgICAgICAgICogZG9t
L1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjplbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OmVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjppc1JlbmRlcmVkQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAg
ICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyk6CisgICAg
ICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9TY3JpcHRF
bGVtZW50SWZQb3NzaWJsZSk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnBhcmVudE9yU2hhZG93SG9zdE5vZGUpOgorICAgICAgICAqIGRvbS9U
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVhcmxpZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU1ZHU2hhZG93VGV4dCk6CisgICAgICAgICogZG9tL1Rl
eHROb2RlVHJhdmVyc2FsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHROb2RlVHJhdmVyc2Fs
Ojpjb250ZW50c0FzU3RyaW5nKToKKyAgICAgICAgKiBkb20vVGV4dE5vZGVUcmF2ZXJzYWwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHROb2RlVHJhdmVyc2FsOjpmaXJzdFRleHRDaGlsZFRlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHROb2RlVHJhdmVyc2FsOjpmaXJzdFRleHRXaXRo
aW5UZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Tm9kZVRyYXZlcnNhbDo6dHJhdmVy
c2VOZXh0VGV4dFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHROb2RlVHJhdmVyc2Fs
OjpuZXh0U2libGluZyk6CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVOb2RlVG9OZXdEb2N1bWVudCk6
CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aXNOZXdMaW5lQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQ6OmVuZE9mTmV4dFBhcmFncmFoU3BsaXR0aW5nVGV4dE5vZGVz
SWZOZWVkZWQpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNMZWdhY3lBcHBsZVN0eWxlU3Bhbik6CisgICAgICAgIChXZWJDb3Jl
Ojppc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzRW1wdHlGb250VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6ZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpoaWdoZXN0QW5jZXN0b3JX
aXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRFbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4dEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRl
eHROb2Rlcyk6CisgICAgICAgICogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAg
ICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzUmVtb3ZhYmxlQmxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2FuUmViYWxhbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JT
cGxpdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5z
aWduaWZpY2FudFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlbW92ZVBsYWNlaG9sZGVyQXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENv
bW1hbmQ6OmNsZWFudXBBZnRlckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVC
dXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0RlbGV0YWJs
ZUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFs
RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVw
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpk
b0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0aW5nU3R5bGU6OndyYXBwaW5nU3R5bGVGb3JTZXJpYWxpemF0aW9uKToKKyAg
ICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbWFnZUVsZW1l
bnRGcm9tSW1hZ2VEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZElu
c2VydEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdE
aXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRDb21wb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCk6CisgICAg
ICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
aXNFbGVtZW50Rm9yRm9ybWF0QmxvY2spOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhcmV0QmFzZTo6cGFpbnRDYXJldCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6ZGVidWdSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OnNjYW5Gb3JGb3Jt
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRM
aXN0Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyk6CisgICAgICAgICogZWRpdGlu
Zy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4
dENvbW1hbmQ6Omluc2VydFRhYik6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXZlU2FtZVRhZ05hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxl
c0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZFBlcmZvcm1TbWFydFJlcGxh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNl
c0ZvclNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6bWVyZ2VUZXh0Tm9kZXNBcm91bmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRlbXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFjZSk6Cisg
ICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
bGxDaGVja2VyOjppc0NoZWNrYWJsZSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzUmVuZGVyZXJSZXBsYWNl
ZEVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjppc0luUGFzc3dvcmRGaWVsZCk6CisgICAg
ICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRQ
b3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9zaXRpb25Gb3JMaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6
ZW5kT2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6OmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yQW5jZXN0
b3JzKToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6OmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yRWxl
bWVudEFuZEl0c0FuY2VzdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjplZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjplbmNs
b3NpbmdFbGVtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdBbmNob3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0xpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6bGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjphcmVJ
ZGVudGljYWxFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjppc05vblRhYmxlQ2VsbEhUTUxC
bG9ja0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGlu
Z0RpcmVjdGlvbik6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6YW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1BsYWluVGV4dE1hcmt1cCk6CisgICAgICAgICogZmlsZWFwaS9G
aWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0FycmF5
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwpOgorICAgICAgICAqIGh0bWwvQmFz
ZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnVwZGF0ZUFwcGVhcmFuY2UpOgor
ICAgICAgICAqIGh0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmxvYWREb2N1bWVudFRlbXBsYXRlKToKKyAg
ICAgICAgKiBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZpbmRBc3NvY2lhdGVkRm9ybSk6CisgICAgICAgICog
aHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRTZXJ2
ZXJNYXBNb3VzZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVt
ZW50OjpldmVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNFbnRlcktleUtleWRvd25FdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjppc0xpbmtDbGljayk6CisgICAgICAgICogaHRtbC9IVE1M
QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjppbWFn
ZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBodG1s
L0hUTUxCdXR0b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVkRWxlbWVudENhY2hlKToK
KyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RG9jdW1lbnQ6OmJnQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjpzZXRC
Z0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6ZmdDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OnNldEZnQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTERvY3VtZW50OjphbGlua0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1
bWVudDo6c2V0QWxpbmtDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Omxp
bmtDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OnNldExpbmtDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OnZsaW5rQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTERvY3VtZW50OjpzZXRWbGlua0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxEb2N1bWVudDo6aXNGcmFtZVNldCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6bWF0Y2hlc1JlYWRXcml0ZVBzZXVk
b0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6Om1lcmdlV2l0aE5leHRUZXh0Tm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnQ6Omluc2VydEFkamFjZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0
RWxlbWVudEZvckluc2VydGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6ZGly
ZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmRpckF0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAg
KiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRl
RnJvbUNvbnRyb2xFbGVtZW50c0FuY2VzdG9yRGlzYWJsZWRTdGF0ZVVuZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0QW5j
ZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQXV0b2ZvY3VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmVuY2xvc2luZ0Zvcm1Db250cm9sRWxlbWVu
dCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0SW1wbGljaXRseSk6CisgICAgICAgIChXZWJDb3JlOjpz
dWJtaXRFbGVtZW50RnJvbUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6c3VibWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpkZWZhdWx0QnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFn
ZUNhY2hlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmdldFNWR0RvY3VtZW50KToKKyAg
ICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZyYW1lU2V0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6ZGF0YUxpc3QpOgorICAgICAgICAqIGh0bWwvSFRNTExhYmVsRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpub2RlQXNTdXBwb3J0ZWRMYWJlbGFibGVFbGVtZW50KToKKyAgICAg
ICAgKiBodG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxM
ZWdlbmRFbGVtZW50Ojp2aXJ0dWFsRm9ybSk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpoYXNGYWxsYmFja0NvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAgICAg
ICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
cHRHcm91cEVsZW1lbnQ6OnJlY2FsY1NlbGVjdE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdEdyb3VwRWxlbWVudDo6b3duZXJTZWxlY3RFbGVtZW50KToKKyAgICAgICAgKiBodG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVt
ZW50OjpzZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjppbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6b3duZXJEYXRhTGlzdEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVu
dGVkVG9SZXNwZWN0R3JvdXBMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudDo6aXNEaXNhYmxlZEZvcm1Db250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRp
b25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KToKKyAgICAgICAgKiBodG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkUGx1Z0luc0Zyb21O
b2RlTGlzdE1hdGNoaW5nUGx1Z0luT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRN
TFNjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6
OnNldFRleHQpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om5leHRWYWxpZEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZUxpc3RCb3hT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hP
bkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlz
dEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RlZElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RPcHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsaXN0VG9PcHRpb25JbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVzZWxlY3RJdGVtc1dp
dGhvdXRWYWxpZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpz
YXZlRm9ybUNvbnRyb2xTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6c2VhcmNoT3B0aW9uc0ZvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpyZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2VsZWN0ZWRMaXN0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OmFjY2Vzc0tleVNldFNlbGVjdGVkSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxlbmd0aCk6CisgICAgICAg
ICogaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291
cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTb3VyY2VF
bGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNDbGlja2FibGVDb250cm9sKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTdW1tYXJ5RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
ICogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZUVsZW1lbnQ6OmNhcHRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUGFydEVsZW1lbnQ6OmZpbmRQYXJlbnRU
YWJsZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KToKKyAgICAgICAgKiBodG1s
L0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZVJvd3NDb2xsZWN0aW9uOjpyb3dBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVS
b3dzQ29sbGVjdGlvbjo6bGFzdFJvdyk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlubmVy
VGV4dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uRm9ySW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmluZGV4Rm9yUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlV2l0
aEhhcmRMaW5lQnJlYWtzKToKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6c2V0VGV4dCk6CisgICAgICAgICog
aHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0Vs
ZW1lbnQ6Om1lZGlhRWxlbWVudCk6CisgICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAg
ICAgICAqIGh0bWwvSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6
c2hvdWxkU3VibWl0SW1wbGljaXRseSk6CisgICAgICAgICogaHRtbC9NZWRpYURvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0
bWwvUmFkaW9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6
OmhhbmRsZUtleWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6
aXNLZXlib2FyZEZvY3VzYWJsZSk6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJ
bXBsaWNpdGx5KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNJbXBsaWVkRW5kVGFnKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2hMYXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6b3duZXJEb2N1bWVudEZvckN1cnJlbnRO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVy
U2l0ZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmlzU2NvcGVNYXJrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE5hbWVzOjppc1RhYmxlU2NvcGVNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE5hbWVzOjppc1NlbGVjdFNjb3BlTWFya2VyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1M
VHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
U3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpyZXNl
dEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NDaGFyYWN0ZXJCdWZmZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0luc2Vy
dGlvblBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc0FjdGl2ZUluc2VydGlvblBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcmVudE5vZGVGb3JEaXN0cmlidXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6cGFyZW50RWxlbWVudEZvckRpc3RyaWJ1dGlvbik6CisgICAgICAgICogaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
cmVudE1lZGlhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OmNv
bnRhaW5zUmVsYXRlZFRhcmdldCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
c0FwcGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNBcHBsZUV2ZW50TGlz
dGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6Zm9yd2FyZEV2ZW50
KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvdHJhY2svVlRU
Q3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6Y29weVdlYlZUVE5vZGVUb0RPTVRy
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6VlRUQ3VlOjptYXJrRnV0dXJlQW5kUGFzdE5vZGVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50Ojphc3NlcnREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01BZ2VudDo6YXNzZXJ0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6cXVlcnlTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6cXVlcnlTZWxlY3RvckFsbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0Tm9kZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kSG9zdDo6ZGlzcGF0Y2hFdmVudEFzQ29udGV4dE1lbnVFdmVudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpmcmFtZUZvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yTm9uRG9jdW1l
bnRDb250ZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1l
bnRpbmdBZ2VudHNGb3JDb250ZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTm9k
ZUZpbmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOb2RlRmluZGVyOjpzZWFy
Y2hVc2luZ0RPTVRyZWVUcmF2ZXJzYWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTm9k
ZUZpbmRlcjo6c2VhcmNoVXNpbmdYUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JO
b2RlRmluZGVyOjpzZWFyY2hVc2luZ0NTU1NlbGVjdG9ycyk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JF
bGVtZW50SW5mbyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6aW5saW5lU3R5bGVTaGVl
dFRleHQpOgorICAgICAgICAqIGxvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmhhbmRsZUZhbGxiYWNr
Q29udGVudCk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2luKToKKyAgICAgICAgKiBsb2FkZXIv
VGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbUNhY2hl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbVNlc3Np
b25DYWNoZXMpOgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGhNTEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIG1h
dGhtbC9NYXRoTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTFNl
bGVjdEVsZW1lbnQ6OmdldFNlbGVjdGVkU2VtYW50aWNzQ2hpbGQpOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2V0VG9vbFRpcCk6CisgICAg
ICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dE1lbnVDb250cm9sbGVyOjptYXliZUNyZWF0ZUNvbnRleHRNZW51KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBh
Z2UvRE9NVGltZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6Omluc3RhbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OmZpcmVkKToKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRVbmRlck1vdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpjYW5Qcm9jZXNzRHJhZyk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVudCk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5k
bGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNTdWJtaXRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0YXJnZXRJc0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRE
cm9wWm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZURyYWdBbmRE
cm9wKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRh
cmdldE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5w
dXRFdmVudCk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6Om93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZUVsZW1lbnREZXNjZW5kaW5nRG93bkludG9G
cmFtZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZv
Y3VzYWJsZUVsZW1lbnRBY3Jvc3NGb2N1c1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q29udHJvbGxlcjo6ZmluZEVsZW1lbnRXaXRoRXhhY3RUYWJJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpuZXh0RWxlbWVudFdpdGhHcmVhdGVyVGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
cHJldmlvdXNFbGVtZW50V2l0aExvd2VyVGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9j
dXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpjbGVhclNlbGVjdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29u
dHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseSk6CisgICAgICAgICogcGFnZS9GcmFt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9y
cyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9BbmNo
b3IpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAgICAgKiBwYWdlL1NwYXRp
YWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ2FuZGlkYXRlOjpGb2N1
c0NhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxhYmxlRW5jbG9zaW5nQm94T3JQYXJlbnRGcmFtZUZvck5vZGVJ
bkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5TY3JvbGxJbkRpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjphcmVFbGVtZW50c09uU2FtZUxpbmUpOgorICAgICAgICAqIHBhZ2UvaW9zL0Zy
YW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JSZXNwb25kaW5nVG9DbGlja0V2
ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMpOgorICAgICAgICAq
IHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQ6OnNldElubmVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojpz
ZXRJbm5lck5vblNoYXJlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6
dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVu
Y2F0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6bWVkaWFTdXBwb3J0c0Z1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxsc2Ny
ZWVuRm9yVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6bWVkaWFJc1Zp
ZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmlubmVyRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppbm5lck5vblNoYXJlZEVsZW1lbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cmVzaXplVGV4dFBlcm1pdHRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNpemVzTG9naWNhbFdpZHRoVG9GaXRD
b250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwbGFuQ291bnRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRldGFp
bHNNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGV0YWlsc01hcmtlcjo6aXNP
cGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1
Z2luSW5kaWNhdG9yRXZlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6
dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50QXJlYUVsZW1lbnRGb2N1c1JpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2U6OmltYWdlTWFwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RU
b1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlc2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNS
ZXN0YXJ0ZWRQbHVnaW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWFycXVlZTo6bWFycXVlZVNwZWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0ZWRPcHRpb25Db3VudCk6CisgICAgICAg
IChSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKToKKyAgICAgICAgKFJlbmRlck1l
bnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbik6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6aXRl
bVRleHQpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0VuYWJsZWQpOgorICAgICAg
ICAoUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0xhYmVsKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0
OjppdGVtSXNTZWxlY3RlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1ldGVyOjptZXRlckVsZW1lbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTmFtZWRGbG93VGhyZWFkOjppc0NoaWxkQWxsb3dlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFk
ZFBERlVSTFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzaG91bGRSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnVw
ZGF0ZURyYWdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmdldFVuY2Fj
aGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpnZXRUZXh0
RGVjb3JhdGlvbkNvbG9ycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpwcm9ncmVzc0VsZW1lbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZTo6Y29udmVydFN0eWxlTG9naWNhbFdpZHRoVG9Db21wdXRlZFdpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjb252ZXJ0U3R5bGVMb2dpY2FsSGVpZ2h0VG9Db21wdXRl
ZEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhcnNlQ29sU3BhbkZyb21ET00pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYXJzZVJvd1NwYW5Gcm9tRE9NKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNG
b2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc1ByZXNzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250cm9sKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0hvdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRNZWRpYUVsZW1lbnRGcm9t
UmVuZGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Om5vZGVIYXNDbGFzcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRW1w
dHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJl
ZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0
b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3Npemlu
Z0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpjb250YWluZXJD
b250YWluc09uZU9mVGFncyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6aXNDaGls
ZEFsbG93ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0dyYWRpZW50U3RvcDo6Z3JhZGllbnRF
bGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lcjo6Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJp
bmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KToKKyAgICAgICAgKiBzdHlsZS9T
dHlsZVJlc29sdmVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjppbnZhbGlkYXRl
V2hpdGVzcGFjZU9ubHlUZXh0U2libGluZ3NBZnRlckF0dGFjaElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjphdHRhY2hDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6YXR0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
ZGV0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0
YWNoQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnJlc29sdmVTaGFkb3dUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlVHJlZSk6CisgICAgICAgICogc3Zn
L1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBzdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FsdEdseXBoRWxlbWVudDo6aGFzVmFsaWRHbHlwaEVsZW1lbnRz
KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6
CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Rv
Y3VtZW50Ojpyb290RWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6aXNPdXRlcm1vc3RTVkdTVkdFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6Om93bmVyU1ZHRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdFbGVtZW50Ojp2aWV3cG9ydEVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdG
b250RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlw
aFNlbGVjdGlvbik6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OmFzc29jaWF0ZWRGb250RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6
CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGb250RmFjZVNyY0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgICog
c3ZnL1NWR0dseXBoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1l
bnQ6OmludmFsaWRhdGVHbHlwaENhY2hlKToKKyAgICAgICAgKiBzdmcvU1ZHSEtlcm5FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0hLZXJuRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0hLZXJuRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAg
ICAqIHN2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0
aENvbnRleHQ6OmRldGVybWluZVZpZXdwb3J0KToKKyAgICAgICAgKiBzdmcvU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50RWxl
bWVudDo6Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NWR0xvY2F0
YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1ZpZXdwb3J0RWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMb2NhdGFibGU6OmdldFRyYW5zZm9ybVRvRWxlbWVudCk6CisgICAgICAg
ICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVs
ZW1lbnQ6OnBhdGhFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6
bm90aWZ5UGFyZW50T2ZQYXRoQ2hhbmdlKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0aERl
cGVuZGVuY2llcyk6CisgICAgICAgICogc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50Ojpjb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMp
OgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3JhZGllbnRBdHRyaWJ1
dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTVkdFbGVtZW50OjpzZXR1cEluaXRpYWxWaWV3KToKKyAgICAgICAgKiBzdmcvU1ZHVGV4
dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxl
bWVudDo6ZWxlbWVudEZyb21SZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcEluc3RhbmNlVHJlZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdVc2VFbGVtZW50Ojp0b0NsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Vz
ZUVsZW1lbnQ6OmV4cGFuZFVzZUVsZW1lbnRzSW5TaGFkb3dUcmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1VzZUVsZW1lbnQ6OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKToKKyAg
ICAgICAgKiBzdmcvU1ZHVktlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZL
ZXJuRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZLZXJuRWxl
bWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jl
c291cmNlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVyKToKKyAgICAgICAg
KiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNo
YWRvd1Jvb3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dmlzaWJsZVBsYWNl
aG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2VsZWN0Q29sb3JJbkNvbG9y
Q2hvb3Nlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Ondhc0xhc3RDaGFuZ2VVc2Vy
RWRpdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OmlzU2VsZWN0UG9wdXBWaXNpYmxlKToKKyAgICAgICAgKiB0ZXN0aW5nL2pz
L1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6Omlu
amVjdEludGVybmFsc09iamVjdCk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpvcGVuKToKKyAgICAgICAgKiB4bWwv
WFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmV4cGFuZGVkTmFt
ZUxvY2FsUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFuZzo6ZXZhbHVhdGUp
OgorICAgICAgICAqIHhtbC9YUGF0aE5vZGVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OnNvcnRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Tm9kZVNldDo6c29ydCk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6ZmluZFJvb3ROb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpOb2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KToKKyAgICAgICAgKiB4bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorCisyMDE0LTEwLTAxICBDaHJpc3RvcGhl
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNh
c3Q8PigpIGZvciBGaWxlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzczMTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCmluZGV4IDNjMDczOWRhMDk4NjAzOTBlOTlj
NzI1NjY5MTAwYWRkY2ZlNTNhYmYuLjRkNzYyMjIyNDY1Y2RjZTM2OWFiODhlMmJiMmU0ZjA0OGI4
ZjhlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNC0xMC0wMSAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBpczw+KFQq
KSBmdW5jdGlvbiBkbyBhIG51bGwgY2hlY2sgb24gdGhlIHBvaW50ZXIgYXJndW1lbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzMworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhdmUgaXM8PihUKikg
ZnVuY3Rpb24gZG8gYSBudWxsIGNoZWNrIG9uIHRoZSBhcmd1bWVudCBpbnN0ZWFkIG9mIGEKKyAg
ICAgICAgc2ltcGxlIGFzc2VydGlvbi4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgMiByZWFzb25zOgor
ICAgICAgICAxLiBJdCBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBkb3duY2FzdDw+KFQqKSwgd2hp
Y2ggd2lsbCBzdWNjZWVkIGV2ZW4KKyAgICAgICAgICAgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVs
bHB0ci4KKyAgICAgICAgMi4gSXQgc2ltcGxpZmllcyB0aGUgY29kZSBhIGJpdCBhcyBpdCBnZXRz
IHJpZCBvZiBhIGxvdCBvZiBleHBsaWNpdAorICAgICAgICAgICBudWxsIGNoZWNrcy4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5tbToKKyAgICAgICAgKFdl
YkNocm9tZUNsaWVudElPUzo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKToKKwogMjAxNC0wOS0yOSAg
RGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVtb3Zl
IENvcmVMb2NhdGlvbiB3b3JrYXJvdW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNGIxMDlhYjQ1MzE3
MmE5ZDc5OGIxNDY4YjRkYzEzZmYyMmFiNTNhZi4uZmQ2NDBlMWIwOTU0NGY4MTViZmM3MjExNWQ0
NmYxZmQ4MGIzNzcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE0LTEw
LTAxICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBIYXZl
IGlzPD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVsbCBjaGVjayBvbiB0aGUgcG9pbnRlciBhcmd1bWVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2ZSBp
czw+KFQqKSBmdW5jdGlvbiBkbyBhIG51bGwgY2hlY2sgb24gdGhlIGFyZ3VtZW50IGluc3RlYWQg
b2YgYQorICAgICAgICBzaW1wbGUgYXNzZXJ0aW9uLiBUaGlzIG1ha2VzIHNlbnNlIGZvciAyIHJl
YXNvbnM6CisgICAgICAgIDEuIEl0IGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGRvd25jYXN0PD4o
VCopLCB3aGljaCB3aWxsIHN1Y2NlZWQgZXZlbgorICAgICAgICAgICBpZiB0aGUgYXJndW1lbnQg
aXMgYSBudWxscHRyLgorICAgICAgICAyLiBJdCBzaW1wbGlmaWVzIHRoZSBjb2RlIGEgYml0IGFz
IGl0IGdldHMgcmlkIG9mIGEgbG90IG9mIGV4cGxpY2l0CisgICAgICAgICAgIG51bGwgY2hlY2tz
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAg
ICAoV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVu
dDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6
dGV4dEZpZWxkRGlkRW5kRWRpdGluZyk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRleHRE
aWRDaGFuZ2VJblRleHRGaWVsZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRvVGV4dEZp
ZWxkQ29tbWFuZEZyb21FdmVudCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxs
QmVEZWxldGVkSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlk
Q2hhbmdlSW5UZXh0QXJlYSk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRp
b24ubW06CisgICAgICAgIChpbnB1dEVsZW1lbnRGcm9tRE9NRWxlbWVudCk6CisgICAgICAgIChz
ZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlJlbmRl
ckxheWVyLm1tOgorICAgICAgICAoK1tXZWJSZW5kZXJMYXllciBuYW1lRm9yTGF5ZXI6XSk6CisK
IDIwMTQtMTAtMDEgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMTM3MzA4PiBXZWJLaXQgc2hvdWxkIGJ1aWxkIG9uIE9TIFggWW9z
ZW1pdGUgZm9yIGV4dGVybmFsIHVzZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYWZhYzgyZmNkNzYz
MGUzNjBhNTM1ZDViNzI0Yjk1MDYxNWU1YmExMC4uNmYxYmUyZDg5NDU3OTJiODI2Nzg3NzM1ZmYw
MzMwMDNjMjliODJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE0LTEw
LTAxICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBIYXZl
IGlzPD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVsbCBjaGVjayBvbiB0aGUgcG9pbnRlciBhcmd1bWVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2ZSBp
czw+KFQqKSBmdW5jdGlvbiBkbyBhIG51bGwgY2hlY2sgb24gdGhlIGFyZ3VtZW50IGluc3RlYWQg
b2YgYQorICAgICAgICBzaW1wbGUgYXNzZXJ0aW9uLiBUaGlzIG1ha2VzIHNlbnNlIGZvciAyIHJl
YXNvbnM6CisgICAgICAgIDEuIEl0IGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGRvd25jYXN0PD4o
VCopLCB3aGljaCB3aWxsIHN1Y2NlZWQgZXZlbgorICAgICAgICAgICBpZiB0aGUgYXJndW1lbnQg
aXMgYSBudWxscHRyLgorICAgICAgICAyLiBJdCBzaW1wbGlmaWVzIHRoZSBjb2RlIGEgYml0IGFz
IGl0IGdldHMgcmlkIG9mIGEgbG90IG9mIGV4cGxpY2l0CisgICAgICAgICAgIG51bGwgY2hlY2tz
LgorCisgICAgICAgICogRE9NQ29yZUNsYXNzZXMuY3BwOgorICAgICAgICAoRE9NRWxlbWVudDo6
Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAqIERPTUhUTUxDbGFzc2VzLmNwcDoKKyAgICAgICAg
KERPTUhUTUxEb2N1bWVudDo6Ym9keSk6CisgICAgICAgIChET01IVE1MRG9jdW1lbnQ6OmZvcm1z
KToKKyAgICAgICAgKERPTUhUTUxFbGVtZW50OjppZE5hbWUpOgorICAgICAgICAoRE9NSFRNTEVs
ZW1lbnQ6OmlubmVyVGV4dCk6CisgICAgICAgIChET01IVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0
KToKKyAgICAgICAgKERPTUhUTUxGb3JtRWxlbWVudDo6YWN0aW9uKToKKyAgICAgICAgKERPTUhU
TUxGb3JtRWxlbWVudDo6bWV0aG9kKToKKyAgICAgICAgKERPTUhUTUxPcHRpb25FbGVtZW50Ojp0
ZXh0KToKKyAgICAgICAgKERPTUhUTUxPcHRpb25FbGVtZW50OjpsYWJlbCk6CisgICAgICAgIChE
T01IVE1MSW5wdXRFbGVtZW50Ojpmb3JtKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6
OmRpc2FibGVkKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnJlYWRPbmx5KToKKyAg
ICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFR5cGUpOgorICAgICAgICAoRE9NSFRNTElu
cHV0RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFs
dWUpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGb3JVc2VyKToKKyAg
ICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdCk6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVt
ZW50OjpzZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpzZXRT
ZWxlY3Rpb25FbmQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRW5k
KToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OmlzVGV4dEZpZWxkKToKKyAgICAgICAg
KERPTUhUTUxJbnB1dEVsZW1lbnQ6OnJlY3RPblNjcmVlbik6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpyZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2UpOgorICAgICAgICAoRE9NSFRNTElu
cHV0RWxlbWVudDo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50
OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2Zp
bGxlZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50Ojppc1VzZXJFZGl0ZWQpOgorICAg
ICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MVGV4
dEFyZWFFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50Ojpz
ZXRWYWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3QpOgorICAg
ICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6aXNVc2VyRWRpdGVkKToKKyAgICAgICAgKiBX
ZWJGcmFtZS5jcHA6CisgICAgICAgIChmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KToKKyAgICAg
ICAgKGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KToKKyAgICAgICAgKFdlYkZyYW1lOjplbGVt
ZW50V2l0aE5hbWUpOgorCiAyMDE0LTA5LTMwICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICBHZW5lcmFsaXplIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBzdXBw
b3J0IHRvIGFsbCB0eXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDI1ZGNiMGRkYWJiOWU2NWE4MTJjZGYxM2Ew
N2MxNmMwZDNlNjA4NWQuLmRmNDlmZWIyOWE0ZmViZjJkY2E3Y2I3OTUzODYxMzM2MDgxYzZhNjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxNC0xMC0wMSAgQ2hyaXN0b3BoZSBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBpczw+KFQqKSBmdW5jdGlvbiBk
byBhIG51bGwgY2hlY2sgb24gdGhlIHBvaW50ZXIgYXJndW1lbnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhdmUgaXM8PihUKikgZnVuY3Rpb24gZG8g
YSBudWxsIGNoZWNrIG9uIHRoZSBhcmd1bWVudCBpbnN0ZWFkIG9mIGEKKyAgICAgICAgc2ltcGxl
IGFzc2VydGlvbi4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgMiByZWFzb25zOgorICAgICAgICAxLiBJ
dCBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBkb3duY2FzdDw+KFQqKSwgd2hpY2ggd2lsbCBzdWNj
ZWVkIGV2ZW4KKyAgICAgICAgICAgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVsbHB0ci4KKyAgICAg
ICAgMi4gSXQgc2ltcGxpZmllcyB0aGUgY29kZSBhIGJpdCBhcyBpdCBnZXRzIHJpZCBvZiBhIGxv
dCBvZiBleHBsaWNpdAorICAgICAgICAgICBudWxsIGNoZWNrcy4KKworICAgICAgICAqIFNoYXJl
ZC9XZWJSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZW5kZXJPYmplY3Q6
OldlYlJlbmRlck9iamVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6Om1lZGlhVHlwZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpoYW5k
bGVFdmVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmZvY3VzZWRFbGVt
ZW50Q2hhbmdlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVs
ZERpZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dGV4
dEZpZWxkRGlkRW5kRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xp
ZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRv
ckNsaWVudDo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZTo6Y29udGFpbnNBbnlGb3JtRWxlbWVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZTo6Y29udGFpbnNBbnlGb3JtQ29udHJvbHMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmRG9jdW1lbnRGb3JQ
cmludGluZ0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGV0ZXJtaW5lUHJpbWFy
eVNuYXBzaG90dGVkUGx1Z0luKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmJsdXJBc3Npc3RlZE5vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVWYWx1ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1BY3Rpb25PbkVsZW1lbnQpOgorICAgICAgICAoV2Vi
S2l0Ojppc0Fzc2lzdGFibGVOb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24pOgorCiAyMDE0LTEwLTAxICBNYXJrIFJvd2UgIDxtcm93ZUBh
cHBsZS5jb20+CiAKICAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzNzMwOD4gV2ViS2l0
IHNob3VsZCBidWlsZCBvbiBPUyBYIFlvc2VtaXRlIGZvciBleHRlcm5hbCB1c2VycwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmggYi9Tb3VyY2UvV1RGL3d0Zi9UeXBlQ2Fz
dHMuaAppbmRleCA2Zjc2YzhjZDBjYzZlNzk1YzRlMTUwODlmZmM1NDNhN2JhNTBkYmQ2Li4zYzIw
MzQxNTBjYTNmNjZhZGVhNGQ2YmI2ZTVlZjllYWY3MjNjM2QzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9UeXBlQ2FzdHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UeXBlQ2FzdHMuaApAQCAt
NjAsOSArNjAsOCBAQCBpbmxpbmUgYm9vbCBpcyhBcmdUeXBlJiBzb3VyY2UpCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBlbmFtZSBBcmdUeXBlPgogaW5saW5lIGJvb2wgaXMo
QXJnVHlwZSogc291cmNlKQogewotICAgIEFTU0VSVChzb3VyY2UpOwogICAgIHN0YXRpY19hc3Nl
cnQoIXN0ZDo6aXNfYmFzZV9vZjxFeHBlY3RlZFR5cGUsIEFyZ1R5cGU+Ojp2YWx1ZSwgIlVubmVj
ZXNzYXJ5IHR5cGUgY2hlY2siKTsKLSAgICByZXR1cm4gVHlwZUNhc3RUcmFpdHM8Y29uc3QgRXhw
ZWN0ZWRUeXBlLCBjb25zdCBBcmdUeXBlPjo6aXNPZlR5cGUoKnNvdXJjZSk7CisgICAgcmV0dXJu
IHNvdXJjZSAmJiBUeXBlQ2FzdFRyYWl0czxjb25zdCBFeHBlY3RlZFR5cGUsIGNvbnN0IEFyZ1R5
cGU+Ojppc09mVHlwZSgqc291cmNlKTsKIH0KIAogLy8gU2FmZSBkb3duY2FzdGluZyBmdW5jdGlv
bnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3Bw
CmluZGV4IDAxMjhmNTBkMjkyOWY1MTI1ZjhiMGIxMzJkZWJhZDdlZWE4YzYzOGEuLjBlNDZhYzYy
NjUwZjZmZmE0N2Y1M2NiYTdhZDkyZjBlN2ZhMjZhZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCkBAIC02OCw4ICs2OCw4IEBAIElEQkZh
Y3Rvcnk6On5JREJGYWN0b3J5KCkKIG5hbWVzcGFjZSB7CiBzdGF0aWMgYm9vbCBpc0NvbnRleHRW
YWxpZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIEFTU0VSVChpczxE
b2N1bWVudD4oY29udGV4dCkgfHwgY29udGV4dC0+aXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKLSAg
ICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CisgICAgQVNTRVJUKGlzPERvY3VtZW50Pigq
Y29udGV4dCkgfHwgY29udGV4dC0+aXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKKyAgICBpZiAoaXM8
RG9jdW1lbnQ+KCpjb250ZXh0KSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwogICAgICAgICByZXR1cm4gZG9jdW1lbnQuZnJhbWUo
KSAmJiBkb2N1bWVudC5wYWdlKCkgJiYgKCFkb2N1bWVudC5wYWdlKCktPnVzZXNFcGhlbWVyYWxT
ZXNzaW9uKCkgfHwgU2NoZW1lUmVnaXN0cnk6OmFsbG93c0RhdGFiYXNlQWNjZXNzSW5Qcml2YXRl
QnJvd3NpbmcoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKS0+cHJvdG9jb2woKSkpOwogICAgIH0K
QEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIGJvb2wgaXNDb250ZXh0VmFsaWQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKIHN0YXRpYyBTdHJpbmcgZ2V0SW5kZXhlZERCRGF0YWJhc2VQ
YXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGlzQ29u
dGV4dFZhbGlkKGNvbnRleHQpKTsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7Cisg
ICAgaWYgKGlzPERvY3VtZW50PigqY29udGV4dCkpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKICAgICAgICAgcmV0dXJuIGRvY3Vt
ZW50LnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCkuaW5kZXhlZERCRGF0YWJhc2VQYXRo
KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggODM5ZmE4NzIz
NjZiZGU2ZTQzNzA2MDUxMmFkMjYxZjRjZDA4MjVjMi4uYTI3Mjg1MmRjZjY4NzAwNWU0OGYwY2Ey
NzMzY2U3OGRmMDAwZjMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCkBAIC01
NSw3ICs1NSw3IEBAIFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+IFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoU2NyaXB0CiAgICAgQVNTRVJUKGNvbnRleHQp
OwogICAgIEFTU0VSVChjbGllbnQpOwogCi0gICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPihj
b250ZXh0KSkgeworICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQpKSB7CiAg
ICAgICAgIFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSA9IGRvd25jYXN0PFdv
cmtlckdsb2JhbFNjb3BlPigqY29udGV4dCk7CiAgICAgICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxv
b3AgPSB3b3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS5ydW5Mb29wKCk7CiAgICAgICAgIFN0cmlu
Z0J1aWxkZXIgbW9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAKaW5kZXggOThiZGNlMmZkM2RkYmU3MjkwYjM3ZGQzOTEzMDVkZmI3ZTBmZjA0
My4uZmQ0Nzc5NmQxM2FiOTI0ZTk4MjA3ZWYxZDI0OGQ1OGM3OGIxY2JmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKQEAgLTIzOSw3ICsy
MzksNyBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHByb3RvY29scywgRXhjZQogCiAgICAgLy8gRklYTUU6IENvbnZlcnQg
dGhpcyB0byBjaGVjayB0aGUgaXNvbGF0ZWQgd29ybGQncyBDb250ZW50IFNlY3VyaXR5IFBvbGlj
eSBvbmNlIHdlYmtpdC5vcmcvYi8xMDQ1MjAgaXMgc29sdmVkLgogICAgIGJvb2wgc2hvdWxkQnlw
YXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2U7Ci0gICAgaWYgKGlzPERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKSB7CisgICAgaWYgKGlzPERvY3VtZW50
Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAg
ICAgIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSA9IGRvY3VtZW50
LmZyYW1lKCktPnNjcmlwdCgpLnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBv
bGljeSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKaW5kZXggZjM2NmEyZDVmYTY4NzI0YjE5ODYw
YzMwNzllYzk2ODAyYmVjMzcyZC4uYzczMDQ2MWRjZTkyMGEzYWE5MDM4ODg2ODAwNmNmMzRkNmI2
MDZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldEhhbmRzaGFrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKQEAgLTE5Niw3ICsxOTYsNyBAQCBDU3RyaW5nIFdlYlNv
Y2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoYWtlTWVzc2FnZSgpIGNvbnN0CiAgICAgICAgIGZp
ZWxkcy5hcHBlbmQoIlNlYy1XZWJTb2NrZXQtUHJvdG9jb2w6ICIgKyBtX2NsaWVudFByb3RvY29s
KTsKIAogICAgIFVSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7
Ci0gICAgaWYgKGlzPERvY3VtZW50PihtX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPERvY3VtZW50
PigqbV9jb250ZXh0KSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKm1fY29udGV4dCk7CiAgICAgICAgIFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSgmZG9jdW1lbnQsIHVybCk7CiAgICAgICAgIGlmICghY29va2ll
LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCmluZGV4IDZkMmYzMmNiODEwZjQ0N2Y2Y2FjNDk1MTFmYzJmNzE4MDBiMTVhNDguLjU3
ZWEwNmZhOTI3NDdiNjRjZTk2ZDIxMmExMjk0MTE0NDcxYWYwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMTc2LDcgKzE3Niw3IEBA
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQ
YWdlKGNvbnN0IFBhZ2UqIHBhZ2UpCiAgICAgLy8gZ2V0IHRoZSBmb2N1c2VkIG5vZGUgaW4gdGhl
IHBhZ2UKICAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50ID0gcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKICAgICBFbGVtZW50KiBmb2N1
c2VkRWxlbWVudCA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKLSAgICBpZiAo
Zm9jdXNlZEVsZW1lbnQgJiYgaXM8SFRNTEFyZWFFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkpCisg
ICAgaWYgKGlzPEhUTUxBcmVhRWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKQogICAgICAgICByZXR1
cm4gZm9jdXNlZEltYWdlTWFwVUlFbGVtZW50KGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4oZm9j
dXNlZEVsZW1lbnQpKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IGZvY3VzZWRE
b2N1bWVudC0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShmb2N1c2VkRWxlbWVudCA/IHN0
YXRpY19jYXN0PE5vZGUqPihmb2N1c2VkRWxlbWVudCkgOiBmb2N1c2VkRG9jdW1lbnQpOwpAQCAt
Mjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNy
ZWF0ZUZyb21SZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyCiAgICAgICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5U1ZHUm9vdDo6Y3JlYXRlKHJlbmRlcmVyKTsKICAgICAKICAgICAvLyBTZWFy
Y2ggZmllbGQgYnV0dG9ucwotICAgIGlmIChub2RlICYmIGlzPEVsZW1lbnQ+KG5vZGUpICYmIGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1NlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudCgp
KQorICAgIGlmIChpczxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSku
aXNTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbjo6Y3JlYXRlKHJlbmRlcmVyKTsKICAgICAK
ICAgICBpZiAocmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkgewpAQCAtMzg2LDcgKzM4Niw3
IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKE5vZGUq
IG5vZGUpCiAKICAgICBib29sIGluc2lkZU1ldGVyRWxlbWVudCA9IGZhbHNlOwogI2lmIEVOQUJM
RShNRVRFUl9FTEVNRU5UKQotICAgIGluc2lkZU1ldGVyRWxlbWVudCA9IGlzPEhUTUxNZXRlckVs
ZW1lbnQ+KG5vZGUtPnBhcmVudEVsZW1lbnQoKSk7CisgICAgaW5zaWRlTWV0ZXJFbGVtZW50ID0g
aXM8SFRNTE1ldGVyRWxlbWVudD4oKm5vZGUtPnBhcmVudEVsZW1lbnQoKSk7CiAjZW5kaWYKICAg
ICAKICAgICBpZiAoIWluQ2FudmFzU3VidHJlZSAmJiAhaXNIaWRkZW4gJiYgIWluc2lkZU1ldGVy
RWxlbWVudCkKQEAgLTY1Myw3ICs2NTMsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZU1l
bnVPcGVuZWQoTm9kZSogbm9kZSkKICAgICAKIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlTGl2
ZVJlZ2lvbkNyZWF0ZWQoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJl
bmRlcmVyKCkgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9k
ZSkgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CkBAIC05MTcsNyArOTE3LDcg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW4KICAgICAgICAgaGFuZGxlQXJpYVJvbGVDaGFuZ2Vk
KGVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGFsdEF0dHIgfHwgYXR0ck5hbWUg
PT0gdGl0bGVBdHRyKQogICAgICAgICB0ZXh0Q2hhbmdlZChlbGVtZW50KTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBmb3JBdHRyICYmIGlzPEhUTUxMYWJlbEVsZW1lbnQ+KGVsZW1lbnQpKQor
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGZvckF0dHIgJiYgaXM8SFRNTExhYmVsRWxlbWVudD4o
KmVsZW1lbnQpKQogICAgICAgICBsYWJlbENoYW5nZWQoZWxlbWVudCk7CiAKICAgICBpZiAoIWF0
dHJOYW1lLmxvY2FsTmFtZSgpLnN0cmluZygpLnN0YXJ0c1dpdGgoImFyaWEtIikpCkBAIC05NDcs
OCArOTQ3LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW4KIAogdm9pZCBBWE9iamVjdENhY2hl
OjpsYWJlbENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoaXM8SFRNTExh
YmVsRWxlbWVudD4oZWxlbWVudCkpOwotICAgIEhUTUxFbGVtZW50KiBjb3JyZXNwb25kaW5nQ29u
dHJvbCA9IGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KGVsZW1lbnQpLT5jb250cm9sKCk7Cisg
ICAgQVNTRVJUKGlzPEhUTUxMYWJlbEVsZW1lbnQ+KCplbGVtZW50KSk7CisgICAgSFRNTEVsZW1l
bnQqIGNvcnJlc3BvbmRpbmdDb250cm9sID0gZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4oKmVs
ZW1lbnQpLmNvbnRyb2woKTsKICAgICB0ZXh0Q2hhbmdlZChjb3JyZXNwb25kaW5nQ29udHJvbCk7
CiB9CiAKQEAgLTEwMzAsNyArMTAzMCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtl
ckRhdGFGb3JWaXNpYmxlUG9zaXRpb24oVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJECiBjb25z
dCBFbGVtZW50KiBBWE9iamVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQoY29uc3QgTm9k
ZSogbm9kZSkKIHsKICAgICBjb25zdCBFbGVtZW50KiByZXN1bHQgPSBub2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KCk7Ci0gICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KG5v
ZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJlbnRFbGVtZW50KCk7Cisg
ICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KCpub2RlKSA/IGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpOwogCiAgICAgZm9yICg7IGVs
ZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgaWYg
KG5vZGVJc1RleHRDb250cm9sKGVsZW1lbnQpKQpAQCAtMTA3Myw3ICsxMDczLDcgQEAgYm9vbCBp
c05vZGVBcmlhVmlzaWJsZShOb2RlKiBub2RlKQogICAgIC8vIFRvIGRldGVybWluZSBpZiBhIG5v
ZGUgaXMgQVJJQSB2aXNpYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBwYXJlbnQgaGllcmFyY2h5
IHRvIHNlZSBpZiBhbnlvbmUgc3BlY2lmaWVzCiAgICAgLy8gYXJpYS1oaWRkZW4gZXhwbGljaXRs
eS4KICAgICBmb3IgKE5vZGUqIHRlc3ROb2RlID0gbm9kZTsgdGVzdE5vZGU7IHRlc3ROb2RlID0g
dGVzdE5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8RWxlbWVudD4odGVzdE5v
ZGUpKSB7CisgICAgICAgIGlmIChpczxFbGVtZW50PigqdGVzdE5vZGUpKSB7CiAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFIaWRkZW5WYWx1ZSA9IGRvd25jYXN0PEVsZW1lbnQ+
KCp0ZXN0Tm9kZSkuZmFzdEdldEF0dHJpYnV0ZShhcmlhX2hpZGRlbkF0dHIpOwogICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFyaWFIaWRkZW5WYWx1ZSwgImZhbHNlIikpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCmluZGV4IGYwMzg4
N2NhNmEzNWQzNmRiNTIzYjc4YjRmNWJhMGUyNGM1NmRmYzYuLmRjYTBlYTZlYzZmODkyMTAzZGI5
YjE5ZGY4MjIwZmExOTVhZTNiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCkBAIC02MSw5ICs2
MSw2IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24+IEFjY2Vzc2liaWxp
dHlMaXN0Qm94T3B0aW9uOjpjcmVhdGUoKQogICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJv
eE9wdGlvbjo6aXNFbmFibGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fb3B0aW9uRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAogICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVt
ZW50PihtX29wdGlvbkVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTc4LDkg
Kzc1LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6aXNFbmFibGVkKCkgY29u
c3QKICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmlzU2VsZWN0ZWQoKSBj
b25zdAogewotICAgIGlmICghbV9vcHRpb25FbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PihtX29wdGlvbkVsZW1lbnQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEzMSw5ICsxMjUsNiBAQCBib29sIEFjY2Vzc2liaWxp
dHlMaXN0Qm94T3B0aW9uOjpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiAg
ICAgCiBib29sIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjpjYW5TZXRTZWxlY3RlZEF0dHJp
YnV0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX29wdGlvbkVsZW1lbnQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PihtX29wdGlvbkVs
ZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0xNTYsMTAgKzE0NywxMCBA
QCBTdHJpbmcgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OnN0cmluZ1ZhbHVlKCkgY29uc3QK
ICAgICBpZiAoIWFyaWFMYWJlbC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGFyaWFMYWJlbDsK
ICAgICAKLSAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KG1fb3B0aW9uRWxlbWVudCkpCisg
ICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KSkKICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS50ZXh0
KCk7CiAgICAgCi0gICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KG1fb3B0aW9uRWxlbWVu
dCkpCisgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCptX29wdGlvbkVsZW1lbnQpKQog
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKm1fb3B0aW9uRWxl
bWVudCkuZ3JvdXBMYWJlbFRleHQoKTsKICAgICAKICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0y
MDIsMTAgKzE5MywxMCBAQCBIVE1MU2VsZWN0RWxlbWVudCogQWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb246Omxpc3RCb3hPcHRpb25QYXJlbnROb2RlKCkgY29uc3QKICAgICBpZiAoIW1fb3B0aW9u
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KG1fb3B0aW9uRWxlbWVudCkpCisgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50
PigqbV9vcHRpb25FbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5vd25lclNlbGVjdEVsZW1lbnQoKTsKIAotICAgIGlm
IChpczxIVE1MT3B0R3JvdXBFbGVtZW50PihtX29wdGlvbkVsZW1lbnQpKQorICAgIGlmIChpczxI
VE1MT3B0R3JvdXBFbGVtZW50PigqbV9vcHRpb25FbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCptX29wdGlvbkVsZW1lbnQpLm93bmVyU2VsZWN0
RWxlbWVudCgpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCmlu
ZGV4IGVlMzVlZmFlYmE2N2QxMDA5ZDRkNjJlMDFmYmIwNTE4Y2NjYWMzMjYuLjg4N2JiOTliNGZm
N2ViMWQ2ODBmOGE4MWY2NTUyNTViYjQ1ODM3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCkBA
IC0yNzQsNyArMjc0LDcgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lbGluZTo6Y3JlYXRlKFJlbmRlck9iamVjdCoKIFN0cmluZyBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgTm9k
ZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG5vZGUpKQorICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBmbG9hdCB0aW1lID0gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcApp
bmRleCAzNTBkYTBkYTVmZjlkNTFlZDBkYmRlNWM1YTE1ZTA4MjU5YjA2Y2Y3Li40NjlhZmNhYTAx
NDEyZTVmNjY0M2JlY2E2ZWRkN2Q1MDA1YjQxMmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcApA
QCAtNzAsNyArNzAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwOjpjb21wdXRl
QWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiAKIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9w
dGlvbiogQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXA6Om1lbnVMaXN0T3B0aW9uQWNjZXNzaWJp
bGl0eU9iamVjdChIVE1MRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIWVsZW1l
bnQgfHwgIWlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSB8fCAhZWxlbWVudC0+aW5SZW5k
ZXJlZERvY3VtZW50KCkpCisgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkg
fHwgIWVsZW1lbnQtPmluUmVuZGVyZWREb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGRvY3VtZW50KCktPmF4T2Jq
ZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoTWVudUxpc3RPcHRpb25Sb2xlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5j
cHAKaW5kZXggYmRiZTM0NGUwMWU3YzE0M2Y4OWM2MTBmMTkxYTc2OGFiOTIxYWY5Mi4uMjkwZTVi
ZWIxMmMzZTU0YjU1MzdiMDcwMWJiNzllODJlNTdlNjMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAg
LTI5Miw3ICsyOTIsNyBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgICAgICByZXR1cm4gU3RhdGljVGV4
dFJvbGU7CiAgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShidXR0b25UYWcpKQogICAgICAgICBy
ZXR1cm4gYnV0dG9uUm9sZVR5cGUoKTsKLSAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obm9k
ZSgpKSkgeworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKSkgewogICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpu
b2RlKCkpOwogICAgICAgICBpZiAoaW5wdXQuaXNDaGVja2JveCgpKQogICAgICAgICAgICAgcmV0
dXJuIENoZWNrQm94Um9sZTsKQEAgLTMxNSw3ICszMTUsNyBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAg
ICAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50Pigqbm9kZSgpKTsKICAgICAgICAgcmV0dXJuIHNlbGVjdEVsZW1lbnQubXVsdGlw
bGUoKSA/IExpc3RCb3hSb2xlIDogUG9wVXBCdXR0b25Sb2xlOwogICAgIH0KLSAgICBpZiAoaXM8
SFRNTFRleHRBcmVhRWxlbWVudD4obm9kZSgpKSkKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxl
bWVudD4oKm5vZGUoKSkpCiAgICAgICAgIHJldHVybiBUZXh0QXJlYVJvbGU7CiAgICAgaWYgKGhl
YWRpbmdMZXZlbCgpKQogICAgICAgICByZXR1cm4gSGVhZGluZ1JvbGU7CkBAIC0zMjMsOSArMzIz
LDkgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWlu
ZUFjY2Vzc2liaWxpdHlSb2xlKCkKICAgICAgICAgcmV0dXJuIERpdlJvbGU7CiAgICAgaWYgKG5v
ZGUoKS0+aGFzVGFnTmFtZShwVGFnKSkKICAgICAgICAgcmV0dXJuIFBhcmFncmFwaFJvbGU7Ci0g
ICAgaWYgKGlzPEhUTUxMYWJlbEVsZW1lbnQ+KG5vZGUoKSkpCisgICAgaWYgKGlzPEhUTUxMYWJl
bEVsZW1lbnQ+KCpub2RlKCkpKQogICAgICAgICByZXR1cm4gTGFiZWxSb2xlOwotICAgIGlmIChp
czxFbGVtZW50Pihub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKCkpLmlzRm9jdXNh
YmxlKCkpCisgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+
KCpub2RlKCkpLmlzRm9jdXNhYmxlKCkpCiAgICAgICAgIHJldHVybiBHcm91cFJvbGU7CiAgICAg
CiAgICAgcmV0dXJuIFVua25vd25Sb2xlOwpAQCAtNDQyLDcgKzQ0Miw3IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QK
IGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbnZhc0hhc0ZhbGxiYWNrQ29udGVudCgp
IGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUg
fHwgIWlzPEhUTUxDYW52YXNFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEhUTUxDYW52YXNF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxDYW52YXNFbGVt
ZW50JiBjYW52YXNFbGVtZW50ID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KCpub2RlKTsK
ICAgICAvLyBJZiBpdCBoYXMgYW55IGNoaWxkcmVuIHRoYXQgYXJlIGVsZW1lbnRzLCB3ZSdsbCBh
c3N1bWUgaXQgbWlnaHQgYmUgZmFsbGJhY2sKQEAgLTQ2NywxMCArNDY3LDEwIEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTmF0aXZlVGV4dENvbnRyb2woKSBjb25zdAogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzPEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50Pigqbm9kZSkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5v
ZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICBI
VE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KTsKICAgICAgICAgcmV0dXJuIGlucHV0LmlzVGV4dCgpIHx8IGlucHV0LmlzTnVtYmVyRmllbGQo
KTsKICAgICB9CkBAIC01MTQsMTMgKzUxNCwxMyBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojppc05hdGl2ZUltYWdlKCkgY29uc3QKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChpczxIVE1MSW1hZ2VFbGVtZW50Pihub2RlKSkKKyAgICBpZiAo
aXM8SFRNTEltYWdlRWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShlbWJl
ZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkgeworICAgIGlmIChpczxI
VE1MSW5wdXRFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5w
dXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIHJldHVybiBp
bnB1dC5pc0ltYWdlQnV0dG9uKCk7CiAgICAgfQpAQCAtNTUyLDEwICs1NTIsNyBAQCBib29sIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1Bhc3N3b3JkRmllbGQoKSBjb25zdAogYm9vbCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbnB1dEltYWdlKCkgY29uc3QKIHsKICAgICBOb2RlKiBu
b2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotIAotICAgIGlmIChyb2xlVmFsdWUoKSA9PSBCdXR0b25Sb2xlICYmIGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpICYmIHJv
bGVWYWx1ZSgpID09IEJ1dHRvblJvbGUpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5w
dXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIHJldHVybiBp
bnB1dC5pc0ltYWdlQnV0dG9uKCk7CiAgICAgfQpAQCAtNjQzLDcgKzY0MCw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRW5hYmxlZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9k
ZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gIWRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKQEAgLTY3OCw3ICs2NzUsNyBAQCBib29sIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojppc1ByZXNzZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVs
ZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSkuYWN0aXZlKCk7CiB9CkBAIC03MTcsOSArNzE0LDYgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNDaGVja2VkKCkgY29uc3QKIGJvb2wgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmlzSG92ZXJlZCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAg
IHJldHVybiBpczxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaG92
ZXJlZCgpOwogfQogCkBAIC03NDAsMTAgKzczNCwxMCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojppc1JlYWRPbmx5KCkgY29uc3QKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG5vZGUpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4obm9kZSktPmlzUmVhZE9ubHko
KTsKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpLmlzUmVhZE9ubHkoKTsKIAot
ICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkgeworICAgIGlmIChpczxIVE1MSW5w
dXRFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIGlmIChpbnB1dC5pc1Rl
eHRGaWVsZCgpKQogICAgICAgICAgICAgcmV0dXJuIGlucHV0LmlzUmVhZE9ubHkoKTsKQEAgLTc2
Miw4ICs3NTYsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZSogbiA9IHRoaXMtPm5vZGUo
KTsKLSAgICBpZiAobiAmJiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihuKSkKLSAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG4pLT5pc1JlcXVpcmVkKCk7
CisgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG4pKQorICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm4pLmlzUmVxdWlyZWQoKTsKIAogICAg
IHJldHVybiBmYWxzZTsKIH0KQEAgLTgzOSw3ICs4MzMsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24oKSBjb25zdAogCiBmbG9hdCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6dmFsdWVGb3JSYW5nZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG5vZGUoKSAm
JiBpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKCkpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUoKSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKTsKICAgICAgICAgaWYgKGlucHV0LmlzUmFu
Z2VDb250cm9sKCkpCiAgICAgICAgICAgICByZXR1cm4gaW5wdXQudmFsdWVBc051bWJlcigpOwpA
QCAtODUzLDcgKzg0Nyw3IEBAIGZsb2F0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZUZv
clJhbmdlKCkgY29uc3QKIAogZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVl
Rm9yUmFuZ2UoKSBjb25zdAogewotICAgIGlmIChub2RlKCkgJiYgaXM8SFRNTElucHV0RWxlbWVu
dD4obm9kZSgpKSkgeworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKCkpKSB7CiAg
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKm5vZGUoKSk7CiAgICAgICAgIGlmIChpbnB1dC5pc1JhbmdlQ29udHJvbCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGlucHV0Lm1heGltdW0oKTsKQEAgLTg2Nyw3ICs4NjEsNyBAQCBmbG9hdCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0CiAKIGZsb2F0
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJhbmdlKCkgY29uc3QKIHsKLSAg
ICBpZiAobm9kZSgpICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpIHsKKyAgICBpZiAo
aXM8SFRNTElucHV0RWxlbWVudD4obm9kZSgpKSkgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpOwogICAgICAgICBp
ZiAoaW5wdXQuaXNSYW5nZUNvbnRyb2woKSkKICAgICAgICAgICAgIHJldHVybiBpbnB1dC5taW5p
bXVtKCk7CkBAIC05MDAsNyArODk0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
aXNDb250cm9sKCkgY29uc3QKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2RlKSB8fCBBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojppc0FSSUFDb250cm9sKGFyaWFSb2xlQXR0cmlidXRlKCkpOworICAgIHJl
dHVybiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkgfHwgQWNjZXNzaWJpbGl0eU9i
amVjdDo6aXNBUklBQ29udHJvbChhcmlhUm9sZUF0dHJpYnV0ZSgpKTsKIH0KIAogYm9vbCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNGaWVsZHNldCgpIGNvbnN0CkBAIC05NjUsNyArOTU5LDcg
QEAgRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25z
dAogICAgIC8vIHNlYXJjaCB1cCB0aGUgRE9NIHRyZWUgZm9yIGFuIGFuY2hvciBlbGVtZW50CiAg
ICAgLy8gTk9URTogdGhpcyBhc3N1bWVzIHRoYXQgYW55IG5vbi1pbWFnZSB3aXRoIGFuIGFuY2hv
ciBpcyBhbiBIVE1MQW5jaG9yRWxlbWVudAogICAgIGZvciAoIDsgbm9kZTsgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KG5vZGUp
IHx8IChub2RlLT5yZW5kZXJlcigpICYmIGNhY2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5kZXJl
cigpKS0+aXNBbmNob3IoKSkpCisgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5v
ZGUpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIGNhY2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5k
ZXJlcigpKS0+aXNBbmNob3IoKSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVu
dD4obm9kZSk7CiAgICAgfQogCkBAIC05NzQsNyArOTY4LDcgQEAgRWxlbWVudCogQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogCiBzdGF0aWMgYm9vbCBpc05v
ZGVBY3Rpb25FbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkgewogICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKTsKICAgICAgICAgaWYgKCFpbnB1dC5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiAo
aW5wdXQuaXNSYWRpb0J1dHRvbigpIHx8IGlucHV0LmlzQ2hlY2tib3goKSB8fCBpbnB1dC5pc1Rl
eHRCdXR0b24oKSB8fCBpbnB1dC5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1dC5pc0ltYWdlQnV0dG9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDQ2LDcgKzEwNDAsNyBAQCBFbGVt
ZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcihNb3VzZUJ1
dHRvbkxpc3RlbmVyUmVzdWx0RgogCiAgICAgLy8gY2hlY2sgaWYgb3VyIHBhcmVudCBpcyBhIG1v
dXNlIGJ1dHRvbiBsaXN0ZW5lcgogICAgIC8vIEZJWE1FOiBEbyB0aGUgY29udGludWF0aW9uIHNl
YXJjaCBsaWtlIGFuY2hvckVsZW1lbnQgZG9lcwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVs
ZW1lbnRMaW5lYWdlKGlzPEVsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkg
OiBub2RlLT5wYXJlbnRFbGVtZW50KCkpKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxl
bWVudExpbmVhZ2UoaXM8RWxlbWVudD4oKm5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkg
OiBub2RlLT5wYXJlbnRFbGVtZW50KCkpKSB7CiAgICAgICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQg
dGhlIGJvZHkgYW5kIHRoaXMgaXMgbm90IGEgY29udHJvbCBlbGVtZW50LCBkbyBub3QgZXhwb3Nl
IHByZXNzIGFjdGlvbiBmb3IgdGhpcyBlbGVtZW50IHVubGVzcyBmaWx0ZXIgaXMgSW5jbHVkZUJv
ZHlFbGVtZW50LgogICAgICAgICAvLyBJdCBjYW4gY2F1c2UgZmFsc2UgcG9zaXRpdmVzLCB3aGVy
ZSBldmVyeSBwaWVjZSBvZiB0ZXh0IGlzIGxhYmVsZWQgYXMgYWNjZXB0aW5nIHByZXNzIGFjdGlv
bnMuCiAgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoYm9keVRhZykgJiYgaXNTdGF0aWNU
ZXh0KCkgJiYgZmlsdGVyID09IEV4Y2x1ZGVCb2R5RWxlbWVudCkKQEAgLTExNjEsNyArMTE1NSw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzR2VuZXJpY0ZvY3VzYWJsZUVsZW1l
bnQoKSBjb25zdAogCiBIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
bGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFpczxI
VE1MRWxlbWVudD4oZWxlbWVudCkgfHwgIWRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVtZW50KS0+
aXNMYWJlbGFibGUoKSkKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PigqZWxlbWVudCkgfHwgIWRv
d25jYXN0PEhUTUxFbGVtZW50PigqZWxlbWVudCkuaXNMYWJlbGFibGUoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gZWxlbWVudC0+Z2V0
SWRBdHRyaWJ1dGUoKTsKQEAgLTEyNTIsNyArMTI0Niw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OnRpdGxlRWxlbWVudFRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4
dE9yCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYm9vbCBpc0lu
cHV0VGFnID0gaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSk7CisgICAgYm9vbCBpc0lucHV0VGFn
ID0gaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgIGlmIChpc0lucHV0VGFnIHx8IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUlucHV0KGFyaWFSb2xlQXR0cmlidXRlKCkpIHx8IGlz
Q29udHJvbCgpKSB7CiAgICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVs
Rm9yRWxlbWVudChkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpIHsKICAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGxhYmVsT2JqZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0
ZShsYWJlbCk7CkBAIC0xMzA2LDcgKzEzMDAsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjphbHRlcm5hdGl2ZVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZAog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gVGhlIGZpZWxkc2V0IGVsZW1lbnQgZGVyaXZl
cyBpdHMgYWx0ZXJuYXRpdmUgdGV4dCBmcm9tIHRoZSBmaXJzdCBhc3NvY2lhdGVkIGxlZ2VuZCBl
bGVtZW50IGlmIG9uZSBpcyBhdmFpbGFibGUuCi0gICAgaWYgKGlzPEhUTUxGaWVsZFNldEVsZW1l
bnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxGaWVsZFNldEVsZW1lbnQ+KCpub2RlKSkgewog
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBheE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKGRvd25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KCpub2RlKS5sZWdlbmQoKSk7
CiAgICAgICAgIGlmIChvYmplY3QgJiYgIW9iamVjdC0+aXNIaWRkZW4oKSkKICAgICAgICAgICAg
IHRleHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQoYWNjZXNzaWJsZU5hbWVGb3JOb2Rl
KG9iamVjdC0+bm9kZSgpKSwgQWx0ZXJuYXRpdmVUZXh0KSk7CkBAIC0xMzI4LDcgKzEzMjIsNyBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2aXNpYmxlVGV4dChWZWN0b3I8QWNjZXNz
aWJpbGl0eVRleHQ+JiB0ZXh0T3JkZXIpCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgYm9vbCBpc0lucHV0VGFnID0gaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSk7
CisgICAgYm9vbCBpc0lucHV0VGFnID0gaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAg
IGlmIChpc0lucHV0VGFnKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgICAgICBpZiAoaW5wdXQuaXNUZXh0
QnV0dG9uKCkpIHsKQEAgLTE1MDMsNyArMTQ5Nyw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QKICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PFNWR0VsZW1lbnQ+KCptX25vZGUpLnRpdGxlKCk7CiAgICAgCiAjaWYgRU5BQkxF
KE1BVEhNTCkKLSAgICBpZiAobV9ub2RlICYmIGlzPE1hdGhNTEVsZW1lbnQ+KCptX25vZGUpKQor
ICAgIGlmIChpczxNYXRoTUxFbGVtZW50PihtX25vZGUpKQogICAgICAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKE1hdGhNTE5hbWVzOjphbHR0ZXh0QXR0cik7CiAjZW5kaWYKIApAQCAtMTUzMyw3ICsx
NTI3LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0
CiAgICAgCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
KCk7CiAgICAgZm9yIChOb2RlKiBhbmNlc3RvciA9IG5vZGU7IGFuY2VzdG9yOyBhbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50Pihh
bmNlc3RvcikpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PigqYW5jZXN0b3IpKSB7CiAg
ICAgICAgICAgICBIVE1MRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pigq
YW5jZXN0b3IpOwogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdW1tYXJ5ID0gZWxl
bWVudC5nZXRBdHRyaWJ1dGUoc3VtbWFyeUF0dHIpOwogICAgICAgICAgICAgaWYgKCFzdW1tYXJ5
LmlzRW1wdHkoKSkKQEAgLTE1NjEsNyArMTU1NSw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aGVscFRleHQoKSBjb25zdAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmhpZXJhcmNoaWNhbExldmVsKCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+
bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFp
czxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgRWxlbWVudCYgZWxlbWVu
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFy
aWFMZXZlbCA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xldmVsQXR0cik7CkBAIC0x
NjU0LDcgKzE2NDgsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmROYW1lVG9TdHJpbmdCdWlsZGVyKFN0
cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgdGV4dAogU3RyaW5nIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJF
bGVtZW50TW9kZSBtb2RlKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7
Ci0gICAgaWYgKG5vZGUgJiYgaXM8VGV4dD4obm9kZSkpCisgICAgaWYgKGlzPFRleHQ+KG5vZGUp
KQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8VGV4dD4oKm5vZGUpLndob2xlVGV4dCgpOwogCiAg
ICAgLy8gVGhlIHJlbmRlciB0cmVlIHNob3VsZCBiZSBzdGFibGUgYmVmb3JlIGdvaW5nIGFoZWFk
LiBPdGhlcndpc2UsIGZ1cnRoZXIgdXNlcyBvZiB0aGUKQEAgLTE2OTgsNyArMTY5Miw3IEBAIFN0
cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGUoKSBjb25zdAogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgYm9vbCBpc0lucHV0VGFnID0gaXM8
SFRNTElucHV0RWxlbWVudD4obm9kZSk7CisgICAgYm9vbCBpc0lucHV0VGFnID0gaXM8SFRNTElu
cHV0RWxlbWVudD4oKm5vZGUpOwogICAgIGlmIChpc0lucHV0VGFnKSB7CiAgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwog
ICAgICAgICBpZiAoaW5wdXQuaXNUZXh0QnV0dG9uKCkpCkBAIC0xODI0LDcgKzE4MTgsNyBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xvclZhbHVlKGludCYgciwgaW50JiBnLCBp
bnQmIGIpIGNvbnN0CiAgICAgaWYgKCFpc0NvbG9yV2VsbCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIW5vZGUoKSB8fCAhaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSgpKSkKKyAgICBp
ZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5v
ZGUoKSk7CkBAIC0xODQ0LDcgKzE4MzgsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Ojpjb2xvclZhbHVlKGludCYgciwgaW50JiBnLCBpbnQmIGIpIGNvbnN0CiBzdGF0aWMgU3RyaW5n
IGFjY2Vzc2libGVOYW1lRm9yTm9kZShOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsK
LSAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVu
dD4obm9kZSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICBFbGVtZW50JiBl
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwpAQCAtMTg2NSw3ICsxODU5LDcgQEAg
c3RhdGljIFN0cmluZyBhY2Nlc3NpYmxlTmFtZUZvck5vZGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZURlc2NyaXB0aW9uOwogICAgIH0KICAgICAKLSAgICBpZiAoaXM8SFRN
TElucHV0RWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKS52YWx1
ZSgpOwogICAgIAogICAgIFN0cmluZyB0ZXh0OwpAQCAtMTk0MSw5ICsxOTM1LDYgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdAogICAg
IC8vIE5PVEU6IEl0IHdvdWxkIGJlIG1vcmUgYWNjdXJhdGUgdG8gYXNrIHRoZSBkb2N1bWVudCB3
aGV0aGVyIHNldEZvY3VzZWRFbGVtZW50KCkgd291bGQKICAgICAvLyBkbyBhbnl0aGluZy4gRm9y
IGV4YW1wbGUsIHNldEZvY3VzZWRFbGVtZW50KCkgd2lsbCBkbyBub3RoaW5nIGlmIHRoZSBjdXJy
ZW50IGZvY3VzZWQKICAgICAvLyBub2RlIHdpbGwgbm90IHJlbGlucXVpc2ggdGhlIGZvY3VzLgot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA5MTRkYmRk
YTcyOTlhNjU3OTYwYjM2MTVkMGUwYjZmZWIyOWViY2ZlLi5mNmU5ODI3N2FmODI3ZTZlM2I3NmMw
YzkyNjMxNmMwZTRjYzlhNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTg1MSw3ICs4NTEsNyBAQCBib29sIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnByZXNzKCkKICAgICAgICAgZG9jdW1lbnQtPnJlbmRlclZpZXco
KS0+aGl0VGVzdChyZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKICAgICAgICAgaWYgKGhpdFRlc3RS
ZXN1bHQuaW5uZXJOb2RlKCkpIHsKICAgICAgICAgICAgIE5vZGUqIGlubmVyTm9kZSA9IGhpdFRl
c3RSZXN1bHQuaW5uZXJOb2RlKCktPmRlcHJlY2F0ZWRTaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAg
ICAgICAgICAgIGlmIChpczxFbGVtZW50Pihpbm5lck5vZGUpKQorICAgICAgICAgICAgaWYgKGlz
PEVsZW1lbnQ+KCppbm5lck5vZGUpKQogICAgICAgICAgICAgICAgIGhpdFRlc3RFbGVtZW50ID0g
ZG93bmNhc3Q8RWxlbWVudD4oaW5uZXJOb2RlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE3NTks
MTUgKzE3NTksMTIgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmludmFsaWRTdGF0dXMo
KSBjb25zdAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNUYWdOYW1lKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUo
KTsKLSAgICByZXR1cm4gbm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSkuaGFzVGFnTmFtZSh0YWdOYW1lKTsKKyAgICByZXR1cm4gaXM8RWxlbWVudD4o
bm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmhhc1RhZ05hbWUodGFnTmFtZSk7CiB9
CiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc0F0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGUpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKICAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0x
OTY2LDcgKzE5NjMsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc0hpZ2hsaWdodGlu
ZygpIGNvbnN0CiBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVtZW50KCkgY29uc3QK
IHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmIChub2RlICYmIGlzPEVs
ZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMjEx
NCw3ICsyMTExLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlkZW50aWZpZXJBdHRy
aWJ1dGUoKSBjb25zdAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGFzc0xpc3QoVmVjdG9y
PFN0cmluZz4mIGNsYXNzTGlzdCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9k
ZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDk3
MGViMmUwZmRkZjM2YmIwYjdjNmExOGZjMmYwNTQ4MWMwMjBlMTMuLjU5ODEwZjUwYjY1N2YxZmNh
OWJmODJlNzkxMDhjNDRmM2JkZDY1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtNTIzLDcg
KzUyMyw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNBdHRhY2htZW50KCkg
Y29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0
b24oKSBjb25zdAogewotICAgIGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPm5vZGUoKSAm
JiBpczxIVE1MSW5wdXRFbGVtZW50PihtX3JlbmRlcmVyLT5ub2RlKCkpKSB7CisgICAgaWYgKG1f
cmVuZGVyZXIgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obV9yZW5kZXJlci0+bm9kZSgpKSkgewog
ICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkpOwogICAgICAgICByZXR1cm4gaW5wdXQuaXNGaWxlVXBs
b2FkKCk7CiAgICAgfQpAQCAtNTg1LDcgKzU4NSw3IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogICAgIC8vIE5PVEU6IHRoaXMgYXNz
dW1lcyB0aGF0IGFueSBub24taW1hZ2Ugd2l0aCBhbiBhbmNob3IgaXMgYW4gSFRNTEFuY2hvckVs
ZW1lbnQKICAgICBOb2RlKiBub2RlID0gY3VyclJlbmRlcmVyLT5ub2RlKCk7CiAgICAgZm9yICgg
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1M
QW5jaG9yRWxlbWVudD4obm9kZSkgfHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYgY2FjaGUtPmdldE9y
Q3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpLT5pc0FuY2hvcigpKSkKKyAgICAgICAgaWYgKGlzPEhU
TUxBbmNob3JFbGVtZW50Pigqbm9kZSkgfHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYgY2FjaGUtPmdl
dE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpLT5pc0FuY2hvcigpKSkKICAgICAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICB9CiAgICAgCkBAIC02MDcsNyArNjA3
LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmhlbHBUZXh0KCkgY29uc3QK
ICAgICAKICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24o
KTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogYW5jZXN0b3IgPSBtX3JlbmRlcmVyOyBhbmNlc3Rv
cjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9y
LT5ub2RlKCkgJiYgaXM8SFRNTEVsZW1lbnQ+KGFuY2VzdG9yLT5ub2RlKCkpKSB7CisgICAgICAg
IGlmIChpczxIVE1MRWxlbWVudD4oYW5jZXN0b3ItPm5vZGUoKSkpIHsKICAgICAgICAgICAgIEhU
TUxFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCphbmNlc3Rvci0+bm9k
ZSgpKTsKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3VtbWFyeSA9IGVsZW1lbnQu
Z2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKICAgICAgICAgICAgIGlmICghc3VtbWFyeS5pc0Vt
cHR5KCkpCkBAIC03ODMsNyArNzgzLDcgQEAgSFRNTExhYmVsRWxlbWVudCogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6bGFiZWxFbGVtZW50Q29udGFpbmVyKCkgY29uc3QKICAgICAKICAgICAv
LyBmaW5kIGlmIHRoaXMgaGFzIGEgcGFyZW50IHRoYXQgaXMgYSBsYWJlbAogICAgIGZvciAoTm9k
ZSogcGFyZW50Tm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsgcGFyZW50Tm9kZTsgcGFyZW50Tm9k
ZSA9IHBhcmVudE5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8SFRNTExhYmVs
RWxlbWVudD4ocGFyZW50Tm9kZSkpCisgICAgICAgIGlmIChpczxIVE1MTGFiZWxFbGVtZW50Pigq
cGFyZW50Tm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVu
dD4ocGFyZW50Tm9kZSk7CiAgICAgfQogICAgIApAQCAtOTExLDkgKzkxMSw2IEBAIEludFBvaW50
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNsaWNrUG9pbnQoKQogQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW50ZXJuYWxMaW5rRWxlbWVudCgpIGNv
bnN0CiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFuY2hvckVsZW1lbnQoKTsKLSAgICBpZiAo
IWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAogICAgIC8vIFJpZ2h0IG5v
dywgd2UgZG8gbm90IHN1cHBvcnQgQVJJQSBsaW5rcyBhcyBpbnRlcm5hbCBsaW5rIGVsZW1lbnRz
CiAgICAgaWYgKCFpczxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtOTUxLDcgKzk0OCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWRkUmFkaW9CdXR0b25Hcm91cE1lbWJlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgp
OwotICAgIGlmICghbm9kZSB8fCAhaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkpCisgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5v
ZGUpOwpAQCAtOTY5LDcgKzk2Niw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
YWRkUmFkaW9CdXR0b25Hcm91cE1lbWJlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuCiAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIGl0ZW0gPSBsaXN0
LT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGl0ZW0pKSB7
CisgICAgICAgICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKml0ZW0pKSB7CiAgICAgICAg
ICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgYXNzb2NpYXRlRWxlbWVudCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCppdGVtKTsKICAgICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRlRWxl
bWVudC5pc1JhZGlvQnV0dG9uKCkgJiYgYXNzb2NpYXRlRWxlbWVudC5uYW1lKCkgPT0gaW5wdXQu
bmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCZhc3NvY2lhdGVFbGVtZW50KSkK
QEAgLTExMDYsNyArMTEwMyw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnRpdGxlVUlFbGVtZW50KCkgY29uc3QKICAgICAgICAgcmV0dXJuIGF4T2Jq
ZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUodG9SZW5kZXJGaWVsZHNldChtX3JlbmRlcmVyKS0+Zmlu
ZExlZ2VuZChSZW5kZXJGaWVsZHNldDo6SW5jbHVkZUZsb2F0aW5nT3JPdXRPZkZsb3cpKTsKICAg
ICAKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8
fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJlbEZv
ckVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOwogICAgIGlmIChsYWJlbCAmJiBsYWJl
bC0+cmVuZGVyZXIoKSkKQEAgLTEyNzYsNyArMTI3Myw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIAog
ICAgIC8vIGRvbid0IGlnbm9yZSBsYWJlbHMsIGJlY2F1c2UgdGhleSBzZXJ2ZSBhcyBUaXRsZVVJ
RWxlbWVudHMKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmIChu
b2RlICYmIGlzPEhUTUxMYWJlbEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1MTGFiZWxF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIEFueXRo
aW5nIHRoYXQgaXMgY29udGVudCBlZGl0YWJsZSBzaG91bGQgbm90IGJlIGlnbm9yZWQuCkBAIC0x
NDY1LDggKzE0NjIsNiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2VsZWN0
ZWRUZXh0KCkgY29uc3QKIGNvbnN0IEF0b21pY1N0cmluZyYgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWNjZXNzS2V5KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+
bm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxBdG9tOwogICAgIGlm
ICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBudWxsQXRvbTsKICAgICByZXR1
cm4gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsK
QEAgLTE1MDgsNyArMTUwMyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0
U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlCiAKIFVSTCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAogewotICAgIGlmIChpc0FuY2hvcigp
ICYmIGlzPEhUTUxBbmNob3JFbGVtZW50PihtX3JlbmRlcmVyLT5ub2RlKCkpKSB7CisgICAgaWYg
KGlzQW5jaG9yKCkgJiYgaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkp
KSB7CiAgICAgICAgIGlmIChIVE1MQW5jaG9yRWxlbWVudCogYW5jaG9yID0gZG93bmNhc3Q8SFRN
TEFuY2hvckVsZW1lbnQ+KGFuY2hvckVsZW1lbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gYW5j
aG9yLT5ocmVmKCk7CiAgICAgfQpAQCAtMTUxNiw3ICsxNTExLDcgQEAgVVJMIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnVybCgpIGNvbnN0CiAgICAgaWYgKGlzV2ViQXJlYSgpKQogICAgICAg
ICByZXR1cm4gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS51cmwoKTsKICAgICAKLSAgICBpZiAoaXNJ
bWFnZSgpICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBpczxIVE1MSW1hZ2VFbGVtZW50PihtX3Jl
bmRlcmVyLT5ub2RlKCkpKQorICAgIGlmIChpc0ltYWdlKCkgJiYgaXM8SFRNTEltYWdlRWxlbWVu
dD4obV9yZW5kZXJlci0+bm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFn
ZUVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkpLnNyYygpOwogICAgIAogICAgIGlmIChpc0lu
cHV0SW1hZ2UoKSkKQEAgLTE1NDMsNyArMTUzOCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6c2V0RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9k
ZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGRvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgKHZhbHVlKSA/ICJ0cnVlIiA6
ICJmYWxzZSIpOwpAQCAtMTY0Niw3ICsxNjQxLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpzZXRGb2N1c2VkKGJvb2wgb24pCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhp
cy0+ZG9jdW1lbnQoKTsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwogCi0gICAgaWYg
KCFvbiB8fCAhbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoIW9uIHx8ICFp
czxFbGVtZW50Pihub2RlKSkgewogICAgICAgICBkb2N1bWVudC0+c2V0Rm9jdXNlZEVsZW1lbnQo
bnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjc4LDcgKzE2NzMsNyBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkUm93cyhBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImIHNlbAogICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBpZiAoIW1fcmVuZGVy
ZXIgfHwgIW1fcmVuZGVyZXItPm5vZGUoKSB8fCAhaXM8RWxlbWVudD4obV9yZW5kZXJlci0+bm9k
ZSgpKSkKKyAgICBpZiAoIW1fcmVuZGVyZXIgfHwgIWlzPEVsZW1lbnQ+KG1fcmVuZGVyZXItPm5v
ZGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm1fcmVuZGVyZXItPm5vZGUoKSk7CiAKQEAgLTE3NTksNyArMTc1NCw3IEBAIHZv
aWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0RG9jdW1lbnRMaW5rcyhBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImIHJlCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChheG9i
aik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBOb2RlKiBwYXJlbnQgPSBjdXJyLT5w
YXJlbnROb2RlKCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50ICYmIGlzPEhUTUxBcmVhRWxlbWVu
dD4oY3VycikgJiYgaXM8SFRNTE1hcEVsZW1lbnQ+KHBhcmVudCkpIHsKKyAgICAgICAgICAgIGlm
IChpczxIVE1MQXJlYUVsZW1lbnQ+KCpjdXJyKSAmJiBpczxIVE1MTWFwRWxlbWVudD4ocGFyZW50
KSkgewogICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsqIGFyZWFPYmpl
Y3QgPSB0b0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNy
ZWF0ZShJbWFnZU1hcExpbmtSb2xlKSk7CiAgICAgICAgICAgICAgICAgSFRNTE1hcEVsZW1lbnQm
IG1hcCA9IGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PigqcGFyZW50KTsKICAgICAgICAgICAgICAg
ICBhcmVhT2JqZWN0LT5zZXRIVE1MQXJlYUVsZW1lbnQoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50
PihjdXJyKSk7CkBAIC0yMTU4LDcgKzIxNTMsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SW1hZ2VNYXBIaXRUZXN0KEhUTQog
CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbnVsbHB0cjsKICAgICBmb3IgKEVs
ZW1lbnQqIG1hcFBhcmVudCA9IGFyZWEtPnBhcmVudEVsZW1lbnQoKTsgbWFwUGFyZW50OyBtYXBQ
YXJlbnQgPSBtYXBQYXJlbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICBpZiAoaXM8SFRN
TE1hcEVsZW1lbnQ+KG1hcFBhcmVudCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxNYXBFbGVtZW50
PigqbWFwUGFyZW50KSkgewogICAgICAgICAgICAgcGFyZW50ID0gYWNjZXNzaWJpbGl0eVBhcmVu
dEZvckltYWdlTWFwKGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PihtYXBQYXJlbnQpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMjA3LDExICsyMjAyLDEyIEBAIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRU
ZXN0KGNvbnN0IEludFBvCiAgICAgaWYgKCFoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5l
ck5vZGUoKS0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIEFTU0VSVChub2Rl
KTsKIAotICAgIGlmIChpczxIVE1MQXJlYUVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1M
QXJlYUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlJbWFnZU1h
cEhpdFRlc3QoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pihub2RlKSwgcG9pbnQpOwogICAgIAot
ICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxPcHRp
b25FbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKm5vZGUpLm93bmVyU2VsZWN0RWxlbWVudCgpOwogICAgIAogICAgIFJlbmRlck9iamVj
dCogb2JqID0gbm9kZS0+cmVuZGVyZXIoKTsKQEAgLTIzODEsNyArMjM3Nyw3IEBAIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvcnJlc3BvbmRpbmdMYWJl
bEZvckNvbnRyb2xFbGVtCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgTm9kZSogbm9k
ZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAobm9kZSAmJiBpczxIVE1MRWxlbWVudD4o
bm9kZSkpIHsKKyAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgIGlmIChI
VE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChkb3duY2FzdDxIVE1MRWxl
bWVudD4obm9kZSkpKQogICAgICAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUobGFiZWwpOwogICAgIH0KQEAgLTI0MDQsNyArMjQwMCw3IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6cmVuZGVyT2JqZWN0SXNPYnNlcnZhYmxlKFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gVGV4dGJveGVzIHNob3Vs
ZCBzZW5kIG91dCBub3RpZmljYXRpb25zLgotICAgIGlmIChub2RlSGFzUm9sZShub2RlLCAidGV4
dGJveCIpIHx8IChpczxFbGVtZW50Pihub2RlKSAmJiBjb250ZW50RWRpdGFibGVBdHRyaWJ1dGVJ
c0VuYWJsZWQoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpKSkKKyAgICBpZiAobm9kZUhhc1JvbGUo
bm9kZSwgInRleHRib3giKSB8fCAoaXM8RWxlbWVudD4oKm5vZGUpICYmIGNvbnRlbnRFZGl0YWJs
ZUF0dHJpYnV0ZUlzRW5hYmxlZChkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNDgyLDcgKzI0NzgsNyBA
QCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1pbmVB
Y2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgaWYgKG1fcmVuZGVyZXItPmlzVGV4dCgpKQogICAgICAg
ICByZXR1cm4gU3RhdGljVGV4dFJvbGU7CiAgICAgaWYgKGNzc0JveCAmJiBjc3NCb3gtPmlzSW1h
Z2UoKSkgewotICAgICAgICBpZiAobm9kZSAmJiBpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkK
KyAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgcmV0
dXJuIGFyaWFIYXNQb3B1cCgpID8gUG9wVXBCdXR0b25Sb2xlIDogQnV0dG9uUm9sZTsKICAgICAg
ICAgaWYgKGlzU1ZHSW1hZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBTVkdSb290Um9sZTsKQEAg
LTI1MDEsNyArMjQ5Nyw3IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkKICAgICBpZiAoY3NzQm94ICYmIGNz
c0JveC0+aXNUZXh0QXJlYSgpKQogICAgICAgICByZXR1cm4gVGV4dEFyZWFSb2xlOwogCi0gICAg
aWYgKG5vZGUgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoaXM8SFRN
TElucHV0RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQg
PSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIGlmIChpbnB1dC5p
c0NoZWNrYm94KCkpCiAgICAgICAgICAgICByZXR1cm4gQ2hlY2tCb3hSb2xlOwpAQCAtMjU3MSw3
ICsyNTY3LDcgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1Rh
Z05hbWUodHJUYWcpKQogICAgICAgICByZXR1cm4gUm93Um9sZTsKIAotICAgIGlmIChub2RlICYm
IGlzPEhUTUxUYWJsZUVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50
Pihub2RlKSkKICAgICAgICAgcmV0dXJuIFRhYmxlUm9sZTsKICNlbmRpZgogCkBAIC0yNTg1LDcg
KzI1ODEsNyBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpk
ZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFn
TmFtZShwVGFnKSkKICAgICAgICAgcmV0dXJuIFBhcmFncmFwaFJvbGU7CiAKLSAgICBpZiAobm9k
ZSAmJiBpczxIVE1MTGFiZWxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoaXM8SFRNTExhYmVsRWxl
bWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBMYWJlbFJvbGU7CiAKICAgICBpZiAobm9kZSAm
JiBub2RlLT5oYXNUYWdOYW1lKGRmblRhZykpCkBAIC0yNTk0LDcgKzI1OTAsNyBAQCBBY2Nlc3Np
YmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmls
aXR5Um9sZSgpCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShkaXZUYWcpKQogICAg
ICAgICByZXR1cm4gRGl2Um9sZTsKIAotICAgIGlmIChub2RlICYmIGlzPEhUTUxGb3JtRWxlbWVu
dD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxGb3JtRWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJl
dHVybiBGb3JtUm9sZTsKIAogICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoYXJ0aWNs
ZVRhZykpCkBAIC0yNjE2LDkgKzI2MTIsOSBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJl
dHVybiBMYW5kbWFya0NvbnRlbnRJbmZvUm9sZTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICBp
ZiAobm9kZSAmJiBpczxIVE1MVmlkZW9FbGVtZW50Pihub2RlKSkKKyAgICBpZiAoaXM8SFRNTFZp
ZGVvRWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBWaWRlb1JvbGU7Ci0gICAgaWYgKG5v
ZGUgJiYgaXM8SFRNTEF1ZGlvRWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxBdWRpb0Vs
ZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gQXVkaW9Sb2xlOwogI2VuZGlmCiAgICAgCkBA
IC0yNjk1LDcgKzI2OTEsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmluaGVy
aXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IHRvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChw
YXJlbnQpLT5ub2RlKCk7Ci0gICAgICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkp
CisgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgCiAgICAgICAgIC8vIElmIG5hdGl2ZSB0YWcgb2YgdGhlIHBhcmVudCBlbGVtZW50
IG1hdGNoZXMgYW4gYWNjZXB0YWJsZSBuYW1lLCB0aGVuIHJldHVybgpAQCAtMjgzNSw3ICsyODMx
LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cGRhdGVDaGlsZHJlbklmTmVj
ZXNzYXJ5KCkKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEZpZWxkQ2hp
bGRyZW4oKQogewogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgaWYgKCFub2Rl
IHx8ICFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgSFRNTElucHV0RWxlbWVu
dCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CkBAIC0yODgwLDcg
KzI4NzYsNyBAQCBBY2Nlc3NpYmlsaXR5U1ZHUm9vdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6cmVtb3RlU1ZHUm9vdEVsZW1lbnQoKSBjb25zdAogICAgIEZyYW1lJiBmcmFtZSA9IGZyYW1l
Vmlldy0+ZnJhbWUoKTsKICAgICAKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS5kb2N1
bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQgfHwgIWlzPFNWR0RvY3VtZW50Pihkb2N1bWVudCkp
CisgICAgaWYgKCFpczxTVkdEb2N1bWVudD4oZG9jdW1lbnQpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAKICAgICBTVkdTVkdFbGVtZW50KiByb290RWxlbWVudCA9IGRvd25jYXN0PFNW
R0RvY3VtZW50PigqZG9jdW1lbnQpLnJvb3RFbGVtZW50KCk7CkBAIC0zMjUwLDcgKzMyNDYsNyBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEFjY2Vzc2libGVOYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkKICAgICBlbHNlCiAgICAgICAgIG5vZGUgPSBtX3JlbmRlcmVy
LT5ub2RlKCk7CiAKLSAgICBpZiAobm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAo
aXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5zZXRB
dHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIsIG5hbWUpOwogfQogICAgIApAQCAtMzI2OCw3ICszMjY0
LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1ZhbHVlRm9yTVNB
QSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTGlua2FibGUoKnRoaXMpKSB7CiAgICAgICAgIEVsZW1l
bnQqIGFuY2hvciA9IGFuY2hvckVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGFuY2hvciAmJiBpczxI
VE1MQW5jaG9yRWxlbWVudD4oYW5jaG9yKSkKKyAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVt
ZW50PihhbmNob3IpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxBbmNob3JFbGVt
ZW50PigqYW5jaG9yKS5ocmVmKCk7CiAgICAgfQogCkBAIC0zMjgxLDcgKzMyNzcsNyBAQCBib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTGlua2VkKCkgY29uc3QKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogYW5jaG9yID0gYW5jaG9yRWxlbWVudCgpOwotICAg
IGlmICghYW5jaG9yIHx8ICFpczxIVE1MQW5jaG9yRWxlbWVudD4oYW5jaG9yKSkKKyAgICBpZiAo
IWlzPEhUTUxBbmNob3JFbGVtZW50PihhbmNob3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICByZXR1cm4gIWRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PigqYW5jaG9yKS5ocmVmKCku
aXNFbXB0eSgpOwpAQCAtMzM3MSw3ICszMzY3LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnN0cmluZ1JvbGVGb3JNU0FBKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5v
ZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSk7CkBAIC0zNDg2LDExICszNDgyLDEwIEBAIHZvaWQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAog
I2lmIEVOQUJMRShNQVRITUwpCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0
aEVsZW1lbnQoKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAg
aWYgKCFtX3JlbmRlcmVyIHx8ICFub2RlKQorICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiBpczxNYXRoTUxFbGVtZW50Pihub2RlKTsK
KyAgICByZXR1cm4gaXM8TWF0aE1MRWxlbWVudD4obm9kZSgpKTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhGcmFjdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTZWFyY2hGaWVsZEJ1dHRv
bnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNo
RmllbGRCdXR0b25zLmNwcAppbmRleCAyYzVjMjQ2NWFkZWU1MTYxODE0NjU3MTUzMmFhY2I0MjEw
ZmM5ZmFjLi4zZDRlNzBjODc2MjJmNTI2OWUxYmM3YjFkYWE3MGYwZTYyOWNjNzg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTZWFyY2hGaWVs
ZEJ1dHRvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNlYXJjaEZpZWxkQnV0dG9ucy5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5U2VhcmNoRmllbGRDYW5jZWxCdXR0b246OmFjY2Vzc2liaWxpdHlUZXh0KFZlY3RvcjxB
Y2Nlc3NpYmlsaXQKIGJvb2wgQWNjZXNzaWJpbGl0eVNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uOjpw
cmVzcygpCiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUg
fHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4IDgyODg3NGYzOTA4OTUzZWE1ZjE0ODJhNTc2MTE3
NWY1ZjM3ZTBlZDQuLmQ1YjEzZTVmODNjNTVjMDIwNzhkY2E5MzRlNTc1NjdiOGQ3M2Q0ZWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgSFRNTFRhYmxlRWxlbWVudCogQWNjZXNzaWJpbGl0eVRh
YmxlOjp0YWJsZUVsZW1lbnQoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
ICAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0b1JlbmRlclRhYmxlKG1fcmVuZGVyZXIpOwotICAg
IGlmICh0YWJsZS0+ZWxlbWVudCgpICYmIGlzPEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlLT5lbGVt
ZW50KCkpKQorICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50Pih0YWJsZS0+ZWxlbWVudCgpKSkK
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlLT5lbGVtZW50
KCkpOwogICAgIAogICAgIC8vIElmIHRoZSB0YWJsZSBoYXMgYSBkaXNwbGF5OnRhYmxlLXJvdy1n
cm91cCwgdGhlbiB0aGUgUmVuZGVyVGFibGUgZG9lcyBub3QgaGF2ZSBhIHBvaW50ZXIgdG8gaXQn
cyBIVE1MVGFibGVFbGVtZW50LgpAQCAtMTA2LDcgKzEwNiw3IEBAIEhUTUxUYWJsZUVsZW1lbnQq
IEFjY2Vzc2liaWxpdHlUYWJsZTo6dGFibGVFbGVtZW50KCkgY29uc3QKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgCiAgICAgRWxlbWVudCogYWN0dWFsVGFibGUgPSBmaXJzdEJvZHktPmVs
ZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpOwotICAgIGlmICghYWN0dWFsVGFibGUgfHwgIWlzPEhU
TUxUYWJsZUVsZW1lbnQ+KGFjdHVhbFRhYmxlKSkKKyAgICBpZiAoIWlzPEhUTUxUYWJsZUVsZW1l
bnQ+KGFjdHVhbFRhYmxlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgcmV0
dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KGFjdHVhbFRhYmxlKTsKQEAgLTIxOCw3ICsy
MTgsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUoKSBjb25zdAogICAg
ICAgICAgICAgICAgIGhlYWRlcnNJbkZpcnN0Q29sdW1uQ291bnQrKzsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgZGV2ZWxvcGVyIGV4cGxpY2l0bHkgYXNz
aWduZWQgYSAiZGF0YSIgdGFibGUgYXR0cmlidXRlLgotICAgICAgICAgICAgaWYgKGlzPEhUTUxU
YWJsZUNlbGxFbGVtZW50PihjZWxsRWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChpczxIVE1M
VGFibGVDZWxsRWxlbWVudD4oKmNlbGxFbGVtZW50KSkgewogICAgICAgICAgICAgICAgIEhUTUxU
YWJsZUNlbGxFbGVtZW50JiB0YWJsZUNlbGxFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ+KCpjZWxsRWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZUNlbGxF
bGVtZW50LmhlYWRlcnMoKS5pc0VtcHR5KCkgfHwgIXRhYmxlQ2VsbEVsZW1lbnQuYWJicigpLmlz
RW1wdHkoKQogICAgICAgICAgICAgICAgICAgICB8fCAhdGFibGVDZWxsRWxlbWVudC5heGlzKCku
aXNFbXB0eSgpIHx8ICF0YWJsZUNlbGxFbGVtZW50LnNjb3BlKCkuaXNFbXB0eSgpKQpAQCAtMzI4
LDcgKzMyOCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmxlVGhy
b3VnaEFjY2Vzc2liaWxpdHkoKSBjb25zdAogICAgIC8vIEd0aysgQVRzIGV4cGVjdCBhbGwgdGFi
bGVzIHRvIGJlIGV4cG9zZWQgYXMgdGFibGVzLgogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oRUZMKQogICAgIEVsZW1lbnQqIHRhYmxlTm9kZSA9IHRvUmVuZGVyVGFibGUobV9yZW5kZXJl
ciktPmVsZW1lbnQoKTsKLSAgICByZXR1cm4gdGFibGVOb2RlICYmIGlzPEhUTUxUYWJsZUVsZW1l
bnQ+KHRhYmxlTm9kZSk7CisgICAgcmV0dXJuIGlzPEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlTm9k
ZSk7CiAjZW5kaWYKIAogICAgIHJldHVybiBpc0RhdGFUYWJsZSgpOwpAQCAtNjA3LDcgKzYwNyw3
IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5VGFibGU6OnRpdGxlKCkgY29uc3QKICAgICAKICAgICAv
LyBzZWUgaWYgdGhlcmUgaXMgYSBjYXB0aW9uCiAgICAgTm9kZSogdGFibGVFbGVtZW50ID0gbV9y
ZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICh0YWJsZUVsZW1lbnQgJiYgaXM8SFRNTFRhYmxlRWxl
bWVudD4odGFibGVFbGVtZW50KSkgeworICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50Pih0YWJs
ZUVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogY2FwdGlv
biA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJsZUVsZW1lbnQpLmNhcHRpb24oKSkK
ICAgICAgICAgICAgIHRpdGxlID0gY2FwdGlvbi0+aW5uZXJUZXh0KCk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNw
cAppbmRleCAyMGIxNDU4OTU1MWI5ODBmYTkyOGQyYWQxNmEyZDMzODI2ZTM1ZTAyLi4yZDIyMTAw
MDRmZGY4ZTIwMDYxNDY3NzIzMzU1N2NjNTFhZjZmNjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcApAQCAtMTMzLDcg
KzEzMyw3IEBAIHN0YXRpYyB2b2lkIG5vdGlmeUNoaWxkcmVuU2VsZWN0aW9uQ2hhbmdlKEFjY2Vz
c2liaWxpdHlPYmplY3QqIG9iamVjdCkKIAogICAgIC8vIE9ubHkgc3VwcG9ydCBIVE1MIHNlbGVj
dCBlbGVtZW50cyBzbyBmYXIgKEFSSUEgc2VsZWN0b3JzIG5vdCBzdXBwb3J0ZWQpLgogICAgIE5v
ZGUqIG5vZGUgPSBvYmplY3QtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIWlzPEhUTUxTZWxl
Y3RFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEhUTUxTZWxlY3RFbGVtZW50Pihub2RlKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRW1pdCBzaWduYWwgZnJvbSB0aGUgbGlzdGJveCdz
IHBvaW50IG9mIHZpZXcgZmlyc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNw
cAppbmRleCAzNDkyYjdlMGVmMmM3N2Y5ZDQzZTljNzZiZmE2ZTg2ZWNlZmM2MGM4Li4wMjVlZjA4
MTdlZTU5Yzk2MDM1YzY1ZTg1MGIxYjM1NWIwNDgzYTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUYWJsZS5jcHAKQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgQXRrT2JqZWN0KiB3
ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKEF0a1RhYmxlKiB0YWJsZSkKICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwogICAgIGlmIChhY2NUYWJs
ZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9
IGFjY1RhYmxlLT5ub2RlKCk7Ci0gICAgICAgIGlmIChub2RlICYmIGlzPEhUTUxUYWJsZUVsZW1l
bnQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50Pihub2RlKSkgewog
ICAgICAgICAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24gPSBkb3duY2FzdDxI
VE1MVGFibGVFbGVtZW50Pigqbm9kZSkuY2FwdGlvbigpOwogICAgICAgICAgICAgaWYgKGNhcHRp
b24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpcnN0QWNj
ZXNzaWJsZU9iamVjdEZyb21Ob2RlKGNhcHRpb24tPnJlbmRlcmVyKCktPmVsZW1lbnQoKSktPndy
YXBwZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAppbmRleCBlMWQyYTgyMzE2MTZj
ZDhkNWQ1ZmUwZDRkOWEwNDZiZTZjZDUzOWM3Li5jZmM1MDI1MDk1OTEzM2FhMGY3ZjFkZjQ1NGM1
NWE4MmRlMzMwYjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCkBAIC0xMzcsNyAr
MTM3LDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlR2V0TmFtZShBdGtP
YmplY3QqIG9iamVjdCkKIAogICAgIGlmIChjb3JlT2JqZWN0LT5pc0ltYWdlKCkgfHwgY29yZU9i
amVjdC0+aXNJbnB1dEltYWdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3Qt
Pm5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUgJiYgaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7Cisg
ICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgIC8vIEdldCB0
aGUgYXR0cmlidXRlIHJhdGhlciB0aGFuIGFsdFRleHQgU3RyaW5nIHNvIGFzIG5vdCB0byBmYWxs
IGJhY2sgb24gdGl0bGUuCiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFsdCA9IGRv
d25jYXN0PEhUTUxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0QXR0
cik7CiAgICAgICAgICAgICBpZiAoIWFsdC5pc0VtcHR5KCkpCkBAIC0xNzAsNyArMTcwLDcgQEAg
c3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlR2V0RGVzY3JpcHRpb24oQXRrT2Jq
ZWN0KiBvYmplY3QpCiAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAgaWYgKGNvcmVPYmpl
Y3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQogICAgICAgICBub2RlID0gY29yZU9i
amVjdC0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8SFRNTEVsZW1lbnQ+KG5vZGUpIHx8
IGNvcmVPYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkgIT0gVW5rbm93blJvbGUgfHwgY29yZU9i
amVjdC0+aXNJbWFnZSgpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpIHx8IGNvcmVP
YmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkgIT0gVW5rbm93blJvbGUgfHwgY29yZU9iamVjdC0+
aXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gY2FjaGVBbmRSZXR1cm5BdGtQcm9wZXJ0eShvYmpl
Y3QsIEF0a0NhY2hlZEFjY2Vzc2libGVEZXNjcmlwdGlvbiwgYWNjZXNzaWJpbGl0eURlc2NyaXB0
aW9uKGNvcmVPYmplY3QpKTsKIAogICAgIC8vIGF0a190YWJsZV9nZXRfc3VtbWFyeSByZXR1cm5z
IGFuIEF0a09iamVjdC4gV2UgaGF2ZSBubyBzdW1tYXJ5IG9iamVjdCwgc28gZXhwb3NlIHN1bW1h
cnkgaGVyZS4KQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJr
aXRBY2Nlc3NpYmxlR2V0QXR0cmlidXRlcyhBdGtPYmplY3QqIG9iamVjdCkKICAgICAvLyBjYW5u
b3QgYmUgZG9uZSBmcm9tIHRoZSBVSVByb2Nlc3MuIEFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMgaGF2
ZSBubyBuZWVkCiAgICAgLy8gZm9yIHRoaXMgaW5mb3JtYXRpb24uCiAgICAgTm9kZSogbm9kZSA9
IGNvcmVPYmplY3QtPm5vZGUoKTsKLSAgICBpZiAobm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSkg
eworICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICBTdHJpbmcgaWQgPSBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0SWRBdHRyaWJ1dGUoKS5zdHJpbmcoKTsKICAgICAgICAg
aWYgKCFpZC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0
dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJodG1sLWlkIiwgaWQudXRmOCgpLmRhdGEoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZh
dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Qcml2YXRl
LmNwcAppbmRleCAwOGM1ZjAyNzY0NjYyNWFlNTNmNWJmODVmYWI5YjdiZTRhNTRmOGNiLi44MGNj
NmQ2MjkzNTg0YTk4OTRhY2YxMmFmYzljMWYxMDUwYmU3Nzg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NUHJpdmF0ZS5jcHAKQEAgLTg0LDcg
Kzg0LDcgQEAgV2ViS2l0RE9NTm9kZSogd3JhcChOb2RlKiBub2RlKQogCiAgICAgc3dpdGNoIChu
b2RlLT5ub2RlVHlwZSgpKSB7CiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6Ci0gICAgICAg
IGlmIChpczxIVE1MRWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4o
Km5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTk9ERSh3cmFwKGRvd25jYXN0
PEhUTUxFbGVtZW50Pihub2RlKSkpOwogICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9OT0RFKHdy
YXBFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSk7CiAgICAgY2FzZSBOb2RlOjpBVFRS
SUJVVEVfTk9ERToKQEAgLTEwMCw3ICsxMDAsNyBAQCBXZWJLaXRET01Ob2RlKiB3cmFwKE5vZGUq
IG5vZGUpCiAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6CiAgICAgICAgIHJldHVybiBXRUJL
SVRfRE9NX05PREUod3JhcENvbW1lbnQoc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUpKSk7CiAg
ICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgotICAgICAgICBpZiAoaXM8SFRNTERvY3VtZW50
Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4oKm5vZGUpKQogICAgICAgICAg
ICAgcmV0dXJuIFdFQktJVF9ET01fTk9ERSh3cmFwSFRNTERvY3VtZW50KGRvd25jYXN0PEhUTUxE
b2N1bWVudD4obm9kZSkpKTsKICAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTk9ERSh3cmFwRG9j
dW1lbnQoZG93bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpKSk7CiAgICAgY2FzZSBOb2RlOjpET0NVTUVO
VF9UWVBFX05PREU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
Q29udGV4dEN1c3RvbS5jcHAKaW5kZXggNWM4NDEyYWYwMGQ0N2RjMTQ5ZjVkNWVlODRkZWQ3NDU3
MWQwYTYxMS4uMWE3NWQ5MzViYzczMjIwNWFiNDdhNWQxOTYwNGQwODI5ZDFkNGVjNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNw
cApAQCAtNTMsNyArNTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTQXVkaW9Db250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJl
bmNlRXJyb3IoZXhlYywgIkF1ZGlvQ29udGV4dCBjb25zdHJ1Y3RvciBzY3JpcHQgZXhlY3V0aW9u
IGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSk7CiAgICAgICAgIAotICAgIGlmICghaXM8RG9jdW1l
bnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQorICAgIGlmICghaXM8RG9jdW1lbnQ+KCpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiQXVkaW9Db250ZXh0IGNvbnN0cnVjdG9yIGNhbGxl
ZCBpbiBhIHNjcmlwdCBleGVjdXRpb24gY29udGV4dCB3aGljaCBpcyBub3QgYSBkb2N1bWVudCIp
KTsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAKaW5kZXggZDRlZGQ2OTFmOTFjYjAzOTkzYWY5M2QwNDMyNjdjYmJl
NGE1MmNiYy4uZDJiMzBlNGY0YTQ3MTdlMDhkMjJkNWQ0MzFiZjI0OTYwYWFkNmFlYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAt
MTA1LDEwICsxMDUsMTAgQEAgSlNET01HbG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3Qo
RG9jdW1lbnQqIGRvY3VtZW50LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIAogSlNET01HbG9iYWxP
YmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGlzPERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KCpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KSkKICAgICAgICAgcmV0dXJuIHRvSlNET01HbG9iYWxPYmpl
Y3QoZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLCBleGVjKTsKIAot
ICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCisg
ICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCiAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpLnNjcmlwdCgpLT53b3JrZXJHbG9iYWxTY29wZVdyYXBwZXIoKTsKIAogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTIyLDEwICsxMjIsMTAgQEAgSlNET01HbG9iYWxPYmpl
Y3QqIHRvSlNET01HbG9iYWxPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBET01XcmFwcGVyV29y
bGQmIHdvcmwKIAogSlNET01HbG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCkKIHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
KQorICAgIGlmIChpczxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQogICAgICAg
ICByZXR1cm4gdG9KU0RPTUdsb2JhbE9iamVjdChkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCksIHdvcmxkKTsKIAotICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4o
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCisgICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigq
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxXb3JrZXJH
bG9iYWxTY29wZT4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLnNjcmlwdCgpLT53b3JrZXJHbG9i
YWxTY29wZVdyYXBwZXIoKTsKIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDYzOTU4
Y2M1ZjM4YzYwNjViNjA1YjJjOWZiMDI5ZjYwNDI0M2EyMmMuLmNhODkxMDFkYWFmNWQxYjVkMzk1
NDY2MzdjMjk5MWQwNTkyNjgwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTc5LDcgKzc5LDYgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIG5hbWVkSXRlbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2QKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzT2JqLT5pbXBsKCkuZnJhbWUo
KS0+ZG9jdW1lbnQoKTsKIAogICAgIEFTU0VSVChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iai0+aW1wbCgpKSk7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50KTsKICAgICBBU1NFUlQoaXM8SFRNTERvY3VtZW50Pihkb2N1bWVudCkpOwogCiAgICAg
QXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKTsKQEAgLTI0NCw3ICsyNDMsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eQogCiAg
ICAgLy8gQWxsb3cgc2hvcnRjdXRzIGxpa2UgJ0ltYWdlMScgaW5zdGVhZCBvZiBkb2N1bWVudC5p
bWFnZXMuSW1hZ2UxCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpc09iamVjdC0+aW1wbCgp
LmZyYW1lKCktPmRvY3VtZW50KCk7Ci0gICAgaWYgKGlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQp
KSB7CisgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KSkgewogICAgICAgICBBdG9t
aWNTdHJpbmdJbXBsKiBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpOwogICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIGRvd25jYXN0PEhUTUxEb2N1
bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkp
IHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIFJlYWRPbmx5IHwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0ZW1HZXR0ZXIpOwpAQCAtMzIxLDcgKzMyMCw3IEBA
IGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCB1CiAKICAgICAvLyBBbGxvdyBzaG9ydGN1dHMgbGlrZSAn
SW1hZ2UxJyBpbnN0ZWFkIG9mIGRvY3VtZW50LmltYWdlcy5JbWFnZTEKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICBp
ZiAoaXM8SFRNTERvY3VtZW50Pihkb2N1bWVudCkpIHsKKyAgICBpZiAoaXM8SFRNTERvY3VtZW50
PigqZG9jdW1lbnQpKSB7CiAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5
TmFtZSA9IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7CiAgICAgICAgIGlmIChhdG9taWNQcm9w
ZXJ0eU5hbWUgJiYgZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQpLmhhc1dpbmRvd05h
bWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkgewogICAgICAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0sIG5hbWVkSXRl
bUdldHRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1l
bnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9t
LmNwcAppbmRleCBlZDg1NzE5MDAwMjQ5YTE4MmY1MDc3OTZhNzVkN2E4ZGY0YzUxMTI5Li5iNGU1
YWI2OTQ3MGZjNTkyMzNmMmUwMzRhZTEwYjcxODg4N2NmOGJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKQEAgLTU2LDkgKzU2LDkgQEAgSlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVsZW1lbnQqIGUKICAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFs
T2JqZWN0LT53b3JsZCgpLCBlbGVtZW50KSk7CiAKICAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXI7
ICAgICAgICAKLSAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmIChpczxI
VE1MRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICB3cmFwcGVyID0gY3JlYXRlSlNIVE1MV3Jh
cHBlcihnbG9iYWxPYmplY3QsIGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVtZW50KSk7Ci0gICAg
ZWxzZSBpZiAoaXM8U1ZHRWxlbWVudD4oZWxlbWVudCkpCisgICAgZWxzZSBpZiAoaXM8U1ZHRWxl
bWVudD4oKmVsZW1lbnQpKQogICAgICAgICB3cmFwcGVyID0gY3JlYXRlSlNTVkdXcmFwcGVyKGds
b2JhbE9iamVjdCwgZG93bmNhc3Q8U1ZHRWxlbWVudD4oZWxlbWVudCkpOwogICAgIGVsc2UKICAg
ICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fV1JBUFBFUihnbG9iYWxPYmplY3QsIEVsZW1lbnQs
IGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJv
ckhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIu
Y3BwCmluZGV4IDU0YmUyNGJlN2NjNTUzOTkxNzZiMTZjZjQwOWEzM2YzNjVjZWZiNjUuLmMyZWM1
Nzg0NGEyZWY1ZWVhMWY0NTdjM2VjYmRiNjlhMDc3ODA3ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgSlNFcnJv
ckhhbmRsZXI6On5KU0Vycm9ySGFuZGxlcigpCiB2b2lkIEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVF
dmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBFdmVu
dCogZXZlbnQpCiB7CiAKLSAgICBpZiAoIWlzPEVycm9yRXZlbnQ+KGV2ZW50KSkKKyAgICBpZiAo
IWlzPEVycm9yRXZlbnQ+KCpldmVudCkpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6
OmhhbmRsZUV2ZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VS
VChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDRhYzVlMTllNWE3MmNkNjc2ODM3OTRlYmRjZGZj
ZmYxYWI2MjBlYWEuLmU5YzljNmViMTkwZTNkOThhMmY4YzNhZjJiNDY4YzJkNTA0OGZiYjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcApAQCAt
MTMxLDcgKzEzMSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0CiAKICAgICAgICAgZ2xvYmFs
T2JqZWN0LT5zZXRDdXJyZW50RXZlbnQoc2F2ZWRFdmVudCk7CiAKLSAgICAgICAgaWYgKGlzPFdv
cmtlckdsb2JhbFNjb3BlPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkgeworICAgICAgICBpZiAo
aXM8V29ya2VyR2xvYmFsU2NvcGU+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkgewogICAgICAg
ICAgICAgYm9vbCB0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uID0gKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpICYmIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGVjLT5leGNlcHRpb24oKSkp
OwogICAgICAgICAgICAgaWYgKHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gfHwgKHZtLndhdGNo
ZG9nICYmIHZtLndhdGNoZG9nLT5kaWRGaXJlKCkpKQogICAgICAgICAgICAgICAgIGRvd25jYXN0
PFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkuc2NyaXB0KCktPmZv
cmJpZEV4ZWN1dGlvbigpOwpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0CiAgICAgICAgICAgICBldmVudC0+dGFyZ2V0KCktPnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVu
dEhhbmRsZXIoKTsKICAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24p
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRP
ck51bGwoKSAmJiBpczxCZWZvcmVVbmxvYWRFdmVudD4oZXZlbnQpKQorICAgICAgICAgICAgaWYg
KCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAmJiBpczxCZWZvcmVVbmxvYWRFdmVudD4oKmV2
ZW50KSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxCZWZvcmVVbmxvYWRFdmVudD4oKmV2ZW50
KS5zZXRSZXR1cm5WYWx1ZShyZXR2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICAgICAgICAgIGlmIChtX2lzQXR0cmlidXRlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJldHZh
bC5pc0ZhbHNlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxE
b2N1bWVudEN1c3RvbS5jcHAKaW5kZXggNTIyMWUxZGVkNTRiYWI5ZjFmOGE4M2FkNTYwMTFkNmM4
ZGVmNDk5ZC4uOWIxYjU3NmQ4MWQ1YzQ2MTk4Y2MxMDE1OWQ1ZmIyMmI0ZWZmODRiOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNw
cApAQCAtNzMsNyArNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6bmFtZUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRQogICAgIH0KIAogICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudE5hbWVkSXRlbSgqYXRvbWljUHJv
cGVydHlOYW1lKTsKLSAgICBpZiAoVU5MSUtFTFkoaXM8SFRNTElGcmFtZUVsZW1lbnQ+KGVsZW1l
bnQpKSkgeworICAgIGlmIChVTkxJS0VMWShpczxIVE1MSUZyYW1lRWxlbWVudD4oKmVsZW1lbnQp
KSkgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG93bmNhc3Q8SFRNTElGcmFtZUVsZW1l
bnQ+KCplbGVtZW50KS5jb250ZW50RnJhbWUoKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUyhleGVjLCBmcmFtZSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggYjJjYzI3NmM0MThl
NjBjZTE2MDQ5MjYzM2I2OTM3ZWYxMDQyZTYwNi4uNmRkZTUxMGM0MzI1NTI2Y2QyNzk3OWI4MjJi
NzEyNDYxMjc1M2JkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNM
YXp5RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNM
YXp5RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTcyLDcgKzcyLDYgQEAgSlNMYXp5RXZlbnRMaXN0ZW5l
cjo6fkpTTGF6eUV2ZW50TGlzdGVuZXIoKQogCiBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5l
cjo6aW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogZXhlY3V0aW9u
Q29udGV4dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZXhlY3V0aW9uQ29udGV4dCk7CiAgICAgQVNT
RVJUKGlzPERvY3VtZW50PihleGVjdXRpb25Db250ZXh0KSk7CiAgICAgaWYgKCFleGVjdXRpb25D
b250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVDdXN0b20uY3BwCmluZGV4IGQ2YzNjOWRlNmFmNzgzZDhkZGRiOTdlZjdmNDkw
OTdlNGVlMWMwMTcuLmQ0NzkzYWJkZWI5ZTRhMjFlY2M5ZjlhZGJkZmVhZTQ4YjY1MjM0MmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcApAQCAtOTcsNyAr
OTcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxlKEpTTm9kZSoganNOb2RlLCBO
b2RlKiBub2RlKQogc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShKU05vZGUq
IGpzTm9kZSwgTm9kZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFu
b2RlLT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7Cisg
ICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8mIGVsZW1l
bnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CiAKICAgICAgICAgICAgIC8vIElmIGEgd3Jh
cHBlciBpcyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gYW4gaW1hZ2UgZWxlbWVudApAQCAtMTkyLDkg
KzE5Miw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHBlcklubGlu
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqCiAgICAgSlNET01XcmFwcGVyKiB3cmFw
cGVyOyAgICAKICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBO
b2RlOjpFTEVNRU5UX05PREU6Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG5vZGUp
KQorICAgICAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICAg
ICAgd3JhcHBlciA9IGNyZWF0ZUpTSFRNTFdyYXBwZXIoZ2xvYmFsT2JqZWN0LCBkb3duY2FzdDxI
VE1MRWxlbWVudD4obm9kZSkpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXM8U1ZHRWxlbWVudD4o
bm9kZSkpCisgICAgICAgICAgICBlbHNlIGlmIChpczxTVkdFbGVtZW50Pigqbm9kZSkpCiAgICAg
ICAgICAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTU1ZHV3JhcHBlcihnbG9iYWxPYmplY3QsIGRv
d25jYXN0PFNWR0VsZW1lbnQ+KG5vZGUpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9XUkFQUEVSKGdsb2JhbE9iamVjdCwgRWxlbWVudCwg
bm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRB
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNw
cAppbmRleCBhMWI1MWFhMzVmMjczNTkzMjI5MTAyOTJmYTdjNjFiYzg2Zjc2NTIzLi5hYmEyY2Qz
YmJmOTg4NjI3MmI1YzFiNDNhZmU1MmU5MmNjYjI3ZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgU2NoZWR1
bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0
aW9uLCBET01XcmFwcGVyV28KIAogdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRl
eHQpKQorICAgIGlmIChpczxEb2N1bWVudD4oKmNvbnRleHQpKQogICAgICAgICBleGVjdXRlKGRv
d25jYXN0PERvY3VtZW50Pihjb250ZXh0KSk7CiAgICAgZWxzZQogICAgICAgICBleGVjdXRlKGRv
d25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAKaW5kZXggMzc2Y2QyNTRmODdkMzQxNmZhNzM5ZjJhMTE3
Y2MzZmQ2MGRjZTRlMi4uNzMyYzdjYzY5ZTRjMmY1NTA5ZmQ2MDBjYmY5ZGFjNDIyNDJiYmY0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcApAQCAtNTgsNyAr
NTgsNyBAQCBET01XaW5kb3cqIGRvbVdpbmRvd0Zyb21FeGVjU3RhdGUoSlNDOjpFeGVjU3RhdGUq
IHNjcmlwdFN0YXRlKQogRnJhbWUqIGZyYW1lRnJvbUV4ZWNTdGF0ZShKU0M6OkV4ZWNTdGF0ZSog
c2NyaXB0U3RhdGUpCiB7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKHNjcmlwdFN0YXRlKTsKLSAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb250ZXh0ICYmIGlzPERvY3VtZW50Pihjb250ZXh0KSA/IGRvd25j
YXN0PERvY3VtZW50Pihjb250ZXh0KSA6IG51bGxwdHI7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gaXM8RG9jdW1lbnQ+KGNvbnRleHQpID8gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpIDog
bnVsbHB0cjsKICAgICByZXR1cm4gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxw
dHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1t
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KaW5kZXggZDUwNGE3NDUwZWVm
ZGU1OWI5ODM4ODJlOTQ1MGU4MDkyOTNkMjIwMi4uMzM3MjU5NDE5YjU5ZmU4ZGU1OGM4MDRkZDRl
NTVjYzVmYjNiMDdlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9E
T00ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KQEAgLTMwMSw3
ICszMDEsNyBAQCBDbGFzcyBraXRDbGFzcyhXZWJDb3JlOjpOb2RlKiBpbXBsKQogewogICAgIHN3
aXRjaCAoaW1wbC0+bm9kZVR5cGUoKSkgewogICAgICAgICBjYXNlIFdlYkNvcmU6Ok5vZGU6OkVM
RU1FTlRfTk9ERToKLSAgICAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oaW1wbCkpCisgICAg
ICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCppbXBsKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gV2ViQ29yZTo6ZWxlbWVudENsYXNzKGRvd25jYXN0PEhUTUxFbGVtZW50PigqaW1wbCkudGFn
UU5hbWUoKSwgW0RPTUhUTUxFbGVtZW50IGNsYXNzXSk7CiAgICAgICAgICAgICByZXR1cm4gW0RP
TUVsZW1lbnQgY2xhc3NdOwogICAgICAgICBjYXNlIFdlYkNvcmU6Ok5vZGU6OkFUVFJJQlVURV9O
T0RFOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCmluZGV4IDU4
NmI4ZmRhZjc3MTY5YTIyODNkYTA1YmQwZTc4NTc5YzU0MjhhMTMuLmY1OGM5MjA1YWRmYjQxYzI4
NzY0ZWZiOGE0M2M2ZDJmM2E0ZDhkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDdXJzb3JJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3Rh
dGljIGlubGluZSBTVkdDdXJzb3JFbGVtZW50KiByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVs
ZW1lbnQoY29uc3QgU3RyaW5nJiB1cmwsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmlu
Zyh1cmwsIGRvY3VtZW50KTsKLSAgICBpZiAoZWxlbWVudCAmJiBpczxTVkdDdXJzb3JFbGVtZW50
PihlbGVtZW50KSkKKyAgICBpZiAoaXM8U1ZHQ3Vyc29yRWxlbWVudD4oZWxlbWVudCkpCiAgICAg
ICAgIHJldHVybiBkb3duY2FzdDxTVkdDdXJzb3JFbGVtZW50PihlbGVtZW50KTsKIAogICAgIHJl
dHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCmluZGV4IGFhZDZl
NTg5ZmYxNTFjYjYyNjY2ZDY5ZTRiZWYzN2M0ZDY0MzRjNWUuLmJkNGEzZmY4ZDk2YTZjODc2OTY1
MDYxMjgzOTBhNGQ0OGNkNjdmMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAK
QEAgLTY4LDkgKzY4LDkgQEAgc3RhdGljIGJvb2wgaXNBY2NlcHRhYmxlQ1NTU3R5bGVTaGVldFBh
cmVudChOb2RlKiBwYXJlbnROb2RlKQogICAgIC8vIE9ubHkgdGhlc2Ugbm9kZXMgY2FuIGJlIHBh
cmVudHMgb2YgU3R5bGVTaGVldHMsIGFuZCB0aGV5IG5lZWQgdG8gY2FsbCBjbGVhck93bmVyTm9k
ZSgpIHdoZW4gbW92ZWQgb3V0IG9mIGRvY3VtZW50LgogICAgIHJldHVybiAhcGFyZW50Tm9kZQog
ICAgICAgICB8fCBwYXJlbnROb2RlLT5pc0RvY3VtZW50Tm9kZSgpCi0gICAgICAgIHx8IGlzPEhU
TUxMaW5rRWxlbWVudD4ocGFyZW50Tm9kZSkKLSAgICAgICAgfHwgaXM8SFRNTFN0eWxlRWxlbWVu
dD4ocGFyZW50Tm9kZSkKLSAgICAgICAgfHwgaXM8U1ZHU3R5bGVFbGVtZW50PihwYXJlbnROb2Rl
KQorICAgICAgICB8fCBpczxIVE1MTGlua0VsZW1lbnQ+KCpwYXJlbnROb2RlKQorICAgICAgICB8
fCBpczxIVE1MU3R5bGVFbGVtZW50PigqcGFyZW50Tm9kZSkKKyAgICAgICAgfHwgaXM8U1ZHU3R5
bGVFbGVtZW50PigqcGFyZW50Tm9kZSkKICAgICAgICAgfHwgcGFyZW50Tm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU7CiB9CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNTM4N2Q0ZjU5YjNkYmE4MjNiMjBm
ZGY3OGNlOWU2MjM1NjNiMWUxYy4uZGU3YWM4MDQ3YTRmOWI4ZmQ3ZGRmZjM2MTIzZmNjMDUxZjNm
NGU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTU1NiwxMSAr
NTU2LDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBlbGVtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoaXM8
VGV4dD4obm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCpub2RlKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0
Pigqbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHROb2RlLmRhdGEoKS5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rp
b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5o
CmluZGV4IDZmNDE4YzNiNDQ1MDhmZWU3MTU4ZjgxNTJkZGQ5YTFiMTdmY2RjZjcuLmFmZGFkOTlj
ZjU3ZGU4MDAwMjA0MzU5Y2QxNmY4MjlmYjRhYTk3NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaApAQCAtNDIsNyArNDIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBpc0F1dG9maWxsZWQoY29u
c3QgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4oZWxlbWVudCkpIHsKKyAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1l
bnQpKSB7CiAgICAgICAgIGlmIChjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGlucHV0RWxl
bWVudC0+aXNBdXRvZmlsbGVkKCk7CiAgICAgfQpAQCAtNTYsMTMgKzU2LDEzIEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0RlZmF1bHRCdXR0b25Gb3JGb3JtKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Rpc2FibGVkKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CiB7Ci0gICAgcmV0dXJuIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSB8fCBp
czxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4o
ZWxlbWVudCkpCisgICAgcmV0dXJuIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVu
dCkgfHwgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSB8fCBpczxIVE1MT3B0R3JvdXBF
bGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgICYmIGVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFbmFibGVkKGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVt
ZW50KSB8fCBpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTE9wdEdyb3Vw
RWxlbWVudD4oZWxlbWVudCkpCisgICAgcmV0dXJuIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
PigqZWxlbWVudCkgfHwgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSB8fCBpczxIVE1M
T3B0R3JvdXBFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgICYmICFlbGVtZW50LT5pc0Rpc2Fi
bGVkRm9ybUNvbnRyb2woKTsKIH0KIApAQCAtNzksNyArNzksNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNDaGVja2VkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgY29uc3QgSFRNTElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoaW5w
dXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpICYmICFpbnB1
dEVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpCisgICAgaWYgKGlzPEhUTUxP
cHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KS5zZWxlY3RlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CkBAIC0xMjcsNyArMTI3LDcgQEAgaW5saW5lIGJvb2wgbWF0Y2hlc0xhbmdQc2V1ZG9D
bGFzcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBBdG9taWNTdHJpbmdJbXBsKiBmaWwKIHsKICAg
ICBBdG9taWNTdHJpbmcgdmFsdWU7CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGlmIChp
czxXZWJWVFRFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoaXM8V2ViVlRURWxlbWVudD4oKmVs
ZW1lbnQpKQogICAgICAgICB2YWx1ZSA9IGRvd25jYXN0PFdlYlZUVEVsZW1lbnQ+KCplbGVtZW50
KS5sYW5ndWFnZSgpOwogICAgIGVsc2UKICNlbmRpZgpAQCAtMzA0LDEyICszMDQsMTIgQEAgQUxX
QVlTX0lOTElORSBib29sIG1hdGNoZXNGdWxsU2NyZWVuRG9jdW1lbnRQc2V1ZG9DbGFzcyhjb25z
dCBFbGVtZW50KiBlbGVtZW50KQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIEFMV0FZU19JTkxJ
TkUgYm9vbCBtYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCogZWxlbWVu
dCkKIHsKLSAgICByZXR1cm4gaXM8V2ViVlRURWxlbWVudD4oZWxlbWVudCkgJiYgIWRvd25jYXN0
PFdlYlZUVEVsZW1lbnQ+KCplbGVtZW50KS5pc1Bhc3ROb2RlKCk7CisgICAgcmV0dXJuIGlzPFdl
YlZUVEVsZW1lbnQ+KCplbGVtZW50KSAmJiAhZG93bmNhc3Q8V2ViVlRURWxlbWVudD4oKmVsZW1l
bnQpLmlzUGFzdE5vZGUoKTsKIH0KIAogQUxXQVlTX0lOTElORSBib29sIG1hdGNoZXNQYXN0Q3Vl
UHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXM8V2Vi
VlRURWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNhc3Q8V2ViVlRURWxlbWVudD4oKmVsZW1lbnQp
LmlzUGFzdE5vZGUoKTsKKyAgICByZXR1cm4gaXM8V2ViVlRURWxlbWVudD4oKmVsZW1lbnQpICYm
IGRvd25jYXN0PFdlYlZUVEVsZW1lbnQ+KCplbGVtZW50KS5pc1Bhc3ROb2RlKCk7CiB9CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDA3OGE1Y2EyZTJjNGNl
ZDU5YTZkMzJkYTgwYjMyMDRkMzZkM2E4OGQuLjJmMmRmYzYxN2JkMWM0MTVkMWY0MDcxYTRkZjE0
OTcxN2M5OGEwMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTM4OCw3
ICszODgsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6dXBkYXRlQ29udmVy
c2lvbkRhdGEoKQogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRFbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgbV9lbGVtZW50ID0gZWxlbWVudDsKLSAgICBtX3N0
eWxlZEVsZW1lbnQgPSBlbGVtZW50ICYmIGlzPFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpID8gZG93
bmNhc3Q8U3R5bGVkRWxlbWVudD4oZWxlbWVudCkgOiBudWxscHRyOworICAgIG1fc3R5bGVkRWxl
bWVudCA9IGVsZW1lbnQgJiYgaXM8U3R5bGVkRWxlbWVudD4oKmVsZW1lbnQpID8gZG93bmNhc3Q8
U3R5bGVkRWxlbWVudD4oZWxlbWVudCkgOiBudWxscHRyOwogICAgIG1fZWxlbWVudExpbmtTdGF0
ZSA9IGVsZW1lbnQgPyBlbGVtZW50LT5kb2N1bWVudCgpLnZpc2l0ZWRMaW5rU3RhdGUoKS5kZXRl
cm1pbmVMaW5rU3RhdGUoKmVsZW1lbnQpIDogTm90SW5zaWRlTGluazsKICAgICB1cGRhdGVDb252
ZXJzaW9uRGF0YSgpOwogfQpAQCAtNDQ1LDEyICs0NDUsMTIgQEAgTm9kZSogU3R5bGVSZXNvbHZl
cjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9k
ZUNvdW4KIHsKICAgICBpZiAodmlzaXRlZE5vZGVDb3VudCA+PSBjU3R5bGVTZWFyY2hUaHJlc2hv
bGQgKiBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgaWYgKCFwYXJlbnQgfHwgIWlzPFN0eWxlZEVsZW1lbnQ+KHBhcmVudCkpCisgICAgaWYg
KCFpczxTdHlsZWRFbGVtZW50PihwYXJlbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBTdHlsZWRFbGVtZW50KiBzdHlsZWRQYXJlbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihw
YXJlbnQpOwogICAgIGlmIChzdHlsZWRQYXJlbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGlmIChpczxTVkdFbGVtZW50PihzdHlsZWRQYXJlbnQpICYmIGRv
d25jYXN0PFNWR0VsZW1lbnQ+KCpzdHlsZWRQYXJlbnQpLmFuaW1hdGVkU01JTFN0eWxlUHJvcGVy
dGllcygpKQorICAgIGlmIChpczxTVkdFbGVtZW50Pigqc3R5bGVkUGFyZW50KSAmJiBkb3duY2Fz
dDxTVkdFbGVtZW50Pigqc3R5bGVkUGFyZW50KS5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKHN0eWxlZFBhcmVudC0+aGFzSUQo
KSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhzdHlsZWRQYXJl
bnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC00NjcsNyArNDY3LDcgQEAgTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2lu
TGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW4KICAgICAgICAg
d2hpbGUgKGN1cnJlbnROb2RlKSB7CiAgICAgICAgICAgICArK3N1YmNvdW50OwogICAgICAgICAg
ICAgaWYgKGN1cnJlbnROb2RlLT5yZW5kZXJTdHlsZSgpID09IHBhcmVudFN0eWxlICYmIGN1cnJl
bnROb2RlLT5sYXN0Q2hpbGQoKQotICAgICAgICAgICAgICAgICYmIGlzPEVsZW1lbnQ+KGN1cnJl
bnROb2RlKSAmJiAhcGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhkb3duY2FzdDxFbGVtZW50
PihjdXJyZW50Tm9kZSkpCisgICAgICAgICAgICAgICAgJiYgaXM8RWxlbWVudD4oKmN1cnJlbnRO
b2RlKSAmJiAhcGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhkb3duY2FzdDxFbGVtZW50Pihj
dXJyZW50Tm9kZSkpCiAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgLy8gQWRq
dXN0IGZvciB1bnVzZWQgcmVzZXJ2ZWQgdHJpZXMuCiAgICAgICAgICAgICAgICAgdmlzaXRlZE5v
ZGVDb3VudCAtPSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgLSBzdWJjb3VudDsKQEAgLTU0Niw3ICs1
NDYsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHls
ZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRIYXNE
aXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbGlu
ZSBpcyBzdXJwcmlzaW5nbHkgaG90LCB3ZSBtYXkgd2lzaCB0byBpbmxpbmUgaGFzRGlyZWN0aW9u
QXV0byBpbnRvIFN0eWxlUmVzb2x2ZXIuCi0gICAgcmV0dXJuIGlzPEhUTUxFbGVtZW50PihlbGVt
ZW50KSAmJiBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnQpLmhhc0RpcmVjdGlvbkF1dG8o
KTsKKyAgICByZXR1cm4gaXM8SFRNTEVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1M
RWxlbWVudD4oKmVsZW1lbnQpLmhhc0RpcmVjdGlvbkF1dG8oKTsKIH0KIAogYm9vbCBTdHlsZVJl
c29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1
dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0CkBAIC02MjYsOSArNjI2
LDkgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVk
RWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX3J1
bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wg
aXNDb250cm9sID0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCk7CisgICAgYm9v
bCBpc0NvbnRyb2wgPSBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCk7CiAKLSAg
ICBpZiAoaXNDb250cm9sICE9IGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KHN0YXRlLmVsZW1l
bnQoKSkpCisgICAgaWYgKGlzQ29udHJvbCAhPSBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pigq
c3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGlzQ29u
dHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1lbnQpKQpAQCAtNjUwLDcgKzY1
MCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAg
Ly8gRGVueSBzaGFyaW5nIHN0eWxlcyBiZXR3ZWVuIFdlYlZUVCBhbmQgbm9uLVdlYlZUVCBub2Rl
cy4KLSAgICBpZiAoaXM8V2ViVlRURWxlbWVudD4oc3RhdGUuZWxlbWVudCgpKSkKKyAgICBpZiAo
aXM8V2ViVlRURWxlbWVudD4oKnN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICNlbmRpZgogCkBAIC02NjQsNyArNjY0LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5T
aGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKIGlubGlu
ZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmlu
ZyhOb2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0CiB7CiAgICAgZm9yICg7IG5vZGU7
IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWlzPFN0eWxl
ZEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVt
ZW50KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KG5vZGUpKSkKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTE2Nyw3ICsxMTY3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHls
ZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXIKICAgICAgICAgICAg
IGlmIChlLT5oYXNUYWdOYW1lKHRkVGFnKSkgewogICAgICAgICAgICAgICAgIHN0eWxlLnNldERp
c3BsYXkoVEFCTEVfQ0VMTCk7CiAgICAgICAgICAgICAgICAgc3R5bGUuc2V0RmxvYXRpbmcoTm9G
bG9hdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KGUpKQor
ICAgICAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MVGFibGVFbGVtZW50PigqZSkpCiAgICAgICAg
ICAgICAgICAgc3R5bGUuc2V0RGlzcGxheShzdHlsZS5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJ
TkxJTkVfVEFCTEUgOiBUQUJMRSk7CiAgICAgICAgIH0KIApAQCAtMTE4NCw3ICsxMTg0LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlJiBwYXIKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRhYmxlcyBu
ZXZlciBzdXBwb3J0IHRoZSAtd2Via2l0LSogdmFsdWVzIGZvciB0ZXh0LWFsaWduIGFuZCB3aWxs
IHJlc2V0IGJhY2sgdG8gdGhlIGRlZmF1bHQuCi0gICAgICAgIGlmIChlICYmIGlzPEhUTUxUYWJs
ZUVsZW1lbnQ+KGUpICYmIChzdHlsZS50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfTEVGVCB8fCBzdHls
ZS50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSIHx8IHN0eWxlLnRleHRBbGlnbigpID09IFdF
QktJVF9SSUdIVCkpCisgICAgICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50PihlKSAmJiAoc3R5
bGUudGV4dEFsaWduKCkgPT0gV0VCS0lUX0xFRlQgfHwgc3R5bGUudGV4dEFsaWduKCkgPT0gV0VC
S0lUX0NFTlRFUiB8fCBzdHlsZS50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQpKQogICAgICAg
ICAgICAgc3R5bGUuc2V0VGV4dEFsaWduKFRBU1RBUlQpOwogCiAgICAgICAgIC8vIEZyYW1lcyBh
bmQgZnJhbWVzZXRzIG5ldmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFi
c29sdXRlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0bwpAQCAtMTI2Nyw3ICsxMjY3LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlJiBwYXIKICAgICAgICAgc3R5bGUuc2V0WkluZGV4KDApOwogCiAgICAgLy8g
VGV4dGFyZWEgY29uc2lkZXJzIG92ZXJmbG93IHZpc2libGUgYXMgYXV0by4KLSAgICBpZiAoZSAm
JiBpczxIVE1MVGV4dEFyZWFFbGVtZW50PihlKSkgeworICAgIGlmIChpczxIVE1MVGV4dEFyZWFF
bGVtZW50PihlKSkgewogICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1goc3R5bGUub3ZlcmZsb3dY
KCkgPT0gT1ZJU0lCTEUgPyBPQVVUTyA6IHN0eWxlLm92ZXJmbG93WCgpKTsKICAgICAgICAgc3R5
bGUuc2V0T3ZlcmZsb3dZKHN0eWxlLm92ZXJmbG93WSgpID09IE9WSVNJQkxFID8gT0FVVE8gOiBz
dHlsZS5vdmVyZmxvd1koKSk7CiAgICAgfQpAQCAtMTMzMiwxMCArMTMzMiwxMCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUmIHBhcgogCiAgICAgLy8gSW1wb3J0YW50OiBJbnRyaW5zaWMgbWFyZ2lucyBn
ZXQgYWRkZWQgdG8gY29udHJvbHMgYmVmb3JlIHRoZSB0aGVtZSBoYXMgYWRqdXN0ZWQgdGhlIHN0
eWxlLCBzaW5jZSB0aGUgdGhlbWUgd2lsbAogICAgIC8vIGFsdGVyIGZvbnRzIGFuZCBoZWlnaHRz
L3dpZHRocy4KLSAgICBpZiAoZSAmJiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlKSAmJiBz
dHlsZS5mb250U2l6ZSgpID49IDExKSB7CisgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KGUpICYmIHN0eWxlLmZvbnRTaXplKCkgPj0gMTEpIHsKICAgICAgICAgLy8gRG9uJ3QgYXBw
bHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gVGhlIGRlc2lnbmVyIGtub3dz
IGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCiAgICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gdHJlYXQg
YWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5IHNpemVkLgot
ICAgICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGUpIHx8ICFkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqZSkuaXNJbWFnZUJ1dHRvbigpKQorICAgICAgICBpZiAoIWlzPEhUTUxJbnB1
dEVsZW1lbnQ+KCplKSB8fCAhZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmUpLmlzSW1hZ2VC
dXR0b24oKSkKICAgICAgICAgICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOwogICAgIH0K
IApAQCAtMTg4MCw3ICsxODgwLDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVs
ZXMoKQogLy8gU2NhbGUgd2l0aC9oZWlnaHQgcHJvcGVydGllcyBvbiBpbmxpbmUgU1ZHIHJvb3Qu
CiBib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpCiB7Ci0gICAg
cmV0dXJuIG1fc3RhdGUuZWxlbWVudCgpICYmIG1fc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1l
bnQoKSAmJiAhKGlzPFNWR1NWR0VsZW1lbnQ+KG1fc3RhdGUuZWxlbWVudCgpKSAmJiBtX3N0YXRl
LmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gaXM8U1ZHRWxlbWVudD4obV9z
dGF0ZS5lbGVtZW50KCkpICYmICEoaXM8U1ZHU1ZHRWxlbWVudD4oKm1fc3RhdGUuZWxlbWVudCgp
KSAmJiBtX3N0YXRlLmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKTsKIH0KIAogI2lmIEVOQUJMRShD
U1NfR1JJRF9MQVlPVVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVl
dExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAppbmRleCBl
OTAxNmQ5NWYwNWJhYzM0ZmQyNDA0NWE1ZDI3YzVkYjUwOTg5YTYzLi5jMmI5ZjQyOTBmN2JjOTMw
Zjk5NDZlNjg3OWFkYjJlMWNjMjYwNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlz
dC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgSFRNTFN0eWxlRWxlbWVudCogU3R5bGVTaGVldExpc3Q6
OmdldE5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgLy8gYW5kIGRvZXNu
J3QgbG9vayBmb3IgbmFtZSBhdHRyaWJ1dGUuCiAgICAgLy8gQnV0IHVuaWNpdHkgb2Ygc3R5bGVz
aGVldCBpZHMgaXMgZ29vZCBwcmFjdGljZSBhbnl3YXkgOykKICAgICBFbGVtZW50KiBlbGVtZW50
ID0gbV9kb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQobmFtZSk7Ci0gICAgaWYgKGVsZW1lbnQgJiYg
aXM8SFRNTFN0eWxlRWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKGlzPEhUTUxTdHlsZUVsZW1l
bnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVudD4o
ZWxlbWVudCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQXR0ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKaW5kZXggMTcy
ZmNjNzZkNGE0YWI4NzhiNjBhYWNhZjYyMDBkYzE5NTJlYmI5MC4uNzFkYTljNmMzZTlkNmU1NThi
ZTMyNmI1ZWY4MDA5ZTA5M2U3ZTkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0F0
dHIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcApAQCAtMTg4LDcgKzE4OCw3
IEBAIGJvb2wgQXR0cjo6aXNJZCgpIGNvbnN0CiBDU1NTdHlsZURlY2xhcmF0aW9uKiBBdHRyOjpz
dHlsZSgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGV4aXN0cyB0byBzdXBwb3J0IHRo
ZSBPYmotQyBiaW5kaW5ncy4KLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhaXM8U3R5bGVkRWxlbWVu
dD4obV9lbGVtZW50KSkKKyAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KG1fZWxlbWVudCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIG1fc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzOjpjcmVhdGUoKTsKICAgICBkb3duY2FzdDxTdHlsZWRFbGVtZW50PigqbV9lbGVtZW50KS5j
b2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSgpLCB2YWx1
ZSgpLCAqbV9zdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVy
RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggMzFh
NTk0MzFiNWM5NGRjMDcyNDc4ZmU4OTk3Njg3NmUxMDdiOTJhMS4uNzE3MDAwODIzYWYzMTU5ODNh
ZGQzMGU3ZjNlZGExMGQ5MzAwMzQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNw
cApAQCAtODcsOCArODcsOCBAQCB1bnNpZ25lZCBDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmRE
YXRhKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsCiAgICAgZWxzZQogICAg
ICAgICBtX2RhdGEuYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSArIG9mZnNldCwgY2hhcmFj
dGVyTGVuZ3RoTGltaXQpOwogCi0gICAgQVNTRVJUKCFyZW5kZXJlcigpIHx8IGlzPFRleHQ+KHRo
aXMpKTsKLSAgICBpZiAoaXM8VGV4dD4odGhpcykpCisgICAgQVNTRVJUKCFyZW5kZXJlcigpIHx8
IGlzPFRleHQ+KCp0aGlzKSk7CisgICAgaWYgKGlzPFRleHQ+KCp0aGlzKSkKICAgICAgICAgU3R5
bGU6OnVwZGF0ZVRleHRSZW5kZXJlckFmdGVyQ29udGVudENoYW5nZShkb3duY2FzdDxUZXh0Pigq
dGhpcyksIG9sZExlbmd0aCwgMCk7CiAKICAgICBkb2N1bWVudCgpLmluY0RPTVRyZWVWZXJzaW9u
KCk7CkBAIC0xOTQsMTEgKzE5NCwxMSBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGFBbmRV
cGRhdGUoY29uc3QgU3RyaW5nJiBuZXdEYXRhLCB1bnNpZ25lZCBvZmZzZXRPZlJlcAogICAgIFN0
cmluZyBvbGREYXRhID0gbV9kYXRhOwogICAgIG1fZGF0YSA9IG5ld0RhdGE7CiAKLSAgICBBU1NF
UlQoIXJlbmRlcmVyKCkgfHwgaXM8VGV4dD4odGhpcykpOwotICAgIGlmIChpczxUZXh0Pih0aGlz
KSkKKyAgICBBU1NFUlQoIXJlbmRlcmVyKCkgfHwgaXM8VGV4dD4oKnRoaXMpKTsKKyAgICBpZiAo
aXM8VGV4dD4oKnRoaXMpKQogICAgICAgICBTdHlsZTo6dXBkYXRlVGV4dFJlbmRlcmVyQWZ0ZXJD
b250ZW50Q2hhbmdlKGRvd25jYXN0PFRleHQ+KCp0aGlzKSwgb2Zmc2V0T2ZSZXBsYWNlZERhdGEs
IG9sZExlbmd0aCk7CiAKLSAgICBpZiAoaXM8UHJvY2Vzc2luZ0luc3RydWN0aW9uPih0aGlzKSkK
KyAgICBpZiAoaXM8UHJvY2Vzc2luZ0luc3RydWN0aW9uPigqdGhpcykpCiAgICAgICAgIGRvd25j
YXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKnRoaXMpLmNoZWNrU3R5bGVTaGVldCgpOwogCiAg
ICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cAppbmRleCAxMGEyM2E1OGMxMjhhMzBjOWU5NTZlN2QxZGNjZmM5ODgxOWZmNjdjLi44YTRmM2Fi
NGUzY2FjNjYyZGZjNTAzMzRiM2IxYjNjM2QwNDQ0YjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIGlubGluZSBFeGNlcHRpb25D
b2RlIGNoZWNrQWNjZXB0Q2hpbGQoQ29udGFpbmVyTm9kZSogbmV3UGFyZW50LCBOb2RlKiBuZXcK
ICAgICBpZiAoY29udGFpbnNDb25zaWRlcmluZ0hvc3RFbGVtZW50cyhuZXdDaGlsZCwgbmV3UGFy
ZW50KSkKICAgICAgICAgcmV0dXJuIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKIAotICAgIGlmIChv
bGRDaGlsZCAmJiBpczxEb2N1bWVudD4obmV3UGFyZW50KSkgeworICAgIGlmIChvbGRDaGlsZCAm
JiBpczxEb2N1bWVudD4oKm5ld1BhcmVudCkpIHsKICAgICAgICAgaWYgKCFkb3duY2FzdDxEb2N1
bWVudD4oKm5ld1BhcmVudCkuY2FuUmVwbGFjZUNoaWxkKG5ld0NoaWxkLCBvbGRDaGlsZCkpCiAg
ICAgICAgICAgICByZXR1cm4gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwogICAgIH0gZWxzZSBpZiAo
IWlzQ2hpbGRUeXBlQWxsb3dlZChuZXdQYXJlbnQsIG5ld0NoaWxkKSkKQEAgLTM0OCw4ICszNDgs
OCBAQCB2b2lkIENvbnRhaW5lck5vZGU6Om5vdGlmeUNoaWxkUmVtb3ZlZChOb2RlJiBjaGlsZCwg
Tm9kZSogcHJldmlvdXNTaWJsaW5nLCBOb2RlKgogewogICAgIENoaWxkQ2hhbmdlIGNoYW5nZTsK
ICAgICBjaGFuZ2UudHlwZSA9IGlzPEVsZW1lbnQ+KGNoaWxkKSA/IEVsZW1lbnRSZW1vdmVkIDog
aXM8VGV4dD4oY2hpbGQpID8gVGV4dFJlbW92ZWQgOiBOb25Db250ZW50c0NoaWxkQ2hhbmdlZDsK
LSAgICBjaGFuZ2UucHJldmlvdXNTaWJsaW5nRWxlbWVudCA9ICghcHJldmlvdXNTaWJsaW5nIHx8
IGlzPEVsZW1lbnQ+KHByZXZpb3VzU2libGluZykpID8gZG93bmNhc3Q8RWxlbWVudD4ocHJldmlv
dXNTaWJsaW5nKSA6IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhwcmV2aW91c1Np
YmxpbmcpOwotICAgIGNoYW5nZS5uZXh0U2libGluZ0VsZW1lbnQgPSAoIW5leHRTaWJsaW5nIHx8
IGlzPEVsZW1lbnQ+KG5leHRTaWJsaW5nKSkgPyBkb3duY2FzdDxFbGVtZW50PihuZXh0U2libGlu
ZykgOiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhuZXh0U2libGluZyk7CisgICAgY2hh
bmdlLnByZXZpb3VzU2libGluZ0VsZW1lbnQgPSAoIXByZXZpb3VzU2libGluZyB8fCBpczxFbGVt
ZW50PigqcHJldmlvdXNTaWJsaW5nKSkgPyBkb3duY2FzdDxFbGVtZW50PihwcmV2aW91c1NpYmxp
bmcpIDogRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKHByZXZpb3VzU2libGluZyk7
CisgICAgY2hhbmdlLm5leHRTaWJsaW5nRWxlbWVudCA9ICghbmV4dFNpYmxpbmcgfHwgaXM8RWxl
bWVudD4oKm5leHRTaWJsaW5nKSkgPyBkb3duY2FzdDxFbGVtZW50PihuZXh0U2libGluZykgOiBF
bGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhuZXh0U2libGluZyk7CiAgICAgY2hhbmdlLnNv
dXJjZSA9IHNvdXJjZTsKIAogICAgIGNoaWxkcmVuQ2hhbmdlZChjaGFuZ2UpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAKaW5kZXggMDMxZDNjZDIx
YjYzZWM4MDgwMzY2OTg3ODYxMjBkMjRlZmEyZTU2My4uMzdjOTQ2Nzg3NTY5YWJiODFlNmVhOWMz
MDVjMWE4NzdhZmUxNjA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZUFsZ29yaXRobXMuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgQ2hpbGROb2RlSW5zZXJ0aW9u
Tm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudChDb250YWluZXJO
CiB2b2lkIENoaWxkTm9kZUluc2VydGlvbk5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50SW5zZXJ0
ZWRJbnRvVHJlZShDb250YWluZXJOb2RlJiBub2RlKQogewogICAgIGZvciAoTm9kZSogY2hpbGQg
PSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKLSAgICAgICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KGNoaWxkKSkKKyAgICAgICAgaWYgKGlz
PENvbnRhaW5lck5vZGU+KCpjaGlsZCkpCiAgICAgICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJ
bnRvVHJlZShkb3duY2FzdDxDb250YWluZXJOb2RlPigqY2hpbGQpKTsKICAgICB9CiAKQEAgLTg2
LDcgKzg2LDcgQEAgdm9pZCBDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRh
bnRSZW1vdmVkRnJvbURvY3VtZW50KENvbnRhaW5lck5vZGUKIHZvaWQgQ2hpbGROb2RlUmVtb3Zh
bE5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50UmVtb3ZlZEZyb21UcmVlKENvbnRhaW5lck5vZGUm
IG5vZGUpCiB7CiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaXM8Q29udGFp
bmVyTm9kZT4oY2hpbGQpKQorICAgICAgICBpZiAoaXM8Q29udGFpbmVyTm9kZT4oKmNoaWxkKSkK
ICAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoZG93bmNhc3Q8Q29udGFpbmVy
Tm9kZT4oKmNoaWxkKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Q3VycmVudFNjcmlwdEluY3JlbWVudGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VycmVudFNj
cmlwdEluY3JlbWVudGVyLmgKaW5kZXggYmQ3ZGUwNzBmNGNhYzc3ZDdiNTFiMjlkMGE2ZmQxMTM3
N2FjYzk5NS4uYTNjZjhmNDcwYzljNDM1OWNiNzNiMzgzMGUxNjVhNWY1Mzk0MmRiNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0N1cnJlbnRTY3JpcHRJbmNyZW1lbnRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIuaApAQCAtMzksNyAr
MzksNyBAQCBjbGFzcyBDdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIgewogcHVibGljOgogICAgIEN1
cnJlbnRTY3JpcHRJbmNyZW1lbnRlcihEb2N1bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGVsZW1l
bnQpCiAgICAgICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAgICAgLCBtX2lzSFRNTFNj
cmlwdEVsZW1lbnQoaXM8SFRNTFNjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAsIG1f
aXNIVE1MU2NyaXB0RWxlbWVudChpczxIVE1MU2NyaXB0RWxlbWVudD4oKmVsZW1lbnQpKQogICAg
IHsKICAgICAgICAgaWYgKG1faXNIVE1MU2NyaXB0RWxlbWVudCkKICAgICAgICAgICAgIG1fZG9j
dW1lbnQtPnB1c2hDdXJyZW50U2NyaXB0KGRvd25jYXN0PEhUTUxTY3JpcHRFbGVtZW50PihlbGVt
ZW50KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCmluZGV4IGM3ODM5NTkzY2QzMmI2
OGEwYWJlNjY4ZjAxODdhMjhmYjNkZDcyMjguLmZlMjFhZmZmZjM1OTkzYTlmZTQ5MTg1YjMyNTgw
MzgyMjc1OTM4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCkBAIC0yNTQsNyAr
MjU0LDcgQEAgdm9pZCBEYXRhVHJhbnNmZXI6OnNldERyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50
LCBpbnQgeCwgaW50IHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENhY2hlZEltYWdlKiBpbWFn
ZSA9IG51bGxwdHI7Ci0gICAgaWYgKGVsZW1lbnQgJiYgaXM8SFRNTEltYWdlRWxlbWVudD4oZWxl
bWVudCkgJiYgIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKKyAgICBpZiAoaXM8SFRNTEltYWdlRWxl
bWVudD4oZWxlbWVudCkgJiYgIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAgaW1hZ2Ug
PSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqZWxlbWVudCkuY2FjaGVkSW1hZ2UoKTsKIAog
ICAgIG1fZHJhZ0xvY2F0aW9uID0gSW50UG9pbnQoeCwgeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAppbmRleCBlYWNiMDdhZTkyYjEzNjkyOTg4M2RkZTE1YjkzYTFlZGY5ODQ2OTdjLi5lMzlmYzNh
NmI1YWJkMGJkNWFmODUzMDk1NDFiMzFjN2ZmOTI3ZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKQEAgLTE0MTUsNyArMTQxNSw3IEBAIEVsZW1lbnQqIERvY3VtZW50OjplbGVtZW50RnJvbVBv
aW50KGNvbnN0IExheW91dFBvaW50JiBjbGllbnRQb2ludCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBOb2RlKiBub2RlID0gbm9kZUZyb21Qb2ludChjbGllbnRQb2ludCk7Ci0gICAg
d2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFp
czxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAK
ICAgICBpZiAobm9kZSkKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFRp
dGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgLy8gVGhlIERPTSBBUEkgaGFzIG5vIG1ldGhv
ZCBvZiBzcGVjaWZ5aW5nIGRpcmVjdGlvbiwgc28gYXNzdW1lIExUUi4KICAgICB1cGRhdGVUaXRs
ZShTdHJpbmdXaXRoRGlyZWN0aW9uKHRpdGxlLCBMVFIpKTsKIAotICAgIGlmIChtX3RpdGxlRWxl
bWVudCAmJiBpczxIVE1MVGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1lbnQpKQorICAgIGlmIChp
czxIVE1MVGl0bGVFbGVtZW50PihtX3RpdGxlRWxlbWVudC5nZXQoKSkpCiAgICAgICAgIGRvd25j
YXN0PEhUTUxUaXRsZUVsZW1lbnQ+KCptX3RpdGxlRWxlbWVudCkuc2V0VGV4dCh0aXRsZSk7CiB9
CiAKQEAgLTQ2NjMsNyArNDY2Myw3IEBAIGNvbnN0IFZlY3RvcjxJY29uVVJMPiYgRG9jdW1lbnQ6
Omljb25VUkxzKGludCBpY29uVHlwZXNNYXNrKQogICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBj
aGlsZHJlbi0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKGkpOwotICAg
ICAgICBpZiAoIWlzPEhUTUxMaW5rRWxlbWVudD4oY2hpbGQpKQorICAgICAgICBpZiAoIWlzPEhU
TUxMaW5rRWxlbWVudD4oKmNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBI
VE1MTGlua0VsZW1lbnQmIGxpbmtFbGVtZW50ID0gZG93bmNhc3Q8SFRNTExpbmtFbGVtZW50Pigq
Y2hpbGQpOwogICAgICAgICBpZiAoIShsaW5rRWxlbWVudC5pY29uVHlwZSgpICYgaWNvblR5cGVz
TWFzaykpCkBAIC01OTE4LDkgKzU5MTgsOSBAQCBFbGVtZW50KiBldmVudFRhcmdldEVsZW1lbnRG
b3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50LT5mb2N1
c2VkRWxlbWVudCgpOwotICAgIGlmICghZWxlbWVudCAmJiBpczxQbHVnaW5Eb2N1bWVudD4oZG9j
dW1lbnQpKQorICAgIGlmICghZWxlbWVudCAmJiBpczxQbHVnaW5Eb2N1bWVudD4oKmRvY3VtZW50
KSkKICAgICAgICAgZWxlbWVudCA9IGRvd25jYXN0PFBsdWdpbkRvY3VtZW50PigqZG9jdW1lbnQp
LnBsdWdpbkVsZW1lbnQoKTsKLSAgICBpZiAoIWVsZW1lbnQgJiYgaXM8SFRNTERvY3VtZW50Pihk
b2N1bWVudCkpCisgICAgaWYgKCFlbGVtZW50ICYmIGlzPEhUTUxEb2N1bWVudD4oKmRvY3VtZW50
KSkKICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LT5ib2R5KCk7CiAgICAgaWYgKCFlbGVtZW50
KQogICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwpAQCAtNjA4
NCw3ICs2MDg0LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgRWxlbWVudCogaW4KICAgICAgICAgICAgICAgICBl
bGVtZW50c1RvUmVtb3ZlRnJvbUNoYWluLmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgfQogICAg
ICAgICAvLyBVbnNldCBob3ZlcmVkIG5vZGVzIGluIHN1YiBmcmFtZSBkb2N1bWVudHMgaWYgdGhl
IG9sZCBob3ZlcmVkIG5vZGUgd2FzIGEgZnJhbWUgb3duZXIuCi0gICAgICAgIGlmIChvbGRIb3Zl
cmVkRWxlbWVudCAmJiBpczxIVE1MRnJhbWVPd25lckVsZW1lbnQ+KCpvbGRIb3ZlcmVkRWxlbWVu
dCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGcmFtZU93bmVyRWxlbWVudD4ob2xkSG92ZXJlZEVs
ZW1lbnQuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGNvbnRlbnREb2N1bWVu
dCA9IGRvd25jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudD4oKm9sZEhvdmVyZWRFbGVtZW50KS5j
b250ZW50RG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQtPnVwZGF0
ZUhvdmVyQWN0aXZlU3RhdGUocmVxdWVzdCwgbnVsbHB0cik7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAppbmRl
eCBjZGE2YzA3Y2JhNGM0MGUzZGE0NjAxMjQzMDc2YjBmNzY0ZjJlNDViLi43YTZkZmI5NDRmMWYw
NjkyNDM3ZGJmM2FiZTFhYjQ5MDdlMDYwOTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAg
dm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVl
dHMoVmVjdG9yPFJlZlB0cjxTdHlsZVMKIAogICAgIGZvciAoYXV0byYgbm9kZSA6IG1fc3R5bGVT
aGVldENhbmRpZGF0ZU5vZGVzKSB7CiAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gbnVsbHB0
cjsKLSAgICAgICAgaWYgKGlzPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obm9kZSkpIHsKKyAgICAg
ICAgaWYgKGlzPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKm5vZGUpKSB7CiAgICAgICAgICAgICAv
LyBQcm9jZXNzaW5nIGluc3RydWN0aW9uIChYTUwgZG9jdW1lbnRzIG9ubHkpLgogICAgICAgICAg
ICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBsaW5raW5nIHRvIGVtYmVkZGVkIENTUyBzdHlsZXNoZWV0
cywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkyODE+IGZv
ciBkaXNjdXNzaW9uLgogICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uJiBwaSA9IGRv
d25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CmluZGV4IGU5Y2JlMDc4MjBiMzU0ZmFmOTRmNDI3MDQ3MTFlYTUwZDQ1MDBhZGIuLmM2ZTFmZmZi
MThmMTMzNWI3NWI0MDEzZGYwMzcxOTc3MzBlNDM3MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
QEAgLTIxOTUsMTIgKzIxOTUsMTIgQEAgQXRvbWljU3RyaW5nIEVsZW1lbnQ6OmNvbXB1dGVJbmhl
cml0ZWRMYW5ndWFnZSgpIGNvbnN0CiAgICAgLy8gVGhlIGxhbmd1YWdlIHByb3BlcnR5IGlzIGlu
aGVyaXRlZCwgc28gd2UgaXRlcmF0ZSBvdmVyIHRoZSBwYXJlbnRzIHRvIGZpbmQgdGhlIGZpcnN0
IGxhbmd1YWdlLgogICAgIGNvbnN0IE5vZGUqIGN1cnJlbnROb2RlID0gdGhpczsKICAgICB3aGls
ZSAoKGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSkpIHsKLSAgICAgICAg
aWYgKGlzPEVsZW1lbnQ+KGN1cnJlbnROb2RlKSkgeworICAgICAgICBpZiAoaXM8RWxlbWVudD4o
KmN1cnJlbnROb2RlKSkgewogICAgICAgICAgICAgaWYgKGNvbnN0IEVsZW1lbnREYXRhKiBlbGVt
ZW50RGF0YSA9IGRvd25jYXN0PEVsZW1lbnQ+KCpjdXJyZW50Tm9kZSkuZWxlbWVudERhdGEoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1l
bnREYXRhLT5maW5kTGFuZ3VhZ2VBdHRyaWJ1dGUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChpczxEb2N1bWVudD4oY3VycmVudE5vZGUpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8RG9j
dW1lbnQ+KCpjdXJyZW50Tm9kZSkpIHsKICAgICAgICAgICAgIC8vIGNoZWNraW5nIHRoZSBNSU1F
IGNvbnRlbnQtbGFuZ3VhZ2UKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4o
KmN1cnJlbnROb2RlKS5jb250ZW50TGFuZ3VhZ2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKaW5kZXggMDBmMmJjYjI2NmFmZDIzZDQxNzllMTFlODgzZDVmOTFlODcwNzBiMC4uOTE2MjM5
NDY0NDg4MWQ4MmI4YWZmMTVjODUyNDRhMTNhOWY3YTAyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBA
IC02NzksNyArNjc5LDcgQEAgaW5saW5lIE5hbWVkTm9kZU1hcCogTm9kZTo6YXR0cmlidXRlcygp
IGNvbnN0CiBpbmxpbmUgRWxlbWVudCogTm9kZTo6cGFyZW50RWxlbWVudCgpIGNvbnN0CiB7CiAg
ICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwotICAgIHJldHVybiBwYXJl
bnQgJiYgaXM8RWxlbWVudD4ocGFyZW50KSA/IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudCkgOiBu
dWxscHRyOworICAgIHJldHVybiBpczxFbGVtZW50PihwYXJlbnQpID8gZG93bmNhc3Q8RWxlbWVu
dD4ocGFyZW50KSA6IG51bGxwdHI7CiB9CiAKIGlubGluZSBib29sIEVsZW1lbnQ6OmZhc3RIYXNB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50VHJhdmVyc2FsLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudFRyYXZlcnNhbC5oCmluZGV4IDAyZmZkMzM0NmI3Yjk4Nzk0ODBkNGNjN2IyOTI5Mzg2
Y2ZmNTA0YzkuLmM1Yzk5OTRlN2ExMzQ1NDM4NGUyOTRkMDdlMGRjZTVlYjM5YjhiMGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50VHJhdmVyc2FsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRUcmF2ZXJzYWwuaApAQCAtOTUsNyArOTUsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ3VycmVudFR5cGU+CiBpbmxpbmUgRWxlbWVudCogVHJhdmVyc2FsPEVsZW1l
bnQ+OjpuZXh0VGVtcGxhdGUoQ3VycmVudFR5cGUqIGN1cnJlbnQpCiB7CiAgICAgTm9kZSogbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoY3VycmVudCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYgIWlz
PEVsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pigqbm9kZSkp
CiAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2Rl
KTsKICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CkBAIC0xMDUsNyArMTA1
LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEN1cnJlbnRUeXBlPgogaW5saW5lIEVsZW1lbnQqIFRy
YXZlcnNhbDxFbGVtZW50Pjo6bmV4dFRlbXBsYXRlKEN1cnJlbnRUeXBlKiBjdXJyZW50LCBjb25z
dCBOb2RlKiBzdGF5V2l0aGluKQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KGN1cnJlbnQsIHN0YXlXaXRoaW4pOwotICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50
Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSwgc3RheVdp
dGhpbik7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQpAQCAtMjU4LDcg
KzI1OCw3IEBAIGlubGluZSBFbGVtZW50VHlwZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4
dChjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlCiBpbmxpbmUgRWxlbWVudCogRWxlbWVu
dFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSogY3VycmVudCwg
Y29uc3QgTm9kZSogc3RheVdpdGhpbikKIHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNh
bDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgc3RheVdpdGhpbik7Ci0gICAgd2hp
bGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxF
bGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c0lu
Y2x1ZGluZ1BzZXVkbyhub2RlLCBzdGF5V2l0aGluKTsKICAgICByZXR1cm4gZG93bmNhc3Q8RWxl
bWVudD4obm9kZSk7CiB9CkBAIC0yNjYsNyArMjY2LDcgQEAgaW5saW5lIEVsZW1lbnQqIEVsZW1l
bnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQs
IGMKIGlubGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRv
KGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7CiAgICAgTm9k
ZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgc3Rh
eVdpdGhpbik7Ci0gICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIHdo
aWxlIChub2RlICYmICFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKG5vZGUsIHN0YXlXaXRoaW4pOwogICAgIHJldHVy
biBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0KQEAgLTI3NCw3ICsyNzQsNyBAQCBpbmxpbmUg
RWxlbWVudCogRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2Rl
KiBjdXJyZW50LCBjb25zdAogaW5saW5lIEVsZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJ
bmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0
IE5vZGUqIHN0YXlXaXRoaW4pCiB7CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGN1cnJlbnQsIHN0YXlXaXRoaW4pOwot
ICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAm
JiAhaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4obm9kZSwgc3RheVdpdGhpbik7CiAgICAg
cmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQpAQCAtMjgyLDcgKzI4Miw3IEBAIGlu
bGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBp
bmdDaGlsZHJlbihjb25zdCBOb2RlCiBpbmxpbmUgRWxlbWVudCogRWxlbWVudFRyYXZlcnNhbDo6
cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCkKIHsKICAgICBO
b2RlKiBub2RlID0gY3VycmVudC0+cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKTsKLSAgICB3
aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlz
PEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBzZXVkb0F3YXJlUHJldmlv
dXNTaWJsaW5nKCk7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBmNzc5OGQzMGE0MDcyOWYwMmNl
MWZhZGJjZDg2YjA3MTQxMDhjMWEyLi5kOGVlMTlmN2Y0ZjllZDRiMzVmMmFiOWM4ZDkxN2Y2YzM1
MzZhNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtNjAsNyAr
NjAsNyBAQCBwcml2YXRlOgogV2luZG93RXZlbnRDb250ZXh0OjpXaW5kb3dFdmVudENvbnRleHQo
UGFzc1JlZlB0cjxOb2RlPiBub2RlLCBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4
dCkKIHsKICAgICBOb2RlKiB0b3BMZXZlbENvbnRhaW5lciA9IHRvcEV2ZW50Q29udGV4dCA/IHRv
cEV2ZW50Q29udGV4dC0+bm9kZSgpIDogbm9kZS5nZXQoKTsKLSAgICBpZiAoIWlzPERvY3VtZW50
Pih0b3BMZXZlbENvbnRhaW5lcikpCisgICAgaWYgKCFpczxEb2N1bWVudD4oKnRvcExldmVsQ29u
dGFpbmVyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV93aW5kb3cgPSBkb3duY2FzdDxEb2N1
bWVudD4oKnRvcExldmVsQ29udGFpbmVyKS5kb21XaW5kb3coKTsKQEAgLTM1Niw3ICszNTYsNyBA
QCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NS
ZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dFdmVu
dENvbnRleHQobm9kZS5nZXQoKSwgZXZlbnRQYXRoLmxhc3RDb250ZXh0SWZFeGlzdHMoKSk7CiAK
ICAgICBJbnB1dEVsZW1lbnRDbGlja1N0YXRlIGNsaWNrSGFuZGxpbmdTdGF0ZTsKLSAgICBpZiAo
aXM8SFRNTElucHV0RWxlbWVudD4obm9kZS5nZXQoKSkpCisgICAgaWYgKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KCpub2RlKSkKICAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUp
LndpbGxEaXNwYXRjaEV2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAgIGlm
ICghZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpICYmICFldmVudFBhdGguaXNFbXB0eSgpKQpA
QCAtNDE4LDcgKzQxOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRFdmVudENyb3NzU2hh
ZG93Qm91bmRhcnkoRXZlbnQmIGV2ZW50LCBTaGFkb3dSb290JiBzaGFkCiAKIHN0YXRpYyBOb2Rl
KiBub2RlT3JIb3N0SWZQc2V1ZG9FbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIGlz
PFBzZXVkb0VsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4oKm5vZGUpLmhv
c3RFbGVtZW50KCkgOiBub2RlOworICAgIHJldHVybiBpczxQc2V1ZG9FbGVtZW50Pigqbm9kZSkg
PyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKSA6IG5vZGU7CiB9
CiAKIEV2ZW50UGF0aDo6RXZlbnRQYXRoKE5vZGUmIHRhcmdldE5vZGUsIEV2ZW50JiBldmVudCkK
QEAgLTQ0Nyw3ICs0NDcsNyBAQCBFdmVudFBhdGg6OkV2ZW50UGF0aChOb2RlJiB0YXJnZXROb2Rl
LCBFdmVudCYgZXZlbnQpCiAgICAgICAgICAgICAgICAgbV9wYXRoLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPEV2ZW50Q29udGV4dD4obm9kZSwgJmN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOwogICAg
ICAgICAgICAgaWYgKCFpbkRvY3VtZW50KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGlmIChpczxTaGFkb3dSb290Pihub2RlKSkKKyAgICAgICAgICAgIGlmIChpczxTaGFk
b3dSb290Pigqbm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCFub2RlIHx8ICFzaG91bGRFdmVudENyb3NzU2hhZG93Qm91bmRhcnkoZXZlbnQsIGRv
d25jYXN0PFNoYWRvd1Jvb3Q+KCpub2RlKSwgKnRhcmdldCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0LmNwcAppbmRleCA0ODM3ZDg2MWRmY2ZhNmExOTQ2YjU3N2JmZDY0MzVlMDE3NzRkZTg4Li45
ODlmNTAyNjFmNjE1MWY5YzYzMTZlMGY5NjhhNGY4N2MwOTRhZTJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5jcHAKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpmaXJl
RXZlbnRMaXN0ZW5lcnMoRXZlbnQqIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50TGlz
dAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbnVsbHB0cjsKICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRDb29raWU7Ci0gICAgaWYg
KGNvbnRleHQgJiYgaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CisgICAgaWYgKGlzPERvY3VtZW50
Pihjb250ZXh0KSkgewogICAgICAgICBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250
ZXh0KTsKICAgICAgICAgd2lsbERpc3BhdGNoRXZlbnRDb29raWUgPSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KGRvY3VtZW50LCAqZXZlbnQsIHNpemUgPiAwKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKaW5kZXggYjQwMzE0MGE5ODBm
YTM4M2M2NWQ1ZTMwNDI4YTk1NDU2YTQxZGViMC4uNjRjZWJhMmYxMDkxMjc5ZjU4MWM4OThjOTNh
NTAzNGFmZDFhMmQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcApAQCAtMjIw
LDcgKzIyMCw3IEBAIGludCBLZXlib2FyZEV2ZW50Ojp3aGljaCgpIGNvbnN0CiBLZXlib2FyZEV2
ZW50KiBmaW5kS2V5Ym9hcmRFdmVudChFdmVudCogZXZlbnQpCiB7CiAgICAgZm9yIChFdmVudCog
ZSA9IGV2ZW50OyBlOyBlID0gZS0+dW5kZXJseWluZ0V2ZW50KCkpCi0gICAgICAgIGlmIChpczxL
ZXlib2FyZEV2ZW50PihlKSkKKyAgICAgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KCplKSkKICAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxLZXlib2FyZEV2ZW50PihlKTsKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAKaW5kZXggZWUyMGUxMWRk
YTQ0YTQzYTI2NmM5NGU3NjJhODViNjYxYzE4ZDA2Yy4uNGJiYWZkZmFjMGMzMzQ3Y2JhMjI2ODNk
MjY1ZjFiOTQ2ODc5ZmRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2Rl
TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAKQEAgLTY4
LDcgKzY4LDcgQEAgTm9kZSogTGl2ZU5vZGVMaXN0OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nJiBlbGVtZW50SWQpIGNvbnN0CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3Ro
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAg
IE5vZGUqIG5vZGUgPSBpdGVtKGkpOwotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQor
ICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgZ2V0SWRBdHRyaWJ1
dGUgaW5zdGVhZCBvZiBpZEZvclN0eWxlUmVzb2x1dGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuY3BwCmluZGV4IDU4YmViN2Y5YWE0NmQ2NzY5NjI5YjY0Y2JkZWNmNDQ5ZWE0MTg0MWUuLmY4
OGFlNzc4NWQxN2I1ZmI2OTliODJkMTBhMWUwOTcyMjA3OWJmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01l
c3NhZ2VQb3J0LmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc3Bh
dGNoTWVzc2FnZXMoKQogICAgIHdoaWxlIChtX2VudGFuZ2xlZENoYW5uZWwgJiYgbV9lbnRhbmds
ZWRDaGFubmVsLT50cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShtZXNzYWdlLCBjaGFubmVscykpIHsK
IAogICAgICAgICAvLyBjbG9zZSgpIGluIFdvcmtlciBvbm1lc3NhZ2UgaGFuZGxlciBzaG91bGQg
cHJldmVudCBuZXh0IG1lc3NhZ2UgZnJvbSBkaXNwYXRjaGluZy4KLSAgICAgICAgaWYgKGlzPFdv
cmtlckdsb2JhbFNjb3BlPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpICYmIGRvd25jYXN0PFdv
cmtlckdsb2JhbFNjb3BlPigqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KS5pc0Nsb3NpbmcoKSkK
KyAgICAgICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigqbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KSAmJiBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKm1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkuaXNDbG9zaW5nKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xl
UG9ydHMoKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgV1RGOjptb3ZlKGNoYW5uZWxzKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5jcHAKaW5kZXggNThkM2Q2MGNkMTUzMzkyZDZhNTYyYmQ3Y2Rl
NWUxNGVjNWY1OWM2Yi4uZGY5NDM4OGM0ZGM1ODQxMzEyMmJjOTgyNDU4OTc2YTY0ZDJmMTRlMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAtMjc2LDcgKzI3Niw3IEBAIFNpbXVsYXRl
ZE1vdXNlRXZlbnQ6OlNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFBhc3NSZWZQCiAgICAgfQogICAgIHNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5n
RXZlbnQpOwogCi0gICAgaWYgKHRoaXMtPnVuZGVybHlpbmdFdmVudCgpICYmIGlzPE1vdXNlRXZl
bnQ+KHRoaXMtPnVuZGVybHlpbmdFdmVudCgpKSkgeworICAgIGlmIChpczxNb3VzZUV2ZW50Pih0
aGlzLT51bmRlcmx5aW5nRXZlbnQoKSkpIHsKICAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVu
dCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCp0aGlzLT51bmRlcmx5aW5nRXZlbnQoKSk7CiAgICAg
ICAgIG1fc2NyZWVuTG9jYXRpb24gPSBtb3VzZUV2ZW50LnNjcmVlbkxvY2F0aW9uKCk7CiAgICAg
ICAgIGluaXRDb29yZGluYXRlcyhtb3VzZUV2ZW50LmNsaWVudExvY2F0aW9uKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTmFtZWROb2RlTWFwLmNwcAppbmRleCBhYWVhMGJhNjIxYWYzZmYyYzM4YzI0M2U3Njhl
NTk1NzQ3NTYzMWYzLi43MTRiYTE3YzZhYWIyNzk5ZGU3MzNjY2FiYjY4YWQ0NjQwMjM1MzA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcApAQCAtODYsNyArODYsNyBAQCBQYXNzUmVm
UHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKE5vZGUqIG5vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogICAgIH0KIAogICAgIC8vIE5vdCBtZW50aW9uZWQgaW4gc3BlYzogdGhyb3cg
YSBISUVSQVJDSFlfUkVRVUVTVF9FUlJPUiBpZiB0aGUgdXNlciBwYXNzZXMgaW4gYSBub24tYXR0
cmlidXRlIG5vZGUKLSAgICBpZiAoIWlzPEF0dHI+KG5vZGUpKSB7CisgICAgaWYgKCFpczxBdHRy
Pigqbm9kZSkpIHsKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA1NmM3NmMwODM5ODFi
M2FiMmNmMGE4YTIyY2EzYjYyMGI5MmFlN2FkLi5hZjQ3MTY0NWY1MGM3MzUyM2RkYmRjNmI3OTg1
NTcxOGJlYWIwODBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBO
b2RlOjpkdW1wU3RhdGlzdGljcygpCiAKICAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkp
IHsKICAgICAgICAgICAgICsrbm9kZXNXaXRoUmFyZURhdGE7Ci0gICAgICAgICAgICBpZiAoaXM8
RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsK
ICAgICAgICAgICAgICAgICArK2VsZW1lbnRzV2l0aFJhcmVEYXRhOwogICAgICAgICAgICAgICAg
IGlmIChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaGFzTmFtZWROb2RlTWFwKCkpCiAgICAgICAg
ICAgICAgICAgICAgICsrZWxlbWVudHNXaXRoTmFtZWROb2RlTWFwOwpAQCAtODcyLDcgKzg3Miw3
IEBAIGJvb2wgTm9kZTo6Y29udGFpbnNJbmNsdWRpbmdIb3N0RWxlbWVudHMoY29uc3QgTm9kZSog
bm9kZSkgY29uc3QKIAogTm9kZSogTm9kZTo6cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKSBj
b25zdAogewotICAgIEVsZW1lbnQqIHBhcmVudE9ySG9zdCA9IGlzPFBzZXVkb0VsZW1lbnQ+KHRo
aXMpID8gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4oKnRoaXMpLmhvc3RFbGVtZW50KCkgOiBwYXJl
bnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogcGFyZW50T3JIb3N0ID0gaXM8UHNldWRvRWxlbWVu
dD4oKnRoaXMpID8gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4oKnRoaXMpLmhvc3RFbGVtZW50KCkg
OiBwYXJlbnRFbGVtZW50KCk7CiAgICAgaWYgKHBhcmVudE9ySG9zdCAmJiAhcHJldmlvdXNTaWJs
aW5nKCkpIHsKICAgICAgICAgaWYgKGlzQWZ0ZXJQc2V1ZG9FbGVtZW50KCkgJiYgcGFyZW50T3JI
b3N0LT5sYXN0Q2hpbGQoKSkKICAgICAgICAgICAgIHJldHVybiBwYXJlbnRPckhvc3QtPmxhc3RD
aGlsZCgpOwpAQCAtODg0LDcgKzg4NCw3IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlUHJldmlv
dXNTaWJsaW5nKCkgY29uc3QKIAogTm9kZSogTm9kZTo6cHNldWRvQXdhcmVOZXh0U2libGluZygp
IGNvbnN0CiB7Ci0gICAgRWxlbWVudCogcGFyZW50T3JIb3N0ID0gaXM8UHNldWRvRWxlbWVudD4o
dGhpcykgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqdGhpcykuaG9zdEVsZW1lbnQoKSA6IHBh
cmVudEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBwYXJlbnRPckhvc3QgPSBpczxQc2V1ZG9FbGVt
ZW50PigqdGhpcykgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqdGhpcykuaG9zdEVsZW1lbnQo
KSA6IHBhcmVudEVsZW1lbnQoKTsKICAgICBpZiAocGFyZW50T3JIb3N0ICYmICFuZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIGlmIChpc0JlZm9yZVBzZXVkb0VsZW1lbnQoKSAmJiBwYXJlbnRPckhv
c3QtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgIHJldHVybiBwYXJlbnRPckhvc3QtPmZpcnN0
Q2hpbGQoKTsKQEAgLTkyNyw3ICs5MjcsNyBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUxhc3RD
aGlsZCgpIGNvbnN0CiBSZW5kZXJTdHlsZSogTm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBw
c2V1ZG9FbGVtZW50U3BlY2lmaWVyKQogewogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5v
ZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpIHsKLSAgICAgICAgaWYg
KGlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKQogICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5jb21wdXRlZFN0eWxlKHBz
ZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEw
MDQsMTAgKzEwMDQsMTAgQEAgRWxlbWVudCogTm9kZTo6cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVu
dCgpIGNvbnN0CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KHBhcmVudCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxT
aGFkb3dSb290PihwYXJlbnQpLT5ob3N0RWxlbWVudCgpOworICAgIGlmIChpczxTaGFkb3dSb290
PigqcGFyZW50KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCpwYXJlbnQp
Lmhvc3RFbGVtZW50KCk7CiAKLSAgICBpZiAoIWlzPEVsZW1lbnQ+KHBhcmVudCkpCisgICAgaWYg
KCFpczxFbGVtZW50PigqcGFyZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBy
ZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50KTsKQEAgLTEwNTcsOSArMTA1Nyw5IEBAIEVs
ZW1lbnQqIE5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQq
IHJlc3VsdCA9IG51bGxwdHI7CiAgICAgZm9yIChOb2RlKiBub2RlID0gY29uc3RfY2FzdDxOb2Rl
Kj4odGhpcyk7IG5vZGUgJiYgbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOyBub2RlID0gbm9kZS0+
cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAg
aWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIHJlc3VsdCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGUpOwotICAgICAgICBpZiAoaXM8SFRNTEJvZHlFbGVtZW50Pihub2RlKSkKKyAg
ICAgICAgaWYgKGlzPEhUTUxCb2R5RWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzg0LDcgKzEzODQsNyBAQCBFbGVtZW50
KiBOb2RlOjphbmNlc3RvckVsZW1lbnQoKSBjb25zdAogewogICAgIC8vIEluIHRoZW9yeSwgdGhl
cmUgY2FuIGJlIEVudGl0eVJlZmVyZW5jZSBub2RlcyBiZXR3ZWVuIGVsZW1lbnRzLCBidXQgdGhp
cyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KICAgICBmb3IgKENvbnRhaW5lck5vZGUqIGFu
Y2VzdG9yID0gcGFyZW50Tm9kZSgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFy
ZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50PihhbmNlc3RvcikpCisgICAgICAg
IGlmIChpczxFbGVtZW50PigqYW5jZXN0b3IpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEVsZW1lbnQ+KGFuY2VzdG9yKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNDA0
LDggKzE0MDQsOCBAQCB1bnNpZ25lZCBzaG9ydCBOb2RlOjpjb21wYXJlRG9jdW1lbnRQb3NpdGlv
bihOb2RlKiBvdGhlck5vZGUpCiAgICAgaWYgKG90aGVyTm9kZSA9PSB0aGlzKQogICAgICAgICBy
ZXR1cm4gRE9DVU1FTlRfUE9TSVRJT05fRVFVSVZBTEVOVDsKICAgICAKLSAgICBBdHRyKiBhdHRy
MSA9IGlzPEF0dHI+KHRoaXMpID8gZG93bmNhc3Q8QXR0cj4odGhpcykgOiBudWxscHRyOwotICAg
IEF0dHIqIGF0dHIyID0gaXM8QXR0cj4ob3RoZXJOb2RlKSA/IGRvd25jYXN0PEF0dHI+KG90aGVy
Tm9kZSkgOiBudWxscHRyOworICAgIEF0dHIqIGF0dHIxID0gaXM8QXR0cj4oKnRoaXMpID8gZG93
bmNhc3Q8QXR0cj4odGhpcykgOiBudWxscHRyOworICAgIEF0dHIqIGF0dHIyID0gaXM8QXR0cj4o
Km90aGVyTm9kZSkgPyBkb3duY2FzdDxBdHRyPihvdGhlck5vZGUpIDogbnVsbHB0cjsKICAgICAK
ICAgICBOb2RlKiBzdGFydDEgPSBhdHRyMSA/IGF0dHIxLT5vd25lckVsZW1lbnQoKSA6IHRoaXM7
CiAgICAgTm9kZSogc3RhcnQyID0gYXR0cjIgPyBhdHRyMi0+b3duZXJFbGVtZW50KCkgOiBvdGhl
ck5vZGU7CkBAIC0xNTI5LDcgKzE1MjksNyBAQCBGbG9hdFBvaW50IE5vZGU6OmNvbnZlcnRGcm9t
UGFnZShjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAogCiBzdGF0aWMgdm9pZCBhcHBlbmRBdHRy
aWJ1dGVEZXNjKGNvbnN0IE5vZGUqIG5vZGUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IGNoYXIqIGF0dHJEZXNjKQogewotICAg
IGlmICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0ciA9IGRvd25jYXN0
PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUobmFtZSk7CkBAIC0xNTcyLDcgKzE1NzIsNyBA
QCB2b2lkIE5vZGU6OnNob3dOb2RlUGF0aEZvclRoaXMoKSBjb25zdAogICAgIH0KICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gY2hhaW4uc2l6ZSgpOyBpbmRleCA+IDA7IC0taW5kZXgpIHsKICAg
ICAgICAgY29uc3QgTm9kZSogbm9kZSA9IGNoYWluW2luZGV4IC0gMV07Ci0gICAgICAgIGlmIChp
czxTaGFkb3dSb290Pihub2RlKSkgeworICAgICAgICBpZiAoaXM8U2hhZG93Um9vdD4oKm5vZGUp
KSB7CiAgICAgICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICAgICAgZm9yIChjb25zdCBT
aGFkb3dSb290KiBzaGFkb3dSb290ID0gZG93bmNhc3Q8U2hhZG93Um9vdD4obm9kZSk7IHNoYWRv
d1Jvb3QgJiYgc2hhZG93Um9vdCAhPSBub2RlOyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+c2hh
ZG93Um9vdCgpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CkBAIC0xNzIzLDcgKzE3MjMsNyBA
QCBFbGVtZW50KiBOb2RlOjplbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKQogICAgICAg
ICAvLyBGb3IgaW1hZ2VtYXBzLCB0aGUgZW5jbG9zaW5nIGxpbmsgZWxlbWVudCBpcyB0aGUgYXNz
b2NpYXRlZCBhcmVhIGVsZW1lbnQgbm90IHRoZSBpbWFnZSBpdHNlbGYuCiAgICAgICAgIC8vIFNv
IHdlIGRvbid0IGxldCBpbWFnZXMgYmUgdGhlIGVuY2xvc2luZyBsaW5rIGVsZW1lbnQsIGV2ZW4g
dGhvdWdoIGlzTGluayBzb21ldGltZXMgcmV0dXJucwogICAgICAgICAvLyB0cnVlIGZvciB0aGVt
LgotICAgICAgICBpZiAobm9kZS0+aXNMaW5rKCkgJiYgIWlzPEhUTUxJbWFnZUVsZW1lbnQ+KG5v
ZGUpKQorICAgICAgICBpZiAobm9kZS0+aXNMaW5rKCkgJiYgIWlzPEhUTUxJbWFnZUVsZW1lbnQ+
KCpub2RlKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAg
ICB9CiAKQEAgLTIwMzIsNyArMjAzMiw3IEBAIHZvaWQgTm9kZTo6ZGlzcGF0Y2hTY29wZWRFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIGJvb2wgTm9kZTo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExB
VEZPUk0oSU9TKQotICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudC5nZXQoKSkpCisgICAgaWYg
KGlzPFRvdWNoRXZlbnQ+KCpldmVudCkpCiAgICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoRXZl
bnQoYWRvcHRSZWYoZG93bmNhc3Q8VG91Y2hFdmVudD4oZXZlbnQubGVha1JlZigpKSkpOwogI2Vu
ZGlmCiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVu
dCk7CkBAIC0yMTAwLDEyICsyMTAwLDEyIEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NF
dmVudCkgewotICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CisgICAgICAg
IGlmIChpczxLZXlib2FyZEV2ZW50PigqZXZlbnQpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5kZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoZG93bmNhc3Q8S2V5Ym9hcmRF
dmVudD4oZXZlbnQpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIGludCBkZXRhaWwgPSBpczxVSUV2ZW50
PihldmVudCkgPyBkb3duY2FzdDxVSUV2ZW50PigqZXZlbnQpLmRldGFpbCgpIDogMDsKKyAgICAg
ICAgaW50IGRldGFpbCA9IGlzPFVJRXZlbnQ+KCpldmVudCkgPyBkb3duY2FzdDxVSUV2ZW50Pigq
ZXZlbnQpLmRldGFpbCgpIDogMDsKICAgICAgICAgaWYgKGRpc3BhdGNoRE9NQWN0aXZhdGVFdmVu
dChkZXRhaWwsIGV2ZW50KSkKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQpAQCAtMjExNSwxMiArMjExNSwxMiBAQCB2b2lk
IE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgICAg
IHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLmhhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZl
bnQpOwogI2VuZGlmCiAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRl
eHRJbnB1dEV2ZW50KSB7Ci0gICAgICAgIGlmIChpczxUZXh0RXZlbnQ+KGV2ZW50KSkgeworICAg
ICAgICBpZiAoaXM8VGV4dEV2ZW50PigqZXZlbnQpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5kZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKGRvd25jYXN0PFRleHRFdmVu
dD4oZXZlbnQpKTsKICAgICAgICAgfQogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5HKQotICAgIH0g
ZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxN
b3VzZUV2ZW50PihldmVudCkpIHsKKyAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oKmV2ZW50KSkgewogICAgICAg
ICBpZiAoZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBNaWRkbGVCdXR0
b24pIHsKICAgICAgICAgICAgIGlmIChlbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMTM1LDcgKzIxMzUsNyBAQCB2b2lkIE5vZGU6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndo
ZWVsRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYm
IGlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkgeworICAgIH0gZWxzZSBpZiAoKGV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNl
d2hlZWxFdmVudCkgJiYgaXM8V2hlZWxFdmVudD4oKmV2ZW50KSkgewogCiAgICAgICAgIC8vIElm
IHdlIGRvbid0IGhhdmUgYSByZW5kZXJlciwgc2VuZCB0aGUgd2hlZWwgZXZlbnQgdG8gdGhlIGZp
cnN0IG5vZGUgd2UgZmluZCB3aXRoIGEgcmVuZGVyZXIuCiAgICAgICAgIC8vIFRoaXMgaXMgbmVl
ZGVkIGZvciA8b3B0aW9uPiBhbmQgPG9wdGdyb3VwPiBlbGVtZW50cyBzbyB0aGF0IDxzZWxlY3Q+
cyBnZXQgYSB3aGVlbCBzY3JvbGwuCkBAIC0yMTQ3LDcgKzIxNDcsNyBAQCB2b2lkIE5vZGU6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCkuZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKHN0YXJ0Tm9kZSwgZG93bmNhc3Q8V2hl
ZWxFdmVudD4oZXZlbnQpKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiBQTEFURk9STShJ
T1MpCi0gICAgfSBlbHNlIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkgJiYgZXZlbnROYW1lcygp
LmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkgeworICAgIH0gZWxzZSBpZiAoaXM8VG91Y2hF
dmVudD4oKmV2ZW50KSAmJiBldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUp
KSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwog
ICAgICAgICB3aGlsZSAocmVuZGVyZXIgJiYgKCFyZW5kZXJlci0+aXNCb3goKSB8fCAhdG9SZW5k
ZXJCb3gocmVuZGVyZXIpLT5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkpCiAg
ICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2FsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2FsLmNwcAppbmRleCA4MmVjN2RiNjJlYWM5NDQy
MmM1YTk5Nzg2MDkyMzY0Y2UyZDg0OWI1Li5kNTA3YmMxMjU3MGJiNGM4OTk4MjQyMmY3MjMzMjZm
OGIzNDQ3MDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ1Ry
YXZlcnNhbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdUcmF2ZXJz
YWwuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuQmVEaXN0
cmlidXRlZChjb25zdCBOb2RlKiBub2RlKQogICAgIGlmIChwYXJlbnQtPmlzU2hhZG93Um9vdCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXM8RWxlbWVudD4ocGFyZW50KSAm
JiBkb3duY2FzdDxFbGVtZW50PigqcGFyZW50KS5zaGFkb3dSb290KCkpCisgICAgaWYgKGlzPEVs
ZW1lbnQ+KCpwYXJlbnQpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpwYXJlbnQpLnNoYWRvd1Jvb3Qo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTMy
LDEwICsxMzIsMTAgQEAgc3RhdGljIENvbnRhaW5lck5vZGUqIHRyYXZlcnNlUGFyZW50KGNvbnN0
IE5vZGUqIG5vZGUsIFNoYWRvd1Jvb3RDcm9zc2luZyBzaGFkb3cKICAgICBpZiAoIXBhcmVudCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoaXM8U2hhZG93Um9vdD4ocGFyZW50
KSkKKyAgICBpZiAoaXM8U2hhZG93Um9vdD4oKnBhcmVudCkpCiAgICAgICAgIHJldHVybiBzaGFk
b3dSb290Q3Jvc3NpbmcgPT0gQ3Jvc3NTaGFkb3dSb290ID8gZG93bmNhc3Q8U2hhZG93Um9vdD4o
cGFyZW50KS0+aG9zdEVsZW1lbnQoKSA6IHBhcmVudDsKIAotICAgIGlmIChpczxJbnNlcnRpb25Q
b2ludD4ocGFyZW50KSkgeworICAgIGlmIChpczxJbnNlcnRpb25Qb2ludD4oKnBhcmVudCkpIHsK
ICAgICAgICAgY29uc3QgSW5zZXJ0aW9uUG9pbnQmIGluc2VydGlvblBvaW50ID0gZG93bmNhc3Q8
SW5zZXJ0aW9uUG9pbnQ+KCpwYXJlbnQpOwogICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaGFz
RGlzdHJpYnV0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlVHJhdmVyc2FsLmNwcAppbmRleCBmYmZkN2Q4ZDBhZDA4YTk2Yjc0ZTcxNWZmN2UzZDk0
MGVhYWU5YTczLi44NTI5OGIwMTY1ZTNhMTI4NzhjZjA2MTc1NDI1ZmUwZmZkMWY3MmVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwCkBAIC00MSw3ICs0MSw3IEBAIE5vZGUqIHBy
ZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4pCiAgICAgICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzLT5wc2V1ZG9Bd2FyZUxh
c3RDaGlsZCgpOwogICAgICAgICByZXR1cm4gcHJldmlvdXM7CiAgICAgfQotICAgIHJldHVybiBp
czxQc2V1ZG9FbGVtZW50PihjdXJyZW50KSA/IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpjdXJy
ZW50KS5ob3N0RWxlbWVudCgpIDogY3VycmVudC0+cGFyZW50Tm9kZSgpOworICAgIHJldHVybiBp
czxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqY3Vy
cmVudCkuaG9zdEVsZW1lbnQoKSA6IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKIH0KIAogTm9kZSog
bmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5
V2l0aGluKQpAQCAtNTMsNyArNTMsNyBAQCBOb2RlKiBuZXh0SW5jbHVkaW5nUHNldWRvKGNvbnN0
IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIGlmICgobmV4dCA9IGN1cnJlbnQtPnBzZXVkb0F3YXJlTmV4dFNpYmxpbmco
KSkpCiAgICAgICAgIHJldHVybiBuZXh0OwotICAgIGN1cnJlbnQgPSBpczxQc2V1ZG9FbGVtZW50
PihjdXJyZW50KSA/IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpjdXJyZW50KS5ob3N0RWxlbWVu
dCgpIDogY3VycmVudC0+cGFyZW50Tm9kZSgpOworICAgIGN1cnJlbnQgPSBpczxQc2V1ZG9FbGVt
ZW50PigqY3VycmVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkuaG9zdEVs
ZW1lbnQoKSA6IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKICAgICBmb3IgKDsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoY3VycmVudCA9PSBz
dGF5V2l0aGluKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03MCw3ICs3MCw3IEBA
IE5vZGUqIG5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1
cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlm
ICgobmV4dCA9IGN1cnJlbnQtPnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcoKSkpCiAgICAgICAgIHJl
dHVybiBuZXh0OwotICAgIGN1cnJlbnQgPSBpczxQc2V1ZG9FbGVtZW50PihjdXJyZW50KSA/IGRv
d25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpjdXJyZW50KS5ob3N0RWxlbWVudCgpIDogY3VycmVudC0+
cGFyZW50Tm9kZSgpOworICAgIGN1cnJlbnQgPSBpczxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkg
PyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkuaG9zdEVsZW1lbnQoKSA6IGN1cnJl
bnQtPnBhcmVudE5vZGUoKTsKICAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
PnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAppbmRleCBkYzgy
MTkwYzViZTBmZmEzMTZlMDRiN2NlNzIyMzQ2ZjhhODZmNTgzLi40YmJhNGQyNzBjZDE0YzdmNTdi
ZGE2MGMxYTQ0YTc2Mjc0ODBkN2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9z
aXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKQEAgLTI5MSw3
ICsyOTEsNyBAQCBQb3NpdGlvbjo6QW5jaG9yVHlwZSBQb3NpdGlvbjo6YW5jaG9yVHlwZUZvckxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihOb2RlKiBhbmNob3JObwogRWxlbWVudCogUG9zaXRpb246OmVs
ZW1lbnQoKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSBhbmNob3JOb2RlKCk7Ci0gICAgd2hp
bGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxF
bGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAg
cmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQpAQCAtNTI5LDcgKzUyOSw3IEBAIHN0
YXRpYyBib29sIGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKE5vZGUqIG5v
ZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICAvLyBEb24ndCBpbmNsdWRl
IGlubGluZSB0YWJsZXMuCi0gICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KG5vZGUpKQorICAg
IGlmIChpczxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICAvLyBUaGVyZSBpcyBhIFZpc2libGVQb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkg
aW5saW5lLWJsb2NrIGNvbnRhaW5lci4KQEAgLTk1MCw3ICs5NTAsNyBAQCBib29sIFBvc2l0aW9u
Ojppc0NhbmRpZGF0ZSgpIGNvbnN0CiAKIGJvb2wgUG9zaXRpb246OmlzUmVuZGVyZWRDaGFyYWN0
ZXIoKSBjb25zdAogewotICAgIGlmIChpc051bGwoKSB8fCAhaXM8VGV4dD4oZGVwcmVjYXRlZE5v
ZGUoKSkpCisgICAgaWYgKCFpczxUZXh0PihkZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKICAgICBSZW5kZXJUZXh0KiByZW5kZXJlciA9IGRvd25jYXN0
PFRleHQ+KCpkZXByZWNhdGVkTm9kZSgpKS5yZW5kZXJlcigpOwpAQCAtMTA2Miw3ICsxMDYyLDcg
QEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5
IGFmZmluaXR5LCBib29sIGNvbnNpZGVyTm8KICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAK
ICAgICBQb3NpdGlvbiBwcmV2ID0gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihhZmZpbml0eSk7
Ci0gICAgaWYgKHByZXYgIT0gKnRoaXMgJiYgaW5TYW1lRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dChkZXByZWNhdGVkTm9kZSgpLCBwcmV2LmRlcHJlY2F0ZWROb2RlKCkpICYmIGlzPFRleHQ+KHBy
ZXYuZGVwcmVjYXRlZE5vZGUoKSkpIHsKKyAgICBpZiAocHJldiAhPSAqdGhpcyAmJiBpblNhbWVF
bmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGRlcHJlY2F0ZWROb2RlKCksIHByZXYuZGVwcmVjYXRl
ZE5vZGUoKSkgJiYgaXM8VGV4dD4oKnByZXYuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAg
U3RyaW5nIHN0cmluZyA9IGRvd25jYXN0PFRleHQ+KCpwcmV2LmRlcHJlY2F0ZWROb2RlKCkpLmRh
dGEoKTsKICAgICAgICAgVUNoYXIgYyA9IHN0cmluZ1twcmV2LmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCldOwogICAgICAgICBpZiAoY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UgPyAo
aXNTcGFjZU9yTmV3bGluZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSkgOiBkZXByZWNhdGVkSXND
b2xsYXBzaWJsZVdoaXRlc3BhY2UoYykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCAyN2RlN2VmZGVj
YWFhNDlkYjFhODJkYWQ0MjQ2MjIzYTkxNzUzODNjLi5jZTMyZjY5ZDIxY2Y5MjE4YTFhMzkyMzE5
MWM1NWU2NzhkYzgyNTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTk3OCw3ICs5NzgsNyBAQCB2
b2lkIFJhbmdlOjppbnNlcnROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gcHJwTmV3Tm9kZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiAgICAgLy8gZG9lcyBub3QgYWxsb3cgY2hpbGRyZW4gb2YgdGhlIHR5cGUg
b2YgbmV3Tm9kZSBvciBpZiBuZXdOb2RlIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBjb250YWluZXIu
CiAKICAgICAvLyBhbiBleHRyYSBvbmUgaGVyZSAtIGlmIGEgdGV4dCBub2RlIGlzIGdvaW5nIHRv
IHNwbGl0LCBpdCBtdXN0IGhhdmUgYSBwYXJlbnQgdG8gaW5zZXJ0IGludG8KLSAgICBib29sIHN0
YXJ0SXNUZXh0ID0gaXM8VGV4dD4obV9zdGFydC5jb250YWluZXIoKSk7CisgICAgYm9vbCBzdGFy
dElzVGV4dCA9IGlzPFRleHQ+KCptX3N0YXJ0LmNvbnRhaW5lcigpKTsKICAgICBpZiAoc3RhcnRJ
c1RleHQgJiYgIW1fc3RhcnQuY29udGFpbmVyKCktPnBhcmVudE5vZGUoKSkgewogICAgICAgICBl
YyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICAgICAgcmV0dXJuOwpAQCAtMjIyNCw3ICsy
MjI0LDcgQEAgdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+JiBxdWFkcykgY29uc3QKICAgICAgICAgc2VsZWN0ZWRFbGVtZW50c1NldC5yZW1vdmUocGFy
ZW50KTsKIAogICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BO
b2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewotICAgICAgICBpZiAoaXM8
RWxlbWVudD4obm9kZSkgJiYgc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlKSAmJiAh
c2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlLT5wYXJlbnROb2RlKCkpKSB7CisgICAg
ICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkgJiYgc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlu
cyhub2RlKSAmJiAhc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlLT5wYXJlbnROb2Rl
KCkpKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1v
ZGVsT2JqZWN0ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLnJlbmRlckJveE1vZGVsT2JqZWN0
KCkpIHsKICAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBlbGVtZW50UXVhZHM7CiAg
ICAgICAgICAgICAgICAgcmVuZGVyQm94TW9kZWxPYmplY3QtPmFic29sdXRlUXVhZHMoZWxlbWVu
dFF1YWRzKTsKQEAgLTIyMzIsNyArMjIzMiw3IEBAIHZvaWQgUmFuZ2U6OmdldEJvcmRlckFuZFRl
eHRRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpIGNvbnN0CiAKICAgICAgICAgICAgICAg
ICBxdWFkcy5hcHBlbmRWZWN0b3IoZWxlbWVudFF1YWRzKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmIChpczxUZXh0Pihub2RlKSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzPFRl
eHQ+KCpub2RlKSkgewogICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBk
b3duY2FzdDxUZXh0Pigqbm9kZSkucmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0
IFJlbmRlclRleHQmIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQoKnJlbmRlcmVyKTsKICAgICAg
ICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSAobm9kZSA9PSBzdGFydENvbnRhaW5lcikgPyBt
X3N0YXJ0Lm9mZnNldCgpIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAppbmRl
eCBlN2E2NzE2ZDI5ZWViNmE1YzQzYWM0Mzk2YjNlMzFmYTI5NDFlOWRiLi5kYjFjZmI4YTNmY2Jk
OTczOGFkYmFiMzczNzUwNzQ4YWFmZWUwZjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1l
bnQuY3BwCkBAIC0zODIsMTAgKzM4MiwxMCBAQCBTdHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0
Q29udGVudCgpIGNvbnN0CiAKIFNjcmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudElmUG9zc2li
bGUoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoaXM8SFRNTFNjcmlwdEVsZW1lbnQ+KGVs
ZW1lbnQpKQorICAgIGlmIChpczxIVE1MU2NyaXB0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTFNjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpOwogCi0gICAgaWYg
KGlzPFNWR1NjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmIChpczxTVkdTY3JpcHRFbGVt
ZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdTY3JpcHRFbGVtZW50
PihlbGVtZW50KTsKIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgK
aW5kZXggMWJlNzU3ZjE3MmZmNjI1NTM5YWY5ZjEzMjEzMDAzNjgzNjRhMmNjYi4uYWQ4YTNlZGM3
MWJhMjc2YWVkY2U2MWEzYmZjYmI1YzUzMjExNzYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5o
CkBAIC0xMDUsNyArMTA1LDcgQEAgaW5saW5lIFNoYWRvd1Jvb3QqIE5vZGU6OnNoYWRvd1Jvb3Qo
KSBjb25zdAogaW5saW5lIENvbnRhaW5lck5vZGUqIE5vZGU6OnBhcmVudE9yU2hhZG93SG9zdE5v
ZGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc01haW5UaHJlYWRPckdDVGhyZWFkKCkpOwotICAg
IGlmIChpczxTaGFkb3dSb290Pih0aGlzKSkKKyAgICBpZiAoaXM8U2hhZG93Um9vdD4oKnRoaXMp
KQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U2hhZG93Um9vdD4oKnRoaXMpLmhvc3RFbGVtZW50
KCk7CiAgICAgcmV0dXJuIHBhcmVudE5vZGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9UZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAppbmRleCA3ZDI4
OWIwYTA5OTBiNzM3ODBjZDIxODZjZDYzNzkzYjE4Y2E1OGJlLi5kNTRiZGFlMGQxMTEzMjI4ZmYx
MDRhY2ViZTFjZTRmNGVjOTlhZjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC05NCw3ICs5NCw3IEBA
IHN0YXRpYyBjb25zdCBUZXh0KiBlYXJsaWVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUoY29u
c3QgVGV4dCogdGV4dCkKIHsKICAgICBjb25zdCBOb2RlKiBub2RlID0gdGV4dDsKICAgICB3aGls
ZSAoKG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkpIHsKLSAgICAgICAgaWYgKCFpczxU
ZXh0Pihub2RlKSkKKyAgICAgICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgdGV4dCA9IGRvd25jYXN0PFRleHQ+KG5vZGUpOwogICAgIH0KQEAgLTEw
NSw3ICsxMDUsNyBAQCBzdGF0aWMgY29uc3QgVGV4dCogbGF0ZXN0TG9naWNhbGx5QWRqYWNlbnRU
ZXh0Tm9kZShjb25zdCBUZXh0KiB0ZXh0KQogewogICAgIGNvbnN0IE5vZGUqIG5vZGUgPSB0ZXh0
OwogICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpKSB7Ci0gICAgICAgIGlm
ICghaXM8VGV4dD4obm9kZSkpCisgICAgICAgIGlmICghaXM8VGV4dD4oKm5vZGUpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIHRleHQgPSBkb3duY2FzdDxUZXh0Pihub2RlKTsKICAgICB9
CkBAIC0xNzgsNyArMTc4LDggQEAgUGFzc1JlZlB0cjxOb2RlPiBUZXh0OjpjbG9uZU5vZGUoYm9v
bCAvKmRlZXAqLykKIHN0YXRpYyBib29sIGlzU1ZHU2hhZG93VGV4dChUZXh0KiB0ZXh0KQogewog
ICAgIE5vZGUqIHBhcmVudE5vZGUgPSB0ZXh0LT5wYXJlbnROb2RlKCk7Ci0gICAgcmV0dXJuIGlz
PFNoYWRvd1Jvb3Q+KHBhcmVudE5vZGUpICYmIGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCpwYXJlbnRO
b2RlKS5ob3N0RWxlbWVudCgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0cmVmVGFnKTsKKyAgICBB
U1NFUlQocGFyZW50Tm9kZSk7CisgICAgcmV0dXJuIGlzPFNoYWRvd1Jvb3Q+KCpwYXJlbnROb2Rl
KSAmJiBkb3duY2FzdDxTaGFkb3dSb290PigqcGFyZW50Tm9kZSkuaG9zdEVsZW1lbnQoKS0+aGFz
VGFnTmFtZShTVkdOYW1lczo6dHJlZlRhZyk7CiB9CiAKIHN0YXRpYyBib29sIGlzU1ZHVGV4dChU
ZXh0KiB0ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVy
c2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNhbC5jcHAKaW5kZXgg
OWYwNzMxOWVmZWYzZWU0OGY0YzI2YzFiYmM3M2U2NTIxZjcwNzAzNi4uYWUyM2IzMTkyNTgwYmNm
MTczOTc1OGUyNGYzOTAzMGZhYjBjMmQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1RleHROb2RlVHJhdmVyc2FsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dE5vZGVU
cmF2ZXJzYWwuY3BwCkBAIC00Nyw5ICs0NywxMCBAQCBTdHJpbmcgY29udGVudHNBc1N0cmluZyhj
b25zdCBDb250YWluZXJOb2RlKiByb290KQogCiBTdHJpbmcgY29udGVudHNBc1N0cmluZyhjb25z
dCBOb2RlKiByb290KQogewotICAgIGlmIChpczxUZXh0Pihyb290KSkKKyAgICBBU1NFUlQocm9v
dCk7CisgICAgaWYgKGlzPFRleHQ+KCpyb290KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFRl
eHQ+KCpyb290KS5kYXRhKCk7Ci0gICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KHJvb3QpKQorICAg
IGlmIChpczxDb250YWluZXJOb2RlPigqcm9vdCkpCiAgICAgICAgIHJldHVybiBjb250ZW50c0Fz
U3RyaW5nKGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHJvb3QpKTsKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dE5vZGVUcmF2ZXJzYWwu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNhbC5oCmluZGV4IGI4NGEwMjM1
OTcyMGM5ODY4YmMxZDhmMzkyMDUyMGYyMmFkNjNmZTcuLjhiYWI3YjFlNjY5NjMzOTlhMGViZjI2
MGRhNTc1MDRlMTFhYzU3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9k
ZVRyYXZlcnNhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNhbC5o
CkBAIC02Niw3ICs2Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBOb2RlVHlwZT4KIGlubGluZSBUZXh0
KiBmaXJzdFRleHRDaGlsZFRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQogewogICAgIE5vZGUq
IG5vZGUgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYgIWlzPFRl
eHQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxUZXh0Pigqbm9kZSkpCiAgICAgICAg
IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgIHJldHVybiBkb3duY2FzdDxUZXh0Pihu
b2RlKTsKIH0KQEAgLTc3LDcgKzc3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgogaW5s
aW5lIFRleHQqIGZpcnN0VGV4dFdpdGhpblRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQogewog
ICAgIE5vZGUqIG5vZGUgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKG5vZGUg
JiYgIWlzPFRleHQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxUZXh0Pigqbm9kZSkp
CiAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGN1cnJlbnQpOwogICAg
IHJldHVybiBkb3duY2FzdDxUZXh0Pihub2RlKTsKIH0KQEAgLTg4LDcgKzg4LDcgQEAgdGVtcGxh
dGUgPGNsYXNzIE5vZGVUeXBlPgogaW5saW5lIFRleHQqIHRyYXZlcnNlTmV4dFRleHRUZW1wbGF0
ZShOb2RlVHlwZSogY3VycmVudCkKIHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChjdXJyZW50KTsKLSAgICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4obm9kZSkpCisgICAg
d2hpbGUgKG5vZGUgJiYgIWlzPFRleHQ+KCpub2RlKSkKICAgICAgICAgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgcmV0dXJuIGRvd25jYXN0PFRleHQ+KG5vZGUpOwogfQpA
QCAtOTksNyArOTksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+CiBpbmxpbmUgVGV4dCog
dHJhdmVyc2VOZXh0VGV4dFRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBz
dGF5V2l0aGluKQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1cnJl
bnQsIHN0YXlXaXRoaW4pOwotICAgIHdoaWxlIChub2RlICYmICFpczxUZXh0Pihub2RlKSkKKyAg
ICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4oKm5vZGUpKQogICAgICAgICBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChub2RlLCBzdGF5V2l0aGluKTsKICAgICByZXR1cm4gZG93bmNhc3Q8VGV4
dD4obm9kZSk7CiB9CkBAIC0xMDksNyArMTA5LDcgQEAgaW5saW5lIFRleHQqIG5leHQoY29uc3Qg
VGV4dCogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVyc2UK
IGlubGluZSBUZXh0KiBuZXh0U2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50KQogewogICAgIE5v
ZGUqIG5vZGUgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgIHdoaWxlIChub2RlICYmICFp
czxUZXh0Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4oKm5vZGUpKQogICAg
ICAgICBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICByZXR1cm4gZG93bmNhc3Q8VGV4
dD4obm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRv
cHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAKaW5kZXgg
MDQ1ZTg4ZTQzMTk3YjgzZGFmYjhlYzNkOWQyNTMxMmI1ZmQ0N2FkMy4uMGYxNzUyNzdlYzA5YWQ5
ZjIzODNkOTk5ODRkZGIyNzRkMzU2NjQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZUFkb3B0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVB
ZG9wdGVyLmNwcApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVU
cmVlVG9OZXdTY29wZShOb2RlKiByb290KSBjb25zdAogICAgICAgICAgICAgICAgIHJhcmVEYXRh
LT5ub2RlTGlzdHMoKS0+YWRvcHRUcmVlU2NvcGUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
ICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKG5vZGUtPmhhc1N5bnRoZXRpY0F0
dHJDaGlsZE5vZGVzKCkpIHsKQEAgLTEyNCw3ICsxMjQsNyBAQCBpbmxpbmUgdm9pZCBUcmVlU2Nv
cGVBZG9wdGVyOjptb3ZlTm9kZVRvTmV3RG9jdW1lbnQoTm9kZSogbm9kZSwgRG9jdW1lbnQqIG9s
ZERvYwogICAgIGlmIChvbGREb2N1bWVudCkKICAgICAgICAgb2xkRG9jdW1lbnQtPm1vdmVOb2Rl
SXRlcmF0b3JzVG9OZXdEb2N1bWVudChub2RlLCBuZXdEb2N1bWVudCk7CiAKLSAgICBpZiAoaXM8
U2hhZG93Um9vdD4obm9kZSkpCisgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KCpub2RlKSkKICAgICAg
ICAgZG93bmNhc3Q8U2hhZG93Um9vdD4oKm5vZGUpLnNldERvY3VtZW50U2NvcGUobmV3RG9jdW1l
bnQpOwogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCmluZGV4IGEyY2M1YzkyZTFhZDg3YTNmYTFhYzc5
NjU5ZWYyMGYxODFmNWFlZWIuLmY3NDBlYzNhYzY0N2VkMGM2OWYxOTgzOWFhMDM0ZGMxN2FjYzUw
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBzdGF0aWMgYm9vbCBpc05ld0xpbmVBdFBv
c2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBOb2RlKiB0ZXh0Tm9kZSA9
IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKICAgICBpbnQgb2Zmc2V0ID0gcG9zaXRpb24ub2Zm
c2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgaWYgKCF0ZXh0Tm9kZSB8fCAhaXM8VGV4dD4odGV4
dE5vZGUpIHx8IG9mZnNldCA8IDAgfHwgb2Zmc2V0ID49IHRleHROb2RlLT5tYXhDaGFyYWN0ZXJP
ZmZzZXQoKSkKKyAgICBpZiAoIWlzPFRleHQ+KHRleHROb2RlKSB8fCBvZmZzZXQgPCAwIHx8IG9m
ZnNldCA+PSB0ZXh0Tm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMjY3LDE4ICsyNjcsMTggQEAg
VmlzaWJsZVBvc2l0aW9uIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6ZW5kT2ZOZXh0UGFyYWdy
YWhTcGxpdHRpbmdUZXh0Tm9kZXNJZk4KICAgICAvLyBBdm9pZCB0aGlzIGJ5IHNwbGl0dGluZyAi
XG4iCiAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCAxKTsKIAotICAgIGlmICh0ZXh0ID09IHN0YXJ0
LmNvbnRhaW5lck5vZGUoKSAmJiB0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSAmJiBpczxUZXh0Pih0
ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSkpIHsKKyAgICBpZiAodGV4dCA9PSBzdGFydC5jb250YWlu
ZXJOb2RlKCkgJiYgaXM8VGV4dD4odGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpKSB7CiAgICAgICAg
IEFTU0VSVChzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IHBvc2l0aW9uLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgc3RhcnQgPSBQb3NpdGlvbihkb3duY2FzdDxUZXh0
Pih0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgp
KTsKICAgICB9Ci0gICAgaWYgKHRleHQgPT0gZW5kLmNvbnRhaW5lck5vZGUoKSAmJiB0ZXh0LT5w
cmV2aW91c1NpYmxpbmcoKSAmJiBpczxUZXh0Pih0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSkpIHsK
KyAgICBpZiAodGV4dCA9PSBlbmQuY29udGFpbmVyTm9kZSgpICYmIGlzPFRleHQ+KHRleHQtPnBy
ZXZpb3VzU2libGluZygpKSkgewogICAgICAgICBBU1NFUlQoZW5kLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpIDwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICBlbmQg
PSBQb3NpdGlvbihkb3duY2FzdDxUZXh0Pih0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSksIGVuZC5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgfQogICAgIGlmICh0ZXh0ID09IG1fZW5kT2ZM
YXN0UGFyYWdyYXBoLmNvbnRhaW5lck5vZGUoKSkgewogICAgICAgICBpZiAobV9lbmRPZkxhc3RQ
YXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSkgewogICAgICAgICAgICAgLy8gV2UgY2FuIG9ubHkgZml4IGVuZE9mTGFzdFBh
cmFncmFwaCBpZiB0aGUgcHJldmlvdXMgbm9kZSB3YXMgc3RpbGwgdGV4dCBhbmQgaGFzbid0IGJl
ZW4gbW9kaWZpZWQgYnkgc2NyaXB0LgotICAgICAgICAgICAgaWYgKGlzPFRleHQ+KHRleHQtPnBy
ZXZpb3VzU2libGluZygpKQorICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCp0ZXh0LT5wcmV2aW91
c1NpYmxpbmcoKSkKICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9l
bmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpIDw9IGRvd25jYXN0PFRl
eHQ+KHRleHQtPnByZXZpb3VzU2libGluZygpKS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAg
bV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBQb3NpdGlvbihkb3duY2FzdDxUZXh0Pih0ZXh0LT5wcmV2
aW91c1NpYmxpbmcoKSksIG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpKTsKICAgICAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCmluZGV4IDk0Mjc1MTY3NThhYTgwN2ZjNTFhZmRjZTQ3NDI3NjBiNzllMWFj
NjcuLjY2YmVmZjQxNzVkMDdhMGNjNzFlMmE3ODg4N2RhNjA5ZGQ0Y2E0NzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC02OCw3ICs2OCw3IEBA
IHN0YXRpYyBTdHJpbmcmIHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkKIAogYm9vbCBpc0xlZ2FjeUFw
cGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxI
VE1MU3BhbkVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8SFRNTFNwYW5FbGVtZW50Pihub2Rl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTcGFu
RWxlbWVudD4oKm5vZGUpLmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBzdHlsZVNwYW5D
bGFzc1N0cmluZygpOwpAQCAtOTIsMjEgKzkyLDIxIEBAIHN0YXRpYyBib29sIGhhc05vQXR0cmli
dXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwgU2hv
CiAKIGJvb2wgaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFpczxIVE1MU3BhbkVsZW1l
bnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTFNwYW5FbGVtZW50PihlbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxl
QXR0cmlidXRlKGRvd25jYXN0PEhUTUxTcGFuRWxlbWVudD4oZWxlbWVudCksIEFsbG93Tm9uRW1w
dHlTdHlsZUF0dHJpYnV0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NwYW5XaXRob3V0
QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBpZiAoIWVsZW1lbnQgfHwgIWlzPEhUTUxTcGFuRWxlbWVudD4oZWxlbWVudCkpCisgICAg
aWYgKCFpczxIVE1MU3BhbkVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoZG93bmNhc3Q8
SFRNTFNwYW5FbGVtZW50PihlbGVtZW50KSwgU3R5bGVBdHRyaWJ1dGVTaG91bGRCZUVtcHR5KTsK
IH0KIAogYm9vbCBpc0VtcHR5Rm9udFRhZyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTaG91bGRT
dHlsZUF0dHJpYnV0ZUJlRW1wdHkgc2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5KQogewotICAg
IGlmICghZWxlbWVudCB8fCAhaXM8SFRNTEZvbnRFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAo
IWlzPEhUTUxGb250RWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHJldHVybiBoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0cmlidXRlKGRvd25jYXN0PEhU
TUxGb250RWxlbWVudD4oZWxlbWVudCksIHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSk7CkBA
IC0yNzcsNyArMjc3LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxl
KEVkaXRpbmdTdHlsZSAqc3R5bGUpCiAgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gbmV3Qmxv
Y2s7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoIWJsb2NrIHx8IGlzPEhUTUxF
bGVtZW50PigqYmxvY2spKTsKLSAgICAgICAgICAgIGlmIChibG9jayAmJiBpczxIVE1MRWxlbWVu
dD4oKmJsb2NrKSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PihibG9jay5nZXQo
KSkpIHsKICAgICAgICAgICAgICAgICByZW1vdmVDU1NTdHlsZShzdHlsZSwgZG93bmNhc3Q8SFRN
TEVsZW1lbnQ+KGJsb2NrLmdldCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3JlbW92ZU9u
bHkpCiAgICAgICAgICAgICAgICAgICAgIGFkZEJsb2NrU3R5bGUoc3R5bGVDaGFuZ2UsIGRvd25j
YXN0PEhUTUxFbGVtZW50PihibG9jay5nZXQoKSkpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRpdGluZ1N0
eWxlKiBzdHlsZSkKICAgICBOb2RlKiBsYXN0U3R5bGVkTm9kZSA9IDA7CiAgICAgZm9yIChOb2Rl
KiBub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50Owot
ICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChpczxIVE1M
RWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgICAgICAvLyBPbmx5IHdvcmsgb24gZnVsbHkgc2Vs
ZWN0ZWQgbm9kZXMuCiAgICAgICAgICAgICBpZiAoIW5vZGVGdWxseVNlbGVjdGVkKG5vZGUsIHN0
YXJ0LCBlbmQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDIwLDcgKzQyMCw3IEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRp
dGluZ1N0eWxlKiBzdHlsZSkKIAogc3RhdGljIENvbnRhaW5lck5vZGUqIGR1bW15U3BhbkFuY2Vz
dG9yRm9yTm9kZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIHdoaWxlIChub2RlICYmICghaXM8
RWxlbWVudD4obm9kZSkgfHwgIWlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHlsZUF0dHJpYnV0
ZShkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpKQorICAgIHdoaWxlIChub2RlICYmICghaXM8RWxl
bWVudD4oKm5vZGUpIHx8ICFpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUo
ZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsKICAgICAKICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPnBhcmVudE5vZGUoKSA6IG51bGxw
dHI7CkBAIC00NzMsNyArNDczLDcgQEAgSFRNTEVsZW1lbnQqIEFwcGx5U3R5bGVDb21tYW5kOjpz
cGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShOb2RlKiBub2RlLCBib29sIGIKICAgICBXcml0
aW5nRGlyZWN0aW9uIGhpZ2hlc3RBbmNlc3RvckRpcmVjdGlvbjsKICAgICBpZiAoYWxsb3dlZERp
cmVjdGlvbiAhPSBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbgogICAgICAgICAmJiBoaWdoZXN0QW5j
ZXN0b3JVbmljb2RlQmlkaSAhPSBDU1NWYWx1ZUJpZGlPdmVycmlkZQotICAgICAgICAmJiBpczxI
VE1MRWxlbWVudD4oaGlnaGVzdEFuY2VzdG9yV2l0aFVuaWNvZGVCaWRpKQorICAgICAgICAmJiBp
czxIVE1MRWxlbWVudD4oKmhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSkKICAgICAgICAg
JiYgRWRpdGluZ1N0eWxlOjpjcmVhdGUoaGlnaGVzdEFuY2VzdG9yV2l0aFVuaWNvZGVCaWRpLCBF
ZGl0aW5nU3R5bGU6OkFsbFByb3BlcnRpZXMpLT50ZXh0RGlyZWN0aW9uKGhpZ2hlc3RBbmNlc3Rv
ckRpcmVjdGlvbikKICAgICAgICAgJiYgaGlnaGVzdEFuY2VzdG9yRGlyZWN0aW9uID09IGFsbG93
ZWREaXJlY3Rpb24pIHsKICAgICAgICAgaWYgKCFuZXh0SGlnaGVzdEFuY2VzdG9yV2l0aFVuaWNv
ZGVCaWRpKQpAQCAtNTA1LDcgKzUwNSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92
ZUVtYmVkZGluZ1VwVG9FbmNsb3NpbmdCbG9jayhOb2RlKiBub2RlLCBOb2RlKiB1bnNwCiAgICAg
Tm9kZSogcGFyZW50ID0gbnVsbHB0cjsKICAgICBmb3IgKE5vZGUqIGFuY2VzdG9yID0gbm9kZS0+
cGFyZW50Tm9kZSgpOyBhbmNlc3RvciAhPSBibG9jayAmJiBhbmNlc3RvciAhPSB1bnNwbGl0QW5j
ZXN0b3I7IGFuY2VzdG9yID0gcGFyZW50KSB7CiAgICAgICAgIHBhcmVudCA9IGFuY2VzdG9yLT5w
YXJlbnROb2RlKCk7Ci0gICAgICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpKQor
ICAgICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCphbmNlc3RvcikpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBTdHlsZWRFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8U3R5
bGVkRWxlbWVudD4oKmFuY2VzdG9yKTsKQEAgLTk4MCw3ICs5ODAsNyBAQCBIVE1MRWxlbWVudCog
QXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0
eWxlKEVkaXRpbgogICAgIE5vZGUqIHVuc3BsaXR0YWJsZUVsZW1lbnQgPSB1bnNwbGl0dGFibGVF
bGVtZW50Rm9yUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpKTsKIAog
ICAgIGZvciAoTm9kZSogYW5jZXN0b3IgPSBub2RlOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNl
c3Rvci0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oYW5jZXN0
b3IpICYmIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGRvd25jYXN0
PEhUTUxFbGVtZW50PihhbmNlc3RvcikpKQorICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCph
bmNlc3RvcikgJiYgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZG93
bmNhc3Q8SFRNTEVsZW1lbnQ+KGFuY2VzdG9yKSkpCiAgICAgICAgICAgICByZXN1bHQgPSBkb3du
Y2FzdDxIVE1MRWxlbWVudD4oYW5jZXN0b3IpOwogICAgICAgICAvLyBTaG91bGQgc3RvcCBhdCB0
aGUgZWRpdGFibGUgcm9vdCAoY2Fubm90IGNyb3NzIGVkaXRpbmcgYm91bmRhcnkpIGFuZAogICAg
ICAgICAvLyBhbHNvIHN0b3AgYXQgdGhlIHVuc3BsaXR0YWJsZSBlbGVtZW50IHRvIGJlIGNvbnNp
c3RlbnQgd2l0aCBvdGhlciBVQXMKQEAgLTk5NywxOCArOTk3LDE4IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUqIG5vZGUsIEVkaXRpbmdT
dHlsZSogc3R5CiAKICAgICBub2RlLT5kb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsK
IAotICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAhbm9kZS0+cmVuZGVyZXIo
KSB8fCBpczxIVE1MSUZyYW1lRWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFzdHlsZSB8fCBzdHls
ZS0+aXNFbXB0eSgpIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8IGlzPEhUTUxJRnJhbWVFbGVtZW50
Pigqbm9kZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG5l
d0lubGluZVN0eWxlID0gc3R5bGU7Ci0gICAgaWYgKGlzPEhUTUxFbGVtZW50Pihub2RlKSAmJiBk
b3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSktPmlubGluZVN0eWxlKCkpIHsKKyAgICBpZiAoaXM8
SFRNTEVsZW1lbnQ+KCpub2RlKSAmJiBkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSktPmlubGlu
ZVN0eWxlKCkpIHsKICAgICAgICAgbmV3SW5saW5lU3R5bGUgPSBzdHlsZS0+Y29weSgpOwogICAg
ICAgICBuZXdJbmxpbmVTdHlsZS0+bWVyZ2VJbmxpbmVTdHlsZU9mRWxlbWVudChkb3duY2FzdDxI
VE1MRWxlbWVudD4obm9kZSksIEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMpOwogICAgIH0K
IAogICAgIC8vIFNpbmNlIGFkZElubGluZVN0eWxlSWZOZWVkZWQgY2FuJ3QgYWRkIHN0eWxlcyB0
byBibG9jay1mbG93IHJlbmRlciBvYmplY3RzLCBhZGQgc3R5bGUgYXR0cmlidXRlIGluc3RlYWQu
CiAgICAgLy8gRklYTUU6IGFwcGx5SW5saW5lU3R5bGVUb1JhbmdlIHNob3VsZCBiZSB1c2VkIGhl
cmUgaW5zdGVhZC4KLSAgICBpZiAoKG5vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2tGbG93
KCkgfHwgbm9kZS0+aGFzQ2hpbGROb2RlcygpKSAmJiBpczxIVE1MRWxlbWVudD4obm9kZSkpIHsK
KyAgICBpZiAoKG5vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2tGbG93KCkgfHwgbm9kZS0+
aGFzQ2hpbGROb2RlcygpKSAmJiBpczxIVE1MRWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgIHNl
dE5vZGVBdHRyaWJ1dGUoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpLCBzdHlsZUF0dHIsIG5l
d0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xMjA4LDcgKzEyMDgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRB
dEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbgogICAgIHNwbGl0
VGV4dE5vZGUoJnRleHQsIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAKICAgICBOb2Rl
KiBwcmV2Tm9kZSA9IHRleHQucHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgaWYgKCFwcmV2Tm9kZSB8
fCAhaXM8VGV4dD4ocHJldk5vZGUpKQorICAgIGlmICghaXM8VGV4dD4ocHJldk5vZGUpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBQb3NpdGlvbiBuZXdTdGFydCA9IHNob3VsZFVwZGF0ZVN0YXJ0
ID8gUG9zaXRpb24oZG93bmNhc3Q8VGV4dD4ocHJldk5vZGUpLCBzdGFydC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSkgOiBzdGFydDsKQEAgLTEyNDAsNyArMTI0MCw3IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0CiAgICAgaWYgKCFwYXJlbnRFbGVtZW50IHx8ICFwYXJlbnRFbGVtZW50LT5wcmV2
aW91c1NpYmxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIE5vZGUqIGZpcnN0VGV4dE5vZGUg
PSBwYXJlbnRFbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKS0+bGFzdENoaWxkKCk7Ci0gICAgaWYg
KCFmaXJzdFRleHROb2RlIHx8ICFpczxUZXh0PihmaXJzdFRleHROb2RlKSkKKyAgICBpZiAoIWlz
PFRleHQ+KGZpcnN0VGV4dE5vZGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBQb3NpdGlvbiBu
ZXdTdGFydCA9IHNob3VsZFVwZGF0ZVN0YXJ0ID8gUG9zaXRpb24oZG93bmNhc3Q8VGV4dD4oZmly
c3RUZXh0Tm9kZSksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA6IHN0YXJ0OwpAQCAt
MTI0OSw3ICsxMjQ5LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVu
dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXQKIAogYm9vbCBBcHBseVN0
eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBFZGl0
aW5nU3R5bGUqIHN0eWxlKQogewotICAgIGlmICghZWxlbWVudCB8fCAhaXM8SFRNTEVsZW1lbnQ+
KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxl
bWVudChzdHlsZSwgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKTsKQEAgLTEzNTksMTMg
KzEzNTksMTQgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRo
RWxlbWVudChQYXNzUmVmUHRyPE5vZGU+IHBhc3NlZFN0YXIKIAogICAgIFJlZlB0cjxOb2RlPiBu
ZXh0U2libGluZyA9IGVsZW1lbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgUmVmUHRyPE5vZGU+IHBy
ZXZpb3VzU2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzU2libGluZygpOwotICAgIGlmIChuZXh0
U2libGluZyAmJiBpczxFbGVtZW50PigqbmV4dFNpYmxpbmcpICYmIG5leHRTaWJsaW5nLT5oYXNF
ZGl0YWJsZVN0eWxlKCkKKyAgICBpZiAoaXM8RWxlbWVudD4obmV4dFNpYmxpbmcuZ2V0KCkpICYm
IG5leHRTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkKICAgICAgICAgJiYgYXJlSWRlbnRpY2Fs
RWxlbWVudHMoZWxlbWVudC5nZXQoKSwgZG93bmNhc3Q8RWxlbWVudD4obmV4dFNpYmxpbmcuZ2V0
KCkpKSkKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCBkb3du
Y2FzdDxFbGVtZW50PihuZXh0U2libGluZy5nZXQoKSkpOwogCi0gICAgaWYgKHByZXZpb3VzU2li
bGluZyAmJiBpczxFbGVtZW50PigqcHJldmlvdXNTaWJsaW5nKSAmJiBwcmV2aW91c1NpYmxpbmct
Pmhhc0VkaXRhYmxlU3R5bGUoKSkgeworICAgIGlmIChpczxFbGVtZW50PihwcmV2aW91c1NpYmxp
bmcuZ2V0KCkpICYmIHByZXZpb3VzU2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAg
ICAgIE5vZGUqIG1lcmdlZEVsZW1lbnQgPSBwcmV2aW91c1NpYmxpbmctPm5leHRTaWJsaW5nKCk7
Ci0gICAgICAgIGlmIChpczxFbGVtZW50PihtZXJnZWRFbGVtZW50KSAmJiBtZXJnZWRFbGVtZW50
LT5oYXNFZGl0YWJsZVN0eWxlKCkKKyAgICAgICAgQVNTRVJUKG1lcmdlZEVsZW1lbnQpOworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oKm1lcmdlZEVsZW1lbnQpICYmIG1lcmdlZEVsZW1lbnQtPmhh
c0VkaXRhYmxlU3R5bGUoKQogICAgICAgICAgICAgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoZG93
bmNhc3Q8RWxlbWVudD4ocHJldmlvdXNTaWJsaW5nLmdldCgpKSwgZG93bmNhc3Q8RWxlbWVudD4o
bWVyZ2VkRWxlbWVudCkpKQogICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhkb3du
Y2FzdDxFbGVtZW50PihwcmV2aW91c1NpYmxpbmcuZ2V0KCkpLCBkb3duY2FzdDxFbGVtZW50Piht
ZXJnZWRFbGVtZW50KSk7CiAgICAgfQpAQCAtMTQzMSwxMCArMTQzMiwxMCBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlQ2hhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gcGFz
c2VkU3RhcnQsIFBhcwogICAgIEhUTUxGb250RWxlbWVudCogZm9udENvbnRhaW5lciA9IG51bGxw
dHI7CiAgICAgSFRNTEVsZW1lbnQqIHN0eWxlQ29udGFpbmVyID0gbnVsbHB0cjsKICAgICBmb3Ig
KE5vZGUqIGNvbnRhaW5lciA9IHN0YXJ0Tm9kZS5nZXQoKTsgY29udGFpbmVyICYmIHN0YXJ0Tm9k
ZSA9PSBlbmROb2RlOyBjb250YWluZXIgPSBjb250YWluZXItPmZpcnN0Q2hpbGQoKSkgewotICAg
ICAgICBpZiAoaXM8SFRNTEZvbnRFbGVtZW50Pihjb250YWluZXIpKQorICAgICAgICBpZiAoaXM8
SFRNTEZvbnRFbGVtZW50PigqY29udGFpbmVyKSkKICAgICAgICAgICAgIGZvbnRDb250YWluZXIg
PSBkb3duY2FzdDxIVE1MRm9udEVsZW1lbnQ+KGNvbnRhaW5lcik7Ci0gICAgICAgIGJvb2wgc3R5
bGVDb250YWluZXJJc05vdFNwYW4gPSAhc3R5bGVDb250YWluZXIgfHwgIWlzPEhUTUxTcGFuRWxl
bWVudD4oc3R5bGVDb250YWluZXIpOwotICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KGNvbnRh
aW5lcikgJiYgKGlzPEhUTUxTcGFuRWxlbWVudD4oY29udGFpbmVyKSB8fCAoc3R5bGVDb250YWlu
ZXJJc05vdFNwYW4gJiYgY29udGFpbmVyLT5oYXNDaGlsZE5vZGVzKCkpKSkKKyAgICAgICAgYm9v
bCBzdHlsZUNvbnRhaW5lcklzTm90U3BhbiA9ICFpczxIVE1MU3BhbkVsZW1lbnQ+KHN0eWxlQ29u
dGFpbmVyKTsKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PigqY29udGFpbmVyKSAmJiAoaXM8
SFRNTFNwYW5FbGVtZW50PigqY29udGFpbmVyKSB8fCAoc3R5bGVDb250YWluZXJJc05vdFNwYW4g
JiYgY29udGFpbmVyLT5oYXNDaGlsZE5vZGVzKCkpKSkKICAgICAgICAgICAgIHN0eWxlQ29udGFp
bmVyID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGNvbnRhaW5lcik7CiAgICAgICAgIGlmICghY29u
dGFpbmVyLT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE1MjgsNyArMTUy
OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2RlcyhOb2RlKiBu
b2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0ZXh0Tm9kZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVGV4dCogY2hpbGRUZXh0ID0gdGV4
dE5vZGVzW2ldLmdldCgpOwogICAgICAgICBOb2RlKiBuZXh0ID0gY2hpbGRUZXh0LT5uZXh0U2li
bGluZygpOwotICAgICAgICBpZiAoIW5leHQgfHwgIWlzPFRleHQ+KG5leHQpKQorICAgICAgICBp
ZiAoIWlzPFRleHQ+KG5leHQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgCiAgICAgICAg
IFRleHQmIG5leHRUZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5leHQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKaW5kZXggNTUyMzNjNWJj
OTk4NDQzOGFhM2ZiNWY5ZWE5M2RiYWVhOWFhOWMwZS4uNjQ0ZDM0NWZlZjE5ODIzYjE5NGY0MzM5
NzFjOTYxZjM5MGI1NTU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVh
a0Jsb2NrcXVvdGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFr
QmxvY2txdW90ZUNvbW1hbmQuY3BwCkBAIC0xMDQsOSArMTA0LDkgQEAgdm9pZCBCcmVha0Jsb2Nr
cXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICAvLyBzdGFydE5vZGUgaXMgdGhlIGZp
cnN0IG5vZGUgdGhhdCB3ZSBuZWVkIHRvIG1vdmUgdG8gdGhlIG5ldyBibG9ja3F1b3RlLgogICAg
IE5vZGUqIHN0YXJ0Tm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOwotICAgICAgICAKKyAgICBB
U1NFUlQoc3RhcnROb2RlKTsKICAgICAvLyBTcGxpdCBhdCBwb3MgaWYgaW4gdGhlIG1pZGRsZSBv
ZiBhIHRleHQgbm9kZS4KLSAgICBpZiAoaXM8VGV4dD4oc3RhcnROb2RlKSkgeworICAgIGlmIChp
czxUZXh0Pigqc3RhcnROb2RlKSkgewogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0
PFRleHQ+KCpzdGFydE5vZGUpOwogICAgICAgICBpZiAoKHVuc2lnbmVkKXBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpID49IHRleHROb2RlLmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBzdGFy
dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDIxNjczY2QwZjNmMzdk
ZmUzZTNhZDFhZWRhM2NkMTQ2MWQ0YmNhMGIuLjM0NjRjMjc1NTI5NDZlZDI5ODg3MjliNzVmMGY4
YmQzNDkyOGZmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCkBAIC0zMjQsNyArMzI0LDggQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6aW5zZXJ0TGluZUJyZWFrKCkKIAogYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aXNSZW1v
dmFibGVCbG9jayhjb25zdCBOb2RlKiBub2RlKQogewotICAgIGlmICghaXM8SFRNTERpdkVsZW1l
bnQ+KG5vZGUpKQorICAgIEFTU0VSVChub2RlKTsKKyAgICBpZiAoIWlzPEhUTUxEaXZFbGVtZW50
Pigqbm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIHBhcmVudE5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCk7CkBAIC0zNzgsNyArMzc5LDcgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0KFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIGNv
bnN0IFBvc2kKICAgICAgICAgICAgIGFwcGVuZE5vZGUoaW5zZXJ0Q2hpbGQsIGRvd25jYXN0PENv
bnRhaW5lck5vZGU+KHJlZkNoaWxkKSk7CiAgICAgfSBlbHNlIGlmIChjYXJldE1pbk9mZnNldChy
ZWZDaGlsZCkgPj0gb2Zmc2V0KQogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGluc2VydENoaWxk
LCByZWZDaGlsZCk7Ci0gICAgZWxzZSBpZiAoaXM8VGV4dD4ocmVmQ2hpbGQpICYmIGNhcmV0TWF4
T2Zmc2V0KHJlZkNoaWxkKSA+IG9mZnNldCkgeworICAgIGVsc2UgaWYgKGlzPFRleHQ+KCpyZWZD
aGlsZCkgJiYgY2FyZXRNYXhPZmZzZXQocmVmQ2hpbGQpID4gb2Zmc2V0KSB7CiAgICAgICAgIHNw
bGl0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4ocmVmQ2hpbGQpLCBvZmZzZXQpOwogCiAgICAgICAg
IC8vIE11dGF0aW9uIGV2ZW50cyAoYnVnIDIyNjM0KSBmcm9tIHRoZSB0ZXh0IG5vZGUgaW5zZXJ0
aW9uIG1heSBoYXZlIHJlbW92ZWQgdGhlIHJlZkNoaWxkCkBAIC02NzgsNyArNjc5LDcgQEAgYm9v
bCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2hvdWxkUmViYWxhbmNlTGVhZGluZ1doaXRlc3BhY2VG
b3IoY29uc3QgU3RyaW5nJiB0ZXgKIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNhblJlYmFs
YW5jZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9
IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgp
ICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgIW5vZGUgfHwgIWlzPFRl
eHQ+KG5vZGUpKQorICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBv
c2l0aW9uSXNPZmZzZXRJbkFuY2hvciB8fCAhaXM8VGV4dD4obm9kZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwpA
QCAtNzUwLDcgKzc1MSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdo
aXRlc3BhY2VPblRleHRTdWJzdHJpbmcoUGFzc1JlZlB0cjxUZXh0PiBwCiB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxpdChQb3NpdGlv
biYgcG9zaXRpb24pCiB7CiAgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2Rl
KCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxUZXh0Pihub2RlKSkKKyAgICBpZiAoIWlzPFRleHQ+
KG5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxU
ZXh0Pigqbm9kZSk7CiAgICAgCkBAIC03NjksOSArNzcwLDkgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQoUG9zaXRpb24mIHBv
c2l0aW8KICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNWaXNpYmxlUG9zKHZpc2libGVQb3Mu
cHJldmlvdXMoKSk7CiAgICAgUG9zaXRpb24gcHJldmlvdXMocHJldmlvdXNWaXNpYmxlUG9zLmRl
ZXBFcXVpdmFsZW50KCkpOwogICAgIAotICAgIGlmIChkZXByZWNhdGVkSXNDb2xsYXBzaWJsZVdo
aXRlc3BhY2UocHJldmlvdXNWaXNpYmxlUG9zLmNoYXJhY3RlckFmdGVyKCkpICYmIGlzPFRleHQ+
KHByZXZpb3VzLmRlcHJlY2F0ZWROb2RlKCkpICYmICFpczxIVE1MQlJFbGVtZW50PihwcmV2aW91
cy5kZXByZWNhdGVkTm9kZSgpKSkKKyAgICBpZiAoZGVwcmVjYXRlZElzQ29sbGFwc2libGVXaGl0
ZXNwYWNlKHByZXZpb3VzVmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBpczxUZXh0Pigq
cHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPEhUTUxCUkVsZW1lbnQ+KCpwcmV2aW91
cy5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5n
TWFya2Vycyhkb3duY2FzdDxUZXh0PihwcmV2aW91cy5kZXByZWNhdGVkTm9kZSgpKSwgcHJldmlv
dXMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygp
KTsKLSAgICBpZiAoZGVwcmVjYXRlZElzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHZpc2libGVQb3Mu
Y2hhcmFjdGVyQWZ0ZXIoKSkgJiYgaXM8VGV4dD4ocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkg
JiYgIWlzPEhUTUxCUkVsZW1lbnQ+KHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKQorICAgIGlm
IChkZXByZWNhdGVkSXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UodmlzaWJsZVBvcy5jaGFyYWN0ZXJB
ZnRlcigpKSAmJiBpczxUZXh0PigqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPEhU
TUxCUkVsZW1lbnQ+KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmVwbGFj
ZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyhkb3duY2FzdDxUZXh0Pihwb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9u
QnJlYWtpbmdTcGFjZVN0cmluZygpKTsKIH0KIApAQCAtODc3LDcgKzg3OCw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KGNvbnN0IFBvc2l0aW9u
JiBzdGFydCwgY29uc3QKIAogICAgIFZlY3RvcjxSZWZQdHI8VGV4dD4+IG5vZGVzOwogICAgIGZv
ciAoTm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkKKyAg
ICAgICAgaWYgKGlzPFRleHQ+KCpub2RlKSkKICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChkb3du
Y2FzdDxUZXh0Pihub2RlKSk7CiAgICAgICAgIGlmIChub2RlID09IGVuZC5kZXByZWNhdGVkTm9k
ZSgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC05NTEsNyArOTUyLDcgQEAgdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdChjb25zdCBQb3NpdGlvbiYgcCkKICAg
ICBBU1NFUlQobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihwKSk7CiAgICAgCiAgICAgLy8gV2Ug
YXJlIGNlcnRhaW4gdGhhdCB0aGUgcG9zaXRpb24gaXMgYXQgYSBsaW5lIGJyZWFrLCBidXQgaXQg
bWF5IGJlIGEgYnIgb3IgYSBwcmVzZXJ2ZWQgbmV3bGluZS4KLSAgICBpZiAoaXM8SFRNTEJSRWxl
bWVudD4ocC5hbmNob3JOb2RlKCkpKSB7CisgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpwLmFu
Y2hvck5vZGUoKSkpIHsKICAgICAgICAgcmVtb3ZlTm9kZShwLmFuY2hvck5vZGUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xMTIwLDggKzExMjEsOSBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpjbGVhbnVwQWZ0ZXJEZWxldGlvbihWaXNpYmxlUG9zaXRpb24gZGVzdGluYXRp
b24pCiAgICAgICAgIC8vIE5vdGU6IFdlIHdhbnQgdGhlIHJpZ2h0bW9zdCBjYW5kaWRhdGUuCiAg
ICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gY2FyZXRBZnRlckRlbGV0ZS5kZWVwRXF1aXZhbGVu
dCgpLmRvd25zdHJlYW0oKTsKICAgICAgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0
ZWROb2RlKCk7CisgICAgICAgIEFTU0VSVChub2RlKTsKICAgICAgICAgLy8gTm9ybWFsbHkgZGVs
ZXRpb24gd2lsbCBsZWF2ZSBhIGJyIGFzIGEgcGxhY2Vob2xkZXIuCi0gICAgICAgIGlmIChpczxI
VE1MQlJFbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpub2Rl
KSkKICAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlKTsKICAgICAg
ICAgLy8gSWYgdGhlIHNlbGVjdGlvbiB0byBtb3ZlIHdhcyBlbXB0eSBhbmQgaW4gYW4gZW1wdHkg
YmxvY2sgdGhhdCAKICAgICAgICAgLy8gZG9lc24ndCByZXF1aXJlIGEgcGxhY2Vob2xkZXIgdG8g
cHJvcCBpdHNlbGYgb3BlbiAobGlrZSBhIGJvcmRlcmVkCkBAIC0xMzQ3LDkgKzEzNDksOSBAQCBi
b29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlMaXN0SXRlbSgpCiAgICAg
ICAgIHx8IGxpc3ROb2RlID09IGVtcHR5TGlzdEl0ZW0tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0Jsb2NrID0g
MDsKKyAgICBSZWZQdHI8RWxlbWVudD4gbmV3QmxvY2s7CiAgICAgaWYgKENvbnRhaW5lck5vZGUq
IGJsb2NrRW5jbG9zaW5nTGlzdCA9IGxpc3ROb2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAg
aWYgKGlzPEhUTUxMSUVsZW1lbnQ+KGJsb2NrRW5jbG9zaW5nTGlzdCkpIHsgLy8gbGlzdE5vZGUg
aXMgaW5zaWRlIGFub3RoZXIgbGlzdCBpdGVtCisgICAgICAgIGlmIChpczxIVE1MTElFbGVtZW50
PigqYmxvY2tFbmNsb3NpbmdMaXN0KSkgeyAvLyBsaXN0Tm9kZSBpcyBpbnNpZGUgYW5vdGhlciBs
aXN0IGl0ZW0KICAgICAgICAgICAgIGlmICh2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoYmxvY2tF
bmNsb3NpbmdMaXN0KSA9PSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUobGlzdE5vZGUuZ2V0KCkp
KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgbGlzdE5vZGUgYXBwZWFycyBhdCB0aGUgZW5kIG9m
IHRoZSBvdXRlciBsaXN0IGl0ZW0sIHRoZW4gbW92ZSBsaXN0Tm9kZSBvdXRzaWRlIG9mIHRoaXMg
bGlzdCBpdGVtCiAgICAgICAgICAgICAgICAgLy8gZS5nLiA8dWw+PGxpPmhlbGxvIDx1bD48bGk+
PGJyPjwvbGk+PC91bD4gPC9saT48L3VsPiBzaG91bGQgYmVjb21lIDx1bD48bGk+aGVsbG88L2xp
PiA8dWw+PGxpPjxicj48L2xpPjwvdWw+IDwvdWw+IGFmdGVyIHRoaXMgc2VjdGlvbgpAQCAtMTQz
Niw3ICsxNDM4LDcgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5
TWFpbEJsb2NrcXVvdGVkUGFyYWdyYXBoKCkKICAgICAKICAgICBpZiAoY2FyZXRQb3MuZGVwcmVj
YXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVu
ZUFuY2VzdG9ycyhjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKTsKLSAgICBlbHNlIGlmIChpczxU
ZXh0PihjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKSkgeworICAgIGVsc2UgaWYgKGlzPFRleHQ+
KCpjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBBU1NFUlQoY2FyZXRQb3Mu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA9PSAwKTsKICAgICAgICAgVGV4dCYgdGV4dE5vZGUg
PSBkb3duY2FzdDxUZXh0PigqY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlKCk7CkBAIC0xNTI0
LDcgKzE1MjYsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxp
dFRyZWVUb05vZGUoTm9kZSogc3RhcnQsIE5vZGUqIGVuZCwgYgogCiAgICAgUmVmUHRyPE5vZGU+
IGVuZE5vZGUgPSBlbmQ7CiAgICAgZm9yIChub2RlID0gc3RhcnQ7IG5vZGUgJiYgbm9kZS0+cGFy
ZW50Tm9kZSgpICE9IGVuZE5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAg
ICAgaWYgKCFpczxFbGVtZW50Pihub2RlLT5wYXJlbnROb2RlKCkpKQorICAgICAgICBpZiAoIWlz
PEVsZW1lbnQ+KCpub2RlLT5wYXJlbnROb2RlKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIC8vIERvIG5vdCBzcGxpdCBhIG5vZGUgd2hlbiBkb2luZyBzbyBpbnRyb2R1Y2VzIGFuIGVt
cHR5IG5vZGUuCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkluUGFyZW50ID0gZmly
c3RQb3NpdGlvbkluTm9kZShub2RlLT5wYXJlbnROb2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKaW5kZXggOTBhMWVmZTc3YTY1
YzQ4ZDBmMmVlYjRlNDhlOTU2ZmNmOTc0ZGVkMi4uZjc2NzZlOTBhYWI1ODAwMmI3ZGEyYWRhM2Q0
OGM1OGMyMGEwOTFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVC
dXR0b25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgc3RhdGljIEhUTUxFbGVtZW50
KiBlbmNsb3NpbmdEZWxldGFibGVFbGVtZW50KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBOb2RlKiBlbGVtZW50ID0gZW5j
bG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbnRhaW5lciksICZpc0RlbGV0
YWJsZUVsZW1lbnQpOwotICAgIHJldHVybiBlbGVtZW50ICYmIGlzPEhUTUxFbGVtZW50PihlbGVt
ZW50KSA/IGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVtZW50KSA6IG51bGxwdHI7CisgICAgcmV0
dXJuIGlzPEhUTUxFbGVtZW50PihlbGVtZW50KSA/IGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVt
ZW50KSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cAppbmRleCBhYmM1MzM2ZjAxNTUyNTAyZDRjNjVjZjU0NjdiNGUwYjIzMDNlODU0Li5lZWNhOTQz
OTY1NGE0MjRkODA1MjNmN2VjMTZkNTI4MGYzYzVjNDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTQ1OSwxNCArNDU5LDE0
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAg
ICAgbWFrZVN0eWxpbmdFbGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RUb1ByZXZl
bnRTdHlsZUxvc3MoKTsKIAogICAgIC8vIE5ldmVyIHJlbW92ZSB0aGUgc3RhcnQgYmxvY2sgdW5s
ZXNzIGl0J3MgYSB0YWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSB3b24ndCBtZXJnZSBjb250ZW50IGlu
LgotICAgIGlmIChzdGFydE5vZGUgPT0gbV9zdGFydEJsb2NrICYmICFzdGFydE9mZnNldCAmJiBj
YW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHN0YXJ0Tm9kZSkgJiYgIWlzPEhUTUxUYWJsZUVsZW1l
bnQ+KHN0YXJ0Tm9kZSkpIHsKKyAgICBpZiAoc3RhcnROb2RlID09IG1fc3RhcnRCbG9jayAmJiAh
c3RhcnRPZmZzZXQgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhzdGFydE5vZGUpICYmICFp
czxIVE1MVGFibGVFbGVtZW50Pigqc3RhcnROb2RlKSkgewogICAgICAgICBzdGFydE9mZnNldCA9
IDA7CiAgICAgICAgIHN0YXJ0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoc3RhcnROb2RlKTsK
ICAgICAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKHN0YXJ0T2Zmc2V0ID49IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9kZSkgJiYgaXM8VGV4
dD4oc3RhcnROb2RlKSkgeworICAgIGlmIChzdGFydE9mZnNldCA+PSBjYXJldE1heE9mZnNldChz
dGFydE5vZGUpICYmIGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgIFRleHQmIHRleHQg
PSBkb3duY2FzdDxUZXh0Pigqc3RhcnROb2RlKTsKICAgICAgICAgaWYgKHRleHQubGVuZ3RoKCkg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRNYXhPZmZzZXQoc3RhcnROb2RlKSkpCiAgICAg
ICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUoJnRleHQsIGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9k
ZSksIHRleHQubGVuZ3RoKCkgLSBjYXJldE1heE9mZnNldChzdGFydE5vZGUpKTsKQEAgLTQ4Myw3
ICs0ODMsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxl
dGUoKQogCiAgICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5v
ZGUoKSkgewogICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkgLSBzdGFydE9mZnNldCA+IDApIHsKLSAgICAgICAgICAgIGlmIChpczxUZXh0PihzdGFy
dE5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8VGV4dD4oKnN0YXJ0Tm9kZSkpIHsKICAgICAg
ICAgICAgICAgICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyaW1tZWQKICAg
ICAgICAgICAgICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKnN0YXJ0Tm9kZSk7CiAg
ICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0LCBzdGFydE9mZnNldCwgbV9k
b3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzdGFydE9mZnNldCk7CkBA
IC01MDMsNyArNTAzLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5l
cmFsRGVsZXRlKCkKICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUoc3RhcnROb2RlKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChzdGFydE9mZnNldCA+IDApIHsKLSAgICAgICAgICAgIGlmIChpczxU
ZXh0PihzdGFydE5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8VGV4dD4oKnN0YXJ0Tm9kZSkp
IHsKICAgICAgICAgICAgICAgICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRy
aW1tZWQKICAgICAgICAgICAgICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUp
OwogICAgICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSgmdGV4dCwgc3RhcnRPZmZzZXQs
IHRleHQubGVuZ3RoKCkgLSBzdGFydE9mZnNldCk7CkBAIC01MTEsNyArNTExLDcgQEAgdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VUb0No
aWxkQXQoc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN0
YXJ0Tm9kZSA9PSBtX3Vwc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgaXM8VGV4dD4oc3Rh
cnROb2RlKSkgeworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Tm9kZSA9PSBtX3Vwc3RyZWFtRW5k
LmRlcHJlY2F0ZWROb2RlKCkgJiYgaXM8VGV4dD4oKnN0YXJ0Tm9kZSkpIHsKICAgICAgICAgICAg
IFRleHQmIHRleHQgPSBkb3duY2FzdDxUZXh0PigqbV91cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSgmdGV4dCwgMCwgbV91cHN0cmVh
bUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgfQpAQCAtNTQzLDcgKzU0
Myw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgp
CiAgICAgICAgICAgICAgICAgLy8gVGhlIG5vZGUgaXRzZWxmIGlzIGZ1bGx5IHNlbGVjdGVkLCBu
b3QganVzdCBpdHMgY29udGVudHMuICBEZWxldGUgaXQuCiAgICAgICAgICAgICAgICAgcmVtb3Zl
Tm9kZShtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGlmIChpczxUZXh0PihtX2Rvd25zdHJlYW1FbmQuZGVwcmVj
YXRlZE5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8VGV4dD4oKm1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIHRl
eHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyaW1tZWQKICAgICAgICAgICAgICAgICAgICAgVGV4
dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCptX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSA+IDApIHsKQEAgLTU3NiwxMiArNTc2LDEyIEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6Zml4dXBXaGl0ZXNwYWNlKCkKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIC8vIEZJWE1FOiBpc1JlbmRl
cmVkQ2hhcmFjdGVyIHNob3VsZCBiZSByZW1vdmVkLCBhbmQgd2Ugc2hvdWxkIHVzZSBWaXNpYmxl
UG9zaXRpb246OmNoYXJhY3RlckFmdGVyIGFuZCBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckJl
Zm9yZQotICAgIGlmIChtX2xlYWRpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmICFtX2xlYWRp
bmdXaGl0ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBpczxUZXh0PihtX2xlYWRpbmdX
aGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgaWYgKG1fbGVhZGluZ1doaXRlc3Bh
Y2UuaXNOb3ROdWxsKCkgJiYgIW1fbGVhZGluZ1doaXRlc3BhY2UuaXNSZW5kZXJlZENoYXJhY3Rl
cigpICYmIGlzPFRleHQ+KCptX2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpKSB7
CiAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm1fbGVhZGluZ1doaXRl
c3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIEFTU0VSVCghdGV4dE5vZGUucmVuZGVy
ZXIoKSB8fCB0ZXh0Tm9kZS5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgp
KTsKICAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2VycygmdGV4dE5vZGUs
IG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9Ci0gICAgaWYgKG1fdHJhaWxpbmdXaGl0ZXNwYWNl
LmlzTm90TnVsbCgpICYmICFtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc1JlbmRlcmVkQ2hhcmFjdGVy
KCkgJiYgaXM8VGV4dD4obV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSkpIHsK
KyAgICBpZiAobV90cmFpbGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fdHJhaWxpbmdX
aGl0ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBpczxUZXh0PigqbV90cmFpbGluZ1do
aXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBk
b3duY2FzdDxUZXh0PigqbV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgICAgIEFTU0VSVCghdGV4dE5vZGUucmVuZGVyZXIoKSB8fCB0ZXh0Tm9kZS5yZW5kZXJlcigp
LT5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgcmVwbGFjZVRleHRJbk5v
ZGVQcmVzZXJ2aW5nTWFya2VycygmdGV4dE5vZGUsIG1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CkBAIC04
NjYsNyArODY2LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAg
ICBib29sIHNob3VsZFJlYmFsYWNlV2hpdGVTcGFjZSA9IHRydWU7CiAgICAgaWYgKCFmcmFtZSgp
LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZp
ZWxkKCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRl
ZE5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUgJiYgaXM8VGV4dD4obm9kZSkpIHsKKyAgICAgICAg
aWYgKGlzPFRleHQ+KG5vZGUpKSB7CiAgICAgICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25j
YXN0PFRleHQ+KCpub2RlKTsKICAgICAgICAgICAgIGlmICh0ZXh0Tm9kZS5sZW5ndGgoKSkKICAg
ICAgICAgICAgICAgICBzaG91bGRSZWJhbGFjZVdoaXRlU3BhY2UgPSB0ZXh0Tm9kZS5yZW5kZXJl
cigpLT5zdHlsZSgpLnRleHRTZWN1cml0eSgpID09IFRTTk9ORTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCBjMDlhY2EyYjFhOTdmMjNkNjRiY2Y4YzBiODg4ZjUz
ZDVmYWM3ZjkxLi43ODBkODQ3MTg4MWJmNGZhMzBhZDFkODYxYWFmOWU1OWU4N2RhMjcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xMDM2LDcgKzEwMzYsNyBA
QCBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjp3cmFwcGluZ1N0eWxlRm9y
U2VyaWFsaXphdGlvbihOb2RlKiBjb250ZQogCiAgICAgLy8gV2hlbiBub3QgYW5ub3RhdGluZyBm
b3IgaW50ZXJjaGFuZ2UsIHdlIG9ubHkgcHJlc2VydmUgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9u
cy4KICAgICBmb3IgKE5vZGUqIG5vZGUgPSBjb250ZXh0OyBub2RlICYmICFub2RlLT5pc0RvY3Vt
ZW50Tm9kZSgpOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxT
dHlsZWRFbGVtZW50Pihub2RlKSAmJiAhaXNNYWlsQmxvY2txdW90ZShub2RlKSkgeworICAgICAg
ICBpZiAoaXM8U3R5bGVkRWxlbWVudD4oKm5vZGUpICYmICFpc01haWxCbG9ja3F1b3RlKG5vZGUp
KSB7CiAgICAgICAgICAgICB3cmFwcGluZ1N0eWxlLT5tZXJnZUlubGluZUFuZEltcGxpY2l0U3R5
bGVPZkVsZW1lbnQoZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4obm9kZSksIEVkaXRpbmdTdHlsZTo6
RG9Ob3RPdmVycmlkZVZhbHVlcywKICAgICAgICAgICAgICAgICBFZGl0aW5nU3R5bGU6OkVkaXRp
bmdQcm9wZXJ0aWVzSW5FZmZlY3QpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggZTljZDZiODlhOWRlZjc1NDJiNmVlNzllOTAzODljOWI3MjEzMDMyMS4uNWFmNGZm
ZWQxOTk1N2IxMzhjOTNlN2QzMWYwNDI1M2M3ZTViNWEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcApAQCAtMzI4LDggKzMyOCw2IEBAIHN0YXRpYyBIVE1MSW1hZ2VFbGVtZW50KiBpbWFn
ZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIAogICAgIE5vZGUqIG5vZGUgPSBib2R5LT5maXJzdENoaWxkKCk7
Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIWlzPEhU
TUxJbWFnZUVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4obm9kZSk7CkBAIC01ODgsNyArNTg2LDcgQEAg
Ym9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQsIFBhc3NSZWYKICAgICAKICAgICBpZiAoZnJhZ21lbnQpIHsKICAgICAg
ICAgTm9kZSogY2hpbGQgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBpZiAoY2hp
bGQgJiYgZnJhZ21lbnQtPmxhc3RDaGlsZCgpID09IGNoaWxkICYmIGlzPENoYXJhY3RlckRhdGE+
KGNoaWxkKSkKKyAgICAgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KGNoaWxkKSAmJiBmcmFnbWVu
dC0+bGFzdENoaWxkKCkgPT0gY2hpbGQpCiAgICAgICAgICAgICByZXR1cm4gY2xpZW50KCktPnNo
b3VsZEluc2VydFRleHQoZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmNoaWxkKS5kYXRhKCksIHJl
cGxhY2luZ0RPTVJhbmdlLmdldCgpLCBnaXZlbkFjdGlvbik7CiAgICAgfQogCkBAIC0xNjYwLDcg
KzE2NTgsNyBAQCB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0Rp
cmVjdGlvbiBkaXJlY3Rpb24pCiAjZW5kaWYKICAgICAgICAgCiAgICAgRWxlbWVudCogZm9jdXNl
ZEVsZW1lbnQgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgaWYgKGZvY3VzZWRF
bGVtZW50ICYmIGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQp
KSB7CisgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihmb2N1c2VkRWxlbWVu
dCkpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbikK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuc2V0QXR0cmlidXRlKGRpckF0dHIsIGRpcmVjdGlv
biA9PSBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gPyAibHRyIiA6ICJydGwiKTsKQEAgLTE4
NjUsNyArMTg2Myw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIE5vZGUqIGV4
dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgdW5zaWduZWQgZXh0
ZW50T2Zmc2V0ID0gZXh0ZW50LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAKLSAgICAgICAg
aWYgKGJhc2VOb2RlICYmIGJhc2VOb2RlID09IGV4dGVudE5vZGUgJiYgaXM8VGV4dD4oYmFzZU5v
ZGUpICYmIGJhc2VPZmZzZXQgKyB0ZXh0Lmxlbmd0aCgpID09IGV4dGVudE9mZnNldCkgeworICAg
ICAgICBpZiAoaXM8VGV4dD4oYmFzZU5vZGUpICYmIGJhc2VOb2RlID09IGV4dGVudE5vZGUgJiYg
YmFzZU9mZnNldCArIHRleHQubGVuZ3RoKCkgPT0gZXh0ZW50T2Zmc2V0KSB7CiAgICAgICAgICAg
ICBtX2NvbXBvc2l0aW9uTm9kZSA9IGRvd25jYXN0PFRleHQ+KGJhc2VOb2RlKTsKICAgICAgICAg
ICAgIG1fY29tcG9zaXRpb25TdGFydCA9IGJhc2VPZmZzZXQ7CiAgICAgICAgICAgICBtX2NvbXBv
c2l0aW9uRW5kID0gZXh0ZW50T2Zmc2V0OwpAQCAtMjM3OCw3ICsyMzc2LDcgQEAgYm9vbCBFZGl0
b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBFbGVtZW50KiBmb2N1
c2VkRWxlbWVudCA9IGlzPEVsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkg
OiBub2RlLT5wYXJlbnRFbGVtZW50KCk7CisgICAgY29uc3QgRWxlbWVudCogZm9jdXNlZEVsZW1l
bnQgPSBpczxFbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlKSA6IG5vZGUt
PnBhcmVudEVsZW1lbnQoKTsKICAgICBpZiAoIWZvY3VzZWRFbGVtZW50KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIGZvY3VzZWRFbGVtZW50LT5pc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCk7CkBAIC0zMTA1LDkgKzMxMDMsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5
bGVUb0JvZHlFbGVtZW50KCkgY29uc3QKIAogdm9pZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxl
VG9FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFlbGVtZW50KQot
ICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGlzPFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpKTsK
KyAgICBBU1NFUlQoIWVsZW1lbnQgfHwgaXM8U3R5bGVkRWxlbWVudD4oKmVsZW1lbnQpKTsKICAg
ICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCAzMTc0
NWY5MzViZmJiNzkwZjlkMWI2ZjRkMmVkODE0NWQzNmNjNzNjLi5mOWQ5YjkwYzg0YjUzOGYzYzk5
MTA4OWEwMmJkNWIyODgyZTM5NjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3Jt
YXRCbG9ja0NvbW1hbmQuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyBOb2RlKiBlbmNsb3Np
bmdCbG9ja1RvU3BsaXRUcmVlVG8oTm9kZSogc3RhcnROb2RlKTsKIHN0YXRpYyBib29sIGlzRWxl
bWVudEZvckZvcm1hdEJsb2NrKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpOwogc3RhdGlj
IGlubGluZSBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKE5vZGUqIG5vZGUpCiB7Ci0gICAg
cmV0dXJuIGlzPEVsZW1lbnQ+KG5vZGUpICYmIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGRvd25j
YXN0PEVsZW1lbnQ+KCpub2RlKS50YWdRTmFtZSgpKTsKKyAgICByZXR1cm4gaXM8RWxlbWVudD4o
Km5vZGUpICYmIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KS50YWdRTmFtZSgpKTsKIH0KIAogRm9ybWF0QmxvY2tDb21tYW5kOjpGb3JtYXRCbG9ja0NvbW1h
bmQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBiYTNiZTExZGU4MzNk
Yzc3M2NmNTA4NjM2Y2UxNThjNGJmZmU0OWZjLi5lODI0MjEwMzI3ZGE5ZWExMjQxNDU4MGYzMjI4
YTdmNjZmZDA0MmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtMzk4LDcgKzM5OCw3IEBAIHN0YXRpYyBib29sIHJlbW92aW5nTm9kZVJlbW92ZXNQb3Np
dGlvbihOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYgKHBvc2l0
aW9uLmFuY2hvck5vZGUoKSA9PSBub2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlm
ICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50Pihub2RlKTsKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIHZvaWQgQ2FyZXRCYXNlOjpwYWludENh
cmV0KE5vZGUqIG5vZGUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9p
CiAKICAgICBDb2xvciBjYXJldENvbG9yID0gQ29sb3I6OmJsYWNrOwogICAgIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0I7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9
IGlzPEVsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJl
bnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KCpub2RlKSA/
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpOwogICAgIEVs
ZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7
CiAKICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7CkBAIC0xNTIyLDkg
KzE1MjIsOSBAQCB2b2lkIENhcmV0QmFzZTo6cGFpbnRDYXJldChOb2RlKiBub2RlLCBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaQogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpkZWJ1Z1JlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGJvb2wgc2VsZWN0ZWQpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzPEVsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpKSB7Ci0gICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihyZW5kZXJlci0+bm9kZSgpKTsK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIg
ICAgIiwgZWxlbWVudC0+bG9jYWxOYW1lKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
aWYgKGlzPEVsZW1lbnQ+KCpyZW5kZXJlci0+bm9kZSgpKSkgeworICAgICAgICBFbGVtZW50JiBl
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKnJlbmRlcmVyLT5ub2RlKCkpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiLCBlbGVt
ZW50LmxvY2FsTmFtZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0gZWxzZSBpZiAo
cmVuZGVyZXItPmlzVGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9
IHRvUmVuZGVyVGV4dChyZW5kZXJlcik7CiAgICAgICAgIGlmICghdGV4dFJlbmRlcmVyLT50ZXh0
TGVuZ3RoKCkgfHwgIXRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCkpIHsKQEAgLTE2NjgsNyAr
MTY2OCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIAogICAgIEVsZW1lbnQqIGZvY3VzZWRF
bGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgaWYgKGZvY3VzZWRFbGVt
ZW50ICYmIGlzPEhUTUxTZWxlY3RFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkpIHsKKyAgICBpZiAo
aXM8SFRNTFNlbGVjdEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkgewogICAgICAgICBIVE1MU2Vs
ZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pigq
Zm9jdXNlZEVsZW1lbnQpOwogICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5jYW5TZWxlY3RBbGwo
KSkgewogICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5zZWxlY3RBbGwoKTsKQEAgLTE2ODYsNyAr
MTY4Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiAgICAgICAgICAgICBz
ZWxlY3RTdGFydFRhcmdldCA9IHJvb3QuZ2V0KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KG1fc2VsZWN0aW9uLmlzTm9uZSgpICYmIGZvY3VzZWRFbGVtZW50KSB7Ci0gICAgICAgICAgICBp
ZiAoaXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkgeworICAg
ICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZm9jdXNlZEVsZW1l
bnQpKSB7CiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ+KCpmb2N1c2VkRWxlbWVudCkuc2VsZWN0KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQpAQCAtMjAyMiw4ICsyMDIyLDggQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVu
dCogc2NhbkZvckZvcm0oRWxlbWVudCogc3RhcnQpCiAgICAgYXV0byBkZXNjZW5kYW50cyA9IGRl
c2NlbmRhbnRzT2ZUeXBlPEhUTUxFbGVtZW50PihzdGFydC0+ZG9jdW1lbnQoKSk7CiAgICAgZm9y
IChhdXRvIGl0ID0gZGVzY2VuZGFudHMuZnJvbSgqc3RhcnQpLCBlbmQgPSBkZXNjZW5kYW50cy5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0g
Kml0OwotICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50PigmZWxlbWVudCkpCi0gICAgICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PigmZWxlbWVudCk7CisgICAgICAg
IGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuICZk
b3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGVsZW1lbnQpOwogICAgICAgICBpZiAoaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkuZm9ybSgpOwogICAgICAgICBpZiAoaXM8
SFRNTEZyYW1lRWxlbWVudEJhc2U+KGVsZW1lbnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAppbmRleCA0MzM2YzVjYTI0ODM0YmYz
MTYxODIyZjRkMTlhMWJmZDMzNjc1ZjM3Li42ZWUyMWQ5MjI3M2RjZTU1ZjEyNDg2ZjhmOTc4N2Ey
NjgwZWUzOTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJy
ZWFrQ29tbWFuZC5jcHAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0Nv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1lcmdlIHRleHQgbm9kZXMg
d2hlbiBpbnNlcnRpbmcganVzdCBhZnRlciBvciBiZWZvcmUgdGV4dC4KICAgICAKICAgICBpZiAo
aXNFbmRPZlBhcmFncmFwaChjYXJldCkgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0
aW9uKGNhcmV0KSkgewotICAgICAgICBib29sIG5lZWRFeHRyYUxpbmVCcmVhayA9ICFpczxIVE1M
SFJFbGVtZW50Pihwb3MuZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+
KHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgYm9vbCBuZWVkRXh0cmFMaW5lQnJlYWsg
PSAhaXM8SFRNTEhSRWxlbWVudD4oKnBvcy5kZXByZWNhdGVkTm9kZSgpKSAmJiAhaXM8SFRNTFRh
YmxlRWxlbWVudD4oKnBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgCiAgICAgICAgIGlu
c2VydE5vZGVBdChub2RlVG9JbnNlcnQuZ2V0KCksIHBvcyk7CiAgICAgICAgIApAQCAtMTM3LDcg
KzEzNyw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgfSBl
bHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChw
b3MuZGVwcmVjYXRlZE5vZGUoKSkgfHwgIXBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2Rl
KCkpIHsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KG5vZGVUb0luc2VydC5nZXQoKSwgcG9zKTsKICAg
ICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25JblBhcmVu
dEFmdGVyTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBET1dOU1RSRUFNLCBlbmRpbmdTZWxlY3Rp
b24oKS5pc0RpcmVjdGlvbmFsKCkpKTsKLSAgICB9IGVsc2UgaWYgKGlzPFRleHQ+KHBvcy5kZXBy
ZWNhdGVkTm9kZSgpKSkgeworICAgIH0gZWxzZSBpZiAoaXM8VGV4dD4oKnBvcy5kZXByZWNhdGVk
Tm9kZSgpKSkgewogICAgICAgICAvLyBTcGxpdCBhIHRleHQgbm9kZQogICAgICAgICBUZXh0JiB0
ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpwb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAg
IHNwbGl0VGV4dE5vZGUoJnRleHROb2RlLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IDEx
NmUyMWQ2M2NmZjg1YzY2OGVhMGYwMzZmZTk1NmI0OTc3MDZlZjEuLjU4ZTVjNzEyMzIwZWQ1MmI3
MzQ4YTBhZmMzYjY4YmJkYjdjMDYzYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC03NCw3ICs3NCw3IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1l
bnQ+IEluc2VydExpc3RDb21tYW5kOjptZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKFBhc3NSZWZQ
dHI8CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBFbGVtZW50
KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobGlzdC5nZXQoKSk7Ci0g
ICAgaWYgKCFzaWJsaW5nIHx8ICFpczxIVE1MRWxlbWVudD4oc2libGluZykpCisgICAgaWYgKCFp
czxIVE1MRWxlbWVudD4oc2libGluZykpCiAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsK
IAogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbmV4dExpc3QgPSBkb3duY2FzdDxIVE1MRWxlbWVu
dD4oc2libGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAppbmRleCBlOWZlNWFkNGRlMzYwNzhlY2M5
YjFiMTJhOTA2Y2NmZjQ5ZjE0YjBlLi42MDYxMTdiODhhZWJlNmVmNzMyZmU0OWY2NmVjM2RhZjA3
ZWUwNDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFw
aFNlcGFyYXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIElu
c2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghc3RhcnRC
bG9jawogICAgICAgICB8fCAhc3RhcnRCbG9jay0+bm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2Rl
KCkKICAgICAgICAgfHwgaXNUYWJsZUNlbGwoc3RhcnRCbG9jay5nZXQoKSkKLSAgICAgICAgfHwg
aXM8SFRNTEZvcm1FbGVtZW50PihzdGFydEJsb2NrLmdldCgpKQorICAgICAgICB8fCBpczxIVE1M
Rm9ybUVsZW1lbnQ+KCpzdGFydEJsb2NrKQogICAgICAgICAvLyBGSVhNRTogSWYgdGhlIG5vZGUg
aXMgaGlkZGVuLCB3ZSBkb24ndCBoYXZlIGEgY2Fub25pY2FsIHBvc2l0aW9uIHNvIHdlIHdpbGwg
ZG8gdGhlIHdyb25nIHRoaW5nIGZvciB0YWJsZXMgYW5kIDxocj4uIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM0MgogICAgICAgICB8fCAoIWNhbm9uaWNhbFBvcy5p
c051bGwoKSAmJiBjYW5vbmljYWxQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBj
YW5vbmljYWxQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQogICAg
ICAgICB8fCAoIWNhbm9uaWNhbFBvcy5pc051bGwoKSAmJiBjYW5vbmljYWxQb3MuZGVwcmVjYXRl
ZE5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykpKSB7CkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBJ
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICBQb3NpdGlvbiBs
ZWFkaW5nV2hpdGVzcGFjZSA9IGluc2VydGlvblBvc2l0aW9uLmxlYWRpbmdXaGl0ZXNwYWNlUG9z
aXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgLy8gRklYTUU6IGxlYWRpbmdXaGl0ZXNw
YWNlUG9zaXRpb24gaXMgcmV0dXJuaW5nIHRoZSBwb3NpdGlvbiBiZWZvcmUgcHJlc2VydmVkIG5l
d2xpbmVzIGZvciBwb3NpdGlvbnMKICAgICAvLyBhZnRlciB0aGUgcHJlc2VydmVkIG5ld2xpbmUs
IGNhdXNpbmcgdGhlIG5ld2xpbmUgdG8gYmUgdHVybmVkIGludG8gYSBuYnNwLgotICAgIGlmIChs
ZWFkaW5nV2hpdGVzcGFjZS5pc05vdE51bGwoKSAmJiBpczxUZXh0PihsZWFkaW5nV2hpdGVzcGFj
ZS5kZXByZWNhdGVkTm9kZSgpKSkgeworICAgIGlmIChpczxUZXh0PihsZWFkaW5nV2hpdGVzcGFj
ZS5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0
PFRleHQ+KCpsZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgQVNT
RVJUKCF0ZXh0Tm9kZS5yZW5kZXJlcigpIHx8IHRleHROb2RlLnJlbmRlcmVyKCktPnN0eWxlKCku
Y29sbGFwc2VXaGl0ZVNwYWNlKCkpOwogICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZp
bmdNYXJrZXJzKCZ0ZXh0Tm9kZSwgbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKQEAgLTMzOSw3ICszMzksNyBA
QCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIAog
ICAgIC8vIFNwbGl0IGF0IHBvcyBpZiBpbiB0aGUgbWlkZGxlIG9mIGEgdGV4dCBub2RlLgogICAg
IFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJTcGxpdDsKLSAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24u
YW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgaXM8
VGV4dD4oaW5zZXJ0aW9uUG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSkgeworICAgIGlmIChpbnNl
cnRpb25Qb3NpdGlvbi5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciAmJiBpczxUZXh0PigqaW5zZXJ0aW9uUG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSkg
ewogICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PihpbnNlcnRp
b25Qb3NpdGlvbi5jb250YWluZXJOb2RlKCkpOwogICAgICAgICBib29sIGF0RW5kID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
KSA+PSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCAmJiAhYXRFbmQpIHsKQEAgLTM5OSw3ICszOTks
NyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
ICAgICAgICAgLy8gQ2xlYXIgb3V0IGFsbCB3aGl0ZXNwYWNlIGFuZCBpbnNlcnQgb25lIG5vbi1i
cmVha2luZyBzcGFjZQogICAgICAgICAgICAgQVNTRVJUKCFwb3NpdGlvbkFmdGVyU3BsaXQuY29u
dGFpbmVyTm9kZSgpLT5yZW5kZXJlcigpIHx8IHBvc2l0aW9uQWZ0ZXJTcGxpdC5jb250YWluZXJO
b2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkpOwogICAgICAg
ICAgICAgZGVsZXRlSW5zaWduaWZpY2FudFRleHREb3duc3RyZWFtKHBvc2l0aW9uQWZ0ZXJTcGxp
dCk7Ci0gICAgICAgICAgICBpZiAoaXM8VGV4dD4ocG9zaXRpb25BZnRlclNwbGl0LmRlcHJlY2F0
ZWROb2RlKCkpKQorICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCpwb3NpdGlvbkFmdGVyU3BsaXQu
ZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRv
d25jYXN0PFRleHQ+KHBvc2l0aW9uQWZ0ZXJTcGxpdC5jb250YWluZXJOb2RlKCkpLCAwLCBub25C
cmVha2luZ1NwYWNlU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAppbmRleCBhNzAxZjg5MGYwZmEwZDJhY2Y5
ZjYxMDBlZGMwODU2Y2FiNjExZmViLi5iZGQ1OWEzNzRiNThjYmIwYzRmM2M4NTViMjk4OGFkNjhh
NzU5NGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNw
cApAQCAtMjUwLDcgKzI1MCw3IEBAIFBvc2l0aW9uIEluc2VydFRleHRDb21tYW5kOjppbnNlcnRU
YWIoY29uc3QgUG9zaXRpb24mIHBvcykKICAgICBSZWZQdHI8RWxlbWVudD4gc3Bhbk5vZGUgPSBj
cmVhdGVUYWJTcGFuRWxlbWVudChkb2N1bWVudCgpKTsKICAgICAKICAgICAvLyBwbGFjZSBpdAot
ICAgIGlmICghaXM8VGV4dD4obm9kZSkpIHsKKyAgICBpZiAoIWlzPFRleHQ+KCpub2RlKSkgewog
ICAgICAgICBpbnNlcnROb2RlQXQoc3Bhbk5vZGUuZ2V0KCksIGluc2VydFBvcyk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4obm9k
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCmluZGV4IDE1NWUxN2FmNzU5YjQwMTBhOTZmNDRlODBjN2E4OTMwNDMxZjY2OGQuLjQ1
ODM2M2IwNDdmN2I2MDdhYTU4ODg2YTBjYTk0MWQ0NTg0M2RiY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC00NDgsNyAr
NDQ4LDcgQEAgc3RhdGljIGJvb2wgaXNIZWFkZXJFbGVtZW50KGNvbnN0IE5vZGUqIGEpCiAKIHN0
YXRpYyBib29sIGhhdmVTYW1lVGFnTmFtZShOb2RlKiBhLCBOb2RlKiBiKQogewotICAgIHJldHVy
biBhICYmIGIgJiYgaXM8RWxlbWVudD4oYSkgJiYgaXM8RWxlbWVudD4oYikgJiYgZG93bmNhc3Q8
RWxlbWVudD4oKmEpLnRhZ05hbWUoKSA9PSBkb3duY2FzdDxFbGVtZW50PigqYikudGFnTmFtZSgp
OworICAgIHJldHVybiBpczxFbGVtZW50PihhKSAmJiBpczxFbGVtZW50PihiKSAmJiBkb3duY2Fz
dDxFbGVtZW50PigqYSkudGFnTmFtZSgpID09IGRvd25jYXN0PEVsZW1lbnQ+KCpiKS50YWdOYW1l
KCk7CiB9CiAKIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZE1lcmdlKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgc291cmNlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGRlc3RpbmF0
aW9uKQpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJl
bW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUoSW5zZXJ0CiAgICAgICAg
IGNvbnN0IFN0eWxlUHJvcGVydGllcyogaW5saW5lU3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHls
ZSgpOwogICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBuZXdJbmxpbmVTdHlsZSA9IEVkaXRp
bmdTdHlsZTo6Y3JlYXRlKGlubGluZVN0eWxlKTsKICAgICAgICAgaWYgKGlubGluZVN0eWxlKSB7
Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgICAg
ICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgICAgIFZlY3Rv
cjxRdWFsaWZpZWROYW1lPiBhdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50
JiBodG1sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PigqZWxlbWVudCk7CiAKQEAgLTY4
Myw3ICs2ODMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRl
cmVkVGV4dE5vZGVzQXRFbmRzKEluc2VydGVkTm9kZXMmIGlucwogICAgIGRvY3VtZW50KCkudXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBOb2RlKiBsYXN0TGVh
Zkluc2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5sYXN0TGVhZkluc2VydGVkKCk7Ci0gICAgaWYgKGxh
c3RMZWFmSW5zZXJ0ZWQgJiYgaXM8VGV4dD4obGFzdExlYWZJbnNlcnRlZCkgJiYgIWhhc1JlbmRl
cmVkVGV4dChkb3duY2FzdDxUZXh0PigqbGFzdExlYWZJbnNlcnRlZCkpCisgICAgaWYgKGlzPFRl
eHQ+KGxhc3RMZWFmSW5zZXJ0ZWQpICYmICFoYXNSZW5kZXJlZFRleHQoZG93bmNhc3Q8VGV4dD4o
Kmxhc3RMZWFmSW5zZXJ0ZWQpKQogICAgICAgICAmJiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWco
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGxhc3RMZWFmSW5zZXJ0ZWQpLCBzZWxlY3RUYWcp
CiAgICAgICAgICYmICFlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUobGFzdExlYWZJbnNlcnRlZCksIHNjcmlwdFRhZykpIHsKICAgICAgICAgaW5zZXJ0
ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShsYXN0TGVhZkluc2VydGVkKTsKQEAgLTY5Myw3ICs2OTMs
NyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5v
ZGVzQXRFbmRzKEluc2VydGVkTm9kZXMmIGlucwogICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFr
ZSBzdXJlIHRoYXQgZmlyc3ROb2RlSW5zZXJ0ZWQgaXNuJ3QgaW5zaWRlIGEgc2VsZWN0IG9yIHNj
cmlwdCBlbGVtZW50CiAgICAgLy8gYmVjYXVzZSBpdCBpcyBhIHRvcCBsZXZlbCBub2RlIGluIHRo
ZSBmcmFnbWVudCBhbmQgdGhlIHVzZXIgY2FuJ3QgaW5zZXJ0IGludG8gdGhvc2UgZWxlbWVudHMu
CiAgICAgTm9kZSogZmlyc3ROb2RlSW5zZXJ0ZWQgPSBpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUlu
c2VydGVkKCk7Ci0gICAgaWYgKGZpcnN0Tm9kZUluc2VydGVkICYmIGlzPFRleHQ+KGZpcnN0Tm9k
ZUluc2VydGVkKSAmJiAhaGFzUmVuZGVyZWRUZXh0KGRvd25jYXN0PFRleHQ+KCpmaXJzdE5vZGVJ
bnNlcnRlZCkpKSB7CisgICAgaWYgKGlzPFRleHQ+KGZpcnN0Tm9kZUluc2VydGVkKSAmJiAhaGFz
UmVuZGVyZWRUZXh0KGRvd25jYXN0PFRleHQ+KCpmaXJzdE5vZGVJbnNlcnRlZCkpKSB7CiAgICAg
ICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGUoZmlyc3ROb2RlSW5zZXJ0ZWQpOwogICAg
ICAgICByZW1vdmVOb2RlKGZpcnN0Tm9kZUluc2VydGVkKTsKICAgICB9CkBAIC0xMjczLDcgKzEy
NzMsNyBAQCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQZXJmb3JtU21hcnRS
ZXBsYWNlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogdGV4
dENvbnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wocG9zaXRpb25BdFN0YXJ0T2ZJbnNl
cnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBpZiAodGV4dENvbnRyb2wgJiYg
aXM8SFRNTElucHV0RWxlbWVudD4odGV4dENvbnRyb2wpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCp0ZXh0Q29udHJvbCkuaXNQYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKGlzPEhUTUxJ
bnB1dEVsZW1lbnQ+KHRleHRDb250cm9sKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
dGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IERpc2FibGUgc21hcnQgcmVwbGFjZSBmb3IgcGFzc3dvcmQgZmllbGRzLgogCiAgICAgcmV0dXJu
IHRydWU7CkBAIC0xMjkxLDcgKzEyOTEsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UoKQogCiAgICAgUG9zaXRpb24gZW5kVXBzdHJlYW0g
PSBlbmRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCk7CiAgICAg
Tm9kZSogZW5kTm9kZSA9IGVuZFVwc3RyZWFtLmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24oKTsK
LSAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kTm9kZSAmJiBpczxUZXh0PihlbmROb2RlKSA/IGRvd25j
YXN0PFRleHQ+KCplbmROb2RlKS5sZW5ndGgoKSA6IDA7CisgICAgaW50IGVuZE9mZnNldCA9IGlz
PFRleHQ+KGVuZE5vZGUpID8gZG93bmNhc3Q8VGV4dD4oKmVuZE5vZGUpLmxlbmd0aCgpIDogMDsK
ICAgICBpZiAoZW5kVXBzdHJlYW0uYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3IpIHsKICAgICAgICAgZW5kTm9kZSA9IGVuZFVwc3RyZWFtLmNvbnRhaW5l
ck5vZGUoKTsKICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kVXBzdHJlYW0ub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCk7CkBAIC0xMzAwLDcgKzEzMDAsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UoKQogICAgIGJvb2wgbmVlZHNUcmFpbGluZ1Nw
YWNlID0gIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpICYmICFpc0NoYXJh
Y3RlclNtYXJ0UmVwbGFjZUV4ZW1wdENvbnNpZGVyaW5nTm9uQnJlYWtpbmdTcGFjZShlbmRPZklu
c2VydGVkQ29udGVudC5jaGFyYWN0ZXJBZnRlcigpLCBmYWxzZSk7CiAgICAgaWYgKG5lZWRzVHJh
aWxpbmdTcGFjZSAmJiBlbmROb2RlKSB7CiAgICAgICAgIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNl
ID0gIWVuZE5vZGUtPnJlbmRlcmVyKCkgfHwgZW5kTm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5j
b2xsYXBzZVdoaXRlU3BhY2UoKTsKLSAgICAgICAgaWYgKGlzPFRleHQ+KGVuZE5vZGUpKSB7Cisg
ICAgICAgIGlmIChpczxUZXh0PigqZW5kTm9kZSkpIHsKICAgICAgICAgICAgIGluc2VydFRleHRJ
bnRvTm9kZShkb3duY2FzdDxUZXh0PihlbmROb2RlKSwgZW5kT2Zmc2V0LCBjb2xsYXBzZVdoaXRl
U3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwogICAgICAgICAgICAgaWYg
KG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQuY29udGFpbmVyTm9kZSgpID09IGVuZE5vZGUpCiAgICAg
ICAgICAgICAgICAgbV9lbmRPZkluc2VydGVkQ29udGVudC5tb3ZlVG9PZmZzZXQobV9lbmRPZklu
c2VydGVkQ29udGVudC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEpOwpAQCAtMTMyNCw3ICsx
MzI0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6YWRkU3BhY2VzRm9yU21hcnRS
ZXBsYWNlKCkKICAgICBib29sIG5lZWRzTGVhZGluZ1NwYWNlID0gIWlzU3RhcnRPZlBhcmFncmFw
aChzdGFydE9mSW5zZXJ0ZWRDb250ZW50KSAmJiAhaXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVt
cHRDb25zaWRlcmluZ05vbkJyZWFraW5nU3BhY2Uoc3RhcnRPZkluc2VydGVkQ29udGVudC5wcmV2
aW91cygpLmNoYXJhY3RlckFmdGVyKCksIHRydWUpOwogICAgIGlmIChuZWVkc0xlYWRpbmdTcGFj
ZSAmJiBzdGFydE5vZGUpIHsKICAgICAgICAgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhc3Rh
cnROb2RlLT5yZW5kZXJlcigpIHx8IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5jb2xs
YXBzZVdoaXRlU3BhY2UoKTsKLSAgICAgICAgaWYgKGlzPFRleHQ+KHN0YXJ0Tm9kZSkpIHsKKyAg
ICAgICAgaWYgKGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgICAgICBpbnNlcnRUZXh0
SW50b05vZGUoZG93bmNhc3Q8VGV4dD4oc3RhcnROb2RlKSwgc3RhcnRPZmZzZXQsIGNvbGxhcHNl
V2hpdGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7CiAgICAgICAgICAg
ICBpZiAobV9lbmRPZkluc2VydGVkQ29udGVudC5jb250YWluZXJOb2RlKCkgPT0gc3RhcnROb2Rl
ICYmIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAg
ICAgICAgICAgICAgbV9lbmRPZkluc2VydGVkQ29udGVudC5tb3ZlVG9PZmZzZXQobV9lbmRPZklu
c2VydGVkQ29udGVudC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEpOwpAQCAtMTM3NSwyMiAr
MTM3NSwyMiBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZVRleHROb2Rlc0Fy
b3VuZFBvc2l0aW9uKFBvc2l0aW9uJiBwb3NpdGlvbiwgUAogICAgIGJvb2wgcG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yID0gcG9zaXRpb24uYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3I7CiAgICAgYm9vbCBwb3NpdGlvbk9ubHlUb0JlVXBkYXRlZElzT2Zm
c2V0SW5BbmNob3IgPSBwb3NpdGlvbk9ubHlUb0JlVXBkYXRlZC5hbmNob3JUeXBlKCkgPT0gUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAgICBSZWZQdHI8VGV4dD4gdGV4dDsK
LSAgICBpZiAocG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHBvc2l0aW9uLmNvbnRhaW5lck5v
ZGUoKSAmJiBpczxUZXh0Pihwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKQorICAgIGlmIChwb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgaXM8VGV4dD4ocG9zaXRpb24uY29udGFpbmVyTm9kZSgp
KSkKICAgICAgICAgdGV4dCA9IGRvd25jYXN0PFRleHQ+KHBvc2l0aW9uLmNvbnRhaW5lck5vZGUo
KSk7CiAgICAgZWxzZSB7CiAgICAgICAgIE5vZGUqIGJlZm9yZSA9IHBvc2l0aW9uLmNvbXB1dGVO
b2RlQmVmb3JlUG9zaXRpb24oKTsKLSAgICAgICAgaWYgKGJlZm9yZSAmJiBpczxUZXh0PihiZWZv
cmUpKQorICAgICAgICBpZiAoaXM8VGV4dD4oYmVmb3JlKSkKICAgICAgICAgICAgIHRleHQgPSBk
b3duY2FzdDxUZXh0PihiZWZvcmUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIE5vZGUq
IGFmdGVyID0gcG9zaXRpb24uY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCk7Ci0gICAgICAgICAg
ICBpZiAoYWZ0ZXIgJiYgaXM8VGV4dD4oYWZ0ZXIpKQorICAgICAgICAgICAgaWYgKGlzPFRleHQ+
KGFmdGVyKSkKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oYWZ0ZXIpOwog
ICAgICAgICB9CiAgICAgfQogICAgIGlmICghdGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHRleHQtPnByZXZpb3VzU2libGluZygpICYmIGlzPFRleHQ+KHRleHQtPnByZXZpb3VzU2li
bGluZygpKSkgeworICAgIGlmIChpczxUZXh0Pih0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSkpIHsK
ICAgICAgICAgUmVmUHRyPFRleHQ+IHByZXZpb3VzID0gZG93bmNhc3Q8VGV4dD4odGV4dC0+cHJl
dmlvdXNTaWJsaW5nKCkpOwogICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dCwgMCwgcHJl
dmlvdXMtPmRhdGEoKSk7CiAKQEAgLTE0MDksNyArMTQwOSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJvdW5kUG9zaXRpb24oUG9zaXRpb24mIHBvc2l0
aW9uLCBQCiAKICAgICAgICAgcmVtb3ZlTm9kZShwcmV2aW91cyk7CiAgICAgfQotICAgIGlmICh0
ZXh0LT5uZXh0U2libGluZygpICYmIGlzPFRleHQ+KHRleHQtPm5leHRTaWJsaW5nKCkpKSB7Cisg
ICAgaWYgKGlzPFRleHQ+KHRleHQtPm5leHRTaWJsaW5nKCkpKSB7CiAgICAgICAgIFJlZlB0cjxU
ZXh0PiBuZXh0ID0gZG93bmNhc3Q8VGV4dD4odGV4dC0+bmV4dFNpYmxpbmcoKSk7CiAgICAgICAg
IHVuc2lnbmVkIG9yaWdpbmFsTGVuZ3RoID0gdGV4dC0+bGVuZ3RoKCk7CiAgICAgICAgIGluc2Vy
dFRleHRJbnRvTm9kZSh0ZXh0LCBvcmlnaW5hbExlbmd0aCwgbmV4dC0+ZGF0YSgpKTsKQEAgLTE0
NDksNyArMTQ0OSw3IEBAIE5vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0xp
c3RJdGVtcyhQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBwcnBMaXN0CiAgICAgLy8gbGlzdCBpdGVt
cyBhbmQgaW5zZXJ0IHRoZXNlIG5vZGVzIGJldHdlZW4gdGhlbS4KICAgICBpZiAoaXNNaWRkbGUp
IHsKICAgICAgICAgaW50IHRleHROb2RlT2Zmc2V0ID0gaW5zZXJ0UG9zLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpOwotICAgICAgICBpZiAoaXM8VGV4dD4oaW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2Rl
KCkpICYmIHRleHROb2RlT2Zmc2V0ID4gMCkKKyAgICAgICAgaWYgKGlzPFRleHQ+KCppbnNlcnRQ
b3MuZGVwcmVjYXRlZE5vZGUoKSkgJiYgdGV4dE5vZGVPZmZzZXQgPiAwKQogICAgICAgICAgICAg
c3BsaXRUZXh0Tm9kZShkb3duY2FzdDxUZXh0PihpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSks
IHRleHROb2RlT2Zmc2V0KTsKICAgICAgICAgc3BsaXRUcmVlVG9Ob2RlKGluc2VydFBvcy5kZXBy
ZWNhdGVkTm9kZSgpLCBsYXN0Tm9kZSwgdHJ1ZSk7CiAgICAgfQpAQCAtMTQ4OCw3ICsxNDg4LDcg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6dXBkYXRlTm9kZXNJbnNlcnRlZChOb2Rl
ICpub2RlKQogLy8gc3BsaXQgdGV4dCBub2Rlcy4KIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFjZShjb25zdCBSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFn
bWVudCkKIHsKLSAgICBpZiAoIWZyYWdtZW50LmZpcnN0Q2hpbGQoKSB8fCBmcmFnbWVudC5maXJz
dENoaWxkKCkgIT0gZnJhZ21lbnQubGFzdENoaWxkKCkgfHwgIWlzPFRleHQ+KGZyYWdtZW50LmZp
cnN0Q2hpbGQoKSkpCisgICAgaWYgKCFpczxUZXh0PihmcmFnbWVudC5maXJzdENoaWxkKCkpIHx8
IGZyYWdtZW50LmZpcnN0Q2hpbGQoKSAhPSBmcmFnbWVudC5sYXN0Q2hpbGQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gaGFuZGxlIHNt
YXJ0IHJlcGxhY2UgaW4gdGhlIGZhc3QgcGF0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxD
aGVja2VyLmNwcAppbmRleCBlOTVkODU0NmVjMWUwNDM1MDgyYmYwODkwODZkMmM2YjM3OGEzZjY0
Li4wN2EyM2FmMDRhMzkwZjliMDBmYjVjYzU0NTE5ZjMwNWYxNTJlMTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgYm9vbCBTcGVs
bENoZWNrZXI6OmlzQ2hlY2thYmxlKFJhbmdlKiByYW5nZSkgY29uc3QKICAgICBpZiAoIXJhbmdl
IHx8ICFyYW5nZS0+Zmlyc3ROb2RlKCkgfHwgIXJhbmdlLT5maXJzdE5vZGUoKS0+cmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNvbnN0IE5vZGUqIG5vZGUgPSByYW5nZS0+
c3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAobm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSAmJiAh
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBp
ZiAoaXM8RWxlbWVudD4obm9kZSkgJiYgIWRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNv
bnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0
VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCmluZGV4IDhmN2JkZjU4NDI4ZjJj
NTVmNjc5OGMwNzY0NWE0ODdmNTg5YWIxZmUuLjUxNzVlM2E2OGQ3NjQ5NjA0Njg4NTIwNGEwYjFj
NTFkMDQ5NDQ5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcApAQCAtNTcsNyAr
NTcsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OmRvQXBw
bHkoKQogICAgIGlmICghcGFyZW50UmVuZGVyZXIgfHwgIXBhcmVudFJlbmRlcmVyLT5pc0lubGlu
ZSgpKSB7CiAgICAgICAgIHdyYXBDb250ZW50c0luRHVtbXlTcGFuKHBhcmVudCk7CiAgICAgICAg
IE5vZGUqIGZpcnN0Q2hpbGQgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKCFm
aXJzdENoaWxkIHx8ICFpczxFbGVtZW50PihmaXJzdENoaWxkKSkKKyAgICAgICAgaWYgKCFpczxF
bGVtZW50PihmaXJzdENoaWxkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcGFyZW50
ID0gZG93bmNhc3Q8RWxlbWVudD4oZmlyc3RDaGlsZCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGE1ZDI4NmM1YjRhOGJiY2RiNTk2ZjA4NzExNmQ4
MDk5YWU2YmM2NjguLjhlYjRmMDAzMmFmNDgxNDRkM2ZiYWZmMTMxZmM4MmVmMmEzYzk3NTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTI1NSw3ICsyNTUsNyBA
QCBib29sIGlzUmVuZGVyZXJSZXBsYWNlZEVsZW1lbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
ICAgICBpZiAocmVuZGVyZXItPmlzSW1hZ2UoKSB8fCByZW5kZXJlci0+aXNXaWRnZXQoKSB8fCBy
ZW5kZXJlci0+aXNNZWRpYSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChyZW5k
ZXJlci0+bm9kZSgpICYmIGlzPEVsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpKSB7CisgICAgaWYg
KGlzPEVsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpKSB7CiAgICAgICAgIEVsZW1lbnQmIGVsZW1l
bnQgPSBkb3duY2FzdDxFbGVtZW50PigqcmVuZGVyZXItPm5vZGUoKSk7CiAgICAgICAgIGlmIChp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSB8fCBpczxIVE1MTGVnZW5kRWxlbWVu
dD4oZWxlbWVudCkgfHwgaXM8SFRNTE1ldGVyRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTFBy
b2dyZXNzRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDYxMjA4MGQ2MmY0
NzA3ZmU5ZTk3NTk2YWE3ZGM0OTJmMWVmNTFlM2UuLmM5OWY1YmY4ZGRjMGMwMWQzMzhhOWQzMWE4
MmQwNzllMzExZDI0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0
aW9uLmNwcApAQCAtNjY0LDcgKzY2NCw3IEBAIE5vZGUqIFZpc2libGVTZWxlY3Rpb246Om5vbkJv
dW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkgY29uc3QKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6
aXNJblBhc3N3b3JkRmllbGQoKSBjb25zdAogewogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50KiB0ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKLSAg
ICByZXR1cm4gdGV4dENvbnRyb2wgJiYgaXM8SFRNTElucHV0RWxlbWVudD4odGV4dENvbnRyb2wp
ICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCp0ZXh0Q29udHJvbCkuaXNQYXNzd29yZEZp
ZWxkKCk7CisgICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KHRleHRDb250cm9sKSAmJiBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgp
OwogfQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwCmluZGV4IGJkZjEzMjY5NGUzZGZkYmEzN2JlMTQ4ZTNiODA2YTY2M2Q5YWM5YmMuLmViNWRl
MDY4MTJkMjY1Zjg5Zjc2MTVmYTBmODI1NmRlM2FjNDBjY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTc2Nyw3ICs3NjcsNyBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0UG9zaXRpb25Gb3JMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgTGlu
ZUVuZHBvaQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGlzPFRleHQ+KHN0YXJ0Tm9k
ZSkgPyBQb3NpdGlvbihkb3duY2FzdDxUZXh0PihzdGFydE5vZGUpLCB0b0lubGluZVRleHRCb3go
c3RhcnRCb3gpLT5zdGFydCgpKQorICAgIHJldHVybiBpczxUZXh0Pigqc3RhcnROb2RlKSA/IFBv
c2l0aW9uKGRvd25jYXN0PFRleHQ+KHN0YXJ0Tm9kZSksIHRvSW5saW5lVGV4dEJveChzdGFydEJv
eCktPnN0YXJ0KCkpCiAgICAgICAgIDogcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0Tm9kZSk7CiB9
CiAKQEAgLTgzOCw3ICs4MzgsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9u
Rm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIExpbmVFbmRwb2ludAogICAgIFBvc2l0
aW9uIHBvczsKICAgICBpZiAoZW5kTm9kZS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHBv
cyA9IHBvc2l0aW9uQmVmb3JlTm9kZShlbmROb2RlKTsKLSAgICBlbHNlIGlmIChlbmRCb3gtPmlz
SW5saW5lVGV4dEJveCgpICYmIGlzPFRleHQ+KGVuZE5vZGUpKSB7CisgICAgZWxzZSBpZiAoZW5k
Qm94LT5pc0lubGluZVRleHRCb3goKSAmJiBpczxUZXh0PigqZW5kTm9kZSkpIHsKICAgICAgICAg
SW5saW5lVGV4dEJveCogZW5kVGV4dEJveCA9IHRvSW5saW5lVGV4dEJveChlbmRCb3gpOwogICAg
ICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+c3RhcnQoKTsKICAgICAgICAgaWYgKCFl
bmRUZXh0Qm94LT5pc0xpbmVCcmVhaygpKQpAQCAtMTE0Myw3ICsxMTQzLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFZGl0aW5n
Qm91bmRhcnlDcm9zc2kKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChyLT5pc1Rl
eHQoKSAmJiB0b1JlbmRlclRleHQociktPmhhc1JlbmRlcmVkVGV4dCgpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxUZXh0PihuKSk7CisgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxUZXh0PigqbikpOwogICAg
ICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I7CiAgICAg
ICAgICAgICBpZiAoc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAgICBT
dHJpbmdJbXBsJiB0ZXh0ID0gKnRvUmVuZGVyVGV4dChyKS0+dGV4dCgpOwpAQCAtMTIyNiw3ICsx
MjI2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYywgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmcKIAogICAgICAgICAvLyBGSVhNRTogV2Ug
YXZvaWQgcmV0dXJuaW5nIGEgcG9zaXRpb24gd2hlcmUgdGhlIHJlbmRlcmVyIGNhbid0IGFjY2Vw
dCB0aGUgY2FyZXQuCiAgICAgICAgIGlmIChyLT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQocikt
Pmhhc1JlbmRlcmVkVGV4dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpczxUZXh0PihuKSk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpczxUZXh0PigqbikpOwogICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I7CiAgICAgICAgICAgICBpZiAoc3R5bGUucHJlc2Vy
dmVOZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsJiB0ZXh0ID0gKnRvUmVu
ZGVyVGV4dChyKS0+dGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1M
Q29udmVydGVyLm1tCmluZGV4IGE3ZTBiNDc4NjcyOWRiYjZlMjA5Y2ViZWFmMDJjNDYzODYxYTU0
ZDcuLjBkNWQzZmUwZjc5YTFiYjAxMTRjZDcxZjI3YzcxOWVjODRmYzAzOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTEzNTcsNyArMTM1
Nyw3IEBAIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YXR0cmlidXRlc0ZvckVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCkKIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YWdncmVnYXRl
ZEF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMoQ2hhcmFjdGVyRGF0YSYgbm9kZSkKIHsKICAgICBOb2Rl
KiBhbmNlc3RvciA9IG5vZGUucGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChhbmNlc3RvciAmJiAh
aXM8RWxlbWVudD4oYW5jZXN0b3IpKQorICAgIHdoaWxlIChhbmNlc3RvciAmJiAhaXM8RWxlbWVu
dD4oKmFuY2VzdG9yKSkKICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgp
OwogICAgIGlmICghYW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTM3NCw3
ICsxMzc0LDcgQEAgTlNEaWN0aW9uYXJ5KiBIVE1MQ29udmVydGVyOjphZ2dyZWdhdGVkQXR0cmli
dXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoRWxlbWUKICAgICBBU1NFUlQoYXR0cmlidXRl
c0ZvckN1cnJlbnRFbGVtZW50KTsKIAogICAgIE5vZGUqIGFuY2VzdG9yID0gZWxlbWVudC5wYXJl
bnROb2RlKCk7Ci0gICAgd2hpbGUgKGFuY2VzdG9yICYmICFpczxFbGVtZW50PihhbmNlc3Rvcikp
CisgICAgd2hpbGUgKGFuY2VzdG9yICYmICFpczxFbGVtZW50PigqYW5jZXN0b3IpKQogICAgICAg
ICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCk7CiAKICAgICBpZiAoIWFuY2VzdG9y
KSB7CkBAIC0yNTcxLDcgKzI1NzEsNyBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRy
aWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgCiAgICAgICAgIGlm
IChzdGFydENvbnRhaW5lciA9PSBlbmRDb250YWluZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9m
ZnNldCAtIDEpKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gc3RhcnRDb250YWluZXItPnRy
YXZlcnNlVG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChub2RlICYmIGlz
PEhUTUxJbWFnZUVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8SFRNTEltYWdl
RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAgICBOU0ZpbGVXcmFwcGVyKiBmaWxlV3Jh
cHBlciA9IGZpbGVXcmFwcGVyRm9yRWxlbWVudChkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50Pihu
b2RlKSk7CiAgICAgICAgICAgICAgICAgTlNUZXh0QXR0YWNobWVudCogYXR0YWNobWVudCA9IFtb
TlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlcl07
CiAgICAgICAgICAgICAgICAgW3N0cmluZyBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltOU0F0dHJp
YnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50OmF0dGFjaG1lbnRdXTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKaW5kZXggZWJmNWI1Y2IxZTgyMGVj
NzM0Yzg4YWNlOGFkN2M3YTFlZjkyYmY3ZS4uMTYzZDEwZjlkZmM1ZGExMzg2YWU1Nzk3YmMxMTdk
YjUxOTQxMmIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKQEAgLTMx
Niw3ICszMTYsNyBAQCBib29sIGlzSW5saW5lKGNvbnN0IE5vZGUqIG5vZGUpCiBFbGVtZW50KiBl
bmNsb3NpbmdCbG9jayhOb2RlKiBub2RlLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVs
ZSkKIHsKICAgICBOb2RlKiBlbmNsb3NpbmdOb2RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIGlzQmxvY2ssIHJ1bGUpOwotICAgIHJldHVy
biBlbmNsb3NpbmdOb2RlICYmIGlzPEVsZW1lbnQ+KGVuY2xvc2luZ05vZGUpID8gZG93bmNhc3Q8
RWxlbWVudD4oZW5jbG9zaW5nTm9kZSkgOiBudWxscHRyOworICAgIHJldHVybiBpczxFbGVtZW50
PihlbmNsb3NpbmdOb2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGVuY2xvc2luZ05vZGUpIDogbnVs
bHB0cjsKIH0KIAogVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTU1MCw3ICs1NTAsNyBAQCBFbGVtZW50KiBlbmNsb3Np
bmdFbGVtZW50V2l0aFRhZyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFF1YWxpZmll
ZE5hbWUmCiAgICAgZm9yIChOb2RlKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsg
bm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAocm9vdCAmJiAh
bm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSkuaGFzVGFnTmFtZSh0YWdOYW1lKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCBFbGVtZW50KiBlbmNsb3NpbmdBbmNo
b3JFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiBwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIGZvciAoTm9kZSogbm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkgJiYgbm9k
ZS0+aXNMaW5rKCkpCisgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkgJiYgbm9kZS0+aXNM
aW5rKCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAg
fQogICAgIHJldHVybiBudWxscHRyOwpAQCAtNjUyLDcgKzY1Miw3IEBAIEhUTUxFbGVtZW50KiBl
bmNsb3NpbmdMaXN0KE5vZGUqIG5vZGUpCiAgICAgTm9kZSogcm9vdCA9IGhpZ2hlc3RFZGl0YWJs
ZVJvb3QoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpKTsKICAgICAKICAgICBmb3Ig
KENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBhbmNlc3Rvcjsg
YW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1M
VUxpc3RFbGVtZW50PihhbmNlc3RvcikgfHwgaXM8SFRNTE9MaXN0RWxlbWVudD4oYW5jZXN0b3Ip
KQorICAgICAgICBpZiAoaXM8SFRNTFVMaXN0RWxlbWVudD4oKmFuY2VzdG9yKSB8fCBpczxIVE1M
T0xpc3RFbGVtZW50PigqYW5jZXN0b3IpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxFbGVtZW50PihhbmNlc3Rvcik7CiAgICAgICAgIGlmIChhbmNlc3RvciA9PSByb290KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDU1LDcgKzEwNTUsNyBAQCBib29sIGxpbmVC
cmVha0V4aXN0c0F0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIGlmICgh
cG9zaXRpb24uYW5jaG9yTm9kZSgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgaWYgKCFpczxUZXh0Pihwb3NpdGlvbi5hbmNob3JOb2RlKCkpIHx8ICFwb3Np
dGlvbi5hbmNob3JOb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCkucHJlc2VydmVOZXdsaW5lKCkp
CisgICAgaWYgKCFpczxUZXh0PigqcG9zaXRpb24uYW5jaG9yTm9kZSgpKSB8fCAhcG9zaXRpb24u
YW5jaG9yTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxU
ZXh0PigqcG9zaXRpb24uYW5jaG9yTm9kZSgpKTsKQEAgLTExODQsMTUgKzExODQsMTUgQEAgYm9v
bCBpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihjb25zdCBOb2RlKiBub2RlKQog
CiBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUqIGZpcnN0LCBjb25zdCBOb2Rl
KiBzZWNvbmQpCiB7Ci0gICAgaWYgKCFpczxFbGVtZW50PihmaXJzdCkgfHwgIWlzPEVsZW1lbnQ+
KHNlY29uZCkpCisgICAgaWYgKCFpczxFbGVtZW50PigqZmlyc3QpIHx8ICFpczxFbGVtZW50Pigq
c2Vjb25kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgRWxlbWVudCogZmly
c3RFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oZmlyc3QpOwotICAgIGNvbnN0IEVsZW1lbnQq
IHNlY29uZEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihzZWNvbmQpOwotICAgIGlmICghZmly
c3RFbGVtZW50LT5oYXNUYWdOYW1lKHNlY29uZEVsZW1lbnQtPnRhZ1FOYW1lKCkpKQorICAgIGNv
bnN0IEVsZW1lbnQmIGZpcnN0RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpmaXJzdCk7Cisg
ICAgY29uc3QgRWxlbWVudCYgc2Vjb25kRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpzZWNv
bmQpOworICAgIGlmICghZmlyc3RFbGVtZW50Lmhhc1RhZ05hbWUoc2Vjb25kRWxlbWVudC50YWdR
TmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGZpcnN0RWxlbWVu
dC0+aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoc2Vjb25kRWxlbWVudCk7CisgICAgcmV0dXJuIGZp
cnN0RWxlbWVudC5oYXNFcXVpdmFsZW50QXR0cmlidXRlcygmc2Vjb25kRWxlbWVudCk7CiB9CiAK
IGJvb2wgaXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCkBA
IC0xMjAwLDcgKzEyMDAsNyBAQCBib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChj
b25zdCBOb2RlKiBub2RlKQogICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKGxpc3RpbmdUYWcp
CiAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUob2xUYWcpCiAgICAgICAgIHx8IG5vZGUtPmhh
c1RhZ05hbWUocHJlVGFnKQotICAgICAgICB8fCBpczxIVE1MVGFibGVFbGVtZW50Pihub2RlKQor
ICAgICAgICB8fCBpczxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSkKICAgICAgICAgfHwgbm9kZS0+
aGFzVGFnTmFtZSh1bFRhZykKICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZSh4bXBUYWcpCiAg
ICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDFUYWcpCkBAIC0xMjUxLDcgKzEyNTEsNyBAQCBF
bGVtZW50KiBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChOb2RlKiBub2RlKQog
ICAgIGlmIChpc0Jsb2NrRmxvd0VsZW1lbnQobm9kZSkpCiAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxFbGVtZW50Pihub2RlKTsKICAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkp
KSB7Ci0gICAgICAgIGlmIChpc0Jsb2NrRmxvd0VsZW1lbnQobm9kZSkgfHwgaXM8SFRNTEJvZHlF
bGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKGlzQmxvY2tGbG93RWxlbWVudChub2RlKSB8fCBp
czxIVE1MQm9keUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXggZDkyMzNhMmJiYTUyMTViYjU1OGFhYmNmNmM2
OTc3MTgzMzY4MWU5NS4uYzVlN2ZlNDJiM2MzYWNiNWQxZDY3YTI5MDM4MzFlNzUzMjM1Y2IxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMTgxLDcgKzE4MSw3
IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGly
ZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgICAgIHJldHVybjsKIAogICAgIEVsZW1l
bnQqIGZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgp
OwotICAgIGlmIChmb2N1c2VkRWxlbWVudCAmJiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oZm9j
dXNlZEVsZW1lbnQpIHx8IChpczxIVE1MSW5wdXRFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkKKyAg
ICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCpmb2N1c2Vk
RWxlbWVudCkgfHwgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkKICAgICAg
ICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuaXNUZXh0
RmllbGQoKQogICAgICAgICAgICAgfHwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3Vz
ZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkpKSkpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9
PSBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRl
eCAxYjkwYmUyNTcwMGIyNzE3NTk5ODc5NjE0NmJmMDk1OGM0ZDBiYTdjLi45MGY0NTViNmMxNjk4
NmE3YWJlMTM4YzhjNTk4MjNlMDI2MTkxZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CkBAIC0yMzQsNyArMjM0LDcgQEAgU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0YWtl
UmVzdWx0cygpCiAKIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBjb25zdCBUZXh0JiB0ZXh0KQogeyAgICAKLSAgICBjb25zdCBib29s
IHBhcmVudElzVGV4dGFyZWEgPSB0ZXh0LnBhcmVudEVsZW1lbnQoKSAmJiBpczxIVE1MVGV4dEFy
ZWFFbGVtZW50Pih0ZXh0LnBhcmVudEVsZW1lbnQoKSk7CisgICAgY29uc3QgYm9vbCBwYXJlbnRJ
c1RleHRhcmVhID0gaXM8SFRNTFRleHRBcmVhRWxlbWVudD4odGV4dC5wYXJlbnRFbGVtZW50KCkp
OwogICAgIGNvbnN0IGJvb2wgd3JhcHBpbmdTcGFuID0gc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxl
KHRleHQpICYmICFwYXJlbnRJc1RleHRhcmVhOwogICAgIGlmICh3cmFwcGluZ1NwYW4pIHsKICAg
ICAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gd3JhcHBpbmdTdHlsZSA9IG1fd3JhcHBpbmdTdHls
ZS0+Y29weSgpOwpAQCAtNDUyLDcgKzQ1Miw3IEBAIHN0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0
YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJsb2NrKE5vZGUqIGNvbW1vbkFuY2VzdG9yCiAK
ICAgICBpZiAoY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZSh0Ym9keVRhZykgfHwgY29t
bW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZSh0clRhZykpIHsKICAgICAgICAgQ29udGFpbmVy
Tm9kZSogdGFibGUgPSBjb21tb25BbmNlc3RvckJsb2NrLT5wYXJlbnROb2RlKCk7Ci0gICAgICAg
IHdoaWxlICh0YWJsZSAmJiAhaXM8SFRNTFRhYmxlRWxlbWVudD4odGFibGUpKQorICAgICAgICB3
aGlsZSAodGFibGUgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJsZSkpCiAgICAgICAgICAg
ICB0YWJsZSA9IHRhYmxlLT5wYXJlbnROb2RlKCk7CiAKICAgICAgICAgcmV0dXJuIHRhYmxlOwpA
QCAtNzQzLDcgKzc0Myw4IEBAIHN0YXRpYyB2b2lkIGZpbGxDb250YWluZXJGcm9tU3RyaW5nKENv
bnRhaW5lck5vZGUqIHBhcmFncmFwaCwgY29uc3QgU3RyaW5nJiBzdHJpCiAKIGJvb2wgaXNQbGFp
blRleHRNYXJrdXAoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIWlzPEhUTUxEaXZFbGVtZW50Pihu
b2RlKSkKKyAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKCFpczxIVE1MRGl2RWxlbWVudD4oKm5v
ZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBIVE1MRGl2RWxlbWVudCYgZWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxEaXZFbGVtZW50Pigqbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9G
aWxlUmVhZGVyLmNwcAppbmRleCA2MTM2NjhiZGNjYmRlNzQ5M2RmNDE4ZGVmZGNiNmYzYjhjMDll
N2M2Li5jMDZjNmFiNmMyNmI5MjNjZDI0ZjQ1OWE1MjE4OGIzZGRhMzU1ZTNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBGaWxlUmVh
ZGVyOjpyZWFkQXNBcnJheUJ1ZmZlcihCbG9iKiBibG9iLCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhGaWxlQVBJLCAiRmlsZVJl
YWRlcjogcmVhZGluZyBhcyBhcnJheSBidWZmZXI6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBpczxGaWxlPihibG9iKSA/IGRvd25jYXN0PEZpbGU+KCpibG9i
KS5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFk
ZXI6IHJlYWRpbmcgYXMgYXJyYXkgYnVmZmVyOiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgaXM8RmlsZT4oKmJsb2IpID8gZG93bmNhc3Q8RmlsZT4oKmJsb2Ip
LnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOwogCiAgICAgcmVhZEludGVybmFsKGJsb2IsIEZp
bGVSZWFkZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVyLCBlYyk7CiB9CkBAIC05MSw3ICs5MSw3
IEBAIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGJsb2IsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogICAgIGlmICghYmxvYikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9H
KEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIGJpbmFyeTogJXMgJXNcbiIsIGJsb2It
PnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGlzPEZpbGU+KGJsb2IpID8gZG93bmNhc3Q8
RmlsZT4oKmJsb2IpLnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOworICAgIExPRyhGaWxlQVBJ
LCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBiaW5hcnk6ICVzICVzXG4iLCBibG9iLT51cmwoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpczxGaWxlPigqYmxvYikgPyBkb3duY2FzdDxGaWxlPigq
YmxvYikucGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKICAgICByZWFkSW50ZXJuYWwoYmxv
YiwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQmluYXJ5U3RyaW5nLCBlYyk7CiB9CkBAIC0xMDEs
NyArMTAxLDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNUZXh0KEJsb2IqIGJsb2IsIGNvbnN0
IFN0cmluZyYgZW5jb2RpbmcsIEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoIWJsb2IpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0
ZXh0OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXM8Rmls
ZT4oYmxvYikgPyBkb3duY2FzdDxGaWxlPigqYmxvYikucGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAi
Iik7CisgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIHRleHQ6ICVzICVz
XG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpczxGaWxlPigqYmxvYikg
PyBkb3duY2FzdDxGaWxlPigqYmxvYikucGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKICAg
ICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CiAgICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFk
ZXJMb2FkZXI6OlJlYWRBc1RleHQsIGVjKTsKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIEZpbGVS
ZWFkZXI6OnJlYWRBc0RhdGFVUkwoQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
aWYgKCFibG9iKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFk
ZXI6IHJlYWRpbmcgYXMgZGF0YSBVUkw6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCBpczxGaWxlPihibG9iKSA/IGRvd25jYXN0PEZpbGU+KCpibG9iKS5wYXRo
KCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJl
YWRpbmcgYXMgZGF0YSBVUkw6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBpczxGaWxlPigqYmxvYikgPyBkb3duY2FzdDxGaWxlPigqYmxvYikucGF0aCgpLnV0
ZjgoKS5kYXRhKCkgOiAiIik7CiAKICAgICByZWFkSW50ZXJuYWwoYmxvYiwgRmlsZVJlYWRlckxv
YWRlcjo6UmVhZEFzRGF0YVVSTCwgZWMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9CYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAppbmRleCAz
Yzc0OWE0OWNmZjFmOGQxYTgwOTUzYzYxMDQ1MDM2MzYyMTAxYzE2Li42YjJhOGUzYTAyYTlkZTcz
OTY1NWViYmVjNGVkZmIyM2U1YmJiYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0Jhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcApAQCAtNzMs
NyArNzMsNyBAQCB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjpjcmVh
dGVTaGFkb3dTdWJ0cmVlKCkKIHZvaWQgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5
cGU6OnVwZGF0ZUFwcGVhcmFuY2UoKQogewogICAgIE5vZGUqIG5vZGUgPSBlbGVtZW50KCkudXNl
ckFnZW50U2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxI
VE1MRWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4obm9kZSkpCiAgICAg
ICAgIHJldHVybjsKICAgICBTdHJpbmcgZGlzcGxheVZhbHVlID0gdmlzaWJsZVZhbHVlKCk7CiAg
ICAgaWYgKGRpc3BsYXlWYWx1ZS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9G
VFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKaW5kZXggOWIwZmRlYTk5NjA3ODVmZTU5ZTQ0ZGVkMDk5
ZDE1NzIxZjlkMzUwZC4uZjNiYTllNTE1ZTBlYzFlNWFjOTgyZjE2OTNkZTA0NzBiZjMwOTVlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKQEAgLTMw
MCw3ICszMDAsNyBAQCBib29sIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpsb2FkRG9jdW1l
bnRUZW1wbGF0ZSgpCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHRhYmxlRWxlbWVudCA9IGRvY3VtZW50
KCktPmdldEVsZW1lbnRCeUlkKFN0cmluZyhBU0NJSUxpdGVyYWwoImZ0cERpcmVjdG9yeVRhYmxl
IikpKTsKICAgICBpZiAoIXRhYmxlRWxlbWVudCkKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gZmluZCBlbGVtZW50IGJ5IGlkIFwiZnRwRGlyZWN0b3J5VGFibGVcIiBpbiB0aGUgdGVtcGxh
dGUgZG9jdW1lbnQuIik7Ci0gICAgZWxzZSBpZiAoIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxl
RWxlbWVudC5nZXQoKSkpCisgICAgZWxzZSBpZiAoIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJs
ZUVsZW1lbnQpKQogICAgICAgICBMT0dfRVJST1IoIkVsZW1lbnQgb2YgaWQgXCJmdHBEaXJlY3Rv
cnlUYWJsZVwiIGlzIG5vdCBhIHRhYmxlIGVsZW1lbnQiKTsKICAgICBlbHNlIAogICAgICAgICBt
X3RhYmxlRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlRWxlbWVudC5n
ZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAK
aW5kZXggNzA0NWE4ZjVlOGVjY2I3NTdmZmMwNzc0NWIyMTZkNTgwMGE2NzBmZS4uOTJkMzgxNjk2
MDdjN2NkMjcwNzBiMWVlMzVkOWE4MGQzMmIzMzAxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcApAQCAtOTgsNyArOTgsNyBAQCBIVE1MRm9ybUVs
ZW1lbnQqIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6ZmluZEFzc29jaWF0ZWRGb3JtKGNvbnN0IEhU
TUxFbGVtZW50KiBlbAogICAgICAgICAvLyB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZCgpIG92
ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCiAgICAgICAgIEhUTUxGb3JtRWxlbWVudCogbmV3Rm9ybSA9
IG51bGxwdHI7CiAgICAgICAgIEVsZW1lbnQqIG5ld0Zvcm1DYW5kaWRhdGUgPSBlbGVtZW50LT50
cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChmb3JtSWQpOwotICAgICAgICBpZiAobmV3Rm9ybUNh
bmRpZGF0ZSAmJiBpczxIVE1MRm9ybUVsZW1lbnQ+KG5ld0Zvcm1DYW5kaWRhdGUpKQorICAgICAg
ICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50PihuZXdGb3JtQ2FuZGlkYXRlKSkKICAgICAgICAgICAg
IG5ld0Zvcm0gPSBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KG5ld0Zvcm1DYW5kaWRhdGUpOwog
ICAgICAgICByZXR1cm4gbmV3Rm9ybTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCmluZGV4IDkxNWUyYWFjZjk3YTYwMmU1ODc1MjQ3MWYwOTg5ZjU2YmEy
M2RhZDYuLjQ2MmIyMjgyODViZTc5ZmIzNDM5MzM1YTUwMWI0NThlYWFkNmVlOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCkBAIC0xNTIsMTMgKzE1MiwxNCBA
QCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZl
bnQqIGV2ZW50KSBjb25zdAogCiBzdGF0aWMgdm9pZCBhcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0
aW9uKFN0cmluZ0J1aWxkZXImIHVybCwgRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghaXM8TW91
c2VFdmVudD4oZXZlbnQpKQorICAgIEFTU0VSVChldmVudCk7CisgICAgaWYgKCFpczxNb3VzZUV2
ZW50PigqZXZlbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoZXZlbnQtPnRhcmdl
dCgpKTsKICAgICBOb2RlKiB0YXJnZXQgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwogICAg
IEFTU0VSVCh0YXJnZXQpOwotICAgIGlmICghaXM8SFRNTEltYWdlRWxlbWVudD4odGFyZ2V0KSkK
KyAgICBpZiAoIWlzPEhUTUxJbWFnZUVsZW1lbnQ+KCp0YXJnZXQpKQogICAgICAgICByZXR1cm47
CiAKICAgICBIVE1MSW1hZ2VFbGVtZW50JiBpbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW1h
Z2VFbGVtZW50PigqdGFyZ2V0KTsKQEAgLTE5Niw3ICsxOTcsNyBAQCB2b2lkIEhUTUxBbmNob3JF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgaWYgKGhh
c0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyB0cmFjayBvZiB0
aGUgZWRpdGFibGUgYmxvY2sgdGhhdCB0aGUgc2VsZWN0aW9uIHdhcyBpbiAoaWYgaXQgd2FzIGlu
IG9uZSkganVzdCBiZWZvcmUgdGhlIGxpbmsgd2FzIGNsaWNrZWQKICAgICAgICAgICAgIC8vIGZv
ciB0aGUgTGl2ZVdoZW5Ob3RGb2N1c2VkIGVkaXRhYmxlIGxpbmsgYmVoYXZpb3IKLSAgICAgICAg
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBp
czxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0
b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKKyAgICAgICAgICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxN
b3VzZUV2ZW50PigqZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9u
KCkgIT0gUmlnaHRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAgICAgICAgICAgICAg
ICAgc2V0Um9vdEVkaXRhYmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duKGRvY3VtZW50
KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgp
KTsKICAgICAgICAgICAgICAgICBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duID0gZG93bmNh
c3Q8TW91c2VFdmVudD4oKmV2ZW50KS5zaGlmdEtleSgpOwogICAgICAgICAgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgewpAQCAtNTU1
LDcgKzU1Niw4IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNsaWNrKEV2ZW50KiBl
dmVudCkKIAogSFRNTEFuY2hvckVsZW1lbnQ6OkV2ZW50VHlwZSBIVE1MQW5jaG9yRWxlbWVudDo6
ZXZlbnRUeXBlKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50
KSkKKyAgICBBU1NFUlQoZXZlbnQpOworICAgIGlmICghaXM8TW91c2VFdmVudD4oKmV2ZW50KSkK
ICAgICAgICAgcmV0dXJuIE5vbk1vdXNlRXZlbnQ7CiAgICAgcmV0dXJuIGRvd25jYXN0PE1vdXNl
RXZlbnQ+KCpldmVudCkuc2hpZnRLZXkoKSA/IE1vdXNlRXZlbnRXaXRoU2hpZnRLZXkgOiBNb3Vz
ZUV2ZW50V2l0aG91dFNoaWZ0S2V5OwogfQpAQCAtNTkyLDEyICs1OTQsMTIgQEAgYm9vbCBIVE1M
QW5jaG9yRWxlbWVudDo6dHJlYXRMaW5rQXNMaXZlRm9yRXZlbnRUeXBlKEV2ZW50VHlwZSBldmVu
dFR5cGUpIGNvbnN0CiAKIGJvb2wgaXNFbnRlcktleUtleWRvd25FdmVudChFdmVudCogZXZlbnQp
CiB7Ci0gICAgcmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVu
dCAmJiBpczxLZXlib2FyZEV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4o
KmV2ZW50KS5rZXlJZGVudGlmaWVyKCkgPT0gIkVudGVyIjsKKyAgICByZXR1cm4gZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGlzPEtleWJvYXJkRXZlbnQ+KCpl
dmVudCkgJiYgZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KS5rZXlJZGVudGlmaWVyKCkg
PT0gIkVudGVyIjsKIH0KIAogYm9vbCBpc0xpbmtDbGljayhFdmVudCogZXZlbnQpCiB7Ci0gICAg
cmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgKCFpczxN
b3VzZUV2ZW50PihldmVudCkgfHwgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24o
KSAhPSBSaWdodEJ1dHRvbik7CisgICAgcmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQgJiYgKCFpczxNb3VzZUV2ZW50PigqZXZlbnQpIHx8IGRvd25jYXN0PE1v
dXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgIT0gUmlnaHRCdXR0b24pOwogfQogCiBib29sIHNo
b3VsZFByb2hpYml0TGlua3MoRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFyZWFFbGVtZW50LmNwcAppbmRleCBiMTE1M2U3NTNkMDljOWVlNGU5OGFiYWI5ZmQ3OTYxMWQw
NzVkMjM5Li4yMGJlZjI4MjBhNGIxZGU2ZTcwMDI2NWViMzM1OWRmMmE1MDczNTNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgUGF0
aCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lvbihjb25zdCBMYXlvdXRTaXplJiBzaXplKSBjb25z
dAogSFRNTEltYWdlRWxlbWVudCogSFRNTEFyZWFFbGVtZW50OjppbWFnZUVsZW1lbnQoKSBjb25z
dAogewogICAgIE5vZGUqIG1hcEVsZW1lbnQgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFtYXBF
bGVtZW50IHx8ICFpczxIVE1MTWFwRWxlbWVudD4obWFwRWxlbWVudCkpCisgICAgaWYgKCFpczxI
VE1MTWFwRWxlbWVudD4obWFwRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IAogICAgIHJldHVybiBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oKm1hcEVsZW1lbnQpLmltYWdl
RWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCmluZGV4IDAw
OTMyOWUyYzNhYmE4NWY0YzVjMzJmOGEyY2FkMjhlMjA3ZGI4OGMuLjYxM2Q4Y2VjOTc3MjE0ZjAz
OTdhZTM3YmEzMGZiYjQ1YWY3ODI5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEJvZHlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxl
bWVudC5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25S
ZXF1ZXN0IEhUTUxCb2R5RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmCiAgICAg
Ly8gbWFnaWNhbGx5IGFwcGVhciBvbiB0aGUgPGJvZHk+IG9mIGFsbCBkb2N1bWVudHMgZW1iZWRk
ZWQgdGhyb3VnaCA8aWZyYW1lPiBvciA8ZnJhbWU+LgogICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRo
aXMgY29kZSBzaG91bGQgYmUgaW4gYXR0YWNoKCkgaW5zdGVhZCBvZiBoZXJlLgogICAgIEhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gZG9jdW1lbnQoKS5vd25lckVsZW1lbnQo
KTsKLSAgICBpZiAob3duZXJFbGVtZW50ICYmIGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPigqb3du
ZXJFbGVtZW50KSkgeworICAgIGlmIChpczxIVE1MRnJhbWVFbGVtZW50QmFzZT4ob3duZXJFbGVt
ZW50KSkgewogICAgICAgICBIVE1MRnJhbWVFbGVtZW50QmFzZSYgb3duZXJGcmFtZUVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZT4oKm93bmVyRWxlbWVudCk7CiAgICAgICAg
IGludCBtYXJnaW5XaWR0aCA9IG93bmVyRnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCk7CiAgICAg
ICAgIGlmIChtYXJnaW5XaWR0aCAhPSAtMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9u
RWxlbWVudC5jcHAKaW5kZXggNDUyOWY4YjMzOGI5ZTlmNGI1MzFlMzY4ZjUwODg1MDMyNjgxOTAz
YS4uMjhkYjkyZjQ0N2E5Mjg0ODcwZTg4YWI4NTBjYTE4MDIzZmViODgyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lk
IEhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsKKyAg
ICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KSkgewogICAgICAgICBLZXlib2FyZEV2ZW50
JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKICAgICAg
ICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQg
JiYga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsKICAgICAgICAg
ICAgIHNldEFjdGl2ZSh0cnVlLCB0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlv
bi5jcHAKaW5kZXggN2FjODY5MzQzNDlmMjcwYWVhYmJiYWJhMmU5NjBmZDdhNTBjZDJhOC4uMTdh
MGNmYmUxMGRjZGJjMmI1NzUyZWE3MWJmZTVkMTBjOGVkNjJlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ29sbGVjdGlvbi5jcHAKQEAgLTQwMCw3ICs0MDAsNyBAQCBOb2RlKiBIVE1MQ29sbGVj
dGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKICAgICAgICAg
fSBlbHNlIGlmICh0cmVlU2NvcGUuaGFzRWxlbWVudFdpdGhOYW1lKCpuYW1lLmltcGwoKSkpIHsK
ICAgICAgICAgICAgIGlmICghdHJlZVNjb3BlLmNvbnRhaW5zTXVsdGlwbGVFbGVtZW50c1dpdGhO
YW1lKG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gdHJlZVNjb3BlLmdldEVs
ZW1lbnRCeU5hbWUobmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSAmJiB0eXBl
KCkgPT0gRG9jQWxsICYmICghaXM8SFRNTEVsZW1lbnQ+KGNhbmRpZGF0ZSkgfHwgIW5hbWVTaG91
bGRCZVZpc2libGVJbkRvY3VtZW50QWxsKGRvd25jYXN0PEhUTUxFbGVtZW50PigqY2FuZGlkYXRl
KSkpKQorICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUgJiYgdHlwZSgpID09IERvY0FsbCAm
JiAoIWlzPEhUTUxFbGVtZW50PigqY2FuZGlkYXRlKSB8fCAhbmFtZVNob3VsZEJlVmlzaWJsZUlu
RG9jdW1lbnRBbGwoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpjYW5kaWRhdGUpKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OnVwZGF0ZU5h
bWVkRWxlbWVudENhY2hlKCkgY29uc3QKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0
dHJWYWwgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwogICAgICAgICBpZiAoIWlkQXR0clZh
bC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjYWNoZS0+YXBwZW5kSWRDYWNoZShpZEF0dHJWYWws
IGVsZW1lbnQpOwotICAgICAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkKKyAgICAg
ICAgaWYgKCFpczxIVE1MRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5nZXRO
YW1lQXR0cmlidXRlKCk7CiAgICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlk
QXR0clZhbCAhPSBuYW1lQXR0clZhbCAmJiAodHlwZSgpICE9IERvY0FsbCB8fCBuYW1lU2hvdWxk
QmVWaXNpYmxlSW5Eb2N1bWVudEFsbChkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnQpKSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggYjJkNjU5NWViMTk0NGVhYzMz
MWUwMjc5ODhiNDFiNTI0YjU0YzUyZC4uNTgzNzQ4MjI1NGEyNTkxNjA2NGRmYzZiY2MyNjdiZWI4
ODZiYTgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtMTM5LDcgKzEz
OSw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpzZXREZXNpZ25Nb2RlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6YmdDb2xvcigpIGNvbnN0CiB7
CiAgICAgSFRNTEVsZW1lbnQqIGJvZHlFbGVtZW50ID0gYm9keSgpOwotICAgIGlmICghYm9keUVs
ZW1lbnQgfHwgIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQorICAgIGlmICghaXM8
SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCiAgICAgICAgIHJldHVybiBlbXB0eUF0b207
CiAgICAgcmV0dXJuIGJvZHlFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGJnY29sb3JBdHRyKTsK
IH0KQEAgLTE0Nyw3ICsxNDcsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6
YmdDb2xvcigpIGNvbnN0CiB2b2lkIEhUTUxEb2N1bWVudDo6c2V0QmdDb2xvcihjb25zdCBTdHJp
bmcmIHZhbHVlKQogewogICAgIEhUTUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJvZHkoKTsKLSAg
ICBpZiAoIWJvZHlFbGVtZW50IHx8ICFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkK
KyAgICBpZiAoIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQogICAgICAgICByZXR1
cm47CiAgICAgYm9keUVsZW1lbnQtPnNldEF0dHJpYnV0ZShiZ2NvbG9yQXR0ciwgdmFsdWUpOwog
fQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpzZXRCZ0NvbG9yKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6ZmdDb2xv
cigpIGNvbnN0CiB7CiAgICAgSFRNTEVsZW1lbnQqIGJvZHlFbGVtZW50ID0gYm9keSgpOwotICAg
IGlmICghYm9keUVsZW1lbnQgfHwgIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQor
ICAgIGlmICghaXM8SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCiAgICAgICAgIHJldHVy
biBlbXB0eUF0b207CiAgICAgcmV0dXJuIGJvZHlFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHRl
eHRBdHRyKTsKIH0KQEAgLTE2Myw3ICsxNjMsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxE
b2N1bWVudDo6ZmdDb2xvcigpIGNvbnN0CiB2b2lkIEhUTUxEb2N1bWVudDo6c2V0RmdDb2xvcihj
b25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEhUTUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJv
ZHkoKTsKLSAgICBpZiAoIWJvZHlFbGVtZW50IHx8ICFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlF
bGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQogICAg
ICAgICByZXR1cm47CiAgICAgYm9keUVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0ZXh0QXR0ciwgdmFs
dWUpOwogfQpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpzZXRGZ0NvbG9y
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6
YWxpbmtDb2xvcigpIGNvbnN0CiB7CiAgICAgSFRNTEVsZW1lbnQqIGJvZHlFbGVtZW50ID0gYm9k
eSgpOwotICAgIGlmICghYm9keUVsZW1lbnQgfHwgIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVs
ZW1lbnQpKQorICAgIGlmICghaXM8SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCiAgICAg
ICAgIHJldHVybiBlbXB0eUF0b207CiAgICAgcmV0dXJuIGJvZHlFbGVtZW50LT5mYXN0R2V0QXR0
cmlidXRlKGFsaW5rQXR0cik7CiB9CkBAIC0xNzksNyArMTc5LDcgQEAgY29uc3QgQXRvbWljU3Ry
aW5nJiBIVE1MRG9jdW1lbnQ6OmFsaW5rQ29sb3IoKSBjb25zdAogdm9pZCBIVE1MRG9jdW1lbnQ6
OnNldEFsaW5rQ29sb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBIVE1MRWxlbWVudCog
Ym9keUVsZW1lbnQgPSBib2R5KCk7Ci0gICAgaWYgKCFib2R5RWxlbWVudCB8fCAhaXM8SFRNTEJv
ZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MQm9keUVsZW1lbnQ+KGJv
ZHlFbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvZHlFbGVtZW50LT5zZXRBdHRyaWJ1
dGUoYWxpbmtBdHRyLCB2YWx1ZSk7CiB9CkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBIVE1MRG9j
dW1lbnQ6OnNldEFsaW5rQ29sb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIGNvbnN0IEF0b21pY1N0
cmluZyYgSFRNTERvY3VtZW50OjpsaW5rQ29sb3IoKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50
KiBib2R5RWxlbWVudCA9IGJvZHkoKTsKLSAgICBpZiAoIWJvZHlFbGVtZW50IHx8ICFpczxIVE1M
Qm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxCb2R5RWxlbWVudD4o
Ym9keUVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZW1wdHlBdG9tOwogICAgIHJldHVybiBib2R5
RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShsaW5rQXR0cik7CiB9CkBAIC0xOTUsNyArMTk1LDcg
QEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OmxpbmtDb2xvcigpIGNvbnN0CiB2
b2lkIEhUTUxEb2N1bWVudDo6c2V0TGlua0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgSFRNTEVsZW1lbnQqIGJvZHlFbGVtZW50ID0gYm9keSgpOwotICAgIGlmICghYm9keUVsZW1l
bnQgfHwgIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQorICAgIGlmICghaXM8SFRN
TEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKICAgICByZXR1cm4g
Ym9keUVsZW1lbnQtPnNldEF0dHJpYnV0ZShsaW5rQXR0ciwgdmFsdWUpOwogfQpAQCAtMjAzLDcg
KzIwMyw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpzZXRMaW5rQ29sb3IoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTERvY3VtZW50Ojp2bGlua0NvbG9yKCkgY29u
c3QKIHsKICAgICBIVE1MRWxlbWVudCogYm9keUVsZW1lbnQgPSBib2R5KCk7Ci0gICAgaWYgKCFi
b2R5RWxlbWVudCB8fCAhaXM8SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCisgICAgaWYg
KCFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGVtcHR5
QXRvbTsKICAgICByZXR1cm4gYm9keUVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodmxpbmtBdHRy
KTsKIH0KQEAgLTIxMSw3ICsyMTEsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVu
dDo6dmxpbmtDb2xvcigpIGNvbnN0CiB2b2lkIEhUTUxEb2N1bWVudDo6c2V0VmxpbmtDb2xvcihj
b25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEhUTUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJv
ZHkoKTsKLSAgICBpZiAoIWJvZHlFbGVtZW50IHx8ICFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlF
bGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQogICAg
ICAgICByZXR1cm47CiAgICAgcmV0dXJuIGJvZHlFbGVtZW50LT5zZXRBdHRyaWJ1dGUodmxpbmtB
dHRyLCB2YWx1ZSk7CiB9CkBAIC0zMzksOCArMzM5LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnQ6OmNs
ZWFyKCkKIAogYm9vbCBIVE1MRG9jdW1lbnQ6OmlzRnJhbWVTZXQoKSBjb25zdAogewotICAgIEhU
TUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJvZHkoKTsKLSAgICByZXR1cm4gYm9keUVsZW1lbnQg
JiYgaXM8SFRNTEZyYW1lU2V0RWxlbWVudD4oYm9keUVsZW1lbnQpOworICAgIHJldHVybiBpczxI
VE1MRnJhbWVTZXRFbGVtZW50Pihib2R5KCkpOwogfQogCiBQYXNzUmVmUHRyPERvY3VtZW50PiBI
VE1MRG9jdW1lbnQ6OmNsb25lRG9jdW1lbnRXaXRob3V0Q2hpbGRyZW4oKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCA5YWM0MTNmMDEwNzVkMzY4ZWQ0ZGU1OGRlMjY3
YmRiYjMzMDVjYzFiLi5jNzkzMWFlNTdmMjM1YmFmOTlhZGZhZmNjMjgxMjI4YjZlMGQ3NDAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMzY0LDcgKzM2NCw3IEBAIGJvb2wg
SFRNTEVsZW1lbnQ6Om1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpIGNvbnN0CiB7CiAgICAg
Y29uc3QgRWxlbWVudCogY3VycmVudEVsZW1lbnQgPSB0aGlzOwogICAgIGRvIHsKLSAgICAgICAg
aWYgKGlzPEhUTUxFbGVtZW50PihjdXJyZW50RWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGlzPEhU
TUxFbGVtZW50PigqY3VycmVudEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRl
bnRFZGl0YWJsZVR5cGUoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpjdXJyZW50RWxlbWVudCkpKSB7
CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFZGl0YWJsZVR5cGU6OlRydWU6CiAgICAgICAgICAg
ICBjYXNlIENvbnRlbnRFZGl0YWJsZVR5cGU6OlBsYWludGV4dE9ubHk6CkBAIC00MzYsNyArNDM2
LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiBzdGF0aWMgdm9pZCBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoVGV4
dCYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgTm9kZSogbmV4dCA9IG5vZGUubmV4
dFNpYmxpbmcoKTsKLSAgICBpZiAoIW5leHQgfHwgIWlzPFRleHQ+KG5leHQpKQorICAgIGlmICgh
aXM8VGV4dD4obmV4dCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZjxUZXh0PiB0ZXh0Tm9k
ZShub2RlKTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdGF0aWMgdm9pZCBtZXJnZVdpdGhOZXh0VGV4
dE5vZGUoVGV4dCYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB2b2lkIEhUTUxFbGVtZW50Ojpz
ZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBFbGVtZW50KiBwID0gcGFyZW50RWxlbWVudCgpOwotICAgIGlmICghcCB8fCAhaXM8SFRNTEVs
ZW1lbnQ+KHApKSB7CisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4ocCkpIHsKICAgICAgICAgZWMg
PSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC00NjQsOSArNDY0LDkgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0T3V0ZXJIVE1MKGNvbnN0IFN0
cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAKICAgICBwYXJlbnQtPnJlcGxh
Y2VDaGlsZChmcmFnbWVudC5yZWxlYXNlKCksIHRoaXMsIGVjKTsKICAgICBSZWZQdHI8Tm9kZT4g
bm9kZSA9IG5leHQgPyBuZXh0LT5wcmV2aW91c1NpYmxpbmcoKSA6IG51bGxwdHI7Ci0gICAgaWYg
KCFlYyAmJiBub2RlICYmIGlzPFRleHQ+KCpub2RlKSkKKyAgICBpZiAoIWVjICYmIGlzPFRleHQ+
KG5vZGUuZ2V0KCkpKQogICAgICAgICBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4
dD4oKm5vZGUpLCBlYyk7Ci0gICAgaWYgKCFlYyAmJiBwcmV2ICYmIGlzPFRleHQ+KCpwcmV2KSkK
KyAgICBpZiAoIWVjICYmIGlzPFRleHQ+KHByZXYuZ2V0KCkpKQogICAgICAgICBtZXJnZVdpdGhO
ZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKnByZXYpLCBlYyk7CiB9CiAKQEAgLTU5Nyw5ICs1
OTcsOSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBwYXJlbnQtPnJlcGxhY2VDaGlsZChuZXdDaGlsZC5y
ZWxlYXNlKCksIHRoaXMsIGVjKTsKIAogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbmV4dCA/IG5l
eHQtPnByZXZpb3VzU2libGluZygpIDogbnVsbHB0cjsKLSAgICBpZiAoIWVjICYmIG5vZGUgJiYg
aXM8VGV4dD4oKm5vZGUpKQorICAgIGlmICghZWMgJiYgaXM8VGV4dD4obm9kZS5nZXQoKSkpCiAg
ICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0Pigqbm9kZSksIGVjKTsK
LSAgICBpZiAoIWVjICYmIHByZXYgJiYgaXM8VGV4dD4oKnByZXYpKQorICAgIGlmICghZWMgJiYg
aXM8VGV4dD4ocHJldi5nZXQoKSkpCiAgICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShkb3du
Y2FzdDxUZXh0PigqcHJldiksIGVjKTsKIH0KIApAQCAtNjQyLDcgKzY0Miw3IEBAIEVsZW1lbnQq
IEhUTUxFbGVtZW50OjppbnNlcnRBZGphY2VudEVsZW1lbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwg
RWxlbWVudCogbmV3Q2hpCiAgICAgfQogCiAgICAgTm9kZSogcmV0dXJuVmFsdWUgPSBpbnNlcnRB
ZGphY2VudCh3aGVyZSwgbmV3Q2hpbGQsIGVjKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighcmV0dXJuVmFsdWUgfHwgaXM8RWxlbWVudD4ocmV0dXJuVmFsdWUpKTsKKyAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighcmV0dXJuVmFsdWUgfHwgaXM8RWxl
bWVudD4oKnJldHVyblZhbHVlKSk7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KHJldHVy
blZhbHVlKTsgCiB9CiAKQEAgLTY1MSwxMSArNjUxLDExIEBAIHN0YXRpYyBFbGVtZW50KiBjb250
ZXh0RWxlbWVudEZvckluc2VydGlvbihjb25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50KiBlbGVt
ZW50CiB7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHdoZXJlLCAiYmVmb3JlQmVnaW4iKSB8
fCBlcXVhbElnbm9yaW5nQ2FzZSh3aGVyZSwgImFmdGVyRW5kIikpIHsKICAgICAgICAgQ29udGFp
bmVyTm9kZSogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAocGFy
ZW50ICYmICFpczxFbGVtZW50PihwYXJlbnQpKSB7CisgICAgICAgIGlmIChwYXJlbnQgJiYgIWlz
PEVsZW1lbnQ+KCpwYXJlbnQpKSB7CiAgICAgICAgICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9B
TExPV0VEX0VSUjsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFwYXJlbnQgfHwgaXM8RWxlbWVu
dD4ocGFyZW50KSk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFw
YXJlbnQgfHwgaXM8RWxlbWVudD4oKnBhcmVudCkpOwogICAgICAgICByZXR1cm4gZG93bmNhc3Q8
RWxlbWVudD4ocGFyZW50KTsKICAgICB9CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHdoZXJl
LCAiYWZ0ZXJCZWdpbiIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHdoZXJlLCAiYmVmb3JlRW5kIikp
CkBAIC05MzQsMTMgKzkzNCwxMyBAQCBUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rp
b25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkgYwogICAgIHdoaWxl
IChub2RlKSB7CiAgICAgICAgIC8vIFNraXAgYmRpLCBzY3JpcHQsIHN0eWxlIGFuZCB0ZXh0IGZv
cm0gY29udHJvbHMuCiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShub2RlLT5ub2RlTmFt
ZSgpLCAiYmRpIikgfHwgbm9kZS0+aGFzVGFnTmFtZShzY3JpcHRUYWcpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoc3R5bGVUYWcpIAotICAgICAgICAgICAgfHwgKGlzPEVsZW1lbnQ+KG5vZGUpICYmIGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1RleHRGb3JtQ29udHJvbCgpKSkgeworICAgICAgICAg
ICAgfHwgKGlzPEVsZW1lbnQ+KCpub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNU
ZXh0Rm9ybUNvbnRyb2woKSkpIHsKICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0aGlzKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gU2tpcCBlbGVtZW50cyB3aXRoIHZhbGlkIGRpciBhdHRy
aWJ1dGUKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChpczxF
bGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBkaXJBdHRyaWJ1dGVW
YWx1ZSA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKGRpckF0dHIp
OwogICAgICAgICAgICAgaWYgKGlzTFRST3JSVExJZ25vcmluZ0Nhc2UoZGlyQXR0cmlidXRlVmFs
dWUpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGRpckF0dHJpYnV0ZVZhbHVlLCAiYXV0byIpKSB7CiAg
ICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KG5vZGUsIHRoaXMpOwpAQCAtOTY4LDcgKzk2OCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmRpckF0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBFbGVtZW50
KiBwYXJlbnQgPSBwYXJlbnRFbGVtZW50KCk7CiAKLSAgICBpZiAocGFyZW50ICYmIGlzPEhUTUxF
bGVtZW50PihwYXJlbnQpICYmIHBhcmVudC0+c2VsZk9yQW5jZXN0b3JIYXNEaXJBdXRvQXR0cmli
dXRlKCkpCisgICAgaWYgKGlzPEhUTUxFbGVtZW50PihwYXJlbnQpICYmIHBhcmVudC0+c2VsZk9y
QW5jZXN0b3JIYXNEaXJBdXRvQXR0cmlidXRlKCkpCiAgICAgICAgIGRvd25jYXN0PEhUTUxFbGVt
ZW50PigqcGFyZW50KS5hZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZEF0dHJp
YnV0ZUNoYW5nZWQodGhpcyk7CiAKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJh
dXRvIikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAppbmRleCBjMTkw
MWVlOWE2ZGI4MWNhNTdhODkzNDBhMjEyYzcxMjFhZmQ1NDg3Li4zNDU0MmFkYjQwYjgwOTdmZjRh
YjNhOGU3ZjZlOWM2OTNiOTQwZTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbWJlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxl
bWVudC5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCBib29sIEhUTUxFbWJlZEVsZW1lbnQ6OnJlbmRl
cmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIC8vIElmIG15IHBhcmVu
dCBpcyBhbiA8b2JqZWN0PiBhbmQgaXMgbm90IHNldCB0byB1c2UgZmFsbGJhY2sgY29udGVudCwg
SQogICAgIC8vIHNob3VsZCBiZSBpZ25vcmVkIGFuZCBub3QgZ2V0IGEgcmVuZGVyZXIuCiAgICAg
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwotICAgIGlmIChwYXJlbnQgJiYg
aXM8SFRNTE9iamVjdEVsZW1lbnQ+KHBhcmVudCkpIHsKKyAgICBpZiAoaXM8SFRNTE9iamVjdEVs
ZW1lbnQ+KHBhcmVudCkpIHsKICAgICAgICAgaWYgKCFwYXJlbnQtPnJlbmRlcmVyKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghZG93bmNhc3Q8SFRNTE9iamVjdEVs
ZW1lbnQ+KCpwYXJlbnQpLnVzZUZhbGxiYWNrQ29udGVudCgpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAppbmRleCBhYzM2NTFmMTkzNWY0OTUxYTFjMTVh
ZDljYjdmN2FkNmRiYjdiNGUyLi5mYTMxZTVkMjIzYzVjM2IyY2QyZTdlODc1YjY2Mzc5YTMwNzFl
NjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKQEAg
LTY1LDcgKzY1LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlRnJvbUNvbnRyb2xFbGVtZW50c0FuY2Vz
dG9yRGlzYWJsZWRTdGF0ZVVuZGVyKEhUTUxFbGVtZW50JiBzdGEKICAgICB3aGlsZSAoY29udHJv
bCkgewogICAgICAgICBjb250cm9sLT5zZXRBbmNlc3RvckRpc2FibGVkKGlzRGlzYWJsZWQpOwog
ICAgICAgICAvLyBEb24ndCBjYWxsIHNldEFuY2VzdG9yRGlzYWJsZWQoZmFsc2UpIG9uIGZvcm0g
Y29udG9ybHMgaW5zaWRlIGRpc2FibGVkIGZpZWxkc2V0cy4KLSAgICAgICAgaWYgKGlzPEhUTUxG
aWVsZFNldEVsZW1lbnQ+KGNvbnRyb2wpICYmIGNvbnRyb2wtPmZhc3RIYXNBdHRyaWJ1dGUoZGlz
YWJsZWRBdHRyKSkKKyAgICAgICAgaWYgKGlzPEhUTUxGaWVsZFNldEVsZW1lbnQ+KCpjb250cm9s
KSAmJiBjb250cm9sLT5mYXN0SGFzQXR0cmlidXRlKGRpc2FibGVkQXR0cikpCiAgICAgICAgICAg
ICBjb250cm9sID0gVHJhdmVyc2FsPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+OjpuZXh0U2tpcHBp
bmdDaGlsZHJlbihjb250cm9sLCAmc3RhcnROb2RlKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgY29udHJvbCA9IFRyYXZlcnNhbDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pjo6bmV4dChjb250
cm9sLCAmc3RhcnROb2RlKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBIVE1MRmllbGRTZXRFbGVt
ZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgpCiAgICAgYm9vbCB0aGlzRmllbGRzZXRJc0Rpc2Fi
bGVkID0gZmFzdEhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpOwogICAgIGJvb2wgaGFzU2VlbkZp
cnN0TGVnZW5kRWxlbWVudCA9IGZhbHNlOwogICAgIGZvciAoSFRNTEVsZW1lbnQqIGNvbnRyb2wg
PSBUcmF2ZXJzYWw8SFRNTEVsZW1lbnQ+OjpmaXJzdENoaWxkKHRoaXMpOyBjb250cm9sOyBjb250
cm9sID0gVHJhdmVyc2FsPEhUTUxFbGVtZW50Pjo6bmV4dFNpYmxpbmcoY29udHJvbCkpIHsKLSAg
ICAgICAgaWYgKCFoYXNTZWVuRmlyc3RMZWdlbmRFbGVtZW50ICYmIGlzPEhUTUxMZWdlbmRFbGVt
ZW50Pihjb250cm9sKSkgeworICAgICAgICBpZiAoIWhhc1NlZW5GaXJzdExlZ2VuZEVsZW1lbnQg
JiYgaXM8SFRNTExlZ2VuZEVsZW1lbnQ+KCpjb250cm9sKSkgewogICAgICAgICAgICAgaGFzU2Vl
bkZpcnN0TGVnZW5kRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICB1cGRhdGVGcm9tQ29udHJv
bEVsZW1lbnRzQW5jZXN0b3JEaXNhYmxlZFN0YXRlVW5kZXIoKmNvbnRyb2wsIGZhbHNlIC8qIGlz
RGlzYWJsZWQgKi8pOwogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCAxNWIwM2RkZWM1ZmZlMTQ5NjJi
MjE4MzdiY2I5ODFhYzU5ZjgzNTAzLi5jMmFiMjA5YzM4MGM2MTVkMTZiN2E3MWRjMTM3MWI3MGRl
OGU4MjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKQEAgLTEwMyw5ICsxMDMsOSBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNv
bXB1dGVJc0Rpc2FibGVkQnlGaWVsZHNldEFuY2VzdG9yKCkgY29uc3QKIHsKICAgICBFbGVtZW50
KiBwcmV2aW91c0FuY2VzdG9yID0gbnVsbHB0cjsKICAgICBmb3IgKEVsZW1lbnQqIGFuY2VzdG9y
ID0gcGFyZW50RWxlbWVudCgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50
RWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRmllbGRTZXRFbGVtZW50PihhbmNlc3Rv
cikgJiYgYW5jZXN0b3ItPmZhc3RIYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkgeworICAgICAg
ICBpZiAoaXM8SFRNTEZpZWxkU2V0RWxlbWVudD4oKmFuY2VzdG9yKSAmJiBhbmNlc3Rvci0+ZmFz
dEhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpKSB7CiAgICAgICAgICAgICBIVE1MRmllbGRTZXRF
bGVtZW50JiBmaWVsZFNldEFuY2VzdG9yID0gZG93bmNhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudD4o
KmFuY2VzdG9yKTsKLSAgICAgICAgICAgIGJvb2wgaXNJbkZpcnN0TGVnZW5kID0gcHJldmlvdXNB
bmNlc3RvciAmJiBpczxIVE1MTGVnZW5kRWxlbWVudD4ocHJldmlvdXNBbmNlc3RvcikgJiYgcHJl
dmlvdXNBbmNlc3RvciA9PSBmaWVsZFNldEFuY2VzdG9yLmxlZ2VuZCgpOworICAgICAgICAgICAg
Ym9vbCBpc0luRmlyc3RMZWdlbmQgPSBpczxIVE1MTGVnZW5kRWxlbWVudD4ocHJldmlvdXNBbmNl
c3RvcikgJiYgcHJldmlvdXNBbmNlc3RvciA9PSBmaWVsZFNldEFuY2VzdG9yLmxlZ2VuZCgpOwog
ICAgICAgICAgICAgcmV0dXJuICFpc0luRmlyc3RMZWdlbmQ7CiAgICAgICAgIH0KICAgICAgICAg
cHJldmlvdXNBbmNlc3RvciA9IGFuY2VzdG9yOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyBi
b29sIHNob3VsZEF1dG9mb2N1cyhIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQogCiAg
ICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIHNldCBvZiBoYXNUYWdOYW1lIGNoZWNrcyBiZSByZXBs
YWNlZCBieSBhCiAgICAgLy8gdmlydHVhbCBtZW1iZXIgZnVuY3Rpb24/Ci0gICAgaWYgKGlzPEhU
TUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigq
ZWxlbWVudCkpCiAgICAgICAgIHJldHVybiAhZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVs
ZW1lbnQpLmlzSW5wdXRUeXBlSGlkZGVuKCk7CiAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
c2VsZWN0VGFnKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDAsNyArMjAwLDcgQEAgc3Rh
dGljIGJvb2wgc2hvdWxkQXV0b2ZvY3VzKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGJ1dHRv
blRhZykpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVt
ZW50PihlbGVtZW50KSkKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKmVsZW1lbnQp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTUwOCw3ICs1
MDgsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEF1dG9jYXBpdGFsaXplKGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjplbmNsb3NpbmdGb3JtQ29udHJvbEVsZW1lbnQoTm9kZSogbm9kZSkK
IHsKICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAg
ICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmIChpczxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSk7CiAgICAgfQogICAgIHJldHVybiBudWxs
cHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IGI5YzM3ZTA1
YjBhODRlM2NlNDU5YmRiNGYxOWYyM2UwZjFkMjEzZmUuLjMwZGY2ZTAzODllMjZkM2I2ZTU0NDNh
MmRmOGZhZjAwMDEzMzc2ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6cmVuZGVyZXJJc05l
ZWRlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIEZJWE1FOiBTaG91bGRuJ3Qgd2UgYWxzbyBjaGVjayBmb3IgdGFibGUgY2FwdGlvbiAo
c2VlIHxmb3JtSXNUYWJsZVBhcnR8IGJlbG93KS4KLSAgICBib29sIHBhcmVudElzVGFibGVFbGVt
ZW50UGFydCA9IChwYXJlbnRSZW5kZXJlci0+aXNUYWJsZSgpICYmIGlzPEhUTUxUYWJsZUVsZW1l
bnQ+KHBhcmVudCkpCisgICAgYm9vbCBwYXJlbnRJc1RhYmxlRWxlbWVudFBhcnQgPSAocGFyZW50
UmVuZGVyZXItPmlzVGFibGUoKSAmJiBpczxIVE1MVGFibGVFbGVtZW50PigqcGFyZW50KSkKICAg
ICAgICAgfHwgKHBhcmVudFJlbmRlcmVyLT5pc1RhYmxlUm93KCkgJiYgcGFyZW50LT5oYXNUYWdO
YW1lKHRyVGFnKSkKICAgICAgICAgfHwgKHBhcmVudFJlbmRlcmVyLT5pc1RhYmxlU2VjdGlvbigp
ICYmIHBhcmVudC0+aGFzVGFnTmFtZSh0Ym9keVRhZykpCiAgICAgICAgIHx8IChwYXJlbnRSZW5k
ZXJlci0+aXNSZW5kZXJUYWJsZUNvbCgpICYmIHBhcmVudC0+aGFzVGFnTmFtZShjb2xUYWcpKQpA
QCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5
KEV2ZW50KiBldmVudCwgYm9vbCBmcm9tSW1wbGljaXRTdWJtaXNzaW9uCiAgICAgdW5zaWduZWQg
c3VibWlzc2lvblRyaWdnZXJDb3VudCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCogZm9ybUFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVudHNb
aV07Ci0gICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZm9ybUFzc29jaWF0
ZWRFbGVtZW50KSkKKyAgICAgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZm9y
bUFzc29jaWF0ZWRFbGVtZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50JiBmb3JtRWxlbWVudCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+KCpmb3JtQXNzb2NpYXRlZEVsZW1lbnQpOwogICAgICAgICBpZiAoZm9ybUVsZW1l
bnQuaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpIHsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lk
IEhUTUxGb3JtRWxlbWVudDo6c3VibWl0SW1wbGljaXRseShFdmVudCogZXZlbnQsIGJvb2wgZnJv
bUltcGxpY2l0U3VibWlzc2lvbgogc3RhdGljIGlubGluZSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBzdWJtaXRFbGVtZW50RnJvbUV2ZW50KGNvbnN0IEV2ZW50KiBldmVudCkKIHsKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOyBub2RlOyBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2Rl
KTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMjMsNyArMjIzLDcgQEAgYm9vbCBI
VE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdmVseShFdmVudCogZXZlbnQpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2Np
YXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50PihtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkpCisgICAgICAgIGlmIChpczxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pKQogICAgICAgICAg
ICAgZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRz
W2ldKS5oaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAgfQogCkBAIC0zNDUsNyAr
MzQ1LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wg
YWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgcHJvY2UKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVu
dHNbaV07Ci0gICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oYXNzb2NpYXRl
ZEVsZW1lbnQpKQorICAgICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCphc3Nv
Y2lhdGVkRWxlbWVudCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG5lZWRC
dXR0b25BY3RpdmF0aW9uKSB7CiAgICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50JiBj
b250cm9sID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmFzc29jaWF0ZWRFbGVt
ZW50KTsKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXQoKQog
ICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
bV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pKQorICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKICAgICAgICAgICAgIGRvd25jYXN0
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkucmVzZXQo
KTsKICAgICB9CiAKQEAgLTY5Niw3ICs2OTYsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6d2Fz
VXNlclN1Ym1pdHRlZCgpIGNvbnN0CiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9ybUVs
ZW1lbnQ6OmRlZmF1bHRCdXR0b24oKSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWlz
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKKyAgICAg
ICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNb
aV0pKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQmIGNvbnRyb2wgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbV9hc3NvY2lh
dGVkRWxlbWVudHNbaV0pOwogICAgICAgICBpZiAoY29udHJvbC5pc1N1Y2Nlc3NmdWxTdWJtaXRC
dXR0b24oKSkKQEAgLTgxMCw3ICs4MTAsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZG9jdW1l
bnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKCkKICAgICBBU1NFUlQoIXNob3VsZEF1dG9jb21wbGV0
ZSgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
bV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pKQorICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKICAgICAgICAgICAgIGRvd25jYXN0
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkucmVzZXQo
KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93
bmVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVu
dC5jcHAKaW5kZXggYTVlMzE5NTg0NGUzZGY2OGY5MjU5NDIwYjE3ZjMxZjE5OTgxZTNhNy4uNTIw
NDcyNjQ5NDM1YThmNWJhNzNlNmM2YTNlYTA2MTZkZWFiYTYwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIGJv
b2wgSFRNTEZyYW1lT3duZXJFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZl
bnQqIGV2ZW50KSBjb25zdAogU1ZHRG9jdW1lbnQqIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6Z2V0
U1ZHRG9jdW1lbnQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gY29udGVudERvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50ICYmIGlzPFNWR0Rv
Y3VtZW50Pihkb2N1bWVudCkpCisgICAgaWYgKGlzPFNWR0RvY3VtZW50Pihkb2N1bWVudCkpCiAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdEb2N1bWVudD4oZG9jdW1lbnQpOwogICAgIC8vIFNw
ZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9zdHJ1Y3QuaHRtbCNJbnRlcmZhY2VHZXRTVkdE
b2N1bWVudAogICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAppbmRleCAzNWVhNTJjYmNlY2JjNDk0YzBmZjdlNjdl
NGQzNDU5Y2NkNTlmZDlhLi45YTc5NjE3ZGViM2M2NzM2NTc0OTUwMjBlNTA0NTE1MDcyM2RmZGQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKQEAgLTE4
OSw3ICsxODksOCBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OndpbGxBdHRhY2hSZW5kZXJl
cnMoKQogCiB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogewotICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkgJiYgIW1fbm9yZXNp
emUgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0ZyYW1lU2V0KCkpIHsKKyAgICBBU1NF
UlQoZXZlbnQpOworICAgIGlmIChpczxNb3VzZUV2ZW50PigqZXZlbnQpICYmICFtX25vcmVzaXpl
ICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNGcmFtZVNldCgpKSB7CiAgICAgICAgIGlm
ICh0b1JlbmRlckZyYW1lU2V0KHJlbmRlcmVyKCkpLT51c2VyUmVzaXplKGRvd25jYXN0PE1vdXNl
RXZlbnQ+KGV2ZW50KSkpIHsKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKaW5kZXggZWFmMjY1NGU1OTdiYjBlNDkyYThmODlmMzcyNzE0Y2MxZTU0NDNjYy4uMDQw
YmEwMThiOWRhNjZiN2M2NTI4Yzc1N2Y1YzY2MTNkOWU4Mjc2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMDQ1LDIxICsxMDQ1LDIyIEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6ZGlkRGlzcGF0Y2hDbGlja0V2ZW50KEV2ZW50JiBldmVudCwgY29uc3Qg
SW5wdXRFbGVtZW50Q2xpCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZ0KQogewotICAgIGlmIChpczxNb3VzZUV2ZW50PihldnQpICYmIGV2dC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+
KCpldnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBBU1NFUlQoZXZ0KTsKKyAgICBp
ZiAoaXM8TW91c2VFdmVudD4oKmV2dCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNs
aWNrRXZlbnQgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2dCkuYnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewogICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQ2xpY2tFdmVudChkb3duY2FzdDxN
b3VzZUV2ZW50PihldnQpKTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAg
IGlmIChpczxUb3VjaEV2ZW50PihldnQpKSB7CisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KCpldnQp
KSB7CiAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVUb3VjaEV2ZW50KGRvd25jYXN0PFRvdWNo
RXZlbnQ+KGV2dCkpOwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+
KGV2dCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgeworICAg
IGlmIChpczxLZXlib2FyZEV2ZW50PigqZXZ0KSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkua2V5ZG93bkV2ZW50KSB7CiAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlkb3duRXZl
bnQoZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oZXZ0KSk7CiAgICAgICAgIGlmIChldnQtPmRlZmF1
bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDg2LDcgKzEwODcsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKIAog
ICAgIC8vIFVzZSBrZXkgcHJlc3MgZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBt
b3VzZSBldmVudHMKICAgICAvLyBvbiBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5n
IG9mIHRoZSBrZXkgcHJlc3MgZXZlbnQuCi0gICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2dCkp
IHsKKyAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oKmV2dCkpIHsKICAgICAgICAgS2V5Ym9hcmRF
dmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldnQpOwogICAg
ICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZl
bnQpIHsKICAgICAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlwcmVzc0V2ZW50KCZrZXli
b2FyZEV2ZW50KTsKQEAgLTExMTgsMTAgKzExMTksMTAgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoaXM8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+KGV2dCkpCisgICAgaWYgKGlz
PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PigqZXZ0KSkKICAgICAgICAgbV9pbnB1dFR5cGUtPmhh
bmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KGRvd25jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50PihldnQpKTsKIAotICAgIGlmIChpczxNb3VzZUV2ZW50PihldnQpICYmIGV2dC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAgIGlmIChpczxNb3VzZUV2ZW50
PigqZXZ0KSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsK
ICAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZU1vdXNlRG93bkV2ZW50KGRvd25jYXN0PE1vdXNl
RXZlbnQ+KGV2dCkpOwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMTUyMiw3ICsxNTIzLDcgQEAgSFRNTERhdGFMaXN0RWxlbWVudCog
SFRNTElucHV0RWxlbWVudDo6ZGF0YUxpc3QoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChm
YXN0R2V0QXR0cmlidXRlKGxpc3RBdHRyKSk7Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFpczxIVE1M
RGF0YUxpc3RFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxEYXRhTGlzdEVsZW1l
bnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBkb3du
Y2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxMYWJlbEVsZW1lbnQuY3BwCmluZGV4IDEyNTI2MGZjNjMyZjQyM2Y1ZjU2ZjI4MWM0MmM4YjBh
MjdjYzc3NWEuLjc5MGVjMDA1YTZhZDM3ZmI2NjEwNzRjYjJmMmFjM2NlNDMzNWZlYmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcApAQCAtMzgsNyArMzgsNyBAQCB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgTGFiZWxhYmxlRWxlbWVudCogbm9k
ZUFzU3VwcG9ydGVkTGFiZWxhYmxlRWxlbWVudChOb2RlKiBub2RlKQogewotICAgIGlmICghbm9k
ZSB8fCAhaXM8TGFiZWxhYmxlRWxlbWVudD4oKm5vZGUpKQorICAgIGlmICghaXM8TGFiZWxhYmxl
RWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBMYWJlbGFibGVF
bGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8TGFiZWxhYmxlRWxlbWVudD4oKm5vZGUpOwogICAg
IHJldHVybiBlbGVtZW50LnN1cHBvcnRMYWJlbHMoKSA/ICZlbGVtZW50IDogbnVsbHB0cjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKaW5kZXggOGU5YzgyOTMxYzI0
NGQxOTlhODY3OTM2MzdkZjNkMDYzYTVhZjY2OC4uYTE5N2MyMWUwNTg5Zjc5MjI4MzEzMjZmMDEy
MzAyNDIyMThmZjAzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5k
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5j
cHAKQEAgLTc5LDcgKzc5LDcgQEAgSFRNTEZvcm1FbGVtZW50KiBIVE1MTGVnZW5kRWxlbWVudDo6
dmlydHVhbEZvcm0oKSBjb25zdAogICAgIC8vIGl0cyBwYXJlbnQsIHRoZW4gdGhlIGZvcm0gYXR0
cmlidXRlIG11c3QgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHRoZQogICAgIC8vIGZvcm0gYXR0
cmlidXRlIG9uIHRoYXQgZmllbGRzZXQgZWxlbWVudC4gT3RoZXJ3aXNlLCBpdCBtdXN0IHJldHVy
biBudWxsLgogICAgIENvbnRhaW5lck5vZGUqIGZpZWxkc2V0ID0gcGFyZW50Tm9kZSgpOwotICAg
IGlmICghZmllbGRzZXQgfHwgIWlzPEhUTUxGaWVsZFNldEVsZW1lbnQ+KGZpZWxkc2V0KSkKKyAg
ICBpZiAoIWlzPEhUTUxGaWVsZFNldEVsZW1lbnQ+KGZpZWxkc2V0KSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudD4oKmZp
ZWxkc2V0KS5mb3JtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApp
bmRleCBlOWYwY2Q5MGFkOGVmZTk0OTU4NTMyNDgzYzdkNTdhZGNlMWUwNzBhLi4xYzMwNWEyNjcw
ZTgyMGE4MGM0MWZhODJjMTkyMjVlNjI2ODRlNTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKQEAgLTQ4NzcsNyArNDg3Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKICAgICBtX2lzSW5WaWRlb0Z1bGxzY3JlZW4gPSB0cnVl
OwogICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCiAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
ZW50ZXJlZEZ1bGxzY3JlZW4oKTsKLSAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCkgJiYgaXM8SFRN
TFZpZGVvRWxlbWVudD4odGhpcykpIHsKKyAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCkgJiYgaXM8
SFRNTFZpZGVvRWxlbWVudD4oKnRoaXMpKSB7CiAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQmIGFz
VmlkZW8gPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PigqdGhpcyk7CiAgICAgICAgIGlmIChk
b2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNWaWRlb0Z1bGxzY3Jl
ZW4oKSkgewogICAgICAgICAgICAgZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgp
LmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCZhc1ZpZGVvKTsKQEAgLTQ5MDEs
NyArNDkwMSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZXhpdEZ1bGxzY3JlZW4oKQogICAg
IG1faXNJblZpZGVvRnVsbHNjcmVlbiA9IGZhbHNlOwogICAgIGlmIChoYXNNZWRpYUNvbnRyb2xz
KCkpCiAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+ZXhpdGVkRnVsbHNjcmVlbigpOwotICAgIGlm
IChkb2N1bWVudCgpLnBhZ2UoKSAmJiBpczxIVE1MVmlkZW9FbGVtZW50Pih0aGlzKSkgeworICAg
IGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiBpczxIVE1MVmlkZW9FbGVtZW50PigqdGhpcykpIHsK
ICAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1Bs
YXliYWNrKCp0aGlzKSkKICAgICAgICAgICAgIHBhdXNlSW50ZXJuYWwoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCAxNDkzOGZhZDBjNGM3NjZlZGJm
NzViZjgzMjA3YTkxN2RhMjRiMGQyLi42ODhiNDUwYTM4MzQ2N2YwOTYyYmIxMWU0N2E5M2JlNjk4
OTZmMWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAt
MjMxLDEwICsyMzEsMTAgQEAgYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6aGFzRmFsbGJhY2tDb250
ZW50KCkgY29uc3QKIHsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAvLyBJZ25vcmUgd2hp
dGVzcGFjZS1vbmx5IHRleHQsIGFuZCA8cGFyYW0+IHRhZ3MsIGFueSBvdGhlciBjb250ZW50IGlz
IGZhbGxiYWNrIGNvbnRlbnQuCi0gICAgICAgIGlmIChpczxUZXh0PihjaGlsZCkpIHsKKyAgICAg
ICAgaWYgKGlzPFRleHQ+KCpjaGlsZCkpIHsKICAgICAgICAgICAgIGlmICghZG93bmNhc3Q8VGV4
dD4oKmNoaWxkKS5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWlzPEhUTUxQYXJhbUVsZW1lbnQ+KGNoaWxk
KSkKKyAgICAgICAgfSBlbHNlIGlmICghaXM8SFRNTFBhcmFtRWxlbWVudD4oKmNoaWxkKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC00MjMs
MTIgKzQyMywxMiBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50Ojp1cGRhdGVEb2NOYW1lZEl0ZW0o
KQogICAgIGJvb2wgaXNOYW1lZEl0ZW0gPSB0cnVlOwogICAgIE5vZGUqIGNoaWxkID0gZmlyc3RD
aGlsZCgpOwogICAgIHdoaWxlIChjaGlsZCAmJiBpc05hbWVkSXRlbSkgewotICAgICAgICBpZiAo
aXM8RWxlbWVudD4oY2hpbGQpKSB7CisgICAgICAgIGlmIChpczxFbGVtZW50PigqY2hpbGQpKSB7
CiAgICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKmNoaWxk
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBVc2Ugb2YgaXNSZWNvZ25pemVkVGFnTmFtZSBpcyBh
bG1vc3QgY2VydGFpbmx5IHdyb25nIGhlcmUuCiAgICAgICAgICAgICBpZiAoaXNSZWNvZ25pemVk
VGFnTmFtZShlbGVtZW50LnRhZ1FOYW1lKCkpICYmICFlbGVtZW50Lmhhc1RhZ05hbWUocGFyYW1U
YWcpKQogICAgICAgICAgICAgICAgIGlzTmFtZWRJdGVtID0gZmFsc2U7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaXM8VGV4dD4oY2hpbGQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8VGV4dD4oKmNo
aWxkKSkgewogICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxUZXh0PigqY2hpbGQpLmNvbnRhaW5z
T25seVdoaXRlc3BhY2UoKSkKICAgICAgICAgICAgICAgICBpc05hbWVkSXRlbSA9IGZhbHNlOwog
ICAgICAgICB9IGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQu
Y3BwCmluZGV4IGQ3YmQ2Y2NkYjMzMmVhZGJmZmE1MWU1NDFkMjUxMmQyYzU0NDU5YmIuLmJiMzI3
YjQzNzY1N2E4ZjMyY2Y0MjI3MWY4NmJmM2Y0NTU2ODhiNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcApAQCAtODYsNyArODYsNyBAQCB2b2lkIEhUTUxP
cHRHcm91cEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGNvbnN0IEF0b21pYwogdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpyZWNhbGNTZWxlY3RPcHRp
b25zKCkKIHsKICAgICBDb250YWluZXJOb2RlKiBzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0gICAg
d2hpbGUgKHNlbGVjdCAmJiAhaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KHNlbGVjdCkpCisgICAgd2hp
bGUgKHNlbGVjdCAmJiAhaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KCpzZWxlY3QpKQogICAgICAgICBz
ZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoc2VsZWN0KQogICAgICAgICBk
b3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdCkuc2V0UmVjYWxjTGlzdEl0ZW1zKCk7
CkBAIC0xMDcsNyArMTA3LDcgQEAgU3RyaW5nIEhUTUxPcHRHcm91cEVsZW1lbnQ6Omdyb3VwTGFi
ZWxUZXh0KCkgY29uc3QKIEhUTUxTZWxlY3RFbGVtZW50KiBIVE1MT3B0R3JvdXBFbGVtZW50Ojpv
d25lclNlbGVjdEVsZW1lbnQoKSBjb25zdAogewogICAgIENvbnRhaW5lck5vZGUqIHNlbGVjdCA9
IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmICFpczxIVE1MU2VsZWN0RWxlbWVu
dD4oc2VsZWN0KSkKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFpczxIVE1MU2VsZWN0RWxlbWVudD4o
KnNlbGVjdCkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIAog
ICAgIGlmICghc2VsZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNw
cAppbmRleCA3NzEzNTg5Y2Y4MGUwZTMyOGU3NGEzNDBjMThkZTEwMmU3MjlkZDhjLi5hNjVhYzhi
MTIzNDUwYzE3YTMxMWIyNjQ0MDc4OGMwMDNkMzI2OGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgSFRNTE9wdGlv
bkVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5nICZ0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykK
IAogICAgIC8vIEhhbmRsZSB0aGUgY29tbW9uIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGVyZSdzIGV4
YWN0bHkgMSBjaGlsZCBub2RlLCBhbmQgaXQncyBhIHRleHQgbm9kZS4KICAgICBOb2RlKiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsKLSAgICBpZiAoY2hpbGQgJiYgaXM8VGV4dD4oY2hpbGQpICYmICFj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICBpZiAoaXM8VGV4dD4oY2hpbGQpICYmICFjaGlsZC0+
bmV4dFNpYmxpbmcoKSkKICAgICAgICAgZG93bmNhc3Q8VGV4dD4oKmNoaWxkKS5zZXREYXRhKHRl
eHQsIGVjKTsKICAgICBlbHNlIHsKICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKQEAgLTE2MCw3
ICsxNjAsNyBAQCBpbnQgSFRNTE9wdGlvbkVsZW1lbnQ6OmluZGV4KCkgY29uc3QKICAgICBjb25z
dCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBzZWxlY3RFbGVtZW50LT5saXN0SXRlbXMo
KTsKICAgICBzaXplX3QgbGVuZ3RoID0gaXRlbXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVu
dD4oaXRlbXNbaV0pKQorICAgICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNb
aV0pKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChpdGVtc1tpXSA9PSB0aGlz
KQogICAgICAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZv
aWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYg
Y2hhbmdlKQogSFRNTERhdGFMaXN0RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyRGF0
YUxpc3RFbGVtZW50KCkgY29uc3QKIHsKICAgICBmb3IgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9
IHBhcmVudE5vZGUoKTsgcGFyZW50IDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsK
LSAgICAgICAgaWYgKGlzPEhUTUxEYXRhTGlzdEVsZW1lbnQ+KHBhcmVudCkpCisgICAgICAgIGlm
IChpczxIVE1MRGF0YUxpc3RFbGVtZW50PigqcGFyZW50KSkKICAgICAgICAgICAgIHJldHVybiBk
b3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihwYXJlbnQpOwogICAgIH0KICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTI2Nyw3ICsyNjcsNyBAQCBIVE1MRGF0YUxpc3RFbGVtZW50KiBIVE1MT3B0
aW9uRWxlbWVudDo6b3duZXJEYXRhTGlzdEVsZW1lbnQoKSBjb25zdAogSFRNTFNlbGVjdEVsZW1l
bnQqIEhUTUxPcHRpb25FbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQoKSBjb25zdAogewogICAg
IENvbnRhaW5lck5vZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0
ICYmICFpczxIVE1MU2VsZWN0RWxlbWVudD4oc2VsZWN0KSkKKyAgICB3aGlsZSAoc2VsZWN0ICYm
ICFpczxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdCkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVj
dC0+cGFyZW50Tm9kZSgpOwogCiAgICAgaWYgKCFzZWxlY3QpCkBAIC0zMDIsNyArMzAyLDcgQEAg
dm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6d2lsbFJlc2V0Q29tcHV0ZWRTdHlsZSgpCiBTdHJpbmcg
SFRNTE9wdGlvbkVsZW1lbnQ6OnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKSBjb25z
dAogewogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAo
cGFyZW50ICYmIGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KHBhcmVudCkpCisgICAgaWYgKGlzPEhU
TUxPcHRHcm91cEVsZW1lbnQ+KHBhcmVudCkpCiAgICAgICAgIHJldHVybiAiICAgICIgKyB0ZXh0
KCk7CiAgICAgcmV0dXJuIHRleHQoKTsKIH0KQEAgLTMxMiw3ICszMTIsNyBAQCBib29sIEhUTUxP
cHRpb25FbGVtZW50Ojppc0Rpc2FibGVkRm9ybUNvbnRyb2woKSBjb25zdAogICAgIGlmIChvd25F
bGVtZW50RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIXBhcmVu
dE5vZGUoKSB8fCAhaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4ocGFyZW50Tm9kZSgpKSkKKyAgICBp
ZiAoIWlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50PigqcGFy
ZW50Tm9kZSgpKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKQEAgLTMzOCwxMCArMzM4LDEwIEBA
IFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCgpIGNvbnN0
CiB7CiAgICAgU3RyaW5nQnVpbGRlciB0ZXh0OwogICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0
Q2hpbGQoKTsgbm9kZTsgKSB7Ci0gICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkKKyAgICAgICAg
aWYgKGlzPFRleHQ+KCpub2RlKSkKICAgICAgICAgICAgIHRleHQuYXBwZW5kKG5vZGUtPm5vZGVW
YWx1ZSgpKTsKICAgICAgICAgLy8gVGV4dCBub2RlcyBpbnNpZGUgc2NyaXB0IGVsZW1lbnRzIGFy
ZSBub3QgcGFydCBvZiB0aGUgb3B0aW9uIHRleHQuCi0gICAgICAgIGlmIChpczxFbGVtZW50Pihu
b2RlKSAmJiB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUp
KSkKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSAmJiB0b1NjcmlwdEVsZW1lbnRJZlBv
c3NpYmxlKGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSkKICAgICAgICAgICAgIG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0aGlzKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAppbmRleCAz
Yjg2ODg0OWYzMzQzYzdmNWMzM2FmN2U2Y2FkN2FlYzgxMzJhYWNiLi4wNjM2MTJmZGVlNjU0NjMz
NmVlNzRkNjM1OGMyZmI2NzAwYWVjMjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFBsdWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgdm9pZCBh
ZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4oSFRNTFBsdWdJbkltYWdl
RWxlbWVudExpcwogewogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IGNvbGxlY3Rp
b24tPmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGNv
bGxlY3Rpb24tPml0ZW0oaSk7Ci0gICAgICAgIGlmIChpczxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
Pihub2RlKSkgeworICAgICAgICBpZiAoaXM8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oKm5vZGUp
KSB7CiAgICAgICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgICAg
ICBjb25zdCBVUkwmIGxvYWRlZFVSTCA9IHBsdWdJbkltYWdlRWxlbWVudC5sb2FkZWRVcmwoKTsK
ICAgICAgICAgICAgIFN0cmluZyBvdGhlck1pbWVUeXBlID0gcGx1Z0luSW1hZ2VFbGVtZW50Lmxv
YWRlZE1pbWVUeXBlKCk7CkBAIC03NDcsNyArNzQ3LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBSZW5kZXJF
bGVtZW50KiByID0gcmVuZGVyZXIoKTsKICAgICBpZiAociAmJiByLT5pc0VtYmVkZGVkT2JqZWN0
KCkpIHsKLSAgICAgICAgaWYgKGRpc3BsYXlTdGF0ZSgpID09IFdhaXRpbmdGb3JTbmFwc2hvdCAm
JiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Y2xpY2tFdmVudCkgeworICAgICAgICBpZiAoZGlzcGxheVN0YXRlKCkgPT0gV2FpdGluZ0ZvclNu
YXBzaG90ICYmIGlzPE1vdXNlRXZlbnQ+KCpldmVudCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVu
dCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CiAgICAgICAgICAgICBpZiAobW91c2VF
dmVudC5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgICAgICAgICAgdXNlckRpZENs
aWNrU25hcHNob3QoJm1vdXNlRXZlbnQsIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
Y3JpcHRFbGVtZW50LmNwcAppbmRleCAxYzI3NWMxMTE2MGQ5ZTUwZTk4MmQzNzY1MTg2MDZkODg2
OTEzMWE2Li41NWYxZWYzZTUwNzVkMzI1YTBjYzNkYjZhMTMzMmU3NzNlNDIzZDdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcApAQCAtODEsNyArODEsNyBAQCB2
b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7CiAg
ICAgUmVmPEhUTUxTY3JpcHRFbGVtZW50PiBwcm90ZWN0RnJvbU11dGF0aW9uRXZlbnRzKCp0aGlz
KTsKIAotICAgIGlmIChoYXNPbmVDaGlsZCgpICYmIGlzPFRleHQ+KGZpcnN0Q2hpbGQoKSkpIHsK
KyAgICBpZiAoaGFzT25lQ2hpbGQoKSAmJiBpczxUZXh0PigqZmlyc3RDaGlsZCgpKSkgewogICAg
ICAgICBkb3duY2FzdDxUZXh0PigqZmlyc3RDaGlsZCgpKS5zZXREYXRhKHZhbHVlLCBJR05PUkVf
RVhDRVBUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5jcHAKaW5kZXggZjk2NDhkYjk4ZDE5YmEzMDFlNDU1NjcxNjU0M2Uz
MGI5OWI1NWM3OC4uYzRkMTI2NWU3NDU5MzVhZWMwYzA0MWY5MmM5NjM3NTIwNGIwYmZkMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKQEAgLTUyMSw3ICs1MjEs
NyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om5leHRWYWxpZEluZGV4KGludCBsaXN0SW5kZXgs
IFNraXBEaXJlY3Rpb24gZGlyZWN0aW9uLCBpbgogICAgIGludCBzaXplID0gbGlzdEl0ZW1zLnNp
emUoKTsKICAgICBmb3IgKGxpc3RJbmRleCArPSBkaXJlY3Rpb247IGxpc3RJbmRleCA+PSAwICYm
IGxpc3RJbmRleCA8IHNpemU7IGxpc3RJbmRleCArPSBkaXJlY3Rpb24pIHsKICAgICAgICAgLS1z
a2lwOwotICAgICAgICBpZiAoIWxpc3RJdGVtc1tsaXN0SW5kZXhdLT5pc0Rpc2FibGVkRm9ybUNv
bnRyb2woKSAmJiBpczxIVE1MT3B0aW9uRWxlbWVudD4obGlzdEl0ZW1zW2xpc3RJbmRleF0pKSB7
CisgICAgICAgIGlmICghbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmlzRGlzYWJsZWRGb3JtQ29udHJv
bCgpICYmIGlzPEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1zW2xpc3RJbmRleF0pKSB7CiAg
ICAgICAgICAgICBsYXN0R29vZEluZGV4ID0gbGlzdEluZGV4OwogICAgICAgICAgICAgaWYgKHNr
aXAgPD0gMCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTYwNSw3ICs2MDUsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbigpCiAgICAgY29uc3QgVmVjdG9y
PEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVt
ZW50ID0gaXRlbXNbaV07Ci0gICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmFwcGVuZChp
czxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KGVsZW1lbnQpLT5zZWxlY3RlZCgpKTsKKyAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rp
b24uYXBwZW5kKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKQEAgLTYy
MCw3ICs2MjAsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25B
bmNob3JJbmRleChpbnQgaW5kZXgpCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07Ci0g
ICAgICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzPEhUTUxPcHRp
b25FbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVu
dCktPnNlbGVjdGVkKCkpOworICAgICAgICBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9u
LmFwcGVuZChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxP
cHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSk7CiAgICAgfQogfQogCkBAIC02NDQs
NyArNjQ0LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbGVjdGlv
bihib29sIGRlc2VsZWN0T3RoZXJPcHRpb25zKQogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVu
dCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
dGVtcy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1z
W2ldOwotICAgICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSB8fCBkb3du
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgp
KQorICAgICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgfHwgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChpID49IHN0YXJ0ICYmIGkgPD0g
ZW5kKQpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hP
bkNoYW5nZSgpCiAgICAgYm9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQq
IGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzPEhUTUxPcHRp
b25FbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpLnNlbGVjdGVkKCk7CisgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBpczxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCku
c2VsZWN0ZWQoKTsKICAgICAgICAgaWYgKHNlbGVjdGVkICE9IG1fbGFzdE9uQ2hhbmdlU2VsZWN0
aW9uW2ldKQogICAgICAgICAgICAgZmlyZU9uQ2hhbmdlID0gdHJ1ZTsKICAgICAgICAgbV9sYXN0
T25DaGFuZ2VTZWxlY3Rpb25baV0gPSBzZWxlY3RlZDsKQEAgLTc4MSwyOCArNzgxLDI4IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyhib29sIHVwZGF0ZVNlbGVjdGVk
U3RhdGVzKSBjb25zdAogICAgIEhUTUxPcHRpb25FbGVtZW50KiBmb3VuZFNlbGVjdGVkID0gMDsK
ICAgICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwogICAgIGZvciAoRWxlbWVu
dCogY3VycmVudEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsg
Y3VycmVudEVsZW1lbnQ7ICkgewotICAgICAgICBpZiAoIWN1cnJlbnRFbGVtZW50LT5pc0hUTUxF
bGVtZW50KCkpIHsKKyAgICAgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oKmN1cnJlbnRFbGVtZW50
KSkgewogICAgICAgICAgICAgY3VycmVudEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0
U2tpcHBpbmdDaGlsZHJlbihjdXJyZW50RWxlbWVudCwgdGhpcyk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQotICAgICAgICBIVE1MRWxlbWVudCogY3VycmVudCA9IGRvd25jYXN0
PEhUTUxFbGVtZW50PihjdXJyZW50RWxlbWVudCk7CisgICAgICAgIEhUTUxFbGVtZW50JiBjdXJy
ZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpjdXJyZW50RWxlbWVudCk7CiAKICAgICAgICAg
Ly8gb3B0Z3JvdXAgdGFncyBtYXkgbm90IG5lc3QuIEhvd2V2ZXIsIGJvdGggRmlyZUZveCBhbmQg
SUUgd2lsbAogICAgICAgICAvLyBmbGF0dGVuIHRoZSB0cmVlIGF1dG9tYXRpY2FsbHksIHNvIHdl
IGZvbGxvdyBzdWl0LgogICAgICAgICAvLyAoaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9p
bnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuNikKICAgICAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVs
ZW1lbnQ+KGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVu
dCk7Ci0gICAgICAgICAgICBpZiAoRWxlbWVudCogbmV4dEVsZW1lbnQgPSBFbGVtZW50VHJhdmVy
c2FsOjpmaXJzdFdpdGhpbihjdXJyZW50KSkgeworICAgICAgICAgICAgbV9saXN0SXRlbXMuYXBw
ZW5kKCZjdXJyZW50KTsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBuZXh0RWxlbWVudCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKCZjdXJyZW50KSkgewogICAgICAgICAgICAgICAg
IGN1cnJlbnRFbGVtZW50ID0gbmV4dEVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVs
ZW1lbnQ+KGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVu
dCk7CisgICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoJmN1cnJlbnQpOwogCiAgICAgICAg
ICAgICBpZiAodXBkYXRlU2VsZWN0ZWRTdGF0ZXMgJiYgIW1fbXVsdGlwbGUpIHsKLSAgICAgICAg
ICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0
aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGN1cnJlbnQpOwogICAgICAgICAgICAg
ICAgIGlmICghZmlyc3RPcHRpb24pCiAgICAgICAgICAgICAgICAgICAgIGZpcnN0T3B0aW9uID0g
Jm9wdGlvbjsKICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLnNlbGVjdGVkKCkpIHsKQEAgLTgx
Niw4ICs4MTYsOCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMoYm9v
bCB1cGRhdGVTZWxlY3RlZFN0YXRlcykgY29uc3QKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKGhyVGFnKSkKLSAgICAgICAgICAgIG1f
bGlzdEl0ZW1zLmFwcGVuZChjdXJyZW50KTsKKyAgICAgICAgaWYgKGN1cnJlbnQuaGFzVGFnTmFt
ZShoclRhZykpCisgICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoJmN1cnJlbnQpOwogCiAg
ICAgICAgIC8vIEluIGNvbmZvcm1pbmcgSFRNTCBjb2RlLCBvbmx5IDxvcHRncm91cD4gYW5kIDxv
cHRpb24+IHdpbGwgYmUgZm91bmQKICAgICAgICAgLy8gd2l0aGluIGEgPHNlbGVjdD4uIFdlIGNh
bGwgTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4gc28gdGhhdCB3ZSBvbmx5IHN0
ZXAKQEAgLTg0MCw3ICs4NDAsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5k
ZXgoKSBjb25zdAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJ
dGVtcygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKGlz
PEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkgeworICAgICAgICBpZiAoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgaWYgKGRvd25jYXN0PEhUTUxPcHRp
b25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CiAgICAgICAgICAgICArK2luZGV4OwpAQCAtODc2LDcgKzg3Niw3IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnNlbGVjdE9wdGlvbihpbnQgb3B0aW9uSW5kZXgsIFNlbGVjdE9wdGlv
bkZsYWdzIGZsYWdzKQogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbnVsbHB0cjsKICAgICBp
ZiAobGlzdEluZGV4ID49IDApIHsKICAgICAgICAgZWxlbWVudCA9IGl0ZW1zW2xpc3RJbmRleF07
Ci0gICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAg
aWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgIGlmICht
X2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4IDwgMCB8fCBzaG91bGREZXNlbGVjdCkKICAgICAg
ICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChsaXN0SW5kZXgpOwogICAg
ICAgICAgICAgaWYgKG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXggPCAwIHx8IHNob3VsZERlc2Vs
ZWN0KQpAQCAtOTE4LDcgKzkxOCw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uVG9M
aXN0SW5kZXgoaW50IG9wdGlvbkluZGV4KSBjb25zdAogCiAgICAgaW50IG9wdGlvbkluZGV4MiA9
IC0xOwogICAgIGZvciAoaW50IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3RTaXplOyAr
K2xpc3RJbmRleCkgewotICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGl0ZW1zW2xp
c3RJbmRleF0pKSB7CisgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2xp
c3RJbmRleF0pKSB7CiAgICAgICAgICAgICArK29wdGlvbkluZGV4MjsKICAgICAgICAgICAgIGlm
IChvcHRpb25JbmRleDIgPT0gb3B0aW9uSW5kZXgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxp
c3RJbmRleDsKQEAgLTkzMSwxMyArOTMxLDEzIEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0
aW9uVG9MaXN0SW5kZXgoaW50IG9wdGlvbkluZGV4KSBjb25zdAogaW50IEhUTUxTZWxlY3RFbGVt
ZW50OjpsaXN0VG9PcHRpb25JbmRleChpbnQgbGlzdEluZGV4KSBjb25zdAogewogICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwotICAgIGlmIChsaXN0
SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUoKSkg
fHwgIWlzPEhUTUxPcHRpb25FbGVtZW50PihpdGVtc1tsaXN0SW5kZXhdKSkKKyAgICBpZiAobGlz
dEluZGV4IDwgMCB8fCBsaXN0SW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihpdGVtcy5zaXplKCkp
IHx8ICFpczxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2xpc3RJbmRleF0pKQogICAgICAgICBy
ZXR1cm4gLTE7CiAKICAgICAvLyBBY3R1YWwgaW5kZXggb2Ygb3B0aW9uIG5vdCBjb3VudGluZyBP
UFRHUk9VUCBlbnRyaWVzIHRoYXQgbWF5IGJlIGluIGxpc3QuCiAgICAgaW50IG9wdGlvbkluZGV4
ID0gMDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RJbmRleDsgKytpKSB7Ci0gICAgICAg
IGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbXNbaV0pKQorICAgICAgICBpZiAoaXM8SFRN
TE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSkpCiAgICAgICAgICAgICArK29wdGlvbkluZGV4Owog
ICAgIH0KIApAQCAtOTY4LDcgKzk2OCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2Vs
ZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbihIVE1MRWxlbWVudCogZXhjbHVkZUVsZW1lCiAgICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07Ci0gICAgICAgIGlmIChlbGVtZW50ICE9IGV4Y2x1
ZGVFbGVtZW50ICYmIGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgaWYg
KGVsZW1lbnQgIT0gZXhjbHVkZUVsZW1lbnQgJiYgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVt
ZW50KSkKICAgICAgICAgICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCku
c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgfQogfQpAQCAtOTc5LDcgKzk3OSw3IEBAIEZv
cm1Db250cm9sU3RhdGUgSFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRlKCkg
Y29uc3QKICAgICBzaXplX3QgbGVuZ3RoID0gaXRlbXMuc2l6ZSgpOwogICAgIEZvcm1Db250cm9s
U3RhdGUgc3RhdGU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGl0ZW1zW2ldKSkKKyAgICAgICAg
aWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KCppdGVtc1tpXSk7CiAgICAgICAgIGlmICghb3B0aW9uLnNlbGVjdGVkKCkp
CkBAIC05OTYsNyArOTk2LDcgQEAgc2l6ZV90IEhUTUxTZWxlY3RFbGVtZW50OjpzZWFyY2hPcHRp
b25zRm9yVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgc2l6ZV90IGxpc3QKICAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBzaXplX3QgbG9v
cEVuZEluZGV4ID0gc3RkOjptaW4oaXRlbXMuc2l6ZSgpLCBsaXN0SW5kZXhFbmQpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSBsaXN0SW5kZXhTdGFydDsgaSA8IGxvb3BFbmRJbmRleDsgKytpKSB7Ci0g
ICAgICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYg
KCFpczxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBpZiAoZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSkudmFs
dWUoKSA9PSB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBpOwpAQCAtMTAxNCw3ICsxMDE0LDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3Qg
Rm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaXRlbXNTaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxIVE1MT3B0
aW9uRWxlbWVudD4oaXRlbXNbaV0pKQorICAgICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50
PigqaXRlbXNbaV0pKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqaXRlbXNbaV0pLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAg
IH0KQEAgLTEwNjEsNyArMTA2MSw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZv
cm1EYXRhKEZvcm1EYXRhTGlzdCYgbGlzdCwgYm9vbCkKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVu
dCA9IGl0ZW1zW2ldOwotICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQp
ICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSAmJiAh
ZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRy
b2woKSkgeworICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBk
b3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkgJiYgIWRvd25j
YXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkp
IHsKICAgICAgICAgICAgIGxpc3QuYXBwZW5kRGF0YShuYW1lLCBkb3duY2FzdDxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpLnZhbHVlKCkpOwogICAgICAgICAgICAgc3VjY2Vzc2Z1bCA9IHRy
dWU7CiAgICAgICAgIH0KQEAgLTEwODEsNyArMTA4MSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnJlc2V0KCkKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0
SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgaWYg
KCFpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgIGlmICghaXM8SFRNTE9w
dGlvbkVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
KmVsZW1lbnQpOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBSZWZQdHI8UmVu
ZGVyVGhlbWU+IHJlbmRlclRoZW1lID0gcGFnZSA/ICZwYWdlLT50aGVtZSgpIDogUmVuZGVyVGhl
bWU6OmRlZmF1bHRUaGVtZSgpOwogCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmtleWRvd25FdmVudCkgewotICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50
KSkKKyAgICAgICAgaWYgKCFpczxLZXlib2FyZEV2ZW50PigqZXZlbnQpKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2Fz
dDxLZXlib2FyZEV2ZW50PigqZXZlbnQpOwpAQCAtMTE5OSw3ICsxMTk5LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
ICAgICAvLyBVc2Uga2V5IHByZXNzIGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQg
bW91c2UgZXZlbnRzCiAgICAgLy8gb24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGlu
ZyBvZiB0aGUga2V5IHByZXNzIGV2ZW50LgogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4o
ZXZlbnQpKQorICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KCpldmVudCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRv
d25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CkBAIC0xMjU4LDcgKzEyNTgsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAg
IH0KIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVu
dCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50
KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KCpldmVudCkgJiYgZG93
bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAg
ICAgIGZvY3VzKCk7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgaWYgKHJlbmRlcmVyKCkg
JiYgcmVuZGVyZXIoKS0+aXNNZW51TGlzdCgpKSB7CkBAIC0xMjk5LDcgKzEyOTksNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVTZWxlY3RlZFN0YXRlKGludCBsaXN0SW5kZXgsIGJv
b2wgbXVsdGksIGJvb2wgc2hpZgogICAgIGJvb2wgbXVsdGlTZWxlY3QgPSBtX211bHRpcGxlICYm
IG11bHRpICYmICFzaGlmdDsKIAogICAgIEhUTUxFbGVtZW50KiBjbGlja2VkRWxlbWVudCA9IGxp
c3RJdGVtcygpW2xpc3RJbmRleF07Ci0gICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihjbGlj
a2VkRWxlbWVudCkpIHsKKyAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxl
bWVudCkpIHsKICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIGFuIGFjdGl2ZSBzZWxl
Y3Rpb24gKGxpa2UgZHVyaW5nIGRyYWcKICAgICAgICAgLy8gc2VsZWN0aW9uKSwgc2hvdWxkIHNl
bGVjdCBvciBkZXNlbGVjdC4KICAgICAgICAgaWYgKGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50
PigqY2xpY2tlZEVsZW1lbnQpLnNlbGVjdGVkKCkgJiYgbXVsdGlTZWxlY3QpCkBAIC0xMzIwLDcg
KzEzMjAsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVTZWxlY3RlZFN0YXRlKGlu
dCBsaXN0SW5kZXgsIGJvb2wgbXVsdGksIGJvb2wgc2hpZgogICAgICAgICBzZXRBY3RpdmVTZWxl
Y3Rpb25BbmNob3JJbmRleChzZWxlY3RlZEluZGV4KCkpOwogCiAgICAgLy8gU2V0IHRoZSBzZWxl
Y3Rpb24gc3RhdGUgb2YgdGhlIGNsaWNrZWQgb3B0aW9uLgotICAgIGlmIChpczxIVE1MT3B0aW9u
RWxlbWVudD4oY2xpY2tlZEVsZW1lbnQpICYmICFkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
KmNsaWNrZWRFbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoaXM8SFRN
TE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkgJiYgIWRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqY2xpY2tlZEVsZW1lbnQpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAg
ICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmNsaWNrZWRFbGVtZW50KS5zZXRTZWxlY3Rl
ZFN0YXRlKHRydWUpOwogCiAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIHNlbGVjdGVkSW5kZXgoKSBm
b3IgdGhlIHByZXZpb3VzIGluaXRpYWxpemF0aW9uLCBvciBJZgpAQCAtMTMzOCw3ICsxMzM4LDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogewogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMg
PSB0aGlzLT5saXN0SXRlbXMoKTsKIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8
TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZl
bnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBM
ZWZ0QnV0dG9uKSB7CiAgICAgICAgIGZvY3VzKCk7CiAgICAgICAgIC8vIENhbGxpbmcgZm9jdXMo
KSBtYXkgcmVtb3ZlIG9yIGNoYW5nZSBvdXIgcmVuZGVyZXIsIGluIHdoaWNoIGNhc2Ugd2UgZG9u
J3Qgd2FudCB0byBoYW5kbGUgdGhlIGV2ZW50IGZ1cnRoZXIuCiAgICAgICAgIGlmICghcmVuZGVy
ZXIoKSB8fCAhcmVuZGVyZXIoKS0+aXNMaXN0Qm94KCkpCkBAIC0xMzYxLDcgKzEzNjEsNyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCiAKICAgICAgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmICF0b1JlbmRlckJveChyZW5k
ZXJlcigpKS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpIHsKKyAgICB9IGVs
c2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50ICYmIGlz
PE1vdXNlRXZlbnQ+KCpldmVudCkgJiYgIXRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jYW5CZVNj
cm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkgewogICAgICAgICBNb3VzZUV2ZW50JiBtb3Vz
ZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKICAgICAgICAgaWYgKG1vdXNl
RXZlbnQuYnV0dG9uKCkgIT0gTGVmdEJ1dHRvbiB8fCAhbW91c2VFdmVudC5idXR0b25Eb3duKCkp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMzg1LDcgKzEzODUsNyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAg
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNldXBFdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVu
dD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIoKSkgeworICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYm
IGlzPE1vdXNlRXZlbnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKS0+ZXZlbnRIYW5kbGVy
KCkuYXV0b3Njcm9sbFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIoKSkgewogICAgICAgICAvLyBUaGlz
IGNsaWNrIG9yIGRyYWcgZXZlbnQgd2FzIG5vdCBvdmVyIGFueSBvZiB0aGUgb3B0aW9ucy4KICAg
ICAgICAgaWYgKG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTEzOTQsNyArMTM5NCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxp
c3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgLy8gdGltZXIg
c3RvcHMuCiAgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOwogICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIGlmICghaXM8
S2V5Ym9hcmRFdmVudD4oZXZlbnQpKQorICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KCpl
dmVudCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5
Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CkBAIC0xNDg1LDcg
KzE0ODUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRI
YW5kbGVkKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKLSAgICAgICAgaWYgKCFpczxLZXlib2FyZEV2ZW50
PihldmVudCkpCisgICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRv
d25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CiAgICAgICAgIGludCBrZXlDb2RlID0ga2V5
Ym9hcmRFdmVudC5rZXlDb2RlKCk7CkBAIC0xNTI4LDcgKzE1MjgsNyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBpZiAoZXZl
bnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50ICYmIGlzPEtleWJvYXJkRXZlbnQ+
KGV2ZW50KSkgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVz
c0V2ZW50ICYmIGlzPEtleWJvYXJkRXZlbnQ+KCpldmVudCkpIHsKICAgICAgICAgS2V5Ym9hcmRF
dmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CiAg
ICAgICAgIGlmICgha2V5Ym9hcmRFdmVudC5jdHJsS2V5KCkgJiYgIWtleWJvYXJkRXZlbnQuYWx0
S2V5KCkgJiYgIWtleWJvYXJkRXZlbnQubWV0YUtleSgpICYmIHVfaXNwcmludChrZXlib2FyZEV2
ZW50LmNoYXJDb2RlKCkpKSB7CiAgICAgICAgICAgICB0eXBlQWhlYWRGaW5kKGtleWJvYXJkRXZl
bnQpOwpAQCAtMTU0NCw3ICsxNTQ0LDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2Vs
ZWN0ZWRMaXN0SW5kZXgoKSBjb25zdAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBp
dGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoc2l6ZV90IGkgPSBpdGVtcy5zaXplKCk7IGk7
KSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbLS1pXTsKLSAgICAgICAg
aWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpCisgICAgICAgIGlmIChpczxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVu
dCkuc2VsZWN0ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBpOwogICAgIH0KICAgICByZXR1cm4g
LTE7CkBAIC0xNTY1LDcgKzE1NjUsNyBAQCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlv
bkF0SW5kZXgoaW50IGluZGV4KSBjb25zdAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+
JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIAogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0g
aXRlbXNbaW5kZXhdOwotICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpIHx8
IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250
cm9sKCkpCisgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpIHx8IGRvd25j
YXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiB9
CkBAIC0xNjAxLDcgKzE2MDEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlT
ZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCkKICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9M
aXN0SW5kZXgoaW5kZXgpOwogICAgIGlmIChsaXN0SW5kZXggPj0gMCkgewogICAgICAgICBIVE1M
RWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2xpc3RJbmRleF07Ci0gICAgICAgIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVt
ZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgIGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAgICAg
ICAgICAgIGVsc2UKQEAgLTE2MjMsNyArMTYyMyw3IEBAIHVuc2lnbmVkIEhUTUxTZWxlY3RFbGVt
ZW50OjpsZW5ndGgoKSBjb25zdAogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbXNbaV0p
KQorICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSkpCiAgICAgICAg
ICAgICArK29wdGlvbnM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTb3VyY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVs
ZW1lbnQuY3BwCmluZGV4IDljZTllNWNhMDQ4MDMzZmNkMmQ1YTQ1OWEwZjU2MWM5YzAwMzA0MTgu
LmE0ODhhZTg4NTNkNmIzMDQ4YTg2MDAxODE3MDFjZjc1YzU0NWJlNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCkBAIC01NSw3ICs1NSw3IEBAIE5vZGU6Oklu
c2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTFNvdXJjZUVsZW1lbnQ6Omluc2VydGVkSW50
byhDb250YWluZXJOb2RlCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRp
b25Qb2ludCk7CiAgICAgRWxlbWVudCogcGFyZW50ID0gcGFyZW50RWxlbWVudCgpOwotICAgIGlm
IChwYXJlbnQgJiYgaXM8SFRNTE1lZGlhRWxlbWVudD4ocGFyZW50KSkKKyAgICBpZiAoaXM8SFRN
TE1lZGlhRWxlbWVudD4ocGFyZW50KSkKICAgICAgICAgZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVu
dD4oKnBhcmVudCkuc291cmNlV2FzQWRkZWQodGhpcyk7CiAgICAgcmV0dXJuIEluc2VydGlvbkRv
bmU7CiB9CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6OnJlbW92ZWRG
cm9tKENvbnRhaW5lck5vZGUmIHJlbW92YWxSb290KQogICAgIEVsZW1lbnQqIHBhcmVudCA9IHBh
cmVudEVsZW1lbnQoKTsKICAgICBpZiAoIXBhcmVudCAmJiBpczxFbGVtZW50PihyZW1vdmFsUm9v
dCkpCiAgICAgICAgIHBhcmVudCA9ICZkb3duY2FzdDxFbGVtZW50PihyZW1vdmFsUm9vdCk7Ci0g
ICAgaWYgKHBhcmVudCAmJiBpczxIVE1MTWVkaWFFbGVtZW50PihwYXJlbnQpKQorICAgIGlmIChp
czxIVE1MTWVkaWFFbGVtZW50PihwYXJlbnQpKQogICAgICAgICBkb3duY2FzdDxIVE1MTWVkaWFF
bGVtZW50PigqcGFyZW50KS5zb3VyY2VXYXNSZW1vdmVkKHRoaXMpOwogICAgIEhUTUxFbGVtZW50
OjpyZW1vdmVkRnJvbShyZW1vdmFsUm9vdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
dW1tYXJ5RWxlbWVudC5jcHAKaW5kZXggMTEyZDJmZDM2MjRjMTlkMjg4NDY2NzRkN2M4ODU1NTUz
MTk2MDFjNy4uNzUzYjQxY2UxOTBkODA3YzE2ZTE1MWViOTljZDYzNDdiZTcxODRlOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcApAQCAtMTAyLDcgKzEwMiw4
IEBAIGJvb2wgSFRNTFN1bW1hcnlFbGVtZW50Ojppc01haW5TdW1tYXJ5KCkgY29uc3QKIAogc3Rh
dGljIGJvb2wgaXNDbGlja2FibGVDb250cm9sKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFpczxF
bGVtZW50Pihub2RlKSkKKyAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKCFpczxFbGVtZW50Pigq
bm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93
bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
PihlbGVtZW50KSkKQEAgLTEyNiw3ICsxMjcsNyBAQCB2b2lkIEhUTUxTdW1tYXJ5RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CisgICAg
ICAgIGlmIChpczxLZXlib2FyZEV2ZW50PigqZXZlbnQpKSB7CiAgICAgICAgICAgICBLZXlib2Fy
ZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsK
ICAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
ZG93bkV2ZW50ICYmIGtleWJvYXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7
CiAgICAgICAgICAgICAgICAgc2V0QWN0aXZlKHRydWUsIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKaW5kZXggYzczYzQ3NzJjZmY2MDFjYTE2MmIzZTdjMzkx
OGYxYzRjZjFjN2JmOS4uYTA1NzcxMzk1NDlkZmYzZmUyNzExZTVjM2E2OTdmNWQyZmVmZWE2YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCkBAIC03MCw3ICs3MCw3
IEBAIFBhc3NSZWZQdHI8SFRNTFRhYmxlRWxlbWVudD4gSFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hCiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogSFRN
TFRhYmxlRWxlbWVudDo6Y2FwdGlvbigpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlKiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgaWYgKGlzPEhUTUxUYWJsZUNhcHRpb25FbGVtZW50PihjaGlsZCkpCisgICAgICAgIGlm
IChpczxIVE1MVGFibGVDYXB0aW9uRWxlbWVudD4oKmNoaWxkKSkKICAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudD4oY2hpbGQpOwogICAgIH0KICAgICBy
ZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
UGFydEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVu
dC5jcHAKaW5kZXggYmJkZDg0YmMzN2JhMjhiOGNlODRiYjI1YjRiMzE4YTQ2NDZlNjRkZS4uNjUw
NmI1M2FlMTJiNDhiNTUwODhhYjExOTZiM2NjMGVkYjNiMzlmZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBI
VE1MVGFibGVQYXJ0RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE4KIEhUTUxUYWJsZUVsZW1lbnQqIEhUTUxUYWJsZVBhcnRFbGVtZW50
OjpmaW5kUGFyZW50VGFibGUoKSBjb25zdAogewogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9
IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAocGFyZW50ICYmICFpczxIVE1MVGFibGVFbGVtZW50
PihwYXJlbnQpKQorICAgIHdoaWxlIChwYXJlbnQgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpw
YXJlbnQpKQogICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4ocGFyZW50KTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCmluZGV4IGM2YzRkOWUyYjI3N2ExZjMxNmYw
ODAyZWUzMWYyMDcxOGExZTcwMDAuLjk3YmFhMjA3OTk2MGE4YTAwNjkxNGFjOWQ1ODg5NDY5MmMx
YzAzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcApA
QCAtNjAsNyArNjAsNyBAQCBpbnQgSFRNTFRhYmxlUm93RWxlbWVudDo6cm93SW5kZXgoKSBjb25z
dAogICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiAtMTsKICAgICB0YWJsZSA9IHRhYmxl
LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCF0YWJsZSB8fCAhaXM8SFRNTFRhYmxlRWxlbWVudD4o
dGFibGUpKQorICAgIGlmICghaXM8SFRNTFRhYmxlRWxlbWVudD4odGFibGUpKQogICAgICAgICBy
ZXR1cm4gLTE7CiAKICAgICAvLyBUbyBtYXRjaCBGaXJlZm94LCB0aGUgcm93IGluZGljZXMgd29y
ayBsaWtlIHRoaXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJv
d3NDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxl
Y3Rpb24uY3BwCmluZGV4IDExNjJhYTMyNTUzMTgwMzhhYjBkNzMyYmEwNjMxYTQ0YzlhYjhiNjQu
LmI1OWY5MjY1MWJiMDgwZDE1YTNkY2MyNGM5NmRmOGEwOGJkYmFhZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwCkBAIC05Nyw3ICs5Nyw3
IEBAIEhUTUxUYWJsZVJvd0VsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpyb3dBZnRl
cihIVE1MVGFibGVFbGVtZW50KiB0YWJsZSwKICAgICBlbHNlIGlmIChpc0luU2VjdGlvbigqcHJl
dmlvdXMsIHRib2R5VGFnKSkKICAgICAgICAgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0
U2libGluZyhwcmV2aW91cy0+cGFyZW50Tm9kZSgpKTsKICAgICBmb3IgKDsgY2hpbGQ7IGNoaWxk
ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoY2hpbGQpKSB7Ci0gICAgICAgIGlmIChp
czxIVE1MVGFibGVSb3dFbGVtZW50PihjaGlsZCkpCisgICAgICAgIGlmIChpczxIVE1MVGFibGVS
b3dFbGVtZW50PigqY2hpbGQpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJs
ZVJvd0VsZW1lbnQ+KGNoaWxkKTsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5
VGFnKSkgewogICAgICAgICAgICAgaWYgKGF1dG8gcm93ID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRh
YmxlUm93RWxlbWVudD4oKmNoaWxkKS5maXJzdCgpKQpAQCAtMTMwLDcgKzEzMCw3IEBAIEhUTUxU
YWJsZVJvd0VsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpsYXN0Um93KEhUTUxUYWJs
ZUVsZW1lbnQqIHRhYmxlKQogICAgIH0KIAogICAgIGZvciAoYXV0byogY2hpbGQgPSBFbGVtZW50
VHJhdmVyc2FsOjpsYXN0Q2hpbGQodGFibGUpOyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJhdmVy
c2FsOjpwcmV2aW91c1NpYmxpbmcoY2hpbGQpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MVGFibGVS
b3dFbGVtZW50PihjaGlsZCkpCisgICAgICAgIGlmIChpczxIVE1MVGFibGVSb3dFbGVtZW50Pigq
Y2hpbGQpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+
KGNoaWxkKTsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAg
ICAgICAgICAgaWYgKGF1dG8qIHJvdyA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxUYWJsZVJvd0VsZW1l
bnQ+KCpjaGlsZCkubGFzdCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5jcHAKaW5kZXggMzVmYWUxMmM2NDY2MjU2ZjU4OWY2YjMwOTAzMzIyYmY1ZGI1ZDJkYi4u
NTgzNzYxMGNmNWQ3ZDNjZTU0NTI2ZTM5OGZjNDg2ZGNmMjU1ZTFjYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0yNzAsNyArMjcwLDcgQEAgdm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
IHsKICAgICBpZiAocmVuZGVyZXIoKSAmJiAoZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50
LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFdoZWVsRXZlbnRJ
bnRlcmZhY2VUeXBlIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkp
CiAgICAgICAgIGZvcndhcmRFdmVudChldmVudCk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXIoKSAm
JiBpczxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4oZXZlbnQpKQorICAgIGVsc2UgaWYgKHJlbmRl
cmVyKCkgJiYgaXM8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+KCpldmVudCkpCiAgICAgICAgIGhh
bmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KGRvd25jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50PihldmVudCkpOwogCiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCBkNDU5ZWE3OGRjZWJhMTEzMDhhZTU0YmI5NDZl
MWNmNjU0MjZiZjIwLi4zNGIyODQ3ZTRiZmMyM2U3ODhmMGEyZDM5NDU0ZWE3ZWIwNDQyMTBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmNwcApAQCAtNTYxLDkgKzU2MSw5IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6aW5uZXJUZXh0VmFsdWUoKSBjb25zdAogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAg
ICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlLCBpbm5lclRleHQpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MQlJFbGVtZW50
Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobmV3bGluZUNoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2UgaWYgKGlz
PFRleHQ+KG5vZGUpKQorICAgICAgICBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkpCiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGRvd25jYXN0PFRleHQ+KCpub2RlKS5kYXRhKCkpOwogICAgIH0K
ICAgICByZXR1cm4gZmluaXNoVGV4dChyZXN1bHQpOwpAQCAtNTc5LDcgKzU3OSw3IEBAIHN0YXRp
YyBQb3NpdGlvbiBwb3NpdGlvbkZvckluZGV4KFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCog
aW5uZXJUZXh0LCB1bnNpZ25lCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3Jl
Tm9kZShub2RlKTsKICAgICAgICAgICAgIHJlbWFpbmluZ0NoYXJhY3RlcnNUb01vdmVGb3J3YXJk
LS07CiAgICAgICAgICAgICBsYXN0QnJPclRleHQgPSBub2RlOwotICAgICAgICB9IGVsc2UgaWYg
KGlzPFRleHQ+KG5vZGUpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8VGV4dD4oKm5vZGUpKSB7
CiAgICAgICAgICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwogICAgICAg
ICAgICAgaWYgKHJlbWFpbmluZ0NoYXJhY3RlcnNUb01vdmVGb3J3YXJkIDwgdGV4dC5sZW5ndGgo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oJnRleHQsIHJlbWFpbmluZ0NoYXJh
Y3RlcnNUb01vdmVGb3J3YXJkKTsKQEAgLTYwNywxMyArNjA3LDEzIEBAIHVuc2lnbmVkIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjppbmRleEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBw
YXNzZWRQb3NpCiAgICAgQVNTRVJUKGlubmVyVGV4dC0+Y29udGFpbnMoc3RhcnROb2RlKSk7CiAK
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpwcmV2aW91cyhub2RlLCBpbm5lclRleHQpKSB7Ci0gICAgICAgIGlmIChpczxUZXh0Pihu
b2RlKSkgeworICAgICAgICBpZiAoaXM8VGV4dD4oKm5vZGUpKSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBkb3duY2FzdDxUZXh0Pigqbm9kZSkubGVuZ3RoKCk7CiAgICAgICAgICAg
ICBpZiAobm9kZSA9PSBwYXNzZWRQb3NpdGlvbi5jb250YWluZXJOb2RlKCkpCiAgICAgICAgICAg
ICAgICAgaW5kZXggKz0gc3RkOjptaW48dW5zaWduZWQ+KGxlbmd0aCwgcGFzc2VkUG9zaXRpb24u
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGluZGV4ICs9IGxlbmd0aDsKLSAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MQlJFbGVtZW50
Pihub2RlKSkKKyAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MQlJFbGVtZW50Pigqbm9kZSkpCiAg
ICAgICAgICAgICArK2luZGV4OwogICAgIH0KIApAQCAtNjg1LDkgKzY4NSw5IEBAIFN0cmluZyBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dmFsdWVXaXRoSGFyZExpbmVCcmVha3MoKSBjb25z
dAogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgZm9yIChOb2RlKiBub2RlID0gaW5u
ZXJUZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUsIGlubmVyVGV4dCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KG5vZGUpKQor
ICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChuZXdsaW5lQ2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8VGV4dD4obm9k
ZSkpIHsKKyAgICAgICAgZWxzZSBpZiAoaXM8VGV4dD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBT
dHJpbmcgZGF0YSA9IGRvd25jYXN0PFRleHQ+KCpub2RlKS5kYXRhKCk7CiAgICAgICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBkYXRhLmxlbmd0aCgpOwogICAgICAgICAgICAgdW5zaWduZWQgcG9z
aXRpb24gPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKaW5kZXgg
OGU4MTgyNTAxNGIwMDk4MTRjZGQxYjU2NjM3ZTI2ZmE5ZGYxMmNjZi4uOTQ4NjhkZGUzMmQwMTA2
OWUyYzQ0NmIzNGZjMGYyN2IyYzYyMmIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGl0bGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRs
ZUVsZW1lbnQuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgSFRNTFRpdGxlRWxlbWVudDo6c2V0
VGV4dChjb25zdCBTdHJpbmcgJnZhbHVlKQogewogICAgIFJlZjxIVE1MVGl0bGVFbGVtZW50PiBw
cm90ZWN0RnJvbU11dGF0aW9uRXZlbnRzKCp0aGlzKTsKICAgICAKLSAgICBpZiAoaGFzT25lQ2hp
bGQoKSAmJiBpczxUZXh0PihmaXJzdENoaWxkKCkpKQorICAgIGlmIChoYXNPbmVDaGlsZCgpICYm
IGlzPFRleHQ+KCpmaXJzdENoaWxkKCkpKQogICAgICAgICBkb3duY2FzdDxUZXh0PigqZmlyc3RD
aGlsZCgpKS5zZXREYXRhKHZhbHVlLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBlbHNlIHsKICAg
ICAgICAgLy8gV2UgbWFrZSBhIGNvcHkgaGVyZSBiZWNhdXNlIGVudGl0eSBvZiAidmFsdWUiIGFy
Z3VtZW50IGNhbiBiZSBEb2N1bWVudDo6bV90aXRsZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
cmFja0VsZW1lbnQuY3BwCmluZGV4IDJkMGQxNDIzNWM3MWM5NzRhYTNhZmU0YTg3ZDk0NzJmYjdm
NWIxZDQuLjJjNmU5N2JhNzZjZjYyZDEwNWNmZTk4ZDk0Nzg5NjE3Y2Q2ZjMwZjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcApAQCAtMzQzLDcgKzM0Myw3IEBAIHZv
aWQgSFRNTFRyYWNrRWxlbWVudDo6dGV4dFRyYWNrUmVtb3ZlQ3VlKFRleHRUcmFjayogdHJhY2ss
IFBhc3NSZWZQdHI8VGV4dFRyYWNrCiBIVE1MTWVkaWFFbGVtZW50KiBIVE1MVHJhY2tFbGVtZW50
OjptZWRpYUVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHBhcmVudCA9IHBhcmVudEVs
ZW1lbnQoKTsKLSAgICBpZiAocGFyZW50ICYmIGlzPEhUTUxNZWRpYUVsZW1lbnQ+KHBhcmVudCkp
CisgICAgaWYgKGlzPEhUTUxNZWRpYUVsZW1lbnQ+KHBhcmVudCkpCiAgICAgICAgIHJldHVybiBk
b3duY2FzdDxIVE1MTWVkaWFFbGVtZW50PihwYXJlbnROb2RlKCkpOwogCiAgICAgcmV0dXJuIG51
bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAppbmRleCBjYzliZGM5OTBh
Njg1NmYwYThkNjNiOTFkZWJmNTkxNWFjMWUwZmMxLi4xNzllYzEwODE2NWZhM2JhMWE1MWNhMzFh
YzVkZjZkZjZkZGRjMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9j
dW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKQEAg
LTM5OCw3ICszOTgsNyBAQCB2b2lkIEltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQpCiAgICAgICAgIG1fZG9jdW1lbnQud2lu
ZG93U2l6ZUNoYW5nZWQoKTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5jbGlja0V2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkgeworICAgIGVsc2UgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgaXM8TW91c2VFdmVu
dD4oKmV2ZW50KSkgewogICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8
TW91c2VFdmVudD4oKmV2ZW50KTsKICAgICAgICAgbV9kb2N1bWVudC5pbWFnZUNsaWNrZWQobW91
c2VFdmVudC54KCksIG1vdXNlRXZlbnQueSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlw
ZS5jcHAKaW5kZXggM2IyMjdhYjAwYzQ5ODQ2MTZiYjA4ZjEyNTgyMjMzYzE4NmI3NDQyOC4uYzRi
MzRiMmY5YWZmMGFlYzM4YmY3ZDJkZmMzYWI1ZGNjOTA0NGVmMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmNwcApAQCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQgSW5wdXRUeXBlOjpmb3J3YXJkRXZl
bnQoRXZlbnQqKQogCiBib29sIElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVu
dCogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSAmJiBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50ICYmIGRvd25jYXN0PEtleWJv
YXJkRXZlbnQ+KCpldmVudCkuY2hhckNvZGUoKSA9PSAnXHInOworICAgIHJldHVybiBpczxLZXli
b2FyZEV2ZW50PigqZXZlbnQpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXBy
ZXNzRXZlbnQgJiYgZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KS5jaGFyQ29kZSgpID09
ICdccic7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBJbnB1dFR5cGU6OmZvcm1G
b3JTdWJtaXNzaW9uKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVk
aWFEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRG9jdW1lbnQuY3BwCmlu
ZGV4IDdkYTliYjg0NTBhZWFlNDJmY2Q1M2NlMTI4YmIxMGM2NjA4ZDc0NTEuLmZhYzk1OGVmNTMz
Nzg4YzNmNGViMDZiOWY5ZDhiYWI1NjAzZDcyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURv
Y3VtZW50LmNwcApAQCAtMTczLDcgKzE3Myw3IEBAIHN0YXRpYyBpbmxpbmUgSFRNTFZpZGVvRWxl
bWVudCogZGVzY2VuZGVudFZpZGVvRWxlbWVudChDb250YWluZXJOb2RlJiBub2RlKQogCiBzdGF0
aWMgaW5saW5lIEhUTUxWaWRlb0VsZW1lbnQqIGFuY2VzdG9yVmlkZW9FbGVtZW50KE5vZGUqIG5v
ZGUpCiB7Ci0gICAgd2hpbGUgKG5vZGUgJiYgIWlzPEhUTUxWaWRlb0VsZW1lbnQ+KG5vZGUpKQor
ICAgIHdoaWxlIChub2RlICYmICFpczxIVE1MVmlkZW9FbGVtZW50Pigqbm9kZSkpCiAgICAgICAg
IG5vZGUgPSBub2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CiAKICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4obm9kZSk7CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCB2b2lk
IE1lZGlhRG9jdW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKCFpczxDb250YWluZXJOb2RlPih0YXJnZXROb2RlKSkKKyAg
ICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCp0YXJnZXROb2RlKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIENvbnRhaW5lck5vZGUmIHRhcmdldENvbnRhaW5lciA9IGRvd25jYXN0PENvbnRhaW5lck5v
ZGU+KCp0YXJnZXROb2RlKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
a2V5ZG93bkV2ZW50ICYmIGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkgeworICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgaXM8S2V5Ym9hcmRFdmVu
dD4oKmV2ZW50KSkgewogICAgICAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbyA9IGRlc2NlbmRl
bnRWaWRlb0VsZW1lbnQodGFyZ2V0Q29udGFpbmVyKTsKICAgICAgICAgaWYgKCF2aWRlbykKICAg
ICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9J
bnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5k
ZXggNWY1ZWM3NTQyYmQxODI4MGU3ZGZlNTY1MTQ4MWVhNWNiMTQ0MTUyYi4uZWVhZDEzNDZjYmRk
ZjkxYmZlYjhkMzVhZjM2NGVhMGVkMWJhOWJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lu
cHV0VHlwZS5jcHAKQEAgLTgxLDEwICs4MSwxMCBAQCB2b2lkIFJhZGlvSW5wdXRUeXBlOjpoYW5k
bGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgTm9kZSogbm9kZSA9ICZl
bGVtZW50KCk7CiAgICAgd2hpbGUgKChub2RlID0gKGZvcndhcmQgPyBOb2RlVHJhdmVyc2FsOjpu
ZXh0KG5vZGUpIDogTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSkpKSkgewogICAgICAgICAv
LyBPbmNlIHdlIGVuY291bnRlciBhIGZvcm0gZWxlbWVudCwgd2Uga25vdyB3ZSdyZSB0aHJvdWdo
LgotICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKGlz
PEhUTUxGb3JtRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIC8v
IExvb2sgZm9yIG1vcmUgcmFkaW8gYnV0dG9ucy4KLSAgICAgICAgaWYgKCFpczxIVE1MSW5wdXRF
bGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpOwogICAgICAg
ICBpZiAoaW5wdXRFbGVtZW50LT5mb3JtKCkgIT0gZWxlbWVudCgpLmZvcm0oKSkKQEAgLTEyMiw3
ICsxMjIsNyBAQCBib29sIFJhZGlvSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJv
YXJkRXZlbnQqIGV2ZW50KSBjb25zdAogICAgIC8vIE5ldmVyIGFsbG93IGtleWJvYXJkIHRhYmJp
bmcgdG8gbGVhdmUgeW91IGluIHRoZSBzYW1lIHJhZGlvIGdyb3VwLiAgQWx3YXlzCiAgICAgLy8g
c2tpcCBhbnkgb3RoZXIgZWxlbWVudHMgaW4gdGhlIGdyb3VwLgogICAgIEVsZW1lbnQqIGN1cnJl
bnRGb2N1c2VkTm9kZSA9IGVsZW1lbnQoKS5kb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCk7Ci0g
ICAgaWYgKGN1cnJlbnRGb2N1c2VkTm9kZSAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihjdXJyZW50
Rm9jdXNlZE5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGN1cnJlbnRGb2N1
c2VkTm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgZm9jdXNlZElucHV0ID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmN1cnJlbnRGb2N1c2VkTm9kZSk7CiAgICAgICAgIGlm
IChmb2N1c2VkSW5wdXQuaXNSYWRpb0J1dHRvbigpICYmIGZvY3VzZWRJbnB1dC5mb3JtKCkgPT0g
ZWxlbWVudCgpLmZvcm0oKSAmJiBmb2N1c2VkSW5wdXQubmFtZSgpID09IGVsZW1lbnQoKS5uYW1l
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAKaW5kZXggN2E5ZmUxNDE2YjIzMTQ5YmExNzYwMDhkNjFiZDJiMjZm
NzY1N2JiNS4uMGM4ODkwOGJhOGVjOGViZmI2MWJkZTg1ODc3YzRmNDVmNzZmMzdmMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtMjA2LDcgKzIwNiw3
IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVCbHVyRXZlbnQoKQogCiBib29sIFRl
eHRGaWVsZElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVudCogZXZlbnQpCiB7
Ci0gICAgcmV0dXJuIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVu
dCAmJiBpczxUZXh0RXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxUZXh0RXZlbnQ+KCpldmVudCku
ZGF0YSgpID09ICJcbiIpCisgICAgcmV0dXJuIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS50ZXh0SW5wdXRFdmVudCAmJiBpczxUZXh0RXZlbnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8VGV4
dEV2ZW50PigqZXZlbnQpLmRhdGEoKSA9PSAiXG4iKQogICAgICAgICB8fCBJbnB1dFR5cGU6OnNo
b3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggZDc0YzE0NTQ5NzBl
NTM2ZjcwNzI2YjFiZjVlOTUzZTk0OGM3MGE1MC4uZmY0MDY2ZTNjYTEwMjA4M2ZhMDhkMjg1YWQ3
MGQwMzMzYjBkNDYyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtNjEsOCArNjEsOCBAQCBzdGF0aWMgYm9vbCBoYXNJ
bXBsaWVkRW5kVGFnKGNvbnN0IEhUTUxTdGFja0l0ZW0qIGl0ZW0pCiAgICAgcmV0dXJuIGl0ZW0t
Pmhhc1RhZ05hbWUoZGRUYWcpCiAgICAgICAgIHx8IGl0ZW0tPmhhc1RhZ05hbWUoZHRUYWcpCiAg
ICAgICAgIHx8IGl0ZW0tPmhhc1RhZ05hbWUobGlUYWcpCi0gICAgICAgIHx8IGlzPEhUTUxPcHRp
b25FbGVtZW50PihpdGVtLT5ub2RlKCkpCi0gICAgICAgIHx8IGlzPEhUTUxPcHRHcm91cEVsZW1l
bnQ+KGl0ZW0tPm5vZGUoKSkKKyAgICAgICAgfHwgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVt
LT5ub2RlKCkpCisgICAgICAgIHx8IGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCppdGVtLT5ub2Rl
KCkpCiAgICAgICAgIHx8IGl0ZW0tPmhhc1RhZ05hbWUocFRhZykKICAgICAgICAgfHwgaXRlbS0+
aGFzVGFnTmFtZShyYlRhZykKICAgICAgICAgfHwgaXRlbS0+aGFzVGFnTmFtZShycFRhZykKQEAg
LTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXhlY3V0ZVRhc2soSFRNTENvbnN0
cnVjdGlvblNpdGVUYXNrJiB0YXNrKQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRh
Y2hMYXRlcihDb250YWluZXJOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8Tm9kZT4gcHJwQ2hpbGQs
IGJvb2wgc2VsZkNsb3NpbmcpCiB7Ci0gICAgQVNTRVJUKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93
ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSB8fCAhaXM8RWxlbWVudD4ocHJwQ2hpbGQuZ2V0KCkp
IHx8ICF0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKGRvd25jYXN0PEVsZW1lbnQ+KHBycENoaWxk
LmdldCgpKSkpOworICAgIEFTU0VSVChzY3JpcHRpbmdDb250ZW50SXNBbGxvd2VkKG1fcGFyc2Vy
Q29udGVudFBvbGljeSkgfHwgIWlzPEVsZW1lbnQ+KCpwcnBDaGlsZCkgfHwgIXRvU2NyaXB0RWxl
bWVudElmUG9zc2libGUoZG93bmNhc3Q8RWxlbWVudD4ocHJwQ2hpbGQuZ2V0KCkpKSk7CiAgICAg
QVNTRVJUKHBsdWdpbkNvbnRlbnRJc0FsbG93ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSB8fCAh
cHJwQ2hpbGQtPmlzUGx1Z2luRWxlbWVudCgpKTsKIAogICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
VGFzayB0YXNrKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzazo6SW5zZXJ0KTsKQEAgLTQ1OCw3ICs0
NTgsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keUVsZW1lbnQo
QXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dEhUTUxGb3JtRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBib29sIGlzRGVtb3RlZCkK
IHsKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KHRva2Vu
KTsKLSAgICBBU1NFUlQoaXM8SFRNTEZvcm1FbGVtZW50PihlbGVtZW50LmdldCgpKSk7CisgICAg
QVNTRVJUKGlzPEhUTUxGb3JtRWxlbWVudD4oKmVsZW1lbnQpKTsKICAgICBSZWZQdHI8SFRNTEZv
cm1FbGVtZW50PiBmb3JtID0gc3RhdGljX3BvaW50ZXJfY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGVs
ZW1lbnQucmVsZWFzZSgpKTsKICAgICBpZiAoIWluc2lkZVRlbXBsYXRlRWxlbWVudCgpKQogICAg
ICAgICBtX2Zvcm0gPSBmb3JtOwpAQCAtNTQ3LDcgKzU0Nyw3IEBAIHZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgV2hpdGVz
cGFjZU1vCiAgICAgLy8gZm9yIHBlcmZvcm1hbmNlLCBzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NTg5OD4uCiAKICAgICBOb2RlKiBwcmV2aW91c0NoaWxkID0g
dGFzay5uZXh0Q2hpbGQgPyB0YXNrLm5leHRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiB0YXNr
LnBhcmVudC0+bGFzdENoaWxkKCk7Ci0gICAgaWYgKHByZXZpb3VzQ2hpbGQgJiYgaXM8VGV4dD4o
cHJldmlvdXNDaGlsZCkpIHsKKyAgICBpZiAoaXM8VGV4dD4ocHJldmlvdXNDaGlsZCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IFdlJ3JlIG9ubHkgc3VwcG9zZWQgdG8gYXBwZW5kIHRvIHRoaXMgdGV4
dCBub2RlIGlmIGl0CiAgICAgICAgIC8vIHdhcyB0aGUgbGFzdCB0ZXh0IG5vZGUgaW5zZXJ0ZWQg
YnkgdGhlIHBhcnNlci4KICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigq
cHJldmlvdXNDaGlsZCk7CkBAIC02MTgsNyArNjE4LDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2Vu
LAogaW5saW5lIERvY3VtZW50JiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6b3duZXJEb2N1bWVudEZv
ckN1cnJlbnROb2RlKCkKIHsKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAo
aXM8SFRNTFRlbXBsYXRlRWxlbWVudD4oY3VycmVudE5vZGUoKSkpCisgICAgaWYgKGlzPEhUTUxU
ZW1wbGF0ZUVsZW1lbnQ+KCpjdXJyZW50Tm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCpjdXJyZW50RWxlbWVudCgpKS5jb250ZW50KCktPmRvY3Vt
ZW50KCk7CiAjZW5kaWYKICAgICByZXR1cm4gY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQoKTsKQEAg
LTcyNyw3ICs3MjcsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVyU2l0
ZShIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smIHRhc2spCiAgICAgICAgIC8vIGFuZCBpbnN0ZWFk
IHVzZSB0aGUgRG9jdW1lbnRGcmFnbWVudCBhcyBhIHJvb3Qgbm9kZS4gU28gd2UgbXVzdCB0cmVh
dCB0aGUgcm9vdCBub2RlIChEb2N1bWVudEZyYWdtZW50KSBhcyBpZiBpdCBpcyBhIGh0bWwgZWxl
bWVudCBoZXJlLgogICAgICAgICBib29sIHBhcmVudENhbkJlRm9zdGVyUGFyZW50ID0gcGFyZW50
ICYmIChwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSB8fCAobV9pc1BhcnNpbmdGcmFnbWVudCAmJiBw
YXJlbnQgPT0gbV9vcGVuRWxlbWVudHMucm9vdE5vZGUoKSkpOwogI2lmIEVOQUJMRShURU1QTEFU
RV9FTEVNRU5UKQotICAgICAgICBwYXJlbnRDYW5CZUZvc3RlclBhcmVudCA9IHBhcmVudENhbkJl
Rm9zdGVyUGFyZW50IHx8IChwYXJlbnQgJiYgaXM8RG9jdW1lbnRGcmFnbWVudD4ocGFyZW50KSAm
JiBkb3duY2FzdDxEb2N1bWVudEZyYWdtZW50PihwYXJlbnQpLT5pc1RlbXBsYXRlQ29udGVudCgp
KTsKKyAgICAgICAgcGFyZW50Q2FuQmVGb3N0ZXJQYXJlbnQgPSBwYXJlbnRDYW5CZUZvc3RlclBh
cmVudCB8fCAoaXM8RG9jdW1lbnRGcmFnbWVudD4ocGFyZW50KSAmJiBkb3duY2FzdDxEb2N1bWVu
dEZyYWdtZW50PihwYXJlbnQpLT5pc1RlbXBsYXRlQ29udGVudCgpKTsKICNlbmRpZgogICAgICAg
ICBpZiAocGFyZW50Q2FuQmVGb3N0ZXJQYXJlbnQpIHsKICAgICAgICAgICAgIHRhc2sucGFyZW50
ID0gcGFyZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVs
ZW1lbnRTdGFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0
YWNrLmNwcAppbmRleCA5MTlhYzBlM2EyNTI1OGVjOWRkMDU5OTYxMDU2NTFmMzg5OWFkZGFlLi4z
OTdkMWU2ZWMwYjJlZTVjM2UwYTAxM2YzZDI1NGZmODQ0ZGFhOGFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcApAQCAtNTEsNyArNTEsNyBA
QCBpbmxpbmUgYm9vbCBpc1Njb3BlTWFya2VyKEhUTUxTdGFja0l0ZW0qIGl0ZW0pCiAgICAgICAg
IHx8IGl0ZW0tPmhhc1RhZ05hbWUoY2FwdGlvblRhZykKICAgICAgICAgfHwgaXRlbS0+aGFzVGFn
TmFtZShtYXJxdWVlVGFnKQogICAgICAgICB8fCBpdGVtLT5oYXNUYWdOYW1lKG9iamVjdFRhZykK
LSAgICAgICAgfHwgaXM8SFRNTFRhYmxlRWxlbWVudD4oaXRlbS0+bm9kZSgpKQorICAgICAgICB8
fCBpczxIVE1MVGFibGVFbGVtZW50PigqaXRlbS0+bm9kZSgpKQogICAgICAgICB8fCBpdGVtLT5o
YXNUYWdOYW1lKHRkVGFnKQogICAgICAgICB8fCBpdGVtLT5oYXNUYWdOYW1lKHRoVGFnKQogICAg
ICAgICB8fCBpdGVtLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptaVRhZykKQEAgLTc4LDcgKzc4
LDcgQEAgaW5saW5lIGJvb2wgaXNMaXN0SXRlbVNjb3BlTWFya2VyKEhUTUxTdGFja0l0ZW0qIGl0
ZW0pCiAKIGlubGluZSBib29sIGlzVGFibGVTY29wZU1hcmtlcihIVE1MU3RhY2tJdGVtKiBpdGVt
KQogewotICAgIHJldHVybiBpczxIVE1MVGFibGVFbGVtZW50PihpdGVtLT5ub2RlKCkpCisgICAg
cmV0dXJuIGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCppdGVtLT5ub2RlKCkpCiAjaWYgRU5BQkxFKFRF
TVBMQVRFX0VMRU1FTlQpCiAgICAgICAgIHx8IGl0ZW0tPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcp
CiAjZW5kaWYKQEAgLTEyMCw3ICsxMjAsNyBAQCBpbmxpbmUgYm9vbCBpc0J1dHRvblNjb3BlTWFy
a2VyKEhUTUxTdGFja0l0ZW0qIGl0ZW0pCiAKIGlubGluZSBib29sIGlzU2VsZWN0U2NvcGVNYXJr
ZXIoSFRNTFN0YWNrSXRlbSogaXRlbSkKIHsKLSAgICByZXR1cm4gIWlzPEhUTUxPcHRHcm91cEVs
ZW1lbnQ+KGl0ZW0tPm5vZGUoKSkgJiYgIWlzPEhUTUxPcHRpb25FbGVtZW50PihpdGVtLT5ub2Rl
KCkpOworICAgIHJldHVybiAhaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKml0ZW0tPm5vZGUoKSkg
JiYgIWlzPEhUTUxPcHRpb25FbGVtZW50PigqaXRlbS0+bm9kZSgpKTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggZjdlY2Fj
ODVkMGI0MjE5NWJkZTBjZjZjMjUwNWM1OTYxMDY5NDY5ZC4uZDQ3ZjI1MDlhMmQ5NDYxNDUxN2Yy
ZTU3YjQwM2MwNzFhMGFlOGIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yOTgsNyArMjk4LDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpI
VE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyJiBwYXJzZXIsIERvY3VtZW50RnJhZ21l
bnQmIGYKICNlbmRpZgogCiAgICAgICAgIHJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHko
KTsKLSAgICAgICAgbV90cmVlLnNldEZvcm0oIWNvbnRleHRFbGVtZW50IHx8IGlzPEhUTUxGb3Jt
RWxlbWVudD4oY29udGV4dEVsZW1lbnQpID8gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50Pihjb250
ZXh0RWxlbWVudCkgOiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yKCpj
b250ZXh0RWxlbWVudCkpOworICAgICAgICBtX3RyZWUuc2V0Rm9ybSghY29udGV4dEVsZW1lbnQg
fHwgaXM8SFRNTEZvcm1FbGVtZW50PigqY29udGV4dEVsZW1lbnQpID8gZG93bmNhc3Q8SFRNTEZv
cm1FbGVtZW50Pihjb250ZXh0RWxlbWVudCkgOiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0
Rm9ybUFuY2VzdG9yKCpjb250ZXh0RWxlbWVudCkpOwogICAgIH0KIH0KIApAQCAtODY5LDcgKzg2
OSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSBvcHRncm91cFRhZyB8fCB0b2tlbi0+bmFtZSgpID09IG9wdGlvblRhZykg
ewotICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KG1fdHJlZS5jdXJyZW50U3RhY2tJ
dGVtKCktPm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90
cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgQXRvbWljSFRN
TFRva2VuIGVuZE9wdGlvbihIVE1MVG9rZW46OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgp
KTsKICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoJmVuZE9wdGlvbik7CiAgICAgICAgIH0KQEAg
LTEzNjAsNyArMTM2MCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWco
QXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKLSAgICAgICAgICAgIGlm
IChpczxIVE1MT3B0aW9uRWxlbWVudD4obV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgp
KSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90cmVlLmN1cnJl
bnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEF0b21pY0hUTUxUb2tl
biBlbmRPcHRpb24oSFRNTFRva2VuOjpFbmRUYWcsIG9wdGlvblRhZy5sb2NhbE5hbWUoKSk7CiAg
ICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZygmZW5kT3B0aW9uKTsKICAgICAgICAgICAgIH0K
QEAgLTEzNjgsMTEgKzEzNjgsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFy
dFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGdyb3VwVGFnKSB7Ci0gICAgICAg
ICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkt
Pm5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKm1fdHJl
ZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBBdG9taWNI
VE1MVG9rZW4gZW5kT3B0aW9uKEhUTUxUb2tlbjo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1l
KCkpOwogICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoJmVuZE9wdGlvbik7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4obV90cmVlLmN1
cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRH
cm91cEVsZW1lbnQ+KCptX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5ub2RlKCkpKSB7CiAgICAg
ICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZE9wdGdyb3VwKEhUTUxUb2tlbjo6RW5kVGFn
LCBvcHRncm91cFRhZy5sb2NhbE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRh
ZygmZW5kT3B0Z3JvdXApOwogICAgICAgICAgICAgfQpAQCAtMTYyOSw3ICsxNjI5LDcgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHkoKQogICAg
ICAgICAgICAgICAgIHdoaWxlIChpdGVtLT5ub2RlKCkgIT0gbV90cmVlLm9wZW5FbGVtZW50cygp
LT5yb290Tm9kZSgpICYmICFpdGVtLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkgewogICAgICAg
ICAgICAgICAgICAgICBub2RlUmVjb3JkID0gbm9kZVJlY29yZC0+bmV4dCgpOwogICAgICAgICAg
ICAgICAgICAgICBpdGVtID0gbm9kZVJlY29yZC0+c3RhY2tJdGVtKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50PihpdGVtLT5ub2RlKCkpKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oKml0ZW0tPm5vZGUoKSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2Rl
OjpJblNlbGVjdEluVGFibGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAg
LTE2NDcsNyArMTY0Nyw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpyZXNldEluc2VydGlvbk1v
ZGVBcHByb3ByaWF0ZWx5KCkKICAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUoY29sZ3JvdXBU
YWcpKSB7CiAgICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2Rl
OjpJbkNvbHVtbkdyb3VwKTsKICAgICAgICAgfQotICAgICAgICBpZiAoaXM8SFRNTFRhYmxlRWxl
bWVudD4oaXRlbS0+bm9kZSgpKSkKKyAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpp
dGVtLT5ub2RlKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0
aW9uTW9kZTo6SW5UYWJsZSk7CiAgICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKGhlYWRUYWcp
KSB7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCkBAIC0yMjM0LDkgKzIyMzQsOSBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3Q6CiAgICAgICAgIEFTU0VSVChpbnNl
cnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3QgfHwgaW5zZXJ0aW9uTW9kZSgp
ID09IEluc2VydGlvbk1vZGU6OkluU2VsZWN0SW5UYWJsZSk7CiAgICAgICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IG9wdGdyb3VwVGFnKSB7Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVs
ZW1lbnQ+KG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkgJiYgbV90cmVlLm9uZUJl
bG93VG9wKCkgJiYgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4obV90cmVlLm9uZUJlbG93VG9wKCkt
Pm5vZGUoKSkpCisgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX3RyZWUu
Y3VycmVudFN0YWNrSXRlbSgpLT5ub2RlKCkpICYmIG1fdHJlZS5vbmVCZWxvd1RvcCgpICYmIGlz
PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCptX3RyZWUub25lQmVsb3dUb3AoKS0+bm9kZSgpKSkKICAg
ICAgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhvcHRpb25UYWcpOwotICAgICAgICAgICAg
aWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5v
ZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqbV90cmVl
LmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgICAgIG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQpAQCAtMjI0NCw3ICsyMjQ0LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NF
bmRUYWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKLSAgICAgICAg
ICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4obV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+
bm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90cmVl
LmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgICAgIG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQpAQCAtMjQ4Niw3ICsyNDg2LDcgQEAgUmVwcm9jZXNzQnVmZmVyOgogICAgICAgICBBU1NF
UlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluVGFibGUgfHwgaW5zZXJ0aW9u
TW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9
PSBJbnNlcnRpb25Nb2RlOjpJblJvdyk7CiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdUYWJsZUNo
YXJhY3RlcnMuaXNFbXB0eSgpKTsKICAgICAgICAgaWYgKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVt
KCktPmlzRWxlbWVudE5vZGUoKQotICAgICAgICAgICAgJiYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+
KG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkKKyAgICAgICAgICAgICYmIChpczxI
VE1MVGFibGVFbGVtZW50PigqbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKQogICAg
ICAgICAgICAgICAgIHx8IG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0Ym9keVRhZykKICAgICAgICAgICAgICAgICB8fCBtX3RyZWUuY3VycmVudFN0YWNr
SXRlbSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3RUYWcpCiAgICAgICAgICAgICAgICAg
fHwgbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFk
VGFnKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9p
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmgKaW5kZXgg
MGY0MWEwMjQwYzFjNWZjOWM5YTk3MTI5YjNkM2NhYTI2MWM5MjVmOS4uNTk0YTVjYzE0NDlmYzcx
MjA5ZWU1ZDllM2Q3NGJkYmZhZjhhM2MzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9JbnNlcnRpb25Qb2ludC5oCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAKIGlubGluZSBi
b29sIGlzQWN0aXZlSW5zZXJ0aW9uUG9pbnQoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1
cm4gbm9kZSAmJiBpczxJbnNlcnRpb25Qb2ludD4obm9kZSkgJiYgZG93bmNhc3Q8SW5zZXJ0aW9u
UG9pbnQ+KCpub2RlKS5pc0FjdGl2ZSgpOworICAgIHJldHVybiBpczxJbnNlcnRpb25Qb2ludD4o
bm9kZSkgJiYgZG93bmNhc3Q8SW5zZXJ0aW9uUG9pbnQ+KCpub2RlKS5pc0FjdGl2ZSgpOwogfQog
CiBpbmxpbmUgTm9kZSogcGFyZW50Tm9kZUZvckRpc3RyaWJ1dGlvbihjb25zdCBOb2RlKiBub2Rl
KQpAQCAtODUsNyArODUsNyBAQCBpbmxpbmUgTm9kZSogcGFyZW50Tm9kZUZvckRpc3RyaWJ1dGlv
bihjb25zdCBOb2RlKiBub2RlKQogICAgIEFTU0VSVChub2RlKTsKIAogICAgIGlmIChOb2RlKiBw
YXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEluc2VydGlvblBv
aW50PihwYXJlbnQpICYmIGRvd25jYXN0PEluc2VydGlvblBvaW50PigqcGFyZW50KS5zaG91bGRV
c2VGYWxsYmFja0VsZW1lbnRzKCkpCisgICAgICAgIGlmIChpczxJbnNlcnRpb25Qb2ludD4oKnBh
cmVudCkgJiYgZG93bmNhc3Q8SW5zZXJ0aW9uUG9pbnQ+KCpwYXJlbnQpLnNob3VsZFVzZUZhbGxi
YWNrRWxlbWVudHMoKSkKICAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPnBhcmVudE5vZGUoKTsK
ICAgICAgICAgcmV0dXJuIHBhcmVudDsKICAgICB9CkBAIC05Niw3ICs5Niw3IEBAIGlubGluZSBO
b2RlKiBwYXJlbnROb2RlRm9yRGlzdHJpYnV0aW9uKGNvbnN0IE5vZGUqIG5vZGUpCiBpbmxpbmUg
RWxlbWVudCogcGFyZW50RWxlbWVudEZvckRpc3RyaWJ1dGlvbihjb25zdCBOb2RlKiBub2RlKQog
ewogICAgIGlmIChOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlRm9yRGlzdHJpYnV0aW9uKG5vZGUp
KSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50PihwYXJlbnQpKQorICAgICAgICBpZiAoaXM8RWxl
bWVudD4oKnBhcmVudCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4ocGFy
ZW50KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCmluZGV4IDI2Mzg2M2JlNzA2MGNkOTVhZWQ1OTc4
ZDllM2VjMDRlMzIwODgwMGEuLjZkOTVmMzQzMzg0ZDIwZDA3NDZlNTdmMmI0OTBkZDA2N2VlZWI1
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudFR5cGVzLmNwcApAQCAtNTMsNyArNTMsNyBAQCBIVE1MTWVkaWFFbGVtZW50KiBw
YXJlbnRNZWRpYUVsZW1lbnQoTm9kZSogbm9kZSkKICAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2Rl
LT5zaGFkb3dIb3N0KCk7CiAgICAgaWYgKCFtZWRpYU5vZGUpCiAgICAgICAgIG1lZGlhTm9kZSA9
IG5vZGU7Ci0gICAgaWYgKCFpczxIVE1MTWVkaWFFbGVtZW50PihtZWRpYU5vZGUpKQorICAgIGlm
ICghaXM8SFRNTE1lZGlhRWxlbWVudD4oKm1lZGlhTm9kZSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIHJldHVybiBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50PihtZWRpYU5vZGUpOwog
fQpAQCAtNjEsNyArNjEsNyBAQCBIVE1MTWVkaWFFbGVtZW50KiBwYXJlbnRNZWRpYUVsZW1lbnQo
Tm9kZSogbm9kZSkKIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIG1lZGlhQ29udHJvbEVsZW1lbnRU
eXBlKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
bm9kZS0+aXNNZWRpYUNvbnRyb2xFbGVtZW50KCkpOwotICAgIGlmIChpczxIVE1MSW5wdXRFbGVt
ZW50Pihub2RlKSkKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpKQogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sSW5wdXRFbGVtZW50Kj4obm9kZSktPmRp
c3BsYXlUeXBlKCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbERpdkVsZW1l
bnQqPihub2RlKS0+ZGlzcGxheVR5cGUoKTsKIH0KQEAgLTE5Niw3ICsxOTYsNyBAQCBNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50
KERvY3VtZW50JiBkb2N1bQogdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBMZWZ0IGJ1dHRvbiBp
cyAwLiBSZWplY3RzIG1vdXNlIGV2ZW50cyBub3QgZnJvbSBsZWZ0IGJ1dHRvbi4KLSAgICBpZiAo
aXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0
dG9uKCkpCisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8TW91c2VF
dmVudD4oKmV2ZW50KS5idXR0b24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFyZW5k
ZXJlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCmluZGV4IDMyZjNhNTMzNGRjY2QzNmY5ODgyYzllODE2YWI2OTEyOGVhODFl
ZDUuLjI3MWYwNmEzNDU5ZGUyMzA1ODMxZDE4ZTQwOGQ5OTczZGEzN2RjMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAg
LTIyMSw3ICsyMjEsNyBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgTWVkaWFDb250cm9sRGl2RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiAKLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZl
bnQpKSB7CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KCpldmVudCkpIHsKICAgICAgICAgTGF5b3V0
UG9pbnQgbG9jYXRpb24gPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmFic29sdXRlTG9j
YXRpb24oKTsKICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ICYmIGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKSB7CiAgICAgICAgICAgICBzdGFy
dERyYWcobG9jYXRpb24pOwpAQCAtMzM3LDcgKzMzNyw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVt
ZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGVFbGVt
ZW50CiAKIHZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFpczxNb3VzZUV2ZW50
PihldmVudCkgfHwgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkK
KyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KCpldmVudCkgfHwgZXZlbnQtPnR5cGUoKSAhPSBldmVu
dE5hbWVzKCkubW91c2VvdXRFdmVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUG9vciBt
YW4ncyBtb3VzZWxlYXZlIGV2ZW50IGRldGVjdGlvbi4KQEAgLTY4OSw3ICs2ODksNyBAQCB2b2lk
IE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbgogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICBOb2RlKiB0
YXJnZXQgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwotICAgICAgICBpZiAoIXRhcmdldCB8
fCAhaXM8RWxlbWVudD4odGFyZ2V0KSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pih0YXJnZXQp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIFdoZW4gd2UgY3JlYXRlZCB0aGUg
ZWxlbWVudHMgaW4gdGhlIHRyYWNrIGxpc3QsIHdlIGdhdmUgdGhlbSBhIGN1c3RvbQpAQCAtODUx
LDcgKzg1MSw3IEBAIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShEb2N1CiB2b2lkIE1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAg
Ly8gTGVmdCBidXR0b24gaXMgMC4gUmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBi
dXR0b24uCi0gICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2
ZW50PigqZXZlbnQpLmJ1dHRvbigpKQorICAgIGlmIChpczxNb3VzZUV2ZW50PigqZXZlbnQpICYm
IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghcmVuZGVyZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9scy5jcHAKaW5kZXggNGQzZWNmODBkMjkyZmEyNTUzNzViZGY0YTZhZjNkNDllNDMw
YjYzYS4uNzEyOWZlNjYxNzNhZmY3ZTQxMWY3NDVlNDM5NTlhMjIyNzc5ZGZkYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKQEAgLTM2Niw3ICszNjYs
NyBAQCB2b2lkIE1lZGlhQ29udHJvbHM6OnN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIo
KQogCiBib29sIE1lZGlhQ29udHJvbHM6OmNvbnRhaW5zUmVsYXRlZFRhcmdldChFdmVudCogZXZl
bnQpCiB7Ci0gICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkpCisgICAgaWYgKCFpczxNb3Vz
ZUV2ZW50PigqZXZlbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRXZlbnRUYXJnZXQq
IHJlbGF0ZWRUYXJnZXQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLnJlbGF0ZWRUYXJn
ZXQoKTsKICAgICBpZiAoIXJlbGF0ZWRUYXJnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcAppbmRleCA4Yzg0ZGE3M2JmNjYwMGY0NWMx
NDJiNjMzNGVhYTYzNGM0M2Q4ZTg2Li4wMWUzZjZmYmY0YzI0ZjE4YmRjNGE0Y2Y4YjcyNGQzN2Y5
MDJmOTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xzQXBwbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bHNBcHBsZS5jcHAKQEAgLTU4OCw3ICs1ODgsNyBAQCB2b2lkIE1lZGlhQ29udHJvbHNBcHBsZUV2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudAog
ewogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQogICAg
ICAgICBtX21lZGlhQ29udHJvbHMtPmhhbmRsZUNsaWNrRXZlbnQoZXZlbnQpOwotICAgIGVsc2Ug
aWYgKChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkgJiYgaXM8V2hlZWxFdmVudD4o
ZXZlbnQpKSB7CisgICAgZWxzZSBpZiAoKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndo
ZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50
KSAmJiBpczxXaGVlbEV2ZW50PigqZXZlbnQpKSB7CiAgICAgICAgIFdoZWVsRXZlbnQmIHdoZWVs
RXZlbnQgPSBkb3duY2FzdDxXaGVlbEV2ZW50PigqZXZlbnQpOwogICAgICAgICBpZiAobV9tZWRp
YUNvbnRyb2xzLT5zaG91bGRDbG9zZWRDYXB0aW9uc0NvbnRhaW5lclByZXZlbnRQYWdlU2Nyb2xs
aW5nKHdoZWVsRXZlbnQud2hlZWxEZWx0YVkoKSkpCiAgICAgICAgICAgICB3aGVlbEV2ZW50LnBy
ZXZlbnREZWZhdWx0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9T
bGlkZXJUaHVtYkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVy
VGh1bWJFbGVtZW50LmNwcAppbmRleCAyMmJlNjNiNDc1ZTA5NTEyNzU2NzhiODQ4ZmJhYjVkMzI4
NjQ5ZDc4Li5kZGM1YTUzYThiN2IyNTY5MGJlOGJkYTY1MzVkZjAyZjIwMTU4ZWQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKQEAg
LTMzMyw3ICszMzMsNyBAQCB2b2lkIFNsaWRlclRodW1iRWxlbWVudDo6c3RvcERyYWdnaW5nKCkK
ICNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZlbnQp
KSB7CisgICAgaWYgKCFpczxNb3VzZUV2ZW50PigqZXZlbnQpKSB7CiAgICAgICAgIEhUTUxEaXZF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNw
cAppbmRleCAzOGE0MGE0M2RkNjg1NTgxNjAyOGQxY2RiZThhZGY0Yzk2YjJiNDU5Li5iYmRkMDFi
OWEwOTY1Yzk2NTA1NmM5Y2M4OTNjM2ZhZGNmM2I1ZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIHZv
aWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OndpbGxEZXRhY2hSZW5kZXJlcnMoKQogCiB2b2lkIFNwaW5C
dXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBp
ZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkgeworICAgIGlmICghaXM8TW91c2VFdmVudD4oKmV2
ZW50KSkgewogICAgICAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAg
ICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogICAgICAgICBy
ZXR1cm47CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6Zm9yd2Fy
ZEV2ZW50KEV2ZW50KiBldmVudCkKICAgICBpZiAoIXJlbmRlckJveCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoIWlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkKKyAgICBpZiAoIWlzPFdoZWVs
RXZlbnQ+KCpldmVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9zcGluQnV0dG9u
T3duZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcAppbmRleCA3YjI5NTNkODc4YjkwYWQzMjFmYTVkZDJiMmYxYjA3
NGViNmJkZjRhLi5iNDc2MTkwMTNmNDJjOWQ3ZjA3ZWZhOGQzOGE5ZDU1ZmY5YjI4ZmFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJF
bGVtZW50cy5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIC8v
IE9uIG1vdXNlZG93biwgYnJpbmcgdXAgYSBtZW51LCBpZiBuZWVkZWQKICAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHNoYWRvd0hvc3QoKSk7
Ci0gICAgaWYgKGlucHV0ICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93
bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50Pigq
ZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoaW5wdXQgJiYgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4o
KmV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRC
dXR0b24pIHsKICAgICAgICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgICAgIGlucHV0LT5zZWxlY3Qo
KTsKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgU2VhcmNoRmll
bGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNh
c3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNl
RXZlbnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnZp
c2libGVUb0hpdFRlc3RpbmcoKSkgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCkuZnJhbWUoKSkgewogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQodGhpcyk7CkBAIC0yMTAsNyArMjEwLDcg
QEAgdm9pZCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICBpbnB1dC0+c2VsZWN0KCk7CiAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3du
Y2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGlzPE1vdXNl
RXZlbnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChtX2NhcHR1cmluZykgewogICAgICAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkgewogICAgICAgICAgICAgICAg
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQobnVs
bHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAKaW5kZXggYjdhZjk4MTdkZmNl
ZjNlNTdkNjMyZTIwMmQ3MjVjODYwNmVmZmNhZS4uMzgyNmYzZGU0MDY2Zjk3NDQxZDhmNDQyZGI3
YjRkM2ZkMWJjOTEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRD
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcApAQCAtNDk3
LDEyICs0OTcsMTIgQEAgdm9pZCBWVFRDdWU6OmNvcHlXZWJWVFROb2RlVG9ET01UcmVlKENvbnRh
aW5lck5vZGUqIHdlYlZUVE5vZGUsIENvbnRhaW5lck5vZGUqIHAKIHsKICAgICBmb3IgKE5vZGUq
IG5vZGUgPSB3ZWJWVFROb2RlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBjbG9uZWROb2RlOwotICAgICAgICBp
ZiAoaXM8V2ViVlRURWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmIChpczxXZWJWVFRFbGVtZW50
Pigqbm9kZSkpCiAgICAgICAgICAgICBjbG9uZWROb2RlID0gZG93bmNhc3Q8V2ViVlRURWxlbWVu
dD4oKm5vZGUpLmNyZWF0ZUVxdWl2YWxlbnRIVE1MRWxlbWVudChvd25lckRvY3VtZW50KCkpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBjbG9uZWROb2RlID0gbm9kZS0+Y2xvbmVOb2RlKGZh
bHNlKTsKICAgICAgICAgcGFyZW50LT5hcHBlbmRDaGlsZChjbG9uZWROb2RlLCBBU1NFUlRfTk9f
RVhDRVBUSU9OKTsKLSAgICAgICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQorICAgICAg
ICBpZiAoaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUpKQogICAgICAgICAgICAgY29weVdlYlZUVE5v
ZGVUb0RPTVRyZWUoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSksIGRvd25jYXN0PENvbnRh
aW5lck5vZGU+KGNsb25lZE5vZGUuZ2V0KCkpKTsKICAgICB9CiB9CkBAIC03NjYsNyArNzY2LDcg
QEAgdm9pZCBWVFRDdWU6Om1hcmtGdXR1cmVBbmRQYXN0Tm9kZXMoQ29udGFpbmVyTm9kZSogcm9v
dCwgY29uc3QgTWVkaWFUaW1lJiBwcmV2aW8KICAgICAgICAgICAgICAgICBpc1Bhc3ROb2RlID0g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpczxXZWJWVFRFbGVtZW50
PihjaGlsZCkpIHsKKyAgICAgICAgaWYgKGlzPFdlYlZUVEVsZW1lbnQ+KCpjaGlsZCkpIHsKICAg
ICAgICAgICAgIGRvd25jYXN0PFdlYlZUVEVsZW1lbnQ+KCpjaGlsZCkuc2V0SXNQYXN0Tm9kZShp
c1Bhc3ROb2RlKTsKICAgICAgICAgICAgIC8vIE1ha2UgYW4gZWxlbWVuZXQgaWQgbWF0Y2ggYSBj
dWUgaWQgZm9yIHN0eWxlIG1hdGNoaW5nIHB1cnBvc2VzLgogICAgICAgICAgICAgaWYgKCFpZCgp
LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwCmluZGV4IGVlM2RkMzhhN2M1MDhjYmY5ODY4YmM0OTJkYjFmMTM0NTIwOTk3ZDAuLjZl
ZWNkNWQzMGI2ODgwODI4YzI4MzhhNTI4NzU0NDkzNjc3YWEzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtODk2LDcgKzg5Niw3IEBA
IEVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJh
bCgiTm8gbm9kZSB3aXRoIGdpdmVuIGlkIGZvdW5kIik7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KLSAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKCFpczxFbGVt
ZW50Pigqbm9kZSkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5vdCBh
biBlbGVtZW50IG5vZGUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMTA4
Niw3ICsxMDg2LDggQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3AKIAogUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWlz
PFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBpZiAo
IWlzPFN0eWxlZEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICAvLyBGSVhNRTogVWdsaW5lc3MgYmVsb3cuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBiZTk1ZmUwYjIzNTU4OWUyMjIxZDYyMTA3
NGY2NWJjYWNjNGEwMGNmLi45YmIwODE4YTMxMmNiMWQzNzg1ZWYxMmFkMjU2OTMwM2ViMTZmZGFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAK
QEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSog
bm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAgICAgICAgICAgdW5iaW5kKGNvbnRlbnRE
b2N1bWVudCwgbm9kZXNNYXApOwogICAgIH0KIAotICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkg
eworICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgaWYgKFNoYWRvd1Jvb3Qq
IHJvb3QgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuc2hhZG93Um9vdCgpKQogICAgICAgICAg
ICAgdW5iaW5kKHJvb3QsIG5vZGVzTWFwKTsKICAgICB9CkBAIC0zNzUsNyArMzc1LDcgQEAgRG9j
dW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0
cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIGlmICghaXM8RG9jdW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKCFpczxEb2N1bWVudD4oKm5v
ZGUpKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJEb2N1bWVudCBpcyBu
b3QgYXZhaWxhYmxlIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTM4Nyw3
ICszODcsNyBAQCBFbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgTm9kZSogbm9kZSA9IGFzc2Vy
dE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKCFpczxF
bGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5v
ZGUgaXMgbm90IGFuIEVsZW1lbnQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpA
QCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2VsZWN0b3Io
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zCiAgICAgTm9kZSogbm9k
ZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2RlPihub2RlKSkgeworICAgIGlm
ICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUpKSB7CiAgICAgICAgIGFzc2VydEVsZW1lbnQoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01NDEsNyArNTQx
LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGMKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9k
ZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KG5vZGUpKSB7CisgICAgaWYgKCFpczxDb250YWlu
ZXJOb2RlPigqbm9kZSkpIHsKICAgICAgICAgYXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgbm9k
ZUlkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTcxOCw3ICs3MTgsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpzZXROb2RlTmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQsIGNvbnN0CiAgICAgKm5ld0lkID0gMDsKIAogICAgIE5vZGUqIG9sZE5vZGUgPSBu
b2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIW9sZE5vZGUgfHwgIWlzPEVsZW1lbnQ+KG9sZE5v
ZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4ob2xkTm9kZSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWls
ZE9iamVjdEZvck5vZGUKICAgICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZHJlbihjaGlsZHJlbi5y
ZWxlYXNlKCkpOwogICAgIH0KIAotICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgeworICAgIGlm
IChpczxFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25j
YXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgdmFsdWUtPnNldEF0dHJpYnV0ZXMoYnVpbGRB
cnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKCZlbGVtZW50KSk7CiAgICAgICAgIGlmIChpczxIVE1M
RnJhbWVPd25lckVsZW1lbnQ+KGVsZW1lbnQpKSB7CkBAIC0xMjkzLDE3ICsxMjkzLDE3IEBAIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRPYmplY3RGb3JOb2RlCiAgICAgICAgICAgICB2YWx1ZS0+c2V0VGVtcGxhdGVDb250
ZW50KGJ1aWxkT2JqZWN0Rm9yTm9kZShkb3duY2FzdDxIVE1MVGVtcGxhdGVFbGVtZW50PihlbGVt
ZW50KS5jb250ZW50KCksIDAsIG5vZGVzTWFwKSk7CiAjZW5kaWYKIAotICAgIH0gZWxzZSBpZiAo
aXM8RG9jdW1lbnQ+KG5vZGUpKSB7CisgICAgfSBlbHNlIGlmIChpczxEb2N1bWVudD4oKm5vZGUp
KSB7CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqbm9k
ZSk7CiAgICAgICAgIHZhbHVlLT5zZXREb2N1bWVudFVSTChkb2N1bWVudFVSTFN0cmluZygmZG9j
dW1lbnQpKTsKICAgICAgICAgdmFsdWUtPnNldEJhc2VVUkwoZG9jdW1lbnRCYXNlVVJMU3RyaW5n
KCZkb2N1bWVudCkpOwogICAgICAgICB2YWx1ZS0+c2V0WG1sVmVyc2lvbihkb2N1bWVudC54bWxW
ZXJzaW9uKCkpOwotICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1lbnRUeXBlPihub2RlKSkgeworICAg
IH0gZWxzZSBpZiAoaXM8RG9jdW1lbnRUeXBlPigqbm9kZSkpIHsKICAgICAgICAgRG9jdW1lbnRU
eXBlJiBkb2NUeXBlID0gZG93bmNhc3Q8RG9jdW1lbnRUeXBlPigqbm9kZSk7CiAgICAgICAgIHZh
bHVlLT5zZXRQdWJsaWNJZChkb2NUeXBlLnB1YmxpY0lkKCkpOwogICAgICAgICB2YWx1ZS0+c2V0
U3lzdGVtSWQoZG9jVHlwZS5zeXN0ZW1JZCgpKTsKICAgICAgICAgdmFsdWUtPnNldEludGVybmFs
U3Vic2V0KGRvY1R5cGUuaW50ZXJuYWxTdWJzZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChpczxBdHRy
Pihub2RlKSkgeworICAgIH0gZWxzZSBpZiAoaXM8QXR0cj4oKm5vZGUpKSB7CiAgICAgICAgIEF0
dHImIGF0dHJpYnV0ZSA9IGRvd25jYXN0PEF0dHI+KCpub2RlKTsKICAgICAgICAgdmFsdWUtPnNl
dE5hbWUoYXR0cmlidXRlLm5hbWUoKSk7CiAgICAgICAgIHZhbHVlLT5zZXRWYWx1ZShhdHRyaWJ1
dGUudmFsdWUoKSk7CkBAIC0xNTIyLDcgKzE1MjIsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50
OgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8RWxlbWVu
dD4oKm5vZGUpKSB7CiAgICAgICAgICAgICAgICAgc3VwcG9ydHNGb2N1c2VkID0gZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpLmlzRm9jdXNhYmxlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHN1cHBv
cnRzRm9jdXNlZCkKICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZCA9IGF4T2JqZWN0LT5pc0Zv
Y3VzZWQoKTsKQEAgLTE3MjAsNyArMTcyMCw4IEBAIHVuc2lnbmVkIEluc3BlY3RvckRPTUFnZW50
Ojppbm5lckNoaWxkTm9kZUNvdW50KE5vZGUqIG5vZGUpCiAKIE5vZGUqIEluc3BlY3RvckRPTUFn
ZW50Ojppbm5lclBhcmVudE5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+
KG5vZGUpKQorICAgIEFTU0VSVChub2RlKTsKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KCpub2RlKSkK
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50Pigqbm9kZSkub3duZXJFbGVtZW50KCk7
CiAgICAgcmV0dXJuIG5vZGUtPnBhcmVudE5vZGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5kZXggMDMzYWFjODNlMDcz
OTljYjJmOTAwNjI1MjNlNmMwNDU3NmM5ZmI2YS4uMWMwNWJiZmFkZWI2NGJjM2E1NTc4YzQ4ZDIz
YzM3NjVlYTBiMWUyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51KEV2ZW50KiBldmVudCwgY29uc3QgVmVjdG9yPENv
bnRleHRNZQogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpc3BhdGNoRXZlbnRBc0NvbnRl
eHRNZW51RXZlbnQoRXZlbnQqIGV2ZW50KQogewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKSAm
JiBVU0UoQUNDRVNTSUJJTElUWV9DT05URVhUX01FTlVTKQotICAgIGlmICghZXZlbnQgfHwgIWlz
PE1vdXNlRXZlbnQ+KGV2ZW50KSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgRnJhbWUqIGZyYW1lID0gZXZlbnQtPnRhcmdldCgpLT50b05v
ZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCA4ZTk0N2NhNThkMmJiYTNj
ZmE2OTkyMzJhYWJjN2FjNWY0Mjc5OTAzLi4zMGI1YTIwYjljNGQ4ZjJkOTMwNzBmNDdjMWI5NmI0
Y2JhYzEyZGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtMTAwLDggKzEwMCw4IEBAIGludCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnNfZnJvbnRlbmRDb3VudGVyID0gMDsKIHN0YXRpYyBGcmFtZSogZnJh
bWVGb3JTY3JpcHRFeGVjdXRpb25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbnVsbHB0cjsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+
KGNvbnRleHQpKQotICAgICAgICBmcmFtZSA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS0+
ZnJhbWUoKTsKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KCpjb250ZXh0KSkKKyAgICAgICAgZnJhbWUg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpLmZyYW1lKCk7CiAgICAgcmV0dXJuIGZyYW1l
OwogfQogCkBAIC0xMjYyLDcgKzEyNjIsOCBAQCBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JXb3JrZXJHbG9iYQogCiBJ
bnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRp
bmdBZ2VudHNGb3JOb25Eb2N1bWVudENvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKIHsKLSAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpKQorICAgIEFT
U0VSVChjb250ZXh0KTsKKyAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KSkK
ICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbkZvcldvcmtlckdsb2JhbFNjb3BlKGRvd25j
YXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmgKaW5kZXggYjllMGNlNWYwODE5ODNlNTY3ZWUxYjg2YmYxMGJjZDgxM2MxMGNlYS4uODAw
M2M1NDUzMmMxOWU5NjUyMDY2OWRhNmI3MzY0MzNjMDBlNmU1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMjA2Miw3
ICsyMDYyLDcgQEAgaW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnQKIHsKICAgICBpZiAoIWNvbnRleHQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkp
CisgICAgaWYgKGlzPERvY3VtZW50PigqY29udGV4dCkpCiAgICAgICAgIHJldHVybiBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yUGFnZShkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCktPnBhZ2UoKSk7
CiAgICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHNGb3JOb25Eb2N1bWVudENvbnRleHQoY29u
dGV4dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Tm9kZUZpbmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTm9kZUZp
bmRlci5jcHAKaW5kZXggZTRjMGYxZTFhNzBhYjIzNDNjZTM0ZGJjNjhiZDAyM2I0MTliODQ4NC4u
MGU2MDI4YWIwMTQ0ODk0YzMxZmRkMjkxNjIxZjYzNWUyN2ViMjlhNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck5vZGVGaW5kZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JOb2RlRmluZGVyLmNwcApAQCAtODksNyArODks
NyBAQCB2b2lkIEluc3BlY3Rvck5vZGVGaW5kZXI6OnNlYXJjaFVzaW5nRE9NVHJlZVRyYXZlcnNh
bChOb2RlKiBwYXJlbnROb2RlKQogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hZGQobm9kZSk7
CiAKICAgICAgICAgICAgIC8vIFNlYXJjaCBpbnNpZGUgZnJhbWUgZWxlbWVudHMuCi0gICAgICAg
ICAgICBpZiAoaXM8SFRNTEZyYW1lT3duZXJFbGVtZW50Pihub2RlKSkgeworICAgICAgICAgICAg
aWYgKGlzPEhUTUxGcmFtZU93bmVyRWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgICAgICAgICAg
SFRNTEZyYW1lT3duZXJFbGVtZW50JiBmcmFtZU93bmVyID0gZG93bmNhc3Q8SFRNTEZyYW1lT3du
ZXJFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVu
dCA9IGZyYW1lT3duZXIuY29udGVudERvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHBl
cmZvcm1TZWFyY2goZG9jdW1lbnQpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgSW5zcGVjdG9y
Tm9kZUZpbmRlcjo6c2VhcmNoVXNpbmdYUGF0aChOb2RlKiBwYXJlbnROb2RlKQogICAgICAgICBp
ZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKGlzPEF0dHI+KG5vZGUp
KQorICAgICAgICBpZiAoaXM8QXR0cj4oKm5vZGUpKQogICAgICAgICAgICAgbm9kZSA9IGRvd25j
YXN0PEF0dHI+KCpub2RlKS5vd25lckVsZW1lbnQoKTsKIAogICAgICAgICAvLyBYUGF0aCBjYW4g
Z2V0IG91dCBvZiB0aGUgY29udGV4dCBub2RlIHRoYXQgd2UgcGFzcyBhcyB0aGUgc3RhcnRpbmcg
cG9pbnQgdG8gZXZhbHVhdGUsIHNvIHdlIG5lZWQgdG8gZmlsdGVyIGZvciBqdXN0IHRoZSBub2Rl
cyB3ZSBjYXJlIGFib3V0LgpAQCAtMTU3LDcgKzE1Nyw4IEBAIHZvaWQgSW5zcGVjdG9yTm9kZUZp
bmRlcjo6c2VhcmNoVXNpbmdYUGF0aChOb2RlKiBwYXJlbnROb2RlKQogCiB2b2lkIEluc3BlY3Rv
ck5vZGVGaW5kZXI6OnNlYXJjaFVzaW5nQ1NTU2VsZWN0b3JzKE5vZGUqIHBhcmVudE5vZGUpCiB7
Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2RlPihwYXJlbnROb2RlKSkKKyAgICBBU1NFUlQocGFy
ZW50Tm9kZSk7CisgICAgaWYgKCFpczxDb250YWluZXJOb2RlPigqcGFyZW50Tm9kZSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCmluZGV4IDZlNjVhODEwYTk4ZGFkYzE2
OGZkZTRhYmViNjI5ZjQ1ODYxMzE1ODQuLmU2ZjIxYmJjYTM1YjQyYTM5NWYzOTc4MjFhNGRjYzdl
ZmExOTZmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eS5jcHAKQEAgLTY3Niw3ICs2NzYsOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJ1aWxkT2JqZWN0Rm9yU2hhcGVPdXRzaWRlKEZyYW1lKiBjb250YWluaW5nRgogCiBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8o
Tm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpIHx8ICFub2RlLT5kb2N1
bWVudCgpLmZyYW1lKCkpCisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmICghaXM8RWxlbWVudD4o
Km5vZGUpIHx8ICFub2RlLT5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZWxlbWVudEluZm8gPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IGViNzAwZjlmZGY2MWVhMmE2MTgzZTJhMTBiZGVlYzZk
NzI1MmYzYzMuLjViN2ZhNmUzNzM0N2EzYTE5YTY5OTJjZWQxMzVjMDgzNjBmZjUzNWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAg
LTEzODgsNyArMTM4OCw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5saW5lU3R5bGVT
aGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIE5vZGUqIG93bmVyTm9kZSA9IG1fcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpOwotICAg
IGlmICghb3duZXJOb2RlIHx8ICFpczxFbGVtZW50Pihvd25lck5vZGUpKQorICAgIGlmICghaXM8
RWxlbWVudD4ob3duZXJOb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEVsZW1lbnQm
IG93bmVyRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpvd25lck5vZGUpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRleCBhOTdmZDg0YTU0ZWU4MDViNmFk
ZTFmMDYyZjRjNDk5ZWUyZTA3NjM2Li40MjM0M2IyY2M1YjcxYzRlMzUyYzgwNjQ4M2Y1Njg1ZjYz
ZDNhMjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKQEAgLTE0
NCw3ICsxNDQsNyBAQCBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6
Y3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9ybSwgY29uc3QgQQogICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIHN1Ym1pdEJ1dHRvbiA9IDA7CiAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LT50YXJn
ZXQoKSkgewogICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9k
ZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
aXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChpczxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgICAgICBzdWJtaXRC
dXR0b24gPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2RlKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCmluZGV4IDg5NDZjZmVlNzg2ZTZlMWZiYjZkY2I5MDIzMDQyY2QzNmZiMWUxNTMuLjI0
ZGQyOGFlNGEwMzFmYzM1N2JlNDMzYjQzZWNlNmUyMTYzMzhkNzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMTAzMyw3ICsxMDMzLDcgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6c2V0T3BlbmVyKEZyYW1lKiBvcGVuZXIpCiB2b2lkIEZyYW1lTG9hZGVyOjpoYW5kbGVGYWxs
YmFja0NvbnRlbnQoKQogewogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBtX2Zy
YW1lLm93bmVyRWxlbWVudCgpOwotICAgIGlmICghb3duZXIgfHwgIWlzPEhUTUxPYmplY3RFbGVt
ZW50Pihvd25lcikpCisgICAgaWYgKCFpczxIVE1MT2JqZWN0RWxlbWVudD4ob3duZXIpKQogICAg
ICAgICByZXR1cm47CiAgICAgZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KCpvd25lcikucmVu
ZGVyRmFsbGJhY2tDb250ZW50KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvU3ViZnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9h
ZGVyLmNwcAppbmRleCA3M2JjNTJiODAyOWVjOTE5YTJhNjJhYjllZDA1OGU1OWI3OWZkNzc4Li43
ZWU1NDhmZDNjOWQ1M2YxM2YwNGIzM2IyNTAzMjE3YTY0MDFjODk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKQEAgLTM5Myw3ICszOTMsNyBAQCBib29sIFN1YmZy
YW1lTG9hZGVyOjpsb2FkUGx1Z2luKEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1l
bnQsIGNvbnN0IFVSTAogICAgIHBsdWdpbkVsZW1lbnQuc3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRl
UGx1Z0luKHVybCk7CiAKICAgICBJbnRTaXplIGNvbnRlbnRTaXplID0gcm91bmRlZEludFNpemUo
TGF5b3V0U2l6ZShyZW5kZXJlci0+Y29udGVudFdpZHRoKCksIHJlbmRlcmVyLT5jb250ZW50SGVp
Z2h0KCkpKTsKLSAgICBib29sIGxvYWRNYW51YWxseSA9IGlzPFBsdWdpbkRvY3VtZW50Pihkb2N1
bWVudCgpKSAmJiAhbV9jb250YWluc1BsdWdpbnMgJiYgZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+
KCpkb2N1bWVudCgpKS5zaG91bGRMb2FkUGx1Z2luTWFudWFsbHkoKTsKKyAgICBib29sIGxvYWRN
YW51YWxseSA9IGlzPFBsdWdpbkRvY3VtZW50PigqZG9jdW1lbnQoKSkgJiYgIW1fY29udGFpbnNQ
bHVnaW5zICYmIGRvd25jYXN0PFBsdWdpbkRvY3VtZW50PigqZG9jdW1lbnQoKSkuc2hvdWxkTG9h
ZFBsdWdpbk1hbnVhbGx5KCk7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gT24gaU9TLCB3
ZSBvbmx5IHRlbGwgdGhlIHBsdWdpbiB0byBiZSBpbiBmdWxsIHBhZ2UgbW9kZSBpZiB0aGUgY29u
dGFpbmluZyBwbHVnaW4gZG9jdW1lbnQgaXMgdGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcAppbmRleCBkYTY1MGM0ZDBjNjJi
YTljOTUwNzhkZDdmOTNkZDgwN2JhMGRiOWE2Li5hODUwNTUyNzFjZWI5MTYyZmUyMDM0NGI2OGIw
MWNlM2VjOTg0MDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJs
ZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
Y3BwCkBAIC01Niw3ICs1Niw3IEBAIFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gVGhyZWFk
YWJsZUxvYWRlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvCiAgICAgQVNTRVJU
KGNsaWVudCk7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogCi0gICAgaWYgKGlzPFdvcmtlckdsb2Jh
bFNjb3BlPihjb250ZXh0KSkKKyAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0
KSkKICAgICAgICAgcmV0dXJuIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShkb3duY2Fz
dDxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCksIGNsaWVudCwgV29ya2VyUnVuTG9vcDo6ZGVm
YXVsdE1vZGUoKSwgcmVxdWVzdCwgb3B0aW9ucyk7CiAKICAgICByZXR1cm4gRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpjcmVhdGUoZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KSwgKmNsaWVu
dCwgcmVxdWVzdCwgb3B0aW9ucyk7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgVGhyZWFkYWJsZUxv
YWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0CiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogCi0gICAgaWYgKGlzPFdvcmtlckdsb2Jh
bFNjb3BlPihjb250ZXh0KSkKKyAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0
KSkKICAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseShkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCksIHJlcXVlc3QsIGNsaWVu
dCwgb3B0aW9ucyk7CiAgICAgZWxzZQogICAgICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KSwg
cmVxdWVzdCwgY2xpZW50LCBvcHRpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
TWVtb3J5Q2FjaGUuY3BwCmluZGV4IDJlODc4MDk1ZjI3MWIxYzAyZTM5YTQ2MDE5NTJhN2Y1ZmIx
YTEyZGMuLmNjOTRiZTk2ZDVmNjU4OGRjNDNkNThhMjFjYjFiNDIyOTA4Y2RjZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcApAQCAtNzUyLDcgKzc1Miw4
IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVVybEZyb21DYWNoZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpCiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJl
cXVlc3RGcm9tQ2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChp
czxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCkpIHsKKyAgICBBU1NFUlQoY29udGV4dCk7Cisg
ICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigqY29udGV4dCkpIHsKICAgICAgICAgZG93bmNh
c3Q8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KS50aHJlYWQoKS53b3JrZXJMb2FkZXJQcm94
eSgpLnBvc3RUYXNrVG9Mb2FkZXIoQ3Jvc3NUaHJlYWRUYXNrKCZjcm9zc1RocmVhZFJlbW92ZVJl
cXVlc3RGcm9tQ2FjaGUsIHJlcXVlc3QsIHNlc3Npb25JRCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtNzY4LDcgKzc2OSw4IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RG
cm9tQ2FjaGVJbXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBSZXNvCiAKIHZvaWQg
TWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tU2Vzc2lvbkNhY2hlcyhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0g
ICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSkgeworICAgIEFTU0VSVChjb250
ZXh0KTsKKyAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KSkgewogICAgICAg
ICBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQpLnRocmVhZCgpLndvcmtlckxv
YWRlclByb3h5KCkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVhZFRhc2soJmNyb3NzVGhyZWFk
UmVtb3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2FjaGVzLCByZXF1ZXN0KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAKaW5kZXggOTY3
YmE1NTBlOThmNGEzNTc0YjQ0NDAzN2ZkN2FlYzdiYzM2ZGMzZC4uMDNhMTkwNjgwZjM3YWZmODAz
OGNmMDEzMzU2YzIzZDI4NDA4MjNkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbWF0aG1s
L01hdGhNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVt
ZW50LmNwcApAQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgTWF0aE1MRWxlbWVudDo6YXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpCiB7CiAg
ICAgaWYgKGlzU2VtYW50aWNBbm5vdGF0aW9uKCkgJiYgKG5hbWUgPT0gTWF0aE1MTmFtZXM6OnNy
Y0F0dHIgfHwgbmFtZSA9PSBNYXRoTUxOYW1lczo6ZW5jb2RpbmdBdHRyKSkgewogICAgICAgICBF
bGVtZW50KiBwYXJlbnQgPSBwYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYg
aXM8TWF0aE1MRWxlbWVudD4ocGFyZW50KSAmJiBwYXJlbnQtPmhhc1RhZ05hbWUoc2VtYW50aWNz
VGFnKSkKKyAgICAgICAgaWYgKGlzPE1hdGhNTEVsZW1lbnQ+KHBhcmVudCkgJiYgcGFyZW50LT5o
YXNUYWdOYW1lKHNlbWFudGljc1RhZykpCiAgICAgICAgICAgICBkb3duY2FzdDxNYXRoTUxFbGVt
ZW50PigqcGFyZW50KS51cGRhdGVTZWxlY3RlZENoaWxkKCk7CiAgICAgfQogICAgIFN0eWxlZEVs
ZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCByZWFzb24p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFNlbGVjdEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4
IDI0N2Y5YzIzMDMzNzY4YmFlZjZhMThjODE4OGRiODA3MDBmZDg5NDAuLjVmZmE4NWNiYWM4Njc1
ZDZkMzUxNmZkM2NiM2M0M2VhYWQ4NmU5OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21h
dGhtbC9NYXRoTUxTZWxlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwv
TWF0aE1MU2VsZWN0RWxlbWVudC5jcHAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBFbGVtZW50KiBNYXRo
TUxTZWxlY3RFbGVtZW50OjpnZXRTZWxlY3RlZFNlbWFudGljc0NoaWxkKCkKICAgICBpZiAoIWNo
aWxkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghaXM8TWF0aE1MRWxlbWVu
dD4oY2hpbGQpIHx8ICFkb3duY2FzdDxNYXRoTUxFbGVtZW50PigqY2hpbGQpLmlzUHJlc2VudGF0
aW9uTWF0aE1MKCkpIHsKKyAgICBpZiAoIWlzPE1hdGhNTEVsZW1lbnQ+KCpjaGlsZCkgfHwgIWRv
d25jYXN0PE1hdGhNTEVsZW1lbnQ+KCpjaGlsZCkuaXNQcmVzZW50YXRpb25NYXRoTUwoKSkgewog
ICAgICAgICAvLyBUaGUgZmlyc3QgY2hpbGQgaXMgbm90IGEgcHJlc2VudGF0aW9uIE1hdGhNTCBl
bGVtZW50LiBIZW5jZSB3ZSBtb3ZlIHRvIHRoZSBzZWNvbmQgY2hpbGQgYW5kIHN0YXJ0IHNlYXJj
aGluZyBhbiBhbm5vdGF0aW9uIGNoaWxkIHRoYXQgY291bGQgYmUgZGlzcGxheWVkLgogICAgICAg
ICBjaGlsZCA9IGNoaWxkLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKICAgICB9IGVsc2UgaWYgKCFk
b3duY2FzdDxNYXRoTUxFbGVtZW50PigqY2hpbGQpLmlzU2VtYW50aWNBbm5vdGF0aW9uKCkpIHsK
QEAgLTE2Nyw3ICsxNjcsNyBAQCBFbGVtZW50KiBNYXRoTUxTZWxlY3RFbGVtZW50OjpnZXRTZWxl
Y3RlZFNlbWFudGljc0NoaWxkKCkKICAgICAvLyBPdGhlcndpc2UsIHRoZSBmaXJzdCBjaGlsZCBp
cyBhbiA8YW5ub3RhdGlvbj4gb3IgPGFubm90YXRpb24teG1sPiBlbGVtZW50LiBUaGlzIGlzIGlu
dmFsaWQsIGJ1dCBzb21lIHBlb3BsZSB1c2UgdGhpcyBzeW50YXggc28gd2UgdGFrZSBjYXJlIG9m
IHRoaXMgY2FzZSB0b28gYW5kIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSB0aGlzIGZpcnN0IGNoaWxk
LgogCiAgICAgZm9yICggOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dEVsZW1lbnRTaWJsaW5n
KCkpIHsKLSAgICAgICAgaWYgKCFpczxNYXRoTUxFbGVtZW50PihjaGlsZCkpCisgICAgICAgIGlm
ICghaXM8TWF0aE1MRWxlbWVudD4oKmNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6YW5ub3RhdGlvblRhZykp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCBiYTNiNzc5YTNiMmY1N2ZkYTI2ZDZmZjBiMWYy
NjMzOWU1OTRhZDVlLi45ZmEyYjJlYjc0NTMwMzY4YzA1MGRiZjBmNjEwYTcwN2ZjZTg4ZGQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC00MDgsNyArNDA4LDcgQEAgdm9pZCBDaHJvbWU6OnNl
dFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogICAgIGlmICh0b29sVGlwLmlz
RW1wdHkoKSAmJiBtX3BhZ2Uuc2V0dGluZ3MoKS5zaG93c1VSTHNJblRvb2xUaXBzKCkpIHsKICAg
ICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZXN1bHQuaW5uZXJOb25TaGFyZWRFbGVtZW50
KCkpIHsKICAgICAgICAgICAgIC8vIEdldCB0b29sdGlwIHJlcHJlc2VudGluZyBmb3JtIGFjdGlv
biwgaWYgcmVsZXZhbnQKLSAgICAgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihlbGVt
ZW50KSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSkg
ewogICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dC5pc1N1
Ym1pdEJ1dHRvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChIVE1MRm9ybUVsZW1lbnQq
IGZvcm0gPSBpbnB1dC5mb3JtKCkpIHsKQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIENocm9tZTo6
c2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiAgICAgLy8gTGFzdGx5LCBm
b3IgPGlucHV0IHR5cGU9ImZpbGUiPiB0aGF0IGFsbG93IG11bHRpcGxlIGZpbGVzLCB3ZSdsbCBj
b25zaWRlciBhIHRvb2x0aXAgZm9yIHRoZSBzZWxlY3RlZCBmaWxlbmFtZXMKICAgICBpZiAodG9v
bFRpcC5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZXN1bHQu
aW5uZXJOb25TaGFyZWRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChpczxIVE1MSW5wdXRF
bGVtZW50PihlbGVtZW50KSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+
KCplbGVtZW50KSkgewogICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqZWxlbWVudCkuZGVmYXVsdFRvb2xUaXAoKTsKIAogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgb2J0YWluIHRleHQgZGlyZWN0aW9uIG9mIHRvb2x0aXAgZnJv
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4
IDc2ZTg4MWNlMjhlYmU3ZWM3MmQ3YzIyMGUyZDAxNGQ3NzE4ZjU4ZmYuLjE5NGY0NGQ2OGExZmI2
MzVkMzAxMTMzZDdiYjQzYmZhYjU3OTc5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8Q29udGV4dE1lbnU+IENvbnRleHRNZW51Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVDb250ZXh0
TWVudShFdmVudAogewogICAgIEFTU0VSVChldmVudCk7CiAgICAgCi0gICAgaWYgKCFpczxNb3Vz
ZUV2ZW50PihldmVudCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50PigqZXZlbnQpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2Fz
dDxNb3VzZUV2ZW50PigqZXZlbnQpOwpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgQ29udGV4dE1l
bnVDb250cm9sbGVyOjpwb3B1bGF0ZSgpCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47
CiAjaWYgUExBVEZPUk0oR1RLKQotICAgIGlmICghbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5p
c0NvbnRlbnRFZGl0YWJsZSgpICYmIGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5vZGUpKQor
ICAgIGlmICghbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pc0NvbnRlbnRFZGl0YWJsZSgpICYm
IGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuOwogI2Vu
ZGlmCiAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01UaW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVRpbWVyLmNwcAppbmRleCBhZWM5MDE4NTZjOWFkYTY2YTU4YjBkNGRmMjljYzA4NzE5
NTRhM2MyLi4zNGI1YzM1ZjkxNTkwMTliMjE3M2MxNWJiNWEwMjYwYjVlNTRmMDg0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVRpbWVyLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIGludCBET01UaW1lcjo6aW5z
dGFsbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBzdGQ6OnVuaXF1ZV9wdHI8U2No
ZWR1bGVkCiAgICAgLy8gaXMgZGVzdHJveWVkLCBvciBpZiBleHBsaWNpdGx5IGNhbmNlbGxlZCBi
eSByZW1vdmVCeUlkLiAKICAgICBET01UaW1lciogdGltZXIgPSBuZXcgRE9NVGltZXIoY29udGV4
dCwgV1RGOjptb3ZlKGFjdGlvbiksIHRpbWVvdXQsIHNpbmdsZVNob3QpOwogI2lmIFBMQVRGT1JN
KElPUykKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CisgICAgaWYgKGlzPERvY3Vt
ZW50PigqY29udGV4dCkpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKICAgICAgICAgYm9vbCBkaWREZWZlclRpbWVvdXQgPSBkb2N1
bWVudC5mcmFtZSgpICYmIGRvY3VtZW50LmZyYW1lKCktPnRpbWVyc1BhdXNlZCgpOwogICAgICAg
ICBpZiAoIWRpZERlZmVyVGltZW91dCAmJiB0aW1lb3V0IDw9IDEwMCAmJiBzaW5nbGVTaG90KSB7
CkBAIC0xNzMsNyArMTczLDcgQEAgdm9pZCBET01UaW1lcjo6ZmlyZWQoKQogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG51bGxwdHI7Ci0gICAgaWYgKGlzPERv
Y3VtZW50Pihjb250ZXh0KSkgeworICAgIGlmIChpczxEb2N1bWVudD4oKmNvbnRleHQpKSB7CiAg
ICAgICAgIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwogICAgICAgICBB
U1NFUlQoIWRvY3VtZW50LT5mcmFtZSgpLT50aW1lcnNQYXVzZWQoKSk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCA0YTc0MzBiMDVkYzJiYWU0ZjU4MGVj
NmU1NjBjMTRhNjdjNjM4NmY2Li5mYjRlM2U1NzhlZDQ0MWU3YmEwODAwNmI4YjQ4YmFhOWQ0ZmQ3
MWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMjkwLDcgKzI5
MCw3IEBAIHN0YXRpYyBFbGVtZW50KiBlbGVtZW50VW5kZXJNb3VzZShEb2N1bWVudCogZG9jdW1l
bnRVbmRlck1vdXNlLCBjb25zdCBJbnRQb2ludCYKICAgICBkb2N1bWVudFVuZGVyTW91c2UtPnJl
bmRlclZpZXcoKS0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCByZXN1bHQpOwogCiAgICAgTm9k
ZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLSAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxl
bWVudD4obm9kZSkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAg
ICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpZiAobm9kZSkKICAgICAgICAg
bm9kZSA9IG5vZGUtPmRlcHJlY2F0ZWRTaGFkb3dBbmNlc3Rvck5vZGUoKTsKQEAgLTM5Nyw3ICsz
OTcsNyBAQCBEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKERy
YWdEYXRhJiBkcmFnRGF0YSkKIAogICAgIGJvb2wgcGx1Z2luRG9jdW1lbnRBY2NlcHRzRHJhZ3Mg
PSBmYWxzZTsKIAotICAgIGlmIChkb2MgJiYgaXM8UGx1Z2luRG9jdW1lbnQ+KGRvYykpIHsKKyAg
ICBpZiAoaXM8UGx1Z2luRG9jdW1lbnQ+KGRvYykpIHsKICAgICAgICAgY29uc3QgV2lkZ2V0KiB3
aWRnZXQgPSBkb3duY2FzdDxQbHVnaW5Eb2N1bWVudD4oKmRvYykucGx1Z2luV2lkZ2V0KCk7CiAg
ICAgICAgIGNvbnN0IFBsdWdpblZpZXdCYXNlKiBwbHVnaW5WaWV3ID0gKHdpZGdldCAmJiB3aWRn
ZXQtPmlzUGx1Z2luVmlld0Jhc2UoKSkgPyB0b1BsdWdpblZpZXdCYXNlKHdpZGdldCkgOiBudWxs
cHRyOwogCkBAIC01NTIsNyArNTUyLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y2FuUHJvY2Vz
c0RyYWcoRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGlmIChkcmFnRGF0YS5jb250YWluc0ZpbGVz
KCkgJiYgYXNGaWxlSW5wdXQocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBpZiAoaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KHJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKSkpIHsKKyAgICBpZiAoaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KCpyZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpKSB7CiAgICAgICAgIGlmICghZG93bmNhc3Q8SFRNTFBs
dWdJbkVsZW1lbnQ+KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSktPmNhblByb2Nlc3NEcmFn
KCkgJiYgIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoIXJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKQpAQCAtNjM5LDEzICs2MzksMTMgQEAg
RWxlbWVudCogRHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQoY29uc3QgRnJhbWUqIHNv
dXJjZUZyYW1lLCBFbGVtZW50KiBzdGEKICAgICAgICAgfQogICAgICAgICBpZiAoZHJhZ01vZGUg
PT0gRFJBR19BVVRPKSB7CiAgICAgICAgICAgICBpZiAoKG1fZHJhZ1NvdXJjZUFjdGlvbiAmIERy
YWdTb3VyY2VBY3Rpb25JbWFnZSkKLSAgICAgICAgICAgICAgICAmJiBpczxIVE1MSW1hZ2VFbGVt
ZW50PihlbGVtZW50KQorICAgICAgICAgICAgICAgICYmIGlzPEhUTUxJbWFnZUVsZW1lbnQ+KCpl
bGVtZW50KQogICAgICAgICAgICAgICAgICYmIHNvdXJjZUZyYW1lLT5zZXR0aW5ncygpLmxvYWRz
SW1hZ2VzQXV0b21hdGljYWxseSgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGUudHlwZSA9IHN0
YXRpY19jYXN0PERyYWdTb3VyY2VBY3Rpb24+KHN0YXRlLnR5cGUgfCBEcmFnU291cmNlQWN0aW9u
SW1hZ2UpOwogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKChtX2RyYWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uTGlu
aykKLSAgICAgICAgICAgICAgICAmJiBpczxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkKKyAg
ICAgICAgICAgICAgICAmJiBpczxIVE1MQW5jaG9yRWxlbWVudD4oKmVsZW1lbnQpCiAgICAgICAg
ICAgICAgICAgJiYgZG93bmNhc3Q8SFRNTEFuY2hvckVsZW1lbnQ+KCplbGVtZW50KS5pc0xpdmVM
aW5rKCkpIHsKICAgICAgICAgICAgICAgICBzdGF0ZS50eXBlID0gc3RhdGljX2Nhc3Q8RHJhZ1Nv
dXJjZUFjdGlvbj4oc3RhdGUudHlwZSB8IERyYWdTb3VyY2VBY3Rpb25MaW5rKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApp
bmRleCAzOGNmYTcyOWViYTNlNWNhZjUyYjg1ZjA0ZGVlY2VmYzc4N2U5NWJmLi5mZTBkZDJhMWFm
Y2ExNzRlMzhlY2ExNzYzZjU5MTAxODhmNmRiNmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCkBAIC03NTksNyArNzU5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1v
dXNlUHJlc3NFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmUKICAg
ICBpZiAoZXZlbnQuaXNPdmVyV2lkZ2V0KCkgJiYgcGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9X
aWRnZXQoZXZlbnQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpczxTVkdEb2N1
bWVudD4obV9mcmFtZS5kb2N1bWVudCgpKSAmJiBkb3duY2FzdDxTVkdEb2N1bWVudD4oKm1fZnJh
bWUuZG9jdW1lbnQoKSkuem9vbUFuZFBhbkVuYWJsZWQoKSkgeworICAgIGlmIChpczxTVkdEb2N1
bWVudD4oKm1fZnJhbWUuZG9jdW1lbnQoKSkgJiYgZG93bmNhc3Q8U1ZHRG9jdW1lbnQ+KCptX2Zy
YW1lLmRvY3VtZW50KCkpLnpvb21BbmRQYW5FbmFibGVkKCkpIHsKICAgICAgICAgaWYgKGV2ZW50
LmV2ZW50KCkuc2hpZnRLZXkoKSAmJiBzaW5nbGVDbGljaykgewogICAgICAgICAgICAgbV9zdmdQ
YW4gPSB0cnVlOwogICAgICAgICAgICAgZG93bmNhc3Q8U1ZHRG9jdW1lbnQ+KCptX2ZyYW1lLmRv
Y3VtZW50KCkpLnN0YXJ0UGFuKG1fZnJhbWUudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50
LmV2ZW50KCkucG9zaXRpb24oKSkpOwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAgRnJhbWUqIEV2ZW50
SGFuZGxlcjo6c3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCiAjaWYgRU5BQkxFKENV
UlNPUl9TVVBQT1JUKQogc3RhdGljIGJvb2wgaXNTdWJtaXRJbWFnZShOb2RlKiBub2RlKQogewot
ICAgIHJldHVybiBub2RlICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKS5pc0ltYWdlQnV0dG9uKCk7CisgICAgcmV0dXJuIGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpu
b2RlKS5pc0ltYWdlQnV0dG9uKCk7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbm9kZSdz
IGVkaXRhYmxlIGJsb2NrIGlzIG5vdCBjdXJyZW50IGZvY3VzZWQgZm9yIGVkaXRpbmcKQEAgLTE3
NjAsNyArMTc2MCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybU1vdXNlCiAgICAgICAgIC8vIElmIGEg
bW91c2UgZXZlbnQgaGFuZGxlciBjaGFuZ2VzIHRoZSBpbnB1dCBlbGVtZW50IHR5cGUgdG8gb25l
IHRoYXQgaGFzIGEgd2lkZ2V0IGFzc29jaWF0ZWQsCiAgICAgICAgIC8vIHdlJ2QgbGlrZSB0byBF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCB0byBwYXNzIHRoZSBldmVudCB0byB0
aGUgd2lkZ2V0IGFuZCB0aHVzIHRoZQogICAgICAgICAvLyBldmVudCB0YXJnZXQgbm9kZSBjYW4n
dCBzdGlsbCBiZSB0aGUgc2hhZG93IG5vZGUuCi0gICAgICAgIGlmIChpczxTaGFkb3dSb290Piht
b3VzZUV2ZW50LnRhcmdldE5vZGUoKSkgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oZG93bmNhc3Q8
U2hhZG93Um9vdD4oKm1vdXNlRXZlbnQudGFyZ2V0Tm9kZSgpKS5ob3N0RWxlbWVudCgpKSkKKyAg
ICAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KCptb3VzZUV2ZW50LnRhcmdldE5vZGUoKSkgJiYgaXM8
SFRNTElucHV0RWxlbWVudD4oKmRvd25jYXN0PFNoYWRvd1Jvb3Q+KCptb3VzZUV2ZW50LnRhcmdl
dE5vZGUoKSkuaG9zdEVsZW1lbnQoKSkpCiAgICAgICAgICAgICBtb3VzZUV2ZW50ID0gbV9mcmFt
ZS5kb2N1bWVudCgpLT5wcmVwYXJlTW91c2VFdmVudChIaXRUZXN0UmVxdWVzdCgpLCBkb2N1bWVu
dFBvaW50LCBwbGF0Zm9ybU1vdXNlRXZlbnQpOwogCiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9
IG1fZnJhbWUudmlldygpOwpAQCAtMjE0MSw3ICsyMTQxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmRpc3BhdGNoRHJhZ0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFbGVtZW50
JiBkcmEKIAogc3RhdGljIGJvb2wgdGFyZ2V0SXNGcmFtZShOb2RlKiB0YXJnZXQsIEZyYW1lKiYg
ZnJhbWUpCiB7Ci0gICAgaWYgKCF0YXJnZXQgfHwgIWlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPih0
YXJnZXQpKQorICAgIGlmICghaXM8SFRNTEZyYW1lRWxlbWVudEJhc2U+KHRhcmdldCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZyYW1lID0gZG93bmNhc3Q8SFRNTEZyYW1lRWxlbWVu
dEJhc2U+KCp0YXJnZXQpLmNvbnRlbnRGcmFtZSgpOwpAQCAtMjE4Niw3ICsyMTg2LDggQEAgc3Rh
dGljIGJvb2wgaGFzRHJvcFpvbmVUeXBlKERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyLCBjb25z
dCBTdHJpbmcmIGtleXdvcmQpCiAKIHN0YXRpYyBib29sIGZpbmREcm9wWm9uZShOb2RlKiB0YXJn
ZXQsIERhdGFUcmFuc2ZlciogZGF0YVRyYW5zZmVyKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBpczxFbGVtZW50Pih0YXJnZXQpID8gZG93bmNhc3Q8RWxlbWVudD4odGFyZ2V0KSA6IHRhcmdl
dC0+cGFyZW50RWxlbWVudCgpOworICAgIEFTU0VSVCh0YXJnZXQpOworICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBpczxFbGVtZW50PigqdGFyZ2V0KSA/IGRvd25jYXN0PEVsZW1lbnQ+KHRhcmdldCkg
OiB0YXJnZXQtPnBhcmVudEVsZW1lbnQoKTsKICAgICBmb3IgKDsgZWxlbWVudDsgZWxlbWVudCA9
IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxz
ZTsKICAgICAgICAgU3RyaW5nIGRyb3Bab25lU3RyID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZSh3ZWJraXRkcm9wem9uZUF0dHIpOwpAQCAtMjIzMyw3ICsyMjM0LDcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OnVwZGF0ZURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQs
IERhdGFUcmFuc2YKICAgICBSZWZQdHI8RWxlbWVudD4gbmV3VGFyZ2V0OwogICAgIGlmIChOb2Rl
KiB0YXJnZXROb2RlID0gbW91c2VFdmVudC50YXJnZXROb2RlKCkpIHsKICAgICAgICAgLy8gRHJh
ZyBldmVudHMgc2hvdWxkIG5ldmVyIGdvIHRvIG5vbi1lbGVtZW50IG5vZGVzIChmb2xsb3dpbmcg
SUUsIGFuZCBwcm9wZXIgbW91c2VvdmVyL291dCBkaXNwYXRjaCkKLSAgICAgICAgaWYgKCFpczxF
bGVtZW50Pih0YXJnZXROb2RlKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50PigqdGFyZ2V0Tm9k
ZSkpCiAgICAgICAgICAgICBuZXdUYXJnZXQgPSB0YXJnZXROb2RlLT5wYXJlbnRPclNoYWRvd0hv
c3RFbGVtZW50KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5ld1RhcmdldCA9IGRvd25j
YXN0PEVsZW1lbnQ+KHRhcmdldE5vZGUpOwpAQCAtMjM5NCw3ICsyMzk1LDcgQEAgdm9pZCBFdmVu
dEhhbmRsZXI6OnVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKE5vZGUqIHRhcmdldE5vZGUsIGNv
bnN0IFBsYXRmb3JtTW8KICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IG1fY2FwdHVyaW5nTW91c2VF
dmVudHNFbGVtZW50LmdldCgpOwogICAgIGVsc2UgaWYgKHRhcmdldE5vZGUpIHsKICAgICAgICAg
Ly8gSWYgdGhlIHRhcmdldCBub2RlIGlzIGEgbm9uLWVsZW1lbnQsIGRpc3BhdGNoIG9uIHRoZSBw
YXJlbnQuIDxyZGFyOi8vcHJvYmxlbS80MTk2NjQ2PgotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+
KHRhcmdldE5vZGUpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCp0YXJnZXROb2RlKSkKICAg
ICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSB0YXJnZXROb2RlLT5wYXJlbnRPclNoYWRvd0hvc3RF
bGVtZW50KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pih0YXJnZXROb2RlKTsKQEAgLTM1MjMsNyArMzUyNCw3IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50
KiB1bmRlcmx5aW5nRXZlCiB7CiAgICAgLy8gUGxhdGZvcm1zIHNob3VsZCBkaWZmZXJlbnRpYXRl
IHJlYWwgY29tbWFuZHMgbGlrZSBzZWxlY3RBbGwgZnJvbSB0ZXh0IGlucHV0IGluIGRpc2d1aXNl
IChsaWtlIGluc2VydE5ld2xpbmUpLAogICAgIC8vIGFuZCBhdm9pZCBkaXNwYXRjaGluZyB0ZXh0
IGlucHV0IGV2ZW50cyBmcm9tIGtleWRvd24gZGVmYXVsdCBoYW5kbGVycy4KLSAgICBBU1NFUlQo
IXVuZGVybHlpbmdFdmVudCB8fCAhaXM8S2V5Ym9hcmRFdmVudD4odW5kZXJseWluZ0V2ZW50KSB8
fCBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqdW5kZXJseWluZ0V2ZW50KS50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleXByZXNzRXZlbnQpOworICAgIEFTU0VSVCghaXM8S2V5Ym9hcmRFdmVudD4o
dW5kZXJseWluZ0V2ZW50KSB8fCBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqdW5kZXJseWluZ0V2
ZW50KS50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOwogCiAgICAgRXZlbnRU
YXJnZXQqIHRhcmdldDsKICAgICBpZiAodW5kZXJseWluZ0V2ZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IDEzZTUxYzJjN2IzMzI0MDY1ZTkzMTI4OGQxMDIx
YTAxMDdmZDdhMjcuLmNhNDMyMDhkNmRjYzUyYWVmOTEwYzE2MTgzYjU3MjkzOTc1NDk5YTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAg
Q29udGFpbmVyTm9kZSogRm9jdXNOYXZpZ2F0aW9uU2NvcGU6OnJvb3ROb2RlKCkgY29uc3QKIEVs
ZW1lbnQqIEZvY3VzTmF2aWdhdGlvblNjb3BlOjpvd25lcigpIGNvbnN0CiB7CiAgICAgQ29udGFp
bmVyTm9kZSogcm9vdCA9IHJvb3ROb2RlKCk7Ci0gICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KHJvb3Qp
KQorICAgIGlmIChpczxTaGFkb3dSb290Pigqcm9vdCkpCiAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxTaGFkb3dSb290Pigqcm9vdCkuaG9zdEVsZW1lbnQoKTsKICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gcm9vdC0+ZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICByZXR1cm4gZnJhbWUtPm93bmVy
RWxlbWVudCgpOwpAQCAtMjI4LDcgKzIyOCw3IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6
ZmluZEZvY3VzYWJsZUVsZW1lbnREZXNjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50KEZvCiAg
ICAgLy8gVGhlIG5vZGUgd2UgZm91bmQgbWlnaHQgYmUgYSBIVE1MRnJhbWVPd25lckVsZW1lbnQs
IHNvIGRlc2NlbmQgZG93biB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGVpdGhlcjoKICAgICAvLyAx
KSBhIGZvY3VzYWJsZSBub2RlLCBvcgogICAgIC8vIDIpIHRoZSBkZWVwZXN0LW5lc3RlZCBIVE1M
RnJhbWVPd25lckVsZW1lbnQuCi0gICAgd2hpbGUgKGVsZW1lbnQgJiYgaXM8SFRNTEZyYW1lT3du
ZXJFbGVtZW50PihlbGVtZW50KSkgeworICAgIHdoaWxlIChpczxIVE1MRnJhbWVPd25lckVsZW1l
bnQ+KGVsZW1lbnQpKSB7CiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCYgb3duZXIgPSBk
b3duY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQ+KCplbGVtZW50KTsKICAgICAgICAgaWYgKCFv
d25lci5jb250ZW50RnJhbWUoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzUwLDcgKzM1MCw3
IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXliCiAKIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6
ZmluZEZvY3VzYWJsZUVsZW1lbnRBY3Jvc3NGb2N1c1Njb3BlKEZvY3VzRGlyZWN0aW9uIGRpcmVj
dGlvbiwgRm9jdXNOYXZpZ2F0aW9uU2NvcGUgc2NvcGUsIE5vZGUqIGN1cnJlbnROb2RlLCBLZXli
b2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBBU1NFUlQoIWN1cnJlbnROb2RlIHx8ICFpczxFbGVt
ZW50PihjdXJyZW50Tm9kZSkgfHwgIWlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdCgqZG93bmNhc3Q8
RWxlbWVudD4oY3VycmVudE5vZGUpLCAqZXZlbnQpKTsKKyAgICBBU1NFUlQoIWlzPEVsZW1lbnQ+
KGN1cnJlbnROb2RlKSB8fCAhaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KCpkb3duY2FzdDxFbGVt
ZW50PihjdXJyZW50Tm9kZSksICpldmVudCkpOwogICAgIEVsZW1lbnQqIGZvdW5kOwogICAgIGlm
IChjdXJyZW50Tm9kZSAmJiBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkICYmIGlz
Rm9jdXNhYmxlU2hhZG93SG9zdCgqY3VycmVudE5vZGUsICpldmVudCkpIHsKICAgICAgICAgRWxl
bWVudCogZm91bmRJbklubmVyRm9jdXNTY29wZSA9IGZpbmRGb2N1c2FibGVFbGVtZW50UmVjdXJz
aXZlbHkoZGlyZWN0aW9uLCBGb2N1c05hdmlnYXRpb25TY29wZTo6Zm9jdXNOYXZpZ2F0aW9uU2Nv
cGVPd25lZEJ5U2hhZG93SG9zdChjdXJyZW50Tm9kZSksIDAsIGV2ZW50KTsKQEAgLTQxMCw3ICs0
MTAsNyBAQCBFbGVtZW50KiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRFbGVtZW50V2l0aEV4YWN0VGFi
SW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleAogICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNp
dmUgb2Ygc3RhcnQKICAgICB1c2luZyBuYW1lc3BhY2UgTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDsK
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IGRpcmVjdGlvbiA9PSBG
b2N1c0RpcmVjdGlvbkZvcndhcmQgPyBuZXh0SW5TY29wZShub2RlKSA6IHByZXZpb3VzSW5TY29w
ZShub2RlKSkgewotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAo
IWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBFbGVt
ZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAgICAgICBpZiAoc2hv
dWxkVmlzaXQoZWxlbWVudCwgKmV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KGVsZW1lbnQsICpl
dmVudCkgPT0gdGFiSW5kZXgpCkBAIC00MjUsNyArNDI1LDcgQEAgc3RhdGljIEVsZW1lbnQqIG5l
eHRFbGVtZW50V2l0aEdyZWF0ZXJUYWJJbmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBL
ZXlib2EKICAgICBpbnQgd2lubmluZ1RhYkluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaG9y
dD46Om1heCgpICsgMTsKICAgICBFbGVtZW50KiB3aW5uZXIgPSBudWxscHRyOwogICAgIGZvciAo
Tm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6
bmV4dEluU2NvcGUobm9kZSkpIHsKLSAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAg
ICAgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAg
ICAgaWYgKHNob3VsZFZpc2l0KGVsZW1lbnQsIGV2ZW50KSAmJiBlbGVtZW50LnRhYkluZGV4KCkg
PiB0YWJJbmRleCAmJiBlbGVtZW50LnRhYkluZGV4KCkgPCB3aW5uaW5nVGFiSW5kZXgpIHsKQEAg
LTQ0Myw3ICs0NDMsNyBAQCBzdGF0aWMgRWxlbWVudCogcHJldmlvdXNFbGVtZW50V2l0aExvd2Vy
VGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5YgogICAgIGludCB3aW5uaW5n
VGFiSW5kZXggPSAwOwogICAgIEVsZW1lbnQqIHdpbm5lciA9IG51bGxwdHI7CiAgICAgZm9yIChO
b2RlKiBub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpw
cmV2aW91c0luU2NvcGUobm9kZSkpIHsKLSAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkK
KyAgICAgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAg
ICAgICAgaW50IGN1cnJlbnRUYWJJbmRleCA9IGFkanVzdGVkVGFiSW5kZXgoZWxlbWVudCwgZXZl
bnQpOwpAQCAtNDY0LDcgKzQ2NCw3IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6bmV4dEZv
Y3VzYWJsZUVsZW1lbnQoRm9jdXNOYXZpZ2F0aW9uU2NvcGUgc2NvcGUsIE5vZGUqCiAgICAgICAg
IC8vIElmIGEgbm9kZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBub3JtYWwgdGFiYmluZyBjeWNsZSwg
dGhlIG5leHQgZm9jdXNhYmxlIG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0cmVlIG9yZGVyCiAgICAg
ICAgIGlmICh0YWJJbmRleCA8IDApIHsKICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IG5l
eHRJblNjb3BlKHN0YXJ0KTsgbm9kZTsgbm9kZSA9IG5leHRJblNjb3BlKG5vZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgICAgICAgICBpZiAo
IWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsK
ICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkVmlzaXQoZWxlbWVudCwgKmV2ZW50KSAmJiBhZGp1
c3RlZFRhYkluZGV4KGVsZW1lbnQsICpldmVudCkgPj0gMCkKQEAgLTUxNiw3ICs1MTYsNyBAQCBF
bGVtZW50KiBGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNhYmxlRWxlbWVudChGb2N1c05h
dmlnYXRpb25TY29wZSBzY29wZSwgTgogICAgIC8vIEhvd2V2ZXIsIGlmIGEgbm9kZSBpcyBleGNs
dWRlZCBmcm9tIHRoZSBub3JtYWwgdGFiYmluZyBjeWNsZSwgdGhlIHByZXZpb3VzIGZvY3VzYWJs
ZSBub2RlIGlzIGRldGVybWluZWQgYnkgdHJlZSBvcmRlcgogICAgIGlmIChzdGFydGluZ1RhYklu
ZGV4IDwgMCkgewogICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydGluZ05vZGU7IG5vZGU7
IG5vZGUgPSBwcmV2aW91c0luU2NvcGUobm9kZSkpIHsKLSAgICAgICAgICAgIGlmICghaXM8RWxl
bWVudD4obm9kZSkpCisgICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgICAgICBpZiAoc2hvdWxkVmlzaXQoZWxlbWVu
dCwgKmV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KGVsZW1lbnQsICpldmVudCkgPj0gMCkKQEAg
LTU3NSw3ICs1NzUsNyBAQCBzdGF0aWMgdm9pZCBjbGVhclNlbGVjdGlvbklmTmVlZGVkKEZyYW1l
KiBvbGRGb2N1c2VkRnJhbWUsIEZyYW1lKiBuZXdGb2N1c2VkRnJhbQogICAgICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yTm9kZSA9IHJv
b3QtPmRlcHJlY2F0ZWRTaGFkb3dBbmNlc3Rvck5vZGUoKSkgewotICAgICAgICAgICAgICAgIGlm
ICghaXM8SFRNTElucHV0RWxlbWVudD4oc2hhZG93QW5jZXN0b3JOb2RlKSAmJiAhaXM8SFRNTFRl
eHRBcmVhRWxlbWVudD4oc2hhZG93QW5jZXN0b3JOb2RlKSkKKyAgICAgICAgICAgICAgICBpZiAo
IWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpzaGFkb3dBbmNlc3Rvck5vZGUpICYmICFpczxIVE1MVGV4
dEFyZWFFbGVtZW50Pigqc2hhZG93QW5jZXN0b3JOb2RlKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04NzYsNyArODc2LDcgQEAgYm9v
bCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkoRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uLCBLZXlib2EKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGZvY3Vz
ZWREb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBOb2RlKiBjb250YWluZXIgPSBmb2N1
c2VkRG9jdW1lbnQ7CiAKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRhaW5lcikpCisgICAgaWYg
KGlzPERvY3VtZW50PigqY29udGFpbmVyKSkKICAgICAgICAgZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250YWluZXIpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAg
Ly8gRmlndXJlIG91dCB0aGUgc3RhcnRpbmcgcmVjdC4KQEAgLTg4NSw3ICs4ODUsNyBAQCBib29s
IEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVjdGlv
biBkaXJlY3Rpb24sIEtleWJvYQogICAgICAgICBpZiAoIWhhc09mZnNjcmVlblJlY3QoZm9jdXNl
ZEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlRW5jbG9zaW5n
Qm94T3JQYXJlbnRGcmFtZUZvck5vZGVJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGZvY3VzZWRFbGVt
ZW50KTsKICAgICAgICAgICAgIHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3Jk
aW5hdGVzKGZvY3VzZWRFbGVtZW50LCB0cnVlIC8qIGlnbm9yZSBib3JkZXIgKi8pOwotICAgICAg
ICB9IGVsc2UgaWYgKGlzPEhUTUxBcmVhRWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXM8SFRNTEFyZWFFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpKSB7CiAg
ICAgICAgICAgICBIVE1MQXJlYUVsZW1lbnQmIGFyZWEgPSBkb3duY2FzdDxIVE1MQXJlYUVsZW1l
bnQ+KCpmb2N1c2VkRWxlbWVudCk7CiAgICAgICAgICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxl
RW5jbG9zaW5nQm94T3JQYXJlbnRGcmFtZUZvck5vZGVJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGFy
ZWEuaW1hZ2VFbGVtZW50KCkpOwogICAgICAgICAgICAgc3RhcnRpbmdSZWN0ID0gdmlydHVhbFJl
Y3RGb3JBcmVhRWxlbWVudEFuZERpcmVjdGlvbigmYXJlYSwgZGlyZWN0aW9uKTsKQEAgLTkwMCw3
ICs5MDAsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxs
eShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYQogICAgICAgICBjb25zdW1lZCA9IGFk
dmFuY2VGb2N1c0RpcmVjdGlvbmFsbHlJbkNvbnRhaW5lcihjb250YWluZXIsIHN0YXJ0aW5nUmVj
dCwgZGlyZWN0aW9uLCBldmVudCk7CiAgICAgICAgIHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5B
YnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnRhaW5lciwgdHJ1ZSAvKiBpZ25vcmUgYm9yZGVyICovKTsK
ICAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVG
b3JOb2RlSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBjb250YWluZXIpOwotICAgICAgICBpZiAoY29u
dGFpbmVyICYmIGlzPERvY3VtZW50Pihjb250YWluZXIpKQorICAgICAgICBpZiAoaXM8RG9jdW1l
bnQ+KGNvbnRhaW5lcikpCiAgICAgICAgICAgICBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRhaW5l
cikudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgfSB3aGlsZSAo
IWNvbnN1bWVkICYmIGNvbnRhaW5lcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggYTljZDNi
YTg4NmNlNTNmNGEyZjdiNGNmMThiZmNhYjgyMzY5NzlkZS4uMmVmZmUxZDBkNDNhNjM5MjFmOGFh
ZjNmNDBjYTFiZWY0Mjg4MTNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTM5MCwxMiArMzkw
LDEyIEBAIFN0cmluZyBGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50CiAgICAgTm9kZSogbjsKICAgICBmb3IgKG4g
PSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhlbGVtZW50KTsgbiAmJiBsZW5ndGhTZWFyY2hlZCA8
IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQ7IG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhuKSkg
ewogICAgICAgICAvLyBXZSBoaXQgYW5vdGhlciBmb3JtIGVsZW1lbnQgb3IgdGhlIHN0YXJ0IG9m
IHRoZSBmb3JtIC0gYmFpbCBvdXQKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtRWxlbWVudD4obikg
fHwgaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obikpCisgICAgICAgIGlmIChpczxIVE1MRm9y
bUVsZW1lbnQ+KCpuKSB8fCBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbikpCiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBpZiAobi0+aGFzVGFnTmFtZSh0ZFRhZykgJiYgIXN0YXJ0
aW5nVGFibGVDZWxsKQogICAgICAgICAgICAgc3RhcnRpbmdUYWJsZUNlbGwgPSBkb3duY2FzdDxI
VE1MVGFibGVDZWxsRWxlbWVudD4obik7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEhUTUxUYWJsZVJv
d0VsZW1lbnQ+KG4pICYmIHN0YXJ0aW5nVGFibGVDZWxsKSB7CisgICAgICAgIGVsc2UgaWYgKGlz
PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KCpuKSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgewogICAgICAg
ICAgICAgU3RyaW5nIHJlc3VsdCA9IHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChyZWdFeHAsIHN0
YXJ0aW5nVGFibGVDZWxsLCByZXN1bHREaXN0YW5jZSk7CiAgICAgICAgICAgICBpZiAoIXJlc3Vs
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0SXNJbkNlbGxBYm92ZSkK
QEAgLTk2OCw3ICs5NjgsNyBAQCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3Jz
KGZsb2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogCiAgICAgLy8gUmVz
cGVjdCBTVkdzIHpvb21BbmRQYW49ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBzdGFuZGFsb25lIFNW
RyBkb2N1bWVudHMuCiAgICAgLy8gRklYTUU6IEhvdyB0byBoYW5kbGUgY29tcG91bmQgZG9jdW1l
bnRzICsgem9vbUFuZFBhbj0iZGlzYWJsZWQiPyBOZWVkcyBTVkcgV0cgY2xhcmlmaWNhdGlvbi4K
LSAgICBpZiAoaXM8U1ZHRG9jdW1lbnQ+KGRvY3VtZW50KSAmJiAhZG93bmNhc3Q8U1ZHRG9jdW1l
bnQ+KCpkb2N1bWVudCkuem9vbUFuZFBhbkVuYWJsZWQoKSkKKyAgICBpZiAoaXM8U1ZHRG9jdW1l
bnQ+KCpkb2N1bWVudCkgJiYgIWRvd25jYXN0PFNWR0RvY3VtZW50PigqZG9jdW1lbnQpLnpvb21B
bmRQYW5FbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3BhZ2Vab29tRmFj
dG9yICE9IHBhZ2Vab29tRmFjdG9yKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXgg
YmNiNTA0NGIxNTY4NGUyNDI3OTlkNzg5ZTJhZWM0M2NhYzY1MjFlYy4uNzhlMjc1ZWMwMWQyNzk3
MTc2NWQzMzQ4NWQzYjkzOTdhZjljZDM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApA
QCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgRnJhbWVWaWV3Ojppbml0KCkKIAogICAgIC8vIFByb3Bh
Z2F0ZSB0aGUgbWFyZ2lud2lkdGgvaGVpZ2h0IGFuZCBzY3JvbGxpbmcgbW9kZXMgdG8gdGhlIHZp
ZXcuCiAgICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gZnJhbWUoKS5vd25lckVsZW1lbnQoKTsK
LSAgICBpZiAob3duZXJFbGVtZW50ICYmIGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVs
ZW1lbnQpKSB7CisgICAgaWYgKGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1lbnQp
KSB7CiAgICAgICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlJiBmcmFtZUVsZW1lbnQgPSBkb3duY2Fz
dDxIVE1MRnJhbWVFbGVtZW50QmFzZT4oKm93bmVyRWxlbWVudCk7CiAgICAgICAgIGlmIChmcmFt
ZUVsZW1lbnQuc2Nyb2xsaW5nTW9kZSgpID09IFNjcm9sbGJhckFsd2F5c09mZikKICAgICAgICAg
ICAgIHNldENhbkhhdmVTY3JvbGxiYXJzKGZhbHNlKTsKQEAgLTE5NjAsNyArMTk2MCw3IEBAIGJv
b2wgRnJhbWVWaWV3OjpzY3JvbGxUb0FuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgLy8g
U2V0dGluZyB0byBudWxsIHdpbGwgY2xlYXIgdGhlIGN1cnJlbnQgdGFyZ2V0LgogICAgIGZyYW1l
KCkuZG9jdW1lbnQoKS0+c2V0Q1NTVGFyZ2V0KGFuY2hvckVsZW1lbnQpOwogCi0gICAgaWYgKGlz
PFNWR0RvY3VtZW50PihmcmFtZSgpLmRvY3VtZW50KCkpKSB7CisgICAgaWYgKGlzPFNWR0RvY3Vt
ZW50PigqZnJhbWUoKS5kb2N1bWVudCgpKSkgewogICAgICAgICBpZiAoU1ZHU1ZHRWxlbWVudCog
c3ZnID0gZG93bmNhc3Q8U1ZHRG9jdW1lbnQ+KCpmcmFtZSgpLmRvY3VtZW50KCkpLnJvb3RFbGVt
ZW50KCkpIHsKICAgICAgICAgICAgIHN2Zy0+c2V0dXBJbml0aWFsVmlldyhuYW1lLCBhbmNob3JF
bGVtZW50KTsKICAgICAgICAgICAgIGlmICghYW5jaG9yRWxlbWVudCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHAKaW5kZXggNTRjYTk2Nzk4MGRiN2M1NjMxNGQ0ZGFiYzQxYmFm
YmY5ZmIyNDk5Yy4uOGQ0NzU4YTZlNzQxNDNiZmU0MjVmYWMzYWJlYWNjYzIzYTBkZjg2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTIyMiw3ICsyMjIsNyBAQCB2
b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtZSogZnJhbWUpCiAKICAgICBm
b3IgKFZlY3RvcjxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBub2Rlcy5iZWdpbigpOyBpdGVyICE9
IG5vZGVzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOwotICAg
ICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpu
b2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQg
PSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uY3BwCmluZGV4IDI4ZDlkM2Q1MDI3YmM5NmRiN2E5M2I1ZDgxYzlhM2JjOWYyZDFj
NGEuLmIxNzc5NjhmN2IyMTgzMjQ3ZThkM2NkNzEyODliNjAzYmFiNDdiMTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC02MywxMCArNjMsOSBAQCBGb2N1
c0NhbmRpZGF0ZTo6Rm9jdXNDYW5kaWRhdGUoTm9kZSogbm9kZSwgRm9jdXNEaXJlY3Rpb24gZGly
ZWN0aW9uKQogICAgICwgaXNPZmZzY3JlZW4odHJ1ZSkKICAgICAsIGlzT2Zmc2NyZWVuQWZ0ZXJT
Y3JvbGxpbmcodHJ1ZSkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlz
RWxlbWVudE5vZGUoKSk7CisgICAgQVNTRVJUKGlzPEVsZW1lbnQ+KG5vZGUpKTsKIAotICAgIGlm
IChpczxIVE1MQXJlYUVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxBcmVhRWxlbWVu
dD4oKm5vZGUpKSB7CiAgICAgICAgIEhUTUxBcmVhRWxlbWVudCYgYXJlYSA9IGRvd25jYXN0PEhU
TUxBcmVhRWxlbWVudD4oKm5vZGUpOwogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9
IGFyZWEuaW1hZ2VFbGVtZW50KCk7CiAgICAgICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5yZW5k
ZXJlcigpKQpAQCAtMzY2LDcgKzM2NSw3IEBAIGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUq
IGZyYW1lLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiBib29sIHNjcm9sbEluRGlyZWN0aW9u
KE5vZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIEFTU0VS
VChjb250YWluZXIpOwotICAgIGlmIChpczxEb2N1bWVudD4oY29udGFpbmVyKSkKKyAgICBpZiAo
aXM8RG9jdW1lbnQ+KCpjb250YWluZXIpKQogICAgICAgICByZXR1cm4gc2Nyb2xsSW5EaXJlY3Rp
b24oZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250YWluZXIpLmZyYW1lKCksIGRpcmVjdGlvbik7CiAK
ICAgICBpZiAoIWNvbnRhaW5lci0+cmVuZGVyQm94KCkpCkBAIC00MzUsMTEgKzQzNCwxMSBAQCBO
b2RlKiBzY3JvbGxhYmxlRW5jbG9zaW5nQm94T3JQYXJlbnRGcmFtZUZvck5vZGVJbkRpcmVjdGlv
bihGb2N1c0RpcmVjdGlvbiBkaXJlYwogICAgIEFTU0VSVChub2RlKTsKICAgICBOb2RlKiBwYXJl
bnQgPSBub2RlOwogICAgIGRvIHsKLSAgICAgICAgaWYgKGlzPERvY3VtZW50PihwYXJlbnQpKQor
ICAgICAgICBpZiAoaXM8RG9jdW1lbnQ+KCpwYXJlbnQpKQogICAgICAgICAgICAgcGFyZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpwYXJlbnQpLmRvY3VtZW50KCkuZnJhbWUoKS0+b3duZXJFbGVt
ZW50KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50
Tm9kZSgpOwotICAgIH0gd2hpbGUgKHBhcmVudCAmJiAhY2FuU2Nyb2xsSW5EaXJlY3Rpb24ocGFy
ZW50LCBkaXJlY3Rpb24pICYmICFpczxEb2N1bWVudD4ocGFyZW50KSk7CisgICAgfSB3aGlsZSAo
cGFyZW50ICYmICFjYW5TY3JvbGxJbkRpcmVjdGlvbihwYXJlbnQsIGRpcmVjdGlvbikgJiYgIWlz
PERvY3VtZW50PigqcGFyZW50KSk7CiAKICAgICByZXR1cm4gcGFyZW50OwogfQpAQCAtNDQ4LDEw
ICs0NDcsMTAgQEAgYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihjb25zdCBOb2RlKiBjb250YWlu
ZXIsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBBU1NFUlQoY29udGFpbmVyKTsK
IAotICAgIGlmIChpczxIVE1MU2VsZWN0RWxlbWVudD4oY29udGFpbmVyKSkKKyAgICBpZiAoaXM8
SFRNTFNlbGVjdEVsZW1lbnQ+KCpjb250YWluZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRhaW5lcikpCisgICAgaWYgKGlzPERvY3VtZW50Pigq
Y29udGFpbmVyKSkKICAgICAgICAgcmV0dXJuIGNhblNjcm9sbEluRGlyZWN0aW9uKGRvd25jYXN0
PERvY3VtZW50PigqY29udGFpbmVyKS5mcmFtZSgpLCBkaXJlY3Rpb24pOwogCiAgICAgaWYgKCFp
c1Njcm9sbGFibGVOb2RlKGNvbnRhaW5lcikpCkBAIC01MjAsNyArNTE5LDcgQEAgTGF5b3V0UmVj
dCBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhOb2RlKiBub2RlLCBib29sIGlnbm9yZUJv
cmRlcikKIHsKICAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpICYmICFub2RlLT5k
b2N1bWVudCgpLnZpZXcoKS0+bmVlZHNMYXlvdXQoKSk7CiAKLSAgICBpZiAoaXM8RG9jdW1lbnQ+
KG5vZGUpKQorICAgIGlmIChpczxEb2N1bWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4gZnJh
bWVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGRvd25jYXN0PERvY3VtZW50Pigqbm9kZSkuZnJh
bWUoKSk7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gcmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyhu
b2RlLT5kb2N1bWVudCgpLmZyYW1lKCksIG5vZGUtPmJvdW5kaW5nQm94KCkpOwogCkBAIC02MDcs
NyArNjA2LDcgQEAgYm9vbCBhcmVFbGVtZW50c09uU2FtZUxpbmUoY29uc3QgRm9jdXNDYW5kaWRh
dGUmIGZpcnN0Q2FuZGlkYXRlLCBjb25zdCBGb2N1c0NhbmQKICAgICBpZiAoIWZpcnN0Q2FuZGlk
YXRlLnJlY3QuaW50ZXJzZWN0cyhzZWNvbmRDYW5kaWRhdGUucmVjdCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChpczxIVE1MQXJlYUVsZW1lbnQ+KGZpcnN0Q2FuZGlkYXRlLmZv
Y3VzYWJsZU5vZGUpIHx8IGlzPEhUTUxBcmVhRWxlbWVudD4oc2Vjb25kQ2FuZGlkYXRlLmZvY3Vz
YWJsZU5vZGUpKQorICAgIGlmIChpczxIVE1MQXJlYUVsZW1lbnQ+KCpmaXJzdENhbmRpZGF0ZS5m
b2N1c2FibGVOb2RlKSB8fCBpczxIVE1MQXJlYUVsZW1lbnQ+KCpzZWNvbmRDYW5kaWRhdGUuZm9j
dXNhYmxlTm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghZmlyc3RDYW5k
aWRhdGUudmlzaWJsZU5vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVySW5saW5lKCkgfHwgIXNlY29u
ZENhbmRpZGF0ZS52aXNpYmxlTm9kZS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggOWM4OTQ0M2RmMGVkOTE1M2JhMDgzZWE3
ZDgxOWJlMWQwY2NhMjU3Zi4uZGQ5NDNlYjQ0MGQ0MTYyOGM2NTU3ZTI5MzMxYjQyYjVhMzI1MzEx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTM1MSw3ICszNTEsNyBAQCBz
dGF0aWMgTm9kZSogYW5jZXN0b3JSZXNwb25kaW5nVG9DbGlja0V2ZW50cyhjb25zdCBIaXRUZXN0
UmVzdWx0JiBoaXRUZXN0UmVzdWx0LAogICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGludGVyZXN0
ZWQgYWJvdXQgdGhlIGZyYW1lLCB1c2UgaXQuCiAgICAgICAgICAgICBpZiAobm9kZUJvdW5kcykg
ewogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBjaGVjayB0byBzZWUgd2hldGhlciB0aGlz
IG5vZGUgaXMgYW4gYXJlYSBlbGVtZW50LiAgVGhlIG9ubHkgd2F5IHRoaXMgY2FuIGhhcHBlbiBp
cyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjaGVjay4KLSAgICAgICAgICAgICAgICBpZiAobm9kZSA9
PSBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpICYmIG5vZGUgIT0gaGl0VGVzdFJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKSAmJiBpczxIVE1MQXJlYUVsZW1lbnQ+KG5vZGUpKQorICAgICAgICAg
ICAgICAgIGlmIChub2RlID09IGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSAhPSBo
aXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpICYmIGlzPEhUTUxBcmVhRWxlbWVudD4o
Km5vZGUpKQogICAgICAgICAgICAgICAgICAgICAqbm9kZUJvdW5kcyA9IHNuYXBwZWRJbnRSZWN0
KGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4oKm5vZGUpLmNvbXB1dGVSZWN0KGhpdFRlc3RSZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPnJlbmRlcmVyKCkpKTsKICAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAgICpu
b2RlQm91bmRzID0gbm9kZS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4
IDVmZDNiYjU0MGYwMzVmNjcyNjE1MTEyMTQ4ODgzYzQyZjE0YzBhYzYuLmNjNmE0YjU0NTk4NDNk
ZjA3NjRiYjRhMDlkOTFlOTg4NGUyZDk0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBGb3JtRGF0YTo6
YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMoY29uc3QgRm9ybURhdGFMaXN0JiBsaXN0LCBjb25zdCBU
ZXh0RW5jb2QKICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHR5cGUgaXMgYmxvYiwgdGhl
biB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKICAgICAgICAgICAgIGlmICh2
YWx1ZS5ibG9iKCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgICAg
ICAgICBpZiAoaXM8RmlsZT4odmFsdWUuYmxvYigpKSkgeworICAgICAgICAgICAgICAgIGlmIChp
czxGaWxlPigqdmFsdWUuYmxvYigpKSkgewogICAgICAgICAgICAgICAgICAgICBGaWxlJiBmaWxl
ID0gZG93bmNhc3Q8RmlsZT4oKnZhbHVlLmJsb2IoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5h
bWUgPSBmaWxlLm5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNh
dGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxh
Y2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBGb3Jt
RGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMoY29uc3QgRm9ybURhdGFMaXN0JiBsaXN0LCBj
b25zdCBUZXh0RW5jb2QKICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5CiAgICAgICAgICAgICBh
cHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwogICAgICAgICAgICAgaWYg
KHZhbHVlLmJsb2IoKSkgewotICAgICAgICAgICAgICAgIGlmIChpczxGaWxlPih2YWx1ZS5ibG9i
KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzPEZpbGU+KCp2YWx1ZS5ibG9iKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIEZpbGUmIGZpbGUgPSBkb3duY2FzdDxGaWxlPigqdmFsdWUuYmxv
YigpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGFkZCB0aGUgZmlsZSBpZiB0aGUg
cGF0aCBpcyBlbXB0eS4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlLnBhdGgoKS5pc0Vt
cHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXgg
NzIxYmQ1OGIwZWQ2ODZlZjA0ZmYyNzI2MTExZDhhM2QyODNmYjk0OS4uZmY4NGY2NzEyNDIwNTE2
ZDViMWRmODZlOWQ5ZmNiMzEzMTVjNzIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmNwcApAQCAtMTMxLDE0ICsxMzEsMTQgQEAgdm9pZCBIaXRUZXN0UmVzdWx0
OjpzZXRUb05vblNoYWRvd0FuY2VzdG9yKCkKIAogdm9pZCBIaXRUZXN0UmVzdWx0OjpzZXRJbm5l
ck5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZSAmJiBpczxQc2V1ZG9FbGVtZW50Pihu
b2RlKSkKKyAgICBpZiAoaXM8UHNldWRvRWxlbWVudD4obm9kZSkpCiAgICAgICAgIG5vZGUgPSBk
b3duY2FzdDxQc2V1ZG9FbGVtZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKTsKICAgICBtX2lubmVy
Tm9kZSA9IG5vZGU7CiB9CiAgICAgCiB2b2lkIEhpdFRlc3RSZXN1bHQ6OnNldElubmVyTm9uU2hh
cmVkTm9kZShOb2RlKiBub2RlKQogewotICAgIGlmIChub2RlICYmIGlzPFBzZXVkb0VsZW1lbnQ+
KG5vZGUpKQorICAgIGlmIChpczxQc2V1ZG9FbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9
IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpub2RlKS5ob3N0RWxlbWVudCgpOwogICAgIG1faW5u
ZXJOb25TaGFyZWROb2RlID0gbm9kZTsKIH0KQEAgLTIyMyw3ICsyMjMsNyBAQCBTdHJpbmcgSGl0
VGVzdFJlc3VsdDo6dGl0bGUoVGV4dERpcmVjdGlvbiYgZGlyKSBjb25zdAogICAgIC8vIEZpbmQg
dGhlIHRpdGxlIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBET00gbm9kZS4KICAgICAvLyBGb3Ig
PGFyZWE+IHRhZ3MgaW4gaW1hZ2UgbWFwcywgd2FsayB0aGUgdHJlZSBmb3IgdGhlIDxhcmVhPiwg
bm90IHRoZSA8aW1nPiB1c2luZyBpdC4KICAgICBmb3IgKE5vZGUqIHRpdGxlTm9kZSA9IG1faW5u
ZXJOb2RlLmdldCgpOyB0aXRsZU5vZGU7IHRpdGxlTm9kZSA9IHRpdGxlTm9kZS0+cGFyZW50Tm9k
ZSgpKSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50Pih0aXRsZU5vZGUpKSB7CisgICAgICAgIGlm
IChpczxFbGVtZW50PigqdGl0bGVOb2RlKSkgewogICAgICAgICAgICAgRWxlbWVudCYgdGl0bGVF
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKnRpdGxlTm9kZSk7CiAgICAgICAgICAgICBTdHJp
bmcgdGl0bGUgPSB0aXRsZUVsZW1lbnQudGl0bGUoKTsKICAgICAgICAgICAgIGlmICghdGl0bGUu
aXNFbXB0eSgpKSB7CkBAIC0yMzksNyArMjM5LDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRp
dGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKIFN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5l
clRleHRJZlRydW5jYXRlZChUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiB7CiAgICAgZm9yIChO
b2RlKiB0cnVuY2F0ZWROb2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7IHRydW5jYXRlZE5vZGU7IHRy
dW5jYXRlZE5vZGUgPSB0cnVuY2F0ZWROb2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYg
KCFpczxFbGVtZW50Pih0cnVuY2F0ZWROb2RlKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pigq
dHJ1bmNhdGVkTm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoYXV0
byByZW5kZXJlciA9IGRvd25jYXN0PEVsZW1lbnQ+KCp0cnVuY2F0ZWROb2RlKS5yZW5kZXJlcigp
KSB7CkBAIC0zNjMsNyArMzYzLDcgQEAgYm9vbCBIaXRUZXN0UmVzdWx0OjptZWRpYVN1cHBvcnRz
RnVsbHNjcmVlbigpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIEhUTUxNZWRpYUVs
ZW1lbnQqIG1lZGlhRWx0KG1lZGlhRWxlbWVudCgpKTsKLSAgICByZXR1cm4gKG1lZGlhRWx0ICYm
IGlzPEhUTUxWaWRlb0VsZW1lbnQ+KG1lZGlhRWx0KSAmJiBtZWRpYUVsdC0+c3VwcG9ydHNGdWxs
c2NyZWVuKCkpOworICAgIHJldHVybiBpczxIVE1MVmlkZW9FbGVtZW50PihtZWRpYUVsdCkgJiYg
bWVkaWFFbHQtPnN1cHBvcnRzRnVsbHNjcmVlbigpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CiAjZW5kaWYKQEAgLTQyNSw3ICs0MjUsNyBAQCB2b2lkIEhpdFRlc3RSZXN1bHQ6OmVudGVyRnVs
bHNjcmVlbkZvclZpZGVvKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KHRoaXMtPm1lZGlhRWxlbWVudCgpKTsKLSAgICBpZiAo
bWVkaWFFbGVtZW50ICYmIGlzPEhUTUxWaWRlb0VsZW1lbnQ+KG1lZGlhRWxlbWVudCkpIHsKKyAg
ICBpZiAoaXM8SFRNTFZpZGVvRWxlbWVudD4obWVkaWFFbGVtZW50KSkgewogICAgICAgICBIVE1M
VmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50Pigq
bWVkaWFFbGVtZW50KTsKICAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQuaXNGdWxsc2NyZWVuKCkg
JiYgbWVkaWFFbGVtZW50LT5zdXBwb3J0c0Z1bGxzY3JlZW4oKSkgewogICAgICAgICAgICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1
cmUpOwpAQCAtNDgzLDcgKzQ4Myw3IEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6bWVkaWFJc1ZpZGVv
KCkgY29uc3QKIHsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQq
IG1lZGlhRWx0ID0gbWVkaWFFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBpczxIVE1MVmlkZW9F
bGVtZW50PihtZWRpYUVsdCk7CisgICAgICAgIHJldHVybiBpczxIVE1MVmlkZW9FbGVtZW50Pigq
bWVkaWFFbHQpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNjc2LDcgKzY3Niw3
IEBAIEVsZW1lbnQqIEhpdFRlc3RSZXN1bHQ6OmlubmVyRWxlbWVudCgpIGNvbnN0CiAgICAgTm9k
ZSogbm9kZSA9IG1faW5uZXJOb2RlLmdldCgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxFbGVt
ZW50Pigqbm9kZSkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAg
ICByZXR1cm4gbm9kZS0+cGFyZW50RWxlbWVudCgpOwogfQpAQCAtNjg2LDcgKzY4Niw3IEBAIEVs
ZW1lbnQqIEhpdFRlc3RSZXN1bHQ6OmlubmVyTm9uU2hhcmVkRWxlbWVudCgpIGNvbnN0CiAgICAg
Tm9kZSogbm9kZSA9IG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpOwogICAgIGlmICghbm9kZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQorICAg
IGlmIChpczxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50
Pihub2RlKTsKICAgICByZXR1cm4gbm9kZS0+cGFyZW50RWxlbWVudCgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCAzZmI4NGQ4MjFmYzM2
MDZhODQzODJjMmNlMjMzNmY5MzY5ZjRkYTY0Li5jNzM3NzE0MDc3MmU3ODRjZWU5M2RiYzM0NGUx
ZTFhZTZhNWFjYmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcApAQCAtMzU2Nyw3ICszNTY3LDcgQEAgaW5saW5lIHN0YXRpYyBib29sIHJlc2l6ZVRl
eHRQZXJtaXR0ZWQoUmVuZGVyT2JqZWN0KiByZW5kZXIpCiAgICAgYXV0byByZW5kZXJlciA9IHJl
bmRlci0+cGFyZW50KCk7CiAgICAgd2hpbGUgKHJlbmRlcmVyKSB7CiAgICAgICAgIC8vIEdldCB0
aGUgZmlyc3Qgbm9uLXNoYWRvdyBIVE1MRWxlbWVudCBhbmQgc2VlIGlmIGl0J3MgYW4gaW5wdXQu
Ci0gICAgICAgIGlmIChyZW5kZXJlci0+ZWxlbWVudCgpICYmIGlzPEhUTUxFbGVtZW50PihyZW5k
ZXJlci0+ZWxlbWVudCgpKSAmJiAhcmVuZGVyZXItPmVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUo
KSkgeworICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpICYm
ICFyZW5kZXJlci0+ZWxlbWVudCgpLT5pc0luU2hhZG93VHJlZSgpKSB7CiAgICAgICAgICAgICBj
b25zdCBIVE1MRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PigqcmVuZGVy
ZXItPmVsZW1lbnQoKSk7CiAgICAgICAgICAgICByZXR1cm4gIWlzPEhUTUxJbnB1dEVsZW1lbnQ+
KGVsZW1lbnQpICYmICFpczxIVE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAxM2ExYTRkNzdhZjdl
ZTVlNzhlMDk5MjlhM2Y3OWE0MzJiY2VmOWZhLi5lMWRlNDIwNzZmMTNjMzRiNzg4NjA5NDVlNmE4
MjFmYzFhNWY4Y2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAt
MjQ3OCw3ICsyNDc4LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnNpemVzTG9naWNhbFdpZHRoVG9GaXRD
b250ZW50KFNpemVUeXBlIHdpZHRoVHlwZSkgY29uc3QKICAgICAvLyBzdHJldGNoaW5nIGNvbHVt
biBmbGV4Ym94LgogICAgIC8vIEZJWE1FOiBUaGluayBhYm91dCBibG9jay1mbG93IGhlcmUuCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NDczCi0gICAg
aWYgKGxvZ2ljYWxXaWR0aC50eXBlKCkgPT0gQXV0byAmJiAhaXNTdHJldGNoaW5nQ29sdW1uRmxl
eEl0ZW0oKnRoaXMpICYmIGVsZW1lbnQoKSAmJiAoaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVu
dCgpKSB8fCBpczxIVE1MU2VsZWN0RWxlbWVudD4oZWxlbWVudCgpKSB8fCBpczxIVE1MQnV0dG9u
RWxlbWVudD4oZWxlbWVudCgpKSB8fCBpczxIVE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50KCkp
IHx8IGlzPEhUTUxMZWdlbmRFbGVtZW50PihlbGVtZW50KCkpKSkKKyAgICBpZiAobG9naWNhbFdp
ZHRoLnR5cGUoKSA9PSBBdXRvICYmICFpc1N0cmV0Y2hpbmdDb2x1bW5GbGV4SXRlbSgqdGhpcykg
JiYgZWxlbWVudCgpICYmIChpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCgpKSB8fCBpczxI
VE1MU2VsZWN0RWxlbWVudD4oKmVsZW1lbnQoKSkgfHwgaXM8SFRNTEJ1dHRvbkVsZW1lbnQ+KCpl
bGVtZW50KCkpIHx8IGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCplbGVtZW50KCkpIHx8IGlzPEhU
TUxMZWdlbmRFbGVtZW50PigqZWxlbWVudCgpKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gY29udGFpbmluZ0Jsb2NrKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5jcHAKaW5kZXggZTM2YWFlY2YwNzJiYWJhMWJmNzkxOTJmYjFmN2Q5NDA5OGNmODgy
MS4uYWUwMjBkZTljYzU3YzViNmZlZGQ5YTZmZGQ3YjMzNzBjM2FlNmNmYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHN0
YXRpYyBib29sIHBsYW5Db3VudGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGlkZW50aWZpZXIsCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgewot
ICAgICAgICAgICAgaWYgKGlzPEhUTUxPTGlzdEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAg
ICAgICBpZiAoaXM8SFRNTE9MaXN0RWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBkb3duY2FzdDxIVE1MT0xpc3RFbGVtZW50PigqZWxlbWVudCkuc3RhcnQoKTsK
ICAgICAgICAgICAgICAgICBpc1Jlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxz
TWFya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2Vy
LmNwcAppbmRleCBjOTU2NmRmN2U5MTY0ZTQzMmViYmE4ODA4OTk2OWVhZDI3Mzg4OTdhLi5hZTU4
ODBhNWI1MmI1ODQ5NTBmMDdhNzQ5N2ZiZjcwNWFkOWZmNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCkBAIC0xNDQsOSArMTQ0LDkg
QEAgYm9vbCBSZW5kZXJEZXRhaWxzTWFya2VyOjppc09wZW4oKSBjb25zdAogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IHBhcmVudCgpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5k
ZXJlci0+cGFyZW50KCkpIHsKICAgICAgICAgaWYgKCFyZW5kZXJlci0+bm9kZSgpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpczxIVE1MRGV0YWlsc0VsZW1lbnQ+KHJlbmRl
cmVyLT5ub2RlKCkpKQorICAgICAgICBpZiAoaXM8SFRNTERldGFpbHNFbGVtZW50PigqcmVuZGVy
ZXItPm5vZGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gIWRvd25jYXN0PEhUTUxEZXRhaWxzRWxl
bWVudD4oKnJlbmRlcmVyLT5ub2RlKCkpLmdldEF0dHJpYnV0ZShvcGVuQXR0cikuaXNOdWxsKCk7
Ci0gICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihyZW5kZXJlci0+bm9kZSgpKSkKKyAg
ICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpyZW5kZXJlci0+bm9kZSgpKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXggYjQ2NGNjNzMzMDRjMTY4YzM1OTgx
MTQzYmIyZThkYTRjYjZmOTY1MC4uM2JiNzI0MzI1MjMwNjMyYzVmNGUyNTQxNTI1NGJhZjM1ZGYx
ZTMwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVk
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCkBAIC02MDAsNyArNjAwLDcgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6
aGFuZGxlVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JFdmVudChFdmVudCogZXZlbnQpCiAgICAg
aWYgKCFzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihkb2N1bWVudCgpLCBt
X3BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFpczxNb3VzZUV2ZW50PihldmVudCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50PigqZXZlbnQp
KQogICAgICAgICByZXR1cm47CiAKICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNh
c3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCmluZGV4IGE1YzJiMDZlMDcyYjQ1MDNjYTNh
YzRmYjdhYjE0ODhmM2E3MTQ0OTEuLjRiM2NiOGIxNmZlNDUwZmU3YzZhYWZmN2U1YzY4NmZjMWRi
YTUyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcApAQCAtMjU1LDcgKzI1NSw3IEBAIEhUTUxJbnB1dEVsZW1lbnQqIFJl
bmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGxvYWRCdXR0b24oKSBjb25zdAogewogICAgIEFTU0VS
VChpbnB1dEVsZW1lbnQoKS5zaGFkb3dSb290KCkpOwogICAgIE5vZGUqIGJ1dHRvbk5vZGUgPSBp
bnB1dEVsZW1lbnQoKS5zaGFkb3dSb290KCktPmZpcnN0Q2hpbGQoKTsKLSAgICByZXR1cm4gYnV0
dG9uTm9kZSAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihidXR0b25Ob2RlKSA/IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KGJ1dHRvbk5vZGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaXM8SFRN
TElucHV0RWxlbWVudD4oYnV0dG9uTm9kZSkgPyBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihi
dXR0b25Ob2RlKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBSZW5kZXJGaWxlVXBsb2FkQ29udHJv
bDo6YnV0dG9uVmFsdWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAK
aW5kZXggN2ZjMzMzMGFiZjM1ZjA2NmQ2MzRmNmNmYTllZGUzODBjMjFjNTc0YS4uNmIwYmRhZWRm
NDAxOTBmMTM0MzI1ZmJmMmQ3ODRkODY5ZDFhMDg0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwCkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6
cGFpbnRBcmVhRWxlbWVudEZvY3VzUmluZyhQYWludEluZm8mIHBhaW50SW5mbykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudCgpLmZvY3Vz
ZWRFbGVtZW50KCk7Ci0gICAgaWYgKCFmb2N1c2VkRWxlbWVudCB8fCAhaXM8SFRNTEFyZWFFbGVt
ZW50Pihmb2N1c2VkRWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MQXJlYUVsZW1lbnQ+KGZvY3Vz
ZWRFbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSFRNTEFyZWFFbGVtZW50JiBhcmVh
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KTsKQEAg
LTU2MCw3ICs1NjAsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludEludG9SZWN0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGlmICghaW1nIHx8
IGltZy0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlRWxlbWVudCA9IChlbGVtZW50KCkgJiYgaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVu
dCgpKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsK
KyAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBpczxIVE1MSW1hZ2VFbGVtZW50
PihlbGVtZW50KCkpID8gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSA6IG51
bGxwdHI7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVs
ZW1lbnQgPyBpbWFnZUVsZW1lbnQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVTb3Vy
Y2VPdmVyOwogICAgIEltYWdlKiBpbWFnZSA9IGltYWdlUmVzb3VyY2UoKS5pbWFnZSgpLmdldCgp
OwogICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBzaG91bGRQYWludEF0TG93UXVhbGl0
eShjb250ZXh0LCBpbWFnZSwgaW1hZ2UsIExheW91dFNpemUocmVjdC5zaXplKCkpKTsKQEAgLTYy
Miw3ICs2MjIsNyBAQCBMYXlvdXRVbml0IFJlbmRlckltYWdlOjptaW5pbXVtUmVwbGFjZWRIZWln
aHQoKSBjb25zdAogCiBIVE1MTWFwRWxlbWVudCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkgY29u
c3QKIHsKLSAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9IGVsZW1lbnQoKSAmJiBpczxIVE1M
SW1hZ2VFbGVtZW50PihlbGVtZW50KCkpID8gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxl
bWVudCgpKSA6IG51bGxwdHI7CisgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UgPSBpczxIVE1M
SW1hZ2VFbGVtZW50PihlbGVtZW50KCkpID8gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxl
bWVudCgpKSA6IG51bGxwdHI7CiAgICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPnRyZWVTY29wZSgp
LmdldEltYWdlTWFwKGltYWdlLT5mYXN0R2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpKSA6IG51bGxw
dHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGQ5
ZDU5MzNhZjJjNjMyY2IyOWZkMWYwNGRkODU4NzAwYWMxY2U1ZTkuLmE1N2RjNTlkZjk4ZTZlY2I4
ODZjMjY3YzkzMTc1YWY2ZDk5Y2MyMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcApAQCAtMjM4MCw3ICsyMzgwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
UmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBTY3JvbGxBbGlnbm0K
ICAgICAgICAgaWYgKG93bmVyRWxlbWVudCAmJiBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCkpIHsK
ICAgICAgICAgICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlID0gbnVs
bHB0cjsKIAotICAgICAgICAgICAgaWYgKGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVs
ZW1lbnQpKQorICAgICAgICAgICAgaWYgKGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPigqb3duZXJF
bGVtZW50KSkKICAgICAgICAgICAgICAgICBmcmFtZUVsZW1lbnRCYXNlID0gZG93bmNhc3Q8SFRN
TEZyYW1lRWxlbWVudEJhc2U+KG93bmVyRWxlbWVudCk7CiAKICAgICAgICAgICAgIGlmIChmcmFt
ZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKGZyYW1lRWxlbWVudEJhc2UsICZmcmFtZVZpZXcp
KSB7CkBAIC0yNTc0LDcgKzI1NzQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogCiAgICAg
RVJlc2l6ZSByZXNpemUgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNpemUoKTsKICAgICBpZiAocmVz
aXplICE9IFJFU0laRV9WRVJUSUNBTCAmJiBkaWZmZXJlbmNlLndpZHRoKCkpIHsKLSAgICAgICAg
aWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIE1h
a2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCiAgICAgICAgICAgICBzdHls
ZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwg
cmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUFgpOwogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21G
YWN0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwpAQCAtMjU4NSw3ICsyNTg1LDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBj
b25zdCBMYXlvdXRTaXplJiBvbGRPZmYKICAgICB9CiAKICAgICBpZiAocmVzaXplICE9IFJFU0la
RV9IT1JJWk9OVEFMICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIE1ha2UgaW1wbGlj
aXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZW5kZXJlci0+
bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAg
ICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3IsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwpAQCAtMzA4OSw3ICszMDg5LDcgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCiB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVuZCBz
dXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCi0gICAgaWYgKCFlbmNsb3NpbmdFbGVtZW50KCkg
fHwgIWVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkgfHwgIWlzPEhUTUxFbGVtZW50Pihl
bmNsb3NpbmdFbGVtZW50KCkpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0Vs
ZW1lbnQoKSkgfHwgIWVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFJlbmRlckJveCogYm94ID0gZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJC
b3goKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKaW5kZXggMjEzY2M5MGZjZWFiNjlhYmI5ZTNjNTVmN2U0NTA2MWRkMjA2MTk1NS4uZTNjY2Jj
N2U0NTY5NTRkMzJhY2QxZjljOWJjN2U4YmVhOTU0OGQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE2ODEsNyArMTY4MSw3IEBA
IHN0YXRpYyBib29sIGlzUmVzdGFydGVkUGx1Z2luKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50PihyZW5kZXJlci0+bm9kZSgpKTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWlzPEhUTUxQ
bHVnSW5FbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxQbHVnSW5FbGVtZW50Pihl
bGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxQbHVnSW5FbGVtZW50PigqZWxlbWVudCkuaXNSZXN0YXJ0ZWRQbHVnaW4oKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCBkMmFkNzQzZDdlODVmMTMw
ZGYwM2FlY2FmYjFlY2E1NjM0Y2JiODFhLi45YjIwZTA0Y2Y2ZjIzZjViYjAzMjY5NjQ4MjA3NDEz
MWM4MGFjMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
CkBAIC0xMTYsOSArMTE2LDkgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVu
dCgpCiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKICAg
ICAgICAgICAgIFN0cmluZyB0ZXh0OwogICAgICAgICAgICAgRm9udCBpdGVtRm9udCA9IHN0eWxl
KCkuZm9udCgpOwotICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50
KSkKKyAgICAgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAg
ICAgICAgICAgICAgIHRleHQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQp
LnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBlbHNlIGlm
IChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICB0
ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxU
ZXh0KCk7CiAgICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250
RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICBkLnNldFdlaWdodChkLmJvbGRlcldlaWdo
dCgpKTsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OmFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JgogICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50KCkubGlz
dEl0ZW1zKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oZWxlbWVudCkgJiYgIWVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJv
bCgpKSB7CisgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmICFl
bGVtZW50LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgewogICAgICAgICAgICAgc2VsZWN0RWxl
bWVudCgpLnNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGkpOwogICAgICAgICAgICAgcmVjdHMu
YXBwZW5kKHNuYXBwZWRJbnRSZWN0KGl0ZW1Cb3VuZGluZ0JveFJlY3QoYWRkaXRpb25hbE9mZnNl
dCwgaSkpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM4NSwxMCArMzg1LDEwIEBAIHZvaWQg
UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpdGVtVGV4
dDsKLSAgICBib29sIGlzT3B0aW9uRWxlbWVudCA9IGlzPEhUTUxPcHRpb25FbGVtZW50PihsaXN0
SXRlbUVsZW1lbnQpOworICAgIGJvb2wgaXNPcHRpb25FbGVtZW50ID0gaXM8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpOwogICAgIGlmIChpc09wdGlvbkVsZW1lbnQpCiAgICAg
ICAgIGl0ZW1UZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1l
bnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKLSAgICBlbHNlIGlmIChpczxI
VE1MT3B0R3JvdXBFbGVtZW50PihsaXN0SXRlbUVsZW1lbnQpKQorICAgIGVsc2UgaWYgKGlzPEhU
TUxPcHRHcm91cEVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpKQogICAgICAgICBpdGVtVGV4dCA9
IGRvd25jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpLmdyb3VwTGFi
ZWxUZXh0KCk7CiAgICAgYXBwbHlUZXh0VHJhbnNmb3JtKHN0eWxlKCksIGl0ZW1UZXh0LCAnICcp
OwogCkBAIC00MDksNyArNDA5LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3Jl
Z3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYKICAgICBMYXlv
dXRSZWN0IHIgPSBpdGVtQm91bmRpbmdCb3hSZWN0KHBhaW50T2Zmc2V0LCBsaXN0SW5kZXgpOwog
ICAgIHIubW92ZShpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KHRleHRSdW4sIGl0ZW1TdHlsZSwgaXRl
bUZvbnQsIHIpKTsKIAotICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PihsaXN0SXRlbUVs
ZW1lbnQpKSB7CisgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1l
bnQpKSB7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0
aW9uKCk7CiAgICAgICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2VpZ2h0KCkpOwogICAgICAgICBp
dGVtRm9udCA9IEZvbnQoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3Jk
U3BhY2luZygpKTsKQEAgLTQyNiw3ICs0MjYsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50
SXRlbUJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50Jgog
ICAgIEhUTUxFbGVtZW50KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsK
IAogICAgIENvbG9yIGJhY2tDb2xvcjsKLSAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGxp
c3RJdGVtRWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVs
ZW1lbnQpLnNlbGVjdGVkKCkpIHsKKyAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0
SXRlbUVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1FbGVt
ZW50KS5zZWxlY3RlZCgpKSB7CiAgICAgICAgIGlmIChmcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9j
dXNlZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSA9PSAmc2VsZWN0
RWxlbWVudCgpKQogICAgICAgICAgICAgYmFja0NvbG9yID0gdGhlbWUoKS5hY3RpdmVMaXN0Qm94
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCBmNGFmNzBlYzQwODcyNDFhNTRjMDkx
ZjNkZWNiY2RiYWM4N2NlMjJmLi42NTAxZmUyYTYyNjY5MDgyNWMzYmE4NTMzZmVlZmE5MDFhYjM5
NWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC03
Myw3ICs3Myw3IEBAIGludCBSZW5kZXJNYXJxdWVlOjptYXJxdWVlU3BlZWQoKSBjb25zdAogewog
ICAgIGludCByZXN1bHQgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZVNwZWVk
KCk7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuZWxlbWVudCgp
OwotICAgIGlmIChlbGVtZW50ICYmIGlzPEhUTUxNYXJxdWVlRWxlbWVudD4oZWxlbWVudCkpCisg
ICAgaWYgKGlzPEhUTUxNYXJxdWVlRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJlc3VsdCA9
IHN0ZDo6bWF4KHJlc3VsdCwgZG93bmNhc3Q8SFRNTE1hcnF1ZWVFbGVtZW50PigqZWxlbWVudCku
bWluaW11bURlbGF5KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAppbmRleCA3Y2EzNTJkYzdmMjg1YjgwMzNjNDc0
NDVkZDBjZDRmNmNiMTI3ZjBhLi4xZTBjZjUxMjQ5YjdjMTUzNTQ4NTIxMGU2ZWQ4ODZmYjViOTc5
ZjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKQEAg
LTY0LDcgKzY0LDcgQEAgc3RhdGljIHNpemVfdCBzZWxlY3RlZE9wdGlvbkNvdW50KGNvbnN0IFJl
bmRlck1lbnVMaXN0JiByZW5kZXJNZW51TGlzdCkKIAogICAgIHNpemVfdCBjb3VudCA9IDA7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpIHsKLSAgICAgICAg
aWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihsaXN0SXRlbXNbaV0pICYmIGRvd25jYXN0PEhUTUxP
cHRpb25FbGVtZW50PigqbGlzdEl0ZW1zW2ldKS5zZWxlY3RlZCgpKQorICAgICAgICBpZiAoaXM8
SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbXNbaV0pICYmIGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqbGlzdEl0ZW1zW2ldKS5zZWxlY3RlZCgpKQogICAgICAgICAgICAgKytjb3VudDsK
ICAgICB9CiAgICAgcmV0dXJuIGNvdW50OwpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgUmVuZGVy
TWVudUxpc3Q6OnVwZGF0ZU9wdGlvbnNXaWR0aCgpCiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tp
XTsKLSAgICAgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAg
IGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgIFN0cmluZyB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CkBAIC0yNzAsNyAr
MjcwLDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRpb24oaW50IG9wdGlv
bkluZGV4KQogICAgIFN0cmluZyB0ZXh0ID0gZW1wdHlTdHJpbmcoKTsKICAgICBpZiAoaSA+PSAw
ICYmIGkgPCBzaXplKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07
Ci0gICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAg
aWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgIHRleHQg
PSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVz
cGVjdEdyb3VwTGFiZWwoKTsKICAgICAgICAgICAgIG1fb3B0aW9uU3R5bGUgPSBlbGVtZW50LT5j
b21wdXRlZFN0eWxlKCk7CiAgICAgICAgIH0KQEAgLTQ1MCw5ICs0NTAsOSBAQCBTdHJpbmcgUmVu
ZGVyTWVudUxpc3Q6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIAogICAgIFN0
cmluZyBpdGVtU3RyaW5nOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdElu
ZGV4XTsKLSAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYg
KGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgaXRlbVN0cmluZyA9
IGRvd25jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCplbGVtZW50KS5ncm91cExhYmVsVGV4dCgp
OwotICAgIGVsc2UgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkKKyAgICBlbHNl
IGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICBpdGVtU3RyaW5n
ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jl
c3BlY3RHcm91cExhYmVsKCk7CiAKICAgICBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgaXRl
bVN0cmluZywgJyAnKTsKQEAgLTQ5MiwxMiArNDkyLDEyIEBAIGJvb2wgUmVuZGVyTWVudUxpc3Q6
Oml0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAgIGlmIChsaXN0SW5k
ZXggPj0gbGlzdEl0ZW1zLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAgaWYgKCFpczxIVE1M
T3B0aW9uRWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4o
KmVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIGdyb3VwRW5hYmxl
ZCA9IHRydWU7CiAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KHBhcmVu
dEVsZW1lbnQpKQorICAgICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKnBhcmVudEVs
ZW1lbnQpKQogICAgICAgICAgICAgZ3JvdXBFbmFibGVkID0gIXBhcmVudEVsZW1lbnQtPmlzRGlz
YWJsZWRGb3JtQ29udHJvbCgpOwogICAgIH0KICAgICBpZiAoIWdyb3VwRW5hYmxlZCkKQEAgLTY0
NSw3ICs2NDUsNyBAQCBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZXBhcmF0b3IodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdAogYm9vbCBSZW5kZXJNZW51TGlzdDo6aXRlbUlzTGFiZWwodW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdAogewogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+
JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50KCkubGlzdEl0ZW1zKCk7Ci0gICAgcmV0dXJuIGxp
c3RJbmRleCA8IGxpc3RJdGVtcy5zaXplKCkgJiYgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4obGlz
dEl0ZW1zW2xpc3RJbmRleF0pOworICAgIHJldHVybiBsaXN0SW5kZXggPCBsaXN0SXRlbXMuc2l6
ZSgpICYmIGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCpsaXN0SXRlbXNbbGlzdEluZGV4XSk7CiB9
CiAKIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3QKQEAgLTY1NCw3ICs2NTQsNyBAQCBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNT
ZWxlY3RlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiAgICAgaWYgKGxpc3RJbmRleCA+PSBs
aXN0SXRlbXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTEVsZW1lbnQq
IGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKLSAgICByZXR1cm4gaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVu
dCkuc2VsZWN0ZWQoKTsKKyAgICByZXR1cm4gaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50
KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CiB9
CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5k
ZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAppbmRleCA5OTA1OTZk
OWUxMDUzMzBhNmYzZDQwNTdkYjlmNzZhZmM2OWVjODlkLi5kM2M0MjkxNTM1ZDBiNmQyMjczNGFh
M2I0NzhiYzUxNzNiZjU5MWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWV0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRl
ci5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgSFRNTE1ldGVyRWxlbWVudCogUmVuZGVyTWV0ZXI6Om1l
dGVyRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAKLSAgICBpZiAo
aXM8SFRNTE1ldGVyRWxlbWVudD4oZWxlbWVudCgpKSkKKyAgICBpZiAoaXM8SFRNTE1ldGVyRWxl
bWVudD4oKmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MTWV0ZXJFbGVt
ZW50PihlbGVtZW50KCkpOwogCiAgICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5j
cHAKaW5kZXggODFkYzlmZWZiNzlmNmNmNjgzMDVjZmE5Njk2MzZlYmJiMmU2ZTUzMC4uODZmYTUz
OWYxYjEzNWFkZmIxYzQyZWNjN2FmMmI5YzMxNWUzZTljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTU0NSwxMCArNTQ1
LDEwIEBAIGJvb2wgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjppc0NoaWxkQWxsb3dlZChjb25zdCBS
ZW5kZXJPYmplY3QmIGNoaWxkLCBjb25zdCBSZW5kCiAgICAgaWYgKCFjaGlsZC5ub2RlKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgQVNTRVJUKGlzPEVsZW1lbnQ+KGNoaWxkLm5vZGUo
KSkpOworICAgIEFTU0VSVChpczxFbGVtZW50PigqY2hpbGQubm9kZSgpKSk7CiAKICAgICBOb2Rl
KiBvcmlnaW5hbFBhcmVudCA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnBhcmVudChjaGlsZC5u
b2RlKCkpOwotICAgIGlmICghb3JpZ2luYWxQYXJlbnQgfHwgIWlzPEVsZW1lbnQ+KG9yaWdpbmFs
UGFyZW50KSB8fCAhb3JpZ2luYWxQYXJlbnQtPnJlbmRlcmVyKCkpCisgICAgaWYgKCFpczxFbGVt
ZW50PihvcmlnaW5hbFBhcmVudCkgfHwgIW9yaWdpbmFsUGFyZW50LT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pigqb3JpZ2lu
YWxQYXJlbnQpLnJlbmRlcmVyKCktPmlzQ2hpbGRBbGxvd2VkKGNoaWxkLCBzdHlsZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDI0ZWY0OTY4NDQyOGFj
MWMyNmI3NjFmMDg4OTdiOWZkNTgyNjUyOTAuLmNjNjQyNWZiNmM1ZWMzMTIzYmY5ODI5ZTc2Y2Iy
ZTQxNTkzZDg5M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CkBAIC0xMDM0LDcgKzEwMzQsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50TwogICAgIGlmICh1
cmxSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIE5vZGUqIG5vZGUgPSB0aGlz
LT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0xpbmsoKSB8fCAhaXM8RWxlbWVu
dD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSB8fCAhbm9kZS0+aXNMaW5rKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGhyZWYgPSBkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKICAgICBpZiAoaHJlZi5p
c051bGwoKSkKQEAgLTE5MTgsNyArMTkxOCw3IEBAIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51
bSBSZW5kZXJPYmplY3Q6OnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgY29uc3QKICNl
bmRpZgogICAgIC8vIFJlc3BlY3QgdGhlIGltYWdlJ3Mgb3JpZW50YXRpb24gaWYgaXQncyBiZWlu
ZyB1c2VkIGFzIGEgZnVsbC1wYWdlIGltYWdlIG9yIGl0J3MKICAgICAvLyBhbiA8aW1nPiBhbmQg
dGhlIHNldHRpbmcgdG8gcmVzcGVjdCBpdCBldmVyeXdoZXJlIGlzIHNldC4KLSAgICByZXR1cm4g
KGZyYW1lKCkuc2V0dGluZ3MoKS5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpICYmIG5v
ZGUoKSAmJiBpczxIVE1MSW1hZ2VFbGVtZW50Pihub2RlKCkpKSA/IFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uIDogRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbjsKKyAgICByZXR1cm4gKGZyYW1l
KCkuc2V0dGluZ3MoKS5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpICYmIGlzPEhUTUxJ
bWFnZUVsZW1lbnQ+KG5vZGUoKSkpID8gUmVzcGVjdEltYWdlT3JpZW50YXRpb24gOiBEb05vdFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6aGFzT3V0bGlu
ZUFubm90YXRpb24oKSBjb25zdApAQCAtMjE0MSw3ICsyMTQxLDcgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OnVwZGF0ZURyYWdTdGF0ZShib29sIGRyYWdPbikKIHsKICAgICBib29sIHZhbHVlQ2hhbmdl
ZCA9IChkcmFnT24gIT0gaXNEcmFnZ2luZygpKTsKICAgICBzZXRJc0RyYWdnaW5nKGRyYWdPbik7
Ci0gICAgaWYgKHZhbHVlQ2hhbmdlZCAmJiBub2RlKCkgJiYgKHN0eWxlKCkuYWZmZWN0ZWRCeURy
YWcoKSB8fCAoaXM8RWxlbWVudD4obm9kZSgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSgp
KS5jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKCkpKSkKKyAgICBpZiAodmFsdWVDaGFuZ2VkICYmIG5v
ZGUoKSAmJiAoc3R5bGUoKS5hZmZlY3RlZEJ5RHJhZygpIHx8IChpczxFbGVtZW50Pigqbm9kZSgp
KSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSgpKS5jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKCkp
KSkKICAgICAgICAgbm9kZSgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkU2xvdygpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4
dFNpYmxpbmcoKSkKICAgICAgICAgY3Vyci0+dXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CkBAIC0y
MjM0LDcgKzIyMzQsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJPYmplY3Q6Omdl
dFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZQogCiAgICAgLy8gRklYTUU6
IFRoaXMgImZpbmQgbmVhcmVzdCBlbGVtZW50IHBhcmVudCIgc2hvdWxkIGJlIGEgaGVscGVyIGZ1
bmN0aW9uLgogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgd2hpbGUgKG5vZGUg
JiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pigq
bm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFub2Rl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIyOTgsNyArMjI5OCw3IEBAIHZvaWQgUmVu
ZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhpbnQgZGVjb3JhdGlvbnMsIENvbG9y
JiB1bmRlcmxpbmUsIENvCiAgICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnQoKTsKICAgICAgICAg
aWYgKGN1cnIgJiYgY3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpICYmIHRvUmVuZGVyQmxvY2soY3Vy
ciktPmNvbnRpbnVhdGlvbigpKQogICAgICAgICAgICAgY3VyciA9IHRvUmVuZGVyQmxvY2soY3Vy
ciktPmNvbnRpbnVhdGlvbigpOwotICAgIH0gd2hpbGUgKGN1cnIgJiYgZGVjb3JhdGlvbnMgJiYg
KCFxdWlya3NNb2RlIHx8ICFjdXJyLT5ub2RlKCkgfHwgKCFpczxIVE1MQW5jaG9yRWxlbWVudD4o
Y3Vyci0+bm9kZSgpKSAmJiAhY3Vyci0+bm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOwor
ICAgIH0gd2hpbGUgKGN1cnIgJiYgZGVjb3JhdGlvbnMgJiYgKCFxdWlya3NNb2RlIHx8ICFjdXJy
LT5ub2RlKCkgfHwgKCFpczxIVE1MQW5jaG9yRWxlbWVudD4oKmN1cnItPm5vZGUoKSkgJiYgIWN1
cnItPm5vZGUoKS0+aGFzVGFnTmFtZShmb250VGFnKSkpKTsKIAogICAgIC8vIElmIHdlIGJhaWxl
ZCBvdXQsIHVzZSB0aGUgZWxlbWVudCB3ZSBiYWlsZWQgb3V0IGF0ICh0eXBpY2FsbHkgYSA8Zm9u
dD4gb3IgPGE+IGVsZW1lbnQpLgogICAgIGlmIChkZWNvcmF0aW9ucyAmJiBjdXJyKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAppbmRleCA2YjhjZDQyZGFl
ZTNlYzRlMDI1YWZhNjM2NDI3YWY2YmRmZGU4MGNlLi4zMzZiMTE2NzJkMDNiNWYwNmI3NDUzYTgz
MzBiY2IzMjY5Njc4Y2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUHJvZ3Jlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9n
cmVzcy5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBSZW5kZXJQ
cm9ncmVzczo6cHJvZ3Jlc3NFbGVtZW50KCkgY29uc3QKICAgICBpZiAoIWVsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoaXM8SFRNTFByb2dyZXNzRWxlbWVudD4o
ZWxlbWVudCgpKSkKKyAgICBpZiAoaXM8SFRNTFByb2dyZXNzRWxlbWVudD4oKmVsZW1lbnQoKSkp
CiAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50PihlbGVtZW50KCkp
OwogCiAgICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3BwCmluZGV4IDg3
MGE1NDE0MDRkMWM1ZTBiMjg5MWZkZDIzMmZlYmVjNGQ0NTg1YTAuLjU2OTcyMTI3MTUzMWVhZmMx
MTFmMTk3MDYwYjk2MTgwMDBjOWU3NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIEN1
cnNvckRpcmVjdGl2ZSBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6Z2V0Q3Vyc29yKGNvbnN0IExh
eW91dFBvaW50JiBwb2ludCwgQ3VyCiAKIHZvaWQgUmVuZGVyU25hcHNob3R0ZWRQbHVnSW46Omhh
bmRsZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50
KSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KCpldmVudCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggNTk3MTc3YWFk
MWY3ODI4OWU4MjA4NTk5N2E3ZDMyYjM5ZWI5NjE1YS4uZDExZWU2Yzg4ZTk4NjdjM2Y0ZWZjODU4
N2ZiMGE3OTdmY2VlN2VlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCkBAIC0zNTAsNyArMzUwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6Y29udmVydFN0
eWxlTG9naWNhbFdpZHRoVG9Db21wdXRlZFdpZHRoKGNvbnN0IExlbmd0aCYgc3QKIAogICAgIC8v
IEhUTUwgdGFibGVzJyB3aWR0aCBzdHlsZXMgYWxyZWFkeSBpbmNsdWRlIGJvcmRlcnMgYW5kIHBh
ZGRpbmdzLCBidXQgQ1NTIHRhYmxlcycgd2lkdGggc3R5bGVzIGRvIG5vdC4KICAgICBMYXlvdXRV
bml0IGJvcmRlcnMgPSAwOwotICAgIGJvb2wgaXNDU1NUYWJsZSA9ICFlbGVtZW50KCkgfHwgIWlz
PEhUTUxUYWJsZUVsZW1lbnQ+KGVsZW1lbnQoKSk7CisgICAgYm9vbCBpc0NTU1RhYmxlID0gIWlz
PEhUTUxUYWJsZUVsZW1lbnQ+KGVsZW1lbnQoKSk7CiAgICAgaWYgKGlzQ1NTVGFibGUgJiYgc3R5
bGVMb2dpY2FsV2lkdGguaXNTcGVjaWZpZWQoKSAmJiBzdHlsZUxvZ2ljYWxXaWR0aC5pc1Bvc2l0
aXZlKCkgJiYgc3R5bGUoKS5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkKICAgICAgICAgYm9y
ZGVycyA9IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/
IExheW91dFVuaXQoKSA6IHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpKTsKIApAQCAtMzY0
LDcgKzM2NCw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGU6OmNvbnZlcnRTdHlsZUxvZ2ljYWxI
ZWlnaHRUb0NvbXB1dGVkSGVpZ2h0KGNvbnN0IExlbmd0aCYKICAgICAgICAgLy8gSFRNTCB0YWJs
ZXMgc2l6ZSBhcyB0aG91Z2ggQ1NTIGhlaWdodCBpbmNsdWRlcyBib3JkZXIvcGFkZGluZywgQ1NT
IHRhYmxlcyBkbyBub3QuCiAgICAgICAgIExheW91dFVuaXQgYm9yZGVycyA9IExheW91dFVuaXQo
KTsKICAgICAgICAgLy8gRklYTUU6IFdlIGNhbm5vdCBhcHBseSBib3gtc2l6aW5nOiBjb250ZW50
LWJveCBvbiA8dGFibGU+IHdoaWNoIG90aGVyIGJyb3dzZXJzIGFsbG93LgotICAgICAgICBpZiAo
KGVsZW1lbnQoKSAmJiBpczxIVE1MVGFibGVFbGVtZW50PihlbGVtZW50KCkpKSB8fCBzdHlsZSgp
LmJveFNpemluZygpID09IEJPUkRFUl9CT1gpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVs
ZW1lbnQ+KGVsZW1lbnQoKSkgfHwgc3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCT1JERVJfQk9YKSB7
CiAgICAgICAgICAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBib3JkZXJC
ZWZvcmUoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQoKSA6IHBhZGRpbmdCZWZv
cmUoKSk7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdBZnRlciA9IGJv
cmRlckFmdGVyKCkgKyAoY29sbGFwc2VCb3JkZXJzKCkgPyBMYXlvdXRVbml0KCkgOiBwYWRkaW5n
QWZ0ZXIoKSk7CiAgICAgICAgICAgICBib3JkZXJzID0gYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSAr
IGJvcmRlckFuZFBhZGRpbmdBZnRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5jcHAKaW5kZXggNDIxNWI4ZjRiMTJlMGI1OGJhMDViNWFiMTU3YzQwYTk5Zjlk
Yjk3Yi4uOTJhZWU5MGEzMDEwNWUyNTMzMTAxOGRlMDcwYzkyYTVhMmEyM2Q0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTg4LDcgKzg4LDcg
QEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpCiB1bnNpZ25l
ZCBSZW5kZXJUYWJsZUNlbGw6OnBhcnNlQ29sU3BhbkZyb21ET00oKSBjb25zdAogewogICAgIEFT
U0VSVChlbGVtZW50KCkpOwotICAgIGlmIChpczxIVE1MVGFibGVDZWxsRWxlbWVudD4oZWxlbWVu
dCgpKSkKKyAgICBpZiAoaXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KCplbGVtZW50KCkpKQogICAg
ICAgICByZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KGRvd25jYXN0PEhUTUxUYWJsZUNlbGxFbGVt
ZW50PigqZWxlbWVudCgpKS5jb2xTcGFuKCksIG1heENvbHVtbkluZGV4KTsKICNpZiBFTkFCTEUo
TUFUSE1MKQogICAgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om10ZFRh
ZykpCkBAIC0xMDAsNyArMTAwLDcgQEAgdW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpwYXJzZUNv
bFNwYW5Gcm9tRE9NKCkgY29uc3QKIHVuc2lnbmVkIFJlbmRlclRhYmxlQ2VsbDo6cGFyc2VSb3dT
cGFuRnJvbURPTSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKGlz
PEhUTUxUYWJsZUNlbGxFbGVtZW50PihlbGVtZW50KCkpKQorICAgIGlmIChpczxIVE1MVGFibGVD
ZWxsRWxlbWVudD4oKmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25l
ZD4oZG93bmNhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KCplbGVtZW50KCkpLnJvd1NwYW4oKSwg
bWF4Um93SW5kZXgpOwogI2lmIEVOQUJMRShNQVRITUwpCiAgICAgaWYgKGVsZW1lbnQoKS0+aGFz
VGFnTmFtZShNYXRoTUxOYW1lczo6bXRkVGFnKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCmluZGV4IDk3NDdiNGEyMTZjODViMjI3MDg4ZGNkOTNhYjg3YjU3ZjhjYThj
MzUuLjEyOGFmYWY4MjMxMjQ0OTRmOGQyMzg1ZDZhZmFkYTdkMmFkMWI2YjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtODA1LDcgKzgwNSw3IEBAIGJvb2wg
UmVuZGVyVGhlbWU6OmlzSW5kZXRlcm1pbmF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0
CiBib29sIFJlbmRlclRoZW1lOjppc0VuYWJsZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
cikgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIubm9kZSgpOwotICAgIGlmICgh
bm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuICFkb3duY2FzdDxFbGVtZW50Pigqbm9k
ZSkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCk7CiB9CkBAIC04MTMsNyArODEzLDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZTo6aXNFbmFibGVkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0
CiBib29sIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
cikgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIubm9kZSgpOwotICAgIGlmICgh
bm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogZm9jdXNEZWxlZ2F0ZSA9IGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKS5mb2N1c0RlbGVnYXRlKCk7CkBAIC04MjQsNyArODI0LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIpIGNvbnN0CiAKIGJvb2wgUmVuZGVyVGhlbWU6OmlzUHJlc3NlZChjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIGlmICghcmVuZGVyZXIubm9kZSgpIHx8ICFpczxF
bGVtZW50PihyZW5kZXJlci5ub2RlKCkpKQorICAgIGlmICghaXM8RWxlbWVudD4ocmVuZGVyZXIu
bm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkb3duY2FzdDxFbGVt
ZW50PigqcmVuZGVyZXIubm9kZSgpKS5hY3RpdmUoKTsKIH0KQEAgLTgzMiw3ICs4MzIsNyBAQCBi
b29sIFJlbmRlclRoZW1lOjppc1ByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikg
Y29uc3QKIGJvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gcmVuZGVy
ZXIubm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYg
KCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEVsZW1lbnQm
IGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CiAgICAgaWYgKCFlbGVtZW50LmFj
dGl2ZSgpIHx8ICFlbGVtZW50LmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKQEAgLTg0Myw3ICs4NDMs
NyBAQCBib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiBib29sIFJlbmRlclRoZW1lOjppc1JlYWRPbmx5
Q29udHJvbChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewogICAgIE5vZGUq
IG5vZGUgPSByZW5kZXJlci5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSkubWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKCk7CiB9CkBAIC04NTEsNyAr
ODUxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNSZWFkT25seUNvbnRyb2woY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlcikgY29uc3QKIGJvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJlZChjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSByZW5k
ZXJlci5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
b3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNTcGluQnV0dG9uRWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmhvdmVyZWQoKTsKQEAgLTg2Miw3ICs4NjIs
NyBAQCBib29sIFJlbmRlclRoZW1lOjppc0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJlcikgY29uc3QKIGJvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQo
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0g
cmVuZGVyZXIubm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkgfHwg
IWRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1NwaW5CdXR0b25FbGVtZW50KCkpCisgICAgaWYg
KCFpczxFbGVtZW50Pihub2RlKSB8fCAhZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzU3BpbkJ1
dHRvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFNwaW5CdXR0b25FbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPihub2RlKTsKICAg
ICByZXR1cm4gZWxlbWVudC0+dXBEb3duU3RhdGUoKSA9PSBTcGluQnV0dG9uRWxlbWVudDo6VXA7
CkBAIC0xMDM1LDcgKzEwMzUsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tz
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAg
IHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgTm9kZSogbm9kZSA9IG9wdGlvbnMtPml0ZW0oaSk7IGkrKykgewot
ICAgICAgICBBU1NFUlQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KG5vZGUpKTsKKyAgICAgICAgQVNT
RVJUKGlzPEhUTUxPcHRpb25FbGVtZW50Pigqbm9kZSkpOwogICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudCYgb3B0aW9uRWxlbWVudCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigqbm9kZSk7
CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IG9wdGlvbkVsZW1lbnQudmFsdWUoKTsKICAgICAgICAg
aWYgKCFpbnB1dC0+aXNWYWxpZFZhbHVlKHZhbHVlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVHdGsuY3BwCmluZGV4IDQ4Mzg4ZWJjMzBkMDVlZDc5NjExZWFlMDk5OTZh
N2FiOTA4ZmRhZTAuLjc3MjYyOGQzY2E1OTBhNjk3NmYyZTU0NzI5NjM0NWUwZTgzOWVkM2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMjYxLDcg
KzI2MSw3IEBAIHN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBnZXRNZWRpYUVsZW1lbnRGcm9tUmVu
ZGVyT2JqZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbykKICAgICBOb2RlKiBtZWRpYU5vZGUgPSBu
b2RlID8gbm9kZS0+c2hhZG93SG9zdCgpIDogbnVsbHB0cjsKICAgICBpZiAoIW1lZGlhTm9kZSkK
ICAgICAgICAgbWVkaWFOb2RlID0gbm9kZTsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAhaXM8SFRN
TE1lZGlhRWxlbWVudD4obWVkaWFOb2RlKSkKKyAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1lbnQ+
KG1lZGlhTm9kZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIGRvd25j
YXN0PEhUTUxNZWRpYUVsZW1lbnQ+KG1lZGlhTm9kZSk7CkBAIC0zMTYsNyArMzE2LDcgQEAgc3Rh
dGljIGJvb2wgbm9kZUhhc1BzZXVkbyhOb2RlKiBub2RlLCBjb25zdCBjaGFyKiBwc2V1ZG8pCiAK
IHN0YXRpYyBib29sIG5vZGVIYXNDbGFzcyhOb2RlKiBub2RlLCBjb25zdCBjaGFyKiBjbGFzc05h
bWUpCiB7Ci0gICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+
KCpub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCYgZWxlbWVudCA9
IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5tbQppbmRleCA5MjAwMjZjZDhjNmY4OTgwZjU2ODk1OTY4MTExNjQ4Njg1NzY4
ZDA2Li4zMzU1NTQ2ZWU2NzY1NWIzZGUwZThmYjdiNWFkYWJjNzk3YjNlOWE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC03MjksNyArNzI5LDcgQEAg
dm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRm9jdXNlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29u
c3QgUmVuZGVyT2JqZWN0JiBvKQogdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlUHJlc3NlZFN0
YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIGJvb2wgb2xk
UHJlc3NlZCA9IFtjZWxsIGlzSGlnaGxpZ2h0ZWRdOwotICAgIGJvb2wgcHJlc3NlZCA9IG8ubm9k
ZSgpICYmIGlzPEVsZW1lbnQ+KG8ubm9kZSgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqby5ub2Rl
KCkpLmFjdGl2ZSgpOworICAgIGJvb2wgcHJlc3NlZCA9IGlzPEVsZW1lbnQ+KG8ubm9kZSgpKSAm
JiBkb3duY2FzdDxFbGVtZW50Pigqby5ub2RlKCkpLmFjdGl2ZSgpOwogICAgIGlmIChwcmVzc2Vk
ICE9IG9sZFByZXNzZWQpCiAgICAgICAgIFtjZWxsIHNldEhpZ2hsaWdodGVkOnByZXNzZWRdOwog
fQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJU
aHVtYihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGEKIAogICAgIC8v
IFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVFbmFi
bGVkU3RhdGUoc2xpZGVyVGh1bWJDZWxsLCBvKTsKLSAgICAgICAgRWxlbWVudCogZm9jdXNEZWxl
Z2F0ZSA9IChvLm5vZGUoKSAmJiBpczxFbGVtZW50PihvLm5vZGUoKSkpID8gZG93bmNhc3Q8RWxl
bWVudD4oby5ub2RlKCkpLT5mb2N1c0RlbGVnYXRlKCkgOiBudWxscHRyOworICAgICAgICBFbGVt
ZW50KiBmb2N1c0RlbGVnYXRlID0gaXM8RWxlbWVudD4oby5ub2RlKCkpID8gZG93bmNhc3Q8RWxl
bWVudD4oKm8ubm9kZSgpKS5mb2N1c0RlbGVnYXRlKCkgOiBudWxscHRyOwogICAgIGlmIChmb2N1
c0RlbGVnYXRlKQogICAgICAgICB1cGRhdGVGb2N1c2VkU3RhdGUoc2xpZGVyVGh1bWJDZWxsLCAq
Zm9jdXNEZWxlZ2F0ZS0+cmVuZGVyZXIoKSk7CiAKQEAgLTE2ODMsNyArMTY4Myw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBjb25zdCBQCiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhp
cy0+c2VhcmNoKCk7CiAKLSAgICBpZiAoIWlucHV0LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAm
JiAoaXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KGlucHV0KSAmJiAhZG93bmNhc3Q8SFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCppbnB1dCkuaXNSZWFkT25seSgpKSkKKyAgICBpZiAo
IWlucHV0LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiAoaXM8SFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ+KCppbnB1dCkgJiYgIWRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
PigqaW5wdXQpLmlzUmVhZE9ubHkoKSkpCiAgICAgICAgIHVwZGF0ZVByZXNzZWRTdGF0ZShbc2Vh
cmNoIGNhbmNlbEJ1dHRvbkNlbGxdLCBvKTsKICAgICBlbHNlIGlmIChbW3NlYXJjaCBjYW5jZWxC
dXR0b25DZWxsXSBpc0hpZ2hsaWdodGVkXSkKICAgICAgICAgW1tzZWFyY2ggY2FuY2VsQnV0dG9u
Q2VsbF0gc2V0SGlnaGxpZ2h0ZWQ6Tk9dOwpAQCAtMTg1MSwxMiArMTg1MSwxMiBAQCBib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJP
YmplY3QmIG8sIGNvbnN0CiAgICAgLy8gZnJvbSBvdXIgbm9kZS4gQXNzdW1pbmcgdGhpcyBub2Rl
IGlzIHRoZSBwbHVnaW4gb3ZlcmxheSBlbGVtZW50LCB3ZSBzaG91bGQgZ2V0IHRvIHRoZQogICAg
IC8vIHBsdWdpbiBpdHNlbGYgYnkgYXNraW5nIGZvciB0aGUgc2hhZG93IHJvb3QgcGFyZW50LCBh
bmQgdGhlbiBpdHMgcGFyZW50LgogCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4ocmVuZGVyQmxv
Y2suZWxlbWVudCgpKSkKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PigqcmVuZGVyQmxvY2suZWxl
bWVudCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBIVE1MRWxlbWVudCYgcGx1Z0lu
T3ZlcmxheSA9IGRvd25jYXN0PEhUTUxFbGVtZW50PigqcmVuZGVyQmxvY2suZWxlbWVudCgpKTsK
ICAgICBFbGVtZW50KiBwYXJlbnQgPSBwbHVnSW5PdmVybGF5LnBhcmVudE9yU2hhZG93SG9zdEVs
ZW1lbnQoKTsKLSAgICB3aGlsZSAocGFyZW50ICYmICFpczxIVE1MUGx1Z0luRWxlbWVudD4ocGFy
ZW50KSkKKyAgICB3aGlsZSAocGFyZW50ICYmICFpczxIVE1MUGx1Z0luRWxlbWVudD4oKnBhcmVu
dCkpCiAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgp
OwogCiAgICAgaWYgKCFwYXJlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHAKaW5kZXggZDQ1YmM1YmQ0ZjA4MjI5N2Y3ZTc3YTc3ZGJjNDUzMWY3NmU5
ZWU4Mi4uZDMzYTkzNDdiNzI2ZjgwN2Y4YjUzMjIxNzYxNzc0NDgzZDBlMTM0NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMTI1LDcgKzEy
NSw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0VGFnTmFtZShOb2RlKiBuKQogCiBzdGF0aWMgYm9vbCBp
c0VtcHR5T3JVbnN0eWxlZEFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAg
aWYgKCFub2RlIHx8ICFpczxIVE1MU3BhbkVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8SFRN
TFNwYW5FbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3Qg
SFRNTEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU3BhbkVsZW1lbnQ+KCpub2RlKTsK
QEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2Jq
ZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sCiAgICAgfQogICAgIAog
ICAgIGlmIChiZWhhdmlvciAmIFJlbmRlckFzVGV4dFNob3dJREFuZENsYXNzKSB7Ci0gICAgICAg
IGlmIChFbGVtZW50KiBlbGVtZW50ID0gby5ub2RlKCkgJiYgaXM8RWxlbWVudD4oby5ub2RlKCkp
ID8gZG93bmNhc3Q8RWxlbWVudD4oby5ub2RlKCkpIDogbnVsbHB0cikgeworICAgICAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KG8ubm9kZSgpKSA/IGRvd25jYXN0PEVsZW1l
bnQ+KG8ubm9kZSgpKSA6IG51bGxwdHIpIHsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNJ
RCgpKQogICAgICAgICAgICAgICAgIHRzIDw8ICIgaWQ9XCIiICsgZWxlbWVudC0+Z2V0SWRBdHRy
aWJ1dGUoKSArICJcIiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0QXV0b3NpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmNwcAppbmRleCBkMzkyZDg4NzBmZTA3YWNhODJjYTcwYjU1MGRhYmFkZDE5NTczOGZmLi5mNjA1
OWZlMDkxMThlNzA1OTY4NGFkNmQ5ZGIwMzA2NTk4NjdhMDAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCkBAIC0yNzcsNyArMjc3LDcgQEAgYm9vbCBUZXh0
QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5pc0Zsb2F0aW5nKCkgfHwgcmVuZGVyZXIt
PmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpOwogICAgIC8vIEF2b2lkIGNyZWF0aW5nIGNvbnRhaW5l
cnMgZm9yIHRleHQgd2l0aGluIHRleHQgY29udHJvbHMsIGJ1dHRvbnMsIG9yIDxzZWxlY3Q+IGJ1
dHRvbnMuCiAgICAgTm9kZSogcGFyZW50Tm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKSA/IHJlbmRl
cmVyLT5wYXJlbnQoKS0+Z2VuZXJhdGluZ05vZGUoKSA6IG51bGxwdHI7Ci0gICAgaWYgKHBhcmVu
dE5vZGUgJiYgaXM8RWxlbWVudD4ocGFyZW50Tm9kZSkgJiYgZm9ybUlucHV0VGFncygpLmNvbnRh
aW5zKGRvd25jYXN0PEVsZW1lbnQ+KCpwYXJlbnROb2RlKS50YWdRTmFtZSgpKSkKKyAgICBpZiAo
aXM8RWxlbWVudD4ocGFyZW50Tm9kZSkgJiYgZm9ybUlucHV0VGFncygpLmNvbnRhaW5zKGRvd25j
YXN0PEVsZW1lbnQ+KCpwYXJlbnROb2RlKS50YWdRTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODgsNyArMzg4LDcgQEAgYm9vbCBUZXh0QXV0
b3NpemVyOjpjb250YWluZXJDb250YWluc09uZU9mVGFncyhjb25zdCBSZW5kZXJCbG9jayogY29u
dGFpbmVyLCBjb24KICAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29udGFpbmVy
OwogICAgIHdoaWxlIChyZW5kZXJlcikgewogICAgICAgICBjb25zdCBOb2RlKiByZW5kZXJlck5v
ZGUgPSByZW5kZXJlci0+bm9kZSgpOwotICAgICAgICBpZiAocmVuZGVyZXJOb2RlICYmIGlzPEVs
ZW1lbnQ+KHJlbmRlcmVyTm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KHJlbmRlcmVy
Tm9kZSkpIHsKICAgICAgICAgICAgIGlmICh0YWdzLmNvbnRhaW5zKGRvd25jYXN0PEVsZW1lbnQ+
KCpyZW5kZXJlck5vZGUpLnRhZ1FOYW1lKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MQmxvY2suY3BwCmluZGV4IDI0YzE5MGQyOTgxODg3ZWI1M2VkYWVkNzJhZTcz
MTRmZmUzYmExMWIuLjNlOWE1NDI5ZmZiOWNiMmEzOTUzMDYwOTBkMmEwOTkwNTRmNTAyNzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwCkBAIC01NSw3ICs1NSw3IEBAIFJlbmRlck1hdGhNTEJsb2NrOjpSZW5kZXJNYXRo
TUxCbG9jayhEb2N1bWVudCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0CiAKIGJv
b2wgUmVuZGVyTWF0aE1MQmxvY2s6OmlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYg
Y2hpbGQsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QKIHsKLSAgICByZXR1cm4gY2hpbGQubm9k
ZSgpICYmIGlzPEVsZW1lbnQ+KCpjaGlsZC5ub2RlKCkpOworICAgIHJldHVybiBpczxFbGVtZW50
PihjaGlsZC5ub2RlKCkpOwogfQogCiBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MQmxvY2s+IFJlbmRl
ck1hdGhNTEJsb2NrOjpjcmVhdGVBbm9ueW1vdXNNYXRoTUxCbG9jaygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAKaW5k
ZXggZTExNDY0ZmVlMjA1OTY5YjZjZDhhNzc0MTUzNmM3NTQ1MjJhMDI1My4uODgzYTIyZGJiZWI5
ZjJlZDllNmE2OWM0NmU2ODc0OGRlM2RkYjI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcApAQCAtNjcsOCArNjcs
OCBAQCB2b2lkIFJlbmRlclNWR0dyYWRpZW50U3RvcDo6bGF5b3V0KCkKIAogU1ZHR3JhZGllbnRF
bGVtZW50KiBSZW5kZXJTVkdHcmFkaWVudFN0b3A6OmdyYWRpZW50RWxlbWVudCgpCiB7Ci0gICAg
aWYgKGVsZW1lbnQoKS5wYXJlbnRFbGVtZW50KCkgJiYgaXM8U1ZHR3JhZGllbnRFbGVtZW50Pigq
ZWxlbWVudCgpLnBhcmVudEVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiAmZG93bmNhc3Q8U1ZH
R3JhZGllbnRFbGVtZW50PigqZWxlbWVudCgpLnBhcmVudEVsZW1lbnQoKSk7CisgICAgaWYgKGlz
PFNWR0dyYWRpZW50RWxlbWVudD4oZWxlbWVudCgpLnBhcmVudEVsZW1lbnQoKSkpCisgICAgICAg
IHJldHVybiBkb3duY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQ+KGVsZW1lbnQoKS5wYXJlbnRFbGVt
ZW50KCkpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFp
bmVyLmNwcAppbmRleCA5MGJhOGEwNjYzYmIwMWJhZTUyM2E4YTk4MzFiY2U4ZDRjNTU0NDVhLi5m
MzZhOTIwZTFjNmJjNjA1NzM4ZTM4NGFjZGZmNDMzMWE2NjgzM2MwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3Jt
YWJsZUNvbnRhaW5lci5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBSZW5kZXJTVkdUcmFuc2Zv
cm1hYmxlQ29udGFpbmVyOjpjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpCiAgICAgICAgIHVzZUVs
ZW1lbnQgPSAmZG93bmNhc3Q8U1ZHVXNlRWxlbWVudD4oZWxlbWVudCk7CiAgICAgZWxzZSBpZiAo
ZWxlbWVudC5pc0luU2hhZG93VHJlZSgpICYmIGlzPFNWR0dFbGVtZW50PihlbGVtZW50KSkgewog
ICAgICAgICBTVkdFbGVtZW50KiBjb3JyZXNwb25kaW5nRWxlbWVudCA9IGVsZW1lbnQuY29ycmVz
cG9uZGluZ0VsZW1lbnQoKTsKLSAgICAgICAgaWYgKGNvcnJlc3BvbmRpbmdFbGVtZW50ICYmIGlz
PFNWR1VzZUVsZW1lbnQ+KGNvcnJlc3BvbmRpbmdFbGVtZW50KSkKKyAgICAgICAgaWYgKGlzPFNW
R1VzZUVsZW1lbnQ+KGNvcnJlc3BvbmRpbmdFbGVtZW50KSkKICAgICAgICAgICAgIHVzZUVsZW1l
bnQgPSBkb3duY2FzdDxTVkdVc2VFbGVtZW50Pihjb3JyZXNwb25kaW5nRWxlbWVudCk7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcAppbmRleCA5ZjUxMjYxMDk5MTVlMTIxOWJlZjg5YzljYmIyZmM4N2QwYTc2OGUx
Li5lYjZiODliNWUwYWQ0ZmZiODNlMWJmZjE4N2MxY2I2NzlmOGZkN2EyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAg
LTEwNSw3ICsxMDUsNyBAQCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRl
clNWR0NvbnRlbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFBhaQogICAgIGJvb2wgaXNvbGF0
ZU1hc2tGb3JCbGVuZGluZyA9IGZhbHNlOwogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykK
LSAgICBpZiAoc3ZnU3R5bGUuaGFzTWFza2VyKCkgJiYgaXM8U1ZHR3JhcGhpY3NFbGVtZW50Pihk
b3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKSkgeworICAgIGlmIChzdmdT
dHlsZS5oYXNNYXNrZXIoKSAmJiBpczxTVkdHcmFwaGljc0VsZW1lbnQ+KGRvd25jYXN0PFNWR0Vs
ZW1lbnQ+KCpyZW5kZXJlci5lbGVtZW50KCkpKSkgewogICAgICAgICBTVkdHcmFwaGljc0VsZW1l
bnQmIGdyYXBoaWNzRWxlbWVudCA9IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKnJlbmRl
cmVyLmVsZW1lbnQoKSk7CiAgICAgICAgIGlzb2xhdGVNYXNrRm9yQmxlbmRpbmcgPSBncmFwaGlj
c0VsZW1lbnQuc2hvdWxkSXNvbGF0ZUJsZW5kaW5nKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAppbmRleCAyMmU4ZTFhZDZjYjI4Zjc2ZDJkMTVmYzQ2
ZDUxM2E3YzA0YTU3NWYzLi5jMjRjMjE2Y2RhOTNiMDEwNDE0ZDYyZWNiZTkzMTI2Y2NmNjNjYmE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcApAQCAtMzU5LDEz
ICszNTksMTMgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZVdoaXRlc3BhY2VPbmx5VGV4dFNpYmxp
bmdzQWZ0ZXJBdHRhY2hJZk5lZWRlZChOb2RlJiBjdXJyZW4KICAgICBmb3IgKE5vZGUqIHNpYmxp
bmcgPSBjdXJyZW50Lm5leHRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChzaWJsaW5nLT5uZWVkc1N0eWxlUmVjYWxjKCkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChzaWJsaW5nLT5pc0VsZW1lbnROb2Rl
KCkpIHsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpzaWJsaW5nKSkgewogICAgICAgICAgICAg
Ly8gVGV4dCByZW5kZXJlcnMgYmV5b25kIHJlbmRlcmVkIGVsZW1lbnRzIGNhbid0IGJlIGFmZmVj
dGVkLgogICAgICAgICAgICAgaWYgKCFzaWJsaW5nLT5yZW5kZXJlcigpIHx8IGlzUmVuZGVyZXJS
ZXBhcmVudGVkKHNpYmxpbmctPnJlbmRlcmVyKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICghaXM8VGV4dD4o
c2libGluZykpCisgICAgICAgIGlmICghaXM8VGV4dD4oKnNpYmxpbmcpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIFRleHQmIHRleHRTaWJsaW5nID0gZG93bmNhc3Q8VGV4dD4oKnNp
YmxpbmcpOwogICAgICAgICBpZiAoIXRleHRTaWJsaW5nLmNvbnRhaW5zT25seVdoaXRlc3BhY2Uo
KSkKQEAgLTQ3OCwxMSArNDc4LDExIEBAIHN0YXRpYyB2b2lkIGF0dGFjaENoaWxkcmVuKENvbnRh
aW5lck5vZGUmIGN1cnJlbnQsIFJlbmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSwKICAgICAgICAg
ICAgIHJlbmRlclRyZWVQb3NpdGlvbi5pbnZhbGlkYXRlTmV4dFNpYmxpbmcoKmNoaWxkLT5yZW5k
ZXJlcigpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChp
czxUZXh0PihjaGlsZCkpIHsKKyAgICAgICAgaWYgKGlzPFRleHQ+KCpjaGlsZCkpIHsKICAgICAg
ICAgICAgIGF0dGFjaFRleHRSZW5kZXJlcihkb3duY2FzdDxUZXh0PigqY2hpbGQpLCByZW5kZXJU
cmVlUG9zaXRpb24pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGlzPEVsZW1lbnQ+KGNoaWxkKSkKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjaGlsZCkp
CiAgICAgICAgICAgICBhdHRhY2hSZW5kZXJUcmVlKGRvd25jYXN0PEVsZW1lbnQ+KCpjaGlsZCks
IGluaGVyaXRlZFN0eWxlLCByZW5kZXJUcmVlUG9zaXRpb24sIG51bGxwdHIpOwogICAgIH0KIH0K
QEAgLTQ5NSwxMyArNDk1LDEzIEBAIHN0YXRpYyB2b2lkIGF0dGFjaERpc3RyaWJ1dGVkQ2hpbGRy
ZW4oSW5zZXJ0aW9uUG9pbnQmIGluc2VydGlvblBvaW50LCBSZW5kZXJTdHlsCiAgICAgZm9yIChO
b2RlKiBjdXJyZW50ID0gaW5zZXJ0aW9uUG9pbnQuZmlyc3REaXN0cmlidXRlZCgpOyBjdXJyZW50
OyBjdXJyZW50ID0gaW5zZXJ0aW9uUG9pbnQubmV4dERpc3RyaWJ1dGVkVG8oY3VycmVudCkpIHsK
ICAgICAgICAgaWYgKGN1cnJlbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZW5kZXJUcmVl
UG9zaXRpb24uaW52YWxpZGF0ZU5leHRTaWJsaW5nKCpjdXJyZW50LT5yZW5kZXJlcigpKTsKLSAg
ICAgICAgaWYgKGlzPFRleHQ+KGN1cnJlbnQpKSB7CisgICAgICAgIGlmIChpczxUZXh0PigqY3Vy
cmVudCkpIHsKICAgICAgICAgICAgIGlmIChjdXJyZW50LT5yZW5kZXJlcigpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKGRvd25jYXN0
PFRleHQ+KCpjdXJyZW50KSwgcmVuZGVyVHJlZVBvc2l0aW9uKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpczxFbGVtZW50PihjdXJyZW50KSkgeworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oKmN1cnJlbnQpKSB7CiAgICAgICAgICAgICBFbGVtZW50JiBj
dXJyZW50RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpjdXJyZW50KTsKICAgICAgICAgICAg
IGlmIChjdXJyZW50RWxlbWVudC5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIGRldGFjaFJl
bmRlclRyZWUoY3VycmVudEVsZW1lbnQpOwpAQCAtNjUxLDExICs2NTEsMTEgQEAgc3RhdGljIHZv
aWQgYXR0YWNoUmVuZGVyVHJlZShFbGVtZW50JiBjdXJyZW50LCBSZW5kZXJTdHlsZSYgaW5oZXJp
dGVkU3R5bGUsIFJlbmQKIHN0YXRpYyB2b2lkIGRldGFjaERpc3RyaWJ1dGVkQ2hpbGRyZW4oSW5z
ZXJ0aW9uUG9pbnQmIGluc2VydGlvblBvaW50KQogewogICAgIGZvciAoTm9kZSogY3VycmVudCA9
IGluc2VydGlvblBvaW50LmZpcnN0RGlzdHJpYnV0ZWQoKTsgY3VycmVudDsgY3VycmVudCA9IGlu
c2VydGlvblBvaW50Lm5leHREaXN0cmlidXRlZFRvKGN1cnJlbnQpKSB7Ci0gICAgICAgIGlmIChp
czxUZXh0PihjdXJyZW50KSkgeworICAgICAgICBpZiAoaXM8VGV4dD4oKmN1cnJlbnQpKSB7CiAg
ICAgICAgICAgICBkZXRhY2hUZXh0UmVuZGVyZXIoZG93bmNhc3Q8VGV4dD4oKmN1cnJlbnQpKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpczxFbGVtZW50
PihjdXJyZW50KSkKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjdXJyZW50KSkKICAgICAgICAg
ICAgIGRldGFjaFJlbmRlclRyZWUoZG93bmNhc3Q8RWxlbWVudD4oKmN1cnJlbnQpKTsKICAgICB9
CiB9CkBAIC02NjYsMTEgKzY2NiwxMSBAQCBzdGF0aWMgdm9pZCBkZXRhY2hDaGlsZHJlbihDb250
YWluZXJOb2RlJiBjdXJyZW50LCBEZXRhY2hUeXBlIGRldGFjaFR5cGUpCiAgICAgICAgIGRldGFj
aERpc3RyaWJ1dGVkQ2hpbGRyZW4oZG93bmNhc3Q8SW5zZXJ0aW9uUG9pbnQ+KGN1cnJlbnQpKTsK
IAogICAgIGZvciAoTm9kZSogY2hpbGQgPSBjdXJyZW50LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPFRleHQ+KGNoaWxk
KSkgeworICAgICAgICBpZiAoaXM8VGV4dD4oKmNoaWxkKSkgewogICAgICAgICAgICAgU3R5bGU6
OmRldGFjaFRleHRSZW5kZXJlcihkb3duY2FzdDxUZXh0PigqY2hpbGQpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpczxFbGVtZW50PihjaGlsZCkpCisg
ICAgICAgIGlmIChpczxFbGVtZW50PigqY2hpbGQpKQogICAgICAgICAgICAgZGV0YWNoUmVuZGVy
VHJlZShkb3duY2FzdDxFbGVtZW50PigqY2hpbGQpLCBkZXRhY2hUeXBlKTsKICAgICB9CiAgICAg
Y3VycmVudC5jbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwpAQCAtODE1LDExICs4MTUsMTEg
QEAgc3RhdGljIHZvaWQgcmVzb2x2ZVNoYWRvd1RyZWUoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwg
RWxlbWVudCYgaG9zdCwgU3R5bGU6OkNoYW4KICAgICBmb3IgKE5vZGUqIGNoaWxkID0gc2hhZG93
Um9vdC5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7
CiAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlclRyZWVQ
b3NpdGlvbi5pbnZhbGlkYXRlTmV4dFNpYmxpbmcoKmNoaWxkLT5yZW5kZXJlcigpKTsKLSAgICAg
ICAgaWYgKGlzPFRleHQ+KGNoaWxkKSAmJiBjaGlsZC0+bmVlZHNTdHlsZVJlY2FsYygpKSB7Cisg
ICAgICAgIGlmIChpczxUZXh0PigqY2hpbGQpICYmIGNoaWxkLT5uZWVkc1N0eWxlUmVjYWxjKCkp
IHsKICAgICAgICAgICAgIHJlc29sdmVUZXh0Tm9kZShkb3duY2FzdDxUZXh0PigqY2hpbGQpLCBy
ZW5kZXJUcmVlUG9zaXRpb24pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGlzPEVsZW1lbnQ+KGNoaWxkKSkKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpj
aGlsZCkpCiAgICAgICAgICAgICByZXNvbHZlVHJlZShkb3duY2FzdDxFbGVtZW50PigqY2hpbGQp
LCBob3N0LnJlbmRlcmVyKCktPnN0eWxlKCksIHJlbmRlclRyZWVQb3NpdGlvbiwgY2hhbmdlKTsK
ICAgICB9CiAKQEAgLTkzOSwxMSArOTM5LDExIEBAIHZvaWQgcmVzb2x2ZVRyZWUoRWxlbWVudCYg
Y3VycmVudCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlLCBSZW5kZXJUcmVlUG9zaXRpCiAg
ICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBjdXJyZW50LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJPYmpl
Y3QqIGNoaWxkUmVuZGVyZXIgPSBjaGlsZC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICBj
aGlsZFJlbmRlclRyZWVQb3NpdGlvbi5pbnZhbGlkYXRlTmV4dFNpYmxpbmcoKmNoaWxkUmVuZGVy
ZXIpOwotICAgICAgICAgICAgaWYgKGlzPFRleHQ+KGNoaWxkKSAmJiBjaGlsZC0+bmVlZHNTdHls
ZVJlY2FsYygpKSB7CisgICAgICAgICAgICBpZiAoaXM8VGV4dD4oKmNoaWxkKSAmJiBjaGlsZC0+
bmVlZHNTdHlsZVJlY2FsYygpKSB7CiAgICAgICAgICAgICAgICAgcmVzb2x2ZVRleHROb2RlKGRv
d25jYXN0PFRleHQ+KCpjaGlsZCksIGNoaWxkUmVuZGVyVHJlZVBvc2l0aW9uKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghaXM8RWxl
bWVudD4oY2hpbGQpKQorICAgICAgICAgICAgaWYgKCFpczxFbGVtZW50PigqY2hpbGQpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBFbGVtZW50JiBjaGlsZEVsZW1l
bnQgPSBkb3duY2FzdDxFbGVtZW50PigqY2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5j
cHAKaW5kZXggNGVjZjUyYmZiYjQyMmZjOGQzMDZkNWNhZTI3YjZkOWZjOTA0NzMwOC4uNTUxMDZj
ZTZhNmUwNjk2OGJlZDg5N2E0ZjI2MjhmMzUxMjI5Y2IwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVs
ZW1lbnQuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBTVkdBRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAKICAgICAgICAgICAgIGlmICh1cmxbMF0gPT0gJyMn
KSB7CiAgICAgICAgICAgICAgICAgRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRyZWVTY29wZSgp
LmdldEVsZW1lbnRCeUlkKHVybC5zdWJzdHJpbmdTaGFyaW5nSW1wbCgxKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRhcmdldEVsZW1lbnQgJiYgaXM8U1ZHU01JTEVsZW1lbnQ+KCp0YXJnZXRFbGVt
ZW50KSkgeworICAgICAgICAgICAgICAgIGlmIChpczxTVkdTTUlMRWxlbWVudD4odGFyZ2V0RWxl
bWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8U1ZHU01JTEVsZW1lbnQ+KCp0
YXJnZXRFbGVtZW50KS5iZWdpbkJ5TGlua0FjdGl2YXRpb24oKTsKICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAKaW5kZXggYTZmMDdi
ODE2MDUwZTBlNDBhYmZmYzVmMGMzYmVmNDJmN2RiMjRlMC4uNGFkMDYzZGU4ZWUyYTY3MTlkZDk1
MWQzYmE1YmU3YzZiNzczZmQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fs
dEdseXBoRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxl
bWVudC5jcHAKQEAgLTk0LDEyICs5NCwxMiBAQCBib29sIFNWR0FsdEdseXBoRWxlbWVudDo6aGFz
VmFsaWRHbHlwaEVsZW1lbnRzKFZlY3RvcjxTdHJpbmc+JiBnbHlwaE5hbWVzKSBjb25zdAogICAg
IGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzPFNWR0ds
eXBoRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICBpZiAoaXM8U1ZHR2x5cGhFbGVtZW50PigqZWxl
bWVudCkpIHsKICAgICAgICAgZ2x5cGhOYW1lcy5hcHBlbmQodGFyZ2V0KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGlzPFNWR0FsdEdseXBoRGVmRWxlbWVudD4oZWxl
bWVudCkKKyAgICBpZiAoaXM8U1ZHQWx0R2x5cGhEZWZFbGVtZW50PigqZWxlbWVudCkKICAgICAg
ICAgJiYgZG93bmNhc3Q8U1ZHQWx0R2x5cGhEZWZFbGVtZW50PigqZWxlbWVudCkuaGFzVmFsaWRH
bHlwaEVsZW1lbnRzKGdseXBoTmFtZXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKaW5kZXggODU1YTIz
ODZkYTMwZmM0Mjc5Nzg4M2FkMzExNTY4ZDk2MDc2OWE4My4uYzU1OTQzYWUxNGE4NDNmOTFiMTYy
M2JjODM0N2JkZTlmYWY2MjBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuY3BwCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpCiAgICAgaWYgKHRhcmdldEVsZW1lbnQt
Pmhhc1RhZ05hbWUoZ1RhZykKICAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFtZShk
ZWZzVGFnKQogICAgICAgICB8fCB0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKHVzZVRhZykKLSAg
ICAgICAgfHwgaXM8U1ZHSW1hZ2VFbGVtZW50Pih0YXJnZXRFbGVtZW50KQorICAgICAgICB8fCBp
czxTVkdJbWFnZUVsZW1lbnQ+KCp0YXJnZXRFbGVtZW50KQogICAgICAgICB8fCB0YXJnZXRFbGVt
ZW50LT5oYXNUYWdOYW1lKHN3aXRjaFRhZykKICAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFz
VGFnTmFtZShwYXRoVGFnKQogICAgICAgICB8fCB0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKHJl
Y3RUYWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmNwcAppbmRleCAxNDEzZGY0Yzk3OWVhMTY2
MzNiNWJmOGFjY2QwOGUyMzEzMTgzYTQxLi4zYjkwZDNjODgzODNmNDY3MDQyMDUxYjExNzZkOGNm
YTg3M2E2NzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5jcHAKQEAgLTQyLDcgKzQyLDcg
QEAgU1ZHRG9jdW1lbnQ6OlNWR0RvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwp
CiBTVkdTVkdFbGVtZW50KiBTVkdEb2N1bWVudDo6cm9vdEVsZW1lbnQoKSBjb25zdAogewogICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudEVsZW1lbnQoKTsKLSAgICBpZiAoZWxlbWVudCAm
JiBpczxTVkdTVkdFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4o
ZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdTVkdFbGVtZW50PihlbGVtZW50
KTsKIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4
IDUyM2E3NTZjMTQ2MDBjYzY0ZmFiOWFlYjBkMTdkNWM0OGQ2YjJkMDIuLmI5Mzk5ZjMxMWYwNzA0
NjIwMTkxMzlhMzVkZWE1YjQzYjNlN2YwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAK
QEAgLTMyMCw3ICszMjAsNyBAQCBTVkdFbGVtZW50UmFyZURhdGEmIFNWR0VsZW1lbnQ6OmVuc3Vy
ZVNWR1JhcmVEYXRhKCkKIAogYm9vbCBTVkdFbGVtZW50Ojppc091dGVybW9zdFNWR1NWR0VsZW1l
bnQoKSBjb25zdAogewotICAgIGlmICghaXM8U1ZHU1ZHRWxlbWVudD4odGhpcykpCisgICAgaWYg
KCFpczxTVkdTVkdFbGVtZW50PigqdGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIElmIHdlJ3JlIGxpdmluZyBpbiBhIHNoYWRvdyB0cmVlLCB3ZSdyZSBhIDxzdmc+IGVsZW1l
bnQgdGhhdCBnb3QgY3JlYXRlZCBhcyByZXBsYWNlbWVudApAQCAtMzk2LDcgKzM5Niw3IEBAIFNW
R1NWR0VsZW1lbnQqIFNWR0VsZW1lbnQ6Om93bmVyU1ZHRWxlbWVudCgpIGNvbnN0CiB7CiAgICAg
Q29udGFpbmVyTm9kZSogbm9kZSA9IHBhcmVudE9yU2hhZG93SG9zdE5vZGUoKTsKICAgICB3aGls
ZSAobm9kZSkgewotICAgICAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4obm9kZSkpCisgICAgICAg
IGlmIChpczxTVkdTVkdFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8U1ZHU1ZHRWxlbWVudD4obm9kZSk7CiAKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE9y
U2hhZG93SG9zdE5vZGUoKTsKQEAgLTQxMSw3ICs0MTEsNyBAQCBTVkdFbGVtZW50KiBTVkdFbGVt
ZW50Ojp2aWV3cG9ydEVsZW1lbnQoKSBjb25zdAogICAgIC8vIHRvIGRldGVybWluZSB0aGUgIm92
ZXJmbG93IiBwcm9wZXJ0eS4gPHVzZT4gb24gPHN5bWJvbD4gd291bGRuJ3Qgd29yayBvdGhlcndo
aXNlLgogICAgIENvbnRhaW5lck5vZGUqIG5vZGUgPSBwYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7
CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKGlzPFNWR1NWR0VsZW1lbnQ+KG5vZGUp
IHx8IGlzPFNWR0ltYWdlRWxlbWVudD4obm9kZSkgfHwgbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1l
czo6c3ltYm9sVGFnKSkKKyAgICAgICAgaWYgKGlzPFNWR1NWR0VsZW1lbnQ+KCpub2RlKSB8fCBp
czxTVkdJbWFnZUVsZW1lbnQ+KCpub2RlKSB8fCBub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpz
eW1ib2xUYWcpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR0VsZW1lbnQ+KG5vZGUp
OwogCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAppbmRleCA1MDkzYjJlZDFiN2VhNjIzOGY3NjY2ZDhhODk4
MGQ3NDc5YTAzZGJkLi4yNzJjZTk0MmI4N2QyMWIwYTdiNDA0OGMxOWM0NTJiNjdmODQ3Y2UxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIFNW
R0ZvbnREYXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9y
LCBHbHlwaERhdGEmIGdseQogICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50UmVuZGVyZXJFbGVt
ZW50ID0gcGFyZW50UmVuZGVyZXItPmVsZW1lbnQoKSkgewogICAgICAgICAgICAgbGFuZ3VhZ2Ug
PSBwYXJlbnRSZW5kZXJlckVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIp
OwogCi0gICAgICAgICAgICBpZiAoaXM8U1ZHQWx0R2x5cGhFbGVtZW50PihwYXJlbnRSZW5kZXJl
ckVsZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAoaXM8U1ZHQWx0R2x5cGhFbGVtZW50PigqcGFy
ZW50UmVuZGVyZXJFbGVtZW50KSkgewogICAgICAgICAgICAgICAgIFNWR0FsdEdseXBoRWxlbWVu
dCYgYWx0R2x5cGggPSBkb3duY2FzdDxTVkdBbHRHbHlwaEVsZW1lbnQ+KCpwYXJlbnRSZW5kZXJl
ckVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmICghYWx0R2x5cGguaGFzVmFsaWRHbHlwaEVs
ZW1lbnRzKGFsdEdseXBoTmFtZXMpKQogICAgICAgICAgICAgICAgICAgICBhbHRHbHlwaE5hbWVz
LmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCmluZGV4
IDJkZmM3NmU1YjIyZTBjN2FjNjQ0YTE5MjBhZmViYzcyMmY2YTkzYmEuLjA2ZGQyNDgwNGIyNDdl
NWQ5MzZmNTU0MWQ4MGJkY2I1NjY2MDUzMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RmFjZUVsZW1lbnQuY3BwCkBAIC0yMTYsNyArMjE2LDcgQEAgU3RyaW5nIFNWR0ZvbnRGYWNlRWxl
bWVudDo6Zm9udEZhbWlseSgpIGNvbnN0CiBTVkdGb250RWxlbWVudCogU1ZHRm9udEZhY2VFbGVt
ZW50Ojphc3NvY2lhdGVkRm9udEVsZW1lbnQoKSBjb25zdAogewogICAgIEFTU0VSVChwYXJlbnRO
b2RlKCkgPT0gbV9mb250RWxlbWVudCk7Ci0gICAgQVNTRVJUKCFwYXJlbnROb2RlKCkgfHwgaXM8
U1ZHRm9udEVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpOworICAgIEFTU0VSVCghcGFyZW50Tm9kZSgp
IHx8IGlzPFNWR0ZvbnRFbGVtZW50PigqcGFyZW50Tm9kZSgpKSk7CiAgICAgcmV0dXJuIG1fZm9u
dEVsZW1lbnQ7CiB9CiAKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVu
dDo6cmVidWlsZEZvbnRGYWNlKCkKICAgICAvLyB3ZSBjdXJyZW50bHkgaWdub3JlIGFsbCBidXQg
dGhlIGZpcnN0IHNyYyBlbGVtZW50LCBhbHRlcm5hdGl2ZWx5IHdlIGNvdWxkIGNvbmNhdCB0aGVt
CiAgICAgYXV0byBzcmNFbGVtZW50ID0gY2hpbGRyZW5PZlR5cGU8U1ZHRm9udEZhY2VTcmNFbGVt
ZW50PigqdGhpcykuZmlyc3QoKTsKIAotICAgIGJvb2wgZGVzY3JpYmVzUGFyZW50Rm9udCA9IGlz
PFNWR0ZvbnRFbGVtZW50PihwYXJlbnROb2RlKCkpOworICAgIGJvb2wgZGVzY3JpYmVzUGFyZW50
Rm9udCA9IGlzPFNWR0ZvbnRFbGVtZW50PigqcGFyZW50Tm9kZSgpKTsKICAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBsaXN0OwogCiAgICAgaWYgKGRlc2NyaWJlc1BhcmVudEZvbnQpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZVNyY0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHAKaW5kZXggMmY4MDZiYmJi
MjZkZGM4NjRhNWYxZjMwYjlhYmRkYWJjOGY1ZGU3OC4uNmFjMWQ3YmY4YTBhY2Y3Y2JhMWYwODc5
MTRmNGI5MDE1NWVjZTU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRG
YWNlU3JjRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlU3Jj
RWxlbWVudC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IFNW
R0ZvbnRGYWNlU3JjRWxlbWVudDo6c3JjVmFsdWUoKSBjb25zdAogdm9pZCBTVkdGb250RmFjZVNy
Y0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQogewog
ICAgIFNWR0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjaGFuZ2UpOwotICAgIGlmIChwYXJlbnRO
b2RlKCkgJiYgaXM8U1ZHRm9udEZhY2VFbGVtZW50PihwYXJlbnROb2RlKCkpKQorICAgIGlmIChp
czxTVkdGb250RmFjZUVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpCiAgICAgICAgIGRvd25jYXN0PFNW
R0ZvbnRGYWNlRWxlbWVudD4oKnBhcmVudE5vZGUoKSkucmVidWlsZEZvbnRGYWNlKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKaW5kZXggZDkxYTQ3YmFmOWEzNTQz
MmY1ZjExY2FjYzVkM2FhOWQzMGE3OWZhNi4uZmExMjI1MDBlNzA2ZjZlMjViOTYwYWZmYTQyNTM4
NzNkNGE1YjMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKQEAgLTQ3
LDcgKzQ3LDcgQEAgUGFzc1JlZlB0cjxTVkdHbHlwaEVsZW1lbnQ+IFNWR0dseXBoRWxlbWVudDo6
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUKIHZvaWQgU1ZHR2x5cGhFbGVtZW50
OjppbnZhbGlkYXRlR2x5cGhDYWNoZSgpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogZm9udE5vZGUg
PSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKGZvbnROb2RlICYmIGlzPFNWR0ZvbnRFbGVtZW50Pihm
b250Tm9kZSkpCisgICAgaWYgKGlzPFNWR0ZvbnRFbGVtZW50Pihmb250Tm9kZSkpCiAgICAgICAg
IGRvd25jYXN0PFNWR0ZvbnRFbGVtZW50PigqZm9udE5vZGUpLmludmFsaWRhdGVHbHlwaENhY2hl
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKaW5kZXggNDcyYTYz
MzkwZTk5MWMwYTg1ZDQxMzg2NjZjYTU5ZWEwMGMyYjlmOC4uYmZkOTMxOWNhYTkxYzljN2NiNjUw
OThjOWNlYjcyZjg4NTc2OWI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hL
ZXJuRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5j
cHAKQEAgLTQ0LDcgKzQ0LDcgQEAgUGFzc1JlZlB0cjxTVkdIS2VybkVsZW1lbnQ+IFNWR0hLZXJu
RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUKIE5vZGU6Okluc2Vy
dGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHSEtlcm5FbGVtZW50OjppbnNlcnRlZEludG8oQ29u
dGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKIHsKICAgICBDb250YWluZXJOb2RlKiBmb250Tm9kZSA9
IHBhcmVudE5vZGUoKTsKLSAgICBpZiAoZm9udE5vZGUgJiYgaXM8U1ZHRm9udEVsZW1lbnQ+KGZv
bnROb2RlKSkKKyAgICBpZiAoaXM8U1ZHRm9udEVsZW1lbnQ+KGZvbnROb2RlKSkKICAgICAgICAg
ZG93bmNhc3Q8U1ZHRm9udEVsZW1lbnQ+KCpmb250Tm9kZSkuaW52YWxpZGF0ZUdseXBoQ2FjaGUo
KTsKIAogICAgIHJldHVybiBTVkdFbGVtZW50OjppbnNlcnRlZEludG8ocm9vdFBhcmVudCk7CkBA
IC01Myw3ICs1Myw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHSEtl
cm5FbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYKIHZvaWQgU1ZHSEtlcm5FbGVt
ZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQogewogICAgIENvbnRh
aW5lck5vZGUqIGZvbnROb2RlID0gcGFyZW50Tm9kZSgpOwotICAgIGlmIChmb250Tm9kZSAmJiBp
czxTVkdGb250RWxlbWVudD4oZm9udE5vZGUpKQorICAgIGlmIChpczxTVkdGb250RWxlbWVudD4o
Zm9udE5vZGUpKQogICAgICAgICBkb3duY2FzdDxTVkdGb250RWxlbWVudD4oKmZvbnROb2RlKS5p
bnZhbGlkYXRlR2x5cGhDYWNoZSgpOwogCiAgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9v
dFBhcmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKaW5kZXggYzA1
YTczZTllMDJjNmUxNjEyZWI4ZjQ4N2U2YzhkMjkxOTk3N2I1YS4uYjlhNjkwMTMzNzkxNmQzNmQ1
MTA2ZDM4MGM3NmRjNGIxNDU5Njc1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xlbmd0aENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250
ZXh0LmNwcApAQCAtMzE4LDcgKzMxOCw3IEBAIGJvb2wgU1ZHTGVuZ3RoQ29udGV4dDo6ZGV0ZXJt
aW5lVmlld3BvcnQoRmxvYXRTaXplJiB2aWV3cG9ydFNpemUpIGNvbnN0CiAKICAgICAvLyBUYWtl
IHNpemUgZnJvbSBuZWFyZXN0IHZpZXdwb3J0IGVsZW1lbnQuCiAgICAgU1ZHRWxlbWVudCogdmll
d3BvcnRFbGVtZW50ID0gbV9jb250ZXh0LT52aWV3cG9ydEVsZW1lbnQoKTsKLSAgICBpZiAoIXZp
ZXdwb3J0RWxlbWVudCB8fCAhaXM8U1ZHU1ZHRWxlbWVudD4odmlld3BvcnRFbGVtZW50KSkKKyAg
ICBpZiAoIWlzPFNWR1NWR0VsZW1lbnQ+KHZpZXdwb3J0RWxlbWVudCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGNvbnN0IFNWR1NWR0VsZW1lbnQmIHN2ZyA9IGRvd25jYXN0PFNWR1NW
R0VsZW1lbnQ+KCp2aWV3cG9ydEVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAppbmRleCBkYzRmMmIyMzIyYzE3ODRjZWIyYzc5MDdl
ZTc0NDRkZTI3YzI5MDhiLi5lNzI1YmQ5YTk0Yzg2M2NkMGY3YmZmNTIxNWYzMDE5ODI0YzYzMGI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNw
cApAQCAtMTczLDcgKzE3Myw3IEBAIGJvb2wgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpjb2xs
ZWN0R3JhZGllbnRBdHRyaWJ1dGVzKExpbmVhckdyYWRpZW50QXR0cmlidXRlCiAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICAgLy8gUmVzcGVjdCB4bGluazpocmVmLCB0YWtlIGF0dHJpYnV0ZXMg
ZnJvbSByZWZlcmVuY2VkIGVsZW1lbnQKICAgICAgICAgTm9kZSogcmVmTm9kZSA9IFNWR1VSSVJl
ZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoY3VycmVudC0+aHJlZigpLCBkb2N1
bWVudCgpKTsKLSAgICAgICAgaWYgKHJlZk5vZGUgJiYgaXM8U1ZHR3JhZGllbnRFbGVtZW50Pigq
cmVmTm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPFNWR0dyYWRpZW50RWxlbWVudD4ocmVmTm9kZSkp
IHsKICAgICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQ+KHJl
Zk5vZGUpOwogCiAgICAgICAgICAgICAvLyBDeWNsZSBkZXRlY3Rpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xvY2F0YWJsZS5jcHAKaW5kZXggZmZjNGI2Y2E2MmZiNWQ3NmUyZmJjYmNjMjZjY2I4ZGE1MDY3
NTMxNi4uOWYyYTU1NGEzNjI0ZTkwMjU0NmYyOWQwY2JiMWU5NjJlMmU0ODNlMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAgc3RhdGljIGJvb2wgaXNW
aWV3cG9ydEVsZW1lbnQoTm9kZSogbm9kZSkKICAgICByZXR1cm4gKG5vZGUtPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnN2Z1RhZykKICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6
c3ltYm9sVGFnKQogICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWdu
T2JqZWN0VGFnKQotICAgICAgICB8fCBpczxTVkdJbWFnZUVsZW1lbnQ+KG5vZGUpKTsKKyAgICAg
ICAgfHwgaXM8U1ZHSW1hZ2VFbGVtZW50Pigqbm9kZSkpOwogfQogCiBTVkdFbGVtZW50KiBTVkdM
b2NhdGFibGU6Om5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCogZWxlbWVu
dCkKQEAgLTEwMSw3ICsxMDEsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxlOjpnZXRU
cmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0LCBFeGNlcHRpbwogewogICAgIEFm
ZmluZVRyYW5zZm9ybSBjdG0gPSBnZXRDVE0oc3R5bGVVcGRhdGVTdHJhdGVneSk7CiAKLSAgICBp
ZiAodGFyZ2V0ICYmIGlzPFNWR0dyYXBoaWNzRWxlbWVudD4odGFyZ2V0KSkgeworICAgIGlmIChp
czxTVkdHcmFwaGljc0VsZW1lbnQ+KHRhcmdldCkpIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IHRhcmdldENUTSA9IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKnRhcmdldCkuZ2V0Q1RN
KHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogICAgICAgICBpZiAoIXRhcmdldENUTS5pc0ludmVydGli
bGUoKSkgewogICAgICAgICAgICAgZWMgPSBTVkdFeGNlcHRpb246OlNWR19NQVRSSVhfTk9UX0lO
VkVSVEFCTEU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCmluZGV4IGI1Zjhh
NzI4YTQ0YjBiNGQ1M2Y5Y2QxOTg4MzdiMjY2Mzc5OTE0NDYuLjdjYTViMGU3OTgxNGYzMDY3NWM1
NDQ3YjI4M2U5Y2Y2ODUyODYxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdN
UGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQu
Y3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBTVkdNUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiBTVkdQYXRoRWxlbWVudCog
U1ZHTVBhdGhFbGVtZW50OjpwYXRoRWxlbWVudCgpCiB7CiAgICAgRWxlbWVudCogdGFyZ2V0ID0g
dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVudCgpKTsKLSAgICBpZiAo
dGFyZ2V0ICYmIGlzPFNWR1BhdGhFbGVtZW50Pih0YXJnZXQpKQorICAgIGlmIChpczxTVkdQYXRo
RWxlbWVudD4odGFyZ2V0KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR1BhdGhFbGVtZW50
Pih0YXJnZXQpOwogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTY4LDcgKzE2OCw3IEBAIHZv
aWQgU1ZHTVBhdGhFbGVtZW50Ojp0YXJnZXRQYXRoQ2hhbmdlZCgpCiAKIHZvaWQgU1ZHTVBhdGhF
bGVtZW50Ojpub3RpZnlQYXJlbnRPZlBhdGhDaGFuZ2UoQ29udGFpbmVyTm9kZSogcGFyZW50KQog
ewotICAgIGlmIChwYXJlbnQgJiYgaXM8U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ+KHBhcmVudCkp
CisgICAgaWYgKGlzPFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50PihwYXJlbnQpKQogICAgICAgICBk
b3duY2FzdDxTVkdBbmltYXRlTW90aW9uRWxlbWVudD4oKnBhcmVudCkudXBkYXRlQW5pbWF0aW9u
UGF0aCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCAxMmM0
YTM4NWE5NDBhZjNhNmRiYzNlMmEzY2RhZTQwZTFiYTFiZjdiLi4wNTVmZTAzNzE5Y2Q3YWI4MTVh
OTYzOGM2ZmRjMTM0NGVmNjY2ZGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5j
cHAKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjppbnZhbGlkYXRlTVBh
dGhEZXBlbmRlbmNpZXMoKQogICAgIC8vIG1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUlu
dmFsaWRhdGlvbiBzbyB3ZSB1cGRhdGUgYW55IG1wYXRoIGRlcGVuZGVuY2llcyBtYW51YWxseS4K
ICAgICBpZiAoSGFzaFNldDxTVkdFbGVtZW50Kj4qIGRlcGVuZGVuY2llcyA9IGRvY3VtZW50KCku
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldCh0aGlz
KSkgewogICAgICAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiAqZGVwZW5kZW5jaWVzKSB7Ci0gICAg
ICAgICAgICBpZiAoaXM8U1ZHTVBhdGhFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgICAgIGlm
IChpczxTVkdNUGF0aEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgICAgICBkb3duY2Fz
dDxTVkdNUGF0aEVsZW1lbnQ+KCplbGVtZW50KS50YXJnZXRQYXRoQ2hhbmdlZCgpOwogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKaW5kZXgg
OWJkNGU4NWNlYjViODM4ZjA3YTE0NmZhMzVhNmYxNGZjNGNmNmFlMC4uOWIzYzdhZjYxZDdlZjg5
Zjc1OTA1Y2I1Y2YzOWI2MjY1NDQ2NWFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdHRlcm5FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVy
bkVsZW1lbnQuY3BwCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6
Y29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzKFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQog
CiAgICAgICAgIC8vIFJlc3BlY3QgeGxpbms6aHJlZiwgdGFrZSBhdHRyaWJ1dGVzIGZyb20gcmVm
ZXJlbmNlZCBlbGVtZW50CiAgICAgICAgIEVsZW1lbnQqIHJlZkVsZW1lbnQgPSBTVkdVUklSZWZl
cmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGN1cnJlbnQtPmhyZWYoKSwgZG9jdW1l
bnQoKSk7Ci0gICAgICAgIGlmIChyZWZFbGVtZW50ICYmIGlzPFNWR1BhdHRlcm5FbGVtZW50Pihy
ZWZFbGVtZW50KSkgeworICAgICAgICBpZiAoaXM8U1ZHUGF0dGVybkVsZW1lbnQ+KHJlZkVsZW1l
bnQpKSB7CiAgICAgICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8U1ZHUGF0dGVybkVsZW1lbnQ+
KHJlZkVsZW1lbnQpOwogCiAgICAgICAgICAgICAvLyBDeWNsZSBkZXRlY3Rpb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKaW5kZXggYjFmNTk2
Zjg3Y2M2YjU1OGVkMTczMDc2MzA1NDRlNWUxZmJhZTk4Ni4uODIxMTdmMTY4OTFhMGMwYWNmZGE0
MGYzMzg3MDUwNjk0M2MxMTVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlh
bEdyYWRpZW50RWxlbWVudC5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBib29sIFNWR1JhZGlhbEdy
YWRpZW50RWxlbWVudDo6Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhSYWRpYWxHcmFkaWVudEF0
dHJpYnV0ZQogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIC8vIFJlc3BlY3QgeGxpbms6aHJl
ZiwgdGFrZSBhdHRyaWJ1dGVzIGZyb20gcmVmZXJlbmNlZCBlbGVtZW50CiAgICAgICAgIE5vZGUq
IHJlZk5vZGUgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGN1
cnJlbnQtPmhyZWYoKSwgZG9jdW1lbnQoKSk7Ci0gICAgICAgIGlmIChyZWZOb2RlICYmIGlzPFNW
R0dyYWRpZW50RWxlbWVudD4oKnJlZk5vZGUpKSB7CisgICAgICAgIGlmIChpczxTVkdHcmFkaWVu
dEVsZW1lbnQ+KHJlZk5vZGUpKSB7CiAgICAgICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8U1ZH
R3JhZGllbnRFbGVtZW50PihyZWZOb2RlKTsKIAogICAgICAgICAgICAgLy8gQ3ljbGUgZGV0ZWN0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKaW5kZXggYzE0Y2MzYjU2ZmEyNDlm
NDQ4YTE0ZTI5ODE5N2UzMDBhYjJhNGM3MS4uZjQxYTM0NGM1NzI2Zjc4MWQzMWY2NTFhOWE2Mjgy
MjFhM2MzMjFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcApAQCAtNjYxLDEw
ICs2NjEsMTAgQEAgdm9pZCBTVkdTVkdFbGVtZW50OjpzZXR1cEluaXRpYWxWaWV3KGNvbnN0IFN0
cmluZyYgZnJhZ21lbnRJZGVudGlmaWVyLCBFbGVtZW50KgogICAgIC8vIG9yIE15RHJhd2luZy5z
dmcjeHBvaW50ZXIoaWQoJ015VmlldycpKSkgdGhlbiB0aGUgY2xvc2VzdCBhbmNlc3RvciDigJhz
dmfigJkgZWxlbWVudCBpcyBkaXNwbGF5ZWQgaW4gdGhlIHZpZXdwb3J0LgogICAgIC8vIEFueSB2
aWV3IHNwZWNpZmljYXRpb24gYXR0cmlidXRlcyBpbmNsdWRlZCBvbiB0aGUgZ2l2ZW4g4oCYdmll
d+KAmSBlbGVtZW50IG92ZXJyaWRlIHRoZSBjb3JyZXNwb25kaW5nIHZpZXcgc3BlY2lmaWNhdGlv
bgogICAgIC8vIGF0dHJpYnV0ZXMgb24gdGhlIGNsb3Nlc3QgYW5jZXN0b3Ig4oCYc3Zn4oCZIGVs
ZW1lbnQuCi0gICAgaWYgKGFuY2hvck5vZGUgJiYgaXM8U1ZHVmlld0VsZW1lbnQ+KGFuY2hvck5v
ZGUpKSB7CisgICAgaWYgKGlzPFNWR1ZpZXdFbGVtZW50PihhbmNob3JOb2RlKSkgewogICAgICAg
ICBTVkdWaWV3RWxlbWVudCYgdmlld0VsZW1lbnQgPSBkb3duY2FzdDxTVkdWaWV3RWxlbWVudD4o
KmFuY2hvck5vZGUpOwogICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gU1ZHTG9jYXRhYmxl
OjpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCZ2aWV3RWxlbWVudCk7Ci0gICAgICAgIGlmIChpczxT
VkdTVkdFbGVtZW50PihlbGVtZW50KSkgeworICAgICAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4o
KmVsZW1lbnQpKSB7CiAgICAgICAgICAgICBTVkdTVkdFbGVtZW50JiBzdmcgPSBkb3duY2FzdDxT
VkdTVkdFbGVtZW50PigqZWxlbWVudCk7CiAgICAgICAgICAgICBzdmcuaW5oZXJpdFZpZXdBdHRy
aWJ1dGVzKCZ2aWV3RWxlbWVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUZXh0Q29udGVudEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250
ZW50RWxlbWVudC5jcHAKaW5kZXggNzE3NDg4YTU0NDcyZWFhYTM3ZjJjNmZmZDhkNjY2ODM3Njc1
MzViNi4uMmM2NGEwZWQ5ZDg4NTQyZWJhYmM2NmU4YTE2NDg0N2VkZWY1YTQ5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKQEAgLTI5Niw3ICsyOTYs
NyBAQCBTVkdUZXh0Q29udGVudEVsZW1lbnQqIFNWR1RleHRDb250ZW50RWxlbWVudDo6ZWxlbWVu
dEZyb21SZW5kZXJlcihSZW5kZXJPYmplY3QqCiAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IGRv
d25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpOwogICAgIEFTU0VSVChlbGVtZW50
KTsKIAotICAgIGlmICghaXM8U1ZHVGV4dENvbnRlbnRFbGVtZW50PihlbGVtZW50KSkKKyAgICBp
ZiAoIWlzPFNWR1RleHRDb250ZW50RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIHJldHVybiBkb3duY2FzdDxTVkdUZXh0Q29udGVudEVsZW1lbnQ+KGVs
ZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCmluZGV4IDY2N2NkZmMyMTQ4
MWNjNTdmOTVkNzU1ZjA4OTNlYzYyZGE1Y2I2NTguLmVlZmM3NzE1NTY5MzE3ZjcyNTRkNjFlOWVm
MWNjYmUxMjRiZTk0ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTI4
Miw3ICsyODIsNyBAQCBzdGF0aWMgdm9pZCBkdW1wSW5zdGFuY2VUcmVlKHVuc2lnbmVkIGludCYg
ZGVwdGgsIFN0cmluZyYgdGV4dCwgU1ZHRWxlbWVudEluc3RhbgogICAgIFNWR0VsZW1lbnQqIGVs
ZW1lbnQgPSB0YXJnZXRJbnN0YW5jZS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKTsKICAgICBBU1NF
UlQoZWxlbWVudCk7CiAKLSAgICBpZiAoaXM8U1ZHVXNlRWxlbWVudD4oZWxlbWVudCkpIHsKKyAg
ICBpZiAoaXM8U1ZHVXNlRWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChkb3duY2Fz
dDxTVkdVc2VFbGVtZW50PigqZWxlbWVudCkuY2FjaGVkRG9jdW1lbnRJc1N0aWxsTG9hZGluZygp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTU0NCw5ICs1NDQsNiBAQCB2b2lkIFNW
R1VzZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0aCkKICAgICBBU1NFUlQocGF0aC5pc0Vt
cHR5KCkpOwogCiAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IG1fdGFyZ2V0RWxlbWVudEluc3Rh
bmNlID8gbV90YXJnZXRFbGVtZW50SW5zdGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCkgOiBudWxs
cHRyOwotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKGlzPFNW
R0dyYXBoaWNzRWxlbWVudD4oZWxlbWVudCkpIHsKICAgICAgICAgaWYgKCFpc0RpcmVjdFJlZmVy
ZW5jZSgqZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIFNwZWM6IEluZGlyZWN0IHJlZmVyZW5j
ZXMgYXJlIGFuIGVycm9yICgxNC4zLjUpCkBAIC03MTAsNyArNzA3LDcgQEAgdm9pZCBTVkdVc2VF
bGVtZW50OjpleHBhbmRVc2VFbGVtZW50c0luU2hhZG93VHJlZShOb2RlKiBlbGVtZW50KQogICAg
IC8vIGNvbnRhaW5zIDx1c2U+IHRhZ3MsIHdlJ2QgbWlzcyB0aGVtLiBTbyBvbmNlIHdlJ3JlIGRv
bmUgd2l0aCBzZXR0aW4nIHVwIHRoZQogICAgIC8vIGFjdHVhbCBzaGFkb3cgdHJlZSAoYWZ0ZXIg
dGhlIHNwZWNpYWwgY2FzZSBtb2RpZmljYXRpb24gZm9yIHN2Zy9zeW1ib2wpIHdlIGhhdmUKICAg
ICAvLyB0byB3YWxrIGl0IGNvbXBsZXRlbHkgYW5kIGV4cGFuZCBhbGwgPHVzZT4gZWxlbWVudHMu
Ci0gICAgaWYgKGlzPFNWR1VzZUVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgaWYgKGlzPFNWR1Vz
ZUVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICBTVkdVc2VFbGVtZW50JiB1c2UgPSBkb3du
Y2FzdDxTVkdVc2VFbGVtZW50PigqZWxlbWVudCk7CiAgICAgICAgIEFTU0VSVCghdXNlLmNhY2hl
ZERvY3VtZW50SXNTdGlsbExvYWRpbmcoKSk7CiAKQEAgLTc2Miw3ICs3NTksNyBAQCB2b2lkIFNW
R1VzZUVsZW1lbnQ6OmV4cGFuZFVzZUVsZW1lbnRzSW5TaGFkb3dUcmVlKE5vZGUqIGVsZW1lbnQp
CiAKIHZvaWQgU1ZHVXNlRWxlbWVudDo6ZXhwYW5kU3ltYm9sRWxlbWVudHNJblNoYWRvd1RyZWUo
Tm9kZSogbm9kZSkKIHsKLSAgICBpZiAoaXM8U1ZHU3ltYm9sRWxlbWVudD4obm9kZSkpIHsKKyAg
ICBpZiAoaXM8U1ZHU3ltYm9sRWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgIC8vIFNwZWM6IFRo
ZSByZWZlcmVuY2VkICdzeW1ib2wnIGFuZCBpdHMgY29udGVudHMgYXJlIGRlZXAtY2xvbmVkIGlu
dG8gdGhlIGdlbmVyYXRlZCB0cmVlLAogICAgICAgICAvLyB3aXRoIHRoZSBleGNlcHRpb24gdGhh
dCB0aGUgJ3N5bWJvbCcgaXMgcmVwbGFjZWQgYnkgYW4gJ3N2ZycuIFRoaXMgZ2VuZXJhdGVkICdz
dmcnIHdpbGwKICAgICAgICAgLy8gYWx3YXlzIGhhdmUgZXhwbGljaXQgdmFsdWVzIGZvciBhdHRy
aWJ1dGVzIHdpZHRoIGFuZCBoZWlnaHQuIElmIGF0dHJpYnV0ZXMgd2lkdGggYW5kL29yCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCmluZGV4IDgxOWFiMWUwOTRjODc0YTBkNGM5
MTVkMTg5MjE0YzlkN2ZiMGZlN2MuLmI4NGMzZTc5ZTM0Mzc5ZDUyNmRlOTU2MTZlMTA1MTIxOTVk
Y2M2MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCkBAIC00NCw3ICs0
NCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHVktlcm5FbGVtZW50
OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYKIHsKICAgICBpZiAocm9vdFBhcmVudC5pbkRv
Y3VtZW50KCkpIHsKICAgICAgICAgQ29udGFpbmVyTm9kZSogZm9udE5vZGUgPSBwYXJlbnROb2Rl
KCk7Ci0gICAgICAgIGlmIChmb250Tm9kZSAmJiBpczxTVkdGb250RWxlbWVudD4oZm9udE5vZGUp
KQorICAgICAgICBpZiAoaXM8U1ZHRm9udEVsZW1lbnQ+KGZvbnROb2RlKSkKICAgICAgICAgICAg
IGRvd25jYXN0PFNWR0ZvbnRFbGVtZW50PigqZm9udE5vZGUpLmludmFsaWRhdGVHbHlwaENhY2hl
KCk7CiAgICAgfQogCkBAIC01NCw3ICs1NCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlv
blJlcXVlc3QgU1ZHVktlcm5FbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYKIHZv
aWQgU1ZHVktlcm5FbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50
KQogewogICAgIENvbnRhaW5lck5vZGUqIGZvbnROb2RlID0gcGFyZW50Tm9kZSgpOwotICAgIGlm
IChmb250Tm9kZSAmJiBpczxTVkdGb250RWxlbWVudD4oZm9udE5vZGUpKQorICAgIGlmIChpczxT
VkdGb250RWxlbWVudD4oZm9udE5vZGUpKQogICAgICAgICBkb3duY2FzdDxTVkdGb250RWxlbWVu
dD4oKmZvbnROb2RlKS5pbnZhbGlkYXRlR2x5cGhDYWNoZSgpOwogCiAgICAgU1ZHRWxlbWVudDo6
cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU1ZHU01JTEVsZW1lbnQuY3BwCmluZGV4IGQ1NDVlOWRkZWExMjViYTM3ZGM4YWNkMGQ1ZTgz
ODk2MWNkZjhiNzguLmMyOTkyMmRlOTQ0ODhkNzBhOTQyNGMwMzUxYjhlN2Y5OTg4YzYxOGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCkBA
IC0xNjUsMTAgKzE2NSwxMCBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNv
dXJjZSgpCiAgICAgU3RyaW5nIGhyZWYgPSBnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0
dHIpOwogICAgIEVsZW1lbnQqIHRhcmdldDsKICAgICBpZiAoaHJlZi5pc0VtcHR5KCkpCi0gICAg
ICAgIHRhcmdldCA9IHBhcmVudE5vZGUoKSAmJiBpczxFbGVtZW50PihwYXJlbnROb2RlKCkpID8g
ZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50Tm9kZSgpKSA6IG51bGxwdHI7CisgICAgICAgIHRhcmdl
dCA9IGlzPEVsZW1lbnQ+KHBhcmVudE5vZGUoKSkgPyBkb3duY2FzdDxFbGVtZW50PihwYXJlbnRO
b2RlKCkpIDogbnVsbHB0cjsKICAgICBlbHNlCiAgICAgICAgIHRhcmdldCA9IFNWR1VSSVJlZmVy
ZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZiwgZG9jdW1lbnQoKSwgJmlkKTsK
LSAgICBTVkdFbGVtZW50KiBzdmdUYXJnZXQgPSB0YXJnZXQgJiYgaXM8U1ZHRWxlbWVudD4odGFy
Z2V0KSA/IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkgOiBudWxscHRyOworICAgIFNWR0Vs
ZW1lbnQqIHN2Z1RhcmdldCA9IGlzPFNWR0VsZW1lbnQ+KHRhcmdldCkgPyBkb3duY2FzdDxTVkdF
bGVtZW50Pih0YXJnZXQpIDogbnVsbHB0cjsKIAogICAgIGlmIChzdmdUYXJnZXQgJiYgIXN2Z1Rh
cmdldC0+aW5Eb2N1bWVudCgpKQogICAgICAgICBzdmdUYXJnZXQgPSBudWxscHRyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCmluZGV4IDllMWI3Yzg4
M2FiZDEwZWE2ZWY2NGYwNTNkYjQ3MzliMTA1YzM2ZWYuLjk4ZTUwZjYyMzIyYzlhZDU5MTkwYWEx
ZmUyNjBhYmNmZWFhOTkxOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2VDYWNoZS5jcHAKQEAgLTkyLDcgKzkyLDcgQEAgSW1hZ2UqIFNWR0ltYWdlQ2FjaGU6Omlt
YWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBSZWZQdHI8
U1ZHSW1hZ2VGb3JDb250YWluZXI+IGltYWdlRm9yQ29udGFpbmVyID0gaXQtPnZhbHVlOwogICAg
IAogICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpOwotICAgIGlmIChub2RlICYmIGlz
PEhUTUxJbWFnZUVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJbWFnZUVsZW1lbnQ+
KG5vZGUpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsU3RyaW5nID0gZG93bmNh
c3Q8SFRNTEltYWdlRWxlbWVudD4oKm5vZGUpLmltYWdlU291cmNlVVJMKCk7CiAgICAgICAgIFVS
TCB1cmwgPSBub2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHVybFN0cmluZyk7CiAgICAgICAg
IGltYWdlRm9yQ29udGFpbmVyLT5zZXRVUkwodXJsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAppbmRleCA0NDE1NzUwMjZkNDBlMTc2YTM2ZDU3NzM2ZDY3ZTg3MTUyZGVjZWFkLi42
NTQ5NTUwYmViMjMyOWM0MjQzM2ExZTE3ZTU4NTE3YzAyNGI5ZjczIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCkBAIC01ODEsNyArNTgxLDcgQEAgTm9kZSogSW50ZXJuYWxzOjpz
aGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiBTdHJpbmcgSW50
ZXJuYWxzOjpzaGFkb3dSb290VHlwZShjb25zdCBOb2RlKiByb290LCBFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKIHsKLSAgICBpZiAoIXJvb3QgfHwgIWlzPFNoYWRvd1Jvb3Q+KHJvb3QpKSB7Cisg
ICAgaWYgKCFpczxTaGFkb3dSb290Pihyb290KSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUND
RVNTX0VSUjsKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTYyMyw3ICs2MjMs
NyBAQCB2b2lkIEludGVybmFsczo6c2V0U2hhZG93UHNldWRvSWQoRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgU3RyaW5nJiBpZCwgRXhjZXB0aW9uQwogCiBTdHJpbmcgSW50ZXJuYWxzOjp2aXNpYmxl
UGxhY2Vob2xkZXIoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoZWxlbWVudCAmJiBpczxI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgaWYgKGlzPEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSkgewogICAgICAgICBjb25zdCBIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudCYgdGV4dEZvcm1Db250cm9sRWxlbWVudCA9IGRvd25jYXN0PEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCk7CiAgICAgICAgIGlmICghdGV4dEZv
cm1Db250cm9sRWxlbWVudC5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpKQogICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwpAQCAtNjM3LDcgKzYzNyw3IEBAIFN0cmluZyBJbnRlcm5hbHM6OnZpc2li
bGVQbGFjZWhvbGRlcihFbGVtZW50KiBlbGVtZW50KQogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NP
TE9SKQogdm9pZCBJbnRlcm5hbHM6OnNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgU3RyaW5nJiBjb2xvclZhbHVlKQogewotICAgIGlmICghaXM8SFRNTElu
cHV0RWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxl
bWVudCkpCiAgICAgICAgIHJldHVybjsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1l
bnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQpA
QCAtOTEyLDcgKzkxMiw3IEBAIGJvb2wgSW50ZXJuYWxzOjp3YXNMYXN0Q2hhbmdlVXNlckVkaXQo
RWxlbWVudCogdGV4dEZpZWxkLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdGV4dEZpZWxkLT50b0lucHV0RWxlbWVudCgpKQogICAg
ICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIAotICAg
IGlmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50Pih0ZXh0RmllbGQpKQorICAgIGlmIChpczxIVE1M
VGV4dEFyZWFFbGVtZW50PigqdGV4dEZpZWxkKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxUZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0RmllbGQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwog
CiAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CkBAIC0xOTE2LDkgKzE5MTYsOSBAQCB2
b2lkIEludGVybmFsczo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5kUnVu
UG9zdExheW91dFRhc2tzKE5vZGUqCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50OwogICAgIGlmICgh
bm9kZSkKICAgICAgICAgZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKLSAgICBlbHNlIGlm
IChpczxEb2N1bWVudD4obm9kZSkpCisgICAgZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KCpub2RlKSkK
ICAgICAgICAgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4obm9kZSk7Ci0gICAgZWxzZSBp
ZiAoaXM8SFRNTElGcmFtZUVsZW1lbnQ+KG5vZGUpKQorICAgIGVsc2UgaWYgKGlzPEhUTUxJRnJh
bWVFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIGRvY3VtZW50ID0gZG93bmNhc3Q8SFRNTElGcmFt
ZUVsZW1lbnQ+KCpub2RlKS5jb250ZW50RG9jdW1lbnQoKTsKICAgICBlbHNlIHsKICAgICAgICAg
ZWMgPSBUeXBlRXJyb3I7CkBAIC0yMDgzLDcgKzIwODMsNyBAQCB2b2lkIEludGVybmFsczo6c2lt
dWxhdGVBdWRpb0ludGVycnVwdGlvbihOb2RlKiBub2RlKQogCiBib29sIEludGVybmFsczo6aXNT
ZWxlY3RQb3B1cFZpc2libGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIWlzPEhUTUxTZWxlY3RF
bGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEhUTUxTZWxlY3RFbGVtZW50Pigqbm9kZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3QgPSBk
b3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCmluZGV4IGFlYThlNGE5MGQ0MTFlZWM4
NzdiMGQ0OWUzOWY5NzBmMzI0MjIyZjEuLmFhZmQxMmFkMTVjNjE5MTgyNmIyMDMzZmFjY2FiZWI1
MWIyYTc3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRl
c3RTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0
U3VwcG9ydC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBpbmplY3RJbnRlcm5hbHNPYmplY3Qo
SlNDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0Q29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwotICAgIGlmIChpczxEb2N1bWVudD4oc2NyaXB0Q29udGV4dCkpCisgICAgaWYgKGlzPERv
Y3VtZW50Pigqc2NyaXB0Q29udGV4dCkpCiAgICAgICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0
KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgSW50ZXJuYWxzOjppbnRlcm5hbHNJZCksIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBJbnRlcm5hbHM6OmNyZWF0ZShkb3duY2FzdDxEb2N1bWVu
dD4oc2NyaXB0Q29udGV4dCkpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCmluZGV4IDRkNTM0ZWU5YThmNWZjMzI1OThiNDhkYWU1OWI1ZjAwYWM2MjI1N2UuLjgzMDMx
YjhkYmEyNTRlMTc3Zjg3MWZjYzhlMzU4MjE3MWNlOTY2OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcApAQCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
Om9wZW4oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBF
eGNlCiAKICAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGNoZWNrIHRoZSBpc29sYXRlZCB3
b3JsZCdzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IG9uY2Ugd2Via2l0Lm9yZy9iLzEwNDUyMCBp
cyBzb2x2ZWQuCiAgICAgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQ
b2xpY3kgPSBmYWxzZTsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkpIHsKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
KSB7CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICAgICAgaWYgKGRvY3VtZW50LmZyYW1lKCkpCiAg
ICAgICAgICAgICBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBk
b2N1bWVudC5mcmFtZSgpLT5zY3JpcHQoKS5zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2Vj
dXJpdHlQb2xpY3koKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0
aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4IDFm
ZjgzODQwNDBiNTRmOWUyZDgwMzA3Y2IzZDdjN2MxMzRkNzA0MTcuLjIxNmEzMWU3ZGFlNDcyYTBi
MjNkYTZlYzU2M2E4NjE1MDcwNDM3YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25z
LmNwcApAQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGV4cGFuZGVkTmFt
ZUxvY2FsUGFydChOb2RlKiBub2RlKQogewogICAgIC8vIFRoZSBsb2NhbCBwYXJ0IG9mIGFuIFhQ
YXRoIGV4cGFuZGVkLW5hbWUgbWF0Y2hlcyBET00gbG9jYWwgbmFtZSBmb3IgbW9zdCBub2RlIHR5
cGVzLCBleGNlcHQgZm9yIG5hbWVzcGFjZSBub2RlcyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlv
biBub2Rlcy4KICAgICBBU1NFUlQobm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpYUEFUSF9OQU1F
U1BBQ0VfTk9ERSk7IC8vIE5vdCBzdXBwb3J0ZWQgeWV0LgotICAgIGlmIChpczxQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24+KG5vZGUpKQorICAgIGlmIChpczxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KCpu
b2RlKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKm5v
ZGUpLnRhcmdldCgpOwogICAgIHJldHVybiBub2RlLT5sb2NhbE5hbWUoKS5zdHJpbmcoKTsKIH0K
QEAgLTU4Myw3ICs1ODMsNyBAQCBWYWx1ZSBGdW5MYW5nOjpldmFsdWF0ZSgpIGNvbnN0CiAgICAg
Y29uc3QgQXR0cmlidXRlKiBsYW5ndWFnZUF0dHJpYnV0ZSA9IG51bGxwdHI7CiAgICAgTm9kZSog
bm9kZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZS5nZXQoKTsKICAgICB3aGlsZSAobm9kZSkg
ewotICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPEVsZW1l
bnQ+KCpub2RlKSkgewogICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkK
ICAgICAgICAgICAgICAgICBsYW5ndWFnZUF0dHJpYnV0ZSA9IGVsZW1lbnQuZmluZEF0dHJpYnV0
ZUJ5TmFtZShYTUxOYW1lczo6bGFuZ0F0dHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoTm9kZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNw
cAppbmRleCBiODYxNjgxMjY4MGFmYjkyZTEyZmMzM2NhMGQ4OTYwYmIwOWVmOWQ1Li4wMzMyZmRl
Y2Y3YTUzOWFiYzk0N2ZjMzA0ODEwYzQ3NWEzYjY3NjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhO
b2RlU2V0LmNwcApAQCAtOTUsNyArOTUsNyBAQCBzdGF0aWMgdm9pZCBzb3J0QmxvY2sodW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgdG8sIFZlY3RvcjxWZWN0b3I8Tm9kZSo+PiYgcGFyZW50TQogICAg
ICAgICAvLyBGSVhNRTogbmFtZXNwYWNlIG5vZGVzIGFyZSBub3QgaW1wbGVtZW50ZWQuCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHNvcnRlZEVuZDsgaSA8IHRvOyArK2kpIHsKICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBwYXJlbnRNYXRyaXhbaV1bMF07Ci0gICAgICAgICAgICBpZiAoaXM8
QXR0cj4obm9kZSkgJiYgZG93bmNhc3Q8QXR0cj4oKm5vZGUpLm93bmVyRWxlbWVudCgpID09IGNv
bW1vbkFuY2VzdG9yKQorICAgICAgICAgICAgaWYgKGlzPEF0dHI+KCpub2RlKSAmJiBkb3duY2Fz
dDxBdHRyPigqbm9kZSkub3duZXJFbGVtZW50KCkgPT0gY29tbW9uQW5jZXN0b3IpCiAgICAgICAg
ICAgICAgICAgcGFyZW50TWF0cml4W2ldLnN3YXAocGFyZW50TWF0cml4W3NvcnRlZEVuZCsrXSk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNvcnRlZEVuZCAhPSBmcm9tKSB7CkBAIC0xNTcsNyAr
MTU3LDcgQEAgdm9pZCBOb2RlU2V0Ojpzb3J0KCkgY29uc3QKICAgICAgICAgVmVjdG9yPE5vZGUq
PiYgcGFyZW50c1ZlY3RvciA9IHBhcmVudE1hdHJpeFtpXTsKICAgICAgICAgTm9kZSogbm9kZSA9
IG1fbm9kZXNbaV0uZ2V0KCk7CiAgICAgICAgIHBhcmVudHNWZWN0b3IuYXBwZW5kKG5vZGUpOwot
ICAgICAgICBpZiAoaXM8QXR0cj4obm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPEF0dHI+KCpub2Rl
KSkgewogICAgICAgICAgICAgbm9kZSA9IGRvd25jYXN0PEF0dHI+KCpub2RlKS5vd25lckVsZW1l
bnQoKTsKICAgICAgICAgICAgIHBhcmVudHNWZWN0b3IuYXBwZW5kKG5vZGUpOwogICAgICAgICAg
ICAgY29udGFpbnNBdHRyaWJ1dGVOb2RlcyA9IHRydWU7CkBAIC0xNzksNyArMTc5LDcgQEAgdm9p
ZCBOb2RlU2V0Ojpzb3J0KCkgY29uc3QKIAogc3RhdGljIE5vZGUqIGZpbmRSb290Tm9kZShOb2Rl
KiBub2RlKQogewotICAgIGlmIChpczxBdHRyPihub2RlKSkKKyAgICBpZiAoaXM8QXR0cj4oKm5v
ZGUpKQogICAgICAgICBub2RlID0gZG93bmNhc3Q8QXR0cj4oKm5vZGUpLm93bmVyRWxlbWVudCgp
OwogICAgIGlmIChub2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIG5vZGUgPSAmbm9kZS0+ZG9j
dW1lbnQoKTsKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIE5vZGVTZXQ6OnRyYXZlcnNhbFNvcnQo
KSBjb25zdAogICAgICAgICBpZiAobm9kZXMuY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICBz
b3J0ZWROb2Rlcy5hcHBlbmQobm9kZSk7CiAKLSAgICAgICAgaWYgKCFjb250YWluc0F0dHJpYnV0
ZU5vZGVzIHx8ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKCFjb250YWluc0F0dHJp
YnV0ZU5vZGVzIHx8ICFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwCmluZGV4IDk2ZGFjZjdjN2UxZGE1NGVhZGIzZjllZTBmMjJkOTMyOTM5NWJlM2Uu
LmFmMTBjNmM1NWY1OTIzNmFiODk5OTgwMTFhMjU5N2RlNjVlNzNhOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAK
QEAgLTYyMiw3ICs2MjIsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIo
RG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudAogICAgICAgICBlbGVt
U3RhY2suYXBwZW5kKHBhcmVudEVsZW1lbnQpOwogCiAgICAgICAgIENvbnRhaW5lck5vZGUqIG5v
ZGUgPSBwYXJlbnRFbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIGlmICghbm9kZSB8fCAh
aXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgcGFyZW50RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KG5vZGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudElPUy5tbQppbmRleCAxODVjNjYzMWNlYTFjZTFhNTUxMGViY2Fk
YjQ3MjU2NTFlNTljNGQ4Li44ZDA1YjM0ZWEyOTM5Mzg4MjY2MzE3YzViOGQ1ZDY1MjlhNWRhMDFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnRJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50SU9TLm1tCkBAIC0zMDksOCArMzA5LDYgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnRJ
T1M6OndlYkFwcE9yaWVudGF0aW9uc1VwZGF0ZWQoKQogCiB2b2lkIFdlYkNocm9tZUNsaWVudElP
Uzo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFl
bGVtZW50KQotICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihl
bGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggZTFkYzEwZGZjNDI1NDRiZGE2
YjZhODg3YTZkMzY2ZDMzMTJlYjZlOS4uMTZjMTQ2MzI1NTA5NTMzYjk2OTE5MWZkMmVhZjU3N2Y2
ZmZkNzUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5tbQpAQCAtMjE4LDggKzIxOCw2IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50
Ojp0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogCiB2b2lkIFdlYkNocm9tZUNs
aWVudDo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYg
KCFlbGVtZW50KQotICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50
PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggODg0MDU0OTAzNDI3MWI2
MDlhYWI2NTFiN2EyOTcyNDAzNGFjNzZjYy4uMThmNGUxMmE0ODg3ZTM3MzMxM2E0YzU5ZDFjODk4
N2M5NjJhODlmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtNzA1LDcgKzcwNSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAKIHZv
aWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZWxl
bWVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlm
ICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBET01IVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oZWxlbWVudCkpOwpAQCAtNzE1LDcgKzcxNSw3IEBAIHZvaWQgV2ViRWRpdG9y
Q2xpZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKIAogdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZWxlbWVu
dCkKIHsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICgh
aXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBE
T01IVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oZWxlbWVudCkpOwpAQCAtNzI1LDcgKzcyNSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50Ojp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQpCiAKIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCogZWxlbWVudCkK
IHsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8
SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICNpZiAhUExB
VEZPUk0oSU9TKQpAQCAtNzYzLDcgKzc2Myw3IEBAIHN0YXRpYyBTRUwgc2VsZWN0b3JGb3JLZXlF
dmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmRvVGV4
dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiBlbGVtZW50LCBLZXlib2FyZEV2ZW50KiBl
dmVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlm
ICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm4gTk87CiAK
ICAgICBET01IVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oZWxlbWVudCkpOwpAQCAtNzc1LDcgKzc3NSw3IEBAIGJvb2wgV2ViRWRp
dG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZWxlbWVudCwg
S2V5Ym9hcmRFdmVuCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRlZElu
VGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVt
ZW50PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0ga2l0KGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKTsKQEAgLTc4Niw3ICs3
ODYsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVs
ZChFbGVtZW50KiBlbGVtZW50KQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5n
ZUluVGV4dEFyZWEoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKmVs
ZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBET01IVE1MVGV4dEFyZWFFbGVtZW50KiB0
ZXh0QXJlYUVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxlbWVu
dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVz
ZW50YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRh
dGlvbi5tbQppbmRleCA4NGQzNTMxNzNiZTllZGYwYzczODJiZDJkNGNiNmFmOWJkYWY5OTQ0Li42
ZTQwYWU1MDUzNjA2YjBhM2YyZjFhMmVkN2UzZjM5ZTJhODFmZTJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQpAQCAtMzA1LDcg
KzMwNSw3IEBAIC0gKERPTUVsZW1lbnQgKillbGVtZW50V2l0aE5hbWU6KE5TU3RyaW5nICopbmFt
ZSBpbkZvcm06KERPTUVsZW1lbnQgKilmb3JtCiBzdGF0aWMgSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBFbGVt
ZW50KiBub2RlID0gY29yZShlbGVtZW50KTsKLSAgICByZXR1cm4gbm9kZSAmJiBpczxIVE1MSW5w
dXRFbGVtZW50Pihub2RlKSA/IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpIDogbnVs
bHB0cjsKKyAgICByZXR1cm4gaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkgPyBkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50Pihub2RlKSA6IG51bGxwdHI7CiB9CiAKIC0gKEJPT0wpZWxlbWVudERv
ZXNBdXRvQ29tcGxldGU6KERPTUVsZW1lbnQgKillbGVtZW50CkBAIC00NDcsNyArNDQ3LDcgQEAg
c3RhdGljIE5TU3RyaW5nKiBzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KEZyYW1lKiBmcmFt
ZSwgTlNBcnJheSogbGFiZWxzLCBFbGUKICAgICBmb3IgKG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2
aW91cyhlbGVtZW50KTsKICAgICAgICAgbiAmJiBsZW5ndGhTZWFyY2hlZCA8IGNoYXJzU2VhcmNo
ZWRUaHJlc2hvbGQ7CiAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhuKSkgewot
ICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50PihuKSB8fCBpczxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50PihuKSkgeworICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50PigqbikgfHwgaXM8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm4pKSB7CiAgICAgICAgICAgICAvLyBXZSBoaXQgYW5v
dGhlciBmb3JtIGVsZW1lbnQgb3IgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIC0gYmFpbCBvdXQKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlJlbmRlckxheWVyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJSZW5kZXJMYXllci5tbQppbmRleCA4NGZiMzc2MDBiMzNhZDc2YWY3MTY3YzkzYjRhYzJiNWQ4
OWViYTg1Li44NzhmMzQ5MTliZGI0ZjRjMDVjZGRhY2MwYjRkZjU5ZGJkZWFlODgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlckxheWVyLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTGF5ZXIubW0KQEAgLTUyLDcgKzUyLDcg
QEAgKyAoTlNTdHJpbmcgKiluYW1lRm9yTGF5ZXI6KFJlbmRlckxheWVyKilsYXllcgogICAgIGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKICAgICBOU1N0
cmluZyAqbmFtZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpyZW5kZXJlci5yZW5k
ZXJOYW1lKCldOwogCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5ub2RlKCkg
JiYgaXM8RWxlbWVudD4ocmVuZGVyZXIubm9kZSgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KHJlbmRl
cmVyLm5vZGUoKSkgOiBudWxscHRyKSB7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBpczxF
bGVtZW50PihyZW5kZXJlci5ub2RlKCkpID8gZG93bmNhc3Q8RWxlbWVudD4ocmVuZGVyZXIubm9k
ZSgpKSA6IG51bGxwdHIpIHsKICAgICAgICAgbmFtZSA9IFtuYW1lIHN0cmluZ0J5QXBwZW5kaW5n
Rm9ybWF0OkAiICVAIiwgKE5TU3RyaW5nICopZWxlbWVudC0+dGFnTmFtZSgpXTsKICAgICAgICAg
aWYgKGVsZW1lbnQtPmhhc0lEKCkpCiAgICAgICAgICAgICBuYW1lID0gW25hbWUgc3RyaW5nQnlB
cHBlbmRpbmdGb3JtYXQ6QCIgaWQ9XCIlQFwiIiwgKE5TU3RyaW5nICopZWxlbWVudC0+Z2V0SWRB
dHRyaWJ1dGUoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nl
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAKaW5kZXggOWM1MGJj
ZDg0MTRkMmI0MmM2MjExZDdjMzBlNDlhY2RlODYzMGU0MS4uZWMyYjkyM2RlM2FhNzM5ODUyZDRk
NTQ1NmIyYjg3MGU5MjcxOTc5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vRE9NQ29y
ZUNsYXNzZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcApA
QCAtMTQ5NSwyNyArMTQ5NSwyNyBAQCBET01FbGVtZW50Ojp+RE9NRWxlbWVudCgpCiBJRE9NRWxl
bWVudCogRE9NRWxlbWVudDo6Y3JlYXRlSW5zdGFuY2UoV2ViQ29yZTo6RWxlbWVudCogZSkKIHsK
ICAgICBpZiAoIWUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIEhSRVNVTFQgaHI7CiAgICAgSURPTUVsZW1lbnQqIGRvbUVsZW1lbnQgPSAwOwogCi0g
ICAgaWYgKGlzPFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudD4oZSkpIHsKKyAgICBpZiAoaXM8V2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50PigqZSkpIHsKICAgICAgICAgRE9NSFRNTEZvcm1FbGVtZW50
KiBuZXdFbGVtZW50ID0gbmV3IERPTUhUTUxGb3JtRWxlbWVudChlKTsKICAgICAgICAgaHIgPSBu
ZXdFbGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURPTUVsZW1lbnQsICh2b2lkKiopJmRvbUVs
ZW1lbnQpOwogICAgIH0gZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7CiAgICAg
ICAgIERPTUhUTUxJRnJhbWVFbGVtZW50KiBuZXdFbGVtZW50ID0gbmV3IERPTUhUTUxJRnJhbWVF
bGVtZW50KGUpOwogICAgICAgICBociA9IG5ld0VsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9J
RE9NRWxlbWVudCwgKHZvaWQqKikmZG9tRWxlbWVudCk7Ci0gICAgfSBlbHNlIGlmIChpczxXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50PihlKSkgeworICAgIH0gZWxzZSBpZiAoaXM8V2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudD4oKmUpKSB7CiAgICAgICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIG5l
d0VsZW1lbnQgPSBuZXcgRE9NSFRNTElucHV0RWxlbWVudChlKTsKICAgICAgICAgaHIgPSBuZXdF
bGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURPTUVsZW1lbnQsICh2b2lkKiopJmRvbUVsZW1l
bnQpOwotICAgIH0gZWxzZSBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGUpKSB7
CisgICAgfSBlbHNlIGlmIChpczxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4oKmUpKSB7CiAg
ICAgICAgIERPTUhUTUxPcHRpb25FbGVtZW50KiBuZXdFbGVtZW50ID0gbmV3IERPTUhUTUxPcHRp
b25FbGVtZW50KGUpOwogICAgICAgICBociA9IG5ld0VsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJ
RF9JRE9NRWxlbWVudCwgKHZvaWQqKikmZG9tRWxlbWVudCk7CiAgICAgfSBlbHNlIGlmIChlLT5o
YXNUYWdOYW1lKHNlbGVjdFRhZykpIHsKICAgICAgICAgRE9NSFRNTFNlbGVjdEVsZW1lbnQqIG5l
d0VsZW1lbnQgPSBuZXcgRE9NSFRNTFNlbGVjdEVsZW1lbnQoZSk7CiAgICAgICAgIGhyID0gbmV3
RWxlbWVudC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lET01FbGVtZW50LCAodm9pZCoqKSZkb21FbGVt
ZW50KTsKLSAgICB9IGVsc2UgaWYgKGlzPFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ+KGUp
KSB7CisgICAgfSBlbHNlIGlmIChpczxXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50PigqZSkp
IHsKICAgICAgICAgRE9NSFRNTFRleHRBcmVhRWxlbWVudCogbmV3RWxlbWVudCA9IG5ldyBET01I
VE1MVGV4dEFyZWFFbGVtZW50KGUpOwogICAgICAgICBociA9IG5ld0VsZW1lbnQtPlF1ZXJ5SW50
ZXJmYWNlKElJRF9JRE9NRWxlbWVudCwgKHZvaWQqKikmZG9tRWxlbWVudCk7CiAgICAgfSBlbHNl
IGlmIChlLT5pc0hUTUxFbGVtZW50KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L0RPTUhUTUxDbGFzc2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNw
cAppbmRleCAwMDVlNmNlMmYxYmVhZTJmM2U4MmJiYzA1NDYxNTU1MTgwM2IxZjA5Li42NzkxM2Vm
YmNjYjg1Zjg5MzJlYjc0ZTdjMWE5YWEyZTc4MzQ1ZDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vRE9NSFRN
TENsYXNzZXMuY3BwCkBAIC0yNTgsNyArMjU4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBET01IVE1MRG9jdW1lbnQ6OmJvZHkoCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSURP
TUhUTUxFbGVtZW50KiogYm9keUVsZW1lbnQpCiB7CiAgICAgKmJvZHlFbGVtZW50ID0gbnVsbHB0
cjsKLSAgICBpZiAoIW1fZG9jdW1lbnQgfHwgIWlzPEhUTUxEb2N1bWVudD4obV9kb2N1bWVudCkp
CisgICAgaWYgKCFpczxIVE1MRG9jdW1lbnQ+KG1fZG9jdW1lbnQpKQogICAgICAgICByZXR1cm4g
RV9GQUlMOwogCiAgICAgSFRNTERvY3VtZW50JiBodG1sRG9jID0gZG93bmNhc3Q8SFRNTERvY3Vt
ZW50PigqbV9kb2N1bWVudCk7CkBAIC0zMDEsNyArMzAxLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBET01IVE1MRG9jdW1lbnQ6OmZvcm1zKAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRd
ICovIElET01IVE1MQ29sbGVjdGlvbioqIGNvbGxlY3Rpb24pCiB7CiAgICAgKmNvbGxlY3Rpb24g
PSBudWxscHRyOwotICAgIGlmICghbV9kb2N1bWVudCB8fCAhaXM8SFRNTERvY3VtZW50PihtX2Rv
Y3VtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxEb2N1bWVudD4obV9kb2N1bWVudCkpCiAgICAgICAg
IHJldHVybiBFX0ZBSUw7CiAKICAgICBIVE1MRG9jdW1lbnQmIGh0bWxEb2MgPSBkb3duY2FzdDxI
VE1MRG9jdW1lbnQ+KCptX2RvY3VtZW50KTsKQEAgLTM5NSw3ICszOTUsNyBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIERPTUhUTUxFbGVtZW50OjppZE5hbWUoCiAgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlz
PEhUTUxFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTEVsZW1lbnQ+KG1f
ZWxlbWVudCkpOwogICAgIFN0cmluZyBpZFN0cmluZyA9IGRvd25jYXN0PEhUTUxFbGVtZW50Piht
X2VsZW1lbnQpLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKTsKICAgICAqcmVzdWx0ID0gQlN0cmluZyhp
ZFN0cmluZykucmVsZWFzZSgpOwogICAgIHJldHVybiBTX09LOwpAQCAtNDgxLDcgKzQ4MSw3IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEVsZW1lbnQ6OnNldElubmVySFRNTCgK
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEVsZW1lbnQ6OmlubmVyVGV4dCggCiAg
ICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0KQogewotICAgIEFTU0VSVCht
X2VsZW1lbnQgJiYgaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxI
VE1MRWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgV1RGOjpTdHJpbmcgaW5uZXJUZXh0U3RyaW5n
ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCktPmlubmVyVGV4dCgpOwogICAgICpy
ZXN1bHQgPSBCU3RyaW5nKGlubmVyVGV4dFN0cmluZykucmVsZWFzZSgpOwogICAgIHJldHVybiBT
X09LOwpAQCAtNDkwLDcgKzQ5MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRN
TEVsZW1lbnQ6OmlubmVyVGV4dCgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEVs
ZW1lbnQ6OnNldElubmVyVGV4dCggCiAgICAgICAgIC8qIFtpbl0gKi8gQlNUUiB0ZXh0KQogewot
ICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAg
IEFTU0VSVChpczxIVE1MRWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTEVsZW1lbnQqIGh0
bWxFbGUgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4obV9lbGVtZW50KTsKICAgICBXVEY6OlN0cmlu
ZyB0ZXh0U3RyaW5nKHRleHQsIFN5c1N0cmluZ0xlbih0ZXh0KSk7CiAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC01NTksNyArNTU5LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBET01IVE1MRm9ybUVsZW1lbnQ6OnNldEFjY2VwdENoYXJzZXQoCiBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIERPTUhUTUxGb3JtRWxlbWVudDo6YWN0aW9uKCAKICAgICAgICAgLyog
W3JldHZhbF1bb3V0XSAqLyBCU1RSKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAm
JiBpczxIVE1MRm9ybUVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxIVE1MRm9y
bUVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIFdURjo6U3RyaW5nIGFjdGlvblN0cmluZyA9IGRv
d25jYXN0PEhUTUxGb3JtRWxlbWVudD4oKm1fZWxlbWVudCkuYWN0aW9uKCk7CiAgICAgKnJlc3Vs
dCA9IEJTdHJpbmcoYWN0aW9uU3RyaW5nKS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIFNfT0s7CkBA
IC01ODksNyArNTg5LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRm9ybUVs
ZW1lbnQ6OnNldEVuY3R5cGUoCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxGb3Jt
RWxlbWVudDo6bWV0aG9kKCAKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiByZXN1
bHQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MRm9ybUVsZW1lbnQ+KG1fZWxl
bWVudCkpOworICAgIEFTU0VSVChpczxIVE1MRm9ybUVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAg
IFdURjo6U3RyaW5nIG1ldGhvZFN0cmluZyA9IGRvd25jYXN0PEhUTUxGb3JtRWxlbWVudD4oKm1f
ZWxlbWVudCkubWV0aG9kKCk7CiAgICAgKnJlc3VsdCA9IEJTdHJpbmcobWV0aG9kU3RyaW5nKS5y
ZWxlYXNlKCk7CiAgICAgcmV0dXJuIFNfT0s7CkBAIC04NTgsNyArODU4LDYgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBET01IVE1MT3B0aW9uRWxlbWVudDo6dGV4dCgKIAogICAgICpyZXN1
bHQgPSAwOwogCi0gICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKGlzPEhUTUxPcHRp
b25FbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uRWxl
bWVudCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9lbGVtZW50KTsKIApAQCAtODk1
LDcgKzg5NCw2IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTE9wdGlvbkVsZW1l
bnQ6OmxhYmVsKAogCiAgICAgKnJlc3VsdCA9IDA7CiAKLSAgICBBU1NFUlQobV9lbGVtZW50KTsK
ICAgICBBU1NFUlQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxP
cHRpb25FbGVtZW50JiBvcHRpb25FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCptX2VsZW1lbnQpOwogCkBAIC05OTIsNyArOTkwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojpmb3JtKAogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOwogICAgICpyZXN1bHQgPSBudWxscHRyOwotICAgIEFTU0VSVCht
X2VsZW1lbnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJU
KGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQm
IGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwog
ICAgIENPTVB0cjxJRE9NRWxlbWVudD4gZG9tRWxlbWVudDsKICAgICBkb21FbGVtZW50LmFkb3B0
UmVmKERPTUhUTUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZShpbnB1dEVsZW1lbnQuZm9ybSgpKSk7
CkBAIC0xMDc0LDcgKzEwNzIsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJ
bnB1dEVsZW1lbnQ6OnNldENoZWNrZWQoCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhU
TUxJbnB1dEVsZW1lbnQ6OmRpc2FibGVkKCAKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBC
T09MKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVt
ZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVt
ZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgKnJlc3VsdCA9IGlucHV0RWxlbWVudC5p
c0Rpc2FibGVkRm9ybUNvbnRyb2woKSA/IFRSVUUgOiBGQUxTRTsKICAgICByZXR1cm4gU19PSzsK
QEAgLTExMTgsNyArMTExNiw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElu
cHV0RWxlbWVudDo6c2V0TmFtZSgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElu
cHV0RWxlbWVudDo6cmVhZE9ubHkoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wq
IHJlc3VsdCkKIHsKLSAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+
KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQp
KTsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqbV9lbGVtZW50KTsKICAgICAqcmVzdWx0ID0gaW5wdXRFbGVtZW50LmlzUmVh
ZE9ubHkoKSA/IFRSVUUgOiBGQUxTRTsKICAgICByZXR1cm4gU19PSzsKQEAgLTExODMsNyArMTE4
MSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6dHlw
ZSgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VHlw
ZSggCiAgICAgICAgIC8qIFtpbl0gKi8gQlNUUiB0eXBlKQogewotICAgIEFTU0VSVChtX2VsZW1l
bnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhU
TUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIFdU
Rjo6U3RyaW5nIHR5cGVTdHJpbmcodHlwZSwgU3lzU3RyaW5nTGVuKHR5cGUpKTsKICAgICBpbnB1
dEVsZW1lbnQuc2V0VHlwZSh0eXBlU3RyaW5nKTsKQEAgLTEyMDcsNyArMTIwNSw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VXNlTWFwKAogSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZSggCiAgICAg
ICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0KQogewotICAgIEFTU0VSVChtX2Vs
ZW1lbnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlu
cHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAg
IFdURjo6U3RyaW5nIHZhbHVlU3RyaW5nID0gaW5wdXRFbGVtZW50LnZhbHVlKCk7CiAgICAgKnJl
c3VsdCA9IEJTdHJpbmcodmFsdWVTdHJpbmcpLnJlbGVhc2UoKTsKQEAgLTEyMTksNyArMTIxNyw3
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6dmFsdWUo
CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVl
KCAKICAgICAgICAgLyogW2luXSAqLyBCU1RSIHZhbHVlKQogewotICAgIEFTU0VSVChtX2VsZW1l
bnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhU
TUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIGlu
cHV0RWxlbWVudC5zZXRWYWx1ZShTdHJpbmcoKFVDaGFyKikgdmFsdWUsIFN5c1N0cmluZ0xlbih2
YWx1ZSkpKTsKICAgICByZXR1cm4gU19PSzsKQEAgLTEyMjgsNyArMTIyNiw2IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoCiBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcigK
ICAgICAgICAgLyogW2luXSAqLyBCU1RSIHZhbHVlKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQp
OwogICAgIEFTU0VSVChpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1M
SW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
bV9lbGVtZW50KTsKICAgICBpbnB1dEVsZW1lbnQuc2V0VmFsdWVGb3JVc2VyKFN0cmluZyhzdGF0
aWNfY2FzdDxVQ2hhcio+KHZhbHVlKSwgU3lzU3RyaW5nTGVuKHZhbHVlKSkpOwpAQCAtMTIzNyw3
ICsxMjM0LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50
OjpzZXRWYWx1ZUZvclVzZXIoCiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElu
cHV0RWxlbWVudDo6c2VsZWN0KCB2b2lkKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8
SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIGlucHV0RWxlbWVu
dC5zZWxlY3QoKTsKICAgICByZXR1cm4gU19PSzsKQEAgLTEyNTIsNyArMTI0OSw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6Y2xpY2soIHZvaWQpCiBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlv
blN0YXJ0KCAKICAgICAvKiBbaW5dICovIGxvbmcgc3RhcnQpCiB7Ci0gICAgQVNTRVJUKG1fZWxl
bWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8
SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5w
dXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAg
aW5wdXRFbGVtZW50LnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKICAgICByZXR1cm4gU19PSzsK
QEAgLTEyNjEsNyArMTI1OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElu
cHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCAKICAgICAvKiBbcmV0dmFsXVtv
dXRdICovIGxvbmcgKnN0YXJ0KQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRNTElu
cHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+
KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgICpzdGFydCA9IGlucHV0RWxl
bWVudC5zZWxlY3Rpb25TdGFydCgpOwogICAgIHJldHVybiBTX09LOwpAQCAtMTI3MCw3ICsxMjY3
LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZWxl
Y3Rpb25TdGFydCgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVu
dDo6c2V0U2VsZWN0aW9uRW5kKCAKICAgICAvKiBbaW5dICovIGxvbmcgZW5kKQogewotICAgIEFT
U0VSVChtX2VsZW1lbnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAg
QVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVs
ZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1l
bnQpOwogICAgIGlucHV0RWxlbWVudC5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKICAgICByZXR1cm4g
U19PSzsKQEAgLTEyNzksNyArMTI3Niw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9N
SFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKAogSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQoIAogICAgIC8qIFtyZXR2YWxd
W291dF0gKi8gbG9uZyAqZW5kKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRNTElu
cHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+
KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgICplbmQgPSBpbnB1dEVsZW1l
bnQuc2VsZWN0aW9uRW5kKCk7CiAgICAgcmV0dXJuIFNfT0s7CkBAIC0xMjkwLDcgKzEyODcsNiBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlv
bkVuZCgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6aXNU
ZXh0RmllbGQoCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCiB7Ci0gICAg
QVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxl
bWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQu
aXNUZXh0RmllbGQoKSA/IFRSVUUgOiBGQUxTRTsKQEAgLTEzMDAsNyArMTI5Niw2IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6aXNUZXh0RmllbGQoCiBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnJlY3RPblNjcmVl
biggCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBMUFJFQ1QgcmVjdCkKIHsKLSAgICBBU1NFUlQo
bV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7
CiAgICAgcmVjdC0+bGVmdCA9IHJlY3QtPnRvcCA9IHJlY3QtPnJpZ2h0ID0gcmVjdC0+Ym90dG9t
ID0gMDsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9lbGVtZW50LT5yZW5kZXJlcigp
OwpAQCAtMTMyNiw3ICsxMzIxLDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1M
SW5wdXRFbGVtZW50OjpyZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2UoCiAgICAgaWYgKCFyZXBsYWNl
bWVudFN0cmluZykKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEFTU0VSVChtX2Vs
ZW1lbnQpOwogICAgIEFTU0VSVChpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKICAg
ICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PigqbV9lbGVtZW50KTsKIApAQCAtMTM0Myw3ICsxMzM3LDYgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZWxlY3RlZFJhbmdlKAogICAgIC8qIFtv
dXRdICovIGludCogc3RhcnQsCiAgICAgLyogW291dF0gKi8gaW50KiBlbmQpCiB7Ci0gICAgQVNT
RVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVu
dCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgICpzdGFydCA9IGlucHV0RWxlbWVudC5zZWxl
Y3Rpb25TdGFydCgpOwpAQCAtMTM1NCw3ICsxMzQ3LDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZWxlY3RlZFJhbmdlKAogSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRBdXRvZmlsbGVkKCAKICAgICAvKiBb
aW5dICovIEJPT0wgZmlsbGVkKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VS
VChpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsK
ICAgICBpbnB1dEVsZW1lbnQuc2V0QXV0b2ZpbGxlZCghIWZpbGxlZCk7CkBAIC0xMzY0LDcgKzEz
NTYsNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNl
dEF1dG9maWxsZWQoCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1l
bnQ6OmlzQXV0b2ZpbGxlZCgKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkK
IHsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVu
dD4obV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgKnJlc3VsdCA9IGlucHV0
RWxlbWVudC5pc0F1dG9maWxsZWQoKSA/IFRSVUUgOiBGQUxTRTsKQEAgLTEzODAsNyArMTM3MSw3
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6aXNVc2Vy
RWRpdGVkKAogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCiAgICAgKnJlc3VsdCA9IEZBTFNF
OwotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50
KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEJP
T0wgdGV4dEZpZWxkID0gRkFMU0U7CiAgICAgaWYgKEZBSUxFRChpc1RleHRGaWVsZCgmdGV4dEZp
ZWxkKSkgfHwgIXRleHRGaWVsZCkKICAgICAgICAgcmV0dXJuIFNfT0s7CkBAIC0xNDI2LDggKzE0
MTcsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6
OmZvcm0oCiB7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0g
ICAgKnJlc3VsdCA9IDA7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MVGV4dEFyZWFF
bGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICAqcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBBU1NFUlQo
aXM8SFRNTFRleHRBcmVhRWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTFRleHRBcmVhRWxl
bWVudCYgdGV4dGFyZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm1f
ZWxlbWVudCk7CiAgICAgQ09NUHRyPElET01FbGVtZW50PiBkb21FbGVtZW50OwogICAgIGRvbUVs
ZW1lbnQuYWRvcHRSZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKHRleHRhcmVhRWxl
bWVudC5mb3JtKCkpKTsKQEAgLTE1NDQsNyArMTUzNSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6dHlwZSgKIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6dmFsdWUoIAogICAgICAgICAvKiBbcmV0dmFs
XVtvdXRdICovIEJTVFIqIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzPEhU
TUxUZXh0QXJlYUVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxIVE1MVGV4dEFy
ZWFFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0YXJl
YUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9lbGVtZW50KTsKICAg
ICBXVEY6OlN0cmluZyB2YWx1ZVN0cmluZyA9IHRleHRhcmVhRWxlbWVudC52YWx1ZSgpOwogICAg
ICpyZXN1bHQgPSBCU3RyaW5nKHZhbHVlU3RyaW5nKS5yZWxlYXNlKCk7CkBAIC0xNTU2LDcgKzE1
NDcsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6
OnZhbHVlKAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MVGV4dEFyZWFFbGVtZW50
OjpzZXRWYWx1ZSggCiAgICAgICAgIC8qIFtpbl0gKi8gQlNUUiB2YWx1ZSkKIHsKLSAgICBBU1NF
UlQobV9lbGVtZW50ICYmIGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAg
IEFTU0VSVChpczxIVE1MVGV4dEFyZWFFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MVGV4
dEFyZWFFbGVtZW50JiB0ZXh0YXJlYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVt
ZW50PigqbV9lbGVtZW50KTsKICAgICB0ZXh0YXJlYUVsZW1lbnQuc2V0VmFsdWUoU3RyaW5nKChV
Q2hhciopIHZhbHVlLCBTeXNTdHJpbmdMZW4odmFsdWUpKSk7CiAgICAgcmV0dXJuIFNfT0s7CkBA
IC0xNTY0LDcgKzE1NTUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxUZXh0
QXJlYUVsZW1lbnQ6OnNldFZhbHVlKAogICAgIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBE
T01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3QoIHZvaWQpCiB7Ci0gICAgQVNTRVJUKG1fZWxl
bWVudCAmJiBpczxIVE1MVGV4dEFyZWFFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQo
aXM8SFRNTFRleHRBcmVhRWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTFRleHRBcmVhRWxl
bWVudCYgdGV4dGFyZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm1f
ZWxlbWVudCk7CiAgICAgdGV4dGFyZWFFbGVtZW50LnNlbGVjdCgpOwogICAgIHJldHVybiBTX09L
OwpAQCAtMTU3OSw3ICsxNTcwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1M
VGV4dEFyZWFFbGVtZW50Ojppc1VzZXJFZGl0ZWQoCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CiAKICAgICAqcmVzdWx0ID0gRkFMU0U7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1M
VGV4dEFyZWFFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTFRleHRBcmVh
RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgaWYgKGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1l
bnQ+KCptX2VsZW1lbnQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpKQogICAgICAgICAqcmVzdWx0
ID0gVFJVRTsKICAgICByZXR1cm4gU19PSzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAppbmRleCBmZjFi
ZmFiMWMwYmRiODM0M2U5NDAzZTYyYzEyZDNkYzU1ODFlNTQ3Li42OGVkNzA1YjU1YzFiNTk1MThh
MTc4MWU2NDc4ZjIwZjYyNzRkY2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJG
cmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCkBAIC0yMDIsNyAr
MjAyLDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVu
dChJRE9NRWxlbWVudCAqZWxlbWVudCkKICAgICAgICAgRWxlbWVudCogZWxlOwogICAgICAgICBo
ciA9IGVsZVByaXYtPmNvcmVFbGVtZW50KCh2b2lkKiopJmVsZSk7CiAgICAgICAgIGVsZVByaXYt
PlJlbGVhc2UoKTsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgZWxlICYmIGlzPEhUTUxG
b3JtRWxlbWVudD4oZWxlKSkKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgaXM8SFRNTEZv
cm1FbGVtZW50PihlbGUpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtRWxl
bWVudD4oZWxlKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMTksNyArMjE5LDcg
QEAgc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KElE
T01FbGVtZW50KiBlbGVtZW50KQogICAgICAgICBFbGVtZW50KiBlbGU7CiAgICAgICAgIGhyID0g
ZWxlUHJpdi0+Y29yZUVsZW1lbnQoKHZvaWQqKikmZWxlKTsKICAgICAgICAgZWxlUHJpdi0+UmVs
ZWFzZSgpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSAmJiBlbGUgJiYgaXM8SFRNTElucHV0
RWxlbWVudD4oZWxlKSkKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgaXM8SFRNTElucHV0
RWxlbWVudD4oZWxlKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PihlbGUpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTExMDEsNyArMTEwMSw3
IEBAIEhSRVNVTFQgV2ViRnJhbWU6OmVsZW1lbnRXaXRoTmFtZShCU1RSIG5hbWUsIElET01FbGVt
ZW50KiBmb3JtLCBJRE9NRWxlbWVudCoqIGVsCiAgICAgICAgIGNvbnN0IFZlY3RvcjxGb3JtQXNz
b2NpYXRlZEVsZW1lbnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1l
bnRzKCk7CiAgICAgICAgIEF0b21pY1N0cmluZyB0YXJnZXROYW1lKChVQ2hhciopbmFtZSwgU3lz
U3RyaW5nTGVuKG5hbWUpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBl
bGVtZW50cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50PihlbGVtZW50c1tpXSkpCisgICAgICAgICAgICBpZiAoIWlzPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KCplbGVtZW50c1tpXSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50JiBlbHQgPSBkb3duY2FzdDxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PigqZWxlbWVudHNbaV0pOwogICAgICAgICAgICAgLy8gU2tpcCBvcHRp
b24gZWxlbWVudHMsIG90aGVyIGR1ZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9i
amVjdC5jcHAKaW5kZXggMTk2MDNjNWMwMTNhMzk3ZmE4MjkyMGZkNGQzOWYzNzQzN2Q2NTE0Ny4u
MWJlZjI2NDg5ZDQ4NjkwYzZkOGU1OWRlZTU2N2FkYmUxZjM1MzcwNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgV2ViUmVuZGVy
T2JqZWN0OjpXZWJSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgYm9vbCBzaG91
bGRJbmNsdWRlRGVzY2UKICAgICBtX25hbWUgPSByZW5kZXJlci0+cmVuZGVyTmFtZSgpOwogCiAg
ICAgaWYgKE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxF
bGVtZW50Pihub2RlKSkgeworICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CiAgICAg
ICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAg
ICAgICAgICAgbV9lbGVtZW50VGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZSgpOwogICAgICAgICAg
ICAgbV9lbGVtZW50SUQgPSBlbGVtZW50LmdldElkQXR0cmlidXRlKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0
VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggZjQ0NDczNGY4M2MxNzJhMzhm
YzJiNTE0MGNlMzhlMDY0ZWM2ZWI0Mi4uYTRhNTMwNjdlZjdlYjU0ZTQxODY2NDZkMDNhNTllNDE2
ZjBkNjdhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0LmNw
cApAQCAtMTE0LDcgKzExNCw3IEBAIEJ1bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGUgSW5qZWN0
ZWRCdW5kbGVIaXRUZXN0UmVzdWx0OjptZWRpYVR5cGUoKSBjb25zdAogICAgIHJldHVybiBCdW5k
bGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlTm9uZTsKICNlbHNlCiAgICAgV2ViQ29yZTo6Tm9kZSog
bm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIWlz
PEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICBy
ZXR1cm4gQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZU5vbmU7CiAgICAgCiAgICAgaWYgKCFk
b3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNNZWRpYUVsZW1lbnQoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBlNDkzMjkyN2Qz
ZmQzMmMxNjZjOTgyNTRhYWM2MzI2Y2FmMTAyMmUyLi4zNjk2OGYwZDkxZTc0NGNlOTRiMDY0OTY4
YTVlYzViMmFmYjU5YmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCkBAIC04OTIsNyArODkyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpo
YW5kbGVFdmVudChFdmVudCogZXZlbnQpCiAKICAgICBjb25zdCBXZWJFdmVudCogY3VycmVudEV2
ZW50ID0gV2ViUGFnZTo6Y3VycmVudEV2ZW50KCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkV2
ZW50PiBzaW11bGF0ZWRXZWJFdmVudDsKLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYm
IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuaXNTaW11bGF0ZWQoKSkgeworICAgIGlmIChp
czxNb3VzZUV2ZW50PigqZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuaXNT
aW11bGF0ZWQoKSkgewogICAgICAgICBzaW11bGF0ZWRXZWJFdmVudCA9IGNyZWF0ZVdlYkV2ZW50
KGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KSk7CiAgICAgICAgIGN1cnJlbnRFdmVudCA9IHNp
bXVsYXRlZFdlYkV2ZW50LmdldCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRl
eCBjZGVjYmRhNGY5YzRjYzFiYjA0NjY1ZGQwOWRkMGQ0MTZkZTdhZjJjLi44MDA2NDViZjBmMGE4
OWNlNTE1ZjM1MDczMjYxOTVlNzkwZmJhMGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBA
IC0xNzYsOCArMTc2LDYgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnRha2VGb2N1cyhGb2N1c0Rp
cmVjdGlvbiBkaXJlY3Rpb24pCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVu
dENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAg
IHJldHVybjsKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAg
ICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCA0YjUyOWE5N2U4MDhhZWI0
M2EyM2VlZjY1Y2VlYWUxYjA0ZjQ3ZTU2Li4xN2ZjM2E1MmIzOGZjMzBiMzI2YTEwMDAwMDExZmQ5
N2NmZWUwNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0yOTUsNyArMjk1LDcgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2
ZW50KikKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhF
bGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVu
dCkpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1l
KCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZWxlbWVu
dCkKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVu
dCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQor
ICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm47
CiAKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZWxl
bWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogCiB2
b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGVs
ZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKKyAgICBp
ZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYm9vbCBpbml0aWF0ZWRCeVVzZXJUeXBpbmcgPSBVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRv
cjo6cHJvY2Vzc2luZ1VzZXJUeXBpbmdHZXN0dXJlKCkgJiYgVXNlclR5cGluZ0dlc3R1cmVJbmRp
Y2F0b3I6OmZvY3VzZWRFbGVtZW50QXRHZXN0dXJlU3RhcnQoKSA9PSBlbGVtZW50OwpAQCAtMzMw
LDcgKzMzMCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0Rmll
bGQoRWxlbWVudCogZWxlbWVudCkKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFu
Z2VJblRleHRBcmVhKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MVGV4dEFy
ZWFFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCpl
bGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2Vi
RnJhbWU6OmZyb21Db3JlRnJhbWUoKmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CkBAIC0z
OTMsNyArMzkzLDcgQEAgc3RhdGljIEFQSTo6SW5qZWN0ZWRCdW5kbGU6OkZvcm1DbGllbnQ6Oklu
cHV0RmllbGRBY3Rpb24gdG9JbnB1dEZpZWxkQWN0aW9uKFdLSW4KIAogYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiBlbGVtZW50LCBLZXli
b2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1l
bnQpKQorICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBXS0lucHV0RmllbGRBY3Rpb25UeXBlIGFjdGlvblR5cGUgPSBz
dGF0aWNfY2FzdDxXS0lucHV0RmllbGRBY3Rpb25UeXBlPigwKTsKQEAgLTQwOCw3ICs0MDgsNyBA
QCBib29sIFdlYkVkaXRvckNsaWVudDo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1l
bnQqIGVsZW1lbnQsIEtleWJvYXJkRXZlbgogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dFdp
bGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghaXM8
SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50
PigqZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9
IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXgg
ZDlhZGNjNjE2OTNlM2U1OWI3Mzc0MWY5OTQ5NDNkYzI0ZWYxYTZlMy4uNTRlMGI3ZGZmMjg3ZTc4
YWM0NDNlZjgwODdlZmQ0Mjk5N2NiMWFjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC02MTMsOSArNjEzLDkgQEAgYm9vbCBXZWJGcmFt
ZTo6Y29udGFpbnNBbnlGb3JtRWxlbWVudHMoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7IG5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgIGlmICghbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50Pihub2Rl
KSkKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTYzMSw5ICs2MzEsOSBA
QCBib29sIFdlYkZyYW1lOjpjb250YWluc0FueUZvcm1Db250cm9scygpIGNvbnN0CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAg
ICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghaXM8RWxlbWVu
dD4oKm5vZGUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpczxIVE1MSW5w
dXRFbGVtZW50Pihub2RlKSB8fCBpczxIVE1MU2VsZWN0RWxlbWVudD4obm9kZSkgfHwgaXM8SFRN
TFRleHRBcmVhRWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50
Pigqbm9kZSkgfHwgaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKSB8fCBpczxIVE1MVGV4dEFy
ZWFFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCmluZGV4IDZlYTc2YWNmMzNjNzExNDIzMzc2NWYyZmZlNmFkOTVmNTQ3MDAyMjQuLjM2
ZmI4ZmMyZDI4ZWI4Mzg3Zjc0MmUxYTA5Zjk4MjJjZjY0OGFhZGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM3MDAsOSArMzcwMCw2IEBA
IHZvaWQgV2ViUGFnZTo6c3RvcFNwZWFraW5nKCkKIFJldGFpblB0cjxQREZEb2N1bWVudD4gV2Vi
UGFnZTo6cGRmRG9jdW1lbnRGb3JQcmludGluZ0ZyYW1lKEZyYW1lKiBjb3JlRnJhbWUpCiB7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICgh
ZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgaWYgKCFpczxQbHVnaW5E
b2N1bWVudD4oZG9jdW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDYyMiw3
ICs0NjE5LDcgQEAgdm9pZCBXZWJQYWdlOjpkZXRlcm1pbmVQcmltYXJ5U25hcHNob3R0ZWRQbHVn
SW4oKQogICAgICAgICAgICAgaW5mbGF0ZWRQbHVnaW5SZWN0LmluZmxhdGVZKHlPZmZzZXQpOwog
CiAgICAgICAgICAgICBpZiAoZWxlbWVudCAhPSAmcGx1Z0luSW1hZ2VFbGVtZW50KSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCEoaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCkKKyAgICAgICAg
ICAgICAgICBpZiAoIShpczxIVE1MSW1hZ2VFbGVtZW50PigqZWxlbWVudCkKICAgICAgICAgICAg
ICAgICAgICAgJiYgaW5mbGF0ZWRQbHVnaW5SZWN0LmNvbnRhaW5zKGVsZW1lbnRSZWN0UmVsYXRp
dmVUb1RvcERvY3VtZW50KQogICAgICAgICAgICAgICAgICAgICAmJiBlbGVtZW50UmVjdFJlbGF0
aXZlVG9Ub3BEb2N1bWVudC53aWR0aCgpID4gcGx1Z2luUmVuZGVyQm94LndpZHRoKCkgKiBtaW5p
bXVtT3ZlcmxhcHBpbmdJbWFnZVRvUGx1Z2luRGltZW5zaW9uU2NhbGUKICAgICAgICAgICAgICAg
ICAgICAgJiYgZWxlbWVudFJlY3RSZWxhdGl2ZVRvVG9wRG9jdW1lbnQuaGVpZ2h0KCkgPiBwbHVn
aW5SZW5kZXJCb3guaGVpZ2h0KCkgKiBtaW5pbXVtT3ZlcmxhcHBpbmdJbWFnZVRvUGx1Z2luRGlt
ZW5zaW9uU2NhbGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDdkMjljMDM2ZDcwZDdiMDEyMjY5ZjdlNmY5MzNkOGFj
YmE1YzgxZDguLmM2NjdjZjdmOGQ0ODkzOTA1MWE2ODhiZTcwYzY5NTg4ZDg1ZWIzNzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KQEAgLTYwNCwxNSArNjA0LDEzIEBAIHZvaWQgV2ViUGFnZTo6aW5zcGVjdG9yTm9kZVNlYXJj
aEVuZGVkQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIAogdm9pZCBXZWJQ
YWdlOjpibHVyQXNzaXN0ZWROb2RlKCkKIHsKLSAgICBpZiAobV9hc3Npc3RlZE5vZGUgJiYgaXM8
RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKSkKKyAgICBpZiAoaXM8RWxlbWVudD4obV9hc3Npc3Rl
ZE5vZGUpKQogICAgICAgICBkb3duY2FzdDxFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpLmJsdXIo
KTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogewotICAgIGlmICghbV9hc3Npc3RlZE5vZGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKSkgeworICAgIGlmIChp
czxIVE1MSW5wdXRFbGVtZW50PihtX2Fzc2lzdGVkTm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0
RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVk
Tm9kZSk7CiAgICAgICAgIGVsZW1lbnQuc2V0VmFsdWUodmFsdWUsIERpc3BhdGNoSW5wdXRBbmRD
aGFuZ2VFdmVudCk7CiAgICAgfQpAQCAtNjIxLDkgKzYxOSw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0
QXNzaXN0ZWROb2RlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogdm9pZCBXZWJQYWdlOjpz
ZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBpZiAoIW1f
YXNzaXN0ZWROb2RlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KCptX2Fzc2lzdGVkTm9kZSkpIHsKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obV9h
c3Npc3RlZE5vZGUpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpOwogICAgICAgICBlbGVtZW50
LnNldFZhbHVlQXNOdW1iZXIodmFsdWUsIEFTU0VSVF9OT19FWENFUFRJT04sIERpc3BhdGNoSW5w
dXRBbmRDaGFuZ2VFdmVudCk7CiAgICAgfQpAQCAtNjMxLDcgKzYyNyw3IEBAIHZvaWQgV2ViUGFn
ZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUgdmFsdWUpCiAKIHZvaWQgV2Vi
UGFnZTo6c2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBh
bGxvd011bHRpcGxlU2VsZWN0aW9uKQogewotICAgIGlmICghbV9hc3Npc3RlZE5vZGUgfHwgIWlz
PEhUTUxTZWxlY3RFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpKQorICAgIGlmICghaXM8SFRNTFNl
bGVjdEVsZW1lbnQ+KG1fYXNzaXN0ZWROb2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIEhUTUxT
ZWxlY3RFbGVtZW50JiBzZWxlY3QgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fYXNz
aXN0ZWROb2RlKTsKICAgICBzZWxlY3Qub3B0aW9uU2VsZWN0ZWRCeVVzZXIoaW5kZXgsIHRydWUs
IGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pOwpAQCAtMTg4OCw3ICsxODg0LDcgQEAgdm9pZCBXZWJQ
YWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwgSW50ZXJh
Y3Rpb25JbmZvcm1hdGkKICAgICBpZiAoaGl0Tm9kZSkgewogICAgICAgICBpbmZvLmNsaWNrYWJs
ZUVsZW1lbnROYW1lID0gaGl0Tm9kZS0+bm9kZU5hbWUoKTsKIAotICAgICAgICBFbGVtZW50KiBl
bGVtZW50ID0gaXM8RWxlbWVudD4oaGl0Tm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihoaXROb2Rl
KSA6IG51bGxwdHI7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50PigqaGl0
Tm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihoaXROb2RlKSA6IG51bGxwdHI7CiAgICAgICAgIGlm
IChlbGVtZW50KSB7CiAgICAgICAgICAgICBFbGVtZW50KiBsaW5rRWxlbWVudCA9IG51bGxwdHI7
CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJl
cigpLT5pc1JlbmRlckltYWdlKCkpIHsKQEAgLTE5NTIsNyArMTk0OCw3IEBAIHZvaWQgV2ViUGFn
ZTo6c3RvcEludGVyYWN0aW9uKCkKIAogdm9pZCBXZWJQYWdlOjpwZXJmb3JtQWN0aW9uT25FbGVt
ZW50KHVpbnQzMl90IGFjdGlvbikKIHsKLSAgICBpZiAoIW1faW50ZXJhY3Rpb25Ob2RlIHx8ICFp
czxIVE1MRWxlbWVudD4obV9pbnRlcmFjdGlvbk5vZGUuZ2V0KCkpKQorICAgIGlmICghaXM8SFRN
TEVsZW1lbnQ+KG1faW50ZXJhY3Rpb25Ob2RlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4obV9pbnRlcmFj
dGlvbk5vZGUuZ2V0KCkpOwpAQCAtMTk5MCwxMSArMTk4NiwxMSBAQCB2b2lkIFdlYlBhZ2U6OnBl
cmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgaXNBc3Npc3RhYmxlTm9kZShOb2RlKiBub2RlKQogewotICAgIGlmIChpczxIVE1MU2VsZWN0
RWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxTZWxlY3RFbGVtZW50Pigqbm9kZSkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50Pihub2Rl
KSkKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1
cm4gIWRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCpub2RlKS5pc1JlYWRPbmx5Tm9kZSgp
OwotICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkgeworICAgIGlmIChpczxIVE1M
SW5wdXRFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgZWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgcmV0dXJuICFl
bGVtZW50LmlzUmVhZE9ubHlOb2RlKCkgJiYgKGVsZW1lbnQuaXNUZXh0RmllbGQoKSB8fCBlbGVt
ZW50LmlzRGF0ZUZpZWxkKCkgfHwgZWxlbWVudC5pc0RhdGVUaW1lTG9jYWxGaWVsZCgpIHx8IGVs
ZW1lbnQuaXNNb250aEZpZWxkKCkgfHwgZWxlbWVudC5pc1RpbWVGaWVsZCgpKTsKICAgICB9CkBA
IC0yMDc3LDEwICsyMDczLDEwIEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgICAgICAvLyBJ
ZiBhIHNlbGVjdCBkb2VzIG5vdCBoYXZlIGdyb3VwcywgYWxsIHRoZSBvcHRpb24gZWxlbWVudHMg
aGF2ZSBncm91cCBJRCAwLgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBpdGVtID0gaXRlbXNbaV07Ci0gICAgICAg
ICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGl0ZW0pKSB7CisgICAgICAgICAgICBpZiAo
aXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtKSkgewogICAgICAgICAgICAgICAgIEhUTUxPcHRp
b25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pOwog
ICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMuYXBwZW5kKE9wdGlvbkl0
ZW0ob3B0aW9uLnRleHQoKSwgZmFsc2UsIHBhcmVudEdyb3VwSUQsIG9wdGlvbi5zZWxlY3RlZCgp
LCBvcHRpb24uZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0
cikpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oaXRl
bSkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKml0
ZW0pKSB7CiAgICAgICAgICAgICAgICAgSFRNTE9wdEdyb3VwRWxlbWVudCYgZ3JvdXAgPSBkb3du
Y2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50PigqaXRlbSk7CiAgICAgICAgICAgICAgICAgcGFyZW50
R3JvdXBJRCsrOwogICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMuYXBw
ZW5kKE9wdGlvbkl0ZW0oZ3JvdXAuZ3JvdXBMYWJlbFRleHQoKSwgdHJ1ZSwgMCwgZmFsc2UsIGdy
b3VwLmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpKSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239086</attachid>
            <date>2014-10-01 22:59:34 -0700</date>
            <delta_ts>2014-10-02 12:38:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137333-20141001225934.patch</filename>
            <type>text/plain</type>
            <size>491511</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDllNjRmODkyNjcwNTM2M2Y2ZTZmMjBi
NDZkOThjNTI3NmY5Nzc4N2QuLjc3MjFmYzUxMDUwZGNhNjY4NTE1MjBjODBkNTNmMjI4ZWI5MDYw
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsMjIgQEAKIDIwMTQtMTAtMDEgIENocmlzdG9waGUgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIEhhdmUgaXM8PihUKikgZnVuY3Rpb24gZG8gYSBu
dWxsIGNoZWNrIG9uIHRoZSBwb2ludGVyIGFyZ3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIYXZlIGlzPD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVs
bCBjaGVjayBvbiB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiBhCisgICAgICAgIHNpbXBsZSBhc3Nl
cnRpb24uIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIDIgcmVhc29uczoKKyAgICAgICAgMS4gSXQgaXMg
bW9yZSBjb25zaXN0ZW50IHdpdGggZG93bmNhc3Q8PihUKiksIHdoaWNoIHdpbGwgc3VjY2VlZCBl
dmVuCisgICAgICAgICAgIGlmIHRoZSBhcmd1bWVudCBpcyBhIG51bGxwdHIuCisgICAgICAgIDIu
IEl0IHNpbXBsaWZpZXMgdGhlIGNvZGUgYSBiaXQgYXMgaXQgZ2V0cyByaWQgb2YgYSBsb3Qgb2Yg
ZXhwbGljaXQKKyAgICAgICAgICAgbnVsbCBjaGVja3MuCisKKyAgICAgICAgKiB3dGYvVHlwZUNh
c3RzLmg6CisgICAgICAgIChXVEY6OmlzKToKKworMjAxNC0xMC0wMSAgQ2hyaXN0b3BoZSBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0
ZXIgcjE3NDE5My4KIAogICAgICAgICBBZGRpbmcgYSByZXR1cm4gc3RhdGVtZW50IGFzIHRoYXQg
ZnVuY3Rpb24gaXMgcmV0dXJuaW5nIGEgYm9vbGVhbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MWQxNjg5MTRk
ODM1NThhNWI4MjRjOTI2MDVlYzk3NWJjN2VhMDliLi5lMTA0ZjY1YTMzNTE3YmY0MTRhMWFiYjlh
ZDEwNjMxMmNjNDQ2ZmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODY3IEBACiAyMDE0LTEwLTAx
ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAorICAgICAgICBIYXZlIGlz
PD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVsbCBjaGVjayBvbiB0aGUgcG9pbnRlciBhcmd1bWVudAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzMzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2ZSBpczw+
KFQqKSBmdW5jdGlvbiBkbyBhIG51bGwgY2hlY2sgb24gdGhlIGFyZ3VtZW50IGluc3RlYWQgb2Yg
YQorICAgICAgICBzaW1wbGUgYXNzZXJ0aW9uLiBUaGlzIG1ha2VzIHNlbnNlIGZvciAyIHJlYXNv
bnM6CisgICAgICAgIDEuIEl0IGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGRvd25jYXN0PD4oVCop
LCB3aGljaCB3aWxsIHN1Y2NlZWQgZXZlbgorICAgICAgICAgICBpZiB0aGUgYXJndW1lbnQgaXMg
YSBudWxscHRyLgorICAgICAgICAyLiBJdCBzaW1wbGlmaWVzIHRoZSBjb2RlIGEgYml0IGFzIGl0
IGdldHMgcmlkIG9mIGEgbG90IG9mIGV4cGxpY2l0CisgICAgICAgICAgIG51bGwgY2hlY2tzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHA6CisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVB
dWRpb0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25uZWN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoYWtlTWVzc2FnZSk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUZyb21SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpo
YW5kbGVMaXZlUmVnaW9uQ3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
OjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2Fj
aGU6OmxhYmVsQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyb290
QVhFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb2RlQXJpYVZpc2libGUp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmlzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6aXNTZWxl
Y3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6Y2Fu
U2V0U2VsZWN0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxp
c3RCb3hPcHRpb246OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlMaXN0Qm94T3B0aW9uOjpsaXN0Qm94T3B0aW9uUGFyZW50Tm9kZSk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbik6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6bWVudUxpc3RPcHRpb25B
Y2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FudmFzSGFzRmFsbGJhY2tDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNQcmVzc2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0hvdmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVxdWlyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVl
Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1p
blZhbHVlRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmlzQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YW5jaG9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjppc05vZGVBY3Rpb25FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojptb3VzZUJ1dHRv
bkxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojps
YWJlbEZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OnRpdGxlRWxlbWVudFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmFsdGVybmF0aXZlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6dmlzaWJsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGVscFRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhpZXJhcmNoaWNhbExldmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0aXRsZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNldEZvY3VzQXR0cmlidXRlKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdDo6aGFzVGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpj
bGFzc0xpc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpp
c0ZpbGVVcGxvYWRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YW5jaG9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpoZWxwVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpsYWJlbEVsZW1lbnRDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW50ZXJuYWxMaW5rRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRSYWRpb0J1dHRvbkdyb3Vw
TWVtYmVycyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0
aXRsZVVJRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NLZXkpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEVsZW1lbnRBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRGb2N1c2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3Mp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJp
bGl0eUltYWdlTWFwSGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJP
YmplY3RJc09ic2VydmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5oZXJpdHNQcmVzZW50YXRpb25hbFJvbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEZpZWxk
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
cmVtb3RlU1ZHUm9vdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6c2V0QWNjZXNzaWJsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWVGb3JNU0FBKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTGlua2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1JvbGVGb3JNU0FBKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aEVsZW1lbnQpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNlYXJjaEZpZWxkQnV0dG9ucy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRDYW5jZWxCdXR0
b246OnByZXNzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnRhYmxlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6
dGl0bGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5Q2hpbGRyZW5TZWxlY3Rpb25DaGFuZ2UpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5j
cHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6CisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0TmFtZSk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
R2V0RGVzY3JpcHRpb24pOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMp
OgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NUHJpdmF0ZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OndyYXApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTQXVkaW9Db250ZXh0KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTRE9NR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYW1lZEl0ZW1HZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERv
Y3VtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRp
YWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6aXNSZWFjaGFibGVGcm9tRE9NKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVdyYXBwZXJJbmxpbmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxl
ZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmZyYW1lRnJvbUV4ZWNTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06
CisgICAgICAgIChraXRDbGFzcyk6CisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50
KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
c0FjY2VwdGFibGVDU1NTdHlsZVNoZWV0UGFyZW50KToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JD
aGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUp
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6CisgICAgICAg
IChXZWJDb3JlOjppc0F1dG9maWxsZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXNhYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNDaGVj
a2VkKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNMYW5nUHNldWRvQ2xhc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6bWF0Y2hlc0Z1dHVyZUN1ZVBzZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdGNoZXNQYXN0Q3VlUHNldWRvQ2xhc3MpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29s
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXNGb3JMZW5ndGgp
OgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVtKToKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBdHRyOjpzdHlsZSk6CisgICAgICAgICogZG9tL0NoYXJhY3RlckRh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpzZXREYXRhQW5kVXBkYXRlKToK
KyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGVj
a0FjY2VwdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6Om5vdGlmeUNo
aWxkUmVtb3ZlZCk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUluc2VydGlvbk5vdGlmaWVyOjpub3RpZnlEZXNj
ZW5kYW50SW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVSZW1v
dmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAq
IGRvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJl
bnRTY3JpcHRJbmNyZW1lbnRlcjo6Q3VycmVudFNjcmlwdEluY3JlbWVudGVyKToKKyAgICAgICAg
KiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6
c2V0RHJhZ0ltYWdlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmVsZW1lbnRGcm9tUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnNldFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppY29uVVJMcyk6
CisgICAgICAgIChXZWJDb3JlOjpldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZSk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRz
KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
Ojpjb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpwYXJlbnRFbGVtZW50KToKKyAgICAgICAgKiBkb20vRWxl
bWVudFRyYXZlcnNhbC5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhdmVyc2FsPEVsZW1lbnQ+Ojpu
ZXh0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFRyYXZlcnNhbDo6
bmV4dEluY2x1ZGluZ1BzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2Fs
OjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50VHJhdmVyc2FsOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyk6CisgICAgICAg
ICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dFdmVu
dENvbnRleHQ6OldpbmRvd0V2ZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6bm9kZU9ySG9zdElm
UHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OkV2ZW50UGF0aCk6
CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAqIGRvbS9LZXlib2FyZEV2ZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBk
b20vTGl2ZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdDo6bmFt
ZWRJdGVtKToKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZE1vdXNlRXZlbnQ6OlNpbXVsYXRl
ZE1vdXNlRXZlbnQpOgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TmFtZWROb2RlTWFwOjpzZXROYW1lZEl0ZW0pOgorICAgICAgICAqIGRvbS9Ob2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6Y29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpwYXJlbnRPclNo
YWRvd0hvc3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJvb3RFZGl0YWJsZUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YW5jZXN0b3JFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmFwcGVuZEF0dHJpYnV0ZURlc2MpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2hv
d05vZGVQYXRoRm9yVGhpcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbmNsb3NpbmdMaW5r
RXZlbnRQYXJlbnRPclNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAg
ICAgKiBkb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpub2RlQ2FuQmVEaXN0cmlidXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjp0cmF2ZXJzZVBhcmVudCk6CisgICAgICAg
ICogZG9tL05vZGVUcmF2ZXJzYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNh
bDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZl
cnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVy
c2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbik6CisgICAgICAgICogZG9t
L1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjplbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OmVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjppc1JlbmRlcmVkQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAg
ICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyk6CisgICAg
ICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9TY3JpcHRF
bGVtZW50SWZQb3NzaWJsZSk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnBhcmVudE9yU2hhZG93SG9zdE5vZGUpOgorICAgICAgICAqIGRvbS9U
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVhcmxpZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU1ZHU2hhZG93VGV4dCk6CisgICAgICAgICogZG9tL1Rl
eHROb2RlVHJhdmVyc2FsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHROb2RlVHJhdmVyc2Fs
Ojpjb250ZW50c0FzU3RyaW5nKToKKyAgICAgICAgKiBkb20vVGV4dE5vZGVUcmF2ZXJzYWwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHROb2RlVHJhdmVyc2FsOjpmaXJzdFRleHRDaGlsZFRlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHROb2RlVHJhdmVyc2FsOjpmaXJzdFRleHRXaXRo
aW5UZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Tm9kZVRyYXZlcnNhbDo6dHJhdmVy
c2VOZXh0VGV4dFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHROb2RlVHJhdmVyc2Fs
OjpuZXh0U2libGluZyk6CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVOb2RlVG9OZXdEb2N1bWVudCk6
CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aXNOZXdMaW5lQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQ6OmVuZE9mTmV4dFBhcmFncmFoU3BsaXR0aW5nVGV4dE5vZGVz
SWZOZWVkZWQpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNMZWdhY3lBcHBsZVN0eWxlU3Bhbik6CisgICAgICAgIChXZWJDb3Jl
Ojppc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzRW1wdHlGb250VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6ZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpoaWdoZXN0QW5jZXN0b3JX
aXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRFbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4dEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRl
eHROb2Rlcyk6CisgICAgICAgICogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAg
ICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzUmVtb3ZhYmxlQmxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2FuUmViYWxhbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JT
cGxpdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5z
aWduaWZpY2FudFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlbW92ZVBsYWNlaG9sZGVyQXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENv
bW1hbmQ6OmNsZWFudXBBZnRlckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVC
dXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0RlbGV0YWJs
ZUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFs
RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVw
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpk
b0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0aW5nU3R5bGU6OndyYXBwaW5nU3R5bGVGb3JTZXJpYWxpemF0aW9uKToKKyAg
ICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbWFnZUVsZW1l
bnRGcm9tSW1hZ2VEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZElu
c2VydEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdE
aXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRDb21wb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCk6CisgICAg
ICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
aXNFbGVtZW50Rm9yRm9ybWF0QmxvY2spOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhcmV0QmFzZTo6cGFpbnRDYXJldCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6ZGVidWdSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OnNjYW5Gb3JGb3Jt
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRM
aXN0Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyk6CisgICAgICAgICogZWRpdGlu
Zy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4
dENvbW1hbmQ6Omluc2VydFRhYik6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXZlU2FtZVRhZ05hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxl
c0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZFBlcmZvcm1TbWFydFJlcGxh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNl
c0ZvclNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6bWVyZ2VUZXh0Tm9kZXNBcm91bmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRlbXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFjZSk6Cisg
ICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
bGxDaGVja2VyOjppc0NoZWNrYWJsZSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzUmVuZGVyZXJSZXBsYWNl
ZEVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjppc0luUGFzc3dvcmRGaWVsZCk6CisgICAg
ICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRQ
b3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9zaXRpb25Gb3JMaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6
ZW5kT2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6OmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yQW5jZXN0
b3JzKToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6OmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yRWxl
bWVudEFuZEl0c0FuY2VzdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjplZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjplbmNs
b3NpbmdFbGVtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdBbmNob3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0xpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6bGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjphcmVJ
ZGVudGljYWxFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjppc05vblRhYmxlQ2VsbEhUTUxC
bG9ja0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGlu
Z0RpcmVjdGlvbik6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6YW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1BsYWluVGV4dE1hcmt1cCk6CisgICAgICAgICogZmlsZWFwaS9G
aWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0FycmF5
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwpOgorICAgICAgICAqIGh0bWwvQmFz
ZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnVwZGF0ZUFwcGVhcmFuY2UpOgor
ICAgICAgICAqIGh0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmxvYWREb2N1bWVudFRlbXBsYXRlKToKKyAg
ICAgICAgKiBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZpbmRBc3NvY2lhdGVkRm9ybSk6CisgICAgICAgICog
aHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRTZXJ2
ZXJNYXBNb3VzZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVt
ZW50OjpldmVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNFbnRlcktleUtleWRvd25FdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjppc0xpbmtDbGljayk6CisgICAgICAgICogaHRtbC9IVE1M
QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjppbWFn
ZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBodG1s
L0hUTUxCdXR0b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVkRWxlbWVudENhY2hlKToK
KyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RG9jdW1lbnQ6OmJnQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjpzZXRC
Z0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6ZmdDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OnNldEZnQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTERvY3VtZW50OjphbGlua0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1
bWVudDo6c2V0QWxpbmtDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Omxp
bmtDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OnNldExpbmtDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OnZsaW5rQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTERvY3VtZW50OjpzZXRWbGlua0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxEb2N1bWVudDo6aXNGcmFtZVNldCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6bWF0Y2hlc1JlYWRXcml0ZVBzZXVk
b0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6Om1lcmdlV2l0aE5leHRUZXh0Tm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnQ6Omluc2VydEFkamFjZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0
RWxlbWVudEZvckluc2VydGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6ZGly
ZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmRpckF0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAg
KiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRl
RnJvbUNvbnRyb2xFbGVtZW50c0FuY2VzdG9yRGlzYWJsZWRTdGF0ZVVuZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0QW5j
ZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQXV0b2ZvY3VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmVuY2xvc2luZ0Zvcm1Db250cm9sRWxlbWVu
dCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0SW1wbGljaXRseSk6CisgICAgICAgIChXZWJDb3JlOjpz
dWJtaXRFbGVtZW50RnJvbUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6c3VibWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpkZWZhdWx0QnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFn
ZUNhY2hlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmdldFNWR0RvY3VtZW50KToKKyAg
ICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZyYW1lU2V0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6ZGF0YUxpc3QpOgorICAgICAgICAqIGh0bWwvSFRNTExhYmVsRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpub2RlQXNTdXBwb3J0ZWRMYWJlbGFibGVFbGVtZW50KToKKyAgICAg
ICAgKiBodG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxM
ZWdlbmRFbGVtZW50Ojp2aXJ0dWFsRm9ybSk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpoYXNGYWxsYmFja0NvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAgICAg
ICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
cHRHcm91cEVsZW1lbnQ6OnJlY2FsY1NlbGVjdE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdEdyb3VwRWxlbWVudDo6b3duZXJTZWxlY3RFbGVtZW50KToKKyAgICAgICAgKiBodG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVt
ZW50OjpzZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjppbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6b3duZXJEYXRhTGlzdEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVu
dGVkVG9SZXNwZWN0R3JvdXBMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudDo6aXNEaXNhYmxlZEZvcm1Db250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRp
b25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KToKKyAgICAgICAgKiBodG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkUGx1Z0luc0Zyb21O
b2RlTGlzdE1hdGNoaW5nUGx1Z0luT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRN
TFNjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6
OnNldFRleHQpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om5leHRWYWxpZEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZUxpc3RCb3hT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hP
bkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlz
dEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RlZElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RPcHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsaXN0VG9PcHRpb25JbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVzZWxlY3RJdGVtc1dp
dGhvdXRWYWxpZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpz
YXZlRm9ybUNvbnRyb2xTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6c2VhcmNoT3B0aW9uc0ZvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpyZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2VsZWN0ZWRMaXN0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OmFjY2Vzc0tleVNldFNlbGVjdGVkSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxlbmd0aCk6CisgICAgICAg
ICogaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291
cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTb3VyY2VF
bGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNDbGlja2FibGVDb250cm9sKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTdW1tYXJ5RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
ICogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZUVsZW1lbnQ6OmNhcHRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUGFydEVsZW1lbnQ6OmZpbmRQYXJlbnRU
YWJsZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KToKKyAgICAgICAgKiBodG1s
L0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZVJvd3NDb2xsZWN0aW9uOjpyb3dBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVS
b3dzQ29sbGVjdGlvbjo6bGFzdFJvdyk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlubmVy
VGV4dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uRm9ySW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmluZGV4Rm9yUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlV2l0
aEhhcmRMaW5lQnJlYWtzKToKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6c2V0VGV4dCk6CisgICAgICAgICog
aHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0Vs
ZW1lbnQ6Om1lZGlhRWxlbWVudCk6CisgICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAg
ICAgICAqIGh0bWwvSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6
c2hvdWxkU3VibWl0SW1wbGljaXRseSk6CisgICAgICAgICogaHRtbC9NZWRpYURvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFuY2VzdG9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0
bWwvUmFkaW9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6
OmhhbmRsZUtleWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6
aXNLZXlib2FyZEZvY3VzYWJsZSk6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJ
bXBsaWNpdGx5KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNJbXBsaWVkRW5kVGFnKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2hMYXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6b3duZXJEb2N1bWVudEZvckN1cnJlbnRO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVy
U2l0ZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6OmlzU2NvcGVNYXJrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE5hbWVzOjppc1RhYmxlU2NvcGVNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE5hbWVzOjppc1NlbGVjdFNjb3BlTWFya2VyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1M
VHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
U3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpyZXNl
dEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NDaGFyYWN0ZXJCdWZmZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0luc2Vy
dGlvblBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc0FjdGl2ZUluc2VydGlvblBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcmVudE5vZGVGb3JEaXN0cmlidXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6cGFyZW50RWxlbWVudEZvckRpc3RyaWJ1dGlvbik6CisgICAgICAgICogaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
cmVudE1lZGlhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OmNv
bnRhaW5zUmVsYXRlZFRhcmdldCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
c0FwcGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNBcHBsZUV2ZW50TGlz
dGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6Zm9yd2FyZEV2ZW50
KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvdHJhY2svVlRU
Q3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6Y29weVdlYlZUVE5vZGVUb0RPTVRy
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6VlRUQ3VlOjptYXJrRnV0dXJlQW5kUGFzdE5vZGVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50Ojphc3NlcnREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01BZ2VudDo6YXNzZXJ0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6cXVlcnlTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6cXVlcnlTZWxlY3RvckFsbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0Tm9kZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kSG9zdDo6ZGlzcGF0Y2hFdmVudEFzQ29udGV4dE1lbnVFdmVudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpmcmFtZUZvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yTm9uRG9jdW1l
bnRDb250ZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1l
bnRpbmdBZ2VudHNGb3JDb250ZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTm9k
ZUZpbmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOb2RlRmluZGVyOjpzZWFy
Y2hVc2luZ0RPTVRyZWVUcmF2ZXJzYWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTm9k
ZUZpbmRlcjo6c2VhcmNoVXNpbmdYUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JO
b2RlRmluZGVyOjpzZWFyY2hVc2luZ0NTU1NlbGVjdG9ycyk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JF
bGVtZW50SW5mbyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6aW5saW5lU3R5bGVTaGVl
dFRleHQpOgorICAgICAgICAqIGxvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmhhbmRsZUZhbGxiYWNr
Q29udGVudCk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2luKToKKyAgICAgICAgKiBsb2FkZXIv
VGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbUNhY2hl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbVNlc3Np
b25DYWNoZXMpOgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGhNTEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIG1h
dGhtbC9NYXRoTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTFNl
bGVjdEVsZW1lbnQ6OmdldFNlbGVjdGVkU2VtYW50aWNzQ2hpbGQpOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2V0VG9vbFRpcCk6CisgICAg
ICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dE1lbnVDb250cm9sbGVyOjptYXliZUNyZWF0ZUNvbnRleHRNZW51KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBh
Z2UvRE9NVGltZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6Omluc3RhbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OmZpcmVkKToKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRVbmRlck1vdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpjYW5Qcm9jZXNzRHJhZyk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVudCk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5k
bGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNTdWJtaXRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0YXJnZXRJc0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRE
cm9wWm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZURyYWdBbmRE
cm9wKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRh
cmdldE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5w
dXRFdmVudCk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6Om93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZUVsZW1lbnREZXNjZW5kaW5nRG93bkludG9G
cmFtZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZv
Y3VzYWJsZUVsZW1lbnRBY3Jvc3NGb2N1c1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q29udHJvbGxlcjo6ZmluZEVsZW1lbnRXaXRoRXhhY3RUYWJJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpuZXh0RWxlbWVudFdpdGhHcmVhdGVyVGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
cHJldmlvdXNFbGVtZW50V2l0aExvd2VyVGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9j
dXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpjbGVhclNlbGVjdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29u
dHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseSk6CisgICAgICAgICogcGFnZS9GcmFt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9y
cyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9BbmNo
b3IpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAgICAgKiBwYWdlL1NwYXRp
YWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ2FuZGlkYXRlOjpGb2N1
c0NhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxhYmxlRW5jbG9zaW5nQm94T3JQYXJlbnRGcmFtZUZvck5vZGVJ
bkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5TY3JvbGxJbkRpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjphcmVFbGVtZW50c09uU2FtZUxpbmUpOgorICAgICAgICAqIHBhZ2UvaW9zL0Zy
YW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JSZXNwb25kaW5nVG9DbGlja0V2
ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMpOgorICAgICAgICAq
IHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQ6OnNldElubmVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojpz
ZXRJbm5lck5vblNoYXJlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6
dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVu
Y2F0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6bWVkaWFTdXBwb3J0c0Z1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxsc2Ny
ZWVuRm9yVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6bWVkaWFJc1Zp
ZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmlubmVyRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppbm5lck5vblNoYXJlZEVsZW1lbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cmVzaXplVGV4dFBlcm1pdHRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNpemVzTG9naWNhbFdpZHRoVG9GaXRD
b250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwbGFuQ291bnRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRldGFp
bHNNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGV0YWlsc01hcmtlcjo6aXNP
cGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1
Z2luSW5kaWNhdG9yRXZlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6
dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50QXJlYUVsZW1lbnRGb2N1c1JpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2U6OmltYWdlTWFwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RU
b1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlc2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNS
ZXN0YXJ0ZWRQbHVnaW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWFycXVlZTo6bWFycXVlZVNwZWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0ZWRPcHRpb25Db3VudCk6CisgICAgICAg
IChSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKToKKyAgICAgICAgKFJlbmRlck1l
bnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbik6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6aXRl
bVRleHQpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0VuYWJsZWQpOgorICAgICAg
ICAoUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0xhYmVsKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0
OjppdGVtSXNTZWxlY3RlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1ldGVyOjptZXRlckVsZW1lbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTmFtZWRGbG93VGhyZWFkOjppc0NoaWxkQWxsb3dlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFk
ZFBERlVSTFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzaG91bGRSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnVw
ZGF0ZURyYWdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmdldFVuY2Fj
aGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpnZXRUZXh0
RGVjb3JhdGlvbkNvbG9ycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpwcm9ncmVzc0VsZW1lbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZTo6Y29udmVydFN0eWxlTG9naWNhbFdpZHRoVG9Db21wdXRlZFdpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjb252ZXJ0U3R5bGVMb2dpY2FsSGVpZ2h0VG9Db21wdXRl
ZEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhcnNlQ29sU3BhbkZyb21ET00pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYXJzZVJvd1NwYW5Gcm9tRE9NKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNG
b2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc1ByZXNzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlDb250cm9sKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0hvdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRNZWRpYUVsZW1lbnRGcm9t
UmVuZGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Om5vZGVIYXNDbGFzcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRW1w
dHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJl
ZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0
b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3Npemlu
Z0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpjb250YWluZXJD
b250YWluc09uZU9mVGFncyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6aXNDaGls
ZEFsbG93ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0dyYWRpZW50U3RvcDo6Z3JhZGllbnRF
bGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lcjo6Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJp
bmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KToKKyAgICAgICAgKiBzdHlsZS9T
dHlsZVJlc29sdmVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjppbnZhbGlkYXRl
V2hpdGVzcGFjZU9ubHlUZXh0U2libGluZ3NBZnRlckF0dGFjaElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjphdHRhY2hDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6YXR0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
ZGV0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0
YWNoQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnJlc29sdmVTaGFkb3dUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlVHJlZSk6CisgICAgICAgICogc3Zn
L1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBzdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FsdEdseXBoRWxlbWVudDo6aGFzVmFsaWRHbHlwaEVsZW1lbnRz
KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6
CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Rv
Y3VtZW50Ojpyb290RWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6aXNPdXRlcm1vc3RTVkdTVkdFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6Om93bmVyU1ZHRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdFbGVtZW50Ojp2aWV3cG9ydEVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdG
b250RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlw
aFNlbGVjdGlvbik6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OmFzc29jaWF0ZWRGb250RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6
CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGb250RmFjZVNyY0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgICog
c3ZnL1NWR0dseXBoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1l
bnQ6OmludmFsaWRhdGVHbHlwaENhY2hlKToKKyAgICAgICAgKiBzdmcvU1ZHSEtlcm5FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0hLZXJuRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0hLZXJuRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAg
ICAqIHN2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0
aENvbnRleHQ6OmRldGVybWluZVZpZXdwb3J0KToKKyAgICAgICAgKiBzdmcvU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50RWxl
bWVudDo6Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NWR0xvY2F0
YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1ZpZXdwb3J0RWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMb2NhdGFibGU6OmdldFRyYW5zZm9ybVRvRWxlbWVudCk6CisgICAgICAg
ICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVs
ZW1lbnQ6OnBhdGhFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6
bm90aWZ5UGFyZW50T2ZQYXRoQ2hhbmdlKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0aERl
cGVuZGVuY2llcyk6CisgICAgICAgICogc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50Ojpjb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMp
OgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3JhZGllbnRBdHRyaWJ1
dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTVkdFbGVtZW50OjpzZXR1cEluaXRpYWxWaWV3KToKKyAgICAgICAgKiBzdmcvU1ZHVGV4
dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxl
bWVudDo6ZWxlbWVudEZyb21SZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcEluc3RhbmNlVHJlZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdVc2VFbGVtZW50Ojp0b0NsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Vz
ZUVsZW1lbnQ6OmV4cGFuZFVzZUVsZW1lbnRzSW5TaGFkb3dUcmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1VzZUVsZW1lbnQ6OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKToKKyAg
ICAgICAgKiBzdmcvU1ZHVktlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZL
ZXJuRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZLZXJuRWxl
bWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jl
c291cmNlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVyKToKKyAgICAgICAg
KiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNo
YWRvd1Jvb3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dmlzaWJsZVBsYWNl
aG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2VsZWN0Q29sb3JJbkNvbG9y
Q2hvb3Nlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Ondhc0xhc3RDaGFuZ2VVc2Vy
RWRpdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OmlzU2VsZWN0UG9wdXBWaXNpYmxlKToKKyAgICAgICAgKiB0ZXN0aW5nL2pz
L1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6Omlu
amVjdEludGVybmFsc09iamVjdCk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpvcGVuKToKKyAgICAgICAgKiB4bWwv
WFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmV4cGFuZGVkTmFt
ZUxvY2FsUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFuZzo6ZXZhbHVhdGUp
OgorICAgICAgICAqIHhtbC9YUGF0aE5vZGVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OnNvcnRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Tm9kZVNldDo6c29ydCk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6ZmluZFJvb3ROb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpOb2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KToKKyAgICAgICAgKiB4bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorCisyMDE0LTEwLTAxICBDaHJpc3RvcGhl
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNh
c3Q8PigpIGZvciBGaWxlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzczMTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCmluZGV4IDNjMDczOWRhMDk4NjAzOTBlOTlj
NzI1NjY5MTAwYWRkY2ZlNTNhYmYuLjRkNzYyMjIyNDY1Y2RjZTM2OWFiODhlMmJiMmU0ZjA0OGI4
ZjhlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNC0xMC0wMSAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBpczw+KFQq
KSBmdW5jdGlvbiBkbyBhIG51bGwgY2hlY2sgb24gdGhlIHBvaW50ZXIgYXJndW1lbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzMworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhdmUgaXM8PihUKikg
ZnVuY3Rpb24gZG8gYSBudWxsIGNoZWNrIG9uIHRoZSBhcmd1bWVudCBpbnN0ZWFkIG9mIGEKKyAg
ICAgICAgc2ltcGxlIGFzc2VydGlvbi4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgMiByZWFzb25zOgor
ICAgICAgICAxLiBJdCBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBkb3duY2FzdDw+KFQqKSwgd2hp
Y2ggd2lsbCBzdWNjZWVkIGV2ZW4KKyAgICAgICAgICAgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVs
bHB0ci4KKyAgICAgICAgMi4gSXQgc2ltcGxpZmllcyB0aGUgY29kZSBhIGJpdCBhcyBpdCBnZXRz
IHJpZCBvZiBhIGxvdCBvZiBleHBsaWNpdAorICAgICAgICAgICBudWxsIGNoZWNrcy4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5tbToKKyAgICAgICAgKFdl
YkNocm9tZUNsaWVudElPUzo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKToKKwogMjAxNC0wOS0yOSAg
RGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVtb3Zl
IENvcmVMb2NhdGlvbiB3b3JrYXJvdW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNGIxMDlhYjQ1MzE3
MmE5ZDc5OGIxNDY4YjRkYzEzZmYyMmFiNTNhZi4uZmQ2NDBlMWIwOTU0NGY4MTViZmM3MjExNWQ0
NmYxZmQ4MGIzNzcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE0LTEw
LTAxICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBIYXZl
IGlzPD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVsbCBjaGVjayBvbiB0aGUgcG9pbnRlciBhcmd1bWVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2ZSBp
czw+KFQqKSBmdW5jdGlvbiBkbyBhIG51bGwgY2hlY2sgb24gdGhlIGFyZ3VtZW50IGluc3RlYWQg
b2YgYQorICAgICAgICBzaW1wbGUgYXNzZXJ0aW9uLiBUaGlzIG1ha2VzIHNlbnNlIGZvciAyIHJl
YXNvbnM6CisgICAgICAgIDEuIEl0IGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGRvd25jYXN0PD4o
VCopLCB3aGljaCB3aWxsIHN1Y2NlZWQgZXZlbgorICAgICAgICAgICBpZiB0aGUgYXJndW1lbnQg
aXMgYSBudWxscHRyLgorICAgICAgICAyLiBJdCBzaW1wbGlmaWVzIHRoZSBjb2RlIGEgYml0IGFz
IGl0IGdldHMgcmlkIG9mIGEgbG90IG9mIGV4cGxpY2l0CisgICAgICAgICAgIG51bGwgY2hlY2tz
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAg
ICAoV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVu
dDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6
dGV4dEZpZWxkRGlkRW5kRWRpdGluZyk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRleHRE
aWRDaGFuZ2VJblRleHRGaWVsZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRvVGV4dEZp
ZWxkQ29tbWFuZEZyb21FdmVudCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxs
QmVEZWxldGVkSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlk
Q2hhbmdlSW5UZXh0QXJlYSk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRp
b24ubW06CisgICAgICAgIChpbnB1dEVsZW1lbnRGcm9tRE9NRWxlbWVudCk6CisgICAgICAgIChz
ZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlJlbmRl
ckxheWVyLm1tOgorICAgICAgICAoK1tXZWJSZW5kZXJMYXllciBuYW1lRm9yTGF5ZXI6XSk6CisK
IDIwMTQtMTAtMDEgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMTM3MzA4PiBXZWJLaXQgc2hvdWxkIGJ1aWxkIG9uIE9TIFggWW9z
ZW1pdGUgZm9yIGV4dGVybmFsIHVzZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYWZhYzgyZmNkNzYz
MGUzNjBhNTM1ZDViNzI0Yjk1MDYxNWU1YmExMC4uNmYxYmUyZDg5NDU3OTJiODI2Nzg3NzM1ZmYw
MzMwMDNjMjliODJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE0LTEw
LTAxICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBIYXZl
IGlzPD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVsbCBjaGVjayBvbiB0aGUgcG9pbnRlciBhcmd1bWVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2ZSBp
czw+KFQqKSBmdW5jdGlvbiBkbyBhIG51bGwgY2hlY2sgb24gdGhlIGFyZ3VtZW50IGluc3RlYWQg
b2YgYQorICAgICAgICBzaW1wbGUgYXNzZXJ0aW9uLiBUaGlzIG1ha2VzIHNlbnNlIGZvciAyIHJl
YXNvbnM6CisgICAgICAgIDEuIEl0IGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGRvd25jYXN0PD4o
VCopLCB3aGljaCB3aWxsIHN1Y2NlZWQgZXZlbgorICAgICAgICAgICBpZiB0aGUgYXJndW1lbnQg
aXMgYSBudWxscHRyLgorICAgICAgICAyLiBJdCBzaW1wbGlmaWVzIHRoZSBjb2RlIGEgYml0IGFz
IGl0IGdldHMgcmlkIG9mIGEgbG90IG9mIGV4cGxpY2l0CisgICAgICAgICAgIG51bGwgY2hlY2tz
LgorCisgICAgICAgICogRE9NQ29yZUNsYXNzZXMuY3BwOgorICAgICAgICAoRE9NRWxlbWVudDo6
Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAqIERPTUhUTUxDbGFzc2VzLmNwcDoKKyAgICAgICAg
KERPTUhUTUxEb2N1bWVudDo6Ym9keSk6CisgICAgICAgIChET01IVE1MRG9jdW1lbnQ6OmZvcm1z
KToKKyAgICAgICAgKERPTUhUTUxFbGVtZW50OjppZE5hbWUpOgorICAgICAgICAoRE9NSFRNTEVs
ZW1lbnQ6OmlubmVyVGV4dCk6CisgICAgICAgIChET01IVE1MRWxlbWVudDo6c2V0SW5uZXJUZXh0
KToKKyAgICAgICAgKERPTUhUTUxGb3JtRWxlbWVudDo6YWN0aW9uKToKKyAgICAgICAgKERPTUhU
TUxGb3JtRWxlbWVudDo6bWV0aG9kKToKKyAgICAgICAgKERPTUhUTUxPcHRpb25FbGVtZW50Ojp0
ZXh0KToKKyAgICAgICAgKERPTUhUTUxPcHRpb25FbGVtZW50OjpsYWJlbCk6CisgICAgICAgIChE
T01IVE1MSW5wdXRFbGVtZW50Ojpmb3JtKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6
OmRpc2FibGVkKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnJlYWRPbmx5KToKKyAg
ICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFR5cGUpOgorICAgICAgICAoRE9NSFRNTElu
cHV0RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFs
dWUpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGb3JVc2VyKToKKyAg
ICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdCk6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVt
ZW50OjpzZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpzZXRT
ZWxlY3Rpb25FbmQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRW5k
KToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OmlzVGV4dEZpZWxkKToKKyAgICAgICAg
KERPTUhUTUxJbnB1dEVsZW1lbnQ6OnJlY3RPblNjcmVlbik6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpyZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2UpOgorICAgICAgICAoRE9NSFRNTElu
cHV0RWxlbWVudDo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50
OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2Zp
bGxlZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50Ojppc1VzZXJFZGl0ZWQpOgorICAg
ICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MVGV4
dEFyZWFFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50Ojpz
ZXRWYWx1ZSk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZWxlY3QpOgorICAg
ICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6aXNVc2VyRWRpdGVkKToKKyAgICAgICAgKiBX
ZWJGcmFtZS5jcHA6CisgICAgICAgIChmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KToKKyAgICAg
ICAgKGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KToKKyAgICAgICAgKFdlYkZyYW1lOjplbGVt
ZW50V2l0aE5hbWUpOgorCiAyMDE0LTA5LTMwICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICBHZW5lcmFsaXplIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBzdXBw
b3J0IHRvIGFsbCB0eXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDI1ZGNiMGRkYWJiOWU2NWE4MTJjZGYxM2Ew
N2MxNmMwZDNlNjA4NWQuLmRmNDlmZWIyOWE0ZmViZjJkY2E3Y2I3OTUzODYxMzM2MDgxYzZhNjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxNC0xMC0wMSAgQ2hyaXN0b3BoZSBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBpczw+KFQqKSBmdW5jdGlvbiBk
byBhIG51bGwgY2hlY2sgb24gdGhlIHBvaW50ZXIgYXJndW1lbnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhdmUgaXM8PihUKikgZnVuY3Rpb24gZG8g
YSBudWxsIGNoZWNrIG9uIHRoZSBhcmd1bWVudCBpbnN0ZWFkIG9mIGEKKyAgICAgICAgc2ltcGxl
IGFzc2VydGlvbi4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgMiByZWFzb25zOgorICAgICAgICAxLiBJ
dCBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBkb3duY2FzdDw+KFQqKSwgd2hpY2ggd2lsbCBzdWNj
ZWVkIGV2ZW4KKyAgICAgICAgICAgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVsbHB0ci4KKyAgICAg
ICAgMi4gSXQgc2ltcGxpZmllcyB0aGUgY29kZSBhIGJpdCBhcyBpdCBnZXRzIHJpZCBvZiBhIGxv
dCBvZiBleHBsaWNpdAorICAgICAgICAgICBudWxsIGNoZWNrcy4KKworICAgICAgICAqIFNoYXJl
ZC9XZWJSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZW5kZXJPYmplY3Q6
OldlYlJlbmRlck9iamVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6Om1lZGlhVHlwZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpoYW5k
bGVFdmVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmZvY3VzZWRFbGVt
ZW50Q2hhbmdlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVs
ZERpZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dGV4
dEZpZWxkRGlkRW5kRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xp
ZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRv
ckNsaWVudDo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZTo6Y29udGFpbnNBbnlGb3JtRWxlbWVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZTo6Y29udGFpbnNBbnlGb3JtQ29udHJvbHMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmRG9jdW1lbnRGb3JQ
cmludGluZ0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGV0ZXJtaW5lUHJpbWFy
eVNuYXBzaG90dGVkUGx1Z0luKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmJsdXJBc3Npc3RlZE5vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVWYWx1ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1BY3Rpb25PbkVsZW1lbnQpOgorICAgICAgICAoV2Vi
S2l0Ojppc0Fzc2lzdGFibGVOb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24pOgorCiAyMDE0LTEwLTAxICBNYXJrIFJvd2UgIDxtcm93ZUBh
cHBsZS5jb20+CiAKICAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzNzMwOD4gV2ViS2l0
IHNob3VsZCBidWlsZCBvbiBPUyBYIFlvc2VtaXRlIGZvciBleHRlcm5hbCB1c2VycwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmggYi9Tb3VyY2UvV1RGL3d0Zi9UeXBlQ2Fz
dHMuaAppbmRleCA2Zjc2YzhjZDBjYzZlNzk1YzRlMTUwODlmZmM1NDNhN2JhNTBkYmQ2Li4zYzIw
MzQxNTBjYTNmNjZhZGVhNGQ2YmI2ZTVlZjllYWY3MjNjM2QzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9UeXBlQ2FzdHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UeXBlQ2FzdHMuaApAQCAt
NjAsOSArNjAsOCBAQCBpbmxpbmUgYm9vbCBpcyhBcmdUeXBlJiBzb3VyY2UpCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBlbmFtZSBBcmdUeXBlPgogaW5saW5lIGJvb2wgaXMo
QXJnVHlwZSogc291cmNlKQogewotICAgIEFTU0VSVChzb3VyY2UpOwogICAgIHN0YXRpY19hc3Nl
cnQoIXN0ZDo6aXNfYmFzZV9vZjxFeHBlY3RlZFR5cGUsIEFyZ1R5cGU+Ojp2YWx1ZSwgIlVubmVj
ZXNzYXJ5IHR5cGUgY2hlY2siKTsKLSAgICByZXR1cm4gVHlwZUNhc3RUcmFpdHM8Y29uc3QgRXhw
ZWN0ZWRUeXBlLCBjb25zdCBBcmdUeXBlPjo6aXNPZlR5cGUoKnNvdXJjZSk7CisgICAgcmV0dXJu
IHNvdXJjZSAmJiBUeXBlQ2FzdFRyYWl0czxjb25zdCBFeHBlY3RlZFR5cGUsIGNvbnN0IEFyZ1R5
cGU+Ojppc09mVHlwZSgqc291cmNlKTsKIH0KIAogLy8gU2FmZSBkb3duY2FzdGluZyBmdW5jdGlv
bnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3Bw
CmluZGV4IDAxMjhmNTBkMjkyOWY1MTI1ZjhiMGIxMzJkZWJhZDdlZWE4YzYzOGEuLjBlNDZhYzYy
NjUwZjZmZmE0N2Y1M2NiYTdhZDkyZjBlN2ZhMjZhZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCkBAIC02OCw4ICs2OCw4IEBAIElEQkZh
Y3Rvcnk6On5JREJGYWN0b3J5KCkKIG5hbWVzcGFjZSB7CiBzdGF0aWMgYm9vbCBpc0NvbnRleHRW
YWxpZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIEFTU0VSVChpczxE
b2N1bWVudD4oY29udGV4dCkgfHwgY29udGV4dC0+aXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKLSAg
ICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CisgICAgQVNTRVJUKGlzPERvY3VtZW50Pigq
Y29udGV4dCkgfHwgY29udGV4dC0+aXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKKyAgICBpZiAoaXM8
RG9jdW1lbnQ+KCpjb250ZXh0KSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwogICAgICAgICByZXR1cm4gZG9jdW1lbnQuZnJhbWUo
KSAmJiBkb2N1bWVudC5wYWdlKCkgJiYgKCFkb2N1bWVudC5wYWdlKCktPnVzZXNFcGhlbWVyYWxT
ZXNzaW9uKCkgfHwgU2NoZW1lUmVnaXN0cnk6OmFsbG93c0RhdGFiYXNlQWNjZXNzSW5Qcml2YXRl
QnJvd3NpbmcoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKS0+cHJvdG9jb2woKSkpOwogICAgIH0K
QEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIGJvb2wgaXNDb250ZXh0VmFsaWQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKIHN0YXRpYyBTdHJpbmcgZ2V0SW5kZXhlZERCRGF0YWJhc2VQ
YXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGlzQ29u
dGV4dFZhbGlkKGNvbnRleHQpKTsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7Cisg
ICAgaWYgKGlzPERvY3VtZW50PigqY29udGV4dCkpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKICAgICAgICAgcmV0dXJuIGRvY3Vt
ZW50LnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCkuaW5kZXhlZERCRGF0YWJhc2VQYXRo
KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggODM5ZmE4NzIz
NjZiZGU2ZTQzNzA2MDUxMmFkMjYxZjRjZDA4MjVjMi4uYTI3Mjg1MmRjZjY4NzAwNWU0OGYwY2Ey
NzMzY2U3OGRmMDAwZjMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCkBAIC01
NSw3ICs1NSw3IEBAIFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+IFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoU2NyaXB0CiAgICAgQVNTRVJUKGNvbnRleHQp
OwogICAgIEFTU0VSVChjbGllbnQpOwogCi0gICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPihj
b250ZXh0KSkgeworICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQpKSB7CiAg
ICAgICAgIFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSA9IGRvd25jYXN0PFdv
cmtlckdsb2JhbFNjb3BlPigqY29udGV4dCk7CiAgICAgICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxv
b3AgPSB3b3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS5ydW5Mb29wKCk7CiAgICAgICAgIFN0cmlu
Z0J1aWxkZXIgbW9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAKaW5kZXggOThiZGNlMmZkM2RkYmU3MjkwYjM3ZGQzOTEzMDVkZmI3ZTBmZjA0
My4uZmQ0Nzc5NmQxM2FiOTI0ZTk4MjA3ZWYxZDI0OGQ1OGM3OGIxY2JmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKQEAgLTIzOSw3ICsy
MzksNyBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHByb3RvY29scywgRXhjZQogCiAgICAgLy8gRklYTUU6IENvbnZlcnQg
dGhpcyB0byBjaGVjayB0aGUgaXNvbGF0ZWQgd29ybGQncyBDb250ZW50IFNlY3VyaXR5IFBvbGlj
eSBvbmNlIHdlYmtpdC5vcmcvYi8xMDQ1MjAgaXMgc29sdmVkLgogICAgIGJvb2wgc2hvdWxkQnlw
YXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2U7Ci0gICAgaWYgKGlzPERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKSB7CisgICAgaWYgKGlzPERvY3VtZW50
Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAg
ICAgIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSA9IGRvY3VtZW50
LmZyYW1lKCktPnNjcmlwdCgpLnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBv
bGljeSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKaW5kZXggZjM2NmEyZDVmYTY4NzI0YjE5ODYw
YzMwNzllYzk2ODAyYmVjMzcyZC4uYzczMDQ2MWRjZTkyMGEzYWE5MDM4ODg2ODAwNmNmMzRkNmI2
MDZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldEhhbmRzaGFrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKQEAgLTE5Niw3ICsxOTYsNyBAQCBDU3RyaW5nIFdlYlNv
Y2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoYWtlTWVzc2FnZSgpIGNvbnN0CiAgICAgICAgIGZp
ZWxkcy5hcHBlbmQoIlNlYy1XZWJTb2NrZXQtUHJvdG9jb2w6ICIgKyBtX2NsaWVudFByb3RvY29s
KTsKIAogICAgIFVSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7
Ci0gICAgaWYgKGlzPERvY3VtZW50PihtX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPERvY3VtZW50
PigqbV9jb250ZXh0KSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKm1fY29udGV4dCk7CiAgICAgICAgIFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSgmZG9jdW1lbnQsIHVybCk7CiAgICAgICAgIGlmICghY29va2ll
LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCmluZGV4IDZkMmYzMmNiODEwZjQ0N2Y2Y2FjNDk1MTFmYzJmNzE4MDBiMTVhNDguLjU3
ZWEwNmZhOTI3NDdiNjRjZTk2ZDIxMmExMjk0MTE0NDcxYWYwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMTc2LDcgKzE3Niw3IEBA
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQ
YWdlKGNvbnN0IFBhZ2UqIHBhZ2UpCiAgICAgLy8gZ2V0IHRoZSBmb2N1c2VkIG5vZGUgaW4gdGhl
IHBhZ2UKICAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50ID0gcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKICAgICBFbGVtZW50KiBmb2N1
c2VkRWxlbWVudCA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKLSAgICBpZiAo
Zm9jdXNlZEVsZW1lbnQgJiYgaXM8SFRNTEFyZWFFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkpCisg
ICAgaWYgKGlzPEhUTUxBcmVhRWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKQogICAgICAgICByZXR1
cm4gZm9jdXNlZEltYWdlTWFwVUlFbGVtZW50KGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4oZm9j
dXNlZEVsZW1lbnQpKTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IGZvY3VzZWRE
b2N1bWVudC0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShmb2N1c2VkRWxlbWVudCA/IHN0
YXRpY19jYXN0PE5vZGUqPihmb2N1c2VkRWxlbWVudCkgOiBmb2N1c2VkRG9jdW1lbnQpOwpAQCAt
Mjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNy
ZWF0ZUZyb21SZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyCiAgICAgICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5U1ZHUm9vdDo6Y3JlYXRlKHJlbmRlcmVyKTsKICAgICAKICAgICAvLyBTZWFy
Y2ggZmllbGQgYnV0dG9ucwotICAgIGlmIChub2RlICYmIGlzPEVsZW1lbnQ+KG5vZGUpICYmIGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1NlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudCgp
KQorICAgIGlmIChpczxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSku
aXNTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbjo6Y3JlYXRlKHJlbmRlcmVyKTsKICAgICAK
ICAgICBpZiAocmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkgewpAQCAtMzg2LDcgKzM4Niw3
IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKE5vZGUq
IG5vZGUpCiAKICAgICBib29sIGluc2lkZU1ldGVyRWxlbWVudCA9IGZhbHNlOwogI2lmIEVOQUJM
RShNRVRFUl9FTEVNRU5UKQotICAgIGluc2lkZU1ldGVyRWxlbWVudCA9IGlzPEhUTUxNZXRlckVs
ZW1lbnQ+KG5vZGUtPnBhcmVudEVsZW1lbnQoKSk7CisgICAgaW5zaWRlTWV0ZXJFbGVtZW50ID0g
aXM8SFRNTE1ldGVyRWxlbWVudD4oKm5vZGUtPnBhcmVudEVsZW1lbnQoKSk7CiAjZW5kaWYKICAg
ICAKICAgICBpZiAoIWluQ2FudmFzU3VidHJlZSAmJiAhaXNIaWRkZW4gJiYgIWluc2lkZU1ldGVy
RWxlbWVudCkKQEAgLTY1Myw3ICs2NTMsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZU1l
bnVPcGVuZWQoTm9kZSogbm9kZSkKICAgICAKIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlTGl2
ZVJlZ2lvbkNyZWF0ZWQoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJl
bmRlcmVyKCkgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9k
ZSkgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CkBAIC05MTcsNyArOTE3LDcg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW4KICAgICAgICAgaGFuZGxlQXJpYVJvbGVDaGFuZ2Vk
KGVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGFsdEF0dHIgfHwgYXR0ck5hbWUg
PT0gdGl0bGVBdHRyKQogICAgICAgICB0ZXh0Q2hhbmdlZChlbGVtZW50KTsKLSAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBmb3JBdHRyICYmIGlzPEhUTUxMYWJlbEVsZW1lbnQ+KGVsZW1lbnQpKQor
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGZvckF0dHIgJiYgaXM8SFRNTExhYmVsRWxlbWVudD4o
KmVsZW1lbnQpKQogICAgICAgICBsYWJlbENoYW5nZWQoZWxlbWVudCk7CiAKICAgICBpZiAoIWF0
dHJOYW1lLmxvY2FsTmFtZSgpLnN0cmluZygpLnN0YXJ0c1dpdGgoImFyaWEtIikpCkBAIC05NDcs
OCArOTQ3LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBFbGVtZW4KIAogdm9pZCBBWE9iamVjdENhY2hl
OjpsYWJlbENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoaXM8SFRNTExh
YmVsRWxlbWVudD4oZWxlbWVudCkpOwotICAgIEhUTUxFbGVtZW50KiBjb3JyZXNwb25kaW5nQ29u
dHJvbCA9IGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KGVsZW1lbnQpLT5jb250cm9sKCk7Cisg
ICAgQVNTRVJUKGlzPEhUTUxMYWJlbEVsZW1lbnQ+KCplbGVtZW50KSk7CisgICAgSFRNTEVsZW1l
bnQqIGNvcnJlc3BvbmRpbmdDb250cm9sID0gZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4oKmVs
ZW1lbnQpLmNvbnRyb2woKTsKICAgICB0ZXh0Q2hhbmdlZChjb3JyZXNwb25kaW5nQ29udHJvbCk7
CiB9CiAKQEAgLTEwMzAsNyArMTAzMCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtl
ckRhdGFGb3JWaXNpYmxlUG9zaXRpb24oVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJECiBjb25z
dCBFbGVtZW50KiBBWE9iamVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQoY29uc3QgTm9k
ZSogbm9kZSkKIHsKICAgICBjb25zdCBFbGVtZW50KiByZXN1bHQgPSBub2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KCk7Ci0gICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KG5v
ZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJlbnRFbGVtZW50KCk7Cisg
ICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KCpub2RlKSA/IGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpOwogCiAgICAgZm9yICg7IGVs
ZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgaWYg
KG5vZGVJc1RleHRDb250cm9sKGVsZW1lbnQpKQpAQCAtMTA3Myw3ICsxMDczLDcgQEAgYm9vbCBp
c05vZGVBcmlhVmlzaWJsZShOb2RlKiBub2RlKQogICAgIC8vIFRvIGRldGVybWluZSBpZiBhIG5v
ZGUgaXMgQVJJQSB2aXNpYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBwYXJlbnQgaGllcmFyY2h5
IHRvIHNlZSBpZiBhbnlvbmUgc3BlY2lmaWVzCiAgICAgLy8gYXJpYS1oaWRkZW4gZXhwbGljaXRs
eS4KICAgICBmb3IgKE5vZGUqIHRlc3ROb2RlID0gbm9kZTsgdGVzdE5vZGU7IHRlc3ROb2RlID0g
dGVzdE5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8RWxlbWVudD4odGVzdE5v
ZGUpKSB7CisgICAgICAgIGlmIChpczxFbGVtZW50PigqdGVzdE5vZGUpKSB7CiAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFIaWRkZW5WYWx1ZSA9IGRvd25jYXN0PEVsZW1lbnQ+
KCp0ZXN0Tm9kZSkuZmFzdEdldEF0dHJpYnV0ZShhcmlhX2hpZGRlbkF0dHIpOwogICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFyaWFIaWRkZW5WYWx1ZSwgImZhbHNlIikpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCmluZGV4IGYwMzg4
N2NhNmEzNWQzNmRiNTIzYjc4YjRmNWJhMGUyNGM1NmRmYzYuLmRjYTBlYTZlYzZmODkyMTAzZGI5
YjE5ZGY4MjIwZmExOTVhZTNiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCkBAIC02MSw5ICs2
MSw2IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24+IEFjY2Vzc2liaWxp
dHlMaXN0Qm94T3B0aW9uOjpjcmVhdGUoKQogICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJv
eE9wdGlvbjo6aXNFbmFibGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fb3B0aW9uRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAogICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVt
ZW50PihtX29wdGlvbkVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTc4LDkg
Kzc1LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6aXNFbmFibGVkKCkgY29u
c3QKICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmlzU2VsZWN0ZWQoKSBj
b25zdAogewotICAgIGlmICghbV9vcHRpb25FbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PihtX29wdGlvbkVsZW1lbnQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEzMSw5ICsxMjUsNiBAQCBib29sIEFjY2Vzc2liaWxp
dHlMaXN0Qm94T3B0aW9uOjpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiAg
ICAgCiBib29sIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjpjYW5TZXRTZWxlY3RlZEF0dHJp
YnV0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX29wdGlvbkVsZW1lbnQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PihtX29wdGlvbkVs
ZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0xNTYsMTAgKzE0NywxMCBA
QCBTdHJpbmcgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OnN0cmluZ1ZhbHVlKCkgY29uc3QK
ICAgICBpZiAoIWFyaWFMYWJlbC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGFyaWFMYWJlbDsK
ICAgICAKLSAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KG1fb3B0aW9uRWxlbWVudCkpCisg
ICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KSkKICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS50ZXh0
KCk7CiAgICAgCi0gICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KG1fb3B0aW9uRWxlbWVu
dCkpCisgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCptX29wdGlvbkVsZW1lbnQpKQog
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKm1fb3B0aW9uRWxl
bWVudCkuZ3JvdXBMYWJlbFRleHQoKTsKICAgICAKICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0y
MDIsMTAgKzE5MywxMCBAQCBIVE1MU2VsZWN0RWxlbWVudCogQWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb246Omxpc3RCb3hPcHRpb25QYXJlbnROb2RlKCkgY29uc3QKICAgICBpZiAoIW1fb3B0aW9u
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KG1fb3B0aW9uRWxlbWVudCkpCisgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50
PigqbV9vcHRpb25FbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5vd25lclNlbGVjdEVsZW1lbnQoKTsKIAotICAgIGlm
IChpczxIVE1MT3B0R3JvdXBFbGVtZW50PihtX29wdGlvbkVsZW1lbnQpKQorICAgIGlmIChpczxI
VE1MT3B0R3JvdXBFbGVtZW50PigqbV9vcHRpb25FbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCptX29wdGlvbkVsZW1lbnQpLm93bmVyU2VsZWN0
RWxlbWVudCgpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCmlu
ZGV4IGVlMzVlZmFlYmE2N2QxMDA5ZDRkNjJlMDFmYmIwNTE4Y2NjYWMzMjYuLjg4N2JiOTliNGZm
N2ViMWQ2ODBmOGE4MWY2NTUyNTViYjQ1ODM3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCkBA
IC0yNzQsNyArMjc0LDcgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lbGluZTo6Y3JlYXRlKFJlbmRlck9iamVjdCoKIFN0cmluZyBBY2Nlc3Np
YmlsaXR5TWVkaWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgTm9k
ZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG5vZGUpKQorICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBmbG9hdCB0aW1lID0gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKm5vZGUpLnZhbHVlKCkudG9GbG9hdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcApp
bmRleCAzNTBkYTBkYTVmZjlkNTFlZDBkYmRlNWM1YTE1ZTA4MjU5YjA2Y2Y3Li40NjlhZmNhYTAx
NDEyZTVmNjY0M2JlY2E2ZWRkN2Q1MDA1YjQxMmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcApA
QCAtNzAsNyArNzAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwOjpjb21wdXRl
QWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiAKIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9w
dGlvbiogQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXA6Om1lbnVMaXN0T3B0aW9uQWNjZXNzaWJp
bGl0eU9iamVjdChIVE1MRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIWVsZW1l
bnQgfHwgIWlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSB8fCAhZWxlbWVudC0+aW5SZW5k
ZXJlZERvY3VtZW50KCkpCisgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkg
fHwgIWVsZW1lbnQtPmluUmVuZGVyZWREb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGRvY3VtZW50KCktPmF4T2Jq
ZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoTWVudUxpc3RPcHRpb25Sb2xlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5j
cHAKaW5kZXggYmRiZTM0NGUwMWU3YzE0M2Y4OWM2MTBmMTkxYTc2OGFiOTIxYWY5Mi4uMjkwZTVi
ZWIxMmMzZTU0YjU1MzdiMDcwMWJiNzllODJlNTdlNjMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAg
LTI5Miw3ICsyOTIsNyBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgICAgICByZXR1cm4gU3RhdGljVGV4
dFJvbGU7CiAgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShidXR0b25UYWcpKQogICAgICAgICBy
ZXR1cm4gYnV0dG9uUm9sZVR5cGUoKTsKLSAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obm9k
ZSgpKSkgeworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKSkgewogICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpu
b2RlKCkpOwogICAgICAgICBpZiAoaW5wdXQuaXNDaGVja2JveCgpKQogICAgICAgICAgICAgcmV0
dXJuIENoZWNrQm94Um9sZTsKQEAgLTMxNSw3ICszMTUsNyBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAg
ICAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50Pigqbm9kZSgpKTsKICAgICAgICAgcmV0dXJuIHNlbGVjdEVsZW1lbnQubXVsdGlw
bGUoKSA/IExpc3RCb3hSb2xlIDogUG9wVXBCdXR0b25Sb2xlOwogICAgIH0KLSAgICBpZiAoaXM8
SFRNTFRleHRBcmVhRWxlbWVudD4obm9kZSgpKSkKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxl
bWVudD4oKm5vZGUoKSkpCiAgICAgICAgIHJldHVybiBUZXh0QXJlYVJvbGU7CiAgICAgaWYgKGhl
YWRpbmdMZXZlbCgpKQogICAgICAgICByZXR1cm4gSGVhZGluZ1JvbGU7CkBAIC0zMjMsOSArMzIz
LDkgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWlu
ZUFjY2Vzc2liaWxpdHlSb2xlKCkKICAgICAgICAgcmV0dXJuIERpdlJvbGU7CiAgICAgaWYgKG5v
ZGUoKS0+aGFzVGFnTmFtZShwVGFnKSkKICAgICAgICAgcmV0dXJuIFBhcmFncmFwaFJvbGU7Ci0g
ICAgaWYgKGlzPEhUTUxMYWJlbEVsZW1lbnQ+KG5vZGUoKSkpCisgICAgaWYgKGlzPEhUTUxMYWJl
bEVsZW1lbnQ+KCpub2RlKCkpKQogICAgICAgICByZXR1cm4gTGFiZWxSb2xlOwotICAgIGlmIChp
czxFbGVtZW50Pihub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKCkpLmlzRm9jdXNh
YmxlKCkpCisgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+
KCpub2RlKCkpLmlzRm9jdXNhYmxlKCkpCiAgICAgICAgIHJldHVybiBHcm91cFJvbGU7CiAgICAg
CiAgICAgcmV0dXJuIFVua25vd25Sb2xlOwpAQCAtNDQyLDcgKzQ0Miw3IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QK
IGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbnZhc0hhc0ZhbGxiYWNrQ29udGVudCgp
IGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUg
fHwgIWlzPEhUTUxDYW52YXNFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEhUTUxDYW52YXNF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxDYW52YXNFbGVt
ZW50JiBjYW52YXNFbGVtZW50ID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KCpub2RlKTsK
ICAgICAvLyBJZiBpdCBoYXMgYW55IGNoaWxkcmVuIHRoYXQgYXJlIGVsZW1lbnRzLCB3ZSdsbCBh
c3N1bWUgaXQgbWlnaHQgYmUgZmFsbGJhY2sKQEAgLTQ2NywxMCArNDY3LDEwIEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTmF0aXZlVGV4dENvbnRyb2woKSBjb25zdAogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzPEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50Pigqbm9kZSkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5v
ZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICBI
VE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KTsKICAgICAgICAgcmV0dXJuIGlucHV0LmlzVGV4dCgpIHx8IGlucHV0LmlzTnVtYmVyRmllbGQo
KTsKICAgICB9CkBAIC01MTQsMTMgKzUxNCwxMyBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojppc05hdGl2ZUltYWdlKCkgY29uc3QKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChpczxIVE1MSW1hZ2VFbGVtZW50Pihub2RlKSkKKyAgICBpZiAo
aXM8SFRNTEltYWdlRWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShlbWJl
ZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkgeworICAgIGlmIChpczxI
VE1MSW5wdXRFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5w
dXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIHJldHVybiBp
bnB1dC5pc0ltYWdlQnV0dG9uKCk7CiAgICAgfQpAQCAtNTUyLDEwICs1NTIsNyBAQCBib29sIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1Bhc3N3b3JkRmllbGQoKSBjb25zdAogYm9vbCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbnB1dEltYWdlKCkgY29uc3QKIHsKICAgICBOb2RlKiBu
b2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotIAotICAgIGlmIChyb2xlVmFsdWUoKSA9PSBCdXR0b25Sb2xlICYmIGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpICYmIHJv
bGVWYWx1ZSgpID09IEJ1dHRvblJvbGUpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5w
dXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIHJldHVybiBp
bnB1dC5pc0ltYWdlQnV0dG9uKCk7CiAgICAgfQpAQCAtNjQzLDcgKzY0MCw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRW5hYmxlZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9k
ZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gIWRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKQEAgLTY3OCw3ICs2NzUsNyBAQCBib29sIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojppc1ByZXNzZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVs
ZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSkuYWN0aXZlKCk7CiB9CkBAIC03MTcsOSArNzE0LDYgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNDaGVja2VkKCkgY29uc3QKIGJvb2wgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmlzSG92ZXJlZCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAg
IHJldHVybiBpczxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaG92
ZXJlZCgpOwogfQogCkBAIC03NDAsMTAgKzczNCwxMCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojppc1JlYWRPbmx5KCkgY29uc3QKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG5vZGUpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4obm9kZSktPmlzUmVhZE9ubHko
KTsKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpLmlzUmVhZE9ubHkoKTsKIAot
ICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkgeworICAgIGlmIChpczxIVE1MSW5w
dXRFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIGlmIChpbnB1dC5pc1Rl
eHRGaWVsZCgpKQogICAgICAgICAgICAgcmV0dXJuIGlucHV0LmlzUmVhZE9ubHkoKTsKQEAgLTc2
Miw4ICs3NTYsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZSogbiA9IHRoaXMtPm5vZGUo
KTsKLSAgICBpZiAobiAmJiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihuKSkKLSAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG4pLT5pc1JlcXVpcmVkKCk7
CisgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG4pKQorICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm4pLmlzUmVxdWlyZWQoKTsKIAogICAg
IHJldHVybiBmYWxzZTsKIH0KQEAgLTgzOSw3ICs4MzMsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24oKSBjb25zdAogCiBmbG9hdCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6dmFsdWVGb3JSYW5nZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG5vZGUoKSAm
JiBpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKCkpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUoKSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKTsKICAgICAgICAgaWYgKGlucHV0LmlzUmFu
Z2VDb250cm9sKCkpCiAgICAgICAgICAgICByZXR1cm4gaW5wdXQudmFsdWVBc051bWJlcigpOwpA
QCAtODUzLDcgKzg0Nyw3IEBAIGZsb2F0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZUZv
clJhbmdlKCkgY29uc3QKIAogZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVl
Rm9yUmFuZ2UoKSBjb25zdAogewotICAgIGlmIChub2RlKCkgJiYgaXM8SFRNTElucHV0RWxlbWVu
dD4obm9kZSgpKSkgeworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKCkpKSB7CiAg
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKm5vZGUoKSk7CiAgICAgICAgIGlmIChpbnB1dC5pc1JhbmdlQ29udHJvbCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGlucHV0Lm1heGltdW0oKTsKQEAgLTg2Nyw3ICs4NjEsNyBAQCBmbG9hdCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0CiAKIGZsb2F0
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJhbmdlKCkgY29uc3QKIHsKLSAg
ICBpZiAobm9kZSgpICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpIHsKKyAgICBpZiAo
aXM8SFRNTElucHV0RWxlbWVudD4obm9kZSgpKSkgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpOwogICAgICAgICBp
ZiAoaW5wdXQuaXNSYW5nZUNvbnRyb2woKSkKICAgICAgICAgICAgIHJldHVybiBpbnB1dC5taW5p
bXVtKCk7CkBAIC05MDAsNyArODk0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
aXNDb250cm9sKCkgY29uc3QKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2RlKSB8fCBBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojppc0FSSUFDb250cm9sKGFyaWFSb2xlQXR0cmlidXRlKCkpOworICAgIHJl
dHVybiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkgfHwgQWNjZXNzaWJpbGl0eU9i
amVjdDo6aXNBUklBQ29udHJvbChhcmlhUm9sZUF0dHJpYnV0ZSgpKTsKIH0KIAogYm9vbCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNGaWVsZHNldCgpIGNvbnN0CkBAIC05NjUsNyArOTU5LDcg
QEAgRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25z
dAogICAgIC8vIHNlYXJjaCB1cCB0aGUgRE9NIHRyZWUgZm9yIGFuIGFuY2hvciBlbGVtZW50CiAg
ICAgLy8gTk9URTogdGhpcyBhc3N1bWVzIHRoYXQgYW55IG5vbi1pbWFnZSB3aXRoIGFuIGFuY2hv
ciBpcyBhbiBIVE1MQW5jaG9yRWxlbWVudAogICAgIGZvciAoIDsgbm9kZTsgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KG5vZGUp
IHx8IChub2RlLT5yZW5kZXJlcigpICYmIGNhY2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5kZXJl
cigpKS0+aXNBbmNob3IoKSkpCisgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5v
ZGUpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIGNhY2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5k
ZXJlcigpKS0+aXNBbmNob3IoKSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVu
dD4obm9kZSk7CiAgICAgfQogCkBAIC05NzQsNyArOTY4LDcgQEAgRWxlbWVudCogQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogCiBzdGF0aWMgYm9vbCBpc05v
ZGVBY3Rpb25FbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkgewogICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKTsKICAgICAgICAgaWYgKCFpbnB1dC5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiAo
aW5wdXQuaXNSYWRpb0J1dHRvbigpIHx8IGlucHV0LmlzQ2hlY2tib3goKSB8fCBpbnB1dC5pc1Rl
eHRCdXR0b24oKSB8fCBpbnB1dC5pc0ZpbGVVcGxvYWQoKSB8fCBpbnB1dC5pc0ltYWdlQnV0dG9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDQ2LDcgKzEwNDAsNyBAQCBFbGVt
ZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcihNb3VzZUJ1
dHRvbkxpc3RlbmVyUmVzdWx0RgogCiAgICAgLy8gY2hlY2sgaWYgb3VyIHBhcmVudCBpcyBhIG1v
dXNlIGJ1dHRvbiBsaXN0ZW5lcgogICAgIC8vIEZJWE1FOiBEbyB0aGUgY29udGludWF0aW9uIHNl
YXJjaCBsaWtlIGFuY2hvckVsZW1lbnQgZG9lcwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVs
ZW1lbnRMaW5lYWdlKGlzPEVsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkg
OiBub2RlLT5wYXJlbnRFbGVtZW50KCkpKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxl
bWVudExpbmVhZ2UoaXM8RWxlbWVudD4oKm5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkg
OiBub2RlLT5wYXJlbnRFbGVtZW50KCkpKSB7CiAgICAgICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQg
dGhlIGJvZHkgYW5kIHRoaXMgaXMgbm90IGEgY29udHJvbCBlbGVtZW50LCBkbyBub3QgZXhwb3Nl
IHByZXNzIGFjdGlvbiBmb3IgdGhpcyBlbGVtZW50IHVubGVzcyBmaWx0ZXIgaXMgSW5jbHVkZUJv
ZHlFbGVtZW50LgogICAgICAgICAvLyBJdCBjYW4gY2F1c2UgZmFsc2UgcG9zaXRpdmVzLCB3aGVy
ZSBldmVyeSBwaWVjZSBvZiB0ZXh0IGlzIGxhYmVsZWQgYXMgYWNjZXB0aW5nIHByZXNzIGFjdGlv
bnMuCiAgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoYm9keVRhZykgJiYgaXNTdGF0aWNU
ZXh0KCkgJiYgZmlsdGVyID09IEV4Y2x1ZGVCb2R5RWxlbWVudCkKQEAgLTExNjEsNyArMTE1NSw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzR2VuZXJpY0ZvY3VzYWJsZUVsZW1l
bnQoKSBjb25zdAogCiBIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
bGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFpczxI
VE1MRWxlbWVudD4oZWxlbWVudCkgfHwgIWRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVtZW50KS0+
aXNMYWJlbGFibGUoKSkKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PigqZWxlbWVudCkgfHwgIWRv
d25jYXN0PEhUTUxFbGVtZW50PigqZWxlbWVudCkuaXNMYWJlbGFibGUoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gZWxlbWVudC0+Z2V0
SWRBdHRyaWJ1dGUoKTsKQEAgLTEyNTIsNyArMTI0Niw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OnRpdGxlRWxlbWVudFRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4
dE9yCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYm9vbCBpc0lu
cHV0VGFnID0gaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSk7CisgICAgYm9vbCBpc0lucHV0VGFn
ID0gaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgIGlmIChpc0lucHV0VGFnIHx8IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUlucHV0KGFyaWFSb2xlQXR0cmlidXRlKCkpIHx8IGlz
Q29udHJvbCgpKSB7CiAgICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVs
Rm9yRWxlbWVudChkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpIHsKICAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGxhYmVsT2JqZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0
ZShsYWJlbCk7CkBAIC0xMzA2LDcgKzEzMDAsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjphbHRlcm5hdGl2ZVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZAog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gVGhlIGZpZWxkc2V0IGVsZW1lbnQgZGVyaXZl
cyBpdHMgYWx0ZXJuYXRpdmUgdGV4dCBmcm9tIHRoZSBmaXJzdCBhc3NvY2lhdGVkIGxlZ2VuZCBl
bGVtZW50IGlmIG9uZSBpcyBhdmFpbGFibGUuCi0gICAgaWYgKGlzPEhUTUxGaWVsZFNldEVsZW1l
bnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxGaWVsZFNldEVsZW1lbnQ+KCpub2RlKSkgewog
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBheE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKGRvd25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KCpub2RlKS5sZWdlbmQoKSk7
CiAgICAgICAgIGlmIChvYmplY3QgJiYgIW9iamVjdC0+aXNIaWRkZW4oKSkKICAgICAgICAgICAg
IHRleHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQoYWNjZXNzaWJsZU5hbWVGb3JOb2Rl
KG9iamVjdC0+bm9kZSgpKSwgQWx0ZXJuYXRpdmVUZXh0KSk7CkBAIC0xMzI4LDcgKzEzMjIsNyBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2aXNpYmxlVGV4dChWZWN0b3I8QWNjZXNz
aWJpbGl0eVRleHQ+JiB0ZXh0T3JkZXIpCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgYm9vbCBpc0lucHV0VGFnID0gaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSk7
CisgICAgYm9vbCBpc0lucHV0VGFnID0gaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAg
IGlmIChpc0lucHV0VGFnKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgICAgICBpZiAoaW5wdXQuaXNUZXh0
QnV0dG9uKCkpIHsKQEAgLTE1MDMsNyArMTQ5Nyw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QKICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PFNWR0VsZW1lbnQ+KCptX25vZGUpLnRpdGxlKCk7CiAgICAgCiAjaWYgRU5BQkxF
KE1BVEhNTCkKLSAgICBpZiAobV9ub2RlICYmIGlzPE1hdGhNTEVsZW1lbnQ+KCptX25vZGUpKQor
ICAgIGlmIChpczxNYXRoTUxFbGVtZW50PihtX25vZGUpKQogICAgICAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKE1hdGhNTE5hbWVzOjphbHR0ZXh0QXR0cik7CiAjZW5kaWYKIApAQCAtMTUzMyw3ICsx
NTI3LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0
CiAgICAgCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
KCk7CiAgICAgZm9yIChOb2RlKiBhbmNlc3RvciA9IG5vZGU7IGFuY2VzdG9yOyBhbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50Pihh
bmNlc3RvcikpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PigqYW5jZXN0b3IpKSB7CiAg
ICAgICAgICAgICBIVE1MRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pigq
YW5jZXN0b3IpOwogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdW1tYXJ5ID0gZWxl
bWVudC5nZXRBdHRyaWJ1dGUoc3VtbWFyeUF0dHIpOwogICAgICAgICAgICAgaWYgKCFzdW1tYXJ5
LmlzRW1wdHkoKSkKQEAgLTE1NjEsNyArMTU1NSw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aGVscFRleHQoKSBjb25zdAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmhpZXJhcmNoaWNhbExldmVsKCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+
bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFp
czxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgRWxlbWVudCYgZWxlbWVu
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFy
aWFMZXZlbCA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xldmVsQXR0cik7CkBAIC0x
NjU0LDcgKzE2NDgsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmROYW1lVG9TdHJpbmdCdWlsZGVyKFN0
cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgdGV4dAogU3RyaW5nIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJF
bGVtZW50TW9kZSBtb2RlKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7
Ci0gICAgaWYgKG5vZGUgJiYgaXM8VGV4dD4obm9kZSkpCisgICAgaWYgKGlzPFRleHQ+KG5vZGUp
KQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8VGV4dD4oKm5vZGUpLndob2xlVGV4dCgpOwogCiAg
ICAgLy8gVGhlIHJlbmRlciB0cmVlIHNob3VsZCBiZSBzdGFibGUgYmVmb3JlIGdvaW5nIGFoZWFk
LiBPdGhlcndpc2UsIGZ1cnRoZXIgdXNlcyBvZiB0aGUKQEAgLTE2OTgsNyArMTY5Miw3IEBAIFN0
cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGUoKSBjb25zdAogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgYm9vbCBpc0lucHV0VGFnID0gaXM8
SFRNTElucHV0RWxlbWVudD4obm9kZSk7CisgICAgYm9vbCBpc0lucHV0VGFnID0gaXM8SFRNTElu
cHV0RWxlbWVudD4oKm5vZGUpOwogICAgIGlmIChpc0lucHV0VGFnKSB7CiAgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwog
ICAgICAgICBpZiAoaW5wdXQuaXNUZXh0QnV0dG9uKCkpCkBAIC0xODI0LDcgKzE4MTgsNyBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xvclZhbHVlKGludCYgciwgaW50JiBnLCBp
bnQmIGIpIGNvbnN0CiAgICAgaWYgKCFpc0NvbG9yV2VsbCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIW5vZGUoKSB8fCAhaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSgpKSkKKyAgICBp
ZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5v
ZGUoKSk7CkBAIC0xODQ0LDcgKzE4MzgsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Ojpjb2xvclZhbHVlKGludCYgciwgaW50JiBnLCBpbnQmIGIpIGNvbnN0CiBzdGF0aWMgU3RyaW5n
IGFjY2Vzc2libGVOYW1lRm9yTm9kZShOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsK
LSAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVu
dD4obm9kZSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICBFbGVtZW50JiBl
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwpAQCAtMTg2NSw3ICsxODU5LDcgQEAg
c3RhdGljIFN0cmluZyBhY2Nlc3NpYmxlTmFtZUZvck5vZGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZURlc2NyaXB0aW9uOwogICAgIH0KICAgICAKLSAgICBpZiAoaXM8SFRN
TElucHV0RWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKS52YWx1
ZSgpOwogICAgIAogICAgIFN0cmluZyB0ZXh0OwpAQCAtMTk0MSw5ICsxOTM1LDYgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdAogICAg
IC8vIE5PVEU6IEl0IHdvdWxkIGJlIG1vcmUgYWNjdXJhdGUgdG8gYXNrIHRoZSBkb2N1bWVudCB3
aGV0aGVyIHNldEZvY3VzZWRFbGVtZW50KCkgd291bGQKICAgICAvLyBkbyBhbnl0aGluZy4gRm9y
IGV4YW1wbGUsIHNldEZvY3VzZWRFbGVtZW50KCkgd2lsbCBkbyBub3RoaW5nIGlmIHRoZSBjdXJy
ZW50IGZvY3VzZWQKICAgICAvLyBub2RlIHdpbGwgbm90IHJlbGlucXVpc2ggdGhlIGZvY3VzLgot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA5MTRkYmRk
YTcyOTlhNjU3OTYwYjM2MTVkMGUwYjZmZWIyOWViY2ZlLi5mNmU5ODI3N2FmODI3ZTZlM2I3NmMw
YzkyNjMxNmMwZTRjYzlhNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTg1MSw3ICs4NTEsNyBAQCBib29sIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnByZXNzKCkKICAgICAgICAgZG9jdW1lbnQtPnJlbmRlclZpZXco
KS0+aGl0VGVzdChyZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKICAgICAgICAgaWYgKGhpdFRlc3RS
ZXN1bHQuaW5uZXJOb2RlKCkpIHsKICAgICAgICAgICAgIE5vZGUqIGlubmVyTm9kZSA9IGhpdFRl
c3RSZXN1bHQuaW5uZXJOb2RlKCktPmRlcHJlY2F0ZWRTaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAg
ICAgICAgICAgIGlmIChpczxFbGVtZW50Pihpbm5lck5vZGUpKQorICAgICAgICAgICAgaWYgKGlz
PEVsZW1lbnQ+KCppbm5lck5vZGUpKQogICAgICAgICAgICAgICAgIGhpdFRlc3RFbGVtZW50ID0g
ZG93bmNhc3Q8RWxlbWVudD4oaW5uZXJOb2RlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE3NTks
MTUgKzE3NTksMTIgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmludmFsaWRTdGF0dXMo
KSBjb25zdAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNUYWdOYW1lKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUo
KTsKLSAgICByZXR1cm4gbm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSkuaGFzVGFnTmFtZSh0YWdOYW1lKTsKKyAgICByZXR1cm4gaXM8RWxlbWVudD4o
bm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmhhc1RhZ05hbWUodGFnTmFtZSk7CiB9
CiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc0F0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGUpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKICAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0x
OTY2LDcgKzE5NjMsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc0hpZ2hsaWdodGlu
ZygpIGNvbnN0CiBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVtZW50KCkgY29uc3QK
IHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmIChub2RlICYmIGlzPEVs
ZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMjEx
NCw3ICsyMTExLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlkZW50aWZpZXJBdHRy
aWJ1dGUoKSBjb25zdAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGFzc0xpc3QoVmVjdG9y
PFN0cmluZz4mIGNsYXNzTGlzdCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9k
ZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDk3
MGViMmUwZmRkZjM2YmIwYjdjNmExOGZjMmYwNTQ4MWMwMjBlMTMuLjU5ODEwZjUwYjY1N2YxZmNh
OWJmODJlNzkxMDhjNDRmM2JkZDY1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtNTIzLDcg
KzUyMyw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNBdHRhY2htZW50KCkg
Y29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0
b24oKSBjb25zdAogewotICAgIGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPm5vZGUoKSAm
JiBpczxIVE1MSW5wdXRFbGVtZW50PihtX3JlbmRlcmVyLT5ub2RlKCkpKSB7CisgICAgaWYgKG1f
cmVuZGVyZXIgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obV9yZW5kZXJlci0+bm9kZSgpKSkgewog
ICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkpOwogICAgICAgICByZXR1cm4gaW5wdXQuaXNGaWxlVXBs
b2FkKCk7CiAgICAgfQpAQCAtNTg1LDcgKzU4NSw3IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAogICAgIC8vIE5PVEU6IHRoaXMgYXNz
dW1lcyB0aGF0IGFueSBub24taW1hZ2Ugd2l0aCBhbiBhbmNob3IgaXMgYW4gSFRNTEFuY2hvckVs
ZW1lbnQKICAgICBOb2RlKiBub2RlID0gY3VyclJlbmRlcmVyLT5ub2RlKCk7CiAgICAgZm9yICgg
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1M
QW5jaG9yRWxlbWVudD4obm9kZSkgfHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYgY2FjaGUtPmdldE9y
Q3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpLT5pc0FuY2hvcigpKSkKKyAgICAgICAgaWYgKGlzPEhU
TUxBbmNob3JFbGVtZW50Pigqbm9kZSkgfHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYgY2FjaGUtPmdl
dE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpLT5pc0FuY2hvcigpKSkKICAgICAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICB9CiAgICAgCkBAIC02MDcsNyArNjA3
LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmhlbHBUZXh0KCkgY29uc3QK
ICAgICAKICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24o
KTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogYW5jZXN0b3IgPSBtX3JlbmRlcmVyOyBhbmNlc3Rv
cjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9y
LT5ub2RlKCkgJiYgaXM8SFRNTEVsZW1lbnQ+KGFuY2VzdG9yLT5ub2RlKCkpKSB7CisgICAgICAg
IGlmIChpczxIVE1MRWxlbWVudD4oYW5jZXN0b3ItPm5vZGUoKSkpIHsKICAgICAgICAgICAgIEhU
TUxFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCphbmNlc3Rvci0+bm9k
ZSgpKTsKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3VtbWFyeSA9IGVsZW1lbnQu
Z2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKICAgICAgICAgICAgIGlmICghc3VtbWFyeS5pc0Vt
cHR5KCkpCkBAIC03ODMsNyArNzgzLDcgQEAgSFRNTExhYmVsRWxlbWVudCogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6bGFiZWxFbGVtZW50Q29udGFpbmVyKCkgY29uc3QKICAgICAKICAgICAv
LyBmaW5kIGlmIHRoaXMgaGFzIGEgcGFyZW50IHRoYXQgaXMgYSBsYWJlbAogICAgIGZvciAoTm9k
ZSogcGFyZW50Tm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsgcGFyZW50Tm9kZTsgcGFyZW50Tm9k
ZSA9IHBhcmVudE5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8SFRNTExhYmVs
RWxlbWVudD4ocGFyZW50Tm9kZSkpCisgICAgICAgIGlmIChpczxIVE1MTGFiZWxFbGVtZW50Pigq
cGFyZW50Tm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVu
dD4ocGFyZW50Tm9kZSk7CiAgICAgfQogICAgIApAQCAtOTExLDkgKzkxMSw2IEBAIEludFBvaW50
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNsaWNrUG9pbnQoKQogQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW50ZXJuYWxMaW5rRWxlbWVudCgpIGNv
bnN0CiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFuY2hvckVsZW1lbnQoKTsKLSAgICBpZiAo
IWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAogICAgIC8vIFJpZ2h0IG5v
dywgd2UgZG8gbm90IHN1cHBvcnQgQVJJQSBsaW5rcyBhcyBpbnRlcm5hbCBsaW5rIGVsZW1lbnRz
CiAgICAgaWYgKCFpczxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtOTUxLDcgKzk0OCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWRkUmFkaW9CdXR0b25Hcm91cE1lbWJlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgp
OwotICAgIGlmICghbm9kZSB8fCAhaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkpCisgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5v
ZGUpOwpAQCAtOTY5LDcgKzk2Niw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
YWRkUmFkaW9CdXR0b25Hcm91cE1lbWJlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuCiAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIGl0ZW0gPSBsaXN0
LT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGl0ZW0pKSB7
CisgICAgICAgICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKml0ZW0pKSB7CiAgICAgICAg
ICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgYXNzb2NpYXRlRWxlbWVudCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCppdGVtKTsKICAgICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRlRWxl
bWVudC5pc1JhZGlvQnV0dG9uKCkgJiYgYXNzb2NpYXRlRWxlbWVudC5uYW1lKCkgPT0gaW5wdXQu
bmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCZhc3NvY2lhdGVFbGVtZW50KSkK
QEAgLTExMDYsNyArMTEwMyw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnRpdGxlVUlFbGVtZW50KCkgY29uc3QKICAgICAgICAgcmV0dXJuIGF4T2Jq
ZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUodG9SZW5kZXJGaWVsZHNldChtX3JlbmRlcmVyKS0+Zmlu
ZExlZ2VuZChSZW5kZXJGaWVsZHNldDo6SW5jbHVkZUZsb2F0aW5nT3JPdXRPZkZsb3cpKTsKICAg
ICAKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8
fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJlbEZv
ckVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOwogICAgIGlmIChsYWJlbCAmJiBsYWJl
bC0+cmVuZGVyZXIoKSkKQEAgLTEyNzYsNyArMTI3Myw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIAog
ICAgIC8vIGRvbid0IGlnbm9yZSBsYWJlbHMsIGJlY2F1c2UgdGhleSBzZXJ2ZSBhcyBUaXRsZVVJ
RWxlbWVudHMKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmIChu
b2RlICYmIGlzPEhUTUxMYWJlbEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1MTGFiZWxF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIEFueXRo
aW5nIHRoYXQgaXMgY29udGVudCBlZGl0YWJsZSBzaG91bGQgbm90IGJlIGlnbm9yZWQuCkBAIC0x
NDY1LDggKzE0NjIsNiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2VsZWN0
ZWRUZXh0KCkgY29uc3QKIGNvbnN0IEF0b21pY1N0cmluZyYgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWNjZXNzS2V5KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+
bm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxBdG9tOwogICAgIGlm
ICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBudWxsQXRvbTsKICAgICByZXR1
cm4gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsK
QEAgLTE1MDgsNyArMTUwMyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0
U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlCiAKIFVSTCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cmwoKSBjb25zdAogewotICAgIGlmIChpc0FuY2hvcigp
ICYmIGlzPEhUTUxBbmNob3JFbGVtZW50PihtX3JlbmRlcmVyLT5ub2RlKCkpKSB7CisgICAgaWYg
KGlzQW5jaG9yKCkgJiYgaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkp
KSB7CiAgICAgICAgIGlmIChIVE1MQW5jaG9yRWxlbWVudCogYW5jaG9yID0gZG93bmNhc3Q8SFRN
TEFuY2hvckVsZW1lbnQ+KGFuY2hvckVsZW1lbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gYW5j
aG9yLT5ocmVmKCk7CiAgICAgfQpAQCAtMTUxNiw3ICsxNTExLDcgQEAgVVJMIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnVybCgpIGNvbnN0CiAgICAgaWYgKGlzV2ViQXJlYSgpKQogICAgICAg
ICByZXR1cm4gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS51cmwoKTsKICAgICAKLSAgICBpZiAoaXNJ
bWFnZSgpICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBpczxIVE1MSW1hZ2VFbGVtZW50PihtX3Jl
bmRlcmVyLT5ub2RlKCkpKQorICAgIGlmIChpc0ltYWdlKCkgJiYgaXM8SFRNTEltYWdlRWxlbWVu
dD4obV9yZW5kZXJlci0+bm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFn
ZUVsZW1lbnQ+KCptX3JlbmRlcmVyLT5ub2RlKCkpLnNyYygpOwogICAgIAogICAgIGlmIChpc0lu
cHV0SW1hZ2UoKSkKQEAgLTE1NDMsNyArMTUzOCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6c2V0RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9k
ZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGRvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgKHZhbHVlKSA/ICJ0cnVlIiA6
ICJmYWxzZSIpOwpAQCAtMTY0Niw3ICsxNjQxLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpzZXRGb2N1c2VkKGJvb2wgb24pCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhp
cy0+ZG9jdW1lbnQoKTsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwogCi0gICAgaWYg
KCFvbiB8fCAhbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoIW9uIHx8ICFp
czxFbGVtZW50Pihub2RlKSkgewogICAgICAgICBkb2N1bWVudC0+c2V0Rm9jdXNlZEVsZW1lbnQo
bnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjc4LDcgKzE2NzMsNyBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkUm93cyhBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImIHNlbAogICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBpZiAoIW1fcmVuZGVy
ZXIgfHwgIW1fcmVuZGVyZXItPm5vZGUoKSB8fCAhaXM8RWxlbWVudD4obV9yZW5kZXJlci0+bm9k
ZSgpKSkKKyAgICBpZiAoIW1fcmVuZGVyZXIgfHwgIWlzPEVsZW1lbnQ+KG1fcmVuZGVyZXItPm5v
ZGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm1fcmVuZGVyZXItPm5vZGUoKSk7CiAKQEAgLTE3NTksNyArMTc1NCw3IEBAIHZv
aWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0RG9jdW1lbnRMaW5rcyhBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImIHJlCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChheG9i
aik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBOb2RlKiBwYXJlbnQgPSBjdXJyLT5w
YXJlbnROb2RlKCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50ICYmIGlzPEhUTUxBcmVhRWxlbWVu
dD4oY3VycikgJiYgaXM8SFRNTE1hcEVsZW1lbnQ+KHBhcmVudCkpIHsKKyAgICAgICAgICAgIGlm
IChpczxIVE1MQXJlYUVsZW1lbnQ+KCpjdXJyKSAmJiBpczxIVE1MTWFwRWxlbWVudD4ocGFyZW50
KSkgewogICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsqIGFyZWFPYmpl
Y3QgPSB0b0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNy
ZWF0ZShJbWFnZU1hcExpbmtSb2xlKSk7CiAgICAgICAgICAgICAgICAgSFRNTE1hcEVsZW1lbnQm
IG1hcCA9IGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PigqcGFyZW50KTsKICAgICAgICAgICAgICAg
ICBhcmVhT2JqZWN0LT5zZXRIVE1MQXJlYUVsZW1lbnQoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50
PihjdXJyKSk7CkBAIC0yMTU4LDcgKzIxNTMsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SW1hZ2VNYXBIaXRUZXN0KEhUTQog
CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbnVsbHB0cjsKICAgICBmb3IgKEVs
ZW1lbnQqIG1hcFBhcmVudCA9IGFyZWEtPnBhcmVudEVsZW1lbnQoKTsgbWFwUGFyZW50OyBtYXBQ
YXJlbnQgPSBtYXBQYXJlbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICBpZiAoaXM8SFRN
TE1hcEVsZW1lbnQ+KG1hcFBhcmVudCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxNYXBFbGVtZW50
PigqbWFwUGFyZW50KSkgewogICAgICAgICAgICAgcGFyZW50ID0gYWNjZXNzaWJpbGl0eVBhcmVu
dEZvckltYWdlTWFwKGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PihtYXBQYXJlbnQpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMjA3LDExICsyMjAyLDEyIEBAIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRU
ZXN0KGNvbnN0IEludFBvCiAgICAgaWYgKCFoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5l
ck5vZGUoKS0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIEFTU0VSVChub2Rl
KTsKIAotICAgIGlmIChpczxIVE1MQXJlYUVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1M
QXJlYUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlJbWFnZU1h
cEhpdFRlc3QoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pihub2RlKSwgcG9pbnQpOwogICAgIAot
ICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxPcHRp
b25FbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKm5vZGUpLm93bmVyU2VsZWN0RWxlbWVudCgpOwogICAgIAogICAgIFJlbmRlck9iamVj
dCogb2JqID0gbm9kZS0+cmVuZGVyZXIoKTsKQEAgLTIzODEsNyArMjM3Nyw3IEBAIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvcnJlc3BvbmRpbmdMYWJl
bEZvckNvbnRyb2xFbGVtCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgTm9kZSogbm9k
ZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAobm9kZSAmJiBpczxIVE1MRWxlbWVudD4o
bm9kZSkpIHsKKyAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgIGlmIChI
VE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChkb3duY2FzdDxIVE1MRWxl
bWVudD4obm9kZSkpKQogICAgICAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUobGFiZWwpOwogICAgIH0KQEAgLTI0MDQsNyArMjQwMCw3IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6cmVuZGVyT2JqZWN0SXNPYnNlcnZhYmxlKFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gVGV4dGJveGVzIHNob3Vs
ZCBzZW5kIG91dCBub3RpZmljYXRpb25zLgotICAgIGlmIChub2RlSGFzUm9sZShub2RlLCAidGV4
dGJveCIpIHx8IChpczxFbGVtZW50Pihub2RlKSAmJiBjb250ZW50RWRpdGFibGVBdHRyaWJ1dGVJ
c0VuYWJsZWQoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpKSkKKyAgICBpZiAobm9kZUhhc1JvbGUo
bm9kZSwgInRleHRib3giKSB8fCAoaXM8RWxlbWVudD4oKm5vZGUpICYmIGNvbnRlbnRFZGl0YWJs
ZUF0dHJpYnV0ZUlzRW5hYmxlZChkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNDgyLDcgKzI0NzgsNyBA
QCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1pbmVB
Y2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgaWYgKG1fcmVuZGVyZXItPmlzVGV4dCgpKQogICAgICAg
ICByZXR1cm4gU3RhdGljVGV4dFJvbGU7CiAgICAgaWYgKGNzc0JveCAmJiBjc3NCb3gtPmlzSW1h
Z2UoKSkgewotICAgICAgICBpZiAobm9kZSAmJiBpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkK
KyAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgcmV0
dXJuIGFyaWFIYXNQb3B1cCgpID8gUG9wVXBCdXR0b25Sb2xlIDogQnV0dG9uUm9sZTsKICAgICAg
ICAgaWYgKGlzU1ZHSW1hZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBTVkdSb290Um9sZTsKQEAg
LTI1MDEsNyArMjQ5Nyw3IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkKICAgICBpZiAoY3NzQm94ICYmIGNz
c0JveC0+aXNUZXh0QXJlYSgpKQogICAgICAgICByZXR1cm4gVGV4dEFyZWFSb2xlOwogCi0gICAg
aWYgKG5vZGUgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoaXM8SFRN
TElucHV0RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQg
PSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIGlmIChpbnB1dC5p
c0NoZWNrYm94KCkpCiAgICAgICAgICAgICByZXR1cm4gQ2hlY2tCb3hSb2xlOwpAQCAtMjU3MSw3
ICsyNTY3LDcgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1Rh
Z05hbWUodHJUYWcpKQogICAgICAgICByZXR1cm4gUm93Um9sZTsKIAotICAgIGlmIChub2RlICYm
IGlzPEhUTUxUYWJsZUVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50
Pihub2RlKSkKICAgICAgICAgcmV0dXJuIFRhYmxlUm9sZTsKICNlbmRpZgogCkBAIC0yNTg1LDcg
KzI1ODEsNyBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpk
ZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFn
TmFtZShwVGFnKSkKICAgICAgICAgcmV0dXJuIFBhcmFncmFwaFJvbGU7CiAKLSAgICBpZiAobm9k
ZSAmJiBpczxIVE1MTGFiZWxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoaXM8SFRNTExhYmVsRWxl
bWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBMYWJlbFJvbGU7CiAKICAgICBpZiAobm9kZSAm
JiBub2RlLT5oYXNUYWdOYW1lKGRmblRhZykpCkBAIC0yNTk0LDcgKzI1OTAsNyBAQCBBY2Nlc3Np
YmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmls
aXR5Um9sZSgpCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShkaXZUYWcpKQogICAg
ICAgICByZXR1cm4gRGl2Um9sZTsKIAotICAgIGlmIChub2RlICYmIGlzPEhUTUxGb3JtRWxlbWVu
dD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxGb3JtRWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJl
dHVybiBGb3JtUm9sZTsKIAogICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoYXJ0aWNs
ZVRhZykpCkBAIC0yNjE2LDkgKzI2MTIsOSBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgICAgIHJl
dHVybiBMYW5kbWFya0NvbnRlbnRJbmZvUm9sZTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICBp
ZiAobm9kZSAmJiBpczxIVE1MVmlkZW9FbGVtZW50Pihub2RlKSkKKyAgICBpZiAoaXM8SFRNTFZp
ZGVvRWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBWaWRlb1JvbGU7Ci0gICAgaWYgKG5v
ZGUgJiYgaXM8SFRNTEF1ZGlvRWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxBdWRpb0Vs
ZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gQXVkaW9Sb2xlOwogI2VuZGlmCiAgICAgCkBA
IC0yNjk1LDcgKzI2OTEsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmluaGVy
aXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IHRvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChw
YXJlbnQpLT5ub2RlKCk7Ci0gICAgICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkp
CisgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgCiAgICAgICAgIC8vIElmIG5hdGl2ZSB0YWcgb2YgdGhlIHBhcmVudCBlbGVtZW50
IG1hdGNoZXMgYW4gYWNjZXB0YWJsZSBuYW1lLCB0aGVuIHJldHVybgpAQCAtMjgzNSw3ICsyODMx
LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp1cGRhdGVDaGlsZHJlbklmTmVj
ZXNzYXJ5KCkKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEZpZWxkQ2hp
bGRyZW4oKQogewogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgaWYgKCFub2Rl
IHx8ICFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgSFRNTElucHV0RWxlbWVu
dCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CkBAIC0yODgwLDcg
KzI4NzYsNyBAQCBBY2Nlc3NpYmlsaXR5U1ZHUm9vdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6cmVtb3RlU1ZHUm9vdEVsZW1lbnQoKSBjb25zdAogICAgIEZyYW1lJiBmcmFtZSA9IGZyYW1l
Vmlldy0+ZnJhbWUoKTsKICAgICAKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS5kb2N1
bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQgfHwgIWlzPFNWR0RvY3VtZW50Pihkb2N1bWVudCkp
CisgICAgaWYgKCFpczxTVkdEb2N1bWVudD4oZG9jdW1lbnQpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAKICAgICBTVkdTVkdFbGVtZW50KiByb290RWxlbWVudCA9IGRvd25jYXN0PFNW
R0RvY3VtZW50PigqZG9jdW1lbnQpLnJvb3RFbGVtZW50KCk7CkBAIC0zMjUwLDcgKzMyNDYsNyBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEFjY2Vzc2libGVOYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkKICAgICBlbHNlCiAgICAgICAgIG5vZGUgPSBtX3JlbmRlcmVy
LT5ub2RlKCk7CiAKLSAgICBpZiAobm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAo
aXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5zZXRB
dHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIsIG5hbWUpOwogfQogICAgIApAQCAtMzI2OCw3ICszMjY0
LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1ZhbHVlRm9yTVNB
QSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTGlua2FibGUoKnRoaXMpKSB7CiAgICAgICAgIEVsZW1l
bnQqIGFuY2hvciA9IGFuY2hvckVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGFuY2hvciAmJiBpczxI
VE1MQW5jaG9yRWxlbWVudD4oYW5jaG9yKSkKKyAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVt
ZW50PihhbmNob3IpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxBbmNob3JFbGVt
ZW50PigqYW5jaG9yKS5ocmVmKCk7CiAgICAgfQogCkBAIC0zMjgxLDcgKzMyNzcsNyBAQCBib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTGlua2VkKCkgY29uc3QKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogYW5jaG9yID0gYW5jaG9yRWxlbWVudCgpOwotICAg
IGlmICghYW5jaG9yIHx8ICFpczxIVE1MQW5jaG9yRWxlbWVudD4oYW5jaG9yKSkKKyAgICBpZiAo
IWlzPEhUTUxBbmNob3JFbGVtZW50PihhbmNob3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICByZXR1cm4gIWRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PigqYW5jaG9yKS5ocmVmKCku
aXNFbXB0eSgpOwpAQCAtMzM3MSw3ICszMzY3LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnN0cmluZ1JvbGVGb3JNU0FBKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5v
ZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSk7CkBAIC0zNDg2LDExICszNDgyLDEwIEBAIHZvaWQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAog
I2lmIEVOQUJMRShNQVRITUwpCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0
aEVsZW1lbnQoKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAg
aWYgKCFtX3JlbmRlcmVyIHx8ICFub2RlKQorICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiBpczxNYXRoTUxFbGVtZW50Pihub2RlKTsK
KyAgICByZXR1cm4gaXM8TWF0aE1MRWxlbWVudD4obm9kZSgpKTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhGcmFjdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTZWFyY2hGaWVsZEJ1dHRv
bnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNo
RmllbGRCdXR0b25zLmNwcAppbmRleCAyYzVjMjQ2NWFkZWU1MTYxODE0NjU3MTUzMmFhY2I0MjEw
ZmM5ZmFjLi4zZDRlNzBjODc2MjJmNTI2OWUxYmM3YjFkYWE3MGYwZTYyOWNjNzg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTZWFyY2hGaWVs
ZEJ1dHRvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNlYXJjaEZpZWxkQnV0dG9ucy5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5U2VhcmNoRmllbGRDYW5jZWxCdXR0b246OmFjY2Vzc2liaWxpdHlUZXh0KFZlY3RvcjxB
Y2Nlc3NpYmlsaXQKIGJvb2wgQWNjZXNzaWJpbGl0eVNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uOjpw
cmVzcygpCiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUg
fHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4IDgyODg3NGYzOTA4OTUzZWE1ZjE0ODJhNTc2MTE3
NWY1ZjM3ZTBlZDQuLmQ1YjEzZTVmODNjNTVjMDIwNzhkY2E5MzRlNTc1NjdiOGQ3M2Q0ZWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgSFRNTFRhYmxlRWxlbWVudCogQWNjZXNzaWJpbGl0eVRh
YmxlOjp0YWJsZUVsZW1lbnQoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
ICAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0b1JlbmRlclRhYmxlKG1fcmVuZGVyZXIpOwotICAg
IGlmICh0YWJsZS0+ZWxlbWVudCgpICYmIGlzPEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlLT5lbGVt
ZW50KCkpKQorICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50Pih0YWJsZS0+ZWxlbWVudCgpKSkK
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlLT5lbGVtZW50
KCkpOwogICAgIAogICAgIC8vIElmIHRoZSB0YWJsZSBoYXMgYSBkaXNwbGF5OnRhYmxlLXJvdy1n
cm91cCwgdGhlbiB0aGUgUmVuZGVyVGFibGUgZG9lcyBub3QgaGF2ZSBhIHBvaW50ZXIgdG8gaXQn
cyBIVE1MVGFibGVFbGVtZW50LgpAQCAtMTA2LDcgKzEwNiw3IEBAIEhUTUxUYWJsZUVsZW1lbnQq
IEFjY2Vzc2liaWxpdHlUYWJsZTo6dGFibGVFbGVtZW50KCkgY29uc3QKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgCiAgICAgRWxlbWVudCogYWN0dWFsVGFibGUgPSBmaXJzdEJvZHktPmVs
ZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpOwotICAgIGlmICghYWN0dWFsVGFibGUgfHwgIWlzPEhU
TUxUYWJsZUVsZW1lbnQ+KGFjdHVhbFRhYmxlKSkKKyAgICBpZiAoIWlzPEhUTUxUYWJsZUVsZW1l
bnQ+KGFjdHVhbFRhYmxlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgcmV0
dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KGFjdHVhbFRhYmxlKTsKQEAgLTIxOCw3ICsy
MTgsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUoKSBjb25zdAogICAg
ICAgICAgICAgICAgIGhlYWRlcnNJbkZpcnN0Q29sdW1uQ291bnQrKzsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgZGV2ZWxvcGVyIGV4cGxpY2l0bHkgYXNz
aWduZWQgYSAiZGF0YSIgdGFibGUgYXR0cmlidXRlLgotICAgICAgICAgICAgaWYgKGlzPEhUTUxU
YWJsZUNlbGxFbGVtZW50PihjZWxsRWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChpczxIVE1M
VGFibGVDZWxsRWxlbWVudD4oKmNlbGxFbGVtZW50KSkgewogICAgICAgICAgICAgICAgIEhUTUxU
YWJsZUNlbGxFbGVtZW50JiB0YWJsZUNlbGxFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ+KCpjZWxsRWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZUNlbGxF
bGVtZW50LmhlYWRlcnMoKS5pc0VtcHR5KCkgfHwgIXRhYmxlQ2VsbEVsZW1lbnQuYWJicigpLmlz
RW1wdHkoKQogICAgICAgICAgICAgICAgICAgICB8fCAhdGFibGVDZWxsRWxlbWVudC5heGlzKCku
aXNFbXB0eSgpIHx8ICF0YWJsZUNlbGxFbGVtZW50LnNjb3BlKCkuaXNFbXB0eSgpKQpAQCAtMzI4
LDcgKzMyOCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmxlVGhy
b3VnaEFjY2Vzc2liaWxpdHkoKSBjb25zdAogICAgIC8vIEd0aysgQVRzIGV4cGVjdCBhbGwgdGFi
bGVzIHRvIGJlIGV4cG9zZWQgYXMgdGFibGVzLgogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oRUZMKQogICAgIEVsZW1lbnQqIHRhYmxlTm9kZSA9IHRvUmVuZGVyVGFibGUobV9yZW5kZXJl
ciktPmVsZW1lbnQoKTsKLSAgICByZXR1cm4gdGFibGVOb2RlICYmIGlzPEhUTUxUYWJsZUVsZW1l
bnQ+KHRhYmxlTm9kZSk7CisgICAgcmV0dXJuIGlzPEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlTm9k
ZSk7CiAjZW5kaWYKIAogICAgIHJldHVybiBpc0RhdGFUYWJsZSgpOwpAQCAtNjA3LDcgKzYwNyw3
IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5VGFibGU6OnRpdGxlKCkgY29uc3QKICAgICAKICAgICAv
LyBzZWUgaWYgdGhlcmUgaXMgYSBjYXB0aW9uCiAgICAgTm9kZSogdGFibGVFbGVtZW50ID0gbV9y
ZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICh0YWJsZUVsZW1lbnQgJiYgaXM8SFRNTFRhYmxlRWxl
bWVudD4odGFibGVFbGVtZW50KSkgeworICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50Pih0YWJs
ZUVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogY2FwdGlv
biA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJsZUVsZW1lbnQpLmNhcHRpb24oKSkK
ICAgICAgICAgICAgIHRpdGxlID0gY2FwdGlvbi0+aW5uZXJUZXh0KCk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNw
cAppbmRleCAyMGIxNDU4OTU1MWI5ODBmYTkyOGQyYWQxNmEyZDMzODI2ZTM1ZTAyLi4yZDIyMTAw
MDRmZGY4ZTIwMDYxNDY3NzIzMzU1N2NjNTFhZjZmNjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcApAQCAtMTMzLDcg
KzEzMyw3IEBAIHN0YXRpYyB2b2lkIG5vdGlmeUNoaWxkcmVuU2VsZWN0aW9uQ2hhbmdlKEFjY2Vz
c2liaWxpdHlPYmplY3QqIG9iamVjdCkKIAogICAgIC8vIE9ubHkgc3VwcG9ydCBIVE1MIHNlbGVj
dCBlbGVtZW50cyBzbyBmYXIgKEFSSUEgc2VsZWN0b3JzIG5vdCBzdXBwb3J0ZWQpLgogICAgIE5v
ZGUqIG5vZGUgPSBvYmplY3QtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIWlzPEhUTUxTZWxl
Y3RFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEhUTUxTZWxlY3RFbGVtZW50Pihub2RlKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRW1pdCBzaWduYWwgZnJvbSB0aGUgbGlzdGJveCdz
IHBvaW50IG9mIHZpZXcgZmlyc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNw
cAppbmRleCAzNDkyYjdlMGVmMmM3N2Y5ZDQzZTljNzZiZmE2ZTg2ZWNlZmM2MGM4Li4wMjVlZjA4
MTdlZTU5Yzk2MDM1YzY1ZTg1MGIxYjM1NWIwNDgzYTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUYWJsZS5jcHAKQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgQXRrT2JqZWN0KiB3
ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKEF0a1RhYmxlKiB0YWJsZSkKICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwogICAgIGlmIChhY2NUYWJs
ZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9
IGFjY1RhYmxlLT5ub2RlKCk7Ci0gICAgICAgIGlmIChub2RlICYmIGlzPEhUTUxUYWJsZUVsZW1l
bnQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50Pihub2RlKSkgewog
ICAgICAgICAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24gPSBkb3duY2FzdDxI
VE1MVGFibGVFbGVtZW50Pigqbm9kZSkuY2FwdGlvbigpOwogICAgICAgICAgICAgaWYgKGNhcHRp
b24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpcnN0QWNj
ZXNzaWJsZU9iamVjdEZyb21Ob2RlKGNhcHRpb24tPnJlbmRlcmVyKCktPmVsZW1lbnQoKSktPndy
YXBwZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAppbmRleCBlMWQyYTgyMzE2MTZj
ZDhkNWQ1ZmUwZDRkOWEwNDZiZTZjZDUzOWM3Li5jZmM1MDI1MDk1OTEzM2FhMGY3ZjFkZjQ1NGM1
NWE4MmRlMzMwYjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCkBAIC0xMzcsNyAr
MTM3LDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlR2V0TmFtZShBdGtP
YmplY3QqIG9iamVjdCkKIAogICAgIGlmIChjb3JlT2JqZWN0LT5pc0ltYWdlKCkgfHwgY29yZU9i
amVjdC0+aXNJbnB1dEltYWdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3Qt
Pm5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUgJiYgaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7Cisg
ICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgIC8vIEdldCB0
aGUgYXR0cmlidXRlIHJhdGhlciB0aGFuIGFsdFRleHQgU3RyaW5nIHNvIGFzIG5vdCB0byBmYWxs
IGJhY2sgb24gdGl0bGUuCiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFsdCA9IGRv
d25jYXN0PEhUTUxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0QXR0
cik7CiAgICAgICAgICAgICBpZiAoIWFsdC5pc0VtcHR5KCkpCkBAIC0xNzAsNyArMTcwLDcgQEAg
c3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlR2V0RGVzY3JpcHRpb24oQXRrT2Jq
ZWN0KiBvYmplY3QpCiAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAgaWYgKGNvcmVPYmpl
Y3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQogICAgICAgICBub2RlID0gY29yZU9i
amVjdC0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8SFRNTEVsZW1lbnQ+KG5vZGUpIHx8
IGNvcmVPYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkgIT0gVW5rbm93blJvbGUgfHwgY29yZU9i
amVjdC0+aXNJbWFnZSgpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpIHx8IGNvcmVP
YmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkgIT0gVW5rbm93blJvbGUgfHwgY29yZU9iamVjdC0+
aXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gY2FjaGVBbmRSZXR1cm5BdGtQcm9wZXJ0eShvYmpl
Y3QsIEF0a0NhY2hlZEFjY2Vzc2libGVEZXNjcmlwdGlvbiwgYWNjZXNzaWJpbGl0eURlc2NyaXB0
aW9uKGNvcmVPYmplY3QpKTsKIAogICAgIC8vIGF0a190YWJsZV9nZXRfc3VtbWFyeSByZXR1cm5z
IGFuIEF0a09iamVjdC4gV2UgaGF2ZSBubyBzdW1tYXJ5IG9iamVjdCwgc28gZXhwb3NlIHN1bW1h
cnkgaGVyZS4KQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJr
aXRBY2Nlc3NpYmxlR2V0QXR0cmlidXRlcyhBdGtPYmplY3QqIG9iamVjdCkKICAgICAvLyBjYW5u
b3QgYmUgZG9uZSBmcm9tIHRoZSBVSVByb2Nlc3MuIEFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMgaGF2
ZSBubyBuZWVkCiAgICAgLy8gZm9yIHRoaXMgaW5mb3JtYXRpb24uCiAgICAgTm9kZSogbm9kZSA9
IGNvcmVPYmplY3QtPm5vZGUoKTsKLSAgICBpZiAobm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSkg
eworICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICBTdHJpbmcgaWQgPSBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0SWRBdHRyaWJ1dGUoKS5zdHJpbmcoKTsKICAgICAgICAg
aWYgKCFpZC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0
dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJodG1sLWlkIiwgaWQudXRmOCgpLmRhdGEoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZh
dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Qcml2YXRl
LmNwcAppbmRleCAwOGM1ZjAyNzY0NjYyNWFlNTNmNWJmODVmYWI5YjdiZTRhNTRmOGNiLi44MGNj
NmQ2MjkzNTg0YTk4OTRhY2YxMmFmYzljMWYxMDUwYmU3Nzg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NUHJpdmF0ZS5jcHAKQEAgLTg0LDcg
Kzg0LDcgQEAgV2ViS2l0RE9NTm9kZSogd3JhcChOb2RlKiBub2RlKQogCiAgICAgc3dpdGNoIChu
b2RlLT5ub2RlVHlwZSgpKSB7CiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6Ci0gICAgICAg
IGlmIChpczxIVE1MRWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4o
Km5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTk9ERSh3cmFwKGRvd25jYXN0
PEhUTUxFbGVtZW50Pihub2RlKSkpOwogICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9OT0RFKHdy
YXBFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSk7CiAgICAgY2FzZSBOb2RlOjpBVFRS
SUJVVEVfTk9ERToKQEAgLTEwMCw3ICsxMDAsNyBAQCBXZWJLaXRET01Ob2RlKiB3cmFwKE5vZGUq
IG5vZGUpCiAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6CiAgICAgICAgIHJldHVybiBXRUJL
SVRfRE9NX05PREUod3JhcENvbW1lbnQoc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUpKSk7CiAg
ICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgotICAgICAgICBpZiAoaXM8SFRNTERvY3VtZW50
Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4oKm5vZGUpKQogICAgICAgICAg
ICAgcmV0dXJuIFdFQktJVF9ET01fTk9ERSh3cmFwSFRNTERvY3VtZW50KGRvd25jYXN0PEhUTUxE
b2N1bWVudD4obm9kZSkpKTsKICAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTk9ERSh3cmFwRG9j
dW1lbnQoZG93bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpKSk7CiAgICAgY2FzZSBOb2RlOjpET0NVTUVO
VF9UWVBFX05PREU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
Q29udGV4dEN1c3RvbS5jcHAKaW5kZXggNWM4NDEyYWYwMGQ0N2RjMTQ5ZjVkNWVlODRkZWQ3NDU3
MWQwYTYxMS4uMWE3NWQ5MzViYzczMjIwNWFiNDdhNWQxOTYwNGQwODI5ZDFkNGVjNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNw
cApAQCAtNTMsNyArNTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTQXVkaW9Db250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJl
bmNlRXJyb3IoZXhlYywgIkF1ZGlvQ29udGV4dCBjb25zdHJ1Y3RvciBzY3JpcHQgZXhlY3V0aW9u
IGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSk7CiAgICAgICAgIAotICAgIGlmICghaXM8RG9jdW1l
bnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQorICAgIGlmICghaXM8RG9jdW1lbnQ+KCpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiQXVkaW9Db250ZXh0IGNvbnN0cnVjdG9yIGNhbGxl
ZCBpbiBhIHNjcmlwdCBleGVjdXRpb24gY29udGV4dCB3aGljaCBpcyBub3QgYSBkb2N1bWVudCIp
KTsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAKaW5kZXggZDRlZGQ2OTFmOTFjYjAzOTkzYWY5M2QwNDMyNjdjYmJl
NGE1MmNiYy4uZDJiMzBlNGY0YTQ3MTdlMDhkMjJkNWQ0MzFiZjI0OTYwYWFkNmFlYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAt
MTA1LDEwICsxMDUsMTAgQEAgSlNET01HbG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3Qo
RG9jdW1lbnQqIGRvY3VtZW50LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIAogSlNET01HbG9iYWxP
YmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGlzPERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KCpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KSkKICAgICAgICAgcmV0dXJuIHRvSlNET01HbG9iYWxPYmpl
Y3QoZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLCBleGVjKTsKIAot
ICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCisg
ICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCiAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpLnNjcmlwdCgpLT53b3JrZXJHbG9iYWxTY29wZVdyYXBwZXIoKTsKIAogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTIyLDEwICsxMjIsMTAgQEAgSlNET01HbG9iYWxPYmpl
Y3QqIHRvSlNET01HbG9iYWxPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBET01XcmFwcGVyV29y
bGQmIHdvcmwKIAogSlNET01HbG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCkKIHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
KQorICAgIGlmIChpczxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQogICAgICAg
ICByZXR1cm4gdG9KU0RPTUdsb2JhbE9iamVjdChkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCksIHdvcmxkKTsKIAotICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4o
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCisgICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigq
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxXb3JrZXJH
bG9iYWxTY29wZT4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLnNjcmlwdCgpLT53b3JrZXJHbG9i
YWxTY29wZVdyYXBwZXIoKTsKIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDYzOTU4
Y2M1ZjM4YzYwNjViNjA1YjJjOWZiMDI5ZjYwNDI0M2EyMmMuLmNhODkxMDFkYWFmNWQxYjVkMzk1
NDY2MzdjMjk5MWQwNTkyNjgwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTc5LDcgKzc5LDYgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIG5hbWVkSXRlbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2QKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzT2JqLT5pbXBsKCkuZnJhbWUo
KS0+ZG9jdW1lbnQoKTsKIAogICAgIEFTU0VSVChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iai0+aW1wbCgpKSk7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50KTsKICAgICBBU1NFUlQoaXM8SFRNTERvY3VtZW50Pihkb2N1bWVudCkpOwogCiAgICAg
QXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKTsKQEAgLTI0NCw3ICsyNDMsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eQogCiAg
ICAgLy8gQWxsb3cgc2hvcnRjdXRzIGxpa2UgJ0ltYWdlMScgaW5zdGVhZCBvZiBkb2N1bWVudC5p
bWFnZXMuSW1hZ2UxCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpc09iamVjdC0+aW1wbCgp
LmZyYW1lKCktPmRvY3VtZW50KCk7Ci0gICAgaWYgKGlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQp
KSB7CisgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KSkgewogICAgICAgICBBdG9t
aWNTdHJpbmdJbXBsKiBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpOwogICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIGRvd25jYXN0PEhUTUxEb2N1
bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkp
IHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIFJlYWRPbmx5IHwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0ZW1HZXR0ZXIpOwpAQCAtMzIxLDcgKzMyMCw3IEBA
IGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCB1CiAKICAgICAvLyBBbGxvdyBzaG9ydGN1dHMgbGlrZSAn
SW1hZ2UxJyBpbnN0ZWFkIG9mIGRvY3VtZW50LmltYWdlcy5JbWFnZTEKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICBp
ZiAoaXM8SFRNTERvY3VtZW50Pihkb2N1bWVudCkpIHsKKyAgICBpZiAoaXM8SFRNTERvY3VtZW50
PigqZG9jdW1lbnQpKSB7CiAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5
TmFtZSA9IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7CiAgICAgICAgIGlmIChhdG9taWNQcm9w
ZXJ0eU5hbWUgJiYgZG93bmNhc3Q8SFRNTERvY3VtZW50PigqZG9jdW1lbnQpLmhhc1dpbmRvd05h
bWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSkgewogICAgICAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0sIG5hbWVkSXRl
bUdldHRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1l
bnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9t
LmNwcAppbmRleCBlZDg1NzE5MDAwMjQ5YTE4MmY1MDc3OTZhNzVkN2E4ZGY0YzUxMTI5Li5iNGU1
YWI2OTQ3MGZjNTkyMzNmMmUwMzRhZTEwYjcxODg4N2NmOGJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKQEAgLTU2LDkgKzU2LDkgQEAgSlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVsZW1lbnQqIGUKICAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFs
T2JqZWN0LT53b3JsZCgpLCBlbGVtZW50KSk7CiAKICAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXI7
ICAgICAgICAKLSAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmIChpczxI
VE1MRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICB3cmFwcGVyID0gY3JlYXRlSlNIVE1MV3Jh
cHBlcihnbG9iYWxPYmplY3QsIGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVtZW50KSk7Ci0gICAg
ZWxzZSBpZiAoaXM8U1ZHRWxlbWVudD4oZWxlbWVudCkpCisgICAgZWxzZSBpZiAoaXM8U1ZHRWxl
bWVudD4oKmVsZW1lbnQpKQogICAgICAgICB3cmFwcGVyID0gY3JlYXRlSlNTVkdXcmFwcGVyKGds
b2JhbE9iamVjdCwgZG93bmNhc3Q8U1ZHRWxlbWVudD4oZWxlbWVudCkpOwogICAgIGVsc2UKICAg
ICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fV1JBUFBFUihnbG9iYWxPYmplY3QsIEVsZW1lbnQs
IGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJv
ckhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIu
Y3BwCmluZGV4IDU0YmUyNGJlN2NjNTUzOTkxNzZiMTZjZjQwOWEzM2YzNjVjZWZiNjUuLmMyZWM1
Nzg0NGEyZWY1ZWVhMWY0NTdjM2VjYmRiNjlhMDc3ODA3ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgSlNFcnJv
ckhhbmRsZXI6On5KU0Vycm9ySGFuZGxlcigpCiB2b2lkIEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVF
dmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBFdmVu
dCogZXZlbnQpCiB7CiAKLSAgICBpZiAoIWlzPEVycm9yRXZlbnQ+KGV2ZW50KSkKKyAgICBpZiAo
IWlzPEVycm9yRXZlbnQ+KCpldmVudCkpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6
OmhhbmRsZUV2ZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VS
VChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDRhYzVlMTllNWE3MmNkNjc2ODM3OTRlYmRjZGZj
ZmYxYWI2MjBlYWEuLmU5YzljNmViMTkwZTNkOThhMmY4YzNhZjJiNDY4YzJkNTA0OGZiYjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcApAQCAt
MTMxLDcgKzEzMSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0CiAKICAgICAgICAgZ2xvYmFs
T2JqZWN0LT5zZXRDdXJyZW50RXZlbnQoc2F2ZWRFdmVudCk7CiAKLSAgICAgICAgaWYgKGlzPFdv
cmtlckdsb2JhbFNjb3BlPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkgeworICAgICAgICBpZiAo
aXM8V29ya2VyR2xvYmFsU2NvcGU+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkgewogICAgICAg
ICAgICAgYm9vbCB0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uID0gKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpICYmIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGVjLT5leGNlcHRpb24oKSkp
OwogICAgICAgICAgICAgaWYgKHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gfHwgKHZtLndhdGNo
ZG9nICYmIHZtLndhdGNoZG9nLT5kaWRGaXJlKCkpKQogICAgICAgICAgICAgICAgIGRvd25jYXN0
PFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkuc2NyaXB0KCktPmZv
cmJpZEV4ZWN1dGlvbigpOwpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0CiAgICAgICAgICAgICBldmVudC0+dGFyZ2V0KCktPnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVu
dEhhbmRsZXIoKTsKICAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24p
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRP
ck51bGwoKSAmJiBpczxCZWZvcmVVbmxvYWRFdmVudD4oZXZlbnQpKQorICAgICAgICAgICAgaWYg
KCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAmJiBpczxCZWZvcmVVbmxvYWRFdmVudD4oKmV2
ZW50KSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxCZWZvcmVVbmxvYWRFdmVudD4oKmV2ZW50
KS5zZXRSZXR1cm5WYWx1ZShyZXR2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICAgICAgICAgIGlmIChtX2lzQXR0cmlidXRlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJldHZh
bC5pc0ZhbHNlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxE
b2N1bWVudEN1c3RvbS5jcHAKaW5kZXggNTIyMWUxZGVkNTRiYWI5ZjFmOGE4M2FkNTYwMTFkNmM4
ZGVmNDk5ZC4uOWIxYjU3NmQ4MWQ1YzQ2MTk4Y2MxMDE1OWQ1ZmIyMmI0ZWZmODRiOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNw
cApAQCAtNzMsNyArNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6bmFtZUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRQogICAgIH0KIAogICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudE5hbWVkSXRlbSgqYXRvbWljUHJv
cGVydHlOYW1lKTsKLSAgICBpZiAoVU5MSUtFTFkoaXM8SFRNTElGcmFtZUVsZW1lbnQ+KGVsZW1l
bnQpKSkgeworICAgIGlmIChVTkxJS0VMWShpczxIVE1MSUZyYW1lRWxlbWVudD4oKmVsZW1lbnQp
KSkgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG93bmNhc3Q8SFRNTElGcmFtZUVsZW1l
bnQ+KCplbGVtZW50KS5jb250ZW50RnJhbWUoKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUyhleGVjLCBmcmFtZSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggYjJjYzI3NmM0MThl
NjBjZTE2MDQ5MjYzM2I2OTM3ZWYxMDQyZTYwNi4uNmRkZTUxMGM0MzI1NTI2Y2QyNzk3OWI4MjJi
NzEyNDYxMjc1M2JkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNM
YXp5RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNM
YXp5RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTcyLDcgKzcyLDYgQEAgSlNMYXp5RXZlbnRMaXN0ZW5l
cjo6fkpTTGF6eUV2ZW50TGlzdGVuZXIoKQogCiBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5l
cjo6aW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogZXhlY3V0aW9u
Q29udGV4dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZXhlY3V0aW9uQ29udGV4dCk7CiAgICAgQVNT
RVJUKGlzPERvY3VtZW50PihleGVjdXRpb25Db250ZXh0KSk7CiAgICAgaWYgKCFleGVjdXRpb25D
b250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVDdXN0b20uY3BwCmluZGV4IGQ2YzNjOWRlNmFmNzgzZDhkZGRiOTdlZjdmNDkw
OTdlNGVlMWMwMTcuLmQ0NzkzYWJkZWI5ZTRhMjFlY2M5ZjlhZGJkZmVhZTQ4YjY1MjM0MmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcApAQCAtOTcsNyAr
OTcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxlKEpTTm9kZSoganNOb2RlLCBO
b2RlKiBub2RlKQogc3RhdGljIGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShKU05vZGUq
IGpzTm9kZSwgTm9kZSogbm9kZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFu
b2RlLT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7Cisg
ICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8mIGVsZW1l
bnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CiAKICAgICAgICAgICAgIC8vIElmIGEgd3Jh
cHBlciBpcyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gYW4gaW1hZ2UgZWxlbWVudApAQCAtMTkyLDkg
KzE5Miw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHBlcklubGlu
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqCiAgICAgSlNET01XcmFwcGVyKiB3cmFw
cGVyOyAgICAKICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBO
b2RlOjpFTEVNRU5UX05PREU6Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG5vZGUp
KQorICAgICAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICAg
ICAgd3JhcHBlciA9IGNyZWF0ZUpTSFRNTFdyYXBwZXIoZ2xvYmFsT2JqZWN0LCBkb3duY2FzdDxI
VE1MRWxlbWVudD4obm9kZSkpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXM8U1ZHRWxlbWVudD4o
bm9kZSkpCisgICAgICAgICAgICBlbHNlIGlmIChpczxTVkdFbGVtZW50Pigqbm9kZSkpCiAgICAg
ICAgICAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTU1ZHV3JhcHBlcihnbG9iYWxPYmplY3QsIGRv
d25jYXN0PFNWR0VsZW1lbnQ+KG5vZGUpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9XUkFQUEVSKGdsb2JhbE9iamVjdCwgRWxlbWVudCwg
bm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRB
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNw
cAppbmRleCBhMWI1MWFhMzVmMjczNTkzMjI5MTAyOTJmYTdjNjFiYzg2Zjc2NTIzLi5hYmEyY2Qz
YmJmOTg4NjI3MmI1YzFiNDNhZmU1MmU5MmNjYjI3ZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgU2NoZWR1
bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0
aW9uLCBET01XcmFwcGVyV28KIAogdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRl
eHQpKQorICAgIGlmIChpczxEb2N1bWVudD4oKmNvbnRleHQpKQogICAgICAgICBleGVjdXRlKGRv
d25jYXN0PERvY3VtZW50Pihjb250ZXh0KSk7CiAgICAgZWxzZQogICAgICAgICBleGVjdXRlKGRv
d25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAKaW5kZXggMzc2Y2QyNTRmODdkMzQxNmZhNzM5ZjJhMTE3
Y2MzZmQ2MGRjZTRlMi4uNzMyYzdjYzY5ZTRjMmY1NTA5ZmQ2MDBjYmY5ZGFjNDIyNDJiYmY0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcApAQCAtNTgsNyAr
NTgsNyBAQCBET01XaW5kb3cqIGRvbVdpbmRvd0Zyb21FeGVjU3RhdGUoSlNDOjpFeGVjU3RhdGUq
IHNjcmlwdFN0YXRlKQogRnJhbWUqIGZyYW1lRnJvbUV4ZWNTdGF0ZShKU0M6OkV4ZWNTdGF0ZSog
c2NyaXB0U3RhdGUpCiB7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKHNjcmlwdFN0YXRlKTsKLSAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb250ZXh0ICYmIGlzPERvY3VtZW50Pihjb250ZXh0KSA/IGRvd25j
YXN0PERvY3VtZW50Pihjb250ZXh0KSA6IG51bGxwdHI7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gaXM8RG9jdW1lbnQ+KGNvbnRleHQpID8gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpIDog
bnVsbHB0cjsKICAgICByZXR1cm4gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxw
dHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1t
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KaW5kZXggZDUwNGE3NDUwZWVm
ZGU1OWI5ODM4ODJlOTQ1MGU4MDkyOTNkMjIwMi4uMzM3MjU5NDE5YjU5ZmU4ZGU1OGM4MDRkZDRl
NTVjYzVmYjNiMDdlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9E
T00ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KQEAgLTMwMSw3
ICszMDEsNyBAQCBDbGFzcyBraXRDbGFzcyhXZWJDb3JlOjpOb2RlKiBpbXBsKQogewogICAgIHN3
aXRjaCAoaW1wbC0+bm9kZVR5cGUoKSkgewogICAgICAgICBjYXNlIFdlYkNvcmU6Ok5vZGU6OkVM
RU1FTlRfTk9ERToKLSAgICAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oaW1wbCkpCisgICAg
ICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCppbXBsKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gV2ViQ29yZTo6ZWxlbWVudENsYXNzKGRvd25jYXN0PEhUTUxFbGVtZW50PigqaW1wbCkudGFn
UU5hbWUoKSwgW0RPTUhUTUxFbGVtZW50IGNsYXNzXSk7CiAgICAgICAgICAgICByZXR1cm4gW0RP
TUVsZW1lbnQgY2xhc3NdOwogICAgICAgICBjYXNlIFdlYkNvcmU6Ok5vZGU6OkFUVFJJQlVURV9O
T0RFOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCmluZGV4IDU4
NmI4ZmRhZjc3MTY5YTIyODNkYTA1YmQwZTc4NTc5YzU0MjhhMTMuLmY1OGM5MjA1YWRmYjQxYzI4
NzY0ZWZiOGE0M2M2ZDJmM2E0ZDhkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDdXJzb3JJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3Rh
dGljIGlubGluZSBTVkdDdXJzb3JFbGVtZW50KiByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVs
ZW1lbnQoY29uc3QgU3RyaW5nJiB1cmwsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmlu
Zyh1cmwsIGRvY3VtZW50KTsKLSAgICBpZiAoZWxlbWVudCAmJiBpczxTVkdDdXJzb3JFbGVtZW50
PihlbGVtZW50KSkKKyAgICBpZiAoaXM8U1ZHQ3Vyc29yRWxlbWVudD4oZWxlbWVudCkpCiAgICAg
ICAgIHJldHVybiBkb3duY2FzdDxTVkdDdXJzb3JFbGVtZW50PihlbGVtZW50KTsKIAogICAgIHJl
dHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCmluZGV4IGFhZDZl
NTg5ZmYxNTFjYjYyNjY2ZDY5ZTRiZWYzN2M0ZDY0MzRjNWUuLmJkNGEzZmY4ZDk2YTZjODc2OTY1
MDYxMjgzOTBhNGQ0OGNkNjdmMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAK
QEAgLTY4LDkgKzY4LDkgQEAgc3RhdGljIGJvb2wgaXNBY2NlcHRhYmxlQ1NTU3R5bGVTaGVldFBh
cmVudChOb2RlKiBwYXJlbnROb2RlKQogICAgIC8vIE9ubHkgdGhlc2Ugbm9kZXMgY2FuIGJlIHBh
cmVudHMgb2YgU3R5bGVTaGVldHMsIGFuZCB0aGV5IG5lZWQgdG8gY2FsbCBjbGVhck93bmVyTm9k
ZSgpIHdoZW4gbW92ZWQgb3V0IG9mIGRvY3VtZW50LgogICAgIHJldHVybiAhcGFyZW50Tm9kZQog
ICAgICAgICB8fCBwYXJlbnROb2RlLT5pc0RvY3VtZW50Tm9kZSgpCi0gICAgICAgIHx8IGlzPEhU
TUxMaW5rRWxlbWVudD4ocGFyZW50Tm9kZSkKLSAgICAgICAgfHwgaXM8SFRNTFN0eWxlRWxlbWVu
dD4ocGFyZW50Tm9kZSkKLSAgICAgICAgfHwgaXM8U1ZHU3R5bGVFbGVtZW50PihwYXJlbnROb2Rl
KQorICAgICAgICB8fCBpczxIVE1MTGlua0VsZW1lbnQ+KCpwYXJlbnROb2RlKQorICAgICAgICB8
fCBpczxIVE1MU3R5bGVFbGVtZW50PigqcGFyZW50Tm9kZSkKKyAgICAgICAgfHwgaXM8U1ZHU3R5
bGVFbGVtZW50PigqcGFyZW50Tm9kZSkKICAgICAgICAgfHwgcGFyZW50Tm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU7CiB9CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNTM4N2Q0ZjU5YjNkYmE4MjNiMjBm
ZGY3OGNlOWU2MjM1NjNiMWUxYy4uZGU3YWM4MDQ3YTRmOWI4ZmQ3ZGRmZjM2MTIzZmNjMDUxZjNm
NGU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTU1NiwxMSAr
NTU2LDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBlbGVtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoaXM8
VGV4dD4obm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCpub2RlKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0
Pigqbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHROb2RlLmRhdGEoKS5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rp
b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5o
CmluZGV4IDZmNDE4YzNiNDQ1MDhmZWU3MTU4ZjgxNTJkZGQ5YTFiMTdmY2RjZjcuLmFmZGFkOTlj
ZjU3ZGU4MDAwMjA0MzU5Y2QxNmY4MjlmYjRhYTk3NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaApAQCAtNDIsNyArNDIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBpc0F1dG9maWxsZWQoY29u
c3QgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4oZWxlbWVudCkpIHsKKyAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1l
bnQpKSB7CiAgICAgICAgIGlmIChjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGlucHV0RWxl
bWVudC0+aXNBdXRvZmlsbGVkKCk7CiAgICAgfQpAQCAtNTYsMTMgKzU2LDEzIEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0RlZmF1bHRCdXR0b25Gb3JGb3JtKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Rpc2FibGVkKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CiB7Ci0gICAgcmV0dXJuIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSB8fCBp
czxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4o
ZWxlbWVudCkpCisgICAgcmV0dXJuIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVu
dCkgfHwgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSB8fCBpczxIVE1MT3B0R3JvdXBF
bGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgICYmIGVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFbmFibGVkKGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVt
ZW50KSB8fCBpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTE9wdEdyb3Vw
RWxlbWVudD4oZWxlbWVudCkpCisgICAgcmV0dXJuIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
PigqZWxlbWVudCkgfHwgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSB8fCBpczxIVE1M
T3B0R3JvdXBFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgICYmICFlbGVtZW50LT5pc0Rpc2Fi
bGVkRm9ybUNvbnRyb2woKTsKIH0KIApAQCAtNzksNyArNzksNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNDaGVja2VkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgY29uc3QgSFRNTElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoaW5w
dXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpICYmICFpbnB1
dEVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpCisgICAgaWYgKGlzPEhUTUxP
cHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KS5zZWxlY3RlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CkBAIC0xMjcsNyArMTI3LDcgQEAgaW5saW5lIGJvb2wgbWF0Y2hlc0xhbmdQc2V1ZG9D
bGFzcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBBdG9taWNTdHJpbmdJbXBsKiBmaWwKIHsKICAg
ICBBdG9taWNTdHJpbmcgdmFsdWU7CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGlmIChp
czxXZWJWVFRFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoaXM8V2ViVlRURWxlbWVudD4oKmVs
ZW1lbnQpKQogICAgICAgICB2YWx1ZSA9IGRvd25jYXN0PFdlYlZUVEVsZW1lbnQ+KCplbGVtZW50
KS5sYW5ndWFnZSgpOwogICAgIGVsc2UKICNlbmRpZgpAQCAtMzA0LDEyICszMDQsMTIgQEAgQUxX
QVlTX0lOTElORSBib29sIG1hdGNoZXNGdWxsU2NyZWVuRG9jdW1lbnRQc2V1ZG9DbGFzcyhjb25z
dCBFbGVtZW50KiBlbGVtZW50KQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIEFMV0FZU19JTkxJ
TkUgYm9vbCBtYXRjaGVzRnV0dXJlQ3VlUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCogZWxlbWVu
dCkKIHsKLSAgICByZXR1cm4gaXM8V2ViVlRURWxlbWVudD4oZWxlbWVudCkgJiYgIWRvd25jYXN0
PFdlYlZUVEVsZW1lbnQ+KCplbGVtZW50KS5pc1Bhc3ROb2RlKCk7CisgICAgcmV0dXJuIGlzPFdl
YlZUVEVsZW1lbnQ+KCplbGVtZW50KSAmJiAhZG93bmNhc3Q8V2ViVlRURWxlbWVudD4oKmVsZW1l
bnQpLmlzUGFzdE5vZGUoKTsKIH0KIAogQUxXQVlTX0lOTElORSBib29sIG1hdGNoZXNQYXN0Q3Vl
UHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXM8V2Vi
VlRURWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNhc3Q8V2ViVlRURWxlbWVudD4oKmVsZW1lbnQp
LmlzUGFzdE5vZGUoKTsKKyAgICByZXR1cm4gaXM8V2ViVlRURWxlbWVudD4oKmVsZW1lbnQpICYm
IGRvd25jYXN0PFdlYlZUVEVsZW1lbnQ+KCplbGVtZW50KS5pc1Bhc3ROb2RlKCk7CiB9CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDA3OGE1Y2EyZTJjNGNl
ZDU5YTZkMzJkYTgwYjMyMDRkMzZkM2E4OGQuLjJmMmRmYzYxN2JkMWM0MTVkMWY0MDcxYTRkZjE0
OTcxN2M5OGEwMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTM4OCw3
ICszODgsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6dXBkYXRlQ29udmVy
c2lvbkRhdGEoKQogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRFbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgbV9lbGVtZW50ID0gZWxlbWVudDsKLSAgICBtX3N0
eWxlZEVsZW1lbnQgPSBlbGVtZW50ICYmIGlzPFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpID8gZG93
bmNhc3Q8U3R5bGVkRWxlbWVudD4oZWxlbWVudCkgOiBudWxscHRyOworICAgIG1fc3R5bGVkRWxl
bWVudCA9IGVsZW1lbnQgJiYgaXM8U3R5bGVkRWxlbWVudD4oKmVsZW1lbnQpID8gZG93bmNhc3Q8
U3R5bGVkRWxlbWVudD4oZWxlbWVudCkgOiBudWxscHRyOwogICAgIG1fZWxlbWVudExpbmtTdGF0
ZSA9IGVsZW1lbnQgPyBlbGVtZW50LT5kb2N1bWVudCgpLnZpc2l0ZWRMaW5rU3RhdGUoKS5kZXRl
cm1pbmVMaW5rU3RhdGUoKmVsZW1lbnQpIDogTm90SW5zaWRlTGluazsKICAgICB1cGRhdGVDb252
ZXJzaW9uRGF0YSgpOwogfQpAQCAtNDQ1LDEyICs0NDUsMTIgQEAgTm9kZSogU3R5bGVSZXNvbHZl
cjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9k
ZUNvdW4KIHsKICAgICBpZiAodmlzaXRlZE5vZGVDb3VudCA+PSBjU3R5bGVTZWFyY2hUaHJlc2hv
bGQgKiBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgaWYgKCFwYXJlbnQgfHwgIWlzPFN0eWxlZEVsZW1lbnQ+KHBhcmVudCkpCisgICAgaWYg
KCFpczxTdHlsZWRFbGVtZW50PihwYXJlbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBTdHlsZWRFbGVtZW50KiBzdHlsZWRQYXJlbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihw
YXJlbnQpOwogICAgIGlmIChzdHlsZWRQYXJlbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGlmIChpczxTVkdFbGVtZW50PihzdHlsZWRQYXJlbnQpICYmIGRv
d25jYXN0PFNWR0VsZW1lbnQ+KCpzdHlsZWRQYXJlbnQpLmFuaW1hdGVkU01JTFN0eWxlUHJvcGVy
dGllcygpKQorICAgIGlmIChpczxTVkdFbGVtZW50Pigqc3R5bGVkUGFyZW50KSAmJiBkb3duY2Fz
dDxTVkdFbGVtZW50Pigqc3R5bGVkUGFyZW50KS5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKHN0eWxlZFBhcmVudC0+aGFzSUQo
KSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhzdHlsZWRQYXJl
bnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC00NjcsNyArNDY3LDcgQEAgTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2lu
TGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW4KICAgICAgICAg
d2hpbGUgKGN1cnJlbnROb2RlKSB7CiAgICAgICAgICAgICArK3N1YmNvdW50OwogICAgICAgICAg
ICAgaWYgKGN1cnJlbnROb2RlLT5yZW5kZXJTdHlsZSgpID09IHBhcmVudFN0eWxlICYmIGN1cnJl
bnROb2RlLT5sYXN0Q2hpbGQoKQotICAgICAgICAgICAgICAgICYmIGlzPEVsZW1lbnQ+KGN1cnJl
bnROb2RlKSAmJiAhcGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhkb3duY2FzdDxFbGVtZW50
PihjdXJyZW50Tm9kZSkpCisgICAgICAgICAgICAgICAgJiYgaXM8RWxlbWVudD4oKmN1cnJlbnRO
b2RlKSAmJiAhcGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhkb3duY2FzdDxFbGVtZW50Pihj
dXJyZW50Tm9kZSkpCiAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgLy8gQWRq
dXN0IGZvciB1bnVzZWQgcmVzZXJ2ZWQgdHJpZXMuCiAgICAgICAgICAgICAgICAgdmlzaXRlZE5v
ZGVDb3VudCAtPSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgLSBzdWJjb3VudDsKQEAgLTU0Niw3ICs1
NDYsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHls
ZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRIYXNE
aXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbGlu
ZSBpcyBzdXJwcmlzaW5nbHkgaG90LCB3ZSBtYXkgd2lzaCB0byBpbmxpbmUgaGFzRGlyZWN0aW9u
QXV0byBpbnRvIFN0eWxlUmVzb2x2ZXIuCi0gICAgcmV0dXJuIGlzPEhUTUxFbGVtZW50PihlbGVt
ZW50KSAmJiBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnQpLmhhc0RpcmVjdGlvbkF1dG8o
KTsKKyAgICByZXR1cm4gaXM8SFRNTEVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1M
RWxlbWVudD4oKmVsZW1lbnQpLmhhc0RpcmVjdGlvbkF1dG8oKTsKIH0KIAogYm9vbCBTdHlsZVJl
c29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1
dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0CkBAIC02MjYsOSArNjI2
LDkgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVk
RWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX3J1
bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wg
aXNDb250cm9sID0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCk7CisgICAgYm9v
bCBpc0NvbnRyb2wgPSBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCk7CiAKLSAg
ICBpZiAoaXNDb250cm9sICE9IGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KHN0YXRlLmVsZW1l
bnQoKSkpCisgICAgaWYgKGlzQ29udHJvbCAhPSBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pigq
c3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGlzQ29u
dHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1lbnQpKQpAQCAtNjUwLDcgKzY1
MCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAg
Ly8gRGVueSBzaGFyaW5nIHN0eWxlcyBiZXR3ZWVuIFdlYlZUVCBhbmQgbm9uLVdlYlZUVCBub2Rl
cy4KLSAgICBpZiAoaXM8V2ViVlRURWxlbWVudD4oc3RhdGUuZWxlbWVudCgpKSkKKyAgICBpZiAo
aXM8V2ViVlRURWxlbWVudD4oKnN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICNlbmRpZgogCkBAIC02NjQsNyArNjY0LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5T
aGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKIGlubGlu
ZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmlu
ZyhOb2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0CiB7CiAgICAgZm9yICg7IG5vZGU7
IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWlzPFN0eWxl
ZEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVt
ZW50KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KG5vZGUpKSkKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTE2Nyw3ICsxMTY3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHls
ZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXIKICAgICAgICAgICAg
IGlmIChlLT5oYXNUYWdOYW1lKHRkVGFnKSkgewogICAgICAgICAgICAgICAgIHN0eWxlLnNldERp
c3BsYXkoVEFCTEVfQ0VMTCk7CiAgICAgICAgICAgICAgICAgc3R5bGUuc2V0RmxvYXRpbmcoTm9G
bG9hdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KGUpKQor
ICAgICAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MVGFibGVFbGVtZW50PigqZSkpCiAgICAgICAg
ICAgICAgICAgc3R5bGUuc2V0RGlzcGxheShzdHlsZS5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJ
TkxJTkVfVEFCTEUgOiBUQUJMRSk7CiAgICAgICAgIH0KIApAQCAtMTE4NCw3ICsxMTg0LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlJiBwYXIKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRhYmxlcyBu
ZXZlciBzdXBwb3J0IHRoZSAtd2Via2l0LSogdmFsdWVzIGZvciB0ZXh0LWFsaWduIGFuZCB3aWxs
IHJlc2V0IGJhY2sgdG8gdGhlIGRlZmF1bHQuCi0gICAgICAgIGlmIChlICYmIGlzPEhUTUxUYWJs
ZUVsZW1lbnQ+KGUpICYmIChzdHlsZS50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfTEVGVCB8fCBzdHls
ZS50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSIHx8IHN0eWxlLnRleHRBbGlnbigpID09IFdF
QktJVF9SSUdIVCkpCisgICAgICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50PihlKSAmJiAoc3R5
bGUudGV4dEFsaWduKCkgPT0gV0VCS0lUX0xFRlQgfHwgc3R5bGUudGV4dEFsaWduKCkgPT0gV0VC
S0lUX0NFTlRFUiB8fCBzdHlsZS50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQpKQogICAgICAg
ICAgICAgc3R5bGUuc2V0VGV4dEFsaWduKFRBU1RBUlQpOwogCiAgICAgICAgIC8vIEZyYW1lcyBh
bmQgZnJhbWVzZXRzIG5ldmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFi
c29sdXRlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0bwpAQCAtMTI2Nyw3ICsxMjY3LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlJiBwYXIKICAgICAgICAgc3R5bGUuc2V0WkluZGV4KDApOwogCiAgICAgLy8g
VGV4dGFyZWEgY29uc2lkZXJzIG92ZXJmbG93IHZpc2libGUgYXMgYXV0by4KLSAgICBpZiAoZSAm
JiBpczxIVE1MVGV4dEFyZWFFbGVtZW50PihlKSkgeworICAgIGlmIChpczxIVE1MVGV4dEFyZWFF
bGVtZW50PihlKSkgewogICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1goc3R5bGUub3ZlcmZsb3dY
KCkgPT0gT1ZJU0lCTEUgPyBPQVVUTyA6IHN0eWxlLm92ZXJmbG93WCgpKTsKICAgICAgICAgc3R5
bGUuc2V0T3ZlcmZsb3dZKHN0eWxlLm92ZXJmbG93WSgpID09IE9WSVNJQkxFID8gT0FVVE8gOiBz
dHlsZS5vdmVyZmxvd1koKSk7CiAgICAgfQpAQCAtMTMzMiwxMCArMTMzMiwxMCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUmIHBhcgogCiAgICAgLy8gSW1wb3J0YW50OiBJbnRyaW5zaWMgbWFyZ2lucyBn
ZXQgYWRkZWQgdG8gY29udHJvbHMgYmVmb3JlIHRoZSB0aGVtZSBoYXMgYWRqdXN0ZWQgdGhlIHN0
eWxlLCBzaW5jZSB0aGUgdGhlbWUgd2lsbAogICAgIC8vIGFsdGVyIGZvbnRzIGFuZCBoZWlnaHRz
L3dpZHRocy4KLSAgICBpZiAoZSAmJiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlKSAmJiBz
dHlsZS5mb250U2l6ZSgpID49IDExKSB7CisgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KGUpICYmIHN0eWxlLmZvbnRTaXplKCkgPj0gMTEpIHsKICAgICAgICAgLy8gRG9uJ3QgYXBw
bHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gVGhlIGRlc2lnbmVyIGtub3dz
IGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCiAgICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gdHJlYXQg
YWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5IHNpemVkLgot
ICAgICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGUpIHx8ICFkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqZSkuaXNJbWFnZUJ1dHRvbigpKQorICAgICAgICBpZiAoIWlzPEhUTUxJbnB1
dEVsZW1lbnQ+KCplKSB8fCAhZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmUpLmlzSW1hZ2VC
dXR0b24oKSkKICAgICAgICAgICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOwogICAgIH0K
IApAQCAtMTg4MCw3ICsxODgwLDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVs
ZXMoKQogLy8gU2NhbGUgd2l0aC9oZWlnaHQgcHJvcGVydGllcyBvbiBpbmxpbmUgU1ZHIHJvb3Qu
CiBib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpCiB7Ci0gICAg
cmV0dXJuIG1fc3RhdGUuZWxlbWVudCgpICYmIG1fc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1l
bnQoKSAmJiAhKGlzPFNWR1NWR0VsZW1lbnQ+KG1fc3RhdGUuZWxlbWVudCgpKSAmJiBtX3N0YXRl
LmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gaXM8U1ZHRWxlbWVudD4obV9z
dGF0ZS5lbGVtZW50KCkpICYmICEoaXM8U1ZHU1ZHRWxlbWVudD4oKm1fc3RhdGUuZWxlbWVudCgp
KSAmJiBtX3N0YXRlLmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKTsKIH0KIAogI2lmIEVOQUJMRShD
U1NfR1JJRF9MQVlPVVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVl
dExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAppbmRleCBl
OTAxNmQ5NWYwNWJhYzM0ZmQyNDA0NWE1ZDI3YzVkYjUwOTg5YTYzLi5jMmI5ZjQyOTBmN2JjOTMw
Zjk5NDZlNjg3OWFkYjJlMWNjMjYwNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlz
dC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgSFRNTFN0eWxlRWxlbWVudCogU3R5bGVTaGVldExpc3Q6
OmdldE5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgLy8gYW5kIGRvZXNu
J3QgbG9vayBmb3IgbmFtZSBhdHRyaWJ1dGUuCiAgICAgLy8gQnV0IHVuaWNpdHkgb2Ygc3R5bGVz
aGVldCBpZHMgaXMgZ29vZCBwcmFjdGljZSBhbnl3YXkgOykKICAgICBFbGVtZW50KiBlbGVtZW50
ID0gbV9kb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQobmFtZSk7Ci0gICAgaWYgKGVsZW1lbnQgJiYg
aXM8SFRNTFN0eWxlRWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKGlzPEhUTUxTdHlsZUVsZW1l
bnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVudD4o
ZWxlbWVudCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQXR0ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKaW5kZXggMTcy
ZmNjNzZkNGE0YWI4NzhiNjBhYWNhZjYyMDBkYzE5NTJlYmI5MC4uNzFkYTljNmMzZTlkNmU1NThi
ZTMyNmI1ZWY4MDA5ZTA5M2U3ZTkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0F0
dHIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcApAQCAtMTg4LDcgKzE4OCw3
IEBAIGJvb2wgQXR0cjo6aXNJZCgpIGNvbnN0CiBDU1NTdHlsZURlY2xhcmF0aW9uKiBBdHRyOjpz
dHlsZSgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGV4aXN0cyB0byBzdXBwb3J0IHRo
ZSBPYmotQyBiaW5kaW5ncy4KLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhaXM8U3R5bGVkRWxlbWVu
dD4obV9lbGVtZW50KSkKKyAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KG1fZWxlbWVudCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIG1fc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzOjpjcmVhdGUoKTsKICAgICBkb3duY2FzdDxTdHlsZWRFbGVtZW50PigqbV9lbGVtZW50KS5j
b2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSgpLCB2YWx1
ZSgpLCAqbV9zdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVy
RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggMzFh
NTk0MzFiNWM5NGRjMDcyNDc4ZmU4OTk3Njg3NmUxMDdiOTJhMS4uNzE3MDAwODIzYWYzMTU5ODNh
ZGQzMGU3ZjNlZGExMGQ5MzAwMzQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNw
cApAQCAtODcsOCArODcsOCBAQCB1bnNpZ25lZCBDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmRE
YXRhKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsCiAgICAgZWxzZQogICAg
ICAgICBtX2RhdGEuYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSArIG9mZnNldCwgY2hhcmFj
dGVyTGVuZ3RoTGltaXQpOwogCi0gICAgQVNTRVJUKCFyZW5kZXJlcigpIHx8IGlzPFRleHQ+KHRo
aXMpKTsKLSAgICBpZiAoaXM8VGV4dD4odGhpcykpCisgICAgQVNTRVJUKCFyZW5kZXJlcigpIHx8
IGlzPFRleHQ+KCp0aGlzKSk7CisgICAgaWYgKGlzPFRleHQ+KCp0aGlzKSkKICAgICAgICAgU3R5
bGU6OnVwZGF0ZVRleHRSZW5kZXJlckFmdGVyQ29udGVudENoYW5nZShkb3duY2FzdDxUZXh0Pigq
dGhpcyksIG9sZExlbmd0aCwgMCk7CiAKICAgICBkb2N1bWVudCgpLmluY0RPTVRyZWVWZXJzaW9u
KCk7CkBAIC0xOTQsMTEgKzE5NCwxMSBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGFBbmRV
cGRhdGUoY29uc3QgU3RyaW5nJiBuZXdEYXRhLCB1bnNpZ25lZCBvZmZzZXRPZlJlcAogICAgIFN0
cmluZyBvbGREYXRhID0gbV9kYXRhOwogICAgIG1fZGF0YSA9IG5ld0RhdGE7CiAKLSAgICBBU1NF
UlQoIXJlbmRlcmVyKCkgfHwgaXM8VGV4dD4odGhpcykpOwotICAgIGlmIChpczxUZXh0Pih0aGlz
KSkKKyAgICBBU1NFUlQoIXJlbmRlcmVyKCkgfHwgaXM8VGV4dD4oKnRoaXMpKTsKKyAgICBpZiAo
aXM8VGV4dD4oKnRoaXMpKQogICAgICAgICBTdHlsZTo6dXBkYXRlVGV4dFJlbmRlcmVyQWZ0ZXJD
b250ZW50Q2hhbmdlKGRvd25jYXN0PFRleHQ+KCp0aGlzKSwgb2Zmc2V0T2ZSZXBsYWNlZERhdGEs
IG9sZExlbmd0aCk7CiAKLSAgICBpZiAoaXM8UHJvY2Vzc2luZ0luc3RydWN0aW9uPih0aGlzKSkK
KyAgICBpZiAoaXM8UHJvY2Vzc2luZ0luc3RydWN0aW9uPigqdGhpcykpCiAgICAgICAgIGRvd25j
YXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKnRoaXMpLmNoZWNrU3R5bGVTaGVldCgpOwogCiAg
ICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cAppbmRleCAxMGEyM2E1OGMxMjhhMzBjOWU5NTZlN2QxZGNjZmM5ODgxOWZmNjdjLi44YTRmM2Fi
NGUzY2FjNjYyZGZjNTAzMzRiM2IxYjNjM2QwNDQ0YjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIGlubGluZSBFeGNlcHRpb25D
b2RlIGNoZWNrQWNjZXB0Q2hpbGQoQ29udGFpbmVyTm9kZSogbmV3UGFyZW50LCBOb2RlKiBuZXcK
ICAgICBpZiAoY29udGFpbnNDb25zaWRlcmluZ0hvc3RFbGVtZW50cyhuZXdDaGlsZCwgbmV3UGFy
ZW50KSkKICAgICAgICAgcmV0dXJuIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKIAotICAgIGlmIChv
bGRDaGlsZCAmJiBpczxEb2N1bWVudD4obmV3UGFyZW50KSkgeworICAgIGlmIChvbGRDaGlsZCAm
JiBpczxEb2N1bWVudD4oKm5ld1BhcmVudCkpIHsKICAgICAgICAgaWYgKCFkb3duY2FzdDxEb2N1
bWVudD4oKm5ld1BhcmVudCkuY2FuUmVwbGFjZUNoaWxkKG5ld0NoaWxkLCBvbGRDaGlsZCkpCiAg
ICAgICAgICAgICByZXR1cm4gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwogICAgIH0gZWxzZSBpZiAo
IWlzQ2hpbGRUeXBlQWxsb3dlZChuZXdQYXJlbnQsIG5ld0NoaWxkKSkKQEAgLTM0OCw4ICszNDgs
OCBAQCB2b2lkIENvbnRhaW5lck5vZGU6Om5vdGlmeUNoaWxkUmVtb3ZlZChOb2RlJiBjaGlsZCwg
Tm9kZSogcHJldmlvdXNTaWJsaW5nLCBOb2RlKgogewogICAgIENoaWxkQ2hhbmdlIGNoYW5nZTsK
ICAgICBjaGFuZ2UudHlwZSA9IGlzPEVsZW1lbnQ+KGNoaWxkKSA/IEVsZW1lbnRSZW1vdmVkIDog
aXM8VGV4dD4oY2hpbGQpID8gVGV4dFJlbW92ZWQgOiBOb25Db250ZW50c0NoaWxkQ2hhbmdlZDsK
LSAgICBjaGFuZ2UucHJldmlvdXNTaWJsaW5nRWxlbWVudCA9ICghcHJldmlvdXNTaWJsaW5nIHx8
IGlzPEVsZW1lbnQ+KHByZXZpb3VzU2libGluZykpID8gZG93bmNhc3Q8RWxlbWVudD4ocHJldmlv
dXNTaWJsaW5nKSA6IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhwcmV2aW91c1Np
YmxpbmcpOwotICAgIGNoYW5nZS5uZXh0U2libGluZ0VsZW1lbnQgPSAoIW5leHRTaWJsaW5nIHx8
IGlzPEVsZW1lbnQ+KG5leHRTaWJsaW5nKSkgPyBkb3duY2FzdDxFbGVtZW50PihuZXh0U2libGlu
ZykgOiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhuZXh0U2libGluZyk7CisgICAgY2hh
bmdlLnByZXZpb3VzU2libGluZ0VsZW1lbnQgPSAoIXByZXZpb3VzU2libGluZyB8fCBpczxFbGVt
ZW50PigqcHJldmlvdXNTaWJsaW5nKSkgPyBkb3duY2FzdDxFbGVtZW50PihwcmV2aW91c1NpYmxp
bmcpIDogRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKHByZXZpb3VzU2libGluZyk7
CisgICAgY2hhbmdlLm5leHRTaWJsaW5nRWxlbWVudCA9ICghbmV4dFNpYmxpbmcgfHwgaXM8RWxl
bWVudD4oKm5leHRTaWJsaW5nKSkgPyBkb3duY2FzdDxFbGVtZW50PihuZXh0U2libGluZykgOiBF
bGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhuZXh0U2libGluZyk7CiAgICAgY2hhbmdlLnNv
dXJjZSA9IHNvdXJjZTsKIAogICAgIGNoaWxkcmVuQ2hhbmdlZChjaGFuZ2UpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAKaW5kZXggMDMxZDNjZDIx
YjYzZWM4MDgwMzY2OTg3ODYxMjBkMjRlZmEyZTU2My4uMzdjOTQ2Nzg3NTY5YWJiODFlNmVhOWMz
MDVjMWE4NzdhZmUxNjA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZUFsZ29yaXRobXMuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgQ2hpbGROb2RlSW5zZXJ0aW9u
Tm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudChDb250YWluZXJO
CiB2b2lkIENoaWxkTm9kZUluc2VydGlvbk5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50SW5zZXJ0
ZWRJbnRvVHJlZShDb250YWluZXJOb2RlJiBub2RlKQogewogICAgIGZvciAoTm9kZSogY2hpbGQg
PSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKLSAgICAgICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KGNoaWxkKSkKKyAgICAgICAgaWYgKGlz
PENvbnRhaW5lck5vZGU+KCpjaGlsZCkpCiAgICAgICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJ
bnRvVHJlZShkb3duY2FzdDxDb250YWluZXJOb2RlPigqY2hpbGQpKTsKICAgICB9CiAKQEAgLTg2
LDcgKzg2LDcgQEAgdm9pZCBDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRh
bnRSZW1vdmVkRnJvbURvY3VtZW50KENvbnRhaW5lck5vZGUKIHZvaWQgQ2hpbGROb2RlUmVtb3Zh
bE5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50UmVtb3ZlZEZyb21UcmVlKENvbnRhaW5lck5vZGUm
IG5vZGUpCiB7CiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaXM8Q29udGFp
bmVyTm9kZT4oY2hpbGQpKQorICAgICAgICBpZiAoaXM8Q29udGFpbmVyTm9kZT4oKmNoaWxkKSkK
ICAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoZG93bmNhc3Q8Q29udGFpbmVy
Tm9kZT4oKmNoaWxkKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Q3VycmVudFNjcmlwdEluY3JlbWVudGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VycmVudFNj
cmlwdEluY3JlbWVudGVyLmgKaW5kZXggYmQ3ZGUwNzBmNGNhYzc3ZDdiNTFiMjlkMGE2ZmQxMTM3
N2FjYzk5NS4uYTNjZjhmNDcwYzljNDM1OWNiNzNiMzgzMGUxNjVhNWY1Mzk0MmRiNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0N1cnJlbnRTY3JpcHRJbmNyZW1lbnRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIuaApAQCAtMzksNyAr
MzksNyBAQCBjbGFzcyBDdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIgewogcHVibGljOgogICAgIEN1
cnJlbnRTY3JpcHRJbmNyZW1lbnRlcihEb2N1bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGVsZW1l
bnQpCiAgICAgICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAgICAgLCBtX2lzSFRNTFNj
cmlwdEVsZW1lbnQoaXM8SFRNTFNjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAsIG1f
aXNIVE1MU2NyaXB0RWxlbWVudChpczxIVE1MU2NyaXB0RWxlbWVudD4oKmVsZW1lbnQpKQogICAg
IHsKICAgICAgICAgaWYgKG1faXNIVE1MU2NyaXB0RWxlbWVudCkKICAgICAgICAgICAgIG1fZG9j
dW1lbnQtPnB1c2hDdXJyZW50U2NyaXB0KGRvd25jYXN0PEhUTUxTY3JpcHRFbGVtZW50PihlbGVt
ZW50KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCmluZGV4IGM3ODM5NTkzY2QzMmI2
OGEwYWJlNjY4ZjAxODdhMjhmYjNkZDcyMjguLmZlMjFhZmZmZjM1OTkzYTlmZTQ5MTg1YjMyNTgw
MzgyMjc1OTM4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCkBAIC0yNTQsNyAr
MjU0LDcgQEAgdm9pZCBEYXRhVHJhbnNmZXI6OnNldERyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50
LCBpbnQgeCwgaW50IHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENhY2hlZEltYWdlKiBpbWFn
ZSA9IG51bGxwdHI7Ci0gICAgaWYgKGVsZW1lbnQgJiYgaXM8SFRNTEltYWdlRWxlbWVudD4oZWxl
bWVudCkgJiYgIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKKyAgICBpZiAoaXM8SFRNTEltYWdlRWxl
bWVudD4oZWxlbWVudCkgJiYgIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAgaW1hZ2Ug
PSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqZWxlbWVudCkuY2FjaGVkSW1hZ2UoKTsKIAog
ICAgIG1fZHJhZ0xvY2F0aW9uID0gSW50UG9pbnQoeCwgeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAppbmRleCBlYWNiMDdhZTkyYjEzNjkyOTg4M2RkZTE1YjkzYTFlZGY5ODQ2OTdjLi5lMzlmYzNh
NmI1YWJkMGJkNWFmODUzMDk1NDFiMzFjN2ZmOTI3ZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKQEAgLTE0MTUsNyArMTQxNSw3IEBAIEVsZW1lbnQqIERvY3VtZW50OjplbGVtZW50RnJvbVBv
aW50KGNvbnN0IExheW91dFBvaW50JiBjbGllbnRQb2ludCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBOb2RlKiBub2RlID0gbm9kZUZyb21Qb2ludChjbGllbnRQb2ludCk7Ci0gICAg
d2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFp
czxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAK
ICAgICBpZiAobm9kZSkKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFRp
dGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgLy8gVGhlIERPTSBBUEkgaGFzIG5vIG1ldGhv
ZCBvZiBzcGVjaWZ5aW5nIGRpcmVjdGlvbiwgc28gYXNzdW1lIExUUi4KICAgICB1cGRhdGVUaXRs
ZShTdHJpbmdXaXRoRGlyZWN0aW9uKHRpdGxlLCBMVFIpKTsKIAotICAgIGlmIChtX3RpdGxlRWxl
bWVudCAmJiBpczxIVE1MVGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1lbnQpKQorICAgIGlmIChp
czxIVE1MVGl0bGVFbGVtZW50PihtX3RpdGxlRWxlbWVudC5nZXQoKSkpCiAgICAgICAgIGRvd25j
YXN0PEhUTUxUaXRsZUVsZW1lbnQ+KCptX3RpdGxlRWxlbWVudCkuc2V0VGV4dCh0aXRsZSk7CiB9
CiAKQEAgLTQ2NjMsNyArNDY2Myw3IEBAIGNvbnN0IFZlY3RvcjxJY29uVVJMPiYgRG9jdW1lbnQ6
Omljb25VUkxzKGludCBpY29uVHlwZXNNYXNrKQogICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBj
aGlsZHJlbi0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkcmVuLT5pdGVtKGkpOwotICAg
ICAgICBpZiAoIWlzPEhUTUxMaW5rRWxlbWVudD4oY2hpbGQpKQorICAgICAgICBpZiAoIWlzPEhU
TUxMaW5rRWxlbWVudD4oKmNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBI
VE1MTGlua0VsZW1lbnQmIGxpbmtFbGVtZW50ID0gZG93bmNhc3Q8SFRNTExpbmtFbGVtZW50Pigq
Y2hpbGQpOwogICAgICAgICBpZiAoIShsaW5rRWxlbWVudC5pY29uVHlwZSgpICYgaWNvblR5cGVz
TWFzaykpCkBAIC01OTE4LDkgKzU5MTgsOSBAQCBFbGVtZW50KiBldmVudFRhcmdldEVsZW1lbnRG
b3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50LT5mb2N1
c2VkRWxlbWVudCgpOwotICAgIGlmICghZWxlbWVudCAmJiBpczxQbHVnaW5Eb2N1bWVudD4oZG9j
dW1lbnQpKQorICAgIGlmICghZWxlbWVudCAmJiBpczxQbHVnaW5Eb2N1bWVudD4oKmRvY3VtZW50
KSkKICAgICAgICAgZWxlbWVudCA9IGRvd25jYXN0PFBsdWdpbkRvY3VtZW50PigqZG9jdW1lbnQp
LnBsdWdpbkVsZW1lbnQoKTsKLSAgICBpZiAoIWVsZW1lbnQgJiYgaXM8SFRNTERvY3VtZW50Pihk
b2N1bWVudCkpCisgICAgaWYgKCFlbGVtZW50ICYmIGlzPEhUTUxEb2N1bWVudD4oKmRvY3VtZW50
KSkKICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LT5ib2R5KCk7CiAgICAgaWYgKCFlbGVtZW50
KQogICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwpAQCAtNjA4
NCw3ICs2MDg0LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgRWxlbWVudCogaW4KICAgICAgICAgICAgICAgICBl
bGVtZW50c1RvUmVtb3ZlRnJvbUNoYWluLmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgfQogICAg
ICAgICAvLyBVbnNldCBob3ZlcmVkIG5vZGVzIGluIHN1YiBmcmFtZSBkb2N1bWVudHMgaWYgdGhl
IG9sZCBob3ZlcmVkIG5vZGUgd2FzIGEgZnJhbWUgb3duZXIuCi0gICAgICAgIGlmIChvbGRIb3Zl
cmVkRWxlbWVudCAmJiBpczxIVE1MRnJhbWVPd25lckVsZW1lbnQ+KCpvbGRIb3ZlcmVkRWxlbWVu
dCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGcmFtZU93bmVyRWxlbWVudD4ob2xkSG92ZXJlZEVs
ZW1lbnQuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGNvbnRlbnREb2N1bWVu
dCA9IGRvd25jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudD4oKm9sZEhvdmVyZWRFbGVtZW50KS5j
b250ZW50RG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQtPnVwZGF0
ZUhvdmVyQWN0aXZlU3RhdGUocmVxdWVzdCwgbnVsbHB0cik7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAppbmRl
eCBjZGE2YzA3Y2JhNGM0MGUzZGE0NjAxMjQzMDc2YjBmNzY0ZjJlNDViLi43YTZkZmI5NDRmMWYw
NjkyNDM3ZGJmM2FiZTFhYjQ5MDdlMDYwOTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAg
dm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVl
dHMoVmVjdG9yPFJlZlB0cjxTdHlsZVMKIAogICAgIGZvciAoYXV0byYgbm9kZSA6IG1fc3R5bGVT
aGVldENhbmRpZGF0ZU5vZGVzKSB7CiAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gbnVsbHB0
cjsKLSAgICAgICAgaWYgKGlzPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obm9kZSkpIHsKKyAgICAg
ICAgaWYgKGlzPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKm5vZGUpKSB7CiAgICAgICAgICAgICAv
LyBQcm9jZXNzaW5nIGluc3RydWN0aW9uIChYTUwgZG9jdW1lbnRzIG9ubHkpLgogICAgICAgICAg
ICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBsaW5raW5nIHRvIGVtYmVkZGVkIENTUyBzdHlsZXNoZWV0
cywgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkyODE+IGZv
ciBkaXNjdXNzaW9uLgogICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uJiBwaSA9IGRv
d25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CmluZGV4IGU5Y2JlMDc4MjBiMzU0ZmFmOTRmNDI3MDQ3MTFlYTUwZDQ1MDBhZGIuLmM2ZTFmZmZi
MThmMTMzNWI3NWI0MDEzZGYwMzcxOTc3MzBlNDM3MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
QEAgLTIxOTUsMTIgKzIxOTUsMTIgQEAgQXRvbWljU3RyaW5nIEVsZW1lbnQ6OmNvbXB1dGVJbmhl
cml0ZWRMYW5ndWFnZSgpIGNvbnN0CiAgICAgLy8gVGhlIGxhbmd1YWdlIHByb3BlcnR5IGlzIGlu
aGVyaXRlZCwgc28gd2UgaXRlcmF0ZSBvdmVyIHRoZSBwYXJlbnRzIHRvIGZpbmQgdGhlIGZpcnN0
IGxhbmd1YWdlLgogICAgIGNvbnN0IE5vZGUqIGN1cnJlbnROb2RlID0gdGhpczsKICAgICB3aGls
ZSAoKGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSkpIHsKLSAgICAgICAg
aWYgKGlzPEVsZW1lbnQ+KGN1cnJlbnROb2RlKSkgeworICAgICAgICBpZiAoaXM8RWxlbWVudD4o
KmN1cnJlbnROb2RlKSkgewogICAgICAgICAgICAgaWYgKGNvbnN0IEVsZW1lbnREYXRhKiBlbGVt
ZW50RGF0YSA9IGRvd25jYXN0PEVsZW1lbnQ+KCpjdXJyZW50Tm9kZSkuZWxlbWVudERhdGEoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1l
bnREYXRhLT5maW5kTGFuZ3VhZ2VBdHRyaWJ1dGUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChpczxEb2N1bWVudD4oY3VycmVudE5vZGUpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8RG9j
dW1lbnQ+KCpjdXJyZW50Tm9kZSkpIHsKICAgICAgICAgICAgIC8vIGNoZWNraW5nIHRoZSBNSU1F
IGNvbnRlbnQtbGFuZ3VhZ2UKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4o
KmN1cnJlbnROb2RlKS5jb250ZW50TGFuZ3VhZ2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKaW5kZXggMDBmMmJjYjI2NmFmZDIzZDQxNzllMTFlODgzZDVmOTFlODcwNzBiMC4uOTE2MjM5
NDY0NDg4MWQ4MmI4YWZmMTVjODUyNDRhMTNhOWY3YTAyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBA
IC02NzksNyArNjc5LDcgQEAgaW5saW5lIE5hbWVkTm9kZU1hcCogTm9kZTo6YXR0cmlidXRlcygp
IGNvbnN0CiBpbmxpbmUgRWxlbWVudCogTm9kZTo6cGFyZW50RWxlbWVudCgpIGNvbnN0CiB7CiAg
ICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwotICAgIHJldHVybiBwYXJl
bnQgJiYgaXM8RWxlbWVudD4ocGFyZW50KSA/IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudCkgOiBu
dWxscHRyOworICAgIHJldHVybiBpczxFbGVtZW50PihwYXJlbnQpID8gZG93bmNhc3Q8RWxlbWVu
dD4ocGFyZW50KSA6IG51bGxwdHI7CiB9CiAKIGlubGluZSBib29sIEVsZW1lbnQ6OmZhc3RIYXNB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50VHJhdmVyc2FsLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudFRyYXZlcnNhbC5oCmluZGV4IDAyZmZkMzM0NmI3Yjk4Nzk0ODBkNGNjN2IyOTI5Mzg2
Y2ZmNTA0YzkuLmM1Yzk5OTRlN2ExMzQ1NDM4NGUyOTRkMDdlMGRjZTVlYjM5YjhiMGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50VHJhdmVyc2FsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRUcmF2ZXJzYWwuaApAQCAtOTUsNyArOTUsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ3VycmVudFR5cGU+CiBpbmxpbmUgRWxlbWVudCogVHJhdmVyc2FsPEVsZW1l
bnQ+OjpuZXh0VGVtcGxhdGUoQ3VycmVudFR5cGUqIGN1cnJlbnQpCiB7CiAgICAgTm9kZSogbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoY3VycmVudCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYgIWlz
PEVsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pigqbm9kZSkp
CiAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2Rl
KTsKICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CkBAIC0xMDUsNyArMTA1
LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEN1cnJlbnRUeXBlPgogaW5saW5lIEVsZW1lbnQqIFRy
YXZlcnNhbDxFbGVtZW50Pjo6bmV4dFRlbXBsYXRlKEN1cnJlbnRUeXBlKiBjdXJyZW50LCBjb25z
dCBOb2RlKiBzdGF5V2l0aGluKQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KGN1cnJlbnQsIHN0YXlXaXRoaW4pOwotICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50
Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSwgc3RheVdp
dGhpbik7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQpAQCAtMjU4LDcg
KzI1OCw3IEBAIGlubGluZSBFbGVtZW50VHlwZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4
dChjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlCiBpbmxpbmUgRWxlbWVudCogRWxlbWVu
dFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSogY3VycmVudCwg
Y29uc3QgTm9kZSogc3RheVdpdGhpbikKIHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNh
bDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgc3RheVdpdGhpbik7Ci0gICAgd2hp
bGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxF
bGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c0lu
Y2x1ZGluZ1BzZXVkbyhub2RlLCBzdGF5V2l0aGluKTsKICAgICByZXR1cm4gZG93bmNhc3Q8RWxl
bWVudD4obm9kZSk7CiB9CkBAIC0yNjYsNyArMjY2LDcgQEAgaW5saW5lIEVsZW1lbnQqIEVsZW1l
bnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQs
IGMKIGlubGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRv
KGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7CiAgICAgTm9k
ZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgc3Rh
eVdpdGhpbik7Ci0gICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIHdo
aWxlIChub2RlICYmICFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKG5vZGUsIHN0YXlXaXRoaW4pOwogICAgIHJldHVy
biBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0KQEAgLTI3NCw3ICsyNzQsNyBAQCBpbmxpbmUg
RWxlbWVudCogRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2Rl
KiBjdXJyZW50LCBjb25zdAogaW5saW5lIEVsZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJ
bmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0
IE5vZGUqIHN0YXlXaXRoaW4pCiB7CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGN1cnJlbnQsIHN0YXlXaXRoaW4pOwot
ICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAm
JiAhaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4obm9kZSwgc3RheVdpdGhpbik7CiAgICAg
cmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQpAQCAtMjgyLDcgKzI4Miw3IEBAIGlu
bGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBp
bmdDaGlsZHJlbihjb25zdCBOb2RlCiBpbmxpbmUgRWxlbWVudCogRWxlbWVudFRyYXZlcnNhbDo6
cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCkKIHsKICAgICBO
b2RlKiBub2RlID0gY3VycmVudC0+cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKTsKLSAgICB3
aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlz
PEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBzZXVkb0F3YXJlUHJldmlv
dXNTaWJsaW5nKCk7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBmNzc5OGQzMGE0MDcyOWYwMmNl
MWZhZGJjZDg2YjA3MTQxMDhjMWEyLi5kOGVlMTlmN2Y0ZjllZDRiMzVmMmFiOWM4ZDkxN2Y2YzM1
MzZhNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtNjAsNyAr
NjAsNyBAQCBwcml2YXRlOgogV2luZG93RXZlbnRDb250ZXh0OjpXaW5kb3dFdmVudENvbnRleHQo
UGFzc1JlZlB0cjxOb2RlPiBub2RlLCBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4
dCkKIHsKICAgICBOb2RlKiB0b3BMZXZlbENvbnRhaW5lciA9IHRvcEV2ZW50Q29udGV4dCA/IHRv
cEV2ZW50Q29udGV4dC0+bm9kZSgpIDogbm9kZS5nZXQoKTsKLSAgICBpZiAoIWlzPERvY3VtZW50
Pih0b3BMZXZlbENvbnRhaW5lcikpCisgICAgaWYgKCFpczxEb2N1bWVudD4oKnRvcExldmVsQ29u
dGFpbmVyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV93aW5kb3cgPSBkb3duY2FzdDxEb2N1
bWVudD4oKnRvcExldmVsQ29udGFpbmVyKS5kb21XaW5kb3coKTsKQEAgLTM1Niw3ICszNTYsNyBA
QCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NS
ZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dFdmVu
dENvbnRleHQobm9kZS5nZXQoKSwgZXZlbnRQYXRoLmxhc3RDb250ZXh0SWZFeGlzdHMoKSk7CiAK
ICAgICBJbnB1dEVsZW1lbnRDbGlja1N0YXRlIGNsaWNrSGFuZGxpbmdTdGF0ZTsKLSAgICBpZiAo
aXM8SFRNTElucHV0RWxlbWVudD4obm9kZS5nZXQoKSkpCisgICAgaWYgKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KCpub2RlKSkKICAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUp
LndpbGxEaXNwYXRjaEV2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAgIGlm
ICghZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpICYmICFldmVudFBhdGguaXNFbXB0eSgpKQpA
QCAtNDE4LDcgKzQxOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRFdmVudENyb3NzU2hh
ZG93Qm91bmRhcnkoRXZlbnQmIGV2ZW50LCBTaGFkb3dSb290JiBzaGFkCiAKIHN0YXRpYyBOb2Rl
KiBub2RlT3JIb3N0SWZQc2V1ZG9FbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIGlz
PFBzZXVkb0VsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4oKm5vZGUpLmhv
c3RFbGVtZW50KCkgOiBub2RlOworICAgIHJldHVybiBpczxQc2V1ZG9FbGVtZW50Pigqbm9kZSkg
PyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKSA6IG5vZGU7CiB9
CiAKIEV2ZW50UGF0aDo6RXZlbnRQYXRoKE5vZGUmIHRhcmdldE5vZGUsIEV2ZW50JiBldmVudCkK
QEAgLTQ0Nyw3ICs0NDcsNyBAQCBFdmVudFBhdGg6OkV2ZW50UGF0aChOb2RlJiB0YXJnZXROb2Rl
LCBFdmVudCYgZXZlbnQpCiAgICAgICAgICAgICAgICAgbV9wYXRoLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPEV2ZW50Q29udGV4dD4obm9kZSwgJmN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOwogICAg
ICAgICAgICAgaWYgKCFpbkRvY3VtZW50KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGlmIChpczxTaGFkb3dSb290Pihub2RlKSkKKyAgICAgICAgICAgIGlmIChpczxTaGFk
b3dSb290Pigqbm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCFub2RlIHx8ICFzaG91bGRFdmVudENyb3NzU2hhZG93Qm91bmRhcnkoZXZlbnQsIGRv
d25jYXN0PFNoYWRvd1Jvb3Q+KCpub2RlKSwgKnRhcmdldCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0LmNwcAppbmRleCA0ODM3ZDg2MWRmY2ZhNmExOTQ2YjU3N2JmZDY0MzVlMDE3NzRkZTg4Li45
ODlmNTAyNjFmNjE1MWY5YzYzMTZlMGY5NjhhNGY4N2MwOTRhZTJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5jcHAKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpmaXJl
RXZlbnRMaXN0ZW5lcnMoRXZlbnQqIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50TGlz
dAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbnVsbHB0cjsKICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRDb29raWU7Ci0gICAgaWYg
KGNvbnRleHQgJiYgaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CisgICAgaWYgKGlzPERvY3VtZW50
Pihjb250ZXh0KSkgewogICAgICAgICBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250
ZXh0KTsKICAgICAgICAgd2lsbERpc3BhdGNoRXZlbnRDb29raWUgPSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KGRvY3VtZW50LCAqZXZlbnQsIHNpemUgPiAwKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKaW5kZXggYjQwMzE0MGE5ODBm
YTM4M2M2NWQ1ZTMwNDI4YTk1NDU2YTQxZGViMC4uNjRjZWJhMmYxMDkxMjc5ZjU4MWM4OThjOTNh
NTAzNGFmZDFhMmQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcApAQCAtMjIw
LDcgKzIyMCw3IEBAIGludCBLZXlib2FyZEV2ZW50Ojp3aGljaCgpIGNvbnN0CiBLZXlib2FyZEV2
ZW50KiBmaW5kS2V5Ym9hcmRFdmVudChFdmVudCogZXZlbnQpCiB7CiAgICAgZm9yIChFdmVudCog
ZSA9IGV2ZW50OyBlOyBlID0gZS0+dW5kZXJseWluZ0V2ZW50KCkpCi0gICAgICAgIGlmIChpczxL
ZXlib2FyZEV2ZW50PihlKSkKKyAgICAgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KCplKSkKICAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxLZXlib2FyZEV2ZW50PihlKTsKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAKaW5kZXggZWUyMGUxMWRk
YTQ0YTQzYTI2NmM5NGU3NjJhODViNjYxYzE4ZDA2Yy4uNGJiYWZkZmFjMGMzMzQ3Y2JhMjI2ODNk
MjY1ZjFiOTQ2ODc5ZmRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2Rl
TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAKQEAgLTY4
LDcgKzY4LDcgQEAgTm9kZSogTGl2ZU5vZGVMaXN0OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nJiBlbGVtZW50SWQpIGNvbnN0CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3Ro
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAg
IE5vZGUqIG5vZGUgPSBpdGVtKGkpOwotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQor
ICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgZ2V0SWRBdHRyaWJ1
dGUgaW5zdGVhZCBvZiBpZEZvclN0eWxlUmVzb2x1dGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuY3BwCmluZGV4IDU4YmViN2Y5YWE0NmQ2NzY5NjI5YjY0Y2JkZWNmNDQ5ZWE0MTg0MWUuLmY4
OGFlNzc4NWQxN2I1ZmI2OTliODJkMTBhMWUwOTcyMjA3OWJmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01l
c3NhZ2VQb3J0LmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc3Bh
dGNoTWVzc2FnZXMoKQogICAgIHdoaWxlIChtX2VudGFuZ2xlZENoYW5uZWwgJiYgbV9lbnRhbmds
ZWRDaGFubmVsLT50cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShtZXNzYWdlLCBjaGFubmVscykpIHsK
IAogICAgICAgICAvLyBjbG9zZSgpIGluIFdvcmtlciBvbm1lc3NhZ2UgaGFuZGxlciBzaG91bGQg
cHJldmVudCBuZXh0IG1lc3NhZ2UgZnJvbSBkaXNwYXRjaGluZy4KLSAgICAgICAgaWYgKGlzPFdv
cmtlckdsb2JhbFNjb3BlPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpICYmIGRvd25jYXN0PFdv
cmtlckdsb2JhbFNjb3BlPigqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KS5pc0Nsb3NpbmcoKSkK
KyAgICAgICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigqbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KSAmJiBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKm1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkuaXNDbG9zaW5nKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xl
UG9ydHMoKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgV1RGOjptb3ZlKGNoYW5uZWxzKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5jcHAKaW5kZXggNThkM2Q2MGNkMTUzMzkyZDZhNTYyYmQ3Y2Rl
NWUxNGVjNWY1OWM2Yi4uZGY5NDM4OGM0ZGM1ODQxMzEyMmJjOTgyNDU4OTc2YTY0ZDJmMTRlMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAtMjc2LDcgKzI3Niw3IEBAIFNpbXVsYXRl
ZE1vdXNlRXZlbnQ6OlNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFBhc3NSZWZQCiAgICAgfQogICAgIHNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5n
RXZlbnQpOwogCi0gICAgaWYgKHRoaXMtPnVuZGVybHlpbmdFdmVudCgpICYmIGlzPE1vdXNlRXZl
bnQ+KHRoaXMtPnVuZGVybHlpbmdFdmVudCgpKSkgeworICAgIGlmIChpczxNb3VzZUV2ZW50Pih0
aGlzLT51bmRlcmx5aW5nRXZlbnQoKSkpIHsKICAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVu
dCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCp0aGlzLT51bmRlcmx5aW5nRXZlbnQoKSk7CiAgICAg
ICAgIG1fc2NyZWVuTG9jYXRpb24gPSBtb3VzZUV2ZW50LnNjcmVlbkxvY2F0aW9uKCk7CiAgICAg
ICAgIGluaXRDb29yZGluYXRlcyhtb3VzZUV2ZW50LmNsaWVudExvY2F0aW9uKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTmFtZWROb2RlTWFwLmNwcAppbmRleCBhYWVhMGJhNjIxYWYzZmYyYzM4YzI0M2U3Njhl
NTk1NzQ3NTYzMWYzLi43MTRiYTE3YzZhYWIyNzk5ZGU3MzNjY2FiYjY4YWQ0NjQwMjM1MzA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcApAQCAtODYsNyArODYsNyBAQCBQYXNzUmVm
UHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKE5vZGUqIG5vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogICAgIH0KIAogICAgIC8vIE5vdCBtZW50aW9uZWQgaW4gc3BlYzogdGhyb3cg
YSBISUVSQVJDSFlfUkVRVUVTVF9FUlJPUiBpZiB0aGUgdXNlciBwYXNzZXMgaW4gYSBub24tYXR0
cmlidXRlIG5vZGUKLSAgICBpZiAoIWlzPEF0dHI+KG5vZGUpKSB7CisgICAgaWYgKCFpczxBdHRy
Pigqbm9kZSkpIHsKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA1NmM3NmMwODM5ODFi
M2FiMmNmMGE4YTIyY2EzYjYyMGI5MmFlN2FkLi5hZjQ3MTY0NWY1MGM3MzUyM2RkYmRjNmI3OTg1
NTcxOGJlYWIwODBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBO
b2RlOjpkdW1wU3RhdGlzdGljcygpCiAKICAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkp
IHsKICAgICAgICAgICAgICsrbm9kZXNXaXRoUmFyZURhdGE7Ci0gICAgICAgICAgICBpZiAoaXM8
RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsK
ICAgICAgICAgICAgICAgICArK2VsZW1lbnRzV2l0aFJhcmVEYXRhOwogICAgICAgICAgICAgICAg
IGlmIChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaGFzTmFtZWROb2RlTWFwKCkpCiAgICAgICAg
ICAgICAgICAgICAgICsrZWxlbWVudHNXaXRoTmFtZWROb2RlTWFwOwpAQCAtODcyLDcgKzg3Miw3
IEBAIGJvb2wgTm9kZTo6Y29udGFpbnNJbmNsdWRpbmdIb3N0RWxlbWVudHMoY29uc3QgTm9kZSog
bm9kZSkgY29uc3QKIAogTm9kZSogTm9kZTo6cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKSBj
b25zdAogewotICAgIEVsZW1lbnQqIHBhcmVudE9ySG9zdCA9IGlzPFBzZXVkb0VsZW1lbnQ+KHRo
aXMpID8gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4oKnRoaXMpLmhvc3RFbGVtZW50KCkgOiBwYXJl
bnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogcGFyZW50T3JIb3N0ID0gaXM8UHNldWRvRWxlbWVu
dD4oKnRoaXMpID8gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4oKnRoaXMpLmhvc3RFbGVtZW50KCkg
OiBwYXJlbnRFbGVtZW50KCk7CiAgICAgaWYgKHBhcmVudE9ySG9zdCAmJiAhcHJldmlvdXNTaWJs
aW5nKCkpIHsKICAgICAgICAgaWYgKGlzQWZ0ZXJQc2V1ZG9FbGVtZW50KCkgJiYgcGFyZW50T3JI
b3N0LT5sYXN0Q2hpbGQoKSkKICAgICAgICAgICAgIHJldHVybiBwYXJlbnRPckhvc3QtPmxhc3RD
aGlsZCgpOwpAQCAtODg0LDcgKzg4NCw3IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlUHJldmlv
dXNTaWJsaW5nKCkgY29uc3QKIAogTm9kZSogTm9kZTo6cHNldWRvQXdhcmVOZXh0U2libGluZygp
IGNvbnN0CiB7Ci0gICAgRWxlbWVudCogcGFyZW50T3JIb3N0ID0gaXM8UHNldWRvRWxlbWVudD4o
dGhpcykgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqdGhpcykuaG9zdEVsZW1lbnQoKSA6IHBh
cmVudEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBwYXJlbnRPckhvc3QgPSBpczxQc2V1ZG9FbGVt
ZW50PigqdGhpcykgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqdGhpcykuaG9zdEVsZW1lbnQo
KSA6IHBhcmVudEVsZW1lbnQoKTsKICAgICBpZiAocGFyZW50T3JIb3N0ICYmICFuZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIGlmIChpc0JlZm9yZVBzZXVkb0VsZW1lbnQoKSAmJiBwYXJlbnRPckhv
c3QtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgIHJldHVybiBwYXJlbnRPckhvc3QtPmZpcnN0
Q2hpbGQoKTsKQEAgLTkyNyw3ICs5MjcsNyBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUxhc3RD
aGlsZCgpIGNvbnN0CiBSZW5kZXJTdHlsZSogTm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBw
c2V1ZG9FbGVtZW50U3BlY2lmaWVyKQogewogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5v
ZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpIHsKLSAgICAgICAgaWYg
KGlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKQogICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5jb21wdXRlZFN0eWxlKHBz
ZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEw
MDQsMTAgKzEwMDQsMTAgQEAgRWxlbWVudCogTm9kZTo6cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVu
dCgpIGNvbnN0CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KHBhcmVudCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxT
aGFkb3dSb290PihwYXJlbnQpLT5ob3N0RWxlbWVudCgpOworICAgIGlmIChpczxTaGFkb3dSb290
PigqcGFyZW50KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCpwYXJlbnQp
Lmhvc3RFbGVtZW50KCk7CiAKLSAgICBpZiAoIWlzPEVsZW1lbnQ+KHBhcmVudCkpCisgICAgaWYg
KCFpczxFbGVtZW50PigqcGFyZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBy
ZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50KTsKQEAgLTEwNTcsOSArMTA1Nyw5IEBAIEVs
ZW1lbnQqIE5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQq
IHJlc3VsdCA9IG51bGxwdHI7CiAgICAgZm9yIChOb2RlKiBub2RlID0gY29uc3RfY2FzdDxOb2Rl
Kj4odGhpcyk7IG5vZGUgJiYgbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOyBub2RlID0gbm9kZS0+
cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAg
aWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIHJlc3VsdCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGUpOwotICAgICAgICBpZiAoaXM8SFRNTEJvZHlFbGVtZW50Pihub2RlKSkKKyAg
ICAgICAgaWYgKGlzPEhUTUxCb2R5RWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzg0LDcgKzEzODQsNyBAQCBFbGVtZW50
KiBOb2RlOjphbmNlc3RvckVsZW1lbnQoKSBjb25zdAogewogICAgIC8vIEluIHRoZW9yeSwgdGhl
cmUgY2FuIGJlIEVudGl0eVJlZmVyZW5jZSBub2RlcyBiZXR3ZWVuIGVsZW1lbnRzLCBidXQgdGhp
cyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KICAgICBmb3IgKENvbnRhaW5lck5vZGUqIGFu
Y2VzdG9yID0gcGFyZW50Tm9kZSgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFy
ZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50PihhbmNlc3RvcikpCisgICAgICAg
IGlmIChpczxFbGVtZW50PigqYW5jZXN0b3IpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEVsZW1lbnQ+KGFuY2VzdG9yKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNDA0
LDggKzE0MDQsOCBAQCB1bnNpZ25lZCBzaG9ydCBOb2RlOjpjb21wYXJlRG9jdW1lbnRQb3NpdGlv
bihOb2RlKiBvdGhlck5vZGUpCiAgICAgaWYgKG90aGVyTm9kZSA9PSB0aGlzKQogICAgICAgICBy
ZXR1cm4gRE9DVU1FTlRfUE9TSVRJT05fRVFVSVZBTEVOVDsKICAgICAKLSAgICBBdHRyKiBhdHRy
MSA9IGlzPEF0dHI+KHRoaXMpID8gZG93bmNhc3Q8QXR0cj4odGhpcykgOiBudWxscHRyOwotICAg
IEF0dHIqIGF0dHIyID0gaXM8QXR0cj4ob3RoZXJOb2RlKSA/IGRvd25jYXN0PEF0dHI+KG90aGVy
Tm9kZSkgOiBudWxscHRyOworICAgIEF0dHIqIGF0dHIxID0gaXM8QXR0cj4oKnRoaXMpID8gZG93
bmNhc3Q8QXR0cj4odGhpcykgOiBudWxscHRyOworICAgIEF0dHIqIGF0dHIyID0gaXM8QXR0cj4o
Km90aGVyTm9kZSkgPyBkb3duY2FzdDxBdHRyPihvdGhlck5vZGUpIDogbnVsbHB0cjsKICAgICAK
ICAgICBOb2RlKiBzdGFydDEgPSBhdHRyMSA/IGF0dHIxLT5vd25lckVsZW1lbnQoKSA6IHRoaXM7
CiAgICAgTm9kZSogc3RhcnQyID0gYXR0cjIgPyBhdHRyMi0+b3duZXJFbGVtZW50KCkgOiBvdGhl
ck5vZGU7CkBAIC0xNTI5LDcgKzE1MjksNyBAQCBGbG9hdFBvaW50IE5vZGU6OmNvbnZlcnRGcm9t
UGFnZShjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAogCiBzdGF0aWMgdm9pZCBhcHBlbmRBdHRy
aWJ1dGVEZXNjKGNvbnN0IE5vZGUqIG5vZGUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IGNoYXIqIGF0dHJEZXNjKQogewotICAg
IGlmICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0ciA9IGRvd25jYXN0
PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUobmFtZSk7CkBAIC0xNTcyLDcgKzE1NzIsNyBA
QCB2b2lkIE5vZGU6OnNob3dOb2RlUGF0aEZvclRoaXMoKSBjb25zdAogICAgIH0KICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gY2hhaW4uc2l6ZSgpOyBpbmRleCA+IDA7IC0taW5kZXgpIHsKICAg
ICAgICAgY29uc3QgTm9kZSogbm9kZSA9IGNoYWluW2luZGV4IC0gMV07Ci0gICAgICAgIGlmIChp
czxTaGFkb3dSb290Pihub2RlKSkgeworICAgICAgICBpZiAoaXM8U2hhZG93Um9vdD4oKm5vZGUp
KSB7CiAgICAgICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICAgICAgZm9yIChjb25zdCBT
aGFkb3dSb290KiBzaGFkb3dSb290ID0gZG93bmNhc3Q8U2hhZG93Um9vdD4obm9kZSk7IHNoYWRv
d1Jvb3QgJiYgc2hhZG93Um9vdCAhPSBub2RlOyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+c2hh
ZG93Um9vdCgpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CkBAIC0xNzIzLDcgKzE3MjMsNyBA
QCBFbGVtZW50KiBOb2RlOjplbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKQogICAgICAg
ICAvLyBGb3IgaW1hZ2VtYXBzLCB0aGUgZW5jbG9zaW5nIGxpbmsgZWxlbWVudCBpcyB0aGUgYXNz
b2NpYXRlZCBhcmVhIGVsZW1lbnQgbm90IHRoZSBpbWFnZSBpdHNlbGYuCiAgICAgICAgIC8vIFNv
IHdlIGRvbid0IGxldCBpbWFnZXMgYmUgdGhlIGVuY2xvc2luZyBsaW5rIGVsZW1lbnQsIGV2ZW4g
dGhvdWdoIGlzTGluayBzb21ldGltZXMgcmV0dXJucwogICAgICAgICAvLyB0cnVlIGZvciB0aGVt
LgotICAgICAgICBpZiAobm9kZS0+aXNMaW5rKCkgJiYgIWlzPEhUTUxJbWFnZUVsZW1lbnQ+KG5v
ZGUpKQorICAgICAgICBpZiAobm9kZS0+aXNMaW5rKCkgJiYgIWlzPEhUTUxJbWFnZUVsZW1lbnQ+
KCpub2RlKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAg
ICB9CiAKQEAgLTIwMzIsNyArMjAzMiw3IEBAIHZvaWQgTm9kZTo6ZGlzcGF0Y2hTY29wZWRFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIGJvb2wgTm9kZTo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExB
VEZPUk0oSU9TKQotICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudC5nZXQoKSkpCisgICAgaWYg
KGlzPFRvdWNoRXZlbnQ+KCpldmVudCkpCiAgICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoRXZl
bnQoYWRvcHRSZWYoZG93bmNhc3Q8VG91Y2hFdmVudD4oZXZlbnQubGVha1JlZigpKSkpOwogI2Vu
ZGlmCiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVu
dCk7CkBAIC0yMTAwLDEyICsyMTAwLDEyIEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NF
dmVudCkgewotICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CisgICAgICAg
IGlmIChpczxLZXlib2FyZEV2ZW50PigqZXZlbnQpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5kZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoZG93bmNhc3Q8S2V5Ym9hcmRF
dmVudD4oZXZlbnQpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIGludCBkZXRhaWwgPSBpczxVSUV2ZW50
PihldmVudCkgPyBkb3duY2FzdDxVSUV2ZW50PigqZXZlbnQpLmRldGFpbCgpIDogMDsKKyAgICAg
ICAgaW50IGRldGFpbCA9IGlzPFVJRXZlbnQ+KCpldmVudCkgPyBkb3duY2FzdDxVSUV2ZW50Pigq
ZXZlbnQpLmRldGFpbCgpIDogMDsKICAgICAgICAgaWYgKGRpc3BhdGNoRE9NQWN0aXZhdGVFdmVu
dChkZXRhaWwsIGV2ZW50KSkKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQpAQCAtMjExNSwxMiArMjExNSwxMiBAQCB2b2lk
IE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgICAg
IHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLmhhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZl
bnQpOwogI2VuZGlmCiAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRl
eHRJbnB1dEV2ZW50KSB7Ci0gICAgICAgIGlmIChpczxUZXh0RXZlbnQ+KGV2ZW50KSkgeworICAg
ICAgICBpZiAoaXM8VGV4dEV2ZW50PigqZXZlbnQpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5kZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKGRvd25jYXN0PFRleHRFdmVu
dD4oZXZlbnQpKTsKICAgICAgICAgfQogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5HKQotICAgIH0g
ZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxN
b3VzZUV2ZW50PihldmVudCkpIHsKKyAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oKmV2ZW50KSkgewogICAgICAg
ICBpZiAoZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBNaWRkbGVCdXR0
b24pIHsKICAgICAgICAgICAgIGlmIChlbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMTM1LDcgKzIxMzUsNyBAQCB2b2lkIE5vZGU6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndo
ZWVsRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYm
IGlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkgeworICAgIH0gZWxzZSBpZiAoKGV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNl
d2hlZWxFdmVudCkgJiYgaXM8V2hlZWxFdmVudD4oKmV2ZW50KSkgewogCiAgICAgICAgIC8vIElm
IHdlIGRvbid0IGhhdmUgYSByZW5kZXJlciwgc2VuZCB0aGUgd2hlZWwgZXZlbnQgdG8gdGhlIGZp
cnN0IG5vZGUgd2UgZmluZCB3aXRoIGEgcmVuZGVyZXIuCiAgICAgICAgIC8vIFRoaXMgaXMgbmVl
ZGVkIGZvciA8b3B0aW9uPiBhbmQgPG9wdGdyb3VwPiBlbGVtZW50cyBzbyB0aGF0IDxzZWxlY3Q+
cyBnZXQgYSB3aGVlbCBzY3JvbGwuCkBAIC0yMTQ3LDcgKzIxNDcsNyBAQCB2b2lkIE5vZGU6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCkuZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKHN0YXJ0Tm9kZSwgZG93bmNhc3Q8V2hl
ZWxFdmVudD4oZXZlbnQpKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiBQTEFURk9STShJ
T1MpCi0gICAgfSBlbHNlIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkgJiYgZXZlbnROYW1lcygp
LmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkgeworICAgIH0gZWxzZSBpZiAoaXM8VG91Y2hF
dmVudD4oKmV2ZW50KSAmJiBldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUp
KSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwog
ICAgICAgICB3aGlsZSAocmVuZGVyZXIgJiYgKCFyZW5kZXJlci0+aXNCb3goKSB8fCAhdG9SZW5k
ZXJCb3gocmVuZGVyZXIpLT5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkpCiAg
ICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2FsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2FsLmNwcAppbmRleCA4MmVjN2RiNjJlYWM5NDQy
MmM1YTk5Nzg2MDkyMzY0Y2UyZDg0OWI1Li5kNTA3YmMxMjU3MGJiNGM4OTk4MjQyMmY3MjMzMjZm
OGIzNDQ3MDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ1Ry
YXZlcnNhbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdUcmF2ZXJz
YWwuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuQmVEaXN0
cmlidXRlZChjb25zdCBOb2RlKiBub2RlKQogICAgIGlmIChwYXJlbnQtPmlzU2hhZG93Um9vdCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXM8RWxlbWVudD4ocGFyZW50KSAm
JiBkb3duY2FzdDxFbGVtZW50PigqcGFyZW50KS5zaGFkb3dSb290KCkpCisgICAgaWYgKGlzPEVs
ZW1lbnQ+KCpwYXJlbnQpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpwYXJlbnQpLnNoYWRvd1Jvb3Qo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTMy
LDEwICsxMzIsMTAgQEAgc3RhdGljIENvbnRhaW5lck5vZGUqIHRyYXZlcnNlUGFyZW50KGNvbnN0
IE5vZGUqIG5vZGUsIFNoYWRvd1Jvb3RDcm9zc2luZyBzaGFkb3cKICAgICBpZiAoIXBhcmVudCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoaXM8U2hhZG93Um9vdD4ocGFyZW50
KSkKKyAgICBpZiAoaXM8U2hhZG93Um9vdD4oKnBhcmVudCkpCiAgICAgICAgIHJldHVybiBzaGFk
b3dSb290Q3Jvc3NpbmcgPT0gQ3Jvc3NTaGFkb3dSb290ID8gZG93bmNhc3Q8U2hhZG93Um9vdD4o
cGFyZW50KS0+aG9zdEVsZW1lbnQoKSA6IHBhcmVudDsKIAotICAgIGlmIChpczxJbnNlcnRpb25Q
b2ludD4ocGFyZW50KSkgeworICAgIGlmIChpczxJbnNlcnRpb25Qb2ludD4oKnBhcmVudCkpIHsK
ICAgICAgICAgY29uc3QgSW5zZXJ0aW9uUG9pbnQmIGluc2VydGlvblBvaW50ID0gZG93bmNhc3Q8
SW5zZXJ0aW9uUG9pbnQ+KCpwYXJlbnQpOwogICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaGFz
RGlzdHJpYnV0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlVHJhdmVyc2FsLmNwcAppbmRleCBmYmZkN2Q4ZDBhZDA4YTk2Yjc0ZTcxNWZmN2UzZDk0
MGVhYWU5YTczLi44NTI5OGIwMTY1ZTNhMTI4NzhjZjA2MTc1NDI1ZmUwZmZkMWY3MmVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwCkBAIC00MSw3ICs0MSw3IEBAIE5vZGUqIHBy
ZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4pCiAgICAgICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzLT5wc2V1ZG9Bd2FyZUxh
c3RDaGlsZCgpOwogICAgICAgICByZXR1cm4gcHJldmlvdXM7CiAgICAgfQotICAgIHJldHVybiBp
czxQc2V1ZG9FbGVtZW50PihjdXJyZW50KSA/IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpjdXJy
ZW50KS5ob3N0RWxlbWVudCgpIDogY3VycmVudC0+cGFyZW50Tm9kZSgpOworICAgIHJldHVybiBp
czxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqY3Vy
cmVudCkuaG9zdEVsZW1lbnQoKSA6IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKIH0KIAogTm9kZSog
bmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5
V2l0aGluKQpAQCAtNTMsNyArNTMsNyBAQCBOb2RlKiBuZXh0SW5jbHVkaW5nUHNldWRvKGNvbnN0
IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIGlmICgobmV4dCA9IGN1cnJlbnQtPnBzZXVkb0F3YXJlTmV4dFNpYmxpbmco
KSkpCiAgICAgICAgIHJldHVybiBuZXh0OwotICAgIGN1cnJlbnQgPSBpczxQc2V1ZG9FbGVtZW50
PihjdXJyZW50KSA/IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpjdXJyZW50KS5ob3N0RWxlbWVu
dCgpIDogY3VycmVudC0+cGFyZW50Tm9kZSgpOworICAgIGN1cnJlbnQgPSBpczxQc2V1ZG9FbGVt
ZW50PigqY3VycmVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkuaG9zdEVs
ZW1lbnQoKSA6IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKICAgICBmb3IgKDsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoY3VycmVudCA9PSBz
dGF5V2l0aGluKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03MCw3ICs3MCw3IEBA
IE5vZGUqIG5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1
cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlm
ICgobmV4dCA9IGN1cnJlbnQtPnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcoKSkpCiAgICAgICAgIHJl
dHVybiBuZXh0OwotICAgIGN1cnJlbnQgPSBpczxQc2V1ZG9FbGVtZW50PihjdXJyZW50KSA/IGRv
d25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpjdXJyZW50KS5ob3N0RWxlbWVudCgpIDogY3VycmVudC0+
cGFyZW50Tm9kZSgpOworICAgIGN1cnJlbnQgPSBpczxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkg
PyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkuaG9zdEVsZW1lbnQoKSA6IGN1cnJl
bnQtPnBhcmVudE5vZGUoKTsKICAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
PnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAppbmRleCBkYzgy
MTkwYzViZTBmZmEzMTZlMDRiN2NlNzIyMzQ2ZjhhODZmNTgzLi40YmJhNGQyNzBjZDE0YzdmNTdi
ZGE2MGMxYTQ0YTc2Mjc0ODBkN2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9z
aXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKQEAgLTI5MSw3
ICsyOTEsNyBAQCBQb3NpdGlvbjo6QW5jaG9yVHlwZSBQb3NpdGlvbjo6YW5jaG9yVHlwZUZvckxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihOb2RlKiBhbmNob3JObwogRWxlbWVudCogUG9zaXRpb246OmVs
ZW1lbnQoKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSBhbmNob3JOb2RlKCk7Ci0gICAgd2hp
bGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxF
bGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAg
cmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQpAQCAtNTI5LDcgKzUyOSw3IEBAIHN0
YXRpYyBib29sIGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKE5vZGUqIG5v
ZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICAvLyBEb24ndCBpbmNsdWRl
IGlubGluZSB0YWJsZXMuCi0gICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KG5vZGUpKQorICAg
IGlmIChpczxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICAvLyBUaGVyZSBpcyBhIFZpc2libGVQb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkg
aW5saW5lLWJsb2NrIGNvbnRhaW5lci4KQEAgLTk1MCw3ICs5NTAsNyBAQCBib29sIFBvc2l0aW9u
Ojppc0NhbmRpZGF0ZSgpIGNvbnN0CiAKIGJvb2wgUG9zaXRpb246OmlzUmVuZGVyZWRDaGFyYWN0
ZXIoKSBjb25zdAogewotICAgIGlmIChpc051bGwoKSB8fCAhaXM8VGV4dD4oZGVwcmVjYXRlZE5v
ZGUoKSkpCisgICAgaWYgKCFpczxUZXh0PihkZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKICAgICBSZW5kZXJUZXh0KiByZW5kZXJlciA9IGRvd25jYXN0
PFRleHQ+KCpkZXByZWNhdGVkTm9kZSgpKS5yZW5kZXJlcigpOwpAQCAtMTA2Miw3ICsxMDYyLDcg
QEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5
IGFmZmluaXR5LCBib29sIGNvbnNpZGVyTm8KICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAK
ICAgICBQb3NpdGlvbiBwcmV2ID0gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihhZmZpbml0eSk7
Ci0gICAgaWYgKHByZXYgIT0gKnRoaXMgJiYgaW5TYW1lRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dChkZXByZWNhdGVkTm9kZSgpLCBwcmV2LmRlcHJlY2F0ZWROb2RlKCkpICYmIGlzPFRleHQ+KHBy
ZXYuZGVwcmVjYXRlZE5vZGUoKSkpIHsKKyAgICBpZiAocHJldiAhPSAqdGhpcyAmJiBpblNhbWVF
bmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGRlcHJlY2F0ZWROb2RlKCksIHByZXYuZGVwcmVjYXRl
ZE5vZGUoKSkgJiYgaXM8VGV4dD4oKnByZXYuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAg
U3RyaW5nIHN0cmluZyA9IGRvd25jYXN0PFRleHQ+KCpwcmV2LmRlcHJlY2F0ZWROb2RlKCkpLmRh
dGEoKTsKICAgICAgICAgVUNoYXIgYyA9IHN0cmluZ1twcmV2LmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCldOwogICAgICAgICBpZiAoY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UgPyAo
aXNTcGFjZU9yTmV3bGluZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSkgOiBkZXByZWNhdGVkSXND
b2xsYXBzaWJsZVdoaXRlc3BhY2UoYykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCAyN2RlN2VmZGVj
YWFhNDlkYjFhODJkYWQ0MjQ2MjIzYTkxNzUzODNjLi5jZTMyZjY5ZDIxY2Y5MjE4YTFhMzkyMzE5
MWM1NWU2NzhkYzgyNTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTk3OCw3ICs5NzgsNyBAQCB2
b2lkIFJhbmdlOjppbnNlcnROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gcHJwTmV3Tm9kZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiAgICAgLy8gZG9lcyBub3QgYWxsb3cgY2hpbGRyZW4gb2YgdGhlIHR5cGUg
b2YgbmV3Tm9kZSBvciBpZiBuZXdOb2RlIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBjb250YWluZXIu
CiAKICAgICAvLyBhbiBleHRyYSBvbmUgaGVyZSAtIGlmIGEgdGV4dCBub2RlIGlzIGdvaW5nIHRv
IHNwbGl0LCBpdCBtdXN0IGhhdmUgYSBwYXJlbnQgdG8gaW5zZXJ0IGludG8KLSAgICBib29sIHN0
YXJ0SXNUZXh0ID0gaXM8VGV4dD4obV9zdGFydC5jb250YWluZXIoKSk7CisgICAgYm9vbCBzdGFy
dElzVGV4dCA9IGlzPFRleHQ+KCptX3N0YXJ0LmNvbnRhaW5lcigpKTsKICAgICBpZiAoc3RhcnRJ
c1RleHQgJiYgIW1fc3RhcnQuY29udGFpbmVyKCktPnBhcmVudE5vZGUoKSkgewogICAgICAgICBl
YyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICAgICAgcmV0dXJuOwpAQCAtMjIyNCw3ICsy
MjI0LDcgQEAgdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+JiBxdWFkcykgY29uc3QKICAgICAgICAgc2VsZWN0ZWRFbGVtZW50c1NldC5yZW1vdmUocGFy
ZW50KTsKIAogICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BO
b2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewotICAgICAgICBpZiAoaXM8
RWxlbWVudD4obm9kZSkgJiYgc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlKSAmJiAh
c2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlLT5wYXJlbnROb2RlKCkpKSB7CisgICAg
ICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkgJiYgc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlu
cyhub2RlKSAmJiAhc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlLT5wYXJlbnROb2Rl
KCkpKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1v
ZGVsT2JqZWN0ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLnJlbmRlckJveE1vZGVsT2JqZWN0
KCkpIHsKICAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBlbGVtZW50UXVhZHM7CiAg
ICAgICAgICAgICAgICAgcmVuZGVyQm94TW9kZWxPYmplY3QtPmFic29sdXRlUXVhZHMoZWxlbWVu
dFF1YWRzKTsKQEAgLTIyMzIsNyArMjIzMiw3IEBAIHZvaWQgUmFuZ2U6OmdldEJvcmRlckFuZFRl
eHRRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpIGNvbnN0CiAKICAgICAgICAgICAgICAg
ICBxdWFkcy5hcHBlbmRWZWN0b3IoZWxlbWVudFF1YWRzKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmIChpczxUZXh0Pihub2RlKSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzPFRl
eHQ+KCpub2RlKSkgewogICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBk
b3duY2FzdDxUZXh0Pigqbm9kZSkucmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0
IFJlbmRlclRleHQmIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQoKnJlbmRlcmVyKTsKICAgICAg
ICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSAobm9kZSA9PSBzdGFydENvbnRhaW5lcikgPyBt
X3N0YXJ0Lm9mZnNldCgpIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAppbmRl
eCBlN2E2NzE2ZDI5ZWViNmE1YzQzYWM0Mzk2YjNlMzFmYTI5NDFlOWRiLi5kYjFjZmI4YTNmY2Jk
OTczOGFkYmFiMzczNzUwNzQ4YWFmZWUwZjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1l
bnQuY3BwCkBAIC0zODIsMTAgKzM4MiwxMCBAQCBTdHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0
Q29udGVudCgpIGNvbnN0CiAKIFNjcmlwdEVsZW1lbnQqIHRvU2NyaXB0RWxlbWVudElmUG9zc2li
bGUoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoaXM8SFRNTFNjcmlwdEVsZW1lbnQ+KGVs
ZW1lbnQpKQorICAgIGlmIChpczxIVE1MU2NyaXB0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTFNjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpOwogCi0gICAgaWYg
KGlzPFNWR1NjcmlwdEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmIChpczxTVkdTY3JpcHRFbGVt
ZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdTY3JpcHRFbGVtZW50
PihlbGVtZW50KTsKIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgK
aW5kZXggMWJlNzU3ZjE3MmZmNjI1NTM5YWY5ZjEzMjEzMDAzNjgzNjRhMmNjYi4uYWQ4YTNlZGM3
MWJhMjc2YWVkY2U2MWEzYmZjYmI1YzUzMjExNzYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5o
CkBAIC0xMDUsNyArMTA1LDcgQEAgaW5saW5lIFNoYWRvd1Jvb3QqIE5vZGU6OnNoYWRvd1Jvb3Qo
KSBjb25zdAogaW5saW5lIENvbnRhaW5lck5vZGUqIE5vZGU6OnBhcmVudE9yU2hhZG93SG9zdE5v
ZGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc01haW5UaHJlYWRPckdDVGhyZWFkKCkpOwotICAg
IGlmIChpczxTaGFkb3dSb290Pih0aGlzKSkKKyAgICBpZiAoaXM8U2hhZG93Um9vdD4oKnRoaXMp
KQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U2hhZG93Um9vdD4oKnRoaXMpLmhvc3RFbGVtZW50
KCk7CiAgICAgcmV0dXJuIHBhcmVudE5vZGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9UZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAppbmRleCA3ZDI4
OWIwYTA5OTBiNzM3ODBjZDIxODZjZDYzNzkzYjE4Y2E1OGJlLi5kNTRiZGFlMGQxMTEzMjI4ZmYx
MDRhY2ViZTFjZTRmNGVjOTlhZjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC05NCw3ICs5NCw3IEBA
IHN0YXRpYyBjb25zdCBUZXh0KiBlYXJsaWVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUoY29u
c3QgVGV4dCogdGV4dCkKIHsKICAgICBjb25zdCBOb2RlKiBub2RlID0gdGV4dDsKICAgICB3aGls
ZSAoKG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkpIHsKLSAgICAgICAgaWYgKCFpczxU
ZXh0Pihub2RlKSkKKyAgICAgICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgdGV4dCA9IGRvd25jYXN0PFRleHQ+KG5vZGUpOwogICAgIH0KQEAgLTEw
NSw3ICsxMDUsNyBAQCBzdGF0aWMgY29uc3QgVGV4dCogbGF0ZXN0TG9naWNhbGx5QWRqYWNlbnRU
ZXh0Tm9kZShjb25zdCBUZXh0KiB0ZXh0KQogewogICAgIGNvbnN0IE5vZGUqIG5vZGUgPSB0ZXh0
OwogICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpKSB7Ci0gICAgICAgIGlm
ICghaXM8VGV4dD4obm9kZSkpCisgICAgICAgIGlmICghaXM8VGV4dD4oKm5vZGUpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIHRleHQgPSBkb3duY2FzdDxUZXh0Pihub2RlKTsKICAgICB9
CkBAIC0xNzgsNyArMTc4LDggQEAgUGFzc1JlZlB0cjxOb2RlPiBUZXh0OjpjbG9uZU5vZGUoYm9v
bCAvKmRlZXAqLykKIHN0YXRpYyBib29sIGlzU1ZHU2hhZG93VGV4dChUZXh0KiB0ZXh0KQogewog
ICAgIE5vZGUqIHBhcmVudE5vZGUgPSB0ZXh0LT5wYXJlbnROb2RlKCk7Ci0gICAgcmV0dXJuIGlz
PFNoYWRvd1Jvb3Q+KHBhcmVudE5vZGUpICYmIGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCpwYXJlbnRO
b2RlKS5ob3N0RWxlbWVudCgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0cmVmVGFnKTsKKyAgICBB
U1NFUlQocGFyZW50Tm9kZSk7CisgICAgcmV0dXJuIGlzPFNoYWRvd1Jvb3Q+KCpwYXJlbnROb2Rl
KSAmJiBkb3duY2FzdDxTaGFkb3dSb290PigqcGFyZW50Tm9kZSkuaG9zdEVsZW1lbnQoKS0+aGFz
VGFnTmFtZShTVkdOYW1lczo6dHJlZlRhZyk7CiB9CiAKIHN0YXRpYyBib29sIGlzU1ZHVGV4dChU
ZXh0KiB0ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVy
c2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNhbC5jcHAKaW5kZXgg
OWYwNzMxOWVmZWYzZWU0OGY0YzI2YzFiYmM3M2U2NTIxZjcwNzAzNi4uYWUyM2IzMTkyNTgwYmNm
MTczOTc1OGUyNGYzOTAzMGZhYjBjMmQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1RleHROb2RlVHJhdmVyc2FsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dE5vZGVU
cmF2ZXJzYWwuY3BwCkBAIC00Nyw5ICs0NywxMCBAQCBTdHJpbmcgY29udGVudHNBc1N0cmluZyhj
b25zdCBDb250YWluZXJOb2RlKiByb290KQogCiBTdHJpbmcgY29udGVudHNBc1N0cmluZyhjb25z
dCBOb2RlKiByb290KQogewotICAgIGlmIChpczxUZXh0Pihyb290KSkKKyAgICBBU1NFUlQocm9v
dCk7CisgICAgaWYgKGlzPFRleHQ+KCpyb290KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFRl
eHQ+KCpyb290KS5kYXRhKCk7Ci0gICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KHJvb3QpKQorICAg
IGlmIChpczxDb250YWluZXJOb2RlPigqcm9vdCkpCiAgICAgICAgIHJldHVybiBjb250ZW50c0Fz
U3RyaW5nKGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHJvb3QpKTsKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dE5vZGVUcmF2ZXJzYWwu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNhbC5oCmluZGV4IGI4NGEwMjM1
OTcyMGM5ODY4YmMxZDhmMzkyMDUyMGYyMmFkNjNmZTcuLjhiYWI3YjFlNjY5NjMzOTlhMGViZjI2
MGRhNTc1MDRlMTFhYzU3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9k
ZVRyYXZlcnNhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNhbC5o
CkBAIC02Niw3ICs2Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBOb2RlVHlwZT4KIGlubGluZSBUZXh0
KiBmaXJzdFRleHRDaGlsZFRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQogewogICAgIE5vZGUq
IG5vZGUgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYgIWlzPFRl
eHQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxUZXh0Pigqbm9kZSkpCiAgICAgICAg
IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgIHJldHVybiBkb3duY2FzdDxUZXh0Pihu
b2RlKTsKIH0KQEAgLTc3LDcgKzc3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgogaW5s
aW5lIFRleHQqIGZpcnN0VGV4dFdpdGhpblRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQogewog
ICAgIE5vZGUqIG5vZGUgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKG5vZGUg
JiYgIWlzPFRleHQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxUZXh0Pigqbm9kZSkp
CiAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGN1cnJlbnQpOwogICAg
IHJldHVybiBkb3duY2FzdDxUZXh0Pihub2RlKTsKIH0KQEAgLTg4LDcgKzg4LDcgQEAgdGVtcGxh
dGUgPGNsYXNzIE5vZGVUeXBlPgogaW5saW5lIFRleHQqIHRyYXZlcnNlTmV4dFRleHRUZW1wbGF0
ZShOb2RlVHlwZSogY3VycmVudCkKIHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChjdXJyZW50KTsKLSAgICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4obm9kZSkpCisgICAg
d2hpbGUgKG5vZGUgJiYgIWlzPFRleHQ+KCpub2RlKSkKICAgICAgICAgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgcmV0dXJuIGRvd25jYXN0PFRleHQ+KG5vZGUpOwogfQpA
QCAtOTksNyArOTksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+CiBpbmxpbmUgVGV4dCog
dHJhdmVyc2VOZXh0VGV4dFRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBz
dGF5V2l0aGluKQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1cnJl
bnQsIHN0YXlXaXRoaW4pOwotICAgIHdoaWxlIChub2RlICYmICFpczxUZXh0Pihub2RlKSkKKyAg
ICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4oKm5vZGUpKQogICAgICAgICBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChub2RlLCBzdGF5V2l0aGluKTsKICAgICByZXR1cm4gZG93bmNhc3Q8VGV4
dD4obm9kZSk7CiB9CkBAIC0xMDksNyArMTA5LDcgQEAgaW5saW5lIFRleHQqIG5leHQoY29uc3Qg
VGV4dCogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVyc2UK
IGlubGluZSBUZXh0KiBuZXh0U2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50KQogewogICAgIE5v
ZGUqIG5vZGUgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgIHdoaWxlIChub2RlICYmICFp
czxUZXh0Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4oKm5vZGUpKQogICAg
ICAgICBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICByZXR1cm4gZG93bmNhc3Q8VGV4
dD4obm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRv
cHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAKaW5kZXgg
MDQ1ZTg4ZTQzMTk3YjgzZGFmYjhlYzNkOWQyNTMxMmI1ZmQ0N2FkMy4uMGYxNzUyNzdlYzA5YWQ5
ZjIzODNkOTk5ODRkZGIyNzRkMzU2NjQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZUFkb3B0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVB
ZG9wdGVyLmNwcApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVU
cmVlVG9OZXdTY29wZShOb2RlKiByb290KSBjb25zdAogICAgICAgICAgICAgICAgIHJhcmVEYXRh
LT5ub2RlTGlzdHMoKS0+YWRvcHRUcmVlU2NvcGUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
ICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKG5vZGUtPmhhc1N5bnRoZXRpY0F0
dHJDaGlsZE5vZGVzKCkpIHsKQEAgLTEyNCw3ICsxMjQsNyBAQCBpbmxpbmUgdm9pZCBUcmVlU2Nv
cGVBZG9wdGVyOjptb3ZlTm9kZVRvTmV3RG9jdW1lbnQoTm9kZSogbm9kZSwgRG9jdW1lbnQqIG9s
ZERvYwogICAgIGlmIChvbGREb2N1bWVudCkKICAgICAgICAgb2xkRG9jdW1lbnQtPm1vdmVOb2Rl
SXRlcmF0b3JzVG9OZXdEb2N1bWVudChub2RlLCBuZXdEb2N1bWVudCk7CiAKLSAgICBpZiAoaXM8
U2hhZG93Um9vdD4obm9kZSkpCisgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KCpub2RlKSkKICAgICAg
ICAgZG93bmNhc3Q8U2hhZG93Um9vdD4oKm5vZGUpLnNldERvY3VtZW50U2NvcGUobmV3RG9jdW1l
bnQpOwogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCmluZGV4IGEyY2M1YzkyZTFhZDg3YTNmYTFhYzc5
NjU5ZWYyMGYxODFmNWFlZWIuLmY3NDBlYzNhYzY0N2VkMGM2OWYxOTgzOWFhMDM0ZGMxN2FjYzUw
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBzdGF0aWMgYm9vbCBpc05ld0xpbmVBdFBv
c2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBOb2RlKiB0ZXh0Tm9kZSA9
IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKICAgICBpbnQgb2Zmc2V0ID0gcG9zaXRpb24ub2Zm
c2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgaWYgKCF0ZXh0Tm9kZSB8fCAhaXM8VGV4dD4odGV4
dE5vZGUpIHx8IG9mZnNldCA8IDAgfHwgb2Zmc2V0ID49IHRleHROb2RlLT5tYXhDaGFyYWN0ZXJP
ZmZzZXQoKSkKKyAgICBpZiAoIWlzPFRleHQ+KHRleHROb2RlKSB8fCBvZmZzZXQgPCAwIHx8IG9m
ZnNldCA+PSB0ZXh0Tm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMjY3LDE4ICsyNjcsMTggQEAg
VmlzaWJsZVBvc2l0aW9uIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6ZW5kT2ZOZXh0UGFyYWdy
YWhTcGxpdHRpbmdUZXh0Tm9kZXNJZk4KICAgICAvLyBBdm9pZCB0aGlzIGJ5IHNwbGl0dGluZyAi
XG4iCiAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCAxKTsKIAotICAgIGlmICh0ZXh0ID09IHN0YXJ0
LmNvbnRhaW5lck5vZGUoKSAmJiB0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSAmJiBpczxUZXh0Pih0
ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSkpIHsKKyAgICBpZiAodGV4dCA9PSBzdGFydC5jb250YWlu
ZXJOb2RlKCkgJiYgaXM8VGV4dD4odGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpKSB7CiAgICAgICAg
IEFTU0VSVChzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IHBvc2l0aW9uLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgc3RhcnQgPSBQb3NpdGlvbihkb3duY2FzdDxUZXh0
Pih0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgp
KTsKICAgICB9Ci0gICAgaWYgKHRleHQgPT0gZW5kLmNvbnRhaW5lck5vZGUoKSAmJiB0ZXh0LT5w
cmV2aW91c1NpYmxpbmcoKSAmJiBpczxUZXh0Pih0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSkpIHsK
KyAgICBpZiAodGV4dCA9PSBlbmQuY29udGFpbmVyTm9kZSgpICYmIGlzPFRleHQ+KHRleHQtPnBy
ZXZpb3VzU2libGluZygpKSkgewogICAgICAgICBBU1NFUlQoZW5kLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpIDwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICBlbmQg
PSBQb3NpdGlvbihkb3duY2FzdDxUZXh0Pih0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSksIGVuZC5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgfQogICAgIGlmICh0ZXh0ID09IG1fZW5kT2ZM
YXN0UGFyYWdyYXBoLmNvbnRhaW5lck5vZGUoKSkgewogICAgICAgICBpZiAobV9lbmRPZkxhc3RQ
YXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSkgewogICAgICAgICAgICAgLy8gV2UgY2FuIG9ubHkgZml4IGVuZE9mTGFzdFBh
cmFncmFwaCBpZiB0aGUgcHJldmlvdXMgbm9kZSB3YXMgc3RpbGwgdGV4dCBhbmQgaGFzbid0IGJl
ZW4gbW9kaWZpZWQgYnkgc2NyaXB0LgotICAgICAgICAgICAgaWYgKGlzPFRleHQ+KHRleHQtPnBy
ZXZpb3VzU2libGluZygpKQorICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCp0ZXh0LT5wcmV2aW91
c1NpYmxpbmcoKSkKICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9l
bmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpIDw9IGRvd25jYXN0PFRl
eHQ+KHRleHQtPnByZXZpb3VzU2libGluZygpKS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAg
bV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBQb3NpdGlvbihkb3duY2FzdDxUZXh0Pih0ZXh0LT5wcmV2
aW91c1NpYmxpbmcoKSksIG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpKTsKICAgICAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCmluZGV4IDk0Mjc1MTY3NThhYTgwN2ZjNTFhZmRjZTQ3NDI3NjBiNzllMWFj
NjcuLjY2YmVmZjQxNzVkMDdhMGNjNzFlMmE3ODg4N2RhNjA5ZGQ0Y2E0NzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC02OCw3ICs2OCw3IEBA
IHN0YXRpYyBTdHJpbmcmIHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkKIAogYm9vbCBpc0xlZ2FjeUFw
cGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxI
VE1MU3BhbkVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8SFRNTFNwYW5FbGVtZW50Pihub2Rl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTcGFu
RWxlbWVudD4oKm5vZGUpLmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBzdHlsZVNwYW5D
bGFzc1N0cmluZygpOwpAQCAtOTIsMjEgKzkyLDIxIEBAIHN0YXRpYyBib29sIGhhc05vQXR0cmli
dXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwgU2hv
CiAKIGJvb2wgaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFpczxIVE1MU3BhbkVsZW1l
bnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTFNwYW5FbGVtZW50PihlbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxl
QXR0cmlidXRlKGRvd25jYXN0PEhUTUxTcGFuRWxlbWVudD4oZWxlbWVudCksIEFsbG93Tm9uRW1w
dHlTdHlsZUF0dHJpYnV0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NwYW5XaXRob3V0
QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBpZiAoIWVsZW1lbnQgfHwgIWlzPEhUTUxTcGFuRWxlbWVudD4oZWxlbWVudCkpCisgICAg
aWYgKCFpczxIVE1MU3BhbkVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoZG93bmNhc3Q8
SFRNTFNwYW5FbGVtZW50PihlbGVtZW50KSwgU3R5bGVBdHRyaWJ1dGVTaG91bGRCZUVtcHR5KTsK
IH0KIAogYm9vbCBpc0VtcHR5Rm9udFRhZyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTaG91bGRT
dHlsZUF0dHJpYnV0ZUJlRW1wdHkgc2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5KQogewotICAg
IGlmICghZWxlbWVudCB8fCAhaXM8SFRNTEZvbnRFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAo
IWlzPEhUTUxGb250RWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHJldHVybiBoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0cmlidXRlKGRvd25jYXN0PEhU
TUxGb250RWxlbWVudD4oZWxlbWVudCksIHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSk7CkBA
IC0yNzcsNyArMjc3LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxl
KEVkaXRpbmdTdHlsZSAqc3R5bGUpCiAgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gbmV3Qmxv
Y2s7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoIWJsb2NrIHx8IGlzPEhUTUxF
bGVtZW50PigqYmxvY2spKTsKLSAgICAgICAgICAgIGlmIChibG9jayAmJiBpczxIVE1MRWxlbWVu
dD4oKmJsb2NrKSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PihibG9jay5nZXQo
KSkpIHsKICAgICAgICAgICAgICAgICByZW1vdmVDU1NTdHlsZShzdHlsZSwgZG93bmNhc3Q8SFRN
TEVsZW1lbnQ+KGJsb2NrLmdldCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3JlbW92ZU9u
bHkpCiAgICAgICAgICAgICAgICAgICAgIGFkZEJsb2NrU3R5bGUoc3R5bGVDaGFuZ2UsIGRvd25j
YXN0PEhUTUxFbGVtZW50PihibG9jay5nZXQoKSkpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRpdGluZ1N0
eWxlKiBzdHlsZSkKICAgICBOb2RlKiBsYXN0U3R5bGVkTm9kZSA9IDA7CiAgICAgZm9yIChOb2Rl
KiBub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50Owot
ICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChpczxIVE1M
RWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgICAgICAvLyBPbmx5IHdvcmsgb24gZnVsbHkgc2Vs
ZWN0ZWQgbm9kZXMuCiAgICAgICAgICAgICBpZiAoIW5vZGVGdWxseVNlbGVjdGVkKG5vZGUsIHN0
YXJ0LCBlbmQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDIwLDcgKzQyMCw3IEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRp
dGluZ1N0eWxlKiBzdHlsZSkKIAogc3RhdGljIENvbnRhaW5lck5vZGUqIGR1bW15U3BhbkFuY2Vz
dG9yRm9yTm9kZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIHdoaWxlIChub2RlICYmICghaXM8
RWxlbWVudD4obm9kZSkgfHwgIWlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHlsZUF0dHJpYnV0
ZShkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpKQorICAgIHdoaWxlIChub2RlICYmICghaXM8RWxl
bWVudD4oKm5vZGUpIHx8ICFpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUo
ZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsKICAgICAKICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPnBhcmVudE5vZGUoKSA6IG51bGxw
dHI7CkBAIC00NzMsNyArNDczLDcgQEAgSFRNTEVsZW1lbnQqIEFwcGx5U3R5bGVDb21tYW5kOjpz
cGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShOb2RlKiBub2RlLCBib29sIGIKICAgICBXcml0
aW5nRGlyZWN0aW9uIGhpZ2hlc3RBbmNlc3RvckRpcmVjdGlvbjsKICAgICBpZiAoYWxsb3dlZERp
cmVjdGlvbiAhPSBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbgogICAgICAgICAmJiBoaWdoZXN0QW5j
ZXN0b3JVbmljb2RlQmlkaSAhPSBDU1NWYWx1ZUJpZGlPdmVycmlkZQotICAgICAgICAmJiBpczxI
VE1MRWxlbWVudD4oaGlnaGVzdEFuY2VzdG9yV2l0aFVuaWNvZGVCaWRpKQorICAgICAgICAmJiBp
czxIVE1MRWxlbWVudD4oKmhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSkKICAgICAgICAg
JiYgRWRpdGluZ1N0eWxlOjpjcmVhdGUoaGlnaGVzdEFuY2VzdG9yV2l0aFVuaWNvZGVCaWRpLCBF
ZGl0aW5nU3R5bGU6OkFsbFByb3BlcnRpZXMpLT50ZXh0RGlyZWN0aW9uKGhpZ2hlc3RBbmNlc3Rv
ckRpcmVjdGlvbikKICAgICAgICAgJiYgaGlnaGVzdEFuY2VzdG9yRGlyZWN0aW9uID09IGFsbG93
ZWREaXJlY3Rpb24pIHsKICAgICAgICAgaWYgKCFuZXh0SGlnaGVzdEFuY2VzdG9yV2l0aFVuaWNv
ZGVCaWRpKQpAQCAtNTA1LDcgKzUwNSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92
ZUVtYmVkZGluZ1VwVG9FbmNsb3NpbmdCbG9jayhOb2RlKiBub2RlLCBOb2RlKiB1bnNwCiAgICAg
Tm9kZSogcGFyZW50ID0gbnVsbHB0cjsKICAgICBmb3IgKE5vZGUqIGFuY2VzdG9yID0gbm9kZS0+
cGFyZW50Tm9kZSgpOyBhbmNlc3RvciAhPSBibG9jayAmJiBhbmNlc3RvciAhPSB1bnNwbGl0QW5j
ZXN0b3I7IGFuY2VzdG9yID0gcGFyZW50KSB7CiAgICAgICAgIHBhcmVudCA9IGFuY2VzdG9yLT5w
YXJlbnROb2RlKCk7Ci0gICAgICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpKQor
ICAgICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCphbmNlc3RvcikpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBTdHlsZWRFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8U3R5
bGVkRWxlbWVudD4oKmFuY2VzdG9yKTsKQEAgLTk4MCw3ICs5ODAsNyBAQCBIVE1MRWxlbWVudCog
QXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0
eWxlKEVkaXRpbgogICAgIE5vZGUqIHVuc3BsaXR0YWJsZUVsZW1lbnQgPSB1bnNwbGl0dGFibGVF
bGVtZW50Rm9yUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpKTsKIAog
ICAgIGZvciAoTm9kZSogYW5jZXN0b3IgPSBub2RlOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNl
c3Rvci0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oYW5jZXN0
b3IpICYmIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGRvd25jYXN0
PEhUTUxFbGVtZW50PihhbmNlc3RvcikpKQorICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCph
bmNlc3RvcikgJiYgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZG93
bmNhc3Q8SFRNTEVsZW1lbnQ+KGFuY2VzdG9yKSkpCiAgICAgICAgICAgICByZXN1bHQgPSBkb3du
Y2FzdDxIVE1MRWxlbWVudD4oYW5jZXN0b3IpOwogICAgICAgICAvLyBTaG91bGQgc3RvcCBhdCB0
aGUgZWRpdGFibGUgcm9vdCAoY2Fubm90IGNyb3NzIGVkaXRpbmcgYm91bmRhcnkpIGFuZAogICAg
ICAgICAvLyBhbHNvIHN0b3AgYXQgdGhlIHVuc3BsaXR0YWJsZSBlbGVtZW50IHRvIGJlIGNvbnNp
c3RlbnQgd2l0aCBvdGhlciBVQXMKQEAgLTk5NywxOCArOTk3LDE4IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUqIG5vZGUsIEVkaXRpbmdT
dHlsZSogc3R5CiAKICAgICBub2RlLT5kb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsK
IAotICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAhbm9kZS0+cmVuZGVyZXIo
KSB8fCBpczxIVE1MSUZyYW1lRWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFzdHlsZSB8fCBzdHls
ZS0+aXNFbXB0eSgpIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8IGlzPEhUTUxJRnJhbWVFbGVtZW50
Pigqbm9kZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG5l
d0lubGluZVN0eWxlID0gc3R5bGU7Ci0gICAgaWYgKGlzPEhUTUxFbGVtZW50Pihub2RlKSAmJiBk
b3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSktPmlubGluZVN0eWxlKCkpIHsKKyAgICBpZiAoaXM8
SFRNTEVsZW1lbnQ+KCpub2RlKSAmJiBkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSktPmlubGlu
ZVN0eWxlKCkpIHsKICAgICAgICAgbmV3SW5saW5lU3R5bGUgPSBzdHlsZS0+Y29weSgpOwogICAg
ICAgICBuZXdJbmxpbmVTdHlsZS0+bWVyZ2VJbmxpbmVTdHlsZU9mRWxlbWVudChkb3duY2FzdDxI
VE1MRWxlbWVudD4obm9kZSksIEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMpOwogICAgIH0K
IAogICAgIC8vIFNpbmNlIGFkZElubGluZVN0eWxlSWZOZWVkZWQgY2FuJ3QgYWRkIHN0eWxlcyB0
byBibG9jay1mbG93IHJlbmRlciBvYmplY3RzLCBhZGQgc3R5bGUgYXR0cmlidXRlIGluc3RlYWQu
CiAgICAgLy8gRklYTUU6IGFwcGx5SW5saW5lU3R5bGVUb1JhbmdlIHNob3VsZCBiZSB1c2VkIGhl
cmUgaW5zdGVhZC4KLSAgICBpZiAoKG5vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2tGbG93
KCkgfHwgbm9kZS0+aGFzQ2hpbGROb2RlcygpKSAmJiBpczxIVE1MRWxlbWVudD4obm9kZSkpIHsK
KyAgICBpZiAoKG5vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2tGbG93KCkgfHwgbm9kZS0+
aGFzQ2hpbGROb2RlcygpKSAmJiBpczxIVE1MRWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgIHNl
dE5vZGVBdHRyaWJ1dGUoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpLCBzdHlsZUF0dHIsIG5l
d0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xMjA4LDcgKzEyMDgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRB
dEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbgogICAgIHNwbGl0
VGV4dE5vZGUoJnRleHQsIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAKICAgICBOb2Rl
KiBwcmV2Tm9kZSA9IHRleHQucHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgaWYgKCFwcmV2Tm9kZSB8
fCAhaXM8VGV4dD4ocHJldk5vZGUpKQorICAgIGlmICghaXM8VGV4dD4ocHJldk5vZGUpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBQb3NpdGlvbiBuZXdTdGFydCA9IHNob3VsZFVwZGF0ZVN0YXJ0
ID8gUG9zaXRpb24oZG93bmNhc3Q8VGV4dD4ocHJldk5vZGUpLCBzdGFydC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSkgOiBzdGFydDsKQEAgLTEyNDAsNyArMTI0MCw3IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0CiAgICAgaWYgKCFwYXJlbnRFbGVtZW50IHx8ICFwYXJlbnRFbGVtZW50LT5wcmV2
aW91c1NpYmxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIE5vZGUqIGZpcnN0VGV4dE5vZGUg
PSBwYXJlbnRFbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKS0+bGFzdENoaWxkKCk7Ci0gICAgaWYg
KCFmaXJzdFRleHROb2RlIHx8ICFpczxUZXh0PihmaXJzdFRleHROb2RlKSkKKyAgICBpZiAoIWlz
PFRleHQ+KGZpcnN0VGV4dE5vZGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBQb3NpdGlvbiBu
ZXdTdGFydCA9IHNob3VsZFVwZGF0ZVN0YXJ0ID8gUG9zaXRpb24oZG93bmNhc3Q8VGV4dD4oZmly
c3RUZXh0Tm9kZSksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA6IHN0YXJ0OwpAQCAt
MTI0OSw3ICsxMjQ5LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVu
dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXQKIAogYm9vbCBBcHBseVN0
eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBFZGl0
aW5nU3R5bGUqIHN0eWxlKQogewotICAgIGlmICghZWxlbWVudCB8fCAhaXM8SFRNTEVsZW1lbnQ+
KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxl
bWVudChzdHlsZSwgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKTsKQEAgLTEzNTksMTMg
KzEzNTksMTQgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRo
RWxlbWVudChQYXNzUmVmUHRyPE5vZGU+IHBhc3NlZFN0YXIKIAogICAgIFJlZlB0cjxOb2RlPiBu
ZXh0U2libGluZyA9IGVsZW1lbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgUmVmUHRyPE5vZGU+IHBy
ZXZpb3VzU2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzU2libGluZygpOwotICAgIGlmIChuZXh0
U2libGluZyAmJiBpczxFbGVtZW50PigqbmV4dFNpYmxpbmcpICYmIG5leHRTaWJsaW5nLT5oYXNF
ZGl0YWJsZVN0eWxlKCkKKyAgICBpZiAoaXM8RWxlbWVudD4obmV4dFNpYmxpbmcuZ2V0KCkpICYm
IG5leHRTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkKICAgICAgICAgJiYgYXJlSWRlbnRpY2Fs
RWxlbWVudHMoZWxlbWVudC5nZXQoKSwgZG93bmNhc3Q8RWxlbWVudD4obmV4dFNpYmxpbmcuZ2V0
KCkpKSkKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCBkb3du
Y2FzdDxFbGVtZW50PihuZXh0U2libGluZy5nZXQoKSkpOwogCi0gICAgaWYgKHByZXZpb3VzU2li
bGluZyAmJiBpczxFbGVtZW50PigqcHJldmlvdXNTaWJsaW5nKSAmJiBwcmV2aW91c1NpYmxpbmct
Pmhhc0VkaXRhYmxlU3R5bGUoKSkgeworICAgIGlmIChpczxFbGVtZW50PihwcmV2aW91c1NpYmxp
bmcuZ2V0KCkpICYmIHByZXZpb3VzU2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAg
ICAgIE5vZGUqIG1lcmdlZEVsZW1lbnQgPSBwcmV2aW91c1NpYmxpbmctPm5leHRTaWJsaW5nKCk7
Ci0gICAgICAgIGlmIChpczxFbGVtZW50PihtZXJnZWRFbGVtZW50KSAmJiBtZXJnZWRFbGVtZW50
LT5oYXNFZGl0YWJsZVN0eWxlKCkKKyAgICAgICAgQVNTRVJUKG1lcmdlZEVsZW1lbnQpOworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oKm1lcmdlZEVsZW1lbnQpICYmIG1lcmdlZEVsZW1lbnQtPmhh
c0VkaXRhYmxlU3R5bGUoKQogICAgICAgICAgICAgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoZG93
bmNhc3Q8RWxlbWVudD4ocHJldmlvdXNTaWJsaW5nLmdldCgpKSwgZG93bmNhc3Q8RWxlbWVudD4o
bWVyZ2VkRWxlbWVudCkpKQogICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhkb3du
Y2FzdDxFbGVtZW50PihwcmV2aW91c1NpYmxpbmcuZ2V0KCkpLCBkb3duY2FzdDxFbGVtZW50Piht
ZXJnZWRFbGVtZW50KSk7CiAgICAgfQpAQCAtMTQzMSwxMCArMTQzMiwxMCBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlQ2hhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gcGFz
c2VkU3RhcnQsIFBhcwogICAgIEhUTUxGb250RWxlbWVudCogZm9udENvbnRhaW5lciA9IG51bGxw
dHI7CiAgICAgSFRNTEVsZW1lbnQqIHN0eWxlQ29udGFpbmVyID0gbnVsbHB0cjsKICAgICBmb3Ig
KE5vZGUqIGNvbnRhaW5lciA9IHN0YXJ0Tm9kZS5nZXQoKTsgY29udGFpbmVyICYmIHN0YXJ0Tm9k
ZSA9PSBlbmROb2RlOyBjb250YWluZXIgPSBjb250YWluZXItPmZpcnN0Q2hpbGQoKSkgewotICAg
ICAgICBpZiAoaXM8SFRNTEZvbnRFbGVtZW50Pihjb250YWluZXIpKQorICAgICAgICBpZiAoaXM8
SFRNTEZvbnRFbGVtZW50PigqY29udGFpbmVyKSkKICAgICAgICAgICAgIGZvbnRDb250YWluZXIg
PSBkb3duY2FzdDxIVE1MRm9udEVsZW1lbnQ+KGNvbnRhaW5lcik7Ci0gICAgICAgIGJvb2wgc3R5
bGVDb250YWluZXJJc05vdFNwYW4gPSAhc3R5bGVDb250YWluZXIgfHwgIWlzPEhUTUxTcGFuRWxl
bWVudD4oc3R5bGVDb250YWluZXIpOwotICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KGNvbnRh
aW5lcikgJiYgKGlzPEhUTUxTcGFuRWxlbWVudD4oY29udGFpbmVyKSB8fCAoc3R5bGVDb250YWlu
ZXJJc05vdFNwYW4gJiYgY29udGFpbmVyLT5oYXNDaGlsZE5vZGVzKCkpKSkKKyAgICAgICAgYm9v
bCBzdHlsZUNvbnRhaW5lcklzTm90U3BhbiA9ICFpczxIVE1MU3BhbkVsZW1lbnQ+KHN0eWxlQ29u
dGFpbmVyKTsKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PigqY29udGFpbmVyKSAmJiAoaXM8
SFRNTFNwYW5FbGVtZW50PigqY29udGFpbmVyKSB8fCAoc3R5bGVDb250YWluZXJJc05vdFNwYW4g
JiYgY29udGFpbmVyLT5oYXNDaGlsZE5vZGVzKCkpKSkKICAgICAgICAgICAgIHN0eWxlQ29udGFp
bmVyID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGNvbnRhaW5lcik7CiAgICAgICAgIGlmICghY29u
dGFpbmVyLT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE1MjgsNyArMTUy
OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2RlcyhOb2RlKiBu
b2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0ZXh0Tm9kZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVGV4dCogY2hpbGRUZXh0ID0gdGV4
dE5vZGVzW2ldLmdldCgpOwogICAgICAgICBOb2RlKiBuZXh0ID0gY2hpbGRUZXh0LT5uZXh0U2li
bGluZygpOwotICAgICAgICBpZiAoIW5leHQgfHwgIWlzPFRleHQ+KG5leHQpKQorICAgICAgICBp
ZiAoIWlzPFRleHQ+KG5leHQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgCiAgICAgICAg
IFRleHQmIG5leHRUZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5leHQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKaW5kZXggNTUyMzNjNWJj
OTk4NDQzOGFhM2ZiNWY5ZWE5M2RiYWVhOWFhOWMwZS4uNjQ0ZDM0NWZlZjE5ODIzYjE5NGY0MzM5
NzFjOTYxZjM5MGI1NTU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVh
a0Jsb2NrcXVvdGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFr
QmxvY2txdW90ZUNvbW1hbmQuY3BwCkBAIC0xMDQsOSArMTA0LDkgQEAgdm9pZCBCcmVha0Jsb2Nr
cXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICAvLyBzdGFydE5vZGUgaXMgdGhlIGZp
cnN0IG5vZGUgdGhhdCB3ZSBuZWVkIHRvIG1vdmUgdG8gdGhlIG5ldyBibG9ja3F1b3RlLgogICAg
IE5vZGUqIHN0YXJ0Tm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOwotICAgICAgICAKKyAgICBB
U1NFUlQoc3RhcnROb2RlKTsKICAgICAvLyBTcGxpdCBhdCBwb3MgaWYgaW4gdGhlIG1pZGRsZSBv
ZiBhIHRleHQgbm9kZS4KLSAgICBpZiAoaXM8VGV4dD4oc3RhcnROb2RlKSkgeworICAgIGlmIChp
czxUZXh0Pigqc3RhcnROb2RlKSkgewogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0
PFRleHQ+KCpzdGFydE5vZGUpOwogICAgICAgICBpZiAoKHVuc2lnbmVkKXBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpID49IHRleHROb2RlLmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBzdGFy
dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDIxNjczY2QwZjNmMzdk
ZmUzZTNhZDFhZWRhM2NkMTQ2MWQ0YmNhMGIuLjM0NjRjMjc1NTI5NDZlZDI5ODg3MjliNzVmMGY4
YmQzNDkyOGZmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCkBAIC0zMjQsNyArMzI0LDggQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6aW5zZXJ0TGluZUJyZWFrKCkKIAogYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aXNSZW1v
dmFibGVCbG9jayhjb25zdCBOb2RlKiBub2RlKQogewotICAgIGlmICghaXM8SFRNTERpdkVsZW1l
bnQ+KG5vZGUpKQorICAgIEFTU0VSVChub2RlKTsKKyAgICBpZiAoIWlzPEhUTUxEaXZFbGVtZW50
Pigqbm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIHBhcmVudE5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCk7CkBAIC0zNzgsNyArMzc5LDcgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0KFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIGNv
bnN0IFBvc2kKICAgICAgICAgICAgIGFwcGVuZE5vZGUoaW5zZXJ0Q2hpbGQsIGRvd25jYXN0PENv
bnRhaW5lck5vZGU+KHJlZkNoaWxkKSk7CiAgICAgfSBlbHNlIGlmIChjYXJldE1pbk9mZnNldChy
ZWZDaGlsZCkgPj0gb2Zmc2V0KQogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGluc2VydENoaWxk
LCByZWZDaGlsZCk7Ci0gICAgZWxzZSBpZiAoaXM8VGV4dD4ocmVmQ2hpbGQpICYmIGNhcmV0TWF4
T2Zmc2V0KHJlZkNoaWxkKSA+IG9mZnNldCkgeworICAgIGVsc2UgaWYgKGlzPFRleHQ+KCpyZWZD
aGlsZCkgJiYgY2FyZXRNYXhPZmZzZXQocmVmQ2hpbGQpID4gb2Zmc2V0KSB7CiAgICAgICAgIHNw
bGl0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4ocmVmQ2hpbGQpLCBvZmZzZXQpOwogCiAgICAgICAg
IC8vIE11dGF0aW9uIGV2ZW50cyAoYnVnIDIyNjM0KSBmcm9tIHRoZSB0ZXh0IG5vZGUgaW5zZXJ0
aW9uIG1heSBoYXZlIHJlbW92ZWQgdGhlIHJlZkNoaWxkCkBAIC02NzgsNyArNjc5LDcgQEAgYm9v
bCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2hvdWxkUmViYWxhbmNlTGVhZGluZ1doaXRlc3BhY2VG
b3IoY29uc3QgU3RyaW5nJiB0ZXgKIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNhblJlYmFs
YW5jZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9
IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgp
ICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgIW5vZGUgfHwgIWlzPFRl
eHQ+KG5vZGUpKQorICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBv
c2l0aW9uSXNPZmZzZXRJbkFuY2hvciB8fCAhaXM8VGV4dD4obm9kZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwpA
QCAtNzUwLDcgKzc1MSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdo
aXRlc3BhY2VPblRleHRTdWJzdHJpbmcoUGFzc1JlZlB0cjxUZXh0PiBwCiB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxpdChQb3NpdGlv
biYgcG9zaXRpb24pCiB7CiAgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2Rl
KCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxUZXh0Pihub2RlKSkKKyAgICBpZiAoIWlzPFRleHQ+
KG5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxU
ZXh0Pigqbm9kZSk7CiAgICAgCkBAIC03NjksOSArNzcwLDkgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQoUG9zaXRpb24mIHBv
c2l0aW8KICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNWaXNpYmxlUG9zKHZpc2libGVQb3Mu
cHJldmlvdXMoKSk7CiAgICAgUG9zaXRpb24gcHJldmlvdXMocHJldmlvdXNWaXNpYmxlUG9zLmRl
ZXBFcXVpdmFsZW50KCkpOwogICAgIAotICAgIGlmIChkZXByZWNhdGVkSXNDb2xsYXBzaWJsZVdo
aXRlc3BhY2UocHJldmlvdXNWaXNpYmxlUG9zLmNoYXJhY3RlckFmdGVyKCkpICYmIGlzPFRleHQ+
KHByZXZpb3VzLmRlcHJlY2F0ZWROb2RlKCkpICYmICFpczxIVE1MQlJFbGVtZW50PihwcmV2aW91
cy5kZXByZWNhdGVkTm9kZSgpKSkKKyAgICBpZiAoZGVwcmVjYXRlZElzQ29sbGFwc2libGVXaGl0
ZXNwYWNlKHByZXZpb3VzVmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBpczxUZXh0Pigq
cHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPEhUTUxCUkVsZW1lbnQ+KCpwcmV2aW91
cy5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5n
TWFya2Vycyhkb3duY2FzdDxUZXh0PihwcmV2aW91cy5kZXByZWNhdGVkTm9kZSgpKSwgcHJldmlv
dXMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygp
KTsKLSAgICBpZiAoZGVwcmVjYXRlZElzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHZpc2libGVQb3Mu
Y2hhcmFjdGVyQWZ0ZXIoKSkgJiYgaXM8VGV4dD4ocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkg
JiYgIWlzPEhUTUxCUkVsZW1lbnQ+KHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKQorICAgIGlm
IChkZXByZWNhdGVkSXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UodmlzaWJsZVBvcy5jaGFyYWN0ZXJB
ZnRlcigpKSAmJiBpczxUZXh0PigqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPEhU
TUxCUkVsZW1lbnQ+KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmVwbGFj
ZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyhkb3duY2FzdDxUZXh0Pihwb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9u
QnJlYWtpbmdTcGFjZVN0cmluZygpKTsKIH0KIApAQCAtODc3LDcgKzg3OCw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KGNvbnN0IFBvc2l0aW9u
JiBzdGFydCwgY29uc3QKIAogICAgIFZlY3RvcjxSZWZQdHI8VGV4dD4+IG5vZGVzOwogICAgIGZv
ciAoTm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkKKyAg
ICAgICAgaWYgKGlzPFRleHQ+KCpub2RlKSkKICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChkb3du
Y2FzdDxUZXh0Pihub2RlKSk7CiAgICAgICAgIGlmIChub2RlID09IGVuZC5kZXByZWNhdGVkTm9k
ZSgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC05NTEsNyArOTUyLDcgQEAgdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdChjb25zdCBQb3NpdGlvbiYgcCkKICAg
ICBBU1NFUlQobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihwKSk7CiAgICAgCiAgICAgLy8gV2Ug
YXJlIGNlcnRhaW4gdGhhdCB0aGUgcG9zaXRpb24gaXMgYXQgYSBsaW5lIGJyZWFrLCBidXQgaXQg
bWF5IGJlIGEgYnIgb3IgYSBwcmVzZXJ2ZWQgbmV3bGluZS4KLSAgICBpZiAoaXM8SFRNTEJSRWxl
bWVudD4ocC5hbmNob3JOb2RlKCkpKSB7CisgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpwLmFu
Y2hvck5vZGUoKSkpIHsKICAgICAgICAgcmVtb3ZlTm9kZShwLmFuY2hvck5vZGUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xMTIwLDggKzExMjEsOSBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpjbGVhbnVwQWZ0ZXJEZWxldGlvbihWaXNpYmxlUG9zaXRpb24gZGVzdGluYXRp
b24pCiAgICAgICAgIC8vIE5vdGU6IFdlIHdhbnQgdGhlIHJpZ2h0bW9zdCBjYW5kaWRhdGUuCiAg
ICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gY2FyZXRBZnRlckRlbGV0ZS5kZWVwRXF1aXZhbGVu
dCgpLmRvd25zdHJlYW0oKTsKICAgICAgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0
ZWROb2RlKCk7CisgICAgICAgIEFTU0VSVChub2RlKTsKICAgICAgICAgLy8gTm9ybWFsbHkgZGVs
ZXRpb24gd2lsbCBsZWF2ZSBhIGJyIGFzIGEgcGxhY2Vob2xkZXIuCi0gICAgICAgIGlmIChpczxI
VE1MQlJFbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpub2Rl
KSkKICAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlKTsKICAgICAg
ICAgLy8gSWYgdGhlIHNlbGVjdGlvbiB0byBtb3ZlIHdhcyBlbXB0eSBhbmQgaW4gYW4gZW1wdHkg
YmxvY2sgdGhhdCAKICAgICAgICAgLy8gZG9lc24ndCByZXF1aXJlIGEgcGxhY2Vob2xkZXIgdG8g
cHJvcCBpdHNlbGYgb3BlbiAobGlrZSBhIGJvcmRlcmVkCkBAIC0xMzQ3LDkgKzEzNDksOSBAQCBi
b29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlMaXN0SXRlbSgpCiAgICAg
ICAgIHx8IGxpc3ROb2RlID09IGVtcHR5TGlzdEl0ZW0tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0Jsb2NrID0g
MDsKKyAgICBSZWZQdHI8RWxlbWVudD4gbmV3QmxvY2s7CiAgICAgaWYgKENvbnRhaW5lck5vZGUq
IGJsb2NrRW5jbG9zaW5nTGlzdCA9IGxpc3ROb2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAg
aWYgKGlzPEhUTUxMSUVsZW1lbnQ+KGJsb2NrRW5jbG9zaW5nTGlzdCkpIHsgLy8gbGlzdE5vZGUg
aXMgaW5zaWRlIGFub3RoZXIgbGlzdCBpdGVtCisgICAgICAgIGlmIChpczxIVE1MTElFbGVtZW50
PigqYmxvY2tFbmNsb3NpbmdMaXN0KSkgeyAvLyBsaXN0Tm9kZSBpcyBpbnNpZGUgYW5vdGhlciBs
aXN0IGl0ZW0KICAgICAgICAgICAgIGlmICh2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoYmxvY2tF
bmNsb3NpbmdMaXN0KSA9PSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUobGlzdE5vZGUuZ2V0KCkp
KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgbGlzdE5vZGUgYXBwZWFycyBhdCB0aGUgZW5kIG9m
IHRoZSBvdXRlciBsaXN0IGl0ZW0sIHRoZW4gbW92ZSBsaXN0Tm9kZSBvdXRzaWRlIG9mIHRoaXMg
bGlzdCBpdGVtCiAgICAgICAgICAgICAgICAgLy8gZS5nLiA8dWw+PGxpPmhlbGxvIDx1bD48bGk+
PGJyPjwvbGk+PC91bD4gPC9saT48L3VsPiBzaG91bGQgYmVjb21lIDx1bD48bGk+aGVsbG88L2xp
PiA8dWw+PGxpPjxicj48L2xpPjwvdWw+IDwvdWw+IGFmdGVyIHRoaXMgc2VjdGlvbgpAQCAtMTQz
Niw3ICsxNDM4LDcgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5
TWFpbEJsb2NrcXVvdGVkUGFyYWdyYXBoKCkKICAgICAKICAgICBpZiAoY2FyZXRQb3MuZGVwcmVj
YXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVu
ZUFuY2VzdG9ycyhjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKTsKLSAgICBlbHNlIGlmIChpczxU
ZXh0PihjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKSkgeworICAgIGVsc2UgaWYgKGlzPFRleHQ+
KCpjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBBU1NFUlQoY2FyZXRQb3Mu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA9PSAwKTsKICAgICAgICAgVGV4dCYgdGV4dE5vZGUg
PSBkb3duY2FzdDxUZXh0PigqY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlKCk7CkBAIC0xNTI0
LDcgKzE1MjYsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxp
dFRyZWVUb05vZGUoTm9kZSogc3RhcnQsIE5vZGUqIGVuZCwgYgogCiAgICAgUmVmUHRyPE5vZGU+
IGVuZE5vZGUgPSBlbmQ7CiAgICAgZm9yIChub2RlID0gc3RhcnQ7IG5vZGUgJiYgbm9kZS0+cGFy
ZW50Tm9kZSgpICE9IGVuZE5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAg
ICAgaWYgKCFpczxFbGVtZW50Pihub2RlLT5wYXJlbnROb2RlKCkpKQorICAgICAgICBpZiAoIWlz
PEVsZW1lbnQ+KCpub2RlLT5wYXJlbnROb2RlKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIC8vIERvIG5vdCBzcGxpdCBhIG5vZGUgd2hlbiBkb2luZyBzbyBpbnRyb2R1Y2VzIGFuIGVt
cHR5IG5vZGUuCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkluUGFyZW50ID0gZmly
c3RQb3NpdGlvbkluTm9kZShub2RlLT5wYXJlbnROb2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKaW5kZXggOTBhMWVmZTc3YTY1
YzQ4ZDBmMmVlYjRlNDhlOTU2ZmNmOTc0ZGVkMi4uZjc2NzZlOTBhYWI1ODAwMmI3ZGEyYWRhM2Q0
OGM1OGMyMGEwOTFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVC
dXR0b25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgc3RhdGljIEhUTUxFbGVtZW50
KiBlbmNsb3NpbmdEZWxldGFibGVFbGVtZW50KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBOb2RlKiBlbGVtZW50ID0gZW5j
bG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbnRhaW5lciksICZpc0RlbGV0
YWJsZUVsZW1lbnQpOwotICAgIHJldHVybiBlbGVtZW50ICYmIGlzPEhUTUxFbGVtZW50PihlbGVt
ZW50KSA/IGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVtZW50KSA6IG51bGxwdHI7CisgICAgcmV0
dXJuIGlzPEhUTUxFbGVtZW50PihlbGVtZW50KSA/IGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVt
ZW50KSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cAppbmRleCBhYmM1MzM2ZjAxNTUyNTAyZDRjNjVjZjU0NjdiNGUwYjIzMDNlODU0Li5lZWNhOTQz
OTY1NGE0MjRkODA1MjNmN2VjMTZkNTI4MGYzYzVjNDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTQ1OSwxNCArNDU5LDE0
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAg
ICAgbWFrZVN0eWxpbmdFbGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RUb1ByZXZl
bnRTdHlsZUxvc3MoKTsKIAogICAgIC8vIE5ldmVyIHJlbW92ZSB0aGUgc3RhcnQgYmxvY2sgdW5s
ZXNzIGl0J3MgYSB0YWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSB3b24ndCBtZXJnZSBjb250ZW50IGlu
LgotICAgIGlmIChzdGFydE5vZGUgPT0gbV9zdGFydEJsb2NrICYmICFzdGFydE9mZnNldCAmJiBj
YW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHN0YXJ0Tm9kZSkgJiYgIWlzPEhUTUxUYWJsZUVsZW1l
bnQ+KHN0YXJ0Tm9kZSkpIHsKKyAgICBpZiAoc3RhcnROb2RlID09IG1fc3RhcnRCbG9jayAmJiAh
c3RhcnRPZmZzZXQgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhzdGFydE5vZGUpICYmICFp
czxIVE1MVGFibGVFbGVtZW50Pigqc3RhcnROb2RlKSkgewogICAgICAgICBzdGFydE9mZnNldCA9
IDA7CiAgICAgICAgIHN0YXJ0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoc3RhcnROb2RlKTsK
ICAgICAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKHN0YXJ0T2Zmc2V0ID49IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9kZSkgJiYgaXM8VGV4
dD4oc3RhcnROb2RlKSkgeworICAgIGlmIChzdGFydE9mZnNldCA+PSBjYXJldE1heE9mZnNldChz
dGFydE5vZGUpICYmIGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgIFRleHQmIHRleHQg
PSBkb3duY2FzdDxUZXh0Pigqc3RhcnROb2RlKTsKICAgICAgICAgaWYgKHRleHQubGVuZ3RoKCkg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRNYXhPZmZzZXQoc3RhcnROb2RlKSkpCiAgICAg
ICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUoJnRleHQsIGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9k
ZSksIHRleHQubGVuZ3RoKCkgLSBjYXJldE1heE9mZnNldChzdGFydE5vZGUpKTsKQEAgLTQ4Myw3
ICs0ODMsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxl
dGUoKQogCiAgICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5v
ZGUoKSkgewogICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkgLSBzdGFydE9mZnNldCA+IDApIHsKLSAgICAgICAgICAgIGlmIChpczxUZXh0PihzdGFy
dE5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8VGV4dD4oKnN0YXJ0Tm9kZSkpIHsKICAgICAg
ICAgICAgICAgICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyaW1tZWQKICAg
ICAgICAgICAgICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKnN0YXJ0Tm9kZSk7CiAg
ICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0LCBzdGFydE9mZnNldCwgbV9k
b3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzdGFydE9mZnNldCk7CkBA
IC01MDMsNyArNTAzLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5l
cmFsRGVsZXRlKCkKICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUoc3RhcnROb2RlKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChzdGFydE9mZnNldCA+IDApIHsKLSAgICAgICAgICAgIGlmIChpczxU
ZXh0PihzdGFydE5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8VGV4dD4oKnN0YXJ0Tm9kZSkp
IHsKICAgICAgICAgICAgICAgICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRy
aW1tZWQKICAgICAgICAgICAgICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUp
OwogICAgICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSgmdGV4dCwgc3RhcnRPZmZzZXQs
IHRleHQubGVuZ3RoKCkgLSBzdGFydE9mZnNldCk7CkBAIC01MTEsNyArNTExLDcgQEAgdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VUb0No
aWxkQXQoc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN0
YXJ0Tm9kZSA9PSBtX3Vwc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgaXM8VGV4dD4oc3Rh
cnROb2RlKSkgeworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Tm9kZSA9PSBtX3Vwc3RyZWFtRW5k
LmRlcHJlY2F0ZWROb2RlKCkgJiYgaXM8VGV4dD4oKnN0YXJ0Tm9kZSkpIHsKICAgICAgICAgICAg
IFRleHQmIHRleHQgPSBkb3duY2FzdDxUZXh0PigqbV91cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSgmdGV4dCwgMCwgbV91cHN0cmVh
bUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgfQpAQCAtNTQzLDcgKzU0
Myw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgp
CiAgICAgICAgICAgICAgICAgLy8gVGhlIG5vZGUgaXRzZWxmIGlzIGZ1bGx5IHNlbGVjdGVkLCBu
b3QganVzdCBpdHMgY29udGVudHMuICBEZWxldGUgaXQuCiAgICAgICAgICAgICAgICAgcmVtb3Zl
Tm9kZShtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGlmIChpczxUZXh0PihtX2Rvd25zdHJlYW1FbmQuZGVwcmVj
YXRlZE5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8VGV4dD4oKm1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIHRl
eHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyaW1tZWQKICAgICAgICAgICAgICAgICAgICAgVGV4
dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCptX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSA+IDApIHsKQEAgLTU3NiwxMiArNTc2LDEyIEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6Zml4dXBXaGl0ZXNwYWNlKCkKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIC8vIEZJWE1FOiBpc1JlbmRl
cmVkQ2hhcmFjdGVyIHNob3VsZCBiZSByZW1vdmVkLCBhbmQgd2Ugc2hvdWxkIHVzZSBWaXNpYmxl
UG9zaXRpb246OmNoYXJhY3RlckFmdGVyIGFuZCBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckJl
Zm9yZQotICAgIGlmIChtX2xlYWRpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmICFtX2xlYWRp
bmdXaGl0ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBpczxUZXh0PihtX2xlYWRpbmdX
aGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgaWYgKG1fbGVhZGluZ1doaXRlc3Bh
Y2UuaXNOb3ROdWxsKCkgJiYgIW1fbGVhZGluZ1doaXRlc3BhY2UuaXNSZW5kZXJlZENoYXJhY3Rl
cigpICYmIGlzPFRleHQ+KCptX2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpKSB7
CiAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm1fbGVhZGluZ1doaXRl
c3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIEFTU0VSVCghdGV4dE5vZGUucmVuZGVy
ZXIoKSB8fCB0ZXh0Tm9kZS5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgp
KTsKICAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2VycygmdGV4dE5vZGUs
IG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9Ci0gICAgaWYgKG1fdHJhaWxpbmdXaGl0ZXNwYWNl
LmlzTm90TnVsbCgpICYmICFtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc1JlbmRlcmVkQ2hhcmFjdGVy
KCkgJiYgaXM8VGV4dD4obV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSkpIHsK
KyAgICBpZiAobV90cmFpbGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fdHJhaWxpbmdX
aGl0ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBpczxUZXh0PigqbV90cmFpbGluZ1do
aXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBk
b3duY2FzdDxUZXh0PigqbV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgICAgIEFTU0VSVCghdGV4dE5vZGUucmVuZGVyZXIoKSB8fCB0ZXh0Tm9kZS5yZW5kZXJlcigp
LT5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgcmVwbGFjZVRleHRJbk5v
ZGVQcmVzZXJ2aW5nTWFya2VycygmdGV4dE5vZGUsIG1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CkBAIC04
NjYsNyArODY2LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAg
ICBib29sIHNob3VsZFJlYmFsYWNlV2hpdGVTcGFjZSA9IHRydWU7CiAgICAgaWYgKCFmcmFtZSgp
LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZp
ZWxkKCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRl
ZE5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUgJiYgaXM8VGV4dD4obm9kZSkpIHsKKyAgICAgICAg
aWYgKGlzPFRleHQ+KG5vZGUpKSB7CiAgICAgICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25j
YXN0PFRleHQ+KCpub2RlKTsKICAgICAgICAgICAgIGlmICh0ZXh0Tm9kZS5sZW5ndGgoKSkKICAg
ICAgICAgICAgICAgICBzaG91bGRSZWJhbGFjZVdoaXRlU3BhY2UgPSB0ZXh0Tm9kZS5yZW5kZXJl
cigpLT5zdHlsZSgpLnRleHRTZWN1cml0eSgpID09IFRTTk9ORTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCBjMDlhY2EyYjFhOTdmMjNkNjRiY2Y4YzBiODg4ZjUz
ZDVmYWM3ZjkxLi43ODBkODQ3MTg4MWJmNGZhMzBhZDFkODYxYWFmOWU1OWU4N2RhMjcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xMDM2LDcgKzEwMzYsNyBA
QCBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjp3cmFwcGluZ1N0eWxlRm9y
U2VyaWFsaXphdGlvbihOb2RlKiBjb250ZQogCiAgICAgLy8gV2hlbiBub3QgYW5ub3RhdGluZyBm
b3IgaW50ZXJjaGFuZ2UsIHdlIG9ubHkgcHJlc2VydmUgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9u
cy4KICAgICBmb3IgKE5vZGUqIG5vZGUgPSBjb250ZXh0OyBub2RlICYmICFub2RlLT5pc0RvY3Vt
ZW50Tm9kZSgpOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxT
dHlsZWRFbGVtZW50Pihub2RlKSAmJiAhaXNNYWlsQmxvY2txdW90ZShub2RlKSkgeworICAgICAg
ICBpZiAoaXM8U3R5bGVkRWxlbWVudD4oKm5vZGUpICYmICFpc01haWxCbG9ja3F1b3RlKG5vZGUp
KSB7CiAgICAgICAgICAgICB3cmFwcGluZ1N0eWxlLT5tZXJnZUlubGluZUFuZEltcGxpY2l0U3R5
bGVPZkVsZW1lbnQoZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4obm9kZSksIEVkaXRpbmdTdHlsZTo6
RG9Ob3RPdmVycmlkZVZhbHVlcywKICAgICAgICAgICAgICAgICBFZGl0aW5nU3R5bGU6OkVkaXRp
bmdQcm9wZXJ0aWVzSW5FZmZlY3QpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggZTljZDZiODlhOWRlZjc1NDJiNmVlNzllOTAzODljOWI3MjEzMDMyMS4uNWFmNGZm
ZWQxOTk1N2IxMzhjOTNlN2QzMWYwNDI1M2M3ZTViNWEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcApAQCAtMzI4LDggKzMyOCw2IEBAIHN0YXRpYyBIVE1MSW1hZ2VFbGVtZW50KiBpbWFn
ZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIAogICAgIE5vZGUqIG5vZGUgPSBib2R5LT5maXJzdENoaWxkKCk7
Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIWlzPEhU
TUxJbWFnZUVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4obm9kZSk7CkBAIC01ODgsNyArNTg2LDcgQEAg
Ym9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQsIFBhc3NSZWYKICAgICAKICAgICBpZiAoZnJhZ21lbnQpIHsKICAgICAg
ICAgTm9kZSogY2hpbGQgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBpZiAoY2hp
bGQgJiYgZnJhZ21lbnQtPmxhc3RDaGlsZCgpID09IGNoaWxkICYmIGlzPENoYXJhY3RlckRhdGE+
KGNoaWxkKSkKKyAgICAgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KGNoaWxkKSAmJiBmcmFnbWVu
dC0+bGFzdENoaWxkKCkgPT0gY2hpbGQpCiAgICAgICAgICAgICByZXR1cm4gY2xpZW50KCktPnNo
b3VsZEluc2VydFRleHQoZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmNoaWxkKS5kYXRhKCksIHJl
cGxhY2luZ0RPTVJhbmdlLmdldCgpLCBnaXZlbkFjdGlvbik7CiAgICAgfQogCkBAIC0xNjYwLDcg
KzE2NTgsNyBAQCB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0Rp
cmVjdGlvbiBkaXJlY3Rpb24pCiAjZW5kaWYKICAgICAgICAgCiAgICAgRWxlbWVudCogZm9jdXNl
ZEVsZW1lbnQgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgaWYgKGZvY3VzZWRF
bGVtZW50ICYmIGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQp
KSB7CisgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihmb2N1c2VkRWxlbWVu
dCkpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbikK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuc2V0QXR0cmlidXRlKGRpckF0dHIsIGRpcmVjdGlv
biA9PSBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gPyAibHRyIiA6ICJydGwiKTsKQEAgLTE4
NjUsNyArMTg2Myw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIE5vZGUqIGV4
dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgdW5zaWduZWQgZXh0
ZW50T2Zmc2V0ID0gZXh0ZW50LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAKLSAgICAgICAg
aWYgKGJhc2VOb2RlICYmIGJhc2VOb2RlID09IGV4dGVudE5vZGUgJiYgaXM8VGV4dD4oYmFzZU5v
ZGUpICYmIGJhc2VPZmZzZXQgKyB0ZXh0Lmxlbmd0aCgpID09IGV4dGVudE9mZnNldCkgeworICAg
ICAgICBpZiAoaXM8VGV4dD4oYmFzZU5vZGUpICYmIGJhc2VOb2RlID09IGV4dGVudE5vZGUgJiYg
YmFzZU9mZnNldCArIHRleHQubGVuZ3RoKCkgPT0gZXh0ZW50T2Zmc2V0KSB7CiAgICAgICAgICAg
ICBtX2NvbXBvc2l0aW9uTm9kZSA9IGRvd25jYXN0PFRleHQ+KGJhc2VOb2RlKTsKICAgICAgICAg
ICAgIG1fY29tcG9zaXRpb25TdGFydCA9IGJhc2VPZmZzZXQ7CiAgICAgICAgICAgICBtX2NvbXBv
c2l0aW9uRW5kID0gZXh0ZW50T2Zmc2V0OwpAQCAtMjM3OCw3ICsyMzc2LDcgQEAgYm9vbCBFZGl0
b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBFbGVtZW50KiBmb2N1
c2VkRWxlbWVudCA9IGlzPEVsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkg
OiBub2RlLT5wYXJlbnRFbGVtZW50KCk7CisgICAgY29uc3QgRWxlbWVudCogZm9jdXNlZEVsZW1l
bnQgPSBpczxFbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlKSA6IG5vZGUt
PnBhcmVudEVsZW1lbnQoKTsKICAgICBpZiAoIWZvY3VzZWRFbGVtZW50KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIGZvY3VzZWRFbGVtZW50LT5pc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCk7CkBAIC0zMTA1LDkgKzMxMDMsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5
bGVUb0JvZHlFbGVtZW50KCkgY29uc3QKIAogdm9pZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxl
VG9FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFlbGVtZW50KQot
ICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGlzPFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpKTsK
KyAgICBBU1NFUlQoIWVsZW1lbnQgfHwgaXM8U3R5bGVkRWxlbWVudD4oKmVsZW1lbnQpKTsKICAg
ICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCAzMTc0
NWY5MzViZmJiNzkwZjlkMWI2ZjRkMmVkODE0NWQzNmNjNzNjLi5mOWQ5YjkwYzg0YjUzOGYzYzk5
MTA4OWEwMmJkNWIyODgyZTM5NjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3Jt
YXRCbG9ja0NvbW1hbmQuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyBOb2RlKiBlbmNsb3Np
bmdCbG9ja1RvU3BsaXRUcmVlVG8oTm9kZSogc3RhcnROb2RlKTsKIHN0YXRpYyBib29sIGlzRWxl
bWVudEZvckZvcm1hdEJsb2NrKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpOwogc3RhdGlj
IGlubGluZSBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKE5vZGUqIG5vZGUpCiB7Ci0gICAg
cmV0dXJuIGlzPEVsZW1lbnQ+KG5vZGUpICYmIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGRvd25j
YXN0PEVsZW1lbnQ+KCpub2RlKS50YWdRTmFtZSgpKTsKKyAgICByZXR1cm4gaXM8RWxlbWVudD4o
Km5vZGUpICYmIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KS50YWdRTmFtZSgpKTsKIH0KIAogRm9ybWF0QmxvY2tDb21tYW5kOjpGb3JtYXRCbG9ja0NvbW1h
bmQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBiYTNiZTExZGU4MzNk
Yzc3M2NmNTA4NjM2Y2UxNThjNGJmZmU0OWZjLi5lODI0MjEwMzI3ZGE5ZWExMjQxNDU4MGYzMjI4
YTdmNjZmZDA0MmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtMzk4LDcgKzM5OCw3IEBAIHN0YXRpYyBib29sIHJlbW92aW5nTm9kZVJlbW92ZXNQb3Np
dGlvbihOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYgKHBvc2l0
aW9uLmFuY2hvck5vZGUoKSA9PSBub2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlm
ICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50Pihub2RlKTsKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIHZvaWQgQ2FyZXRCYXNlOjpwYWludENh
cmV0KE5vZGUqIG5vZGUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9p
CiAKICAgICBDb2xvciBjYXJldENvbG9yID0gQ29sb3I6OmJsYWNrOwogICAgIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0I7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9
IGlzPEVsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJl
bnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KCpub2RlKSA/
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpOwogICAgIEVs
ZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7
CiAKICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7CkBAIC0xNTIyLDkg
KzE1MjIsOSBAQCB2b2lkIENhcmV0QmFzZTo6cGFpbnRDYXJldChOb2RlKiBub2RlLCBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaQogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpkZWJ1Z1JlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGJvb2wgc2VsZWN0ZWQpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzPEVsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpKSB7Ci0gICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihyZW5kZXJlci0+bm9kZSgpKTsK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIg
ICAgIiwgZWxlbWVudC0+bG9jYWxOYW1lKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
aWYgKGlzPEVsZW1lbnQ+KCpyZW5kZXJlci0+bm9kZSgpKSkgeworICAgICAgICBFbGVtZW50JiBl
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKnJlbmRlcmVyLT5ub2RlKCkpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiLCBlbGVt
ZW50LmxvY2FsTmFtZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0gZWxzZSBpZiAo
cmVuZGVyZXItPmlzVGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9
IHRvUmVuZGVyVGV4dChyZW5kZXJlcik7CiAgICAgICAgIGlmICghdGV4dFJlbmRlcmVyLT50ZXh0
TGVuZ3RoKCkgfHwgIXRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCkpIHsKQEAgLTE2NjgsNyAr
MTY2OCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIAogICAgIEVsZW1lbnQqIGZvY3VzZWRF
bGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgaWYgKGZvY3VzZWRFbGVt
ZW50ICYmIGlzPEhUTUxTZWxlY3RFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkpIHsKKyAgICBpZiAo
aXM8SFRNTFNlbGVjdEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkgewogICAgICAgICBIVE1MU2Vs
ZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pigq
Zm9jdXNlZEVsZW1lbnQpOwogICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5jYW5TZWxlY3RBbGwo
KSkgewogICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5zZWxlY3RBbGwoKTsKQEAgLTE2ODYsNyAr
MTY4Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiAgICAgICAgICAgICBz
ZWxlY3RTdGFydFRhcmdldCA9IHJvb3QuZ2V0KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KG1fc2VsZWN0aW9uLmlzTm9uZSgpICYmIGZvY3VzZWRFbGVtZW50KSB7Ci0gICAgICAgICAgICBp
ZiAoaXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkgeworICAg
ICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZm9jdXNlZEVsZW1l
bnQpKSB7CiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ+KCpmb2N1c2VkRWxlbWVudCkuc2VsZWN0KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQpAQCAtMjAyMiw4ICsyMDIyLDggQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVu
dCogc2NhbkZvckZvcm0oRWxlbWVudCogc3RhcnQpCiAgICAgYXV0byBkZXNjZW5kYW50cyA9IGRl
c2NlbmRhbnRzT2ZUeXBlPEhUTUxFbGVtZW50PihzdGFydC0+ZG9jdW1lbnQoKSk7CiAgICAgZm9y
IChhdXRvIGl0ID0gZGVzY2VuZGFudHMuZnJvbSgqc3RhcnQpLCBlbmQgPSBkZXNjZW5kYW50cy5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0g
Kml0OwotICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50PigmZWxlbWVudCkpCi0gICAgICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PigmZWxlbWVudCk7CisgICAgICAg
IGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuICZk
b3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGVsZW1lbnQpOwogICAgICAgICBpZiAoaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkuZm9ybSgpOwogICAgICAgICBpZiAoaXM8
SFRNTEZyYW1lRWxlbWVudEJhc2U+KGVsZW1lbnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAppbmRleCA0MzM2YzVjYTI0ODM0YmYz
MTYxODIyZjRkMTlhMWJmZDMzNjc1ZjM3Li42ZWUyMWQ5MjI3M2RjZTU1ZjEyNDg2ZjhmOTc4N2Ey
NjgwZWUzOTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJy
ZWFrQ29tbWFuZC5jcHAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0Nv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1lcmdlIHRleHQgbm9kZXMg
d2hlbiBpbnNlcnRpbmcganVzdCBhZnRlciBvciBiZWZvcmUgdGV4dC4KICAgICAKICAgICBpZiAo
aXNFbmRPZlBhcmFncmFwaChjYXJldCkgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0
aW9uKGNhcmV0KSkgewotICAgICAgICBib29sIG5lZWRFeHRyYUxpbmVCcmVhayA9ICFpczxIVE1M
SFJFbGVtZW50Pihwb3MuZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+
KHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgYm9vbCBuZWVkRXh0cmFMaW5lQnJlYWsg
PSAhaXM8SFRNTEhSRWxlbWVudD4oKnBvcy5kZXByZWNhdGVkTm9kZSgpKSAmJiAhaXM8SFRNTFRh
YmxlRWxlbWVudD4oKnBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgCiAgICAgICAgIGlu
c2VydE5vZGVBdChub2RlVG9JbnNlcnQuZ2V0KCksIHBvcyk7CiAgICAgICAgIApAQCAtMTM3LDcg
KzEzNyw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgfSBl
bHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChw
b3MuZGVwcmVjYXRlZE5vZGUoKSkgfHwgIXBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2Rl
KCkpIHsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KG5vZGVUb0luc2VydC5nZXQoKSwgcG9zKTsKICAg
ICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25JblBhcmVu
dEFmdGVyTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBET1dOU1RSRUFNLCBlbmRpbmdTZWxlY3Rp
b24oKS5pc0RpcmVjdGlvbmFsKCkpKTsKLSAgICB9IGVsc2UgaWYgKGlzPFRleHQ+KHBvcy5kZXBy
ZWNhdGVkTm9kZSgpKSkgeworICAgIH0gZWxzZSBpZiAoaXM8VGV4dD4oKnBvcy5kZXByZWNhdGVk
Tm9kZSgpKSkgewogICAgICAgICAvLyBTcGxpdCBhIHRleHQgbm9kZQogICAgICAgICBUZXh0JiB0
ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpwb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAg
IHNwbGl0VGV4dE5vZGUoJnRleHROb2RlLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IDEx
NmUyMWQ2M2NmZjg1YzY2OGVhMGYwMzZmZTk1NmI0OTc3MDZlZjEuLjU4ZTVjNzEyMzIwZWQ1MmI3
MzQ4YTBhZmMzYjY4YmJkYjdjMDYzYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC03NCw3ICs3NCw3IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1l
bnQ+IEluc2VydExpc3RDb21tYW5kOjptZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKFBhc3NSZWZQ
dHI8CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBFbGVtZW50
KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobGlzdC5nZXQoKSk7Ci0g
ICAgaWYgKCFzaWJsaW5nIHx8ICFpczxIVE1MRWxlbWVudD4oc2libGluZykpCisgICAgaWYgKCFp
czxIVE1MRWxlbWVudD4oc2libGluZykpCiAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsK
IAogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbmV4dExpc3QgPSBkb3duY2FzdDxIVE1MRWxlbWVu
dD4oc2libGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAppbmRleCBlOWZlNWFkNGRlMzYwNzhlY2M5
YjFiMTJhOTA2Y2NmZjQ5ZjE0YjBlLi42MDYxMTdiODhhZWJlNmVmNzMyZmU0OWY2NmVjM2RhZjA3
ZWUwNDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFw
aFNlcGFyYXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIElu
c2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghc3RhcnRC
bG9jawogICAgICAgICB8fCAhc3RhcnRCbG9jay0+bm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2Rl
KCkKICAgICAgICAgfHwgaXNUYWJsZUNlbGwoc3RhcnRCbG9jay5nZXQoKSkKLSAgICAgICAgfHwg
aXM8SFRNTEZvcm1FbGVtZW50PihzdGFydEJsb2NrLmdldCgpKQorICAgICAgICB8fCBpczxIVE1M
Rm9ybUVsZW1lbnQ+KCpzdGFydEJsb2NrKQogICAgICAgICAvLyBGSVhNRTogSWYgdGhlIG5vZGUg
aXMgaGlkZGVuLCB3ZSBkb24ndCBoYXZlIGEgY2Fub25pY2FsIHBvc2l0aW9uIHNvIHdlIHdpbGwg
ZG8gdGhlIHdyb25nIHRoaW5nIGZvciB0YWJsZXMgYW5kIDxocj4uIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM0MgogICAgICAgICB8fCAoIWNhbm9uaWNhbFBvcy5p
c051bGwoKSAmJiBjYW5vbmljYWxQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBj
YW5vbmljYWxQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQogICAg
ICAgICB8fCAoIWNhbm9uaWNhbFBvcy5pc051bGwoKSAmJiBjYW5vbmljYWxQb3MuZGVwcmVjYXRl
ZE5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykpKSB7CkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBJ
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICBQb3NpdGlvbiBs
ZWFkaW5nV2hpdGVzcGFjZSA9IGluc2VydGlvblBvc2l0aW9uLmxlYWRpbmdXaGl0ZXNwYWNlUG9z
aXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgLy8gRklYTUU6IGxlYWRpbmdXaGl0ZXNw
YWNlUG9zaXRpb24gaXMgcmV0dXJuaW5nIHRoZSBwb3NpdGlvbiBiZWZvcmUgcHJlc2VydmVkIG5l
d2xpbmVzIGZvciBwb3NpdGlvbnMKICAgICAvLyBhZnRlciB0aGUgcHJlc2VydmVkIG5ld2xpbmUs
IGNhdXNpbmcgdGhlIG5ld2xpbmUgdG8gYmUgdHVybmVkIGludG8gYSBuYnNwLgotICAgIGlmIChs
ZWFkaW5nV2hpdGVzcGFjZS5pc05vdE51bGwoKSAmJiBpczxUZXh0PihsZWFkaW5nV2hpdGVzcGFj
ZS5kZXByZWNhdGVkTm9kZSgpKSkgeworICAgIGlmIChpczxUZXh0PihsZWFkaW5nV2hpdGVzcGFj
ZS5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0
PFRleHQ+KCpsZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgQVNT
RVJUKCF0ZXh0Tm9kZS5yZW5kZXJlcigpIHx8IHRleHROb2RlLnJlbmRlcmVyKCktPnN0eWxlKCku
Y29sbGFwc2VXaGl0ZVNwYWNlKCkpOwogICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZp
bmdNYXJrZXJzKCZ0ZXh0Tm9kZSwgbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKQEAgLTMzOSw3ICszMzksNyBA
QCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIAog
ICAgIC8vIFNwbGl0IGF0IHBvcyBpZiBpbiB0aGUgbWlkZGxlIG9mIGEgdGV4dCBub2RlLgogICAg
IFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJTcGxpdDsKLSAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24u
YW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgaXM8
VGV4dD4oaW5zZXJ0aW9uUG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSkgeworICAgIGlmIChpbnNl
cnRpb25Qb3NpdGlvbi5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciAmJiBpczxUZXh0PigqaW5zZXJ0aW9uUG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSkg
ewogICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PihpbnNlcnRp
b25Qb3NpdGlvbi5jb250YWluZXJOb2RlKCkpOwogICAgICAgICBib29sIGF0RW5kID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
KSA+PSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCAmJiAhYXRFbmQpIHsKQEAgLTM5OSw3ICszOTks
NyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
ICAgICAgICAgLy8gQ2xlYXIgb3V0IGFsbCB3aGl0ZXNwYWNlIGFuZCBpbnNlcnQgb25lIG5vbi1i
cmVha2luZyBzcGFjZQogICAgICAgICAgICAgQVNTRVJUKCFwb3NpdGlvbkFmdGVyU3BsaXQuY29u
dGFpbmVyTm9kZSgpLT5yZW5kZXJlcigpIHx8IHBvc2l0aW9uQWZ0ZXJTcGxpdC5jb250YWluZXJO
b2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkpOwogICAgICAg
ICAgICAgZGVsZXRlSW5zaWduaWZpY2FudFRleHREb3duc3RyZWFtKHBvc2l0aW9uQWZ0ZXJTcGxp
dCk7Ci0gICAgICAgICAgICBpZiAoaXM8VGV4dD4ocG9zaXRpb25BZnRlclNwbGl0LmRlcHJlY2F0
ZWROb2RlKCkpKQorICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCpwb3NpdGlvbkFmdGVyU3BsaXQu
ZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRv
d25jYXN0PFRleHQ+KHBvc2l0aW9uQWZ0ZXJTcGxpdC5jb250YWluZXJOb2RlKCkpLCAwLCBub25C
cmVha2luZ1NwYWNlU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAppbmRleCBhNzAxZjg5MGYwZmEwZDJhY2Y5
ZjYxMDBlZGMwODU2Y2FiNjExZmViLi5iZGQ1OWEzNzRiNThjYmIwYzRmM2M4NTViMjk4OGFkNjhh
NzU5NGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNw
cApAQCAtMjUwLDcgKzI1MCw3IEBAIFBvc2l0aW9uIEluc2VydFRleHRDb21tYW5kOjppbnNlcnRU
YWIoY29uc3QgUG9zaXRpb24mIHBvcykKICAgICBSZWZQdHI8RWxlbWVudD4gc3Bhbk5vZGUgPSBj
cmVhdGVUYWJTcGFuRWxlbWVudChkb2N1bWVudCgpKTsKICAgICAKICAgICAvLyBwbGFjZSBpdAot
ICAgIGlmICghaXM8VGV4dD4obm9kZSkpIHsKKyAgICBpZiAoIWlzPFRleHQ+KCpub2RlKSkgewog
ICAgICAgICBpbnNlcnROb2RlQXQoc3Bhbk5vZGUuZ2V0KCksIGluc2VydFBvcyk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4obm9k
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCmluZGV4IDE1NWUxN2FmNzU5YjQwMTBhOTZmNDRlODBjN2E4OTMwNDMxZjY2OGQuLjQ1
ODM2M2IwNDdmN2I2MDdhYTU4ODg2YTBjYTk0MWQ0NTg0M2RiY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC00NDgsNyAr
NDQ4LDcgQEAgc3RhdGljIGJvb2wgaXNIZWFkZXJFbGVtZW50KGNvbnN0IE5vZGUqIGEpCiAKIHN0
YXRpYyBib29sIGhhdmVTYW1lVGFnTmFtZShOb2RlKiBhLCBOb2RlKiBiKQogewotICAgIHJldHVy
biBhICYmIGIgJiYgaXM8RWxlbWVudD4oYSkgJiYgaXM8RWxlbWVudD4oYikgJiYgZG93bmNhc3Q8
RWxlbWVudD4oKmEpLnRhZ05hbWUoKSA9PSBkb3duY2FzdDxFbGVtZW50PigqYikudGFnTmFtZSgp
OworICAgIHJldHVybiBpczxFbGVtZW50PihhKSAmJiBpczxFbGVtZW50PihiKSAmJiBkb3duY2Fz
dDxFbGVtZW50PigqYSkudGFnTmFtZSgpID09IGRvd25jYXN0PEVsZW1lbnQ+KCpiKS50YWdOYW1l
KCk7CiB9CiAKIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZE1lcmdlKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgc291cmNlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGRlc3RpbmF0
aW9uKQpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJl
bW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUoSW5zZXJ0CiAgICAgICAg
IGNvbnN0IFN0eWxlUHJvcGVydGllcyogaW5saW5lU3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHls
ZSgpOwogICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBuZXdJbmxpbmVTdHlsZSA9IEVkaXRp
bmdTdHlsZTo6Y3JlYXRlKGlubGluZVN0eWxlKTsKICAgICAgICAgaWYgKGlubGluZVN0eWxlKSB7
Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgICAg
ICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgICAgIFZlY3Rv
cjxRdWFsaWZpZWROYW1lPiBhdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50
JiBodG1sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PigqZWxlbWVudCk7CiAKQEAgLTY4
Myw3ICs2ODMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRl
cmVkVGV4dE5vZGVzQXRFbmRzKEluc2VydGVkTm9kZXMmIGlucwogICAgIGRvY3VtZW50KCkudXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBOb2RlKiBsYXN0TGVh
Zkluc2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5sYXN0TGVhZkluc2VydGVkKCk7Ci0gICAgaWYgKGxh
c3RMZWFmSW5zZXJ0ZWQgJiYgaXM8VGV4dD4obGFzdExlYWZJbnNlcnRlZCkgJiYgIWhhc1JlbmRl
cmVkVGV4dChkb3duY2FzdDxUZXh0PigqbGFzdExlYWZJbnNlcnRlZCkpCisgICAgaWYgKGlzPFRl
eHQ+KGxhc3RMZWFmSW5zZXJ0ZWQpICYmICFoYXNSZW5kZXJlZFRleHQoZG93bmNhc3Q8VGV4dD4o
Kmxhc3RMZWFmSW5zZXJ0ZWQpKQogICAgICAgICAmJiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWco
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGxhc3RMZWFmSW5zZXJ0ZWQpLCBzZWxlY3RUYWcp
CiAgICAgICAgICYmICFlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUobGFzdExlYWZJbnNlcnRlZCksIHNjcmlwdFRhZykpIHsKICAgICAgICAgaW5zZXJ0
ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShsYXN0TGVhZkluc2VydGVkKTsKQEAgLTY5Myw3ICs2OTMs
NyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5v
ZGVzQXRFbmRzKEluc2VydGVkTm9kZXMmIGlucwogICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFr
ZSBzdXJlIHRoYXQgZmlyc3ROb2RlSW5zZXJ0ZWQgaXNuJ3QgaW5zaWRlIGEgc2VsZWN0IG9yIHNj
cmlwdCBlbGVtZW50CiAgICAgLy8gYmVjYXVzZSBpdCBpcyBhIHRvcCBsZXZlbCBub2RlIGluIHRo
ZSBmcmFnbWVudCBhbmQgdGhlIHVzZXIgY2FuJ3QgaW5zZXJ0IGludG8gdGhvc2UgZWxlbWVudHMu
CiAgICAgTm9kZSogZmlyc3ROb2RlSW5zZXJ0ZWQgPSBpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUlu
c2VydGVkKCk7Ci0gICAgaWYgKGZpcnN0Tm9kZUluc2VydGVkICYmIGlzPFRleHQ+KGZpcnN0Tm9k
ZUluc2VydGVkKSAmJiAhaGFzUmVuZGVyZWRUZXh0KGRvd25jYXN0PFRleHQ+KCpmaXJzdE5vZGVJ
bnNlcnRlZCkpKSB7CisgICAgaWYgKGlzPFRleHQ+KGZpcnN0Tm9kZUluc2VydGVkKSAmJiAhaGFz
UmVuZGVyZWRUZXh0KGRvd25jYXN0PFRleHQ+KCpmaXJzdE5vZGVJbnNlcnRlZCkpKSB7CiAgICAg
ICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGUoZmlyc3ROb2RlSW5zZXJ0ZWQpOwogICAg
ICAgICByZW1vdmVOb2RlKGZpcnN0Tm9kZUluc2VydGVkKTsKICAgICB9CkBAIC0xMjczLDcgKzEy
NzMsNyBAQCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQZXJmb3JtU21hcnRS
ZXBsYWNlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogdGV4
dENvbnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wocG9zaXRpb25BdFN0YXJ0T2ZJbnNl
cnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBpZiAodGV4dENvbnRyb2wgJiYg
aXM8SFRNTElucHV0RWxlbWVudD4odGV4dENvbnRyb2wpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCp0ZXh0Q29udHJvbCkuaXNQYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKGlzPEhUTUxJ
bnB1dEVsZW1lbnQ+KHRleHRDb250cm9sKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
dGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IERpc2FibGUgc21hcnQgcmVwbGFjZSBmb3IgcGFzc3dvcmQgZmllbGRzLgogCiAgICAgcmV0dXJu
IHRydWU7CkBAIC0xMjkxLDcgKzEyOTEsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UoKQogCiAgICAgUG9zaXRpb24gZW5kVXBzdHJlYW0g
PSBlbmRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCk7CiAgICAg
Tm9kZSogZW5kTm9kZSA9IGVuZFVwc3RyZWFtLmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24oKTsK
LSAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kTm9kZSAmJiBpczxUZXh0PihlbmROb2RlKSA/IGRvd25j
YXN0PFRleHQ+KCplbmROb2RlKS5sZW5ndGgoKSA6IDA7CisgICAgaW50IGVuZE9mZnNldCA9IGlz
PFRleHQ+KGVuZE5vZGUpID8gZG93bmNhc3Q8VGV4dD4oKmVuZE5vZGUpLmxlbmd0aCgpIDogMDsK
ICAgICBpZiAoZW5kVXBzdHJlYW0uYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3IpIHsKICAgICAgICAgZW5kTm9kZSA9IGVuZFVwc3RyZWFtLmNvbnRhaW5l
ck5vZGUoKTsKICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kVXBzdHJlYW0ub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCk7CkBAIC0xMzAwLDcgKzEzMDAsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UoKQogICAgIGJvb2wgbmVlZHNUcmFpbGluZ1Nw
YWNlID0gIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpICYmICFpc0NoYXJh
Y3RlclNtYXJ0UmVwbGFjZUV4ZW1wdENvbnNpZGVyaW5nTm9uQnJlYWtpbmdTcGFjZShlbmRPZklu
c2VydGVkQ29udGVudC5jaGFyYWN0ZXJBZnRlcigpLCBmYWxzZSk7CiAgICAgaWYgKG5lZWRzVHJh
aWxpbmdTcGFjZSAmJiBlbmROb2RlKSB7CiAgICAgICAgIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNl
ID0gIWVuZE5vZGUtPnJlbmRlcmVyKCkgfHwgZW5kTm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5j
b2xsYXBzZVdoaXRlU3BhY2UoKTsKLSAgICAgICAgaWYgKGlzPFRleHQ+KGVuZE5vZGUpKSB7Cisg
ICAgICAgIGlmIChpczxUZXh0PigqZW5kTm9kZSkpIHsKICAgICAgICAgICAgIGluc2VydFRleHRJ
bnRvTm9kZShkb3duY2FzdDxUZXh0PihlbmROb2RlKSwgZW5kT2Zmc2V0LCBjb2xsYXBzZVdoaXRl
U3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwogICAgICAgICAgICAgaWYg
KG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQuY29udGFpbmVyTm9kZSgpID09IGVuZE5vZGUpCiAgICAg
ICAgICAgICAgICAgbV9lbmRPZkluc2VydGVkQ29udGVudC5tb3ZlVG9PZmZzZXQobV9lbmRPZklu
c2VydGVkQ29udGVudC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEpOwpAQCAtMTMyNCw3ICsx
MzI0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6YWRkU3BhY2VzRm9yU21hcnRS
ZXBsYWNlKCkKICAgICBib29sIG5lZWRzTGVhZGluZ1NwYWNlID0gIWlzU3RhcnRPZlBhcmFncmFw
aChzdGFydE9mSW5zZXJ0ZWRDb250ZW50KSAmJiAhaXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVt
cHRDb25zaWRlcmluZ05vbkJyZWFraW5nU3BhY2Uoc3RhcnRPZkluc2VydGVkQ29udGVudC5wcmV2
aW91cygpLmNoYXJhY3RlckFmdGVyKCksIHRydWUpOwogICAgIGlmIChuZWVkc0xlYWRpbmdTcGFj
ZSAmJiBzdGFydE5vZGUpIHsKICAgICAgICAgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhc3Rh
cnROb2RlLT5yZW5kZXJlcigpIHx8IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5jb2xs
YXBzZVdoaXRlU3BhY2UoKTsKLSAgICAgICAgaWYgKGlzPFRleHQ+KHN0YXJ0Tm9kZSkpIHsKKyAg
ICAgICAgaWYgKGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgICAgICBpbnNlcnRUZXh0
SW50b05vZGUoZG93bmNhc3Q8VGV4dD4oc3RhcnROb2RlKSwgc3RhcnRPZmZzZXQsIGNvbGxhcHNl
V2hpdGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7CiAgICAgICAgICAg
ICBpZiAobV9lbmRPZkluc2VydGVkQ29udGVudC5jb250YWluZXJOb2RlKCkgPT0gc3RhcnROb2Rl
ICYmIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAg
ICAgICAgICAgICAgbV9lbmRPZkluc2VydGVkQ29udGVudC5tb3ZlVG9PZmZzZXQobV9lbmRPZklu
c2VydGVkQ29udGVudC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEpOwpAQCAtMTM3NSwyMiAr
MTM3NSwyMiBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZVRleHROb2Rlc0Fy
b3VuZFBvc2l0aW9uKFBvc2l0aW9uJiBwb3NpdGlvbiwgUAogICAgIGJvb2wgcG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yID0gcG9zaXRpb24uYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3I7CiAgICAgYm9vbCBwb3NpdGlvbk9ubHlUb0JlVXBkYXRlZElzT2Zm
c2V0SW5BbmNob3IgPSBwb3NpdGlvbk9ubHlUb0JlVXBkYXRlZC5hbmNob3JUeXBlKCkgPT0gUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAgICBSZWZQdHI8VGV4dD4gdGV4dDsK
LSAgICBpZiAocG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHBvc2l0aW9uLmNvbnRhaW5lck5v
ZGUoKSAmJiBpczxUZXh0Pihwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKQorICAgIGlmIChwb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgaXM8VGV4dD4ocG9zaXRpb24uY29udGFpbmVyTm9kZSgp
KSkKICAgICAgICAgdGV4dCA9IGRvd25jYXN0PFRleHQ+KHBvc2l0aW9uLmNvbnRhaW5lck5vZGUo
KSk7CiAgICAgZWxzZSB7CiAgICAgICAgIE5vZGUqIGJlZm9yZSA9IHBvc2l0aW9uLmNvbXB1dGVO
b2RlQmVmb3JlUG9zaXRpb24oKTsKLSAgICAgICAgaWYgKGJlZm9yZSAmJiBpczxUZXh0PihiZWZv
cmUpKQorICAgICAgICBpZiAoaXM8VGV4dD4oYmVmb3JlKSkKICAgICAgICAgICAgIHRleHQgPSBk
b3duY2FzdDxUZXh0PihiZWZvcmUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIE5vZGUq
IGFmdGVyID0gcG9zaXRpb24uY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCk7Ci0gICAgICAgICAg
ICBpZiAoYWZ0ZXIgJiYgaXM8VGV4dD4oYWZ0ZXIpKQorICAgICAgICAgICAgaWYgKGlzPFRleHQ+
KGFmdGVyKSkKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oYWZ0ZXIpOwog
ICAgICAgICB9CiAgICAgfQogICAgIGlmICghdGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHRleHQtPnByZXZpb3VzU2libGluZygpICYmIGlzPFRleHQ+KHRleHQtPnByZXZpb3VzU2li
bGluZygpKSkgeworICAgIGlmIChpczxUZXh0Pih0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSkpIHsK
ICAgICAgICAgUmVmUHRyPFRleHQ+IHByZXZpb3VzID0gZG93bmNhc3Q8VGV4dD4odGV4dC0+cHJl
dmlvdXNTaWJsaW5nKCkpOwogICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dCwgMCwgcHJl
dmlvdXMtPmRhdGEoKSk7CiAKQEAgLTE0MDksNyArMTQwOSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJvdW5kUG9zaXRpb24oUG9zaXRpb24mIHBvc2l0
aW9uLCBQCiAKICAgICAgICAgcmVtb3ZlTm9kZShwcmV2aW91cyk7CiAgICAgfQotICAgIGlmICh0
ZXh0LT5uZXh0U2libGluZygpICYmIGlzPFRleHQ+KHRleHQtPm5leHRTaWJsaW5nKCkpKSB7Cisg
ICAgaWYgKGlzPFRleHQ+KHRleHQtPm5leHRTaWJsaW5nKCkpKSB7CiAgICAgICAgIFJlZlB0cjxU
ZXh0PiBuZXh0ID0gZG93bmNhc3Q8VGV4dD4odGV4dC0+bmV4dFNpYmxpbmcoKSk7CiAgICAgICAg
IHVuc2lnbmVkIG9yaWdpbmFsTGVuZ3RoID0gdGV4dC0+bGVuZ3RoKCk7CiAgICAgICAgIGluc2Vy
dFRleHRJbnRvTm9kZSh0ZXh0LCBvcmlnaW5hbExlbmd0aCwgbmV4dC0+ZGF0YSgpKTsKQEAgLTE0
NDksNyArMTQ0OSw3IEBAIE5vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0xp
c3RJdGVtcyhQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBwcnBMaXN0CiAgICAgLy8gbGlzdCBpdGVt
cyBhbmQgaW5zZXJ0IHRoZXNlIG5vZGVzIGJldHdlZW4gdGhlbS4KICAgICBpZiAoaXNNaWRkbGUp
IHsKICAgICAgICAgaW50IHRleHROb2RlT2Zmc2V0ID0gaW5zZXJ0UG9zLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpOwotICAgICAgICBpZiAoaXM8VGV4dD4oaW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2Rl
KCkpICYmIHRleHROb2RlT2Zmc2V0ID4gMCkKKyAgICAgICAgaWYgKGlzPFRleHQ+KCppbnNlcnRQ
b3MuZGVwcmVjYXRlZE5vZGUoKSkgJiYgdGV4dE5vZGVPZmZzZXQgPiAwKQogICAgICAgICAgICAg
c3BsaXRUZXh0Tm9kZShkb3duY2FzdDxUZXh0PihpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSks
IHRleHROb2RlT2Zmc2V0KTsKICAgICAgICAgc3BsaXRUcmVlVG9Ob2RlKGluc2VydFBvcy5kZXBy
ZWNhdGVkTm9kZSgpLCBsYXN0Tm9kZSwgdHJ1ZSk7CiAgICAgfQpAQCAtMTQ4OCw3ICsxNDg4LDcg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6dXBkYXRlTm9kZXNJbnNlcnRlZChOb2Rl
ICpub2RlKQogLy8gc3BsaXQgdGV4dCBub2Rlcy4KIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFjZShjb25zdCBSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFn
bWVudCkKIHsKLSAgICBpZiAoIWZyYWdtZW50LmZpcnN0Q2hpbGQoKSB8fCBmcmFnbWVudC5maXJz
dENoaWxkKCkgIT0gZnJhZ21lbnQubGFzdENoaWxkKCkgfHwgIWlzPFRleHQ+KGZyYWdtZW50LmZp
cnN0Q2hpbGQoKSkpCisgICAgaWYgKCFpczxUZXh0PihmcmFnbWVudC5maXJzdENoaWxkKCkpIHx8
IGZyYWdtZW50LmZpcnN0Q2hpbGQoKSAhPSBmcmFnbWVudC5sYXN0Q2hpbGQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gaGFuZGxlIHNt
YXJ0IHJlcGxhY2UgaW4gdGhlIGZhc3QgcGF0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxD
aGVja2VyLmNwcAppbmRleCBlOTVkODU0NmVjMWUwNDM1MDgyYmYwODkwODZkMmM2YjM3OGEzZjY0
Li4wN2EyM2FmMDRhMzkwZjliMDBmYjVjYzU0NTE5ZjMwNWYxNTJlMTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgYm9vbCBTcGVs
bENoZWNrZXI6OmlzQ2hlY2thYmxlKFJhbmdlKiByYW5nZSkgY29uc3QKICAgICBpZiAoIXJhbmdl
IHx8ICFyYW5nZS0+Zmlyc3ROb2RlKCkgfHwgIXJhbmdlLT5maXJzdE5vZGUoKS0+cmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNvbnN0IE5vZGUqIG5vZGUgPSByYW5nZS0+
c3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAobm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSAmJiAh
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBp
ZiAoaXM8RWxlbWVudD4obm9kZSkgJiYgIWRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNv
bnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0
VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCmluZGV4IDhmN2JkZjU4NDI4ZjJj
NTVmNjc5OGMwNzY0NWE0ODdmNTg5YWIxZmUuLjUxNzVlM2E2OGQ3NjQ5NjA0Njg4NTIwNGEwYjFj
NTFkMDQ5NDQ5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcApAQCAtNTcsNyAr
NTcsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OmRvQXBw
bHkoKQogICAgIGlmICghcGFyZW50UmVuZGVyZXIgfHwgIXBhcmVudFJlbmRlcmVyLT5pc0lubGlu
ZSgpKSB7CiAgICAgICAgIHdyYXBDb250ZW50c0luRHVtbXlTcGFuKHBhcmVudCk7CiAgICAgICAg
IE5vZGUqIGZpcnN0Q2hpbGQgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKCFm
aXJzdENoaWxkIHx8ICFpczxFbGVtZW50PihmaXJzdENoaWxkKSkKKyAgICAgICAgaWYgKCFpczxF
bGVtZW50PihmaXJzdENoaWxkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcGFyZW50
ID0gZG93bmNhc3Q8RWxlbWVudD4oZmlyc3RDaGlsZCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGE1ZDI4NmM1YjRhOGJiY2RiNTk2ZjA4NzExNmQ4
MDk5YWU2YmM2NjguLjhlYjRmMDAzMmFmNDgxNDRkM2ZiYWZmMTMxZmM4MmVmMmEzYzk3NTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTI1NSw3ICsyNTUsNyBA
QCBib29sIGlzUmVuZGVyZXJSZXBsYWNlZEVsZW1lbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
ICAgICBpZiAocmVuZGVyZXItPmlzSW1hZ2UoKSB8fCByZW5kZXJlci0+aXNXaWRnZXQoKSB8fCBy
ZW5kZXJlci0+aXNNZWRpYSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChyZW5k
ZXJlci0+bm9kZSgpICYmIGlzPEVsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpKSB7CisgICAgaWYg
KGlzPEVsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpKSB7CiAgICAgICAgIEVsZW1lbnQmIGVsZW1l
bnQgPSBkb3duY2FzdDxFbGVtZW50PigqcmVuZGVyZXItPm5vZGUoKSk7CiAgICAgICAgIGlmIChp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSB8fCBpczxIVE1MTGVnZW5kRWxlbWVu
dD4oZWxlbWVudCkgfHwgaXM8SFRNTE1ldGVyRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTFBy
b2dyZXNzRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDYxMjA4MGQ2MmY0
NzA3ZmU5ZTk3NTk2YWE3ZGM0OTJmMWVmNTFlM2UuLmM5OWY1YmY4ZGRjMGMwMWQzMzhhOWQzMWE4
MmQwNzllMzExZDI0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0
aW9uLmNwcApAQCAtNjY0LDcgKzY2NCw3IEBAIE5vZGUqIFZpc2libGVTZWxlY3Rpb246Om5vbkJv
dW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkgY29uc3QKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6
aXNJblBhc3N3b3JkRmllbGQoKSBjb25zdAogewogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50KiB0ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKLSAg
ICByZXR1cm4gdGV4dENvbnRyb2wgJiYgaXM8SFRNTElucHV0RWxlbWVudD4odGV4dENvbnRyb2wp
ICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCp0ZXh0Q29udHJvbCkuaXNQYXNzd29yZEZp
ZWxkKCk7CisgICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KHRleHRDb250cm9sKSAmJiBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgp
OwogfQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwCmluZGV4IGJkZjEzMjY5NGUzZGZkYmEzN2JlMTQ4ZTNiODA2YTY2M2Q5YWM5YmMuLmViNWRl
MDY4MTJkMjY1Zjg5Zjc2MTVmYTBmODI1NmRlM2FjNDBjY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTc2Nyw3ICs3NjcsNyBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0UG9zaXRpb25Gb3JMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgTGlu
ZUVuZHBvaQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGlzPFRleHQ+KHN0YXJ0Tm9k
ZSkgPyBQb3NpdGlvbihkb3duY2FzdDxUZXh0PihzdGFydE5vZGUpLCB0b0lubGluZVRleHRCb3go
c3RhcnRCb3gpLT5zdGFydCgpKQorICAgIHJldHVybiBpczxUZXh0Pigqc3RhcnROb2RlKSA/IFBv
c2l0aW9uKGRvd25jYXN0PFRleHQ+KHN0YXJ0Tm9kZSksIHRvSW5saW5lVGV4dEJveChzdGFydEJv
eCktPnN0YXJ0KCkpCiAgICAgICAgIDogcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0Tm9kZSk7CiB9
CiAKQEAgLTgzOCw3ICs4MzgsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9u
Rm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIExpbmVFbmRwb2ludAogICAgIFBvc2l0
aW9uIHBvczsKICAgICBpZiAoZW5kTm9kZS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHBv
cyA9IHBvc2l0aW9uQmVmb3JlTm9kZShlbmROb2RlKTsKLSAgICBlbHNlIGlmIChlbmRCb3gtPmlz
SW5saW5lVGV4dEJveCgpICYmIGlzPFRleHQ+KGVuZE5vZGUpKSB7CisgICAgZWxzZSBpZiAoZW5k
Qm94LT5pc0lubGluZVRleHRCb3goKSAmJiBpczxUZXh0PigqZW5kTm9kZSkpIHsKICAgICAgICAg
SW5saW5lVGV4dEJveCogZW5kVGV4dEJveCA9IHRvSW5saW5lVGV4dEJveChlbmRCb3gpOwogICAg
ICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+c3RhcnQoKTsKICAgICAgICAgaWYgKCFl
bmRUZXh0Qm94LT5pc0xpbmVCcmVhaygpKQpAQCAtMTE0Myw3ICsxMTQzLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFZGl0aW5n
Qm91bmRhcnlDcm9zc2kKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChyLT5pc1Rl
eHQoKSAmJiB0b1JlbmRlclRleHQociktPmhhc1JlbmRlcmVkVGV4dCgpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxUZXh0PihuKSk7CisgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxUZXh0PigqbikpOwogICAg
ICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I7CiAgICAg
ICAgICAgICBpZiAoc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAgICBT
dHJpbmdJbXBsJiB0ZXh0ID0gKnRvUmVuZGVyVGV4dChyKS0+dGV4dCgpOwpAQCAtMTIyNiw3ICsx
MjI2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYywgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmcKIAogICAgICAgICAvLyBGSVhNRTogV2Ug
YXZvaWQgcmV0dXJuaW5nIGEgcG9zaXRpb24gd2hlcmUgdGhlIHJlbmRlcmVyIGNhbid0IGFjY2Vw
dCB0aGUgY2FyZXQuCiAgICAgICAgIGlmIChyLT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQocikt
Pmhhc1JlbmRlcmVkVGV4dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpczxUZXh0PihuKSk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpczxUZXh0PigqbikpOwogICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I7CiAgICAgICAgICAgICBpZiAoc3R5bGUucHJlc2Vy
dmVOZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsJiB0ZXh0ID0gKnRvUmVu
ZGVyVGV4dChyKS0+dGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1M
Q29udmVydGVyLm1tCmluZGV4IGE3ZTBiNDc4NjcyOWRiYjZlMjA5Y2ViZWFmMDJjNDYzODYxYTU0
ZDcuLjBkNWQzZmUwZjc5YTFiYjAxMTRjZDcxZjI3YzcxOWVjODRmYzAzOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTEzNTcsNyArMTM1
Nyw3IEBAIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YXR0cmlidXRlc0ZvckVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCkKIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YWdncmVnYXRl
ZEF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMoQ2hhcmFjdGVyRGF0YSYgbm9kZSkKIHsKICAgICBOb2Rl
KiBhbmNlc3RvciA9IG5vZGUucGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChhbmNlc3RvciAmJiAh
aXM8RWxlbWVudD4oYW5jZXN0b3IpKQorICAgIHdoaWxlIChhbmNlc3RvciAmJiAhaXM8RWxlbWVu
dD4oKmFuY2VzdG9yKSkKICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgp
OwogICAgIGlmICghYW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTM3NCw3
ICsxMzc0LDcgQEAgTlNEaWN0aW9uYXJ5KiBIVE1MQ29udmVydGVyOjphZ2dyZWdhdGVkQXR0cmli
dXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoRWxlbWUKICAgICBBU1NFUlQoYXR0cmlidXRl
c0ZvckN1cnJlbnRFbGVtZW50KTsKIAogICAgIE5vZGUqIGFuY2VzdG9yID0gZWxlbWVudC5wYXJl
bnROb2RlKCk7Ci0gICAgd2hpbGUgKGFuY2VzdG9yICYmICFpczxFbGVtZW50PihhbmNlc3Rvcikp
CisgICAgd2hpbGUgKGFuY2VzdG9yICYmICFpczxFbGVtZW50PigqYW5jZXN0b3IpKQogICAgICAg
ICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCk7CiAKICAgICBpZiAoIWFuY2VzdG9y
KSB7CkBAIC0yNTcxLDcgKzI1NzEsNyBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRy
aWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgCiAgICAgICAgIGlm
IChzdGFydENvbnRhaW5lciA9PSBlbmRDb250YWluZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9m
ZnNldCAtIDEpKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gc3RhcnRDb250YWluZXItPnRy
YXZlcnNlVG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChub2RlICYmIGlz
PEhUTUxJbWFnZUVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8SFRNTEltYWdl
RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAgICBOU0ZpbGVXcmFwcGVyKiBmaWxlV3Jh
cHBlciA9IGZpbGVXcmFwcGVyRm9yRWxlbWVudChkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50Pihu
b2RlKSk7CiAgICAgICAgICAgICAgICAgTlNUZXh0QXR0YWNobWVudCogYXR0YWNobWVudCA9IFtb
TlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlcl07
CiAgICAgICAgICAgICAgICAgW3N0cmluZyBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltOU0F0dHJp
YnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50OmF0dGFjaG1lbnRdXTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKaW5kZXggZWJmNWI1Y2IxZTgyMGVj
NzM0Yzg4YWNlOGFkN2M3YTFlZjkyYmY3ZS4uMTYzZDEwZjlkZmM1ZGExMzg2YWU1Nzk3YmMxMTdk
YjUxOTQxMmIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKQEAgLTMx
Niw3ICszMTYsNyBAQCBib29sIGlzSW5saW5lKGNvbnN0IE5vZGUqIG5vZGUpCiBFbGVtZW50KiBl
bmNsb3NpbmdCbG9jayhOb2RlKiBub2RlLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVs
ZSkKIHsKICAgICBOb2RlKiBlbmNsb3NpbmdOb2RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIGlzQmxvY2ssIHJ1bGUpOwotICAgIHJldHVy
biBlbmNsb3NpbmdOb2RlICYmIGlzPEVsZW1lbnQ+KGVuY2xvc2luZ05vZGUpID8gZG93bmNhc3Q8
RWxlbWVudD4oZW5jbG9zaW5nTm9kZSkgOiBudWxscHRyOworICAgIHJldHVybiBpczxFbGVtZW50
PihlbmNsb3NpbmdOb2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGVuY2xvc2luZ05vZGUpIDogbnVs
bHB0cjsKIH0KIAogVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTU1MCw3ICs1NTAsNyBAQCBFbGVtZW50KiBlbmNsb3Np
bmdFbGVtZW50V2l0aFRhZyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFF1YWxpZmll
ZE5hbWUmCiAgICAgZm9yIChOb2RlKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsg
bm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAocm9vdCAmJiAh
bm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSkuaGFzVGFnTmFtZSh0YWdOYW1lKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCBFbGVtZW50KiBlbmNsb3NpbmdBbmNo
b3JFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiBwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIGZvciAoTm9kZSogbm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkgJiYgbm9k
ZS0+aXNMaW5rKCkpCisgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkgJiYgbm9kZS0+aXNM
aW5rKCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAg
fQogICAgIHJldHVybiBudWxscHRyOwpAQCAtNjUyLDcgKzY1Miw3IEBAIEhUTUxFbGVtZW50KiBl
bmNsb3NpbmdMaXN0KE5vZGUqIG5vZGUpCiAgICAgTm9kZSogcm9vdCA9IGhpZ2hlc3RFZGl0YWJs
ZVJvb3QoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpKTsKICAgICAKICAgICBmb3Ig
KENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBhbmNlc3Rvcjsg
YW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1M
VUxpc3RFbGVtZW50PihhbmNlc3RvcikgfHwgaXM8SFRNTE9MaXN0RWxlbWVudD4oYW5jZXN0b3Ip
KQorICAgICAgICBpZiAoaXM8SFRNTFVMaXN0RWxlbWVudD4oKmFuY2VzdG9yKSB8fCBpczxIVE1M
T0xpc3RFbGVtZW50PigqYW5jZXN0b3IpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxFbGVtZW50PihhbmNlc3Rvcik7CiAgICAgICAgIGlmIChhbmNlc3RvciA9PSByb290KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDU1LDcgKzEwNTUsNyBAQCBib29sIGxpbmVC
cmVha0V4aXN0c0F0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIGlmICgh
cG9zaXRpb24uYW5jaG9yTm9kZSgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgaWYgKCFpczxUZXh0Pihwb3NpdGlvbi5hbmNob3JOb2RlKCkpIHx8ICFwb3Np
dGlvbi5hbmNob3JOb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCkucHJlc2VydmVOZXdsaW5lKCkp
CisgICAgaWYgKCFpczxUZXh0PigqcG9zaXRpb24uYW5jaG9yTm9kZSgpKSB8fCAhcG9zaXRpb24u
YW5jaG9yTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxU
ZXh0PigqcG9zaXRpb24uYW5jaG9yTm9kZSgpKTsKQEAgLTExODQsMTUgKzExODQsMTUgQEAgYm9v
bCBpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihjb25zdCBOb2RlKiBub2RlKQog
CiBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUqIGZpcnN0LCBjb25zdCBOb2Rl
KiBzZWNvbmQpCiB7Ci0gICAgaWYgKCFpczxFbGVtZW50PihmaXJzdCkgfHwgIWlzPEVsZW1lbnQ+
KHNlY29uZCkpCisgICAgaWYgKCFpczxFbGVtZW50PigqZmlyc3QpIHx8ICFpczxFbGVtZW50Pigq
c2Vjb25kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgRWxlbWVudCogZmly
c3RFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oZmlyc3QpOwotICAgIGNvbnN0IEVsZW1lbnQq
IHNlY29uZEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihzZWNvbmQpOwotICAgIGlmICghZmly
c3RFbGVtZW50LT5oYXNUYWdOYW1lKHNlY29uZEVsZW1lbnQtPnRhZ1FOYW1lKCkpKQorICAgIGNv
bnN0IEVsZW1lbnQmIGZpcnN0RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpmaXJzdCk7Cisg
ICAgY29uc3QgRWxlbWVudCYgc2Vjb25kRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpzZWNv
bmQpOworICAgIGlmICghZmlyc3RFbGVtZW50Lmhhc1RhZ05hbWUoc2Vjb25kRWxlbWVudC50YWdR
TmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGZpcnN0RWxlbWVu
dC0+aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoc2Vjb25kRWxlbWVudCk7CisgICAgcmV0dXJuIGZp
cnN0RWxlbWVudC5oYXNFcXVpdmFsZW50QXR0cmlidXRlcygmc2Vjb25kRWxlbWVudCk7CiB9CiAK
IGJvb2wgaXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCkBA
IC0xMjAwLDcgKzEyMDAsNyBAQCBib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChj
b25zdCBOb2RlKiBub2RlKQogICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKGxpc3RpbmdUYWcp
CiAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUob2xUYWcpCiAgICAgICAgIHx8IG5vZGUtPmhh
c1RhZ05hbWUocHJlVGFnKQotICAgICAgICB8fCBpczxIVE1MVGFibGVFbGVtZW50Pihub2RlKQor
ICAgICAgICB8fCBpczxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSkKICAgICAgICAgfHwgbm9kZS0+
aGFzVGFnTmFtZSh1bFRhZykKICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZSh4bXBUYWcpCiAg
ICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDFUYWcpCkBAIC0xMjUxLDcgKzEyNTEsNyBAQCBF
bGVtZW50KiBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChOb2RlKiBub2RlKQog
ICAgIGlmIChpc0Jsb2NrRmxvd0VsZW1lbnQobm9kZSkpCiAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxFbGVtZW50Pihub2RlKTsKICAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkp
KSB7Ci0gICAgICAgIGlmIChpc0Jsb2NrRmxvd0VsZW1lbnQobm9kZSkgfHwgaXM8SFRNTEJvZHlF
bGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKGlzQmxvY2tGbG93RWxlbWVudChub2RlKSB8fCBp
czxIVE1MQm9keUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXggZDkyMzNhMmJiYTUyMTViYjU1OGFhYmNmNmM2
OTc3MTgzMzY4MWU5NS4uYzVlN2ZlNDJiM2MzYWNiNWQxZDY3YTI5MDM4MzFlNzUzMjM1Y2IxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMTgxLDcgKzE4MSw3
IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGly
ZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgICAgIHJldHVybjsKIAogICAgIEVsZW1l
bnQqIGZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgp
OwotICAgIGlmIChmb2N1c2VkRWxlbWVudCAmJiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oZm9j
dXNlZEVsZW1lbnQpIHx8IChpczxIVE1MSW5wdXRFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkKKyAg
ICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCpmb2N1c2Vk
RWxlbWVudCkgfHwgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkKICAgICAg
ICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuaXNUZXh0
RmllbGQoKQogICAgICAgICAgICAgfHwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3Vz
ZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkpKSkpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9
PSBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRl
eCAxYjkwYmUyNTcwMGIyNzE3NTk5ODc5NjE0NmJmMDk1OGM0ZDBiYTdjLi45MGY0NTViNmMxNjk4
NmE3YWJlMTM4YzhjNTk4MjNlMDI2MTkxZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CkBAIC0yMzQsNyArMjM0LDcgQEAgU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0YWtl
UmVzdWx0cygpCiAKIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBjb25zdCBUZXh0JiB0ZXh0KQogeyAgICAKLSAgICBjb25zdCBib29s
IHBhcmVudElzVGV4dGFyZWEgPSB0ZXh0LnBhcmVudEVsZW1lbnQoKSAmJiBpczxIVE1MVGV4dEFy
ZWFFbGVtZW50Pih0ZXh0LnBhcmVudEVsZW1lbnQoKSk7CisgICAgY29uc3QgYm9vbCBwYXJlbnRJ
c1RleHRhcmVhID0gaXM8SFRNTFRleHRBcmVhRWxlbWVudD4odGV4dC5wYXJlbnRFbGVtZW50KCkp
OwogICAgIGNvbnN0IGJvb2wgd3JhcHBpbmdTcGFuID0gc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxl
KHRleHQpICYmICFwYXJlbnRJc1RleHRhcmVhOwogICAgIGlmICh3cmFwcGluZ1NwYW4pIHsKICAg
ICAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gd3JhcHBpbmdTdHlsZSA9IG1fd3JhcHBpbmdTdHls
ZS0+Y29weSgpOwpAQCAtNDUyLDcgKzQ1Miw3IEBAIHN0YXRpYyBOb2RlKiBhbmNlc3RvclRvUmV0
YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZUZvckJsb2NrKE5vZGUqIGNvbW1vbkFuY2VzdG9yCiAK
ICAgICBpZiAoY29tbW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZSh0Ym9keVRhZykgfHwgY29t
bW9uQW5jZXN0b3JCbG9jay0+aGFzVGFnTmFtZSh0clRhZykpIHsKICAgICAgICAgQ29udGFpbmVy
Tm9kZSogdGFibGUgPSBjb21tb25BbmNlc3RvckJsb2NrLT5wYXJlbnROb2RlKCk7Ci0gICAgICAg
IHdoaWxlICh0YWJsZSAmJiAhaXM8SFRNTFRhYmxlRWxlbWVudD4odGFibGUpKQorICAgICAgICB3
aGlsZSAodGFibGUgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJsZSkpCiAgICAgICAgICAg
ICB0YWJsZSA9IHRhYmxlLT5wYXJlbnROb2RlKCk7CiAKICAgICAgICAgcmV0dXJuIHRhYmxlOwpA
QCAtNzQzLDcgKzc0Myw4IEBAIHN0YXRpYyB2b2lkIGZpbGxDb250YWluZXJGcm9tU3RyaW5nKENv
bnRhaW5lck5vZGUqIHBhcmFncmFwaCwgY29uc3QgU3RyaW5nJiBzdHJpCiAKIGJvb2wgaXNQbGFp
blRleHRNYXJrdXAoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIWlzPEhUTUxEaXZFbGVtZW50Pihu
b2RlKSkKKyAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKCFpczxIVE1MRGl2RWxlbWVudD4oKm5v
ZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBIVE1MRGl2RWxlbWVudCYgZWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxEaXZFbGVtZW50Pigqbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9G
aWxlUmVhZGVyLmNwcAppbmRleCA2MTM2NjhiZGNjYmRlNzQ5M2RmNDE4ZGVmZGNiNmYzYjhjMDll
N2M2Li5jMDZjNmFiNmMyNmI5MjNjZDI0ZjQ1OWE1MjE4OGIzZGRhMzU1ZTNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBGaWxlUmVh
ZGVyOjpyZWFkQXNBcnJheUJ1ZmZlcihCbG9iKiBibG9iLCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhGaWxlQVBJLCAiRmlsZVJl
YWRlcjogcmVhZGluZyBhcyBhcnJheSBidWZmZXI6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBpczxGaWxlPihibG9iKSA/IGRvd25jYXN0PEZpbGU+KCpibG9i
KS5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFk
ZXI6IHJlYWRpbmcgYXMgYXJyYXkgYnVmZmVyOiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgaXM8RmlsZT4oKmJsb2IpID8gZG93bmNhc3Q8RmlsZT4oKmJsb2Ip
LnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOwogCiAgICAgcmVhZEludGVybmFsKGJsb2IsIEZp
bGVSZWFkZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVyLCBlYyk7CiB9CkBAIC05MSw3ICs5MSw3
IEBAIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGJsb2IsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogICAgIGlmICghYmxvYikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9H
KEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIGJpbmFyeTogJXMgJXNcbiIsIGJsb2It
PnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGlzPEZpbGU+KGJsb2IpID8gZG93bmNhc3Q8
RmlsZT4oKmJsb2IpLnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOworICAgIExPRyhGaWxlQVBJ
LCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBiaW5hcnk6ICVzICVzXG4iLCBibG9iLT51cmwoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpczxGaWxlPigqYmxvYikgPyBkb3duY2FzdDxGaWxlPigq
YmxvYikucGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKICAgICByZWFkSW50ZXJuYWwoYmxv
YiwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQmluYXJ5U3RyaW5nLCBlYyk7CiB9CkBAIC0xMDEs
NyArMTAxLDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNUZXh0KEJsb2IqIGJsb2IsIGNvbnN0
IFN0cmluZyYgZW5jb2RpbmcsIEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoIWJsb2IpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0
ZXh0OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXM8Rmls
ZT4oYmxvYikgPyBkb3duY2FzdDxGaWxlPigqYmxvYikucGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAi
Iik7CisgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIHRleHQ6ICVzICVz
XG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpczxGaWxlPigqYmxvYikg
PyBkb3duY2FzdDxGaWxlPigqYmxvYikucGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKICAg
ICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CiAgICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFk
ZXJMb2FkZXI6OlJlYWRBc1RleHQsIGVjKTsKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIEZpbGVS
ZWFkZXI6OnJlYWRBc0RhdGFVUkwoQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
aWYgKCFibG9iKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFk
ZXI6IHJlYWRpbmcgYXMgZGF0YSBVUkw6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCBpczxGaWxlPihibG9iKSA/IGRvd25jYXN0PEZpbGU+KCpibG9iKS5wYXRo
KCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJl
YWRpbmcgYXMgZGF0YSBVUkw6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBpczxGaWxlPigqYmxvYikgPyBkb3duY2FzdDxGaWxlPigqYmxvYikucGF0aCgpLnV0
ZjgoKS5kYXRhKCkgOiAiIik7CiAKICAgICByZWFkSW50ZXJuYWwoYmxvYiwgRmlsZVJlYWRlckxv
YWRlcjo6UmVhZEFzRGF0YVVSTCwgZWMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9CYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAppbmRleCAz
Yzc0OWE0OWNmZjFmOGQxYTgwOTUzYzYxMDQ1MDM2MzYyMTAxYzE2Li42YjJhOGUzYTAyYTlkZTcz
OTY1NWViYmVjNGVkZmIyM2U1YmJiYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0Jhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcApAQCAtNzMs
NyArNzMsNyBAQCB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjpjcmVh
dGVTaGFkb3dTdWJ0cmVlKCkKIHZvaWQgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5
cGU6OnVwZGF0ZUFwcGVhcmFuY2UoKQogewogICAgIE5vZGUqIG5vZGUgPSBlbGVtZW50KCkudXNl
ckFnZW50U2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxI
VE1MRWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4obm9kZSkpCiAgICAg
ICAgIHJldHVybjsKICAgICBTdHJpbmcgZGlzcGxheVZhbHVlID0gdmlzaWJsZVZhbHVlKCk7CiAg
ICAgaWYgKGRpc3BsYXlWYWx1ZS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9G
VFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKaW5kZXggOWIwZmRlYTk5NjA3ODVmZTU5ZTQ0ZGVkMDk5
ZDE1NzIxZjlkMzUwZC4uZjNiYTllNTE1ZTBlYzFlNWFjOTgyZjE2OTNkZTA0NzBiZjMwOTVlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKQEAgLTMw
MCw3ICszMDAsNyBAQCBib29sIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpsb2FkRG9jdW1l
bnRUZW1wbGF0ZSgpCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHRhYmxlRWxlbWVudCA9IGRvY3VtZW50
KCktPmdldEVsZW1lbnRCeUlkKFN0cmluZyhBU0NJSUxpdGVyYWwoImZ0cERpcmVjdG9yeVRhYmxl
IikpKTsKICAgICBpZiAoIXRhYmxlRWxlbWVudCkKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gZmluZCBlbGVtZW50IGJ5IGlkIFwiZnRwRGlyZWN0b3J5VGFibGVcIiBpbiB0aGUgdGVtcGxh
dGUgZG9jdW1lbnQuIik7Ci0gICAgZWxzZSBpZiAoIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxl
RWxlbWVudC5nZXQoKSkpCisgICAgZWxzZSBpZiAoIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KCp0YWJs
ZUVsZW1lbnQpKQogICAgICAgICBMT0dfRVJST1IoIkVsZW1lbnQgb2YgaWQgXCJmdHBEaXJlY3Rv
cnlUYWJsZVwiIGlzIG5vdCBhIHRhYmxlIGVsZW1lbnQiKTsKICAgICBlbHNlIAogICAgICAgICBt
X3RhYmxlRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlRWxlbWVudC5n
ZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAK
aW5kZXggNzA0NWE4ZjVlOGVjY2I3NTdmZmMwNzc0NWIyMTZkNTgwMGE2NzBmZS4uOTJkMzgxNjk2
MDdjN2NkMjcwNzBiMWVlMzVkOWE4MGQzMmIzMzAxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcApAQCAtOTgsNyArOTgsNyBAQCBIVE1MRm9ybUVs
ZW1lbnQqIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6ZmluZEFzc29jaWF0ZWRGb3JtKGNvbnN0IEhU
TUxFbGVtZW50KiBlbAogICAgICAgICAvLyB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZCgpIG92
ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCiAgICAgICAgIEhUTUxGb3JtRWxlbWVudCogbmV3Rm9ybSA9
IG51bGxwdHI7CiAgICAgICAgIEVsZW1lbnQqIG5ld0Zvcm1DYW5kaWRhdGUgPSBlbGVtZW50LT50
cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChmb3JtSWQpOwotICAgICAgICBpZiAobmV3Rm9ybUNh
bmRpZGF0ZSAmJiBpczxIVE1MRm9ybUVsZW1lbnQ+KG5ld0Zvcm1DYW5kaWRhdGUpKQorICAgICAg
ICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50PihuZXdGb3JtQ2FuZGlkYXRlKSkKICAgICAgICAgICAg
IG5ld0Zvcm0gPSBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KG5ld0Zvcm1DYW5kaWRhdGUpOwog
ICAgICAgICByZXR1cm4gbmV3Rm9ybTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCmluZGV4IDkxNWUyYWFjZjk3YTYwMmU1ODc1MjQ3MWYwOTg5ZjU2YmEy
M2RhZDYuLjQ2MmIyMjgyODViZTc5ZmIzNDM5MzM1YTUwMWI0NThlYWFkNmVlOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCkBAIC0xNTIsMTMgKzE1MiwxNCBA
QCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZl
bnQqIGV2ZW50KSBjb25zdAogCiBzdGF0aWMgdm9pZCBhcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0
aW9uKFN0cmluZ0J1aWxkZXImIHVybCwgRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghaXM8TW91
c2VFdmVudD4oZXZlbnQpKQorICAgIEFTU0VSVChldmVudCk7CisgICAgaWYgKCFpczxNb3VzZUV2
ZW50PigqZXZlbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoZXZlbnQtPnRhcmdl
dCgpKTsKICAgICBOb2RlKiB0YXJnZXQgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwogICAg
IEFTU0VSVCh0YXJnZXQpOwotICAgIGlmICghaXM8SFRNTEltYWdlRWxlbWVudD4odGFyZ2V0KSkK
KyAgICBpZiAoIWlzPEhUTUxJbWFnZUVsZW1lbnQ+KCp0YXJnZXQpKQogICAgICAgICByZXR1cm47
CiAKICAgICBIVE1MSW1hZ2VFbGVtZW50JiBpbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW1h
Z2VFbGVtZW50PigqdGFyZ2V0KTsKQEAgLTE5Niw3ICsxOTcsNyBAQCB2b2lkIEhUTUxBbmNob3JF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgaWYgKGhh
c0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyB0cmFjayBvZiB0
aGUgZWRpdGFibGUgYmxvY2sgdGhhdCB0aGUgc2VsZWN0aW9uIHdhcyBpbiAoaWYgaXQgd2FzIGlu
IG9uZSkganVzdCBiZWZvcmUgdGhlIGxpbmsgd2FzIGNsaWNrZWQKICAgICAgICAgICAgIC8vIGZv
ciB0aGUgTGl2ZVdoZW5Ob3RGb2N1c2VkIGVkaXRhYmxlIGxpbmsgYmVoYXZpb3IKLSAgICAgICAg
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBp
czxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0
b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKKyAgICAgICAgICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxN
b3VzZUV2ZW50PigqZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9u
KCkgIT0gUmlnaHRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAgICAgICAgICAgICAg
ICAgc2V0Um9vdEVkaXRhYmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duKGRvY3VtZW50
KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgp
KTsKICAgICAgICAgICAgICAgICBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duID0gZG93bmNh
c3Q8TW91c2VFdmVudD4oKmV2ZW50KS5zaGlmdEtleSgpOwogICAgICAgICAgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgewpAQCAtNTU1
LDcgKzU1Niw4IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNsaWNrKEV2ZW50KiBl
dmVudCkKIAogSFRNTEFuY2hvckVsZW1lbnQ6OkV2ZW50VHlwZSBIVE1MQW5jaG9yRWxlbWVudDo6
ZXZlbnRUeXBlKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50
KSkKKyAgICBBU1NFUlQoZXZlbnQpOworICAgIGlmICghaXM8TW91c2VFdmVudD4oKmV2ZW50KSkK
ICAgICAgICAgcmV0dXJuIE5vbk1vdXNlRXZlbnQ7CiAgICAgcmV0dXJuIGRvd25jYXN0PE1vdXNl
RXZlbnQ+KCpldmVudCkuc2hpZnRLZXkoKSA/IE1vdXNlRXZlbnRXaXRoU2hpZnRLZXkgOiBNb3Vz
ZUV2ZW50V2l0aG91dFNoaWZ0S2V5OwogfQpAQCAtNTkyLDEyICs1OTQsMTIgQEAgYm9vbCBIVE1M
QW5jaG9yRWxlbWVudDo6dHJlYXRMaW5rQXNMaXZlRm9yRXZlbnRUeXBlKEV2ZW50VHlwZSBldmVu
dFR5cGUpIGNvbnN0CiAKIGJvb2wgaXNFbnRlcktleUtleWRvd25FdmVudChFdmVudCogZXZlbnQp
CiB7Ci0gICAgcmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVu
dCAmJiBpczxLZXlib2FyZEV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4o
KmV2ZW50KS5rZXlJZGVudGlmaWVyKCkgPT0gIkVudGVyIjsKKyAgICByZXR1cm4gZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGlzPEtleWJvYXJkRXZlbnQ+KCpl
dmVudCkgJiYgZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KS5rZXlJZGVudGlmaWVyKCkg
PT0gIkVudGVyIjsKIH0KIAogYm9vbCBpc0xpbmtDbGljayhFdmVudCogZXZlbnQpCiB7Ci0gICAg
cmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgKCFpczxN
b3VzZUV2ZW50PihldmVudCkgfHwgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24o
KSAhPSBSaWdodEJ1dHRvbik7CisgICAgcmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQgJiYgKCFpczxNb3VzZUV2ZW50PigqZXZlbnQpIHx8IGRvd25jYXN0PE1v
dXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgIT0gUmlnaHRCdXR0b24pOwogfQogCiBib29sIHNo
b3VsZFByb2hpYml0TGlua3MoRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFyZWFFbGVtZW50LmNwcAppbmRleCBiMTE1M2U3NTNkMDljOWVlNGU5OGFiYWI5ZmQ3OTYxMWQw
NzVkMjM5Li4yMGJlZjI4MjBhNGIxZGU2ZTcwMDI2NWViMzM1OWRmMmE1MDczNTNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgUGF0
aCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lvbihjb25zdCBMYXlvdXRTaXplJiBzaXplKSBjb25z
dAogSFRNTEltYWdlRWxlbWVudCogSFRNTEFyZWFFbGVtZW50OjppbWFnZUVsZW1lbnQoKSBjb25z
dAogewogICAgIE5vZGUqIG1hcEVsZW1lbnQgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFtYXBF
bGVtZW50IHx8ICFpczxIVE1MTWFwRWxlbWVudD4obWFwRWxlbWVudCkpCisgICAgaWYgKCFpczxI
VE1MTWFwRWxlbWVudD4obWFwRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IAogICAgIHJldHVybiBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oKm1hcEVsZW1lbnQpLmltYWdl
RWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCmluZGV4IDAw
OTMyOWUyYzNhYmE4NWY0YzVjMzJmOGEyY2FkMjhlMjA3ZGI4OGMuLjYxM2Q4Y2VjOTc3MjE0ZjAz
OTdhZTM3YmEzMGZiYjQ1YWY3ODI5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEJvZHlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxl
bWVudC5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25S
ZXF1ZXN0IEhUTUxCb2R5RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmCiAgICAg
Ly8gbWFnaWNhbGx5IGFwcGVhciBvbiB0aGUgPGJvZHk+IG9mIGFsbCBkb2N1bWVudHMgZW1iZWRk
ZWQgdGhyb3VnaCA8aWZyYW1lPiBvciA8ZnJhbWU+LgogICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRo
aXMgY29kZSBzaG91bGQgYmUgaW4gYXR0YWNoKCkgaW5zdGVhZCBvZiBoZXJlLgogICAgIEhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gZG9jdW1lbnQoKS5vd25lckVsZW1lbnQo
KTsKLSAgICBpZiAob3duZXJFbGVtZW50ICYmIGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPigqb3du
ZXJFbGVtZW50KSkgeworICAgIGlmIChpczxIVE1MRnJhbWVFbGVtZW50QmFzZT4ob3duZXJFbGVt
ZW50KSkgewogICAgICAgICBIVE1MRnJhbWVFbGVtZW50QmFzZSYgb3duZXJGcmFtZUVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZT4oKm93bmVyRWxlbWVudCk7CiAgICAgICAg
IGludCBtYXJnaW5XaWR0aCA9IG93bmVyRnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCk7CiAgICAg
ICAgIGlmIChtYXJnaW5XaWR0aCAhPSAtMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9u
RWxlbWVudC5jcHAKaW5kZXggNDUyOWY4YjMzOGI5ZTlmNGI1MzFlMzY4ZjUwODg1MDMyNjgxOTAz
YS4uMjhkYjkyZjQ0N2E5Mjg0ODcwZTg4YWI4NTBjYTE4MDIzZmViODgyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lk
IEhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsKKyAg
ICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KSkgewogICAgICAgICBLZXlib2FyZEV2ZW50
JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKICAgICAg
ICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQg
JiYga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsKICAgICAgICAg
ICAgIHNldEFjdGl2ZSh0cnVlLCB0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlv
bi5jcHAKaW5kZXggN2FjODY5MzQzNDlmMjcwYWVhYmJiYWJhMmU5NjBmZDdhNTBjZDJhOC4uMTdh
MGNmYmUxMGRjZGJjMmI1NzUyZWE3MWJmZTVkMTBjOGVkNjJlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ29sbGVjdGlvbi5jcHAKQEAgLTQwMCw3ICs0MDAsNyBAQCBOb2RlKiBIVE1MQ29sbGVj
dGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKICAgICAgICAg
fSBlbHNlIGlmICh0cmVlU2NvcGUuaGFzRWxlbWVudFdpdGhOYW1lKCpuYW1lLmltcGwoKSkpIHsK
ICAgICAgICAgICAgIGlmICghdHJlZVNjb3BlLmNvbnRhaW5zTXVsdGlwbGVFbGVtZW50c1dpdGhO
YW1lKG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gdHJlZVNjb3BlLmdldEVs
ZW1lbnRCeU5hbWUobmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSAmJiB0eXBl
KCkgPT0gRG9jQWxsICYmICghaXM8SFRNTEVsZW1lbnQ+KGNhbmRpZGF0ZSkgfHwgIW5hbWVTaG91
bGRCZVZpc2libGVJbkRvY3VtZW50QWxsKGRvd25jYXN0PEhUTUxFbGVtZW50PigqY2FuZGlkYXRl
KSkpKQorICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUgJiYgdHlwZSgpID09IERvY0FsbCAm
JiAoIWlzPEhUTUxFbGVtZW50PigqY2FuZGlkYXRlKSB8fCAhbmFtZVNob3VsZEJlVmlzaWJsZUlu
RG9jdW1lbnRBbGwoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpjYW5kaWRhdGUpKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OnVwZGF0ZU5h
bWVkRWxlbWVudENhY2hlKCkgY29uc3QKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0
dHJWYWwgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwogICAgICAgICBpZiAoIWlkQXR0clZh
bC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjYWNoZS0+YXBwZW5kSWRDYWNoZShpZEF0dHJWYWws
IGVsZW1lbnQpOwotICAgICAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkKKyAgICAg
ICAgaWYgKCFpczxIVE1MRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5nZXRO
YW1lQXR0cmlidXRlKCk7CiAgICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlk
QXR0clZhbCAhPSBuYW1lQXR0clZhbCAmJiAodHlwZSgpICE9IERvY0FsbCB8fCBuYW1lU2hvdWxk
QmVWaXNpYmxlSW5Eb2N1bWVudEFsbChkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnQpKSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggYjJkNjU5NWViMTk0NGVhYzMz
MWUwMjc5ODhiNDFiNTI0YjU0YzUyZC4uNTgzNzQ4MjI1NGEyNTkxNjA2NGRmYzZiY2MyNjdiZWI4
ODZiYTgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtMTM5LDcgKzEz
OSw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpzZXREZXNpZ25Nb2RlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6YmdDb2xvcigpIGNvbnN0CiB7
CiAgICAgSFRNTEVsZW1lbnQqIGJvZHlFbGVtZW50ID0gYm9keSgpOwotICAgIGlmICghYm9keUVs
ZW1lbnQgfHwgIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQorICAgIGlmICghaXM8
SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCiAgICAgICAgIHJldHVybiBlbXB0eUF0b207
CiAgICAgcmV0dXJuIGJvZHlFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGJnY29sb3JBdHRyKTsK
IH0KQEAgLTE0Nyw3ICsxNDcsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6
YmdDb2xvcigpIGNvbnN0CiB2b2lkIEhUTUxEb2N1bWVudDo6c2V0QmdDb2xvcihjb25zdCBTdHJp
bmcmIHZhbHVlKQogewogICAgIEhUTUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJvZHkoKTsKLSAg
ICBpZiAoIWJvZHlFbGVtZW50IHx8ICFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkK
KyAgICBpZiAoIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQogICAgICAgICByZXR1
cm47CiAgICAgYm9keUVsZW1lbnQtPnNldEF0dHJpYnV0ZShiZ2NvbG9yQXR0ciwgdmFsdWUpOwog
fQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpzZXRCZ0NvbG9yKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6ZmdDb2xv
cigpIGNvbnN0CiB7CiAgICAgSFRNTEVsZW1lbnQqIGJvZHlFbGVtZW50ID0gYm9keSgpOwotICAg
IGlmICghYm9keUVsZW1lbnQgfHwgIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQor
ICAgIGlmICghaXM8SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCiAgICAgICAgIHJldHVy
biBlbXB0eUF0b207CiAgICAgcmV0dXJuIGJvZHlFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHRl
eHRBdHRyKTsKIH0KQEAgLTE2Myw3ICsxNjMsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxE
b2N1bWVudDo6ZmdDb2xvcigpIGNvbnN0CiB2b2lkIEhUTUxEb2N1bWVudDo6c2V0RmdDb2xvcihj
b25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEhUTUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJv
ZHkoKTsKLSAgICBpZiAoIWJvZHlFbGVtZW50IHx8ICFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlF
bGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQogICAg
ICAgICByZXR1cm47CiAgICAgYm9keUVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0ZXh0QXR0ciwgdmFs
dWUpOwogfQpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpzZXRGZ0NvbG9y
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6
YWxpbmtDb2xvcigpIGNvbnN0CiB7CiAgICAgSFRNTEVsZW1lbnQqIGJvZHlFbGVtZW50ID0gYm9k
eSgpOwotICAgIGlmICghYm9keUVsZW1lbnQgfHwgIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVs
ZW1lbnQpKQorICAgIGlmICghaXM8SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCiAgICAg
ICAgIHJldHVybiBlbXB0eUF0b207CiAgICAgcmV0dXJuIGJvZHlFbGVtZW50LT5mYXN0R2V0QXR0
cmlidXRlKGFsaW5rQXR0cik7CiB9CkBAIC0xNzksNyArMTc5LDcgQEAgY29uc3QgQXRvbWljU3Ry
aW5nJiBIVE1MRG9jdW1lbnQ6OmFsaW5rQ29sb3IoKSBjb25zdAogdm9pZCBIVE1MRG9jdW1lbnQ6
OnNldEFsaW5rQ29sb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBIVE1MRWxlbWVudCog
Ym9keUVsZW1lbnQgPSBib2R5KCk7Ci0gICAgaWYgKCFib2R5RWxlbWVudCB8fCAhaXM8SFRNTEJv
ZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MQm9keUVsZW1lbnQ+KGJv
ZHlFbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvZHlFbGVtZW50LT5zZXRBdHRyaWJ1
dGUoYWxpbmtBdHRyLCB2YWx1ZSk7CiB9CkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBIVE1MRG9j
dW1lbnQ6OnNldEFsaW5rQ29sb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIGNvbnN0IEF0b21pY1N0
cmluZyYgSFRNTERvY3VtZW50OjpsaW5rQ29sb3IoKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50
KiBib2R5RWxlbWVudCA9IGJvZHkoKTsKLSAgICBpZiAoIWJvZHlFbGVtZW50IHx8ICFpczxIVE1M
Qm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxCb2R5RWxlbWVudD4o
Ym9keUVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZW1wdHlBdG9tOwogICAgIHJldHVybiBib2R5
RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShsaW5rQXR0cik7CiB9CkBAIC0xOTUsNyArMTk1LDcg
QEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OmxpbmtDb2xvcigpIGNvbnN0CiB2
b2lkIEhUTUxEb2N1bWVudDo6c2V0TGlua0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgSFRNTEVsZW1lbnQqIGJvZHlFbGVtZW50ID0gYm9keSgpOwotICAgIGlmICghYm9keUVsZW1l
bnQgfHwgIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQorICAgIGlmICghaXM8SFRN
TEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKICAgICByZXR1cm4g
Ym9keUVsZW1lbnQtPnNldEF0dHJpYnV0ZShsaW5rQXR0ciwgdmFsdWUpOwogfQpAQCAtMjAzLDcg
KzIwMyw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpzZXRMaW5rQ29sb3IoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTERvY3VtZW50Ojp2bGlua0NvbG9yKCkgY29u
c3QKIHsKICAgICBIVE1MRWxlbWVudCogYm9keUVsZW1lbnQgPSBib2R5KCk7Ci0gICAgaWYgKCFi
b2R5RWxlbWVudCB8fCAhaXM8SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCisgICAgaWYg
KCFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGVtcHR5
QXRvbTsKICAgICByZXR1cm4gYm9keUVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodmxpbmtBdHRy
KTsKIH0KQEAgLTIxMSw3ICsyMTEsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVu
dDo6dmxpbmtDb2xvcigpIGNvbnN0CiB2b2lkIEhUTUxEb2N1bWVudDo6c2V0VmxpbmtDb2xvcihj
b25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEhUTUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJv
ZHkoKTsKLSAgICBpZiAoIWJvZHlFbGVtZW50IHx8ICFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlF
bGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQogICAg
ICAgICByZXR1cm47CiAgICAgcmV0dXJuIGJvZHlFbGVtZW50LT5zZXRBdHRyaWJ1dGUodmxpbmtB
dHRyLCB2YWx1ZSk7CiB9CkBAIC0zMzksOCArMzM5LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnQ6OmNs
ZWFyKCkKIAogYm9vbCBIVE1MRG9jdW1lbnQ6OmlzRnJhbWVTZXQoKSBjb25zdAogewotICAgIEhU
TUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJvZHkoKTsKLSAgICByZXR1cm4gYm9keUVsZW1lbnQg
JiYgaXM8SFRNTEZyYW1lU2V0RWxlbWVudD4oYm9keUVsZW1lbnQpOworICAgIHJldHVybiBpczxI
VE1MRnJhbWVTZXRFbGVtZW50Pihib2R5KCkpOwogfQogCiBQYXNzUmVmUHRyPERvY3VtZW50PiBI
VE1MRG9jdW1lbnQ6OmNsb25lRG9jdW1lbnRXaXRob3V0Q2hpbGRyZW4oKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCA5YWM0MTNmMDEwNzVkMzY4ZWQ0ZGU1OGRlMjY3
YmRiYjMzMDVjYzFiLi5jNzkzMWFlNTdmMjM1YmFmOTlhZGZhZmNjMjgxMjI4YjZlMGQ3NDAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMzY0LDcgKzM2NCw3IEBAIGJvb2wg
SFRNTEVsZW1lbnQ6Om1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpIGNvbnN0CiB7CiAgICAg
Y29uc3QgRWxlbWVudCogY3VycmVudEVsZW1lbnQgPSB0aGlzOwogICAgIGRvIHsKLSAgICAgICAg
aWYgKGlzPEhUTUxFbGVtZW50PihjdXJyZW50RWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGlzPEhU
TUxFbGVtZW50PigqY3VycmVudEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRl
bnRFZGl0YWJsZVR5cGUoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpjdXJyZW50RWxlbWVudCkpKSB7
CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFZGl0YWJsZVR5cGU6OlRydWU6CiAgICAgICAgICAg
ICBjYXNlIENvbnRlbnRFZGl0YWJsZVR5cGU6OlBsYWludGV4dE9ubHk6CkBAIC00MzYsNyArNDM2
LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiBzdGF0aWMgdm9pZCBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoVGV4
dCYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgTm9kZSogbmV4dCA9IG5vZGUubmV4
dFNpYmxpbmcoKTsKLSAgICBpZiAoIW5leHQgfHwgIWlzPFRleHQ+KG5leHQpKQorICAgIGlmICgh
aXM8VGV4dD4obmV4dCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZjxUZXh0PiB0ZXh0Tm9k
ZShub2RlKTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdGF0aWMgdm9pZCBtZXJnZVdpdGhOZXh0VGV4
dE5vZGUoVGV4dCYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB2b2lkIEhUTUxFbGVtZW50Ojpz
ZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBFbGVtZW50KiBwID0gcGFyZW50RWxlbWVudCgpOwotICAgIGlmICghcCB8fCAhaXM8SFRNTEVs
ZW1lbnQ+KHApKSB7CisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4ocCkpIHsKICAgICAgICAgZWMg
PSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC00NjQsOSArNDY0LDkgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0T3V0ZXJIVE1MKGNvbnN0IFN0
cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAKICAgICBwYXJlbnQtPnJlcGxh
Y2VDaGlsZChmcmFnbWVudC5yZWxlYXNlKCksIHRoaXMsIGVjKTsKICAgICBSZWZQdHI8Tm9kZT4g
bm9kZSA9IG5leHQgPyBuZXh0LT5wcmV2aW91c1NpYmxpbmcoKSA6IG51bGxwdHI7Ci0gICAgaWYg
KCFlYyAmJiBub2RlICYmIGlzPFRleHQ+KCpub2RlKSkKKyAgICBpZiAoIWVjICYmIGlzPFRleHQ+
KG5vZGUuZ2V0KCkpKQogICAgICAgICBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4
dD4oKm5vZGUpLCBlYyk7Ci0gICAgaWYgKCFlYyAmJiBwcmV2ICYmIGlzPFRleHQ+KCpwcmV2KSkK
KyAgICBpZiAoIWVjICYmIGlzPFRleHQ+KHByZXYuZ2V0KCkpKQogICAgICAgICBtZXJnZVdpdGhO
ZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKnByZXYpLCBlYyk7CiB9CiAKQEAgLTU5Nyw5ICs1
OTcsOSBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBwYXJlbnQtPnJlcGxhY2VDaGlsZChuZXdDaGlsZC5y
ZWxlYXNlKCksIHRoaXMsIGVjKTsKIAogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbmV4dCA/IG5l
eHQtPnByZXZpb3VzU2libGluZygpIDogbnVsbHB0cjsKLSAgICBpZiAoIWVjICYmIG5vZGUgJiYg
aXM8VGV4dD4oKm5vZGUpKQorICAgIGlmICghZWMgJiYgaXM8VGV4dD4obm9kZS5nZXQoKSkpCiAg
ICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShkb3duY2FzdDxUZXh0Pigqbm9kZSksIGVjKTsK
LSAgICBpZiAoIWVjICYmIHByZXYgJiYgaXM8VGV4dD4oKnByZXYpKQorICAgIGlmICghZWMgJiYg
aXM8VGV4dD4ocHJldi5nZXQoKSkpCiAgICAgICAgIG1lcmdlV2l0aE5leHRUZXh0Tm9kZShkb3du
Y2FzdDxUZXh0PigqcHJldiksIGVjKTsKIH0KIApAQCAtNjQyLDcgKzY0Miw3IEBAIEVsZW1lbnQq
IEhUTUxFbGVtZW50OjppbnNlcnRBZGphY2VudEVsZW1lbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwg
RWxlbWVudCogbmV3Q2hpCiAgICAgfQogCiAgICAgTm9kZSogcmV0dXJuVmFsdWUgPSBpbnNlcnRB
ZGphY2VudCh3aGVyZSwgbmV3Q2hpbGQsIGVjKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighcmV0dXJuVmFsdWUgfHwgaXM8RWxlbWVudD4ocmV0dXJuVmFsdWUpKTsKKyAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighcmV0dXJuVmFsdWUgfHwgaXM8RWxl
bWVudD4oKnJldHVyblZhbHVlKSk7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KHJldHVy
blZhbHVlKTsgCiB9CiAKQEAgLTY1MSwxMSArNjUxLDExIEBAIHN0YXRpYyBFbGVtZW50KiBjb250
ZXh0RWxlbWVudEZvckluc2VydGlvbihjb25zdCBTdHJpbmcmIHdoZXJlLCBFbGVtZW50KiBlbGVt
ZW50CiB7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHdoZXJlLCAiYmVmb3JlQmVnaW4iKSB8
fCBlcXVhbElnbm9yaW5nQ2FzZSh3aGVyZSwgImFmdGVyRW5kIikpIHsKICAgICAgICAgQ29udGFp
bmVyTm9kZSogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAocGFy
ZW50ICYmICFpczxFbGVtZW50PihwYXJlbnQpKSB7CisgICAgICAgIGlmIChwYXJlbnQgJiYgIWlz
PEVsZW1lbnQ+KCpwYXJlbnQpKSB7CiAgICAgICAgICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9B
TExPV0VEX0VSUjsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFwYXJlbnQgfHwgaXM8RWxlbWVu
dD4ocGFyZW50KSk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFw
YXJlbnQgfHwgaXM8RWxlbWVudD4oKnBhcmVudCkpOwogICAgICAgICByZXR1cm4gZG93bmNhc3Q8
RWxlbWVudD4ocGFyZW50KTsKICAgICB9CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHdoZXJl
LCAiYWZ0ZXJCZWdpbiIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHdoZXJlLCAiYmVmb3JlRW5kIikp
CkBAIC05MzQsMTMgKzkzNCwxMyBAQCBUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rp
b25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkgYwogICAgIHdoaWxl
IChub2RlKSB7CiAgICAgICAgIC8vIFNraXAgYmRpLCBzY3JpcHQsIHN0eWxlIGFuZCB0ZXh0IGZv
cm0gY29udHJvbHMuCiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShub2RlLT5ub2RlTmFt
ZSgpLCAiYmRpIikgfHwgbm9kZS0+aGFzVGFnTmFtZShzY3JpcHRUYWcpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoc3R5bGVUYWcpIAotICAgICAgICAgICAgfHwgKGlzPEVsZW1lbnQ+KG5vZGUpICYmIGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1RleHRGb3JtQ29udHJvbCgpKSkgeworICAgICAgICAg
ICAgfHwgKGlzPEVsZW1lbnQ+KCpub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNU
ZXh0Rm9ybUNvbnRyb2woKSkpIHsKICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0aGlzKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gU2tpcCBlbGVtZW50cyB3aXRoIHZhbGlkIGRpciBhdHRy
aWJ1dGUKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChpczxF
bGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBkaXJBdHRyaWJ1dGVW
YWx1ZSA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKGRpckF0dHIp
OwogICAgICAgICAgICAgaWYgKGlzTFRST3JSVExJZ25vcmluZ0Nhc2UoZGlyQXR0cmlidXRlVmFs
dWUpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGRpckF0dHJpYnV0ZVZhbHVlLCAiYXV0byIpKSB7CiAg
ICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KG5vZGUsIHRoaXMpOwpAQCAtOTY4LDcgKzk2OCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmRpckF0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBFbGVtZW50
KiBwYXJlbnQgPSBwYXJlbnRFbGVtZW50KCk7CiAKLSAgICBpZiAocGFyZW50ICYmIGlzPEhUTUxF
bGVtZW50PihwYXJlbnQpICYmIHBhcmVudC0+c2VsZk9yQW5jZXN0b3JIYXNEaXJBdXRvQXR0cmli
dXRlKCkpCisgICAgaWYgKGlzPEhUTUxFbGVtZW50PihwYXJlbnQpICYmIHBhcmVudC0+c2VsZk9y
QW5jZXN0b3JIYXNEaXJBdXRvQXR0cmlidXRlKCkpCiAgICAgICAgIGRvd25jYXN0PEhUTUxFbGVt
ZW50PigqcGFyZW50KS5hZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZEF0dHJp
YnV0ZUNoYW5nZWQodGhpcyk7CiAKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJh
dXRvIikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAppbmRleCBjMTkw
MWVlOWE2ZGI4MWNhNTdhODkzNDBhMjEyYzcxMjFhZmQ1NDg3Li4zNDU0MmFkYjQwYjgwOTdmZjRh
YjNhOGU3ZjZlOWM2OTNiOTQwZTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbWJlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxl
bWVudC5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCBib29sIEhUTUxFbWJlZEVsZW1lbnQ6OnJlbmRl
cmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIC8vIElmIG15IHBhcmVu
dCBpcyBhbiA8b2JqZWN0PiBhbmQgaXMgbm90IHNldCB0byB1c2UgZmFsbGJhY2sgY29udGVudCwg
SQogICAgIC8vIHNob3VsZCBiZSBpZ25vcmVkIGFuZCBub3QgZ2V0IGEgcmVuZGVyZXIuCiAgICAg
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwotICAgIGlmIChwYXJlbnQgJiYg
aXM8SFRNTE9iamVjdEVsZW1lbnQ+KHBhcmVudCkpIHsKKyAgICBpZiAoaXM8SFRNTE9iamVjdEVs
ZW1lbnQ+KHBhcmVudCkpIHsKICAgICAgICAgaWYgKCFwYXJlbnQtPnJlbmRlcmVyKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghZG93bmNhc3Q8SFRNTE9iamVjdEVs
ZW1lbnQ+KCpwYXJlbnQpLnVzZUZhbGxiYWNrQ29udGVudCgpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAppbmRleCBhYzM2NTFmMTkzNWY0OTUxYTFjMTVh
ZDljYjdmN2FkNmRiYjdiNGUyLi5mYTMxZTVkMjIzYzVjM2IyY2QyZTdlODc1YjY2Mzc5YTMwNzFl
NjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKQEAg
LTY1LDcgKzY1LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlRnJvbUNvbnRyb2xFbGVtZW50c0FuY2Vz
dG9yRGlzYWJsZWRTdGF0ZVVuZGVyKEhUTUxFbGVtZW50JiBzdGEKICAgICB3aGlsZSAoY29udHJv
bCkgewogICAgICAgICBjb250cm9sLT5zZXRBbmNlc3RvckRpc2FibGVkKGlzRGlzYWJsZWQpOwog
ICAgICAgICAvLyBEb24ndCBjYWxsIHNldEFuY2VzdG9yRGlzYWJsZWQoZmFsc2UpIG9uIGZvcm0g
Y29udG9ybHMgaW5zaWRlIGRpc2FibGVkIGZpZWxkc2V0cy4KLSAgICAgICAgaWYgKGlzPEhUTUxG
aWVsZFNldEVsZW1lbnQ+KGNvbnRyb2wpICYmIGNvbnRyb2wtPmZhc3RIYXNBdHRyaWJ1dGUoZGlz
YWJsZWRBdHRyKSkKKyAgICAgICAgaWYgKGlzPEhUTUxGaWVsZFNldEVsZW1lbnQ+KCpjb250cm9s
KSAmJiBjb250cm9sLT5mYXN0SGFzQXR0cmlidXRlKGRpc2FibGVkQXR0cikpCiAgICAgICAgICAg
ICBjb250cm9sID0gVHJhdmVyc2FsPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+OjpuZXh0U2tpcHBp
bmdDaGlsZHJlbihjb250cm9sLCAmc3RhcnROb2RlKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgY29udHJvbCA9IFRyYXZlcnNhbDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pjo6bmV4dChjb250
cm9sLCAmc3RhcnROb2RlKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBIVE1MRmllbGRTZXRFbGVt
ZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgpCiAgICAgYm9vbCB0aGlzRmllbGRzZXRJc0Rpc2Fi
bGVkID0gZmFzdEhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpOwogICAgIGJvb2wgaGFzU2VlbkZp
cnN0TGVnZW5kRWxlbWVudCA9IGZhbHNlOwogICAgIGZvciAoSFRNTEVsZW1lbnQqIGNvbnRyb2wg
PSBUcmF2ZXJzYWw8SFRNTEVsZW1lbnQ+OjpmaXJzdENoaWxkKHRoaXMpOyBjb250cm9sOyBjb250
cm9sID0gVHJhdmVyc2FsPEhUTUxFbGVtZW50Pjo6bmV4dFNpYmxpbmcoY29udHJvbCkpIHsKLSAg
ICAgICAgaWYgKCFoYXNTZWVuRmlyc3RMZWdlbmRFbGVtZW50ICYmIGlzPEhUTUxMZWdlbmRFbGVt
ZW50Pihjb250cm9sKSkgeworICAgICAgICBpZiAoIWhhc1NlZW5GaXJzdExlZ2VuZEVsZW1lbnQg
JiYgaXM8SFRNTExlZ2VuZEVsZW1lbnQ+KCpjb250cm9sKSkgewogICAgICAgICAgICAgaGFzU2Vl
bkZpcnN0TGVnZW5kRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICB1cGRhdGVGcm9tQ29udHJv
bEVsZW1lbnRzQW5jZXN0b3JEaXNhYmxlZFN0YXRlVW5kZXIoKmNvbnRyb2wsIGZhbHNlIC8qIGlz
RGlzYWJsZWQgKi8pOwogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCAxNWIwM2RkZWM1ZmZlMTQ5NjJi
MjE4MzdiY2I5ODFhYzU5ZjgzNTAzLi5jMmFiMjA5YzM4MGM2MTVkMTZiN2E3MWRjMTM3MWI3MGRl
OGU4MjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKQEAgLTEwMyw5ICsxMDMsOSBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNv
bXB1dGVJc0Rpc2FibGVkQnlGaWVsZHNldEFuY2VzdG9yKCkgY29uc3QKIHsKICAgICBFbGVtZW50
KiBwcmV2aW91c0FuY2VzdG9yID0gbnVsbHB0cjsKICAgICBmb3IgKEVsZW1lbnQqIGFuY2VzdG9y
ID0gcGFyZW50RWxlbWVudCgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50
RWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRmllbGRTZXRFbGVtZW50PihhbmNlc3Rv
cikgJiYgYW5jZXN0b3ItPmZhc3RIYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkgeworICAgICAg
ICBpZiAoaXM8SFRNTEZpZWxkU2V0RWxlbWVudD4oKmFuY2VzdG9yKSAmJiBhbmNlc3Rvci0+ZmFz
dEhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpKSB7CiAgICAgICAgICAgICBIVE1MRmllbGRTZXRF
bGVtZW50JiBmaWVsZFNldEFuY2VzdG9yID0gZG93bmNhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudD4o
KmFuY2VzdG9yKTsKLSAgICAgICAgICAgIGJvb2wgaXNJbkZpcnN0TGVnZW5kID0gcHJldmlvdXNB
bmNlc3RvciAmJiBpczxIVE1MTGVnZW5kRWxlbWVudD4ocHJldmlvdXNBbmNlc3RvcikgJiYgcHJl
dmlvdXNBbmNlc3RvciA9PSBmaWVsZFNldEFuY2VzdG9yLmxlZ2VuZCgpOworICAgICAgICAgICAg
Ym9vbCBpc0luRmlyc3RMZWdlbmQgPSBpczxIVE1MTGVnZW5kRWxlbWVudD4ocHJldmlvdXNBbmNl
c3RvcikgJiYgcHJldmlvdXNBbmNlc3RvciA9PSBmaWVsZFNldEFuY2VzdG9yLmxlZ2VuZCgpOwog
ICAgICAgICAgICAgcmV0dXJuICFpc0luRmlyc3RMZWdlbmQ7CiAgICAgICAgIH0KICAgICAgICAg
cHJldmlvdXNBbmNlc3RvciA9IGFuY2VzdG9yOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyBi
b29sIHNob3VsZEF1dG9mb2N1cyhIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQogCiAg
ICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIHNldCBvZiBoYXNUYWdOYW1lIGNoZWNrcyBiZSByZXBs
YWNlZCBieSBhCiAgICAgLy8gdmlydHVhbCBtZW1iZXIgZnVuY3Rpb24/Ci0gICAgaWYgKGlzPEhU
TUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigq
ZWxlbWVudCkpCiAgICAgICAgIHJldHVybiAhZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVs
ZW1lbnQpLmlzSW5wdXRUeXBlSGlkZGVuKCk7CiAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
c2VsZWN0VGFnKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDAsNyArMjAwLDcgQEAgc3Rh
dGljIGJvb2wgc2hvdWxkQXV0b2ZvY3VzKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGJ1dHRv
blRhZykpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVt
ZW50PihlbGVtZW50KSkKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKmVsZW1lbnQp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTUwOCw3ICs1
MDgsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEF1dG9jYXBpdGFsaXplKGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjplbmNsb3NpbmdGb3JtQ29udHJvbEVsZW1lbnQoTm9kZSogbm9kZSkK
IHsKICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAg
ICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmIChpczxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSk7CiAgICAgfQogICAgIHJldHVybiBudWxs
cHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IGI5YzM3ZTA1
YjBhODRlM2NlNDU5YmRiNGYxOWYyM2UwZjFkMjEzZmUuLjMwZGY2ZTAzODllMjZkM2I2ZTU0NDNh
MmRmOGZhZjAwMDEzMzc2ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6cmVuZGVyZXJJc05l
ZWRlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIEZJWE1FOiBTaG91bGRuJ3Qgd2UgYWxzbyBjaGVjayBmb3IgdGFibGUgY2FwdGlvbiAo
c2VlIHxmb3JtSXNUYWJsZVBhcnR8IGJlbG93KS4KLSAgICBib29sIHBhcmVudElzVGFibGVFbGVt
ZW50UGFydCA9IChwYXJlbnRSZW5kZXJlci0+aXNUYWJsZSgpICYmIGlzPEhUTUxUYWJsZUVsZW1l
bnQ+KHBhcmVudCkpCisgICAgYm9vbCBwYXJlbnRJc1RhYmxlRWxlbWVudFBhcnQgPSAocGFyZW50
UmVuZGVyZXItPmlzVGFibGUoKSAmJiBpczxIVE1MVGFibGVFbGVtZW50PigqcGFyZW50KSkKICAg
ICAgICAgfHwgKHBhcmVudFJlbmRlcmVyLT5pc1RhYmxlUm93KCkgJiYgcGFyZW50LT5oYXNUYWdO
YW1lKHRyVGFnKSkKICAgICAgICAgfHwgKHBhcmVudFJlbmRlcmVyLT5pc1RhYmxlU2VjdGlvbigp
ICYmIHBhcmVudC0+aGFzVGFnTmFtZSh0Ym9keVRhZykpCiAgICAgICAgIHx8IChwYXJlbnRSZW5k
ZXJlci0+aXNSZW5kZXJUYWJsZUNvbCgpICYmIHBhcmVudC0+aGFzVGFnTmFtZShjb2xUYWcpKQpA
QCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5
KEV2ZW50KiBldmVudCwgYm9vbCBmcm9tSW1wbGljaXRTdWJtaXNzaW9uCiAgICAgdW5zaWduZWQg
c3VibWlzc2lvblRyaWdnZXJDb3VudCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCogZm9ybUFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVudHNb
aV07Ci0gICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZm9ybUFzc29jaWF0
ZWRFbGVtZW50KSkKKyAgICAgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZm9y
bUFzc29jaWF0ZWRFbGVtZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50JiBmb3JtRWxlbWVudCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+KCpmb3JtQXNzb2NpYXRlZEVsZW1lbnQpOwogICAgICAgICBpZiAoZm9ybUVsZW1l
bnQuaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpIHsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lk
IEhUTUxGb3JtRWxlbWVudDo6c3VibWl0SW1wbGljaXRseShFdmVudCogZXZlbnQsIGJvb2wgZnJv
bUltcGxpY2l0U3VibWlzc2lvbgogc3RhdGljIGlubGluZSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBzdWJtaXRFbGVtZW50RnJvbUV2ZW50KGNvbnN0IEV2ZW50KiBldmVudCkKIHsKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOyBub2RlOyBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2Rl
KTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMjMsNyArMjIzLDcgQEAgYm9vbCBI
VE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdmVseShFdmVudCogZXZlbnQpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2Np
YXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50PihtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkpCisgICAgICAgIGlmIChpczxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pKQogICAgICAgICAg
ICAgZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRz
W2ldKS5oaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAgfQogCkBAIC0zNDUsNyAr
MzQ1LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wg
YWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgcHJvY2UKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVu
dHNbaV07Ci0gICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oYXNzb2NpYXRl
ZEVsZW1lbnQpKQorICAgICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCphc3Nv
Y2lhdGVkRWxlbWVudCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG5lZWRC
dXR0b25BY3RpdmF0aW9uKSB7CiAgICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50JiBj
b250cm9sID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmFzc29jaWF0ZWRFbGVt
ZW50KTsKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXQoKQog
ICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
bV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pKQorICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKICAgICAgICAgICAgIGRvd25jYXN0
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkucmVzZXQo
KTsKICAgICB9CiAKQEAgLTY5Niw3ICs2OTYsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6d2Fz
VXNlclN1Ym1pdHRlZCgpIGNvbnN0CiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9ybUVs
ZW1lbnQ6OmRlZmF1bHRCdXR0b24oKSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWlz
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKKyAgICAg
ICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNb
aV0pKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQmIGNvbnRyb2wgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbV9hc3NvY2lh
dGVkRWxlbWVudHNbaV0pOwogICAgICAgICBpZiAoY29udHJvbC5pc1N1Y2Nlc3NmdWxTdWJtaXRC
dXR0b24oKSkKQEAgLTgxMCw3ICs4MTAsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZG9jdW1l
bnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKCkKICAgICBBU1NFUlQoIXNob3VsZEF1dG9jb21wbGV0
ZSgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
bV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pKQorICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKICAgICAgICAgICAgIGRvd25jYXN0
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkucmVzZXQo
KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93
bmVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVu
dC5jcHAKaW5kZXggYTVlMzE5NTg0NGUzZGY2OGY5MjU5NDIwYjE3ZjMxZjE5OTgxZTNhNy4uNTIw
NDcyNjQ5NDM1YThmNWJhNzNlNmM2YTNlYTA2MTZkZWFiYTYwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIGJv
b2wgSFRNTEZyYW1lT3duZXJFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZl
bnQqIGV2ZW50KSBjb25zdAogU1ZHRG9jdW1lbnQqIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6Z2V0
U1ZHRG9jdW1lbnQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gY29udGVudERvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50ICYmIGlzPFNWR0Rv
Y3VtZW50Pihkb2N1bWVudCkpCisgICAgaWYgKGlzPFNWR0RvY3VtZW50Pihkb2N1bWVudCkpCiAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdEb2N1bWVudD4oZG9jdW1lbnQpOwogICAgIC8vIFNw
ZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9zdHJ1Y3QuaHRtbCNJbnRlcmZhY2VHZXRTVkdE
b2N1bWVudAogICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAppbmRleCAzNWVhNTJjYmNlY2JjNDk0YzBmZjdlNjdl
NGQzNDU5Y2NkNTlmZDlhLi45YTc5NjE3ZGViM2M2NzM2NTc0OTUwMjBlNTA0NTE1MDcyM2RmZGQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKQEAgLTE4
OSw3ICsxODksOCBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OndpbGxBdHRhY2hSZW5kZXJl
cnMoKQogCiB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogewotICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkgJiYgIW1fbm9yZXNp
emUgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0ZyYW1lU2V0KCkpIHsKKyAgICBBU1NF
UlQoZXZlbnQpOworICAgIGlmIChpczxNb3VzZUV2ZW50PigqZXZlbnQpICYmICFtX25vcmVzaXpl
ICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNGcmFtZVNldCgpKSB7CiAgICAgICAgIGlm
ICh0b1JlbmRlckZyYW1lU2V0KHJlbmRlcmVyKCkpLT51c2VyUmVzaXplKGRvd25jYXN0PE1vdXNl
RXZlbnQ+KGV2ZW50KSkpIHsKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKaW5kZXggZWFmMjY1NGU1OTdiYjBlNDkyYThmODlmMzcyNzE0Y2MxZTU0NDNjYy4uMDQw
YmEwMThiOWRhNjZiN2M2NTI4Yzc1N2Y1YzY2MTNkOWU4Mjc2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMDQ1LDIxICsxMDQ1LDIyIEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6ZGlkRGlzcGF0Y2hDbGlja0V2ZW50KEV2ZW50JiBldmVudCwgY29uc3Qg
SW5wdXRFbGVtZW50Q2xpCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZ0KQogewotICAgIGlmIChpczxNb3VzZUV2ZW50PihldnQpICYmIGV2dC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+
KCpldnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBBU1NFUlQoZXZ0KTsKKyAgICBp
ZiAoaXM8TW91c2VFdmVudD4oKmV2dCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNs
aWNrRXZlbnQgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2dCkuYnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewogICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQ2xpY2tFdmVudChkb3duY2FzdDxN
b3VzZUV2ZW50PihldnQpKTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAg
IGlmIChpczxUb3VjaEV2ZW50PihldnQpKSB7CisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KCpldnQp
KSB7CiAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVUb3VjaEV2ZW50KGRvd25jYXN0PFRvdWNo
RXZlbnQ+KGV2dCkpOwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+
KGV2dCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgeworICAg
IGlmIChpczxLZXlib2FyZEV2ZW50PigqZXZ0KSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkua2V5ZG93bkV2ZW50KSB7CiAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlkb3duRXZl
bnQoZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oZXZ0KSk7CiAgICAgICAgIGlmIChldnQtPmRlZmF1
bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDg2LDcgKzEwODcsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKIAog
ICAgIC8vIFVzZSBrZXkgcHJlc3MgZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBt
b3VzZSBldmVudHMKICAgICAvLyBvbiBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5n
IG9mIHRoZSBrZXkgcHJlc3MgZXZlbnQuCi0gICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2dCkp
IHsKKyAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oKmV2dCkpIHsKICAgICAgICAgS2V5Ym9hcmRF
dmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldnQpOwogICAg
ICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZl
bnQpIHsKICAgICAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlwcmVzc0V2ZW50KCZrZXli
b2FyZEV2ZW50KTsKQEAgLTExMTgsMTAgKzExMTksMTAgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoaXM8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+KGV2dCkpCisgICAgaWYgKGlz
PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PigqZXZ0KSkKICAgICAgICAgbV9pbnB1dFR5cGUtPmhh
bmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KGRvd25jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50PihldnQpKTsKIAotICAgIGlmIChpczxNb3VzZUV2ZW50PihldnQpICYmIGV2dC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAgIGlmIChpczxNb3VzZUV2ZW50
PigqZXZ0KSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsK
ICAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZU1vdXNlRG93bkV2ZW50KGRvd25jYXN0PE1vdXNl
RXZlbnQ+KGV2dCkpOwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMTUyMiw3ICsxNTIzLDcgQEAgSFRNTERhdGFMaXN0RWxlbWVudCog
SFRNTElucHV0RWxlbWVudDo6ZGF0YUxpc3QoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChm
YXN0R2V0QXR0cmlidXRlKGxpc3RBdHRyKSk7Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFpczxIVE1M
RGF0YUxpc3RFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxEYXRhTGlzdEVsZW1l
bnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBkb3du
Y2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxMYWJlbEVsZW1lbnQuY3BwCmluZGV4IDEyNTI2MGZjNjMyZjQyM2Y1ZjU2ZjI4MWM0MmM4YjBh
MjdjYzc3NWEuLjJlMTk4ODk4Njk1YTM1NTY1NDNkMzNhYzQ4ZWEzYzdkNTdlNjdhNWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcApAQCAtMzgsNyArMzgsNyBAQCB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgTGFiZWxhYmxlRWxlbWVudCogbm9k
ZUFzU3VwcG9ydGVkTGFiZWxhYmxlRWxlbWVudChOb2RlKiBub2RlKQogewotICAgIGlmICghbm9k
ZSB8fCAhaXM8TGFiZWxhYmxlRWxlbWVudD4oKm5vZGUpKQorICAgIGlmICghaXM8TGFiZWxhYmxl
RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIExhYmVsYWJsZUVs
ZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxMYWJlbGFibGVFbGVtZW50Pigqbm9kZSk7CiAgICAg
cmV0dXJuIGVsZW1lbnQuc3VwcG9ydExhYmVscygpID8gJmVsZW1lbnQgOiBudWxscHRyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAppbmRleCA4ZTljODI5MzFjMjQ0
ZDE5OWE4Njc5MzYzN2RmM2QwNjNhNWFmNjY4Li5hMTk3YzIxZTA1ODlmNzkyMjgzMTMyNmYwMTIz
MDI0MjIxOGZmMDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNw
cApAQCAtNzksNyArNzksNyBAQCBIVE1MRm9ybUVsZW1lbnQqIEhUTUxMZWdlbmRFbGVtZW50Ojp2
aXJ0dWFsRm9ybSgpIGNvbnN0CiAgICAgLy8gaXRzIHBhcmVudCwgdGhlbiB0aGUgZm9ybSBhdHRy
aWJ1dGUgbXVzdCByZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgdGhlCiAgICAgLy8gZm9ybSBhdHRy
aWJ1dGUgb24gdGhhdCBmaWVsZHNldCBlbGVtZW50LiBPdGhlcndpc2UsIGl0IG11c3QgcmV0dXJu
IG51bGwuCiAgICAgQ29udGFpbmVyTm9kZSogZmllbGRzZXQgPSBwYXJlbnROb2RlKCk7Ci0gICAg
aWYgKCFmaWVsZHNldCB8fCAhaXM8SFRNTEZpZWxkU2V0RWxlbWVudD4oZmllbGRzZXQpKQorICAg
IGlmICghaXM8SFRNTEZpZWxkU2V0RWxlbWVudD4oZmllbGRzZXQpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIHJldHVybiBkb3duY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50PigqZmll
bGRzZXQpLmZvcm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmlu
ZGV4IGU5ZjBjZDkwYWQ4ZWZlOTQ5NTg1MzI0ODNjN2Q1N2FkY2UxZTA3MGEuLjFjMzA1YTI2NzBl
ODIwYTgwYzQxZmE4MmMxOTIyNWU2MjY4NGU1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcApAQCAtNDg3Nyw3ICs0ODc3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjplbnRlckZ1bGxzY3JlZW4oKQogICAgIG1faXNJblZpZGVvRnVsbHNjcmVlbiA9IHRydWU7
CiAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKICAgICAgICAgbWVkaWFDb250cm9scygpLT5l
bnRlcmVkRnVsbHNjcmVlbigpOwotICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiBpczxIVE1M
VmlkZW9FbGVtZW50Pih0aGlzKSkgeworICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiBpczxI
VE1MVmlkZW9FbGVtZW50PigqdGhpcykpIHsKICAgICAgICAgSFRNTFZpZGVvRWxlbWVudCYgYXNW
aWRlbyA9IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCp0aGlzKTsKICAgICAgICAgaWYgKGRv
Y3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zdXBwb3J0c1ZpZGVvRnVsbHNjcmVl
bigpKSB7CiAgICAgICAgICAgICBkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCku
ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoJmFzVmlkZW8pOwpAQCAtNDkwMSw3
ICs0OTAxLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAg
bV9pc0luVmlkZW9GdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMo
KSkKICAgICAgICAgbWVkaWFDb250cm9scygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYg
KGRvY3VtZW50KCkucGFnZSgpICYmIGlzPEhUTUxWaWRlb0VsZW1lbnQ+KHRoaXMpKSB7CisgICAg
aWYgKGRvY3VtZW50KCkucGFnZSgpICYmIGlzPEhUTUxWaWRlb0VsZW1lbnQ+KCp0aGlzKSkgewog
ICAgICAgICBpZiAobV9tZWRpYVNlc3Npb24tPnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxh
eWJhY2soKnRoaXMpKQogICAgICAgICAgICAgcGF1c2VJbnRlcm5hbCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IDE0OTM4ZmFkMGM0Yzc2NmVkYmY3
NWJmODMyMDdhOTE3ZGEyNGIwZDIuLjY4OGI0NTBhMzgzNDY3ZjA5NjJiYjExZTQ3YTkzYmU2OTg5
NmYxYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC0y
MzEsMTAgKzIzMSwxMCBAQCBib29sIEhUTUxPYmplY3RFbGVtZW50OjpoYXNGYWxsYmFja0NvbnRl
bnQoKSBjb25zdAogewogICAgIGZvciAoTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIC8vIElnbm9yZSB3aGl0
ZXNwYWNlLW9ubHkgdGV4dCwgYW5kIDxwYXJhbT4gdGFncywgYW55IG90aGVyIGNvbnRlbnQgaXMg
ZmFsbGJhY2sgY29udGVudC4KLSAgICAgICAgaWYgKGlzPFRleHQ+KGNoaWxkKSkgeworICAgICAg
ICBpZiAoaXM8VGV4dD4oKmNoaWxkKSkgewogICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxUZXh0
PigqY2hpbGQpLmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmICghaXM8SFRNTFBhcmFtRWxlbWVudD4oY2hpbGQp
KQorICAgICAgICB9IGVsc2UgaWYgKCFpczxIVE1MUGFyYW1FbGVtZW50PigqY2hpbGQpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTQyMywx
MiArNDIzLDEyIEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSgp
CiAgICAgYm9vbCBpc05hbWVkSXRlbSA9IHRydWU7CiAgICAgTm9kZSogY2hpbGQgPSBmaXJzdENo
aWxkKCk7CiAgICAgd2hpbGUgKGNoaWxkICYmIGlzTmFtZWRJdGVtKSB7Ci0gICAgICAgIGlmIChp
czxFbGVtZW50PihjaGlsZCkpIHsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjaGlsZCkpIHsK
ICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqY2hpbGQp
OwogICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBvZiBpc1JlY29nbml6ZWRUYWdOYW1lIGlzIGFs
bW9zdCBjZXJ0YWlubHkgd3JvbmcgaGVyZS4KICAgICAgICAgICAgIGlmIChpc1JlY29nbml6ZWRU
YWdOYW1lKGVsZW1lbnQudGFnUU5hbWUoKSkgJiYgIWVsZW1lbnQuaGFzVGFnTmFtZShwYXJhbVRh
ZykpCiAgICAgICAgICAgICAgICAgaXNOYW1lZEl0ZW0gPSBmYWxzZTsKLSAgICAgICAgfSBlbHNl
IGlmIChpczxUZXh0PihjaGlsZCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpczxUZXh0PigqY2hp
bGQpKSB7CiAgICAgICAgICAgICBpZiAoIWRvd25jYXN0PFRleHQ+KCpjaGlsZCkuY29udGFpbnNP
bmx5V2hpdGVzcGFjZSgpKQogICAgICAgICAgICAgICAgIGlzTmFtZWRJdGVtID0gZmFsc2U7CiAg
ICAgICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3Jv
dXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5j
cHAKaW5kZXggZDdiZDZjY2RiMzMyZWFkYmZmYTUxZTU0MWQyNTEyZDJjNTQ0NTliYi4uYmIzMjdi
NDM3NjU3YThmMzJjZjQyMjcxZjg2YmYzZjQ1NTY4OGI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSFRNTE9w
dEdyb3VwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljCiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnJlY2FsY1NlbGVjdE9wdGlv
bnMoKQogewogICAgIENvbnRhaW5lck5vZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3
aGlsZSAoc2VsZWN0ICYmICFpczxIVE1MU2VsZWN0RWxlbWVudD4oc2VsZWN0KSkKKyAgICB3aGls
ZSAoc2VsZWN0ICYmICFpczxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdCkpCiAgICAgICAgIHNl
bGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChzZWxlY3QpCiAgICAgICAgIGRv
d25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pigqc2VsZWN0KS5zZXRSZWNhbGNMaXN0SXRlbXMoKTsK
QEAgLTEwNyw3ICsxMDcsNyBAQCBTdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBMYWJl
bFRleHQoKSBjb25zdAogSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRHcm91cEVsZW1lbnQ6Om93
bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgQ29udGFpbmVyTm9kZSogc2VsZWN0ID0g
cGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgIWlzPEhUTUxTZWxlY3RFbGVtZW50
PihzZWxlY3QpKQorICAgIHdoaWxlIChzZWxlY3QgJiYgIWlzPEhUTUxTZWxlY3RFbGVtZW50Pigq
c2VsZWN0KSkKICAgICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgCiAg
ICAgaWYgKCFzZWxlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRp
b25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3Bw
CmluZGV4IDc3MTM1ODljZjgwZTBlMzI4ZTc0YTM0MGMxOGRlMTAyZTcyOWRkOGMuLmE2NWFjOGIx
MjM0NTBjMTdhMzExYjI2NDQwNzg4YzAwM2QzMjY4ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9wdGlvbkVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBIVE1MT3B0aW9u
RWxlbWVudDo6c2V0VGV4dChjb25zdCBTdHJpbmcgJnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
CiAgICAgLy8gSGFuZGxlIHRoZSBjb21tb24gc3BlY2lhbCBjYXNlIHdoZXJlIHRoZXJlJ3MgZXhh
Y3RseSAxIGNoaWxkIG5vZGUsIGFuZCBpdCdzIGEgdGV4dCBub2RlLgogICAgIE5vZGUqIGNoaWxk
ID0gZmlyc3RDaGlsZCgpOwotICAgIGlmIChjaGlsZCAmJiBpczxUZXh0PihjaGlsZCkgJiYgIWNo
aWxkLT5uZXh0U2libGluZygpKQorICAgIGlmIChpczxUZXh0PihjaGlsZCkgJiYgIWNoaWxkLT5u
ZXh0U2libGluZygpKQogICAgICAgICBkb3duY2FzdDxUZXh0PigqY2hpbGQpLnNldERhdGEodGV4
dCwgZWMpOwogICAgIGVsc2UgewogICAgICAgICByZW1vdmVDaGlsZHJlbigpOwpAQCAtMTYwLDcg
KzE2MCw3IEBAIGludCBIVE1MT3B0aW9uRWxlbWVudDo6aW5kZXgoKSBjb25zdAogICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxpc3RJdGVtcygp
OwogICAgIHNpemVfdCBsZW5ndGggPSBpdGVtcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50
PihpdGVtc1tpXSkpCisgICAgICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tp
XSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGl0ZW1zW2ldID09IHRoaXMp
CiAgICAgICAgICAgICByZXR1cm4gb3B0aW9uSW5kZXg7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9p
ZCBIVE1MT3B0aW9uRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBj
aGFuZ2UpCiBIVE1MRGF0YUxpc3RFbGVtZW50KiBIVE1MT3B0aW9uRWxlbWVudDo6b3duZXJEYXRh
TGlzdEVsZW1lbnQoKSBjb25zdAogewogICAgIGZvciAoQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
cGFyZW50Tm9kZSgpOyBwYXJlbnQgOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgewot
ICAgICAgICBpZiAoaXM8SFRNTERhdGFMaXN0RWxlbWVudD4ocGFyZW50KSkKKyAgICAgICAgaWYg
KGlzPEhUTUxEYXRhTGlzdEVsZW1lbnQ+KCpwYXJlbnQpKQogICAgICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxEYXRhTGlzdEVsZW1lbnQ+KHBhcmVudCk7CiAgICAgfQogICAgIHJldHVybiBu
dWxscHRyOwpAQCAtMjY3LDcgKzI2Nyw3IEBAIEhUTUxEYXRhTGlzdEVsZW1lbnQqIEhUTUxPcHRp
b25FbGVtZW50Ojpvd25lckRhdGFMaXN0RWxlbWVudCgpIGNvbnN0CiBIVE1MU2VsZWN0RWxlbWVu
dCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7CiAgICAg
Q29udGFpbmVyTm9kZSogc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChzZWxlY3Qg
JiYgIWlzPEhUTUxTZWxlY3RFbGVtZW50PihzZWxlY3QpKQorICAgIHdoaWxlIChzZWxlY3QgJiYg
IWlzPEhUTUxTZWxlY3RFbGVtZW50Pigqc2VsZWN0KSkKICAgICAgICAgc2VsZWN0ID0gc2VsZWN0
LT5wYXJlbnROb2RlKCk7CiAKICAgICBpZiAoIXNlbGVjdCkKQEAgLTMwMiw3ICszMDIsNyBAQCB2
b2lkIEhUTUxPcHRpb25FbGVtZW50Ojp3aWxsUmVzZXRDb21wdXRlZFN0eWxlKCkKIFN0cmluZyBI
VE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0
CiB7CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwotICAgIGlmIChw
YXJlbnQgJiYgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4ocGFyZW50KSkKKyAgICBpZiAoaXM8SFRN
TE9wdEdyb3VwRWxlbWVudD4ocGFyZW50KSkKICAgICAgICAgcmV0dXJuICIgICAgIiArIHRleHQo
KTsKICAgICByZXR1cm4gdGV4dCgpOwogfQpAQCAtMzEyLDcgKzMxMiw3IEBAIGJvb2wgSFRNTE9w
dGlvbkVsZW1lbnQ6OmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpIGNvbnN0CiAgICAgaWYgKG93bkVs
ZW1lbnREaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghcGFyZW50
Tm9kZSgpIHx8ICFpczxIVE1MT3B0R3JvdXBFbGVtZW50PihwYXJlbnROb2RlKCkpKQorICAgIGlm
ICghaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4ocGFyZW50Tm9kZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCpwYXJl
bnROb2RlKCkpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOwpAQCAtMzM4LDEwICszMzgsMTAgQEAg
U3RyaW5nIEhUTUxPcHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KCkgY29uc3QK
IHsKICAgICBTdHJpbmdCdWlsZGVyIHRleHQ7CiAgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RD
aGlsZCgpOyBub2RlOyApIHsKLSAgICAgICAgaWYgKGlzPFRleHQ+KG5vZGUpKQorICAgICAgICBp
ZiAoaXM8VGV4dD4oKm5vZGUpKQogICAgICAgICAgICAgdGV4dC5hcHBlbmQobm9kZS0+bm9kZVZh
bHVlKCkpOwogICAgICAgICAvLyBUZXh0IG5vZGVzIGluc2lkZSBzY3JpcHQgZWxlbWVudHMgYXJl
IG5vdCBwYXJ0IG9mIHRoZSBvcHRpb24gdGV4dC4KLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5v
ZGUpICYmIHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkp
KQorICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpICYmIHRvU2NyaXB0RWxlbWVudElmUG9z
c2libGUoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpKQogICAgICAgICAgICAgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUsIHRoaXMpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCmluZGV4IDNi
ODY4ODQ5ZjMzNDNjN2Y1YzMzYWY3ZTZjYWQ3YWVjODEzMmFhY2IuLjA2MzYxMmZkZWU2NTQ2MzM2
ZWU3NGQ2MzU4YzJmYjY3MDBhZWMyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmNwcApAQCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyB2b2lkIGFk
ZFBsdWdJbnNGcm9tTm9kZUxpc3RNYXRjaGluZ1BsdWdJbk9yaWdpbihIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50TGlzCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0gY29sbGVjdGlv
bi0+bGVuZ3RoKCk7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICBOb2RlKiBub2RlID0gY29s
bGVjdGlvbi0+aXRlbShpKTsKLSAgICAgICAgaWYgKGlzPEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+
KG5vZGUpKSB7CisgICAgICAgIGlmIChpczxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Pigqbm9kZSkp
IHsKICAgICAgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdlRWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAg
IGNvbnN0IFVSTCYgbG9hZGVkVVJMID0gcGx1Z0luSW1hZ2VFbGVtZW50LmxvYWRlZFVybCgpOwog
ICAgICAgICAgICAgU3RyaW5nIG90aGVyTWltZVR5cGUgPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9h
ZGVkTWltZVR5cGUoKTsKQEAgLTc0Nyw3ICs3NDcsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIFJlbmRlckVs
ZW1lbnQqIHIgPSByZW5kZXJlcigpOwogICAgIGlmIChyICYmIHItPmlzRW1iZWRkZWRPYmplY3Qo
KSkgewotICAgICAgICBpZiAoZGlzcGxheVN0YXRlKCkgPT0gV2FpdGluZ0ZvclNuYXBzaG90ICYm
IGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5j
bGlja0V2ZW50KSB7CisgICAgICAgIGlmIChkaXNwbGF5U3RhdGUoKSA9PSBXYWl0aW5nRm9yU25h
cHNob3QgJiYgaXM8TW91c2VFdmVudD4oKmV2ZW50KSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50KSB7CiAgICAgICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50
ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKICAgICAgICAgICAgIGlmIChtb3VzZUV2
ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgICAgICAgICB1c2VyRGlkQ2xp
Y2tTbmFwc2hvdCgmbW91c2VFdmVudCwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNj
cmlwdEVsZW1lbnQuY3BwCmluZGV4IDFjMjc1YzExMTYwZDllNTBlOTgyZDM3NjUxODYwNmQ4ODY5
MTMxYTYuLjU1ZjFlZjNlNTA3NWQzMjVhMGNjM2RiNmExMzMyZTc3M2U0MjNkN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHZv
aWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKICAg
ICBSZWY8SFRNTFNjcmlwdEVsZW1lbnQ+IHByb3RlY3RGcm9tTXV0YXRpb25FdmVudHMoKnRoaXMp
OwogCi0gICAgaWYgKGhhc09uZUNoaWxkKCkgJiYgaXM8VGV4dD4oZmlyc3RDaGlsZCgpKSkgewor
ICAgIGlmIChoYXNPbmVDaGlsZCgpICYmIGlzPFRleHQ+KCpmaXJzdENoaWxkKCkpKSB7CiAgICAg
ICAgIGRvd25jYXN0PFRleHQ+KCpmaXJzdENoaWxkKCkpLnNldERhdGEodmFsdWUsIElHTk9SRV9F
WENFUFRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcAppbmRleCBmOTY0OGRiOThkMTliYTMwMWU0NTU2NzE2NTQzZTMw
Yjk5YjU1Yzc4Li5jNGQxMjY1ZTc0NTkzNWFlYzBjMDQxZjkyYzk2Mzc1MjA0YjBiZmQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcApAQCAtNTIxLDcgKzUyMSw3
IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bmV4dFZhbGlkSW5kZXgoaW50IGxpc3RJbmRleCwg
U2tpcERpcmVjdGlvbiBkaXJlY3Rpb24sIGluCiAgICAgaW50IHNpemUgPSBsaXN0SXRlbXMuc2l6
ZSgpOwogICAgIGZvciAobGlzdEluZGV4ICs9IGRpcmVjdGlvbjsgbGlzdEluZGV4ID49IDAgJiYg
bGlzdEluZGV4IDwgc2l6ZTsgbGlzdEluZGV4ICs9IGRpcmVjdGlvbikgewogICAgICAgICAtLXNr
aXA7Ci0gICAgICAgIGlmICghbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpICYmIGlzPEhUTUxPcHRpb25FbGVtZW50PihsaXN0SXRlbXNbbGlzdEluZGV4XSkpIHsK
KyAgICAgICAgaWYgKCFsaXN0SXRlbXNbbGlzdEluZGV4XS0+aXNEaXNhYmxlZEZvcm1Db250cm9s
KCkgJiYgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbXNbbGlzdEluZGV4XSkpIHsKICAg
ICAgICAgICAgIGxhc3RHb29kSW5kZXggPSBsaXN0SW5kZXg7CiAgICAgICAgICAgICBpZiAoc2tp
cCA8PSAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjA1LDcgKzYwNSw3IEBAIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVMYXN0U2VsZWN0aW9uKCkKICAgICBjb25zdCBWZWN0b3I8
SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1l
bnQgPSBpdGVtc1tpXTsKLSAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5kKGlz
PEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oZWxlbWVudCktPnNlbGVjdGVkKCkpOworICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlv
bi5hcHBlbmQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1M
T3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpOwogICAgIH0KIH0KIApAQCAtNjIw
LDcgKzYyMCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFu
Y2hvckluZGV4KGludCBpbmRleCkKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRl
bXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAg
ICAgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50
KS0+c2VsZWN0ZWQoKSk7CisgICAgICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24u
YXBwZW5kKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKQEAgLTY0NCw3
ICs2NDQsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVMaXN0Qm94U2VsZWN0aW9u
KGJvb2wgZGVzZWxlY3RPdGhlck9wdGlvbnMpCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50
Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0
ZW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNb
aV07Ci0gICAgICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpIHx8IGRvd25j
YXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkp
CisgICAgICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSB8fCBkb3duY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGkgPj0gc3RhcnQgJiYgaSA8PSBl
bmQpCkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveE9u
Q2hhbmdlKCkKICAgICBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IGl0ZW1zW2ldOwotICAgICAgICBib29sIHNlbGVjdGVkID0gaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVu
dCkuc2VsZWN0ZWQoKTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzPEhUTUxPcHRpb25FbGVt
ZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5z
ZWxlY3RlZCgpOwogICAgICAgICBpZiAoc2VsZWN0ZWQgIT0gbV9sYXN0T25DaGFuZ2VTZWxlY3Rp
b25baV0pCiAgICAgICAgICAgICBmaXJlT25DaGFuZ2UgPSB0cnVlOwogICAgICAgICBtX2xhc3RP
bkNoYW5nZVNlbGVjdGlvbltpXSA9IHNlbGVjdGVkOwpAQCAtNzgxLDI4ICs3ODEsMjggQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKGJvb2wgdXBkYXRlU2VsZWN0ZWRT
dGF0ZXMpIGNvbnN0CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGZvdW5kU2VsZWN0ZWQgPSAwOwog
ICAgIEhUTUxPcHRpb25FbGVtZW50KiBmaXJzdE9wdGlvbiA9IDA7CiAgICAgZm9yIChFbGVtZW50
KiBjdXJyZW50RWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHRoaXMpOyBj
dXJyZW50RWxlbWVudDsgKSB7Ci0gICAgICAgIGlmICghY3VycmVudEVsZW1lbnQtPmlzSFRNTEVs
ZW1lbnQoKSkgeworICAgICAgICBpZiAoIWlzPEhUTUxFbGVtZW50PigqY3VycmVudEVsZW1lbnQp
KSB7CiAgICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRT
a2lwcGluZ0NoaWxkcmVuKGN1cnJlbnRFbGVtZW50LCB0aGlzKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9Ci0gICAgICAgIEhUTUxFbGVtZW50KiBjdXJyZW50ID0gZG93bmNhc3Q8
SFRNTEVsZW1lbnQ+KGN1cnJlbnRFbGVtZW50KTsKKyAgICAgICAgSFRNTEVsZW1lbnQmIGN1cnJl
bnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmN1cnJlbnRFbGVtZW50KTsKIAogICAgICAgICAv
LyBvcHRncm91cCB0YWdzIG1heSBub3QgbmVzdC4gSG93ZXZlciwgYm90aCBGaXJlRm94IGFuZCBJ
RSB3aWxsCiAgICAgICAgIC8vIGZsYXR0ZW4gdGhlIHRyZWUgYXV0b21hdGljYWxseSwgc28gd2Ug
Zm9sbG93IHN1aXQuCiAgICAgICAgIC8vIChodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAxL2lu
dGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy42KQogICAgICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxl
bWVudD4oY3VycmVudCkpIHsKLSAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChjdXJyZW50
KTsKLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBuZXh0RWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJz
YWw6OmZpcnN0V2l0aGluKGN1cnJlbnQpKSB7CisgICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBl
bmQoJmN1cnJlbnQpOworICAgICAgICAgICAgaWYgKEVsZW1lbnQqIG5leHRFbGVtZW50ID0gRWxl
bWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oJmN1cnJlbnQpKSB7CiAgICAgICAgICAgICAgICAg
Y3VycmVudEVsZW1lbnQgPSBuZXh0RWxlbWVudDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxl
bWVudD4oY3VycmVudCkpIHsKLSAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChjdXJyZW50
KTsKKyAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZCgmY3VycmVudCk7CiAKICAgICAgICAg
ICAgIGlmICh1cGRhdGVTZWxlY3RlZFN0YXRlcyAmJiAhbV9tdWx0aXBsZSkgewotICAgICAgICAg
ICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKmN1cnJlbnQpOworICAgICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRp
b24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oY3VycmVudCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFmaXJzdE9wdGlvbikKICAgICAgICAgICAgICAgICAgICAgZmlyc3RPcHRpb24gPSAm
b3B0aW9uOwogICAgICAgICAgICAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQoKSkgewpAQCAtODE2
LDggKzgxNiw4IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyhib29s
IHVwZGF0ZVNlbGVjdGVkU3RhdGVzKSBjb25zdAogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoaHJUYWcpKQotICAgICAgICAgICAgbV9s
aXN0SXRlbXMuYXBwZW5kKGN1cnJlbnQpOworICAgICAgICBpZiAoY3VycmVudC5oYXNUYWdOYW1l
KGhyVGFnKSkKKyAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZCgmY3VycmVudCk7CiAKICAg
ICAgICAgLy8gSW4gY29uZm9ybWluZyBIVE1MIGNvZGUsIG9ubHkgPG9wdGdyb3VwPiBhbmQgPG9w
dGlvbj4gd2lsbCBiZSBmb3VuZAogICAgICAgICAvLyB3aXRoaW4gYSA8c2VsZWN0Pi4gV2UgY2Fs
bCBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbiBzbyB0aGF0IHdlIG9ubHkgc3Rl
cApAQCAtODQwLDcgKzg0MCw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRl
eCgpIGNvbnN0CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewog
ICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwotICAgICAgICBpZiAoaXM8
SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChpczxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBp
bmRleDsKICAgICAgICAgICAgICsraW5kZXg7CkBAIC04NzYsNyArODc2LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6c2VsZWN0T3B0aW9uKGludCBvcHRpb25JbmRleCwgU2VsZWN0T3B0aW9u
RmxhZ3MgZmxhZ3MpCiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBudWxscHRyOwogICAgIGlm
IChsaXN0SW5kZXggPj0gMCkgewogICAgICAgICBlbGVtZW50ID0gaXRlbXNbbGlzdEluZGV4XTsK
LSAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkgeworICAgICAgICBp
ZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgaWYgKG1f
YWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXggPCAwIHx8IHNob3VsZERlc2VsZWN0KQogICAgICAg
ICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGxpc3RJbmRleCk7CiAgICAg
ICAgICAgICBpZiAobV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCA8IDAgfHwgc2hvdWxkRGVzZWxl
Y3QpCkBAIC05MTgsNyArOTE4LDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25Ub0xp
c3RJbmRleChpbnQgb3B0aW9uSW5kZXgpIGNvbnN0CiAKICAgICBpbnQgb3B0aW9uSW5kZXgyID0g
LTE7CiAgICAgZm9yIChpbnQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdFNpemU7ICsr
bGlzdEluZGV4KSB7Ci0gICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbXNbbGlz
dEluZGV4XSkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNbbGlz
dEluZGV4XSkpIHsKICAgICAgICAgICAgICsrb3B0aW9uSW5kZXgyOwogICAgICAgICAgICAgaWYg
KG9wdGlvbkluZGV4MiA9PSBvcHRpb25JbmRleCkKICAgICAgICAgICAgICAgICByZXR1cm4gbGlz
dEluZGV4OwpAQCAtOTMxLDEzICs5MzEsMTMgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpvcHRp
b25Ub0xpc3RJbmRleChpbnQgb3B0aW9uSW5kZXgpIGNvbnN0CiBpbnQgSFRNTFNlbGVjdEVsZW1l
bnQ6Omxpc3RUb09wdGlvbkluZGV4KGludCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Ci0gICAgaWYgKGxpc3RJ
bmRleCA8IDAgfHwgbGlzdEluZGV4ID49IHN0YXRpY19jYXN0PGludD4oaXRlbXMuc2l6ZSgpKSB8
fCAhaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGl0ZW1zW2xpc3RJbmRleF0pKQorICAgIGlmIChsaXN0
SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUoKSkg
fHwgIWlzPEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNbbGlzdEluZGV4XSkpCiAgICAgICAgIHJl
dHVybiAtMTsKIAogICAgIC8vIEFjdHVhbCBpbmRleCBvZiBvcHRpb24gbm90IGNvdW50aW5nIE9Q
VEdST1VQIGVudHJpZXMgdGhhdCBtYXkgYmUgaW4gbGlzdC4KICAgICBpbnQgb3B0aW9uSW5kZXgg
PSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdEluZGV4OyArK2kpIHsKLSAgICAgICAg
aWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihpdGVtc1tpXSkpCisgICAgICAgIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKSkKICAgICAgICAgICAgICsrb3B0aW9uSW5kZXg7CiAg
ICAgfQogCkBAIC05NjgsNyArOTY4LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGVzZWxl
Y3RJdGVtc1dpdGhvdXRWYWxpZGF0aW9uKEhUTUxFbGVtZW50KiBleGNsdWRlRWxlbWUKICAgICBj
b25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVs
ZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKGVsZW1lbnQgIT0gZXhjbHVk
ZUVsZW1lbnQgJiYgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICBpZiAo
ZWxlbWVudCAhPSBleGNsdWRlRWxlbWVudCAmJiBpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpKQogICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5z
ZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAgICB9CiB9CkBAIC05NzksNyArOTc5LDcgQEAgRm9y
bUNvbnRyb2xTdGF0ZSBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUZvcm1Db250cm9sU3RhdGUoKSBj
b25zdAogICAgIHNpemVfdCBsZW5ndGggPSBpdGVtcy5zaXplKCk7CiAgICAgRm9ybUNvbnRyb2xT
dGF0ZSBzdGF0ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbXNbaV0pKQorICAgICAgICBp
ZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNbaV0pKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKml0ZW1zW2ldKTsKICAgICAgICAgaWYgKCFvcHRpb24uc2VsZWN0ZWQoKSkK
QEAgLTk5Niw3ICs5OTYsNyBAQCBzaXplX3QgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlYXJjaE9wdGlv
bnNGb3JWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBzaXplX3QgbGlzdAogICAgIGNvbnN0IFZl
Y3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIHNpemVfdCBsb29w
RW5kSW5kZXggPSBzdGQ6Om1pbihpdGVtcy5zaXplKCksIGxpc3RJbmRleEVuZCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IGxpc3RJbmRleFN0YXJ0OyBpIDwgbG9vcEVuZEluZGV4OyArK2kpIHsKLSAg
ICAgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbXNbaV0pKQorICAgICAgICBpZiAo
IWlzPEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNbaV0pKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKS52YWx1
ZSgpID09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGk7CkBAIC0xMDE0LDcgKzEwMTQsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBG
b3JtQ29udHJvbFN0YXRlJiBzdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpdGVtc1NpemU7ICsraSkgewotICAgICAgICBpZiAoIWlzPEhUTUxPcHRp
b25FbGVtZW50PihpdGVtc1tpXSkpCisgICAgICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+
KCppdGVtc1tpXSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSkuc2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAg
fQpAQCAtMTA2MSw3ICsxMDYxLDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9y
bURhdGEoRm9ybURhdGFMaXN0JiBsaXN0LCBib29sKQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50
ID0gaXRlbXNbaV07Ci0gICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkg
JiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpICYmICFk
b3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLmlzRGlzYWJsZWRGb3JtQ29udHJv
bCgpKSB7CisgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRv
d25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSAmJiAhZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkg
ewogICAgICAgICAgICAgbGlzdC5hcHBlbmREYXRhKG5hbWUsIGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqZWxlbWVudCkudmFsdWUoKSk7CiAgICAgICAgICAgICBzdWNjZXNzZnVsID0gdHJ1
ZTsKICAgICAgICAgfQpAQCAtMTA4MSw3ICsxMDgxLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6cmVzZXQoKQogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJ
dGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwotICAgICAgICBpZiAo
IWlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgaWYgKCFpczxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
SFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigq
ZWxlbWVudCk7CkBAIC0xMTQ2LDcgKzExNDYsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpt
ZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgIFJlZlB0cjxSZW5k
ZXJUaGVtZT4gcmVuZGVyVGhlbWUgPSBwYWdlID8gJnBhZ2UtPnRoZW1lKCkgOiBSZW5kZXJUaGVt
ZTo6ZGVmYXVsdFRoZW1lKCk7CiAKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkua2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQp
KQorICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KCpldmVudCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0
PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CkBAIC0xMTk5LDcgKzExOTksNyBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ICAgIC8vIFVzZSBrZXkgcHJlc3MgZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBt
b3VzZSBldmVudHMKICAgICAvLyBvbiBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5n
IG9mIHRoZSBrZXkgcHJlc3MgZXZlbnQuCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmtleXByZXNzRXZlbnQpIHsKLSAgICAgICAgaWYgKCFpczxLZXlib2FyZEV2ZW50Pihl
dmVudCkpCisgICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KSkKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93
bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKQEAgLTEyNTgsNyArMTI1OCw3IEBAIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCiAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAg
fQogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQp
LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oKmV2ZW50KSAmJiBkb3du
Y2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAg
ICAgZm9jdXMoKTsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpZiAocmVuZGVyZXIoKSAm
JiByZW5kZXJlcigpLT5pc01lbnVMaXN0KCkpIHsKQEAgLTEyOTksNyArMTI5OSw3IEBAIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUoaW50IGxpc3RJbmRleCwgYm9v
bCBtdWx0aSwgYm9vbCBzaGlmCiAgICAgYm9vbCBtdWx0aVNlbGVjdCA9IG1fbXVsdGlwbGUgJiYg
bXVsdGkgJiYgIXNoaWZ0OwogCiAgICAgSFRNTEVsZW1lbnQqIGNsaWNrZWRFbGVtZW50ID0gbGlz
dEl0ZW1zKClbbGlzdEluZGV4XTsKLSAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGNsaWNr
ZWRFbGVtZW50KSkgeworICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmNsaWNrZWRFbGVt
ZW50KSkgewogICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgYW4gYWN0aXZlIHNlbGVj
dGlvbiAobGlrZSBkdXJpbmcgZHJhZwogICAgICAgICAvLyBzZWxlY3Rpb24pLCBzaG91bGQgc2Vs
ZWN0IG9yIGRlc2VsZWN0LgogICAgICAgICBpZiAoZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCpjbGlja2VkRWxlbWVudCkuc2VsZWN0ZWQoKSAmJiBtdWx0aVNlbGVjdCkKQEAgLTEzMjAsNyAr
MTMyMCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUoaW50
IGxpc3RJbmRleCwgYm9vbCBtdWx0aSwgYm9vbCBzaGlmCiAgICAgICAgIHNldEFjdGl2ZVNlbGVj
dGlvbkFuY2hvckluZGV4KHNlbGVjdGVkSW5kZXgoKSk7CiAKICAgICAvLyBTZXQgdGhlIHNlbGVj
dGlvbiBzdGF0ZSBvZiB0aGUgY2xpY2tlZCBvcHRpb24uCi0gICAgaWYgKGlzPEhUTUxPcHRpb25F
bGVtZW50PihjbGlja2VkRWxlbWVudCkgJiYgIWRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigq
Y2xpY2tlZEVsZW1lbnQpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oKmNsaWNrZWRFbGVtZW50KSAmJiAhZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAg
IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqY2xpY2tlZEVsZW1lbnQpLnNldFNlbGVjdGVk
U3RhdGUodHJ1ZSk7CiAKICAgICAvLyBJZiB0aGVyZSB3YXMgbm8gc2VsZWN0ZWRJbmRleCgpIGZv
ciB0aGUgcHJldmlvdXMgaW5pdGlhbGl6YXRpb24sIG9yIElmCkBAIC0xMzM4LDcgKzEzMzgsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZlbnQpCiB7CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9
IHRoaXMtPmxpc3RJdGVtcygpOwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxN
b3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVu
dD4oKmV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExl
ZnRCdXR0b24pIHsKICAgICAgICAgZm9jdXMoKTsKICAgICAgICAgLy8gQ2FsbGluZyBmb2N1cygp
IG1heSByZW1vdmUgb3IgY2hhbmdlIG91ciByZW5kZXJlciwgaW4gd2hpY2ggY2FzZSB3ZSBkb24n
dCB3YW50IHRvIGhhbmRsZSB0aGUgZXZlbnQgZnVydGhlci4KICAgICAgICAgaWYgKCFyZW5kZXJl
cigpIHx8ICFyZW5kZXJlcigpLT5pc0xpc3RCb3goKSkKQEAgLTEzNjEsNyArMTM2MSw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKIAogICAgICAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW1vdmVFdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgIXRvUmVuZGVyQm94KHJlbmRl
cmVyKCkpLT5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkgeworICAgIH0gZWxz
ZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgJiYgaXM8
TW91c2VFdmVudD4oKmV2ZW50KSAmJiAhdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNhbkJlU2Ny
b2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKSB7CiAgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNl
RXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOwogICAgICAgICBpZiAobW91c2VF
dmVudC5idXR0b24oKSAhPSBMZWZ0QnV0dG9uIHx8ICFtb3VzZUV2ZW50LmJ1dHRvbkRvd24oKSkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTEzODUsNyArMTM4NSw3IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2V1cEV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50
PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsUmVuZGVyZXIoKSAhPSByZW5kZXJlcigpKSB7CisgICAg
fSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYg
aXM8TW91c2VFdmVudD4oKmV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1
dHRvbigpID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS5hdXRvc2Nyb2xsUmVuZGVyZXIoKSAhPSByZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIFRoaXMg
Y2xpY2sgb3IgZHJhZyBldmVudCB3YXMgbm90IG92ZXIgYW55IG9mIHRoZSBvcHRpb25zLgogICAg
ICAgICBpZiAobV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uaXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTM5NCw3ICsxMzk0LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlz
dEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAvLyB0aW1lciBz
dG9wcy4KICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CiAgICAgfSBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAgaWYgKCFpczxL
ZXlib2FyZEV2ZW50PihldmVudCkpCisgICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oKmV2
ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXli
b2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKQEAgLTE0ODUsNyAr
MTQ4NSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhh
bmRsZWQoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewotICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+
KGV2ZW50KSkKKyAgICAgICAgaWYgKCFpczxLZXlib2FyZEV2ZW50PigqZXZlbnQpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93
bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKICAgICAgICAgaW50IGtleUNvZGUgPSBrZXli
b2FyZEV2ZW50LmtleUNvZGUoKTsKQEAgLTE1MjgsNyArMTUyOCw3IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgIGlmIChldmVu
dC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgJiYgaXM8S2V5Ym9hcmRFdmVudD4o
ZXZlbnQpKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNz
RXZlbnQgJiYgaXM8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KSkgewogICAgICAgICBLZXlib2FyZEV2
ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKICAg
ICAgICAgaWYgKCFrZXlib2FyZEV2ZW50LmN0cmxLZXkoKSAmJiAha2V5Ym9hcmRFdmVudC5hbHRL
ZXkoKSAmJiAha2V5Ym9hcmRFdmVudC5tZXRhS2V5KCkgJiYgdV9pc3ByaW50KGtleWJvYXJkRXZl
bnQuY2hhckNvZGUoKSkpIHsKICAgICAgICAgICAgIHR5cGVBaGVhZEZpbmQoa2V5Ym9hcmRFdmVu
dCk7CkBAIC0xNTQ0LDcgKzE1NDQsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxl
Y3RlZExpc3RJbmRleCgpIGNvbnN0CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IGl0ZW1zLnNpemUoKTsgaTsp
IHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1stLWldOwotICAgICAgICBp
ZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKKyAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25F
bGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50
KS5zZWxlY3RlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgfQogICAgIHJldHVybiAt
MTsKQEAgLTE1NjUsNyArMTU2NSw3IEBAIFN0cmluZyBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9u
QXRJbmRleChpbnQgaW5kZXgpIGNvbnN0CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4m
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgCiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBp
dGVtc1tpbmRleF07Ci0gICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkgfHwg
ZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRy
b2woKSkKKyAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgfHwgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKIH0K
QEAgLTE2MDEsNyArMTYwMSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmFjY2Vzc0tleVNl
dFNlbGVjdGVkSW5kZXgoaW50IGluZGV4KQogICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xp
c3RJbmRleChpbmRleCk7CiAgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gaXRlbXNbbGlzdEluZGV4XTsKLSAgICAgICAgaWYgKGlzPEhUTUxP
cHRpb25FbGVtZW50PihlbGVtZW50KSkgeworICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1l
bnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgaWYgKGRvd25jYXN0PEhUTUxPcHRpb25FbGVt
ZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxIVE1M
T3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgICAg
ICAgICAgZWxzZQpAQCAtMTYyMyw3ICsxNjIzLDcgQEAgdW5zaWduZWQgSFRNTFNlbGVjdEVsZW1l
bnQ6Omxlbmd0aCgpIGNvbnN0CiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRl
bXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihpdGVtc1tpXSkp
CisgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKSkKICAgICAgICAg
ICAgICsrb3B0aW9uczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNvdXJjZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxl
bWVudC5jcHAKaW5kZXggOWNlOWU1Y2EwNDgwMzNmY2QyZDVhNDU5YTBmNTYxYzljMDAzMDQxOC4u
YTQ4OGFlODg1M2Q2YjMwNDhhODYwMDE4MTcwMWNmNzVjNTQ1YmU0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgTm9kZTo6SW5z
ZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MU291cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
KENvbnRhaW5lck5vZGUKIHsKICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlv
blBvaW50KTsKICAgICBFbGVtZW50KiBwYXJlbnQgPSBwYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYg
KHBhcmVudCAmJiBpczxIVE1MTWVkaWFFbGVtZW50PihwYXJlbnQpKQorICAgIGlmIChpczxIVE1M
TWVkaWFFbGVtZW50PihwYXJlbnQpKQogICAgICAgICBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50
PigqcGFyZW50KS5zb3VyY2VXYXNBZGRlZCh0aGlzKTsKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9u
ZTsKIH0KQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBIVE1MU291cmNlRWxlbWVudDo6cmVtb3ZlZEZy
b20oQ29udGFpbmVyTm9kZSYgcmVtb3ZhbFJvb3QpCiAgICAgRWxlbWVudCogcGFyZW50ID0gcGFy
ZW50RWxlbWVudCgpOwogICAgIGlmICghcGFyZW50ICYmIGlzPEVsZW1lbnQ+KHJlbW92YWxSb290
KSkKICAgICAgICAgcGFyZW50ID0gJmRvd25jYXN0PEVsZW1lbnQ+KHJlbW92YWxSb290KTsKLSAg
ICBpZiAocGFyZW50ICYmIGlzPEhUTUxNZWRpYUVsZW1lbnQ+KHBhcmVudCkpCisgICAgaWYgKGlz
PEhUTUxNZWRpYUVsZW1lbnQ+KHBhcmVudCkpCiAgICAgICAgIGRvd25jYXN0PEhUTUxNZWRpYUVs
ZW1lbnQ+KCpwYXJlbnQpLnNvdXJjZVdhc1JlbW92ZWQodGhpcyk7CiAgICAgSFRNTEVsZW1lbnQ6
OnJlbW92ZWRGcm9tKHJlbW92YWxSb290KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1
bW1hcnlFbGVtZW50LmNwcAppbmRleCAxMTJkMmZkMzYyNGMxOWQyODg0NjY3NGQ3Yzg4NTU1NTMx
OTYwMWM3Li43NTNiNDFjZTE5MGQ4MDdjMTZlMTUxZWI5OWNkNjM0N2JlNzE4NGU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCkBAIC0xMDIsNyArMTAyLDgg
QEAgYm9vbCBIVE1MU3VtbWFyeUVsZW1lbnQ6OmlzTWFpblN1bW1hcnkoKSBjb25zdAogCiBzdGF0
aWMgYm9vbCBpc0NsaWNrYWJsZUNvbnRyb2woTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIWlzPEVs
ZW1lbnQ+KG5vZGUpKQorICAgIEFTU0VSVChub2RlKTsKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KCpu
b2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSk7CiAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KGVsZW1lbnQpKQpAQCAtMTI2LDcgKzEyNyw3IEBAIHZvaWQgSFRNTFN1bW1hcnlFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsKKyAgICAg
ICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KCpldmVudCkpIHsKICAgICAgICAgICAgIEtleWJvYXJk
RXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZlbnQpOwog
ICAgICAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlk
b3duRXZlbnQgJiYga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsK
ICAgICAgICAgICAgICAgICBzZXRBY3RpdmUodHJ1ZSwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVFbGVtZW50LmNwcAppbmRleCBjNzNjNDc3MmNmZjYwMWNhMTYyYjNlN2MzOTE4
ZjFjNGNmMWM3YmY5Li5hMDU3NzEzOTU0OWRmZjNmZTI3MTFlNWMzYTY5N2Y1ZDJmZWZlYTZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKQEAgLTcwLDcgKzcwLDcg
QEAgUGFzc1JlZlB0cjxIVE1MVGFibGVFbGVtZW50PiBIVE1MVGFibGVFbGVtZW50OjpjcmVhdGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmEKIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBIVE1M
VGFibGVFbGVtZW50OjpjYXB0aW9uKCkgY29uc3QKIHsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0g
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICBpZiAoaXM8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ+KGNoaWxkKSkKKyAgICAgICAgaWYg
KGlzPEhUTUxUYWJsZUNhcHRpb25FbGVtZW50PigqY2hpbGQpKQogICAgICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50PihjaGlsZCk7CiAgICAgfQogICAgIHJl
dHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVQ
YXJ0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50
LmNwcAppbmRleCBiYmRkODRiYzM3YmEyOGI4Y2U4NGJiMjViNGIzMThhNDY0NmU2NGRlLi42NTA2
YjUzYWUxMmI0OGI1NTA4OGFiMTE5NmIzY2MwZWRiM2IzOWZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcApAQCAtODYsNyArODYsNyBAQCB2b2lkIEhU
TUxUYWJsZVBhcnRFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTgogSFRNTFRhYmxlRWxlbWVudCogSFRNTFRhYmxlUGFydEVsZW1lbnQ6
OmZpbmRQYXJlbnRUYWJsZSgpIGNvbnN0CiB7CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
cGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChwYXJlbnQgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+
KHBhcmVudCkpCisgICAgd2hpbGUgKHBhcmVudCAmJiAhaXM8SFRNTFRhYmxlRWxlbWVudD4oKnBh
cmVudCkpCiAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOwogICAgIHJldHVy
biBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50PihwYXJlbnQpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKaW5kZXggYzZjNGQ5ZTJiMjc3YTFmMzE2ZjA4
MDJlZTMxZjIwNzE4YTFlNzAwMC4uOTdiYWEyMDc5OTYwYThhMDA2OTE0YWM5ZDU4ODk0NjkyYzFj
MDM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCkBA
IC02MCw3ICs2MCw3IEBAIGludCBIVE1MVGFibGVSb3dFbGVtZW50Ojpyb3dJbmRleCgpIGNvbnN0
CiAgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHRhYmxlID0gdGFibGUt
PnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXRhYmxlIHx8ICFpczxIVE1MVGFibGVFbGVtZW50Pih0
YWJsZSkpCisgICAgaWYgKCFpczxIVE1MVGFibGVFbGVtZW50Pih0YWJsZSkpCiAgICAgICAgIHJl
dHVybiAtMTsKIAogICAgIC8vIFRvIG1hdGNoIEZpcmVmb3gsIHRoZSByb3cgaW5kaWNlcyB3b3Jr
IGxpa2UgdGhpczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93
c0NvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVj
dGlvbi5jcHAKaW5kZXggMTE2MmFhMzI1NTMxODAzOGFiMGQ3MzJiYTA2MzFhNDRjOWFiOGI2NC4u
YjU5ZjkyNjUxYmIwODBkMTVhM2RjYzI0Yzk2ZGY4YTA4YmRiYWFmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAKQEAgLTk3LDcgKzk3LDcg
QEAgSFRNTFRhYmxlUm93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246OnJvd0FmdGVy
KEhUTUxUYWJsZUVsZW1lbnQqIHRhYmxlLAogICAgIGVsc2UgaWYgKGlzSW5TZWN0aW9uKCpwcmV2
aW91cywgdGJvZHlUYWcpKQogICAgICAgICBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRT
aWJsaW5nKHByZXZpb3VzLT5wYXJlbnROb2RlKCkpOwogICAgIGZvciAoOyBjaGlsZDsgY2hpbGQg
PSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhjaGlsZCkpIHsKLSAgICAgICAgaWYgKGlz
PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNoaWxkKSkKKyAgICAgICAgaWYgKGlzPEhUTUxUYWJsZVJv
d0VsZW1lbnQ+KCpjaGlsZCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxl
Um93RWxlbWVudD4oY2hpbGQpOwogICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUodGJvZHlU
YWcpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byByb3cgPSBjaGlsZHJlbk9mVHlwZTxIVE1MVGFi
bGVSb3dFbGVtZW50PigqY2hpbGQpLmZpcnN0KCkpCkBAIC0xMzAsNyArMTMwLDcgQEAgSFRNTFRh
YmxlUm93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246Omxhc3RSb3coSFRNTFRhYmxl
RWxlbWVudCogdGFibGUpCiAgICAgfQogCiAgICAgZm9yIChhdXRvKiBjaGlsZCA9IEVsZW1lbnRU
cmF2ZXJzYWw6Omxhc3RDaGlsZCh0YWJsZSk7IGNoaWxkOyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJz
YWw6OnByZXZpb3VzU2libGluZyhjaGlsZCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxUYWJsZVJv
d0VsZW1lbnQ+KGNoaWxkKSkKKyAgICAgICAgaWYgKGlzPEhUTUxUYWJsZVJvd0VsZW1lbnQ+KCpj
aGlsZCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlUm93RWxlbWVudD4o
Y2hpbGQpOwogICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUodGJvZHlUYWcpKSB7CiAgICAg
ICAgICAgICBpZiAoYXV0byogcm93ID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRhYmxlUm93RWxlbWVu
dD4oKmNoaWxkKS5sYXN0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcAppbmRleCAzNWZhZTEyYzY0NjYyNTZmNTg5ZjZiMzA5MDMzMjJiZjVkYjVkMmRiLi41
ODM3NjEwY2Y1ZDdkM2NlNTQ1MjZlMzk4ZmM0ODZkY2YyNTVlMWNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lk
IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ewogICAgIGlmIChyZW5kZXJlcigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQt
PmlzRHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudElu
dGVyZmFjZVR5cGUgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSkK
ICAgICAgICAgZm9yd2FyZEV2ZW50KGV2ZW50KTsKLSAgICBlbHNlIGlmIChyZW5kZXJlcigpICYm
IGlzPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PihldmVudCkpCisgICAgZWxzZSBpZiAocmVuZGVy
ZXIoKSAmJiBpczxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4oKmV2ZW50KSkKICAgICAgICAgaGFu
ZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoZG93bmNhc3Q8QmVmb3JlVGV4dEluc2VydGVkRXZl
bnQ+KGV2ZW50KSk7CiAKICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihldmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IGQ0NTllYTc4ZGNlYmExMTMwOGFlNTRiYjk0NmUx
Y2Y2NTQyNmJmMjAuLjM0YjI4NDdlNGJmYzIzZTc4OGYwYTJkMzk0NTRlYTdlYjA0NDIxMGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCkBAIC01NjEsOSArNTYxLDkgQEAgU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
Ojppbm5lclRleHRWYWx1ZSgpIGNvbnN0CiAKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5lclRleHQ7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG5vZGUsIGlubmVyVGV4dCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+
KG5vZGUpKQorICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8
VGV4dD4obm9kZSkpCisgICAgICAgIGVsc2UgaWYgKGlzPFRleHQ+KCpub2RlKSkKICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoZG93bmNhc3Q8VGV4dD4oKm5vZGUpLmRhdGEoKSk7CiAgICAgfQog
ICAgIHJldHVybiBmaW5pc2hUZXh0KHJlc3VsdCk7CkBAIC01NzksNyArNTc5LDcgQEAgc3RhdGlj
IFBvc2l0aW9uIHBvc2l0aW9uRm9ySW5kZXgoVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KiBp
bm5lclRleHQsIHVuc2lnbmUKICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVO
b2RlKG5vZGUpOwogICAgICAgICAgICAgcmVtYWluaW5nQ2hhcmFjdGVyc1RvTW92ZUZvcndhcmQt
LTsKICAgICAgICAgICAgIGxhc3RCck9yVGV4dCA9IG5vZGU7Ci0gICAgICAgIH0gZWxzZSBpZiAo
aXM8VGV4dD4obm9kZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkpIHsK
ICAgICAgICAgICAgIFRleHQmIHRleHQgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CiAgICAgICAg
ICAgICBpZiAocmVtYWluaW5nQ2hhcmFjdGVyc1RvTW92ZUZvcndhcmQgPCB0ZXh0Lmxlbmd0aCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbigmdGV4dCwgcmVtYWluaW5nQ2hhcmFj
dGVyc1RvTW92ZUZvcndhcmQpOwpAQCAtNjA3LDEzICs2MDcsMTMgQEAgdW5zaWduZWQgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OmluZGV4Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBh
c3NlZFBvc2kKICAgICBBU1NFUlQoaW5uZXJUZXh0LT5jb250YWlucyhzdGFydE5vZGUpKTsKIAog
ICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6OnByZXZpb3VzKG5vZGUsIGlubmVyVGV4dCkpIHsKLSAgICAgICAgaWYgKGlzPFRleHQ+KG5v
ZGUpKSB7CisgICAgICAgIGlmIChpczxUZXh0Pigqbm9kZSkpIHsKICAgICAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGRvd25jYXN0PFRleHQ+KCpub2RlKS5sZW5ndGgoKTsKICAgICAgICAgICAg
IGlmIChub2RlID09IHBhc3NlZFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkKICAgICAgICAgICAg
ICAgICBpbmRleCArPSBzdGQ6Om1pbjx1bnNpZ25lZD4obGVuZ3RoLCBwYXNzZWRQb3NpdGlvbi5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgaW5kZXggKz0gbGVuZ3RoOwotICAgICAgICB9IGVsc2UgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+
KG5vZGUpKQorICAgICAgICB9IGVsc2UgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpub2RlKSkKICAg
ICAgICAgICAgICsraW5kZXg7CiAgICAgfQogCkBAIC02ODUsOSArNjg1LDkgQEAgU3RyaW5nIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp2YWx1ZVdpdGhIYXJkTGluZUJyZWFrcygpIGNvbnN0
CiAKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5l
clRleHQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9k
ZSwgaW5uZXJUZXh0KSkgewotICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4obm9kZSkpCisg
ICAgICAgIGlmIChpczxIVE1MQlJFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKG5ld2xpbmVDaGFyYWN0ZXIpOwotICAgICAgICBlbHNlIGlmIChpczxUZXh0Pihub2Rl
KSkgeworICAgICAgICBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkpIHsKICAgICAgICAgICAgIFN0
cmluZyBkYXRhID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpLmRhdGEoKTsKICAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGRhdGEubGVuZ3RoKCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBwb3Np
dGlvbiA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAppbmRleCA4
ZTgxODI1MDE0YjAwOTgxNGNkZDFiNTY2MzdlMjZmYTlkZjEyY2NmLi45NDg2OGRkZTMyZDAxMDY5
ZTJjNDQ2YjM0ZmMwZjI3YjJjNjIyYjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUaXRsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxl
RWxlbWVudC5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBIVE1MVGl0bGVFbGVtZW50OjpzZXRU
ZXh0KGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7CiAgICAgUmVmPEhUTUxUaXRsZUVsZW1lbnQ+IHBy
b3RlY3RGcm9tTXV0YXRpb25FdmVudHMoKnRoaXMpOwogICAgIAotICAgIGlmIChoYXNPbmVDaGls
ZCgpICYmIGlzPFRleHQ+KGZpcnN0Q2hpbGQoKSkpCisgICAgaWYgKGhhc09uZUNoaWxkKCkgJiYg
aXM8VGV4dD4oKmZpcnN0Q2hpbGQoKSkpCiAgICAgICAgIGRvd25jYXN0PFRleHQ+KCpmaXJzdENo
aWxkKCkpLnNldERhdGEodmFsdWUsIElHTk9SRV9FWENFUFRJT04pOwogICAgIGVsc2UgewogICAg
ICAgICAvLyBXZSBtYWtlIGEgY29weSBoZXJlIGJlY2F1c2UgZW50aXR5IG9mICJ2YWx1ZSIgYXJn
dW1lbnQgY2FuIGJlIERvY3VtZW50OjptX3RpdGxlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRy
YWNrRWxlbWVudC5jcHAKaW5kZXggMmQwZDE0MjM1YzcxYzk3NGFhM2FmZTRhODdkOTQ3MmZiN2Y1
YjFkNC4uMmM2ZTk3YmE3NmNmNjJkMTA1Y2ZlOThkOTQ3ODk2MTdjZDZmMzBmMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCkBAIC0zNDMsNyArMzQzLDcgQEAgdm9p
ZCBIVE1MVHJhY2tFbGVtZW50Ojp0ZXh0VHJhY2tSZW1vdmVDdWUoVGV4dFRyYWNrKiB0cmFjaywg
UGFzc1JlZlB0cjxUZXh0VHJhY2sKIEhUTUxNZWRpYUVsZW1lbnQqIEhUTUxUcmFja0VsZW1lbnQ6
Om1lZGlhRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogcGFyZW50ID0gcGFyZW50RWxl
bWVudCgpOwotICAgIGlmIChwYXJlbnQgJiYgaXM8SFRNTE1lZGlhRWxlbWVudD4ocGFyZW50KSkK
KyAgICBpZiAoaXM8SFRNTE1lZGlhRWxlbWVudD4ocGFyZW50KSkKICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KHBhcmVudE5vZGUoKSk7CiAKICAgICByZXR1cm4gbnVs
bHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCmluZGV4IGNjOWJkYzk5MGE2
ODU2ZjBhOGQ2M2I5MWRlYmY1OTE1YWMxZTBmYzEuLjE3OWVjMTA4MTY1ZmEzYmExYTUxY2EzMWFj
NWRmNmRmNmRkZGMwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcApAQCAt
Mzk4LDcgKzM5OCw3IEBAIHZvaWQgSW1hZ2VFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCkKICAgICAgICAgbV9kb2N1bWVudC53aW5k
b3dTaXplQ2hhbmdlZCgpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7CisgICAgZWxzZSBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBpczxNb3VzZUV2ZW50
PigqZXZlbnQpKSB7CiAgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxN
b3VzZUV2ZW50PigqZXZlbnQpOwogICAgICAgICBtX2RvY3VtZW50LmltYWdlQ2xpY2tlZChtb3Vz
ZUV2ZW50LngoKSwgbW91c2VFdmVudC55KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBl
LmNwcAppbmRleCAzYjIyN2FiMDBjNDk4NDYxNmJiMDhmMTI1ODIyMzNjMTg2Yjc0NDI4Li5jNGIz
NGIyZjlhZmYwYWVjMzhiZjdkMmRmYzNhYjVkY2M5MDQ0ZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1
dFR5cGUuY3BwCkBAIC00NzEsNyArNDcxLDcgQEAgdm9pZCBJbnB1dFR5cGU6OmZvcndhcmRFdmVu
dChFdmVudCopCiAKIGJvb2wgSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50
KiBldmVudCkKIHsKLSAgICByZXR1cm4gaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpICYmIGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgJiYgZG93bmNhc3Q8S2V5Ym9h
cmRFdmVudD4oKmV2ZW50KS5jaGFyQ29kZSgpID09ICdccic7CisgICAgcmV0dXJuIGlzPEtleWJv
YXJkRXZlbnQ+KCpldmVudCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJl
c3NFdmVudCAmJiBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZlbnQpLmNoYXJDb2RlKCkgPT0g
J1xyJzsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IElucHV0VHlwZTo6Zm9ybUZv
clN1Ym1pc3Npb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRp
YURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKaW5k
ZXggN2RhOWJiODQ1MGFlYWU0MmZjZDUzY2UxMjhiYjEwYzY2MDhkNzQ1MS4uZmFjOTU4ZWY1MzM3
ODhjM2Y0ZWIwNmI5ZjlkOGJhYjU2MDNkNzIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9NZWRpYURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRG9j
dW1lbnQuY3BwCkBAIC0xNzMsNyArMTczLDcgQEAgc3RhdGljIGlubGluZSBIVE1MVmlkZW9FbGVt
ZW50KiBkZXNjZW5kZW50VmlkZW9FbGVtZW50KENvbnRhaW5lck5vZGUmIG5vZGUpCiAKIHN0YXRp
YyBpbmxpbmUgSFRNTFZpZGVvRWxlbWVudCogYW5jZXN0b3JWaWRlb0VsZW1lbnQoTm9kZSogbm9k
ZSkKIHsKLSAgICB3aGlsZSAobm9kZSAmJiAhaXM8SFRNTFZpZGVvRWxlbWVudD4obm9kZSkpCisg
ICAgd2hpbGUgKG5vZGUgJiYgIWlzPEhUTUxWaWRlb0VsZW1lbnQ+KCpub2RlKSkKICAgICAgICAg
bm9kZSA9IG5vZGUtPnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKTsKIAogICAgIHJldHVybiBkb3du
Y2FzdDxIVE1MVmlkZW9FbGVtZW50Pihub2RlKTsKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHZvaWQg
TWVkaWFEb2N1bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KHRhcmdldE5vZGUpKQorICAg
IGlmICghaXM8Q29udGFpbmVyTm9kZT4oKnRhcmdldE5vZGUpKQogICAgICAgICByZXR1cm47CiAg
ICAgQ29udGFpbmVyTm9kZSYgdGFyZ2V0Q29udGFpbmVyID0gZG93bmNhc3Q8Q29udGFpbmVyTm9k
ZT4oKnRhcmdldE5vZGUpOwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQgJiYgaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CisgICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBpczxLZXlib2FyZEV2ZW50
PigqZXZlbnQpKSB7CiAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvID0gZGVzY2VuZGVu
dFZpZGVvRWxlbWVudCh0YXJnZXRDb250YWluZXIpOwogICAgICAgICBpZiAoIXZpZGVvKQogICAg
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lu
cHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAppbmRl
eCA1ZjVlYzc1NDJiZDE4MjgwZTdkZmU1NjUxNDgxZWE1Y2IxNDQxNTJiLi5lZWFkMTM0NmNiZGRm
OTFiZmViOGQzNWFmMzY0ZWEwZWQxYmE5YmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1JhZGlvSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5w
dXRUeXBlLmNwcApAQCAtODEsMTAgKzgxLDEwIEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRs
ZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICBOb2RlKiBub2RlID0gJmVs
ZW1lbnQoKTsKICAgICB3aGlsZSAoKG5vZGUgPSAoZm9yd2FyZCA/IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSkgOiBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhub2RlKSkpKSB7CiAgICAgICAgIC8v
IE9uY2Ugd2UgZW5jb3VudGVyIGEgZm9ybSBlbGVtZW50LCB3ZSBrbm93IHdlJ3JlIHRocm91Z2gu
Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoaXM8
SFRNTEZvcm1FbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgLy8g
TG9vayBmb3IgbW9yZSByYWRpbyBidXR0b25zLgotICAgICAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4g
aW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4obm9kZSk7CiAgICAgICAg
IGlmIChpbnB1dEVsZW1lbnQtPmZvcm0oKSAhPSBlbGVtZW50KCkuZm9ybSgpKQpAQCAtMTIyLDcg
KzEyMiw3IEBAIGJvb2wgUmFkaW9JbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9h
cmRFdmVudCogZXZlbnQpIGNvbnN0CiAgICAgLy8gTmV2ZXIgYWxsb3cga2V5Ym9hcmQgdGFiYmlu
ZyB0byBsZWF2ZSB5b3UgaW4gdGhlIHNhbWUgcmFkaW8gZ3JvdXAuICBBbHdheXMKICAgICAvLyBz
a2lwIGFueSBvdGhlciBlbGVtZW50cyBpbiB0aGUgZ3JvdXAuCiAgICAgRWxlbWVudCogY3VycmVu
dEZvY3VzZWROb2RlID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKTsKLSAg
ICBpZiAoY3VycmVudEZvY3VzZWROb2RlICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGN1cnJlbnRG
b2N1c2VkTm9kZSkpIHsKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oY3VycmVudEZvY3Vz
ZWROb2RlKSkgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBmb2N1c2VkSW5wdXQgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqY3VycmVudEZvY3VzZWROb2RlKTsKICAgICAgICAgaWYg
KGZvY3VzZWRJbnB1dC5pc1JhZGlvQnV0dG9uKCkgJiYgZm9jdXNlZElucHV0LmZvcm0oKSA9PSBl
bGVtZW50KCkuZm9ybSgpICYmIGZvY3VzZWRJbnB1dC5uYW1lKCkgPT0gZWxlbWVudCgpLm5hbWUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZp
ZWxkSW5wdXRUeXBlLmNwcAppbmRleCA3YTlmZTE0MTZiMjMxNDliYTE3NjAwOGQ2MWJkMmIyNmY3
NjU3YmI1Li4wYzg4OTA4YmE4ZWM4ZWJmYjYxYmRlODU4NzdjNGY0NWY3NmYzN2YwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC0yMDYsNyArMjA2LDcg
QEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUJsdXJFdmVudCgpCiAKIGJvb2wgVGV4
dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCkKIHsK
LSAgICByZXR1cm4gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50
ICYmIGlzPFRleHRFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PFRleHRFdmVudD4oKmV2ZW50KS5k
YXRhKCkgPT0gIlxuIikKKyAgICByZXR1cm4gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LnRleHRJbnB1dEV2ZW50ICYmIGlzPFRleHRFdmVudD4oKmV2ZW50KSAmJiBkb3duY2FzdDxUZXh0
RXZlbnQ+KCpldmVudCkuZGF0YSgpID09ICJcbiIpCiAgICAgICAgIHx8IElucHV0VHlwZTo6c2hv
dWxkU3VibWl0SW1wbGljaXRseShldmVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCBkNzRjMTQ1NDk3MGU1
MzZmNzA3MjZiMWJmNWU5NTNlOTQ4YzcwYTUwLi5mZjQwNjZlM2NhMTAyMDgzZmEwOGQyODVhZDcw
ZDAzMzNiMGQ0NjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
Q29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC02MSw4ICs2MSw4IEBAIHN0YXRpYyBib29sIGhhc0lt
cGxpZWRFbmRUYWcoY29uc3QgSFRNTFN0YWNrSXRlbSogaXRlbSkKICAgICByZXR1cm4gaXRlbS0+
aGFzVGFnTmFtZShkZFRhZykKICAgICAgICAgfHwgaXRlbS0+aGFzVGFnTmFtZShkdFRhZykKICAg
ICAgICAgfHwgaXRlbS0+aGFzVGFnTmFtZShsaVRhZykKLSAgICAgICAgfHwgaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KGl0ZW0tPm5vZGUoKSkKLSAgICAgICAgfHwgaXM8SFRNTE9wdEdyb3VwRWxlbWVu
dD4oaXRlbS0+bm9kZSgpKQorICAgICAgICB8fCBpczxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0t
Pm5vZGUoKSkKKyAgICAgICAgfHwgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKml0ZW0tPm5vZGUo
KSkKICAgICAgICAgfHwgaXRlbS0+aGFzVGFnTmFtZShwVGFnKQogICAgICAgICB8fCBpdGVtLT5o
YXNUYWdOYW1lKHJiVGFnKQogICAgICAgICB8fCBpdGVtLT5oYXNUYWdOYW1lKHJwVGFnKQpAQCAt
MTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleGVjdXRlVGFzayhIVE1MQ29uc3Ry
dWN0aW9uU2l0ZVRhc2smIHRhc2spCiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFj
aExhdGVyKENvbnRhaW5lck5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCwg
Ym9vbCBzZWxmQ2xvc2luZykKIHsKLSAgICBBU1NFUlQoc2NyaXB0aW5nQ29udGVudElzQWxsb3dl
ZChtX3BhcnNlckNvbnRlbnRQb2xpY3kpIHx8ICFpczxFbGVtZW50PihwcnBDaGlsZC5nZXQoKSkg
fHwgIXRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoZG93bmNhc3Q8RWxlbWVudD4ocHJwQ2hpbGQu
Z2V0KCkpKSk7CisgICAgQVNTRVJUKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV9wYXJzZXJD
b250ZW50UG9saWN5KSB8fCAhaXM8RWxlbWVudD4oKnBycENoaWxkKSB8fCAhdG9TY3JpcHRFbGVt
ZW50SWZQb3NzaWJsZShkb3duY2FzdDxFbGVtZW50PihwcnBDaGlsZC5nZXQoKSkpKTsKICAgICBB
U1NFUlQocGx1Z2luQ29udGVudElzQWxsb3dlZChtX3BhcnNlckNvbnRlbnRQb2xpY3kpIHx8ICFw
cnBDaGlsZC0+aXNQbHVnaW5FbGVtZW50KCkpOwogCiAgICAgSFRNTENvbnN0cnVjdGlvblNpdGVU
YXNrIHRhc2soSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrOjpJbnNlcnQpOwpAQCAtNDU4LDcgKzQ1
OCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
SFRNTEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIGJvb2wgaXNEZW1vdGVkKQog
ewogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4p
OwotICAgIEFTU0VSVChpczxIVE1MRm9ybUVsZW1lbnQ+KGVsZW1lbnQuZ2V0KCkpKTsKKyAgICBB
U1NFUlQoaXM8SFRNTEZvcm1FbGVtZW50PigqZWxlbWVudCkpOwogICAgIFJlZlB0cjxIVE1MRm9y
bUVsZW1lbnQ+IGZvcm0gPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxGb3JtRWxlbWVudD4oZWxl
bWVudC5yZWxlYXNlKCkpOwogICAgIGlmICghaW5zaWRlVGVtcGxhdGVFbGVtZW50KCkpCiAgICAg
ICAgIG1fZm9ybSA9IGZvcm07CkBAIC01NDcsNyArNTQ3LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNw
YWNlTW8KICAgICAvLyBmb3IgcGVyZm9ybWFuY2UsIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU1ODk4Pi4KIAogICAgIE5vZGUqIHByZXZpb3VzQ2hpbGQgPSB0
YXNrLm5leHRDaGlsZCA/IHRhc2submV4dENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IHRhc2su
cGFyZW50LT5sYXN0Q2hpbGQoKTsKLSAgICBpZiAocHJldmlvdXNDaGlsZCAmJiBpczxUZXh0Pihw
cmV2aW91c0NoaWxkKSkgeworICAgIGlmIChpczxUZXh0PihwcmV2aW91c0NoaWxkKSkgewogICAg
ICAgICAvLyBGSVhNRTogV2UncmUgb25seSBzdXBwb3NlZCB0byBhcHBlbmQgdG8gdGhpcyB0ZXh0
IG5vZGUgaWYgaXQKICAgICAgICAgLy8gd2FzIHRoZSBsYXN0IHRleHQgbm9kZSBpbnNlcnRlZCBi
eSB0aGUgcGFyc2VyLgogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpw
cmV2aW91c0NoaWxkKTsKQEAgLTYxOCw3ICs2MTgsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4s
CiBpbmxpbmUgRG9jdW1lbnQmIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpvd25lckRvY3VtZW50Rm9y
Q3VycmVudE5vZGUoKQogewogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgIGlmIChp
czxIVE1MVGVtcGxhdGVFbGVtZW50PihjdXJyZW50Tm9kZSgpKSkKKyAgICBpZiAoaXM8SFRNTFRl
bXBsYXRlRWxlbWVudD4oKmN1cnJlbnROb2RlKCkpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTFRlbXBsYXRlRWxlbWVudD4oKmN1cnJlbnRFbGVtZW50KCkpLmNvbnRlbnQoKS0+ZG9jdW1l
bnQoKTsKICNlbmRpZgogICAgIHJldHVybiBjdXJyZW50Tm9kZSgpLT5kb2N1bWVudCgpOwpAQCAt
NzI3LDcgKzcyNyw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmZpbmRGb3N0ZXJTaXRl
KEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYgdGFzaykKICAgICAgICAgLy8gYW5kIGluc3RlYWQg
dXNlIHRoZSBEb2N1bWVudEZyYWdtZW50IGFzIGEgcm9vdCBub2RlLiBTbyB3ZSBtdXN0IHRyZWF0
IHRoZSByb290IG5vZGUgKERvY3VtZW50RnJhZ21lbnQpIGFzIGlmIGl0IGlzIGEgaHRtbCBlbGVt
ZW50IGhlcmUuCiAgICAgICAgIGJvb2wgcGFyZW50Q2FuQmVGb3N0ZXJQYXJlbnQgPSBwYXJlbnQg
JiYgKHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpIHx8IChtX2lzUGFyc2luZ0ZyYWdtZW50ICYmIHBh
cmVudCA9PSBtX29wZW5FbGVtZW50cy5yb290Tm9kZSgpKSk7CiAjaWYgRU5BQkxFKFRFTVBMQVRF
X0VMRU1FTlQpCi0gICAgICAgIHBhcmVudENhbkJlRm9zdGVyUGFyZW50ID0gcGFyZW50Q2FuQmVG
b3N0ZXJQYXJlbnQgfHwgKHBhcmVudCAmJiBpczxEb2N1bWVudEZyYWdtZW50PihwYXJlbnQpICYm
IGRvd25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KHBhcmVudCktPmlzVGVtcGxhdGVDb250ZW50KCkp
OworICAgICAgICBwYXJlbnRDYW5CZUZvc3RlclBhcmVudCA9IHBhcmVudENhbkJlRm9zdGVyUGFy
ZW50IHx8IChpczxEb2N1bWVudEZyYWdtZW50PihwYXJlbnQpICYmIGRvd25jYXN0PERvY3VtZW50
RnJhZ21lbnQ+KHBhcmVudCktPmlzVGVtcGxhdGVDb250ZW50KCkpOwogI2VuZGlmCiAgICAgICAg
IGlmIChwYXJlbnRDYW5CZUZvc3RlclBhcmVudCkgewogICAgICAgICAgICAgdGFzay5wYXJlbnQg
PSBwYXJlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxl
bWVudFN0YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3Rh
Y2suY3BwCmluZGV4IDkxOWFjMGUzYTI1MjU4ZWM5ZGQwNTk5NjEwNTY1MWYzODk5YWRkYWUuLjM5
N2QxZTZlYzBiMmVlNWMzZTBhMDEzZjNkMjU0ZmY4NDRkYWE4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCkBAIC01MSw3ICs1MSw3IEBA
IGlubGluZSBib29sIGlzU2NvcGVNYXJrZXIoSFRNTFN0YWNrSXRlbSogaXRlbSkKICAgICAgICAg
fHwgaXRlbS0+aGFzVGFnTmFtZShjYXB0aW9uVGFnKQogICAgICAgICB8fCBpdGVtLT5oYXNUYWdO
YW1lKG1hcnF1ZWVUYWcpCiAgICAgICAgIHx8IGl0ZW0tPmhhc1RhZ05hbWUob2JqZWN0VGFnKQot
ICAgICAgICB8fCBpczxIVE1MVGFibGVFbGVtZW50PihpdGVtLT5ub2RlKCkpCisgICAgICAgIHx8
IGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCppdGVtLT5ub2RlKCkpCiAgICAgICAgIHx8IGl0ZW0tPmhh
c1RhZ05hbWUodGRUYWcpCiAgICAgICAgIHx8IGl0ZW0tPmhhc1RhZ05hbWUodGhUYWcpCiAgICAg
ICAgIHx8IGl0ZW0tPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1pVGFnKQpAQCAtNzgsNyArNzgs
NyBAQCBpbmxpbmUgYm9vbCBpc0xpc3RJdGVtU2NvcGVNYXJrZXIoSFRNTFN0YWNrSXRlbSogaXRl
bSkKIAogaW5saW5lIGJvb2wgaXNUYWJsZVNjb3BlTWFya2VyKEhUTUxTdGFja0l0ZW0qIGl0ZW0p
CiB7Ci0gICAgcmV0dXJuIGlzPEhUTUxUYWJsZUVsZW1lbnQ+KGl0ZW0tPm5vZGUoKSkKKyAgICBy
ZXR1cm4gaXM8SFRNTFRhYmxlRWxlbWVudD4oKml0ZW0tPm5vZGUoKSkKICNpZiBFTkFCTEUoVEVN
UExBVEVfRUxFTUVOVCkKICAgICAgICAgfHwgaXRlbS0+aGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykK
ICNlbmRpZgpAQCAtMTIwLDcgKzEyMCw3IEBAIGlubGluZSBib29sIGlzQnV0dG9uU2NvcGVNYXJr
ZXIoSFRNTFN0YWNrSXRlbSogaXRlbSkKIAogaW5saW5lIGJvb2wgaXNTZWxlY3RTY29wZU1hcmtl
cihIVE1MU3RhY2tJdGVtKiBpdGVtKQogewotICAgIHJldHVybiAhaXM8SFRNTE9wdEdyb3VwRWxl
bWVudD4oaXRlbS0+bm9kZSgpKSAmJiAhaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGl0ZW0tPm5vZGUo
KSk7CisgICAgcmV0dXJuICFpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqaXRlbS0+bm9kZSgpKSAm
JiAhaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtLT5ub2RlKCkpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCBmN2VjYWM4
NWQwYjQyMTk1YmRlMGNmNmMyNTA1YzU5NjEwNjk0NjlkLi5kNDdmMjUwOWEyZDk0NjE0NTE3ZjJl
NTdiNDAzYzA3MWEwYWU4YjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5jcHAKQEAgLTI5OCw3ICsyOTgsNyBAQCBIVE1MVHJlZUJ1aWxkZXI6OkhU
TUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXImIHBhcnNlciwgRG9jdW1lbnRGcmFnbWVu
dCYgZgogI2VuZGlmCiAKICAgICAgICAgcmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgp
OwotICAgICAgICBtX3RyZWUuc2V0Rm9ybSghY29udGV4dEVsZW1lbnQgfHwgaXM8SFRNTEZvcm1F
bGVtZW50Pihjb250ZXh0RWxlbWVudCkgPyBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGNvbnRl
eHRFbGVtZW50KSA6IEhUTUxGb3JtRWxlbWVudDo6ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3IoKmNv
bnRleHRFbGVtZW50KSk7CisgICAgICAgIG1fdHJlZS5zZXRGb3JtKCFjb250ZXh0RWxlbWVudCB8
fCBpczxIVE1MRm9ybUVsZW1lbnQ+KCpjb250ZXh0RWxlbWVudCkgPyBkb3duY2FzdDxIVE1MRm9y
bUVsZW1lbnQ+KGNvbnRleHRFbGVtZW50KSA6IEhUTUxGb3JtRWxlbWVudDo6ZmluZENsb3Nlc3RG
b3JtQW5jZXN0b3IoKmNvbnRleHRFbGVtZW50KSk7CiAgICAgfQogfQogCkBAIC04NjksNyArODY5
LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9t
aWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IG9wdGdyb3VwVGFnIHx8IHRva2VuLT5uYW1lKCkgPT0gb3B0aW9uVGFnKSB7
Ci0gICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4obV90cmVlLmN1cnJlbnRTdGFja0l0
ZW0oKS0+bm9kZSgpKSkgeworICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX3Ry
ZWUuY3VycmVudFN0YWNrSXRlbSgpLT5ub2RlKCkpKSB7CiAgICAgICAgICAgICBBdG9taWNIVE1M
VG9rZW4gZW5kT3B0aW9uKEhUTUxUb2tlbjo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkp
OwogICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZygmZW5kT3B0aW9uKTsKICAgICAgICAgfQpAQCAt
MTM2MCw3ICsxMzYwLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGlvblRhZykgewotICAgICAgICAgICAgaWYg
KGlzPEhUTUxPcHRpb25FbGVtZW50PihtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5ub2RlKCkp
KSB7CisgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX3RyZWUuY3VycmVu
dFN0YWNrSXRlbSgpLT5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgQXRvbWljSFRNTFRva2Vu
IGVuZE9wdGlvbihIVE1MVG9rZW46OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsKICAg
ICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKCZlbmRPcHRpb24pOwogICAgICAgICAgICAgfQpA
QCAtMTM2OCwxMSArMTM2OCwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gb3B0Z3JvdXBUYWcpIHsKLSAgICAgICAg
ICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4obV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+
bm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90cmVl
LmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEF0b21pY0hU
TUxUb2tlbiBlbmRPcHRpb24oSFRNTFRva2VuOjpFbmRUYWcsIG9wdGlvblRhZy5sb2NhbE5hbWUo
KSk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZygmZW5kT3B0aW9uKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PihtX3RyZWUuY3Vy
cmVudFN0YWNrSXRlbSgpLT5ub2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdEdy
b3VwRWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsKICAgICAg
ICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kT3B0Z3JvdXAoSFRNTFRva2VuOjpFbmRUYWcs
IG9wdGdyb3VwVGFnLmxvY2FsTmFtZSgpKTsKICAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFn
KCZlbmRPcHRncm91cCk7CiAgICAgICAgICAgICB9CkBAIC0xNjI5LDcgKzE2MjksNyBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgpCiAgICAg
ICAgICAgICAgICAgd2hpbGUgKGl0ZW0tPm5vZGUoKSAhPSBtX3RyZWUub3BlbkVsZW1lbnRzKCkt
PnJvb3ROb2RlKCkgJiYgIWl0ZW0tPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIG5vZGVSZWNvcmQgPSBub2RlUmVjb3JkLT5uZXh0KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGl0ZW0gPSBub2RlUmVjb3JkLT5zdGFja0l0ZW0oKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KGl0ZW0tPm5vZGUoKSkpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50PigqaXRlbS0+bm9kZSgpKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6
OkluU2VsZWN0SW5UYWJsZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAt
MTY0Nyw3ICsxNjQ3LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnJlc2V0SW5zZXJ0aW9uTW9k
ZUFwcHJvcHJpYXRlbHkoKQogICAgICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZShjb2xncm91cFRh
ZykpIHsKICAgICAgICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6
OkluQ29sdW1uR3JvdXApOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpczxIVE1MVGFibGVFbGVt
ZW50PihpdGVtLT5ub2RlKCkpKQorICAgICAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oKml0
ZW0tPm5vZGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRp
b25Nb2RlOjpJblRhYmxlKTsKICAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUoaGVhZFRhZykp
IHsKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKQEAgLTIyMzQsOSArMjIzNCw5IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4p
CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdDoKICAgICAgICAgQVNTRVJUKGluc2Vy
dGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdCB8fCBpbnNlcnRpb25Nb2RlKCkg
PT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlKTsKICAgICAgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gb3B0Z3JvdXBUYWcpIHsKLSAgICAgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxl
bWVudD4obV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSAmJiBtX3RyZWUub25lQmVs
b3dUb3AoKSAmJiBpczxIVE1MT3B0R3JvdXBFbGVtZW50PihtX3RyZWUub25lQmVsb3dUb3AoKS0+
bm9kZSgpKSkKKyAgICAgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKm1fdHJlZS5j
dXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkgJiYgbV90cmVlLm9uZUJlbG93VG9wKCkgJiYgaXM8
SFRNTE9wdEdyb3VwRWxlbWVudD4oKm1fdHJlZS5vbmVCZWxvd1RvcCgpLT5ub2RlKCkpKQogICAg
ICAgICAgICAgICAgIHByb2Nlc3NGYWtlRW5kVGFnKG9wdGlvblRhZyk7Ci0gICAgICAgICAgICBp
ZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4obV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9k
ZSgpKSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCptX3RyZWUu
Y3VycmVudFN0YWNrSXRlbSgpLT5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CkBAIC0yMjQ0LDcgKzIyNDQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGlvblRhZykgewotICAgICAgICAg
ICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5u
b2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX3RyZWUu
Y3VycmVudFN0YWNrSXRlbSgpLT5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CkBAIC0yNDg2LDcgKzI0ODYsNyBAQCBSZXByb2Nlc3NCdWZmZXI6CiAgICAgICAgIEFTU0VS
VChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZSB8fCBpbnNlcnRpb25N
b2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkgfHwgaW5zZXJ0aW9uTW9kZSgpID09
IEluc2VydGlvbk1vZGU6OkluUm93KTsKICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ1RhYmxlQ2hh
cmFjdGVycy5pc0VtcHR5KCkpOwogICAgICAgICBpZiAobV90cmVlLmN1cnJlbnRTdGFja0l0ZW0o
KS0+aXNFbGVtZW50Tm9kZSgpCi0gICAgICAgICAgICAmJiAoaXM8SFRNTFRhYmxlRWxlbWVudD4o
bV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKQorICAgICAgICAgICAgJiYgKGlzPEhU
TUxUYWJsZUVsZW1lbnQ+KCptX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5ub2RlKCkpCiAgICAg
ICAgICAgICAgICAgfHwgbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRib2R5VGFnKQogICAgICAgICAgICAgICAgIHx8IG1fdHJlZS5jdXJyZW50U3RhY2tJ
dGVtKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdFRhZykKICAgICAgICAgICAgICAgICB8
fCBtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWRU
YWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2lu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaAppbmRleCAw
ZjQxYTAyNDBjMWM1ZmM5YzlhOTcxMjliM2QzY2FhMjYxYzkyNWY5Li41OTRhNWNjMTQ0OWZjNzEy
MDllZTVkOWUzZDc0YmRiZmFmOGEzYzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L0luc2VydGlvblBvaW50LmgKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIGJv
b2wgaXNBY3RpdmVJbnNlcnRpb25Qb2ludChjb25zdCBOb2RlKiBub2RlKQogewotICAgIHJldHVy
biBub2RlICYmIGlzPEluc2VydGlvblBvaW50Pihub2RlKSAmJiBkb3duY2FzdDxJbnNlcnRpb25Q
b2ludD4oKm5vZGUpLmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIGlzPEluc2VydGlvblBvaW50Pihu
b2RlKSAmJiBkb3duY2FzdDxJbnNlcnRpb25Qb2ludD4oKm5vZGUpLmlzQWN0aXZlKCk7CiB9CiAK
IGlubGluZSBOb2RlKiBwYXJlbnROb2RlRm9yRGlzdHJpYnV0aW9uKGNvbnN0IE5vZGUqIG5vZGUp
CkBAIC04NSw3ICs4NSw3IEBAIGlubGluZSBOb2RlKiBwYXJlbnROb2RlRm9yRGlzdHJpYnV0aW9u
KGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgQVNTRVJUKG5vZGUpOwogCiAgICAgaWYgKE5vZGUqIHBh
cmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8SW5zZXJ0aW9uUG9p
bnQ+KHBhcmVudCkgJiYgZG93bmNhc3Q8SW5zZXJ0aW9uUG9pbnQ+KCpwYXJlbnQpLnNob3VsZFVz
ZUZhbGxiYWNrRWxlbWVudHMoKSkKKyAgICAgICAgaWYgKGlzPEluc2VydGlvblBvaW50PigqcGFy
ZW50KSAmJiBkb3duY2FzdDxJbnNlcnRpb25Qb2ludD4oKnBhcmVudCkuc2hvdWxkVXNlRmFsbGJh
Y2tFbGVtZW50cygpKQogICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+cGFyZW50Tm9kZSgpOwog
ICAgICAgICByZXR1cm4gcGFyZW50OwogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgaW5saW5lIE5v
ZGUqIHBhcmVudE5vZGVGb3JEaXN0cmlidXRpb24oY29uc3QgTm9kZSogbm9kZSkKIGlubGluZSBF
bGVtZW50KiBwYXJlbnRFbGVtZW50Rm9yRGlzdHJpYnV0aW9uKGNvbnN0IE5vZGUqIG5vZGUpCiB7
CiAgICAgaWYgKE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGVGb3JEaXN0cmlidXRpb24obm9kZSkp
IHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KHBhcmVudCkpCisgICAgICAgIGlmIChpczxFbGVt
ZW50PigqcGFyZW50KSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihwYXJl
bnQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAKaW5kZXggMjYzODYzYmU3MDYwY2Q5NWFlZDU5Nzhk
OWUzZWMwNGUzMjA4ODAwYS4uNmQ5NWYzNDMzODRkMjBkMDc0NmU1N2YyYjQ5MGRkMDY3ZWVlYjUz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50VHlwZXMuY3BwCkBAIC01Myw3ICs1Myw3IEBAIEhUTUxNZWRpYUVsZW1lbnQqIHBh
cmVudE1lZGlhRWxlbWVudChOb2RlKiBub2RlKQogICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUt
PnNoYWRvd0hvc3QoKTsKICAgICBpZiAoIW1lZGlhTm9kZSkKICAgICAgICAgbWVkaWFOb2RlID0g
bm9kZTsKLSAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1lbnQ+KG1lZGlhTm9kZSkpCisgICAgaWYg
KCFpczxIVE1MTWVkaWFFbGVtZW50PigqbWVkaWFOb2RlKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KG1lZGlhTm9kZSk7CiB9
CkBAIC02MSw3ICs2MSw3IEBAIEhUTUxNZWRpYUVsZW1lbnQqIHBhcmVudE1lZGlhRWxlbWVudChO
b2RlKiBub2RlKQogTWVkaWFDb250cm9sRWxlbWVudFR5cGUgbWVkaWFDb250cm9sRWxlbWVudFR5
cGUoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihu
b2RlLT5pc01lZGlhQ29udHJvbEVsZW1lbnQoKSk7Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkpCiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQqPihub2RlKS0+ZGlz
cGxheVR5cGUoKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sRGl2RWxlbWVu
dCo+KG5vZGUpLT5kaXNwbGF5VHlwZSgpOwogfQpAQCAtMTk2LDcgKzE5Niw3IEBAIE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQo
RG9jdW1lbnQmIGRvY3VtCiB2b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIC8vIExlZnQgYnV0dG9uIGlz
IDAuIFJlamVjdHMgbW91c2UgZXZlbnRzIG5vdCBmcm9tIGxlZnQgYnV0dG9uLgotICAgIGlmIChp
czxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0
b24oKSkKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oKmV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2
ZW50PigqZXZlbnQpLmJ1dHRvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXJlbmRl
cmVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKaW5kZXggMzJmM2E1MzM0ZGNjZDM2Zjk4ODJjOWU4MTZhYjY5MTI4ZWE4MWVk
NS4uMjcxZjA2YTM0NTlkZTIzMDU4MzFkMThlNDA4ZDk5NzNkYTM3ZGMyMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAt
MjIxLDcgKzIyMSw3IEBAIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBNZWRpYUNvbnRyb2xEaXZFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKIAotICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVu
dCkpIHsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oKmV2ZW50KSkgewogICAgICAgICBMYXlvdXRQ
b2ludCBsb2NhdGlvbiA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYWJzb2x1dGVMb2Nh
dGlvbigpOwogICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQgJiYgZXZlbnQtPnRhcmdldCgpID09IHRoaXMpIHsKICAgICAgICAgICAgIHN0YXJ0
RHJhZyhsb2NhdGlvbik7CkBAIC0zMzcsNyArMzM3LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1l
bnQKIAogdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+
KGV2ZW50KSB8fCBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQor
ICAgIGlmICghaXM8TW91c2VFdmVudD4oKmV2ZW50KSB8fCBldmVudC0+dHlwZSgpICE9IGV2ZW50
TmFtZXMoKS5tb3VzZW91dEV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQb29yIG1h
bidzIG1vdXNlbGVhdmUgZXZlbnQgZGV0ZWN0aW9uLgpAQCAtNjg5LDcgKzY4OSw3IEBAIHZvaWQg
TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVuCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7CiAgICAgICAgIE5vZGUqIHRh
cmdldCA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7Ci0gICAgICAgIGlmICghdGFyZ2V0IHx8
ICFpczxFbGVtZW50Pih0YXJnZXQpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KHRhcmdldCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gV2hlbiB3ZSBjcmVhdGVkIHRoZSBl
bGVtZW50cyBpbiB0aGUgdHJhY2sgbGlzdCwgd2UgZ2F2ZSB0aGVtIGEgY3VzdG9tCkBAIC04NTEs
NyArODUxLDcgQEAgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IE1lZGlh
Q29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKERvY3UKIHZvaWQgTWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAv
LyBMZWZ0IGJ1dHRvbiBpcyAwLiBSZWplY3RzIG1vdXNlIGV2ZW50cyBub3QgZnJvbSBsZWZ0IGJ1
dHRvbi4KLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZl
bnQ+KCpldmVudCkuYnV0dG9uKCkpCisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KCpldmVudCkgJiYg
ZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKCFyZW5kZXJlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzLmNwcAppbmRleCA0ZDNlY2Y4MGQyOTJmYTI1NTM3NWJkZjRhNmFmM2Q0OWU0MzBi
NjNhLi43MTI5ZmU2NjE3M2FmZjdlNDExZjc0NWU0Mzk1OWEyMjI3NzlkZmRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApAQCAtMzY2LDcgKzM2Niw3
IEBAIHZvaWQgTWVkaWFDb250cm9sczo6c3RvcEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigp
CiAKIGJvb2wgTWVkaWFDb250cm9sczo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVu
dCkKIHsKLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkKKyAgICBpZiAoIWlzPE1vdXNl
RXZlbnQ+KCpldmVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBFdmVudFRhcmdldCog
cmVsYXRlZFRhcmdldCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkucmVsYXRlZFRhcmdl
dCgpOwogICAgIGlmICghcmVsYXRlZFRhcmdldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCmluZGV4IDhjODRkYTczYmY2NjAwZjQ1YzE0
MmI2MzM0ZWFhNjM0YzQzZDhlODYuLjAxZTNmNmZiZjRjMjRmMThiZGM0YTRjZjhiNzI0ZDM3Zjkw
MmY5NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bHNBcHBsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
c0FwcGxlLmNwcApAQCAtNTg4LDcgKzU4OCw3IEBAIHZvaWQgTWVkaWFDb250cm9sc0FwcGxlRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50CiB7
CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpCiAgICAg
ICAgIG1fbWVkaWFDb250cm9scy0+aGFuZGxlQ2xpY2tFdmVudChldmVudCk7Ci0gICAgZWxzZSBp
ZiAoKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBpczxXaGVlbEV2ZW50Pihl
dmVudCkpIHsKKyAgICBlbHNlIGlmICgoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2hl
ZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQp
ICYmIGlzPFdoZWVsRXZlbnQ+KCpldmVudCkpIHsKICAgICAgICAgV2hlZWxFdmVudCYgd2hlZWxF
dmVudCA9IGRvd25jYXN0PFdoZWVsRXZlbnQ+KCpldmVudCk7CiAgICAgICAgIGlmIChtX21lZGlh
Q29udHJvbHMtPnNob3VsZENsb3NlZENhcHRpb25zQ29udGFpbmVyUHJldmVudFBhZ2VTY3JvbGxp
bmcod2hlZWxFdmVudC53aGVlbERlbHRhWSgpKSkKICAgICAgICAgICAgIHdoZWVsRXZlbnQucHJl
dmVudERlZmF1bHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJU
aHVtYkVsZW1lbnQuY3BwCmluZGV4IDIyYmU2M2I0NzVlMDk1MTI3NTY3OGI4NDhmYmFiNWQzMjg2
NDlkNzguLmRkYzVhNTNhOGI3YjI1NjkwYmU4YmRhNjUzNWRmMDJmMjAxNThlZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcApAQCAt
MzMzLDcgKzMzMyw3IEBAIHZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpzdG9wRHJhZ2dpbmcoKQog
I2lmICFQTEFURk9STShJT1MpCiB2b2lkIFNsaWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkp
IHsKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KCpldmVudCkpIHsKICAgICAgICAgSFRNTERpdkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU3BpbkJ1dHRvbkVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3Bw
CmluZGV4IDM4YTQwYTQzZGQ2ODU1ODE2MDI4ZDFjZGJlOGFkZjRjOTZiMmI0NTkuLmJiZGQwMWI5
YTA5NjVjOTY1MDU2YzljYzg5M2MzZmFkY2YzYjVkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgdm9p
ZCBTcGluQnV0dG9uRWxlbWVudDo6d2lsbERldGFjaFJlbmRlcmVycygpCiAKIHZvaWQgU3BpbkJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIGlm
ICghaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7CisgICAgaWYgKCFpczxNb3VzZUV2ZW50PigqZXZl
bnQpKSB7CiAgICAgICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgICAg
ICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIFNwaW5CdXR0b25FbGVtZW50Ojpmb3J3YXJk
RXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlmICghcmVuZGVyQm94KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICghaXM8V2hlZWxFdmVudD4oZXZlbnQpKQorICAgIGlmICghaXM8V2hlZWxF
dmVudD4oKmV2ZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX3NwaW5CdXR0b25P
d25lcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9s
SW5uZXJFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwCmluZGV4IDdiMjk1M2Q4NzhiOTBhZDMyMWZhNWRkMmIyZjFiMDc0
ZWI2YmRmNGEuLmI0NzYxOTAxM2Y0MmM5ZDdmMDdlZmE4ZDM4YTlkNTVmZjliMjhmYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgU2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgLy8g
T24gbW91c2Vkb3duLCBicmluZyB1cCBhIG1lbnUsIGlmIG5lZWRlZAogICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc2hhZG93SG9zdCgpKTsK
LSAgICBpZiAoaW5wdXQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3du
RXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpl
dmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChpbnB1dCAmJiBldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxNb3VzZUV2ZW50Pigq
ZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewogICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5wdXQtPnNlbGVjdCgp
OwogI2lmICFQTEFURk9STShJT1MpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2Fz
dDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VF
dmVudD4oKmV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+dmlz
aWJsZVRvSGl0VGVzdGluZygpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQoKS5mcmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigp
LnNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudCh0aGlzKTsKQEAgLTIxMCw3ICsyMTAsNyBA
QCB2b2lkIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKICAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25j
YXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgaXM8TW91c2VF
dmVudD4oKmV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKG1fY2FwdHVyaW5nKSB7CiAgICAgICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAgICAgICAgICAgICAgICAg
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudChudWxs
cHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcAppbmRleCBiN2FmOTgxN2RmY2Vm
M2U1N2Q2MzJlMjAyZDcyNWM4NjA2ZWZmY2FlLi4zODI2ZjNkZTQwNjZmOTc0NDFkOGY0NDJkYjdi
NGQzZmQxYmM5MTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCkBAIC00OTcs
MTIgKzQ5NywxMiBAQCB2b2lkIFZUVEN1ZTo6Y29weVdlYlZUVE5vZGVUb0RPTVRyZWUoQ29udGFp
bmVyTm9kZSogd2ViVlRUTm9kZSwgQ29udGFpbmVyTm9kZSogcAogewogICAgIGZvciAoTm9kZSog
bm9kZSA9IHdlYlZUVE5vZGUtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRT
aWJsaW5nKCkpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IGNsb25lZE5vZGU7Ci0gICAgICAgIGlm
IChpczxXZWJWVFRFbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPFdlYlZUVEVsZW1lbnQ+
KCpub2RlKSkKICAgICAgICAgICAgIGNsb25lZE5vZGUgPSBkb3duY2FzdDxXZWJWVFRFbGVtZW50
Pigqbm9kZSkuY3JlYXRlRXF1aXZhbGVudEhUTUxFbGVtZW50KG93bmVyRG9jdW1lbnQoKSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGNsb25lZE5vZGUgPSBub2RlLT5jbG9uZU5vZGUoZmFs
c2UpOwogICAgICAgICBwYXJlbnQtPmFwcGVuZENoaWxkKGNsb25lZE5vZGUsIEFTU0VSVF9OT19F
WENFUFRJT04pOwotICAgICAgICBpZiAoaXM8Q29udGFpbmVyTm9kZT4obm9kZSkpCisgICAgICAg
IGlmIChpczxDb250YWluZXJOb2RlPigqbm9kZSkpCiAgICAgICAgICAgICBjb3B5V2ViVlRUTm9k
ZVRvRE9NVHJlZShkb3duY2FzdDxDb250YWluZXJOb2RlPihub2RlKSwgZG93bmNhc3Q8Q29udGFp
bmVyTm9kZT4oY2xvbmVkTm9kZS5nZXQoKSkpOwogICAgIH0KIH0KQEAgLTc2Niw3ICs3NjYsNyBA
QCB2b2lkIFZUVEN1ZTo6bWFya0Z1dHVyZUFuZFBhc3ROb2RlcyhDb250YWluZXJOb2RlKiByb290
LCBjb25zdCBNZWRpYVRpbWUmIHByZXZpbwogICAgICAgICAgICAgICAgIGlzUGFzdE5vZGUgPSBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGlzPFdlYlZUVEVsZW1lbnQ+
KGNoaWxkKSkgeworICAgICAgICBpZiAoaXM8V2ViVlRURWxlbWVudD4oKmNoaWxkKSkgewogICAg
ICAgICAgICAgZG93bmNhc3Q8V2ViVlRURWxlbWVudD4oKmNoaWxkKS5zZXRJc1Bhc3ROb2RlKGlz
UGFzdE5vZGUpOwogICAgICAgICAgICAgLy8gTWFrZSBhbiBlbGVtZW5ldCBpZCBtYXRjaCBhIGN1
ZSBpZCBmb3Igc3R5bGUgbWF0Y2hpbmcgcHVycG9zZXMuCiAgICAgICAgICAgICBpZiAoIWlkKCku
aXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAKaW5kZXggZWUzZGQzOGE3YzUwOGNiZjk4NjhiYzQ5MmRiMWYxMzQ1MjA5OTdkMC4uNmVl
Y2Q1ZDMwYjY4ODA4MjhjMjgzOGE1Mjg3NTQ0OTM2NzdhYTNjOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC04OTYsNyArODk2LDcgQEAg
RWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFs
KCJObyBub2RlIHdpdGggZ2l2ZW4gaWQgZm91bmQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQotICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoIWlzPEVsZW1l
bnQ+KCpub2RlKSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiTm90IGFu
IGVsZW1lbnQgbm9kZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xMDg2
LDcgKzEwODYsOCBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcAogCiBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9i
amVjdEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghaXM8
U3R5bGVkRWxlbWVudD4oZWxlbWVudCkpCisgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIGlmICgh
aXM8U3R5bGVkRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIC8vIEZJWE1FOiBVZ2xpbmVzcyBiZWxvdy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGJlOTVmZTBiMjM1NTg5ZTIyMjFkNjIxMDc0
ZjY1YmNhY2M0YTAwY2YuLjliYjA4MThhMzEyY2IxZDM3ODVlZjEyYWQyNTY5MzAzZWIxNmZkYWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApA
QCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChOb2RlKiBu
b2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiAgICAgICAgICAgICB1bmJpbmQoY29udGVudERv
Y3VtZW50LCBub2Rlc01hcCk7CiAgICAgfQogCi0gICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7
CisgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICBpZiAoU2hhZG93Um9vdCog
cm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5zaGFkb3dSb290KCkpCiAgICAgICAgICAg
ICB1bmJpbmQocm9vdCwgbm9kZXNNYXApOwogICAgIH0KQEAgLTM3NSw3ICszNzUsNyBAQCBEb2N1
bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERvY3VtZW50KEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vZGVJZAogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3Ry
aW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgaWYgKCFpczxEb2N1bWVudD4obm9kZSkpIHsKKyAgICBpZiAoIWlzPERvY3VtZW50Pigqbm9k
ZSkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkRvY3VtZW50IGlzIG5v
dCBhdmFpbGFibGUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMzg3LDcg
KzM4Nyw3IEBAIEVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFbGVtZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0
Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoIWlzPEVs
ZW1lbnQ+KCpub2RlKSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiTm9k
ZSBpcyBub3QgYW4gRWxlbWVudCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBA
IC01MjAsNyArNTIwLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnMKICAgICBOb2RlKiBub2Rl
ID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KG5vZGUpKSB7CisgICAgaWYg
KCFpczxDb250YWluZXJOb2RlPigqbm9kZSkpIHsKICAgICAgICAgYXNzZXJ0RWxlbWVudChlcnJv
clN0cmluZywgbm9kZUlkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTU0MSw3ICs1NDEs
NyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgYwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2Rl
KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4obm9kZSkpIHsKKyAgICBpZiAoIWlzPENvbnRhaW5l
ck5vZGU+KCpub2RlKSkgewogICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2Rl
SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzE4LDcgKzcxOCw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVOYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwgY29uc3QKICAgICAqbmV3SWQgPSAwOwogCiAgICAgTm9kZSogb2xkTm9kZSA9IG5v
ZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghb2xkTm9kZSB8fCAhaXM8RWxlbWVudD4ob2xkTm9k
ZSkpCisgICAgaWYgKCFpczxFbGVtZW50PihvbGROb2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0xMjY5LDcgKzEyNjksNyBAQCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yTm9kZQogICAgICAgICAgICAgdmFsdWUtPnNldENoaWxkcmVuKGNoaWxkcmVuLnJl
bGVhc2UoKSk7CiAgICAgfQogCi0gICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYg
KGlzPEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNh
c3Q8RWxlbWVudD4oKm5vZGUpOwogICAgICAgICB2YWx1ZS0+c2V0QXR0cmlidXRlcyhidWlsZEFy
cmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoJmVsZW1lbnQpKTsKICAgICAgICAgaWYgKGlzPEhUTUxG
cmFtZU93bmVyRWxlbWVudD4oZWxlbWVudCkpIHsKQEAgLTEyOTMsMTcgKzEyOTMsMTcgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50
OjpidWlsZE9iamVjdEZvck5vZGUKICAgICAgICAgICAgIHZhbHVlLT5zZXRUZW1wbGF0ZUNvbnRl
bnQoYnVpbGRPYmplY3RGb3JOb2RlKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KGVsZW1l
bnQpLmNvbnRlbnQoKSwgMCwgbm9kZXNNYXApKTsKICNlbmRpZgogCi0gICAgfSBlbHNlIGlmIChp
czxEb2N1bWVudD4obm9kZSkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPERvY3VtZW50Pigqbm9kZSkp
IHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpub2Rl
KTsKICAgICAgICAgdmFsdWUtPnNldERvY3VtZW50VVJMKGRvY3VtZW50VVJMU3RyaW5nKCZkb2N1
bWVudCkpOwogICAgICAgICB2YWx1ZS0+c2V0QmFzZVVSTChkb2N1bWVudEJhc2VVUkxTdHJpbmco
JmRvY3VtZW50KSk7CiAgICAgICAgIHZhbHVlLT5zZXRYbWxWZXJzaW9uKGRvY3VtZW50LnhtbFZl
cnNpb24oKSk7Ci0gICAgfSBlbHNlIGlmIChpczxEb2N1bWVudFR5cGU+KG5vZGUpKSB7CisgICAg
fSBlbHNlIGlmIChpczxEb2N1bWVudFR5cGU+KCpub2RlKSkgewogICAgICAgICBEb2N1bWVudFR5
cGUmIGRvY1R5cGUgPSBkb3duY2FzdDxEb2N1bWVudFR5cGU+KCpub2RlKTsKICAgICAgICAgdmFs
dWUtPnNldFB1YmxpY0lkKGRvY1R5cGUucHVibGljSWQoKSk7CiAgICAgICAgIHZhbHVlLT5zZXRT
eXN0ZW1JZChkb2NUeXBlLnN5c3RlbUlkKCkpOwogICAgICAgICB2YWx1ZS0+c2V0SW50ZXJuYWxT
dWJzZXQoZG9jVHlwZS5pbnRlcm5hbFN1YnNldCgpKTsKLSAgICB9IGVsc2UgaWYgKGlzPEF0dHI+
KG5vZGUpKSB7CisgICAgfSBlbHNlIGlmIChpczxBdHRyPigqbm9kZSkpIHsKICAgICAgICAgQXR0
ciYgYXR0cmlidXRlID0gZG93bmNhc3Q8QXR0cj4oKm5vZGUpOwogICAgICAgICB2YWx1ZS0+c2V0
TmFtZShhdHRyaWJ1dGUubmFtZSgpKTsKICAgICAgICAgdmFsdWUtPnNldFZhbHVlKGF0dHJpYnV0
ZS52YWx1ZSgpKTsKQEAgLTE1MjIsNyArMTUyMiw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChpczxFbGVtZW50
Pigqbm9kZSkpIHsKICAgICAgICAgICAgICAgICBzdXBwb3J0c0ZvY3VzZWQgPSBkb3duY2FzdDxF
bGVtZW50Pigqbm9kZSkuaXNGb2N1c2FibGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc3VwcG9y
dHNGb2N1c2VkKQogICAgICAgICAgICAgICAgICAgICBmb2N1c2VkID0gYXhPYmplY3QtPmlzRm9j
dXNlZCgpOwpAQCAtMTcyMCw3ICsxNzIwLDggQEAgdW5zaWduZWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmlubmVyQ2hpbGROb2RlQ291bnQoTm9kZSogbm9kZSkKIAogTm9kZSogSW5zcGVjdG9yRE9NQWdl
bnQ6OmlubmVyUGFyZW50Tm9kZShOb2RlKiBub2RlKQogewotICAgIGlmIChpczxEb2N1bWVudD4o
bm9kZSkpCisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmIChpczxEb2N1bWVudD4oKm5vZGUpKQog
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KCpub2RlKS5vd25lckVsZW1lbnQoKTsK
ICAgICByZXR1cm4gbm9kZS0+cGFyZW50Tm9kZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAppbmRleCAwMzNhYWM4M2UwNzM5
OWNiMmY5MDA2MjUyM2U2YzA0NTc2YzlmYjZhLi4xYzA1YmJmYWRlYjY0YmMzYTU1NzhjNDhkMjNj
Mzc2NWVhMGIxZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcApAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25zdCBWZWN0b3I8Q29u
dGV4dE1lCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGlzcGF0Y2hFdmVudEFzQ29udGV4
dE1lbnVFdmVudChFdmVudCogZXZlbnQpCiB7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpICYm
IFVTRShBQ0NFU1NJQklMSVRZX0NPTlRFWFRfTUVOVVMpCi0gICAgaWYgKCFldmVudCB8fCAhaXM8
TW91c2VFdmVudD4oZXZlbnQpKQorICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZlbnQpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBGcmFtZSogZnJhbWUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9k
ZSgpLT5kb2N1bWVudCgpLmZyYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCmluZGV4IDhlOTQ3Y2E1OGQyYmJhM2Nm
YTY5OTIzMmFhYmM3YWM1ZjQyNzk5MDMuLjMwYjVhMjBiOWM0ZDhmMmQ5MzA3MGY0N2MxYjk2YjRj
YmFjMTJkZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC0xMDAsOCArMTAwLDggQEAgaW50IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c19mcm9udGVuZENvdW50ZXIgPSAwOwogc3RhdGljIEZyYW1lKiBmcmFt
ZUZvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBudWxscHRyOwotICAgIGlmIChpczxEb2N1bWVudD4o
Y29udGV4dCkpCi0gICAgICAgIGZyYW1lID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLT5m
cmFtZSgpOworICAgIGlmIChpczxEb2N1bWVudD4oKmNvbnRleHQpKQorICAgICAgICBmcmFtZSA9
IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCkuZnJhbWUoKTsKICAgICByZXR1cm4gZnJhbWU7
CiB9CiAKQEAgLTEyNjIsNyArMTI2Miw4IEBAIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhCiAKIElu
c3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGlu
Z0FnZW50c0Zvck5vbkRvY3VtZW50Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQogewotICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCkpCisgICAgQVNT
RVJUKGNvbnRleHQpOworICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQpKQog
ICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGF0aW9uRm9yV29ya2VyR2xvYmFsU2NvcGUoZG93bmNh
c3Q8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaAppbmRleCBiOWUwY2U1ZjA4MTk4M2U1NjdlZTFiODZiZjEwYmNkODEzYzEwY2VhLi44MDAz
YzU0NTMyYzE5ZTk2NTIwNjY5ZGE2YjczNjQzM2MwMGU2ZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0yMDYyLDcg
KzIwNjIsNyBAQCBpbmxpbmUgSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udAogewogICAgIGlmICghY29udGV4dCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0KSkK
KyAgICBpZiAoaXM8RG9jdW1lbnQ+KCpjb250ZXh0KSkKICAgICAgICAgcmV0dXJuIGluc3RydW1l
bnRpbmdBZ2VudHNGb3JQYWdlKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS0+cGFnZSgpKTsK
ICAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c0Zvck5vbkRvY3VtZW50Q29udGV4dChjb250
ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JO
b2RlRmluZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JOb2RlRmlu
ZGVyLmNwcAppbmRleCBlNGMwZjFlMWE3MGFiMjM0M2NlMzRkYmM2OGJkMDIzYjQxOWI4NDg0Li4w
ZTYwMjhhYjAxNDQ4OTRjMzFmZGQyOTE2MjFmNjM1ZTI3ZWIyOWE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTm9kZUZpbmRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck5vZGVGaW5kZXIuY3BwCkBAIC04OSw3ICs4OSw3
IEBAIHZvaWQgSW5zcGVjdG9yTm9kZUZpbmRlcjo6c2VhcmNoVXNpbmdET01UcmVlVHJhdmVyc2Fs
KE5vZGUqIHBhcmVudE5vZGUpCiAgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFkZChub2RlKTsK
IAogICAgICAgICAgICAgLy8gU2VhcmNoIGluc2lkZSBmcmFtZSBlbGVtZW50cy4KLSAgICAgICAg
ICAgIGlmIChpczxIVE1MRnJhbWVPd25lckVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgICAgICBp
ZiAoaXM8SFRNTEZyYW1lT3duZXJFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgICAgICBI
VE1MRnJhbWVPd25lckVsZW1lbnQmIGZyYW1lT3duZXIgPSBkb3duY2FzdDxIVE1MRnJhbWVPd25l
ckVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWVPd25lci5jb250ZW50RG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgcGVy
Zm9ybVNlYXJjaChkb2N1bWVudCk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JO
b2RlRmluZGVyOjpzZWFyY2hVc2luZ1hQYXRoKE5vZGUqIHBhcmVudE5vZGUpCiAgICAgICAgIGlm
IChlYykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoaXM8QXR0cj4obm9kZSkp
CisgICAgICAgIGlmIChpczxBdHRyPigqbm9kZSkpCiAgICAgICAgICAgICBub2RlID0gZG93bmNh
c3Q8QXR0cj4oKm5vZGUpLm93bmVyRWxlbWVudCgpOwogCiAgICAgICAgIC8vIFhQYXRoIGNhbiBn
ZXQgb3V0IG9mIHRoZSBjb250ZXh0IG5vZGUgdGhhdCB3ZSBwYXNzIGFzIHRoZSBzdGFydGluZyBw
b2ludCB0byBldmFsdWF0ZSwgc28gd2UgbmVlZCB0byBmaWx0ZXIgZm9yIGp1c3QgdGhlIG5vZGVz
IHdlIGNhcmUgYWJvdXQuCkBAIC0xNTcsNyArMTU3LDggQEAgdm9pZCBJbnNwZWN0b3JOb2RlRmlu
ZGVyOjpzZWFyY2hVc2luZ1hQYXRoKE5vZGUqIHBhcmVudE5vZGUpCiAKIHZvaWQgSW5zcGVjdG9y
Tm9kZUZpbmRlcjo6c2VhcmNoVXNpbmdDU1NTZWxlY3RvcnMoTm9kZSogcGFyZW50Tm9kZSkKIHsK
LSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KHBhcmVudE5vZGUpKQorICAgIEFTU0VSVChwYXJl
bnROb2RlKTsKKyAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCpwYXJlbnROb2RlKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggNmU2NWE4MTBhOThkYWRjMTY4
ZmRlNGFiZWI2MjlmNDU4NjEzMTU4NC4uZTZmMjFiYmNhMzViNDJhMzk1ZjM5NzgyMWE0ZGNjN2Vm
YTE5NmY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
LmNwcApAQCAtNjc2LDcgKzY3Niw4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JTaGFwZU91dHNpZGUoRnJhbWUqIGNvbnRhaW5pbmdGCiAKIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhO
b2RlKiBub2RlKQogewotICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkgfHwgIW5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKSkKKyAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKCFpczxFbGVtZW50Pigq
bm9kZSkgfHwgIW5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlbGVtZW50SW5mbyA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVTaGVldC5jcHAKaW5kZXggZWI3MDBmOWZkZjYxZWEyYTYxODNlMmExMGJkZWVjNmQ3
MjUyZjNjMy4uNWI3ZmE2ZTM3MzQ3YTNhMTlhNjk5MmNlZDEzNWMwODM2MGZmNTM1ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAt
MTM4OCw3ICsxMzg4LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbmxpbmVTdHlsZVNo
ZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgTm9kZSogb3duZXJOb2RlID0gbV9wYWdlU3R5bGVTaGVldC0+b3duZXJOb2RlKCk7Ci0gICAg
aWYgKCFvd25lck5vZGUgfHwgIWlzPEVsZW1lbnQ+KG93bmVyTm9kZSkpCisgICAgaWYgKCFpczxF
bGVtZW50Pihvd25lck5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRWxlbWVudCYg
b3duZXJFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm93bmVyTm9kZSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCmluZGV4IGE5N2ZkODRhNTRlZTgwNWI2YWRl
MWYwNjJmNGM0OTllZTJlMDc2MzYuLjQyMzQzYjJjYzViNzFjNGUzNTJjODA2NDgzZjU2ODVmNjNk
M2EyOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcApAQCAtMTQ0
LDcgKzE0NCw3IEBAIFBhc3NSZWZQdHI8Rm9ybVN1Ym1pc3Npb24+IEZvcm1TdWJtaXNzaW9uOjpj
cmVhdGUoSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBjb25zdCBBCiAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogc3VibWl0QnV0dG9uID0gMDsKICAgICBpZiAoZXZlbnQgJiYgZXZlbnQtPnRhcmdl
dCgpKSB7CiAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2Rl
KCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICAgICAgICAgIHN1Ym1pdEJ1
dHRvbiA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5vZGUpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKaW5kZXggODk0NmNmZWU3ODZlNmUxZmJiNmRjYjkwMjMwNDJjZDM2ZmIxZTE1My4uMjRk
ZDI4YWU0YTAzMWZjMzU3YmU0MzNiNDNlY2U2ZTIxNjMzOGQ3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0xMDMzLDcgKzEwMzMsNyBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpzZXRPcGVuZXIoRnJhbWUqIG9wZW5lcikKIHZvaWQgRnJhbWVMb2FkZXI6OmhhbmRsZUZhbGxi
YWNrQ29udGVudCgpCiB7CiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG1fZnJh
bWUub3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFvd25lciB8fCAhaXM8SFRNTE9iamVjdEVsZW1l
bnQ+KG93bmVyKSkKKyAgICBpZiAoIWlzPEhUTUxPYmplY3RFbGVtZW50Pihvd25lcikpCiAgICAg
ICAgIHJldHVybjsKICAgICBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oKm93bmVyKS5yZW5k
ZXJGYWxsYmFja0NvbnRlbnQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2Fk
ZXIuY3BwCmluZGV4IDczYmM1MmI4MDI5ZWM5MTlhMmE2MmFiOWVkMDU4ZTU5Yjc5ZmQ3NzguLjdl
ZTU0OGZkM2M5ZDUzZjEzZjA0YjMzYjI1MDMyMTdhNjQwMWM4OTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcApAQCAtMzkzLDcgKzM5Myw3IEBAIGJvb2wgU3ViZnJh
bWVMb2FkZXI6OmxvYWRQbHVnaW4oSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z2luRWxlbWVu
dCwgY29uc3QgVVJMCiAgICAgcGx1Z2luRWxlbWVudC5zdWJmcmFtZUxvYWRlcldpbGxDcmVhdGVQ
bHVnSW4odXJsKTsKIAogICAgIEludFNpemUgY29udGVudFNpemUgPSByb3VuZGVkSW50U2l6ZShM
YXlvdXRTaXplKHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKSwgcmVuZGVyZXItPmNvbnRlbnRIZWln
aHQoKSkpOwotICAgIGJvb2wgbG9hZE1hbnVhbGx5ID0gaXM8UGx1Z2luRG9jdW1lbnQ+KGRvY3Vt
ZW50KCkpICYmICFtX2NvbnRhaW5zUGx1Z2lucyAmJiBkb3duY2FzdDxQbHVnaW5Eb2N1bWVudD4o
KmRvY3VtZW50KCkpLnNob3VsZExvYWRQbHVnaW5NYW51YWxseSgpOworICAgIGJvb2wgbG9hZE1h
bnVhbGx5ID0gaXM8UGx1Z2luRG9jdW1lbnQ+KCpkb2N1bWVudCgpKSAmJiAhbV9jb250YWluc1Bs
dWdpbnMgJiYgZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KCpkb2N1bWVudCgpKS5zaG91bGRMb2Fk
UGx1Z2luTWFudWFsbHkoKTsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBPbiBpT1MsIHdl
IG9ubHkgdGVsbCB0aGUgcGx1Z2luIHRvIGJlIGluIGZ1bGwgcGFnZSBtb2RlIGlmIHRoZSBjb250
YWluaW5nIHBsdWdpbiBkb2N1bWVudCBpcyB0aGUgdG9wIGxldmVsIGRvY3VtZW50LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuY3BwCmluZGV4IGRhNjUwYzRkMGM2MmJh
OWM5NTA3OGRkN2Y5M2RkODA3YmEwZGI5YTYuLmE4NTA1NTI3MWNlYjkxNjJmZTIwMzQ0YjY4YjAx
Y2UzZWM5ODQwNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxl
TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5j
cHAKQEAgLTU2LDcgKzU2LDcgQEAgUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBUaHJlYWRh
YmxlTG9hZGVyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY28KICAgICBBU1NFUlQo
Y2xpZW50KTsKICAgICBBU1NFUlQoY29udGV4dCk7CiAKLSAgICBpZiAoaXM8V29ya2VyR2xvYmFs
U2NvcGU+KGNvbnRleHQpKQorICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQp
KQogICAgICAgICByZXR1cm4gV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKGRvd25jYXN0
PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSwgY2xpZW50LCBXb3JrZXJSdW5Mb29wOjpkZWZh
dWx0TW9kZSgpLCByZXF1ZXN0LCBvcHRpb25zKTsKIAogICAgIHJldHVybiBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OmNyZWF0ZShkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpLCAqY2xpZW50
LCByZXF1ZXN0LCBvcHRpb25zKTsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAKLSAgICBpZiAoaXM8V29ya2VyR2xvYmFs
U2NvcGU+KGNvbnRleHQpKQorICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQp
KQogICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSwgcmVxdWVzdCwgY2xpZW50
LCBvcHRpb25zKTsKICAgICBlbHNlCiAgICAgICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpLCBy
ZXF1ZXN0LCBjbGllbnQsIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9N
ZW1vcnlDYWNoZS5jcHAKaW5kZXggMmU4NzgwOTVmMjcxYjFjMDJlMzlhNDYwMTk1MmE3ZjVmYjFh
MTJkYy4uY2M5NGJlOTZkNWY2NTg4ZGM0M2Q1OGEyMWNiMWI0MjI5MDhjZGNkNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCkBAIC03NTIsNyArNzUyLDgg
QEAgdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlVXJsRnJvbUNhY2hlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmkKIAogdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVx
dWVzdEZyb21DYWNoZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKGlz
PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSkgeworICAgIEFTU0VSVChjb250ZXh0KTsKKyAg
ICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KSkgewogICAgICAgICBkb3duY2Fz
dDxXb3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQpLnRocmVhZCgpLndvcmtlckxvYWRlclByb3h5
KCkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVhZFRhc2soJmNyb3NzVGhyZWFkUmVtb3ZlUmVx
dWVzdEZyb21DYWNoZSwgcmVxdWVzdCwgc2Vzc2lvbklEKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC03NjgsNyArNzY5LDggQEAgdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVxdWVzdEZy
b21DYWNoZUltcGwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFJlc28KIAogdm9pZCBN
ZW1vcnlDYWNoZTo6cmVtb3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2FjaGVzKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAg
ICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpKSB7CisgICAgQVNTRVJUKGNvbnRl
eHQpOworICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQpKSB7CiAgICAgICAg
IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqY29udGV4dCkudGhyZWFkKCkud29ya2VyTG9h
ZGVyUHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKENyb3NzVGhyZWFkVGFzaygmY3Jvc3NUaHJlYWRS
ZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXMsIHJlcXVlc3QpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAppbmRleCA5Njdi
YTU1MGU5OGY0YTM1NzRiNDQ0MDM3ZmQ3YWVjN2JjMzZkYzNkLi4wM2ExOTA2ODBmMzdhZmY4MDM4
Y2YwMTMzNTZjMjNkMjg0MDgyM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwv
TWF0aE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1l
bnQuY3BwCkBAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBNYXRoTUxFbGVtZW50OjphdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmkKIHsKICAg
ICBpZiAoaXNTZW1hbnRpY0Fubm90YXRpb24oKSAmJiAobmFtZSA9PSBNYXRoTUxOYW1lczo6c3Jj
QXR0ciB8fCBuYW1lID09IE1hdGhNTE5hbWVzOjplbmNvZGluZ0F0dHIpKSB7CiAgICAgICAgIEVs
ZW1lbnQqIHBhcmVudCA9IHBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAmJiBp
czxNYXRoTUxFbGVtZW50PihwYXJlbnQpICYmIHBhcmVudC0+aGFzVGFnTmFtZShzZW1hbnRpY3NU
YWcpKQorICAgICAgICBpZiAoaXM8TWF0aE1MRWxlbWVudD4ocGFyZW50KSAmJiBwYXJlbnQtPmhh
c1RhZ05hbWUoc2VtYW50aWNzVGFnKSkKICAgICAgICAgICAgIGRvd25jYXN0PE1hdGhNTEVsZW1l
bnQ+KCpwYXJlbnQpLnVwZGF0ZVNlbGVjdGVkQ2hpbGQoKTsKICAgICB9CiAgICAgU3R5bGVkRWxl
bWVudDo6YXR0cmlidXRlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHJlYXNvbik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVudC5jcHAKaW5kZXgg
MjQ3ZjljMjMwMzM3NjhiYWVmNmExOGM4MTg4ZGI4MDcwMGZkODk0MC4uNWZmYTg1Y2JhYzg2NzVk
NmQzNTE2ZmQzY2IzYzQzZWFhZDg2ZTk4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbWF0
aG1sL01hdGhNTFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9N
YXRoTUxTZWxlY3RFbGVtZW50LmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIEVsZW1lbnQqIE1hdGhN
TFNlbGVjdEVsZW1lbnQ6OmdldFNlbGVjdGVkU2VtYW50aWNzQ2hpbGQoKQogICAgIGlmICghY2hp
bGQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKCFpczxNYXRoTUxFbGVtZW50
PihjaGlsZCkgfHwgIWRvd25jYXN0PE1hdGhNTEVsZW1lbnQ+KCpjaGlsZCkuaXNQcmVzZW50YXRp
b25NYXRoTUwoKSkgeworICAgIGlmICghaXM8TWF0aE1MRWxlbWVudD4oKmNoaWxkKSB8fCAhZG93
bmNhc3Q8TWF0aE1MRWxlbWVudD4oKmNoaWxkKS5pc1ByZXNlbnRhdGlvbk1hdGhNTCgpKSB7CiAg
ICAgICAgIC8vIFRoZSBmaXJzdCBjaGlsZCBpcyBub3QgYSBwcmVzZW50YXRpb24gTWF0aE1MIGVs
ZW1lbnQuIEhlbmNlIHdlIG1vdmUgdG8gdGhlIHNlY29uZCBjaGlsZCBhbmQgc3RhcnQgc2VhcmNo
aW5nIGFuIGFubm90YXRpb24gY2hpbGQgdGhhdCBjb3VsZCBiZSBkaXNwbGF5ZWQuCiAgICAgICAg
IGNoaWxkID0gY2hpbGQtPm5leHRFbGVtZW50U2libGluZygpOwogICAgIH0gZWxzZSBpZiAoIWRv
d25jYXN0PE1hdGhNTEVsZW1lbnQ+KCpjaGlsZCkuaXNTZW1hbnRpY0Fubm90YXRpb24oKSkgewpA
QCAtMTY3LDcgKzE2Nyw3IEBAIEVsZW1lbnQqIE1hdGhNTFNlbGVjdEVsZW1lbnQ6OmdldFNlbGVj
dGVkU2VtYW50aWNzQ2hpbGQoKQogICAgIC8vIE90aGVyd2lzZSwgdGhlIGZpcnN0IGNoaWxkIGlz
IGFuIDxhbm5vdGF0aW9uPiBvciA8YW5ub3RhdGlvbi14bWw+IGVsZW1lbnQuIFRoaXMgaXMgaW52
YWxpZCwgYnV0IHNvbWUgcGVvcGxlIHVzZSB0aGlzIHN5bnRheCBzbyB3ZSB0YWtlIGNhcmUgb2Yg
dGhpcyBjYXNlIHRvbyBhbmQgc3RhcnQgdGhlIHNlYXJjaCBmcm9tIHRoaXMgZmlyc3QgY2hpbGQu
CiAKICAgICBmb3IgKCA7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0RWxlbWVudFNpYmxpbmco
KSkgewotICAgICAgICBpZiAoIWlzPE1hdGhNTEVsZW1lbnQ+KGNoaWxkKSkKKyAgICAgICAgaWYg
KCFpczxNYXRoTUxFbGVtZW50PigqY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjphbm5vdGF0aW9uVGFnKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGJhM2I3NzlhM2IyZjU3ZmRhMjZkNmZmMGIxZjI2
MzM5ZTU5NGFkNWUuLjlmYTJiMmViNzQ1MzAzNjhjMDUwZGJmMGY2MTBhNzA3ZmNlODhkZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIENocm9tZTo6c2V0
VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiAgICAgaWYgKHRvb2xUaXAuaXNF
bXB0eSgpICYmIG1fcGFnZS5zZXR0aW5ncygpLnNob3dzVVJMc0luVG9vbFRpcHMoKSkgewogICAg
ICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlc3VsdC5pbm5lck5vblNoYXJlZEVsZW1lbnQo
KSkgewogICAgICAgICAgICAgLy8gR2V0IHRvb2x0aXAgcmVwcmVzZW50aW5nIGZvcm0gYWN0aW9u
LCBpZiByZWxldmFudAotICAgICAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1l
bnQpKSB7CisgICAgICAgICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKSB7
CiAgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50PigqZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmlzU3Vi
bWl0QnV0dG9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKEhUTUxGb3JtRWxlbWVudCog
Zm9ybSA9IGlucHV0LmZvcm0oKSkgewpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgQ2hyb21lOjpz
ZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKICAgICAvLyBMYXN0bHksIGZv
ciA8aW5wdXQgdHlwZT0iZmlsZSI+IHRoYXQgYWxsb3cgbXVsdGlwbGUgZmlsZXMsIHdlJ2xsIGNv
bnNpZGVyIGEgdG9vbHRpcCBmb3IgdGhlIHNlbGVjdGVkIGZpbGVuYW1lcwogICAgIGlmICh0b29s
VGlwLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlc3VsdC5p
bm5lck5vblNoYXJlZEVsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4o
KmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgdG9vbFRpcCA9IGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCplbGVtZW50KS5kZWZhdWx0VG9vbFRpcCgpOwogCiAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBvYnRhaW4gdGV4dCBkaXJlY3Rpb24gb2YgdG9vbHRpcCBmcm9t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5kZXgg
NzZlODgxY2UyOGViZTdlYzcyZDdjMjIwZTJkMDE0ZDc3MThmNThmZi4uMTk0ZjQ0ZDY4YTFmYjYz
NWQzMDExMzNkN2JiNDNiZmFiNTc5Nzk3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMTUwLDcgKzE1MCw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxDb250ZXh0TWVudT4gQ29udGV4dE1lbnVDb250cm9sbGVyOjptYXliZUNyZWF0ZUNvbnRleHRN
ZW51KEV2ZW50CiB7CiAgICAgQVNTRVJUKGV2ZW50KTsKICAgICAKLSAgICBpZiAoIWlzPE1vdXNl
RXZlbnQ+KGV2ZW50KSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KCpldmVudCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0
PE1vdXNlRXZlbnQ+KCpldmVudCk7CkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBDb250ZXh0TWVu
dUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsK
ICNpZiBQTEFURk9STShHVEspCi0gICAgaWYgKCFtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlz
Q29udGVudEVkaXRhYmxlKCkgJiYgaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSkpCisg
ICAgaWYgKCFtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlzQ29udGVudEVkaXRhYmxlKCkgJiYg
aXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm47CiAjZW5k
aWYKICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NVGltZXIuY3BwCmluZGV4IGFlYzkwMTg1NmM5YWRhNjZhNThiMGQ0ZGYyOWNjMDg3MTk1
NGEzYzIuLjM0YjVjMzVmOTE1OTAxOWIyMTczYzE1YmI1YTAyNjBiNWU1NGYwODQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NVGltZXIuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgaW50IERPTVRpbWVyOjppbnN0
YWxsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIHN0ZDo6dW5pcXVlX3B0cjxTY2hl
ZHVsZWQKICAgICAvLyBpcyBkZXN0cm95ZWQsIG9yIGlmIGV4cGxpY2l0bHkgY2FuY2VsbGVkIGJ5
IHJlbW92ZUJ5SWQuIAogICAgIERPTVRpbWVyKiB0aW1lciA9IG5ldyBET01UaW1lcihjb250ZXh0
LCBXVEY6Om1vdmUoYWN0aW9uKSwgdGltZW91dCwgc2luZ2xlU2hvdCk7CiAjaWYgUExBVEZPUk0o
SU9TKQotICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpIHsKKyAgICBpZiAoaXM8RG9jdW1l
bnQ+KCpjb250ZXh0KSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOwogICAgICAgICBib29sIGRpZERlZmVyVGltZW91dCA9IGRvY3Vt
ZW50LmZyYW1lKCkgJiYgZG9jdW1lbnQuZnJhbWUoKS0+dGltZXJzUGF1c2VkKCk7CiAgICAgICAg
IGlmICghZGlkRGVmZXJUaW1lb3V0ICYmIHRpbWVvdXQgPD0gMTAwICYmIHNpbmdsZVNob3QpIHsK
QEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIERPTVRpbWVyOjpmaXJlZCgpCiAKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbnVsbHB0cjsKLSAgICBpZiAoaXM8RG9j
dW1lbnQ+KGNvbnRleHQpKSB7CisgICAgaWYgKGlzPERvY3VtZW50PigqY29udGV4dCkpIHsKICAg
ICAgICAgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCk7CiAgICAgICAgIEFT
U0VSVCghZG9jdW1lbnQtPmZyYW1lKCktPnRpbWVyc1BhdXNlZCgpKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDRhNzQzMGIwNWRjMmJhZTRmNTgwZWM2
ZTU2MGMxNGE2N2M2Mzg2ZjYuLmZiNGUzZTU3OGVkNDQxZTdiYTA4MDA2YjhiNDhiYWE5ZDRmZDcx
YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0yOTAsNyArMjkw
LDcgQEAgc3RhdGljIEVsZW1lbnQqIGVsZW1lbnRVbmRlck1vdXNlKERvY3VtZW50KiBkb2N1bWVu
dFVuZGVyTW91c2UsIGNvbnN0IEludFBvaW50JgogICAgIGRvY3VtZW50VW5kZXJNb3VzZS0+cmVu
ZGVyVmlldygpLT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KCksIHJlc3VsdCk7CiAKICAgICBOb2Rl
KiBub2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwotICAgIHdoaWxlIChub2RlICYmICFpczxFbGVt
ZW50Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4oKm5vZGUpKQogICAg
ICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChub2RlKQogICAgICAgICBu
b2RlID0gbm9kZS0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9kZSgpOwpAQCAtMzk3LDcgKzM5
Nyw3IEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxvYWQoRHJh
Z0RhdGEmIGRyYWdEYXRhKQogCiAgICAgYm9vbCBwbHVnaW5Eb2N1bWVudEFjY2VwdHNEcmFncyA9
IGZhbHNlOwogCi0gICAgaWYgKGRvYyAmJiBpczxQbHVnaW5Eb2N1bWVudD4oZG9jKSkgeworICAg
IGlmIChpczxQbHVnaW5Eb2N1bWVudD4oZG9jKSkgewogICAgICAgICBjb25zdCBXaWRnZXQqIHdp
ZGdldCA9IGRvd25jYXN0PFBsdWdpbkRvY3VtZW50PigqZG9jKS5wbHVnaW5XaWRnZXQoKTsKICAg
ICAgICAgY29uc3QgUGx1Z2luVmlld0Jhc2UqIHBsdWdpblZpZXcgPSAod2lkZ2V0ICYmIHdpZGdl
dC0+aXNQbHVnaW5WaWV3QmFzZSgpKSA/IHRvUGx1Z2luVmlld0Jhc2Uod2lkZ2V0KSA6IG51bGxw
dHI7CiAKQEAgLTU1Miw3ICs1NTIsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjYW5Qcm9jZXNz
RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zRmlsZXMo
KSAmJiBhc0ZpbGVJbnB1dChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpczxIVE1MUGx1Z0luRWxlbWVudD4ocmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpKSkgeworICAgIGlmIChpczxIVE1MUGx1Z0luRWxlbWVudD4oKnJlc3Vs
dC5pbm5lck5vblNoYXJlZE5vZGUoKSkpIHsKICAgICAgICAgaWYgKCFkb3duY2FzdDxIVE1MUGx1
Z0luRWxlbWVudD4ocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKS0+Y2FuUHJvY2Vzc0RyYWco
KSAmJiAhcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlmICghcmVzdWx0LmlubmVyTm9u
U2hhcmVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCkBAIC02MzksMTMgKzYzOSwxMyBAQCBF
bGVtZW50KiBEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291
cmNlRnJhbWUsIEVsZW1lbnQqIHN0YQogICAgICAgICB9CiAgICAgICAgIGlmIChkcmFnTW9kZSA9
PSBEUkFHX0FVVE8pIHsKICAgICAgICAgICAgIGlmICgobV9kcmFnU291cmNlQWN0aW9uICYgRHJh
Z1NvdXJjZUFjdGlvbkltYWdlKQotICAgICAgICAgICAgICAgICYmIGlzPEhUTUxJbWFnZUVsZW1l
bnQ+KGVsZW1lbnQpCisgICAgICAgICAgICAgICAgJiYgaXM8SFRNTEltYWdlRWxlbWVudD4oKmVs
ZW1lbnQpCiAgICAgICAgICAgICAgICAgJiYgc291cmNlRnJhbWUtPnNldHRpbmdzKCkubG9hZHNJ
bWFnZXNBdXRvbWF0aWNhbGx5KCkpIHsKICAgICAgICAgICAgICAgICBzdGF0ZS50eXBlID0gc3Rh
dGljX2Nhc3Q8RHJhZ1NvdXJjZUFjdGlvbj4oc3RhdGUudHlwZSB8IERyYWdTb3VyY2VBY3Rpb25J
bWFnZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoKG1fZHJhZ1NvdXJjZUFjdGlvbiAmIERyYWdTb3VyY2VBY3Rpb25MaW5r
KQotICAgICAgICAgICAgICAgICYmIGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KQorICAg
ICAgICAgICAgICAgICYmIGlzPEhUTUxBbmNob3JFbGVtZW50PigqZWxlbWVudCkKICAgICAgICAg
ICAgICAgICAmJiBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKmVsZW1lbnQpLmlzTGl2ZUxp
bmsoKSkgewogICAgICAgICAgICAgICAgIHN0YXRlLnR5cGUgPSBzdGF0aWNfY2FzdDxEcmFnU291
cmNlQWN0aW9uPihzdGF0ZS50eXBlIHwgRHJhZ1NvdXJjZUFjdGlvbkxpbmspOwogICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmlu
ZGV4IDM4Y2ZhNzI5ZWJhM2U1Y2FmNTJiODVmMDRkZWVjZWZjNzg3ZTk1YmYuLmZlMGRkMmExYWZj
YTE3NGUzOGVjYTE3NjNmNTkxMDE4OGY2ZGI2YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKQEAgLTc1OSw3ICs3NTksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VQcmVzc0V2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZQogICAg
IGlmIChldmVudC5pc092ZXJXaWRnZXQoKSAmJiBwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dp
ZGdldChldmVudCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGlzPFNWR0RvY3Vt
ZW50PihtX2ZyYW1lLmRvY3VtZW50KCkpICYmIGRvd25jYXN0PFNWR0RvY3VtZW50PigqbV9mcmFt
ZS5kb2N1bWVudCgpKS56b29tQW5kUGFuRW5hYmxlZCgpKSB7CisgICAgaWYgKGlzPFNWR0RvY3Vt
ZW50PigqbV9mcmFtZS5kb2N1bWVudCgpKSAmJiBkb3duY2FzdDxTVkdEb2N1bWVudD4oKm1fZnJh
bWUuZG9jdW1lbnQoKSkuem9vbUFuZFBhbkVuYWJsZWQoKSkgewogICAgICAgICBpZiAoZXZlbnQu
ZXZlbnQoKS5zaGlmdEtleSgpICYmIHNpbmdsZUNsaWNrKSB7CiAgICAgICAgICAgICBtX3N2Z1Bh
biA9IHRydWU7CiAgICAgICAgICAgICBkb3duY2FzdDxTVkdEb2N1bWVudD4oKm1fZnJhbWUuZG9j
dW1lbnQoKSkuc3RhcnRQYW4obV9mcmFtZS52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZXZlbnQu
ZXZlbnQoKS5wb3NpdGlvbigpKSk7CkBAIC0xMjY2LDcgKzEyNjYsNyBAQCBGcmFtZSogRXZlbnRI
YW5kbGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUoTm9kZSogbm9kZSkKICNpZiBFTkFCTEUoQ1VS
U09SX1NVUFBPUlQpCiBzdGF0aWMgYm9vbCBpc1N1Ym1pdEltYWdlKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgcmV0dXJuIG5vZGUgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLmlzSW1hZ2VCdXR0b24oKTsKKyAgICByZXR1cm4gaXM8
SFRNTElucHV0RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5v
ZGUpLmlzSW1hZ2VCdXR0b24oKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBub2RlJ3Mg
ZWRpdGFibGUgYmxvY2sgaXMgbm90IGN1cnJlbnQgZm9jdXNlZCBmb3IgZWRpdGluZwpAQCAtMTc2
MCw3ICsxNzYwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91c2UKICAgICAgICAgLy8gSWYgYSBt
b3VzZSBldmVudCBoYW5kbGVyIGNoYW5nZXMgdGhlIGlucHV0IGVsZW1lbnQgdHlwZSB0byBvbmUg
dGhhdCBoYXMgYSB3aWRnZXQgYXNzb2NpYXRlZCwKICAgICAgICAgLy8gd2UnZCBsaWtlIHRvIEV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50IHRvIHBhc3MgdGhlIGV2ZW50IHRvIHRo
ZSB3aWRnZXQgYW5kIHRodXMgdGhlCiAgICAgICAgIC8vIGV2ZW50IHRhcmdldCBub2RlIGNhbid0
IHN0aWxsIGJlIHRoZSBzaGFkb3cgbm9kZS4KLSAgICAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KG1v
dXNlRXZlbnQudGFyZ2V0Tm9kZSgpKSAmJiBpczxIVE1MSW5wdXRFbGVtZW50Pihkb3duY2FzdDxT
aGFkb3dSb290PigqbW91c2VFdmVudC50YXJnZXROb2RlKCkpLmhvc3RFbGVtZW50KCkpKQorICAg
ICAgICBpZiAoaXM8U2hhZG93Um9vdD4oKm1vdXNlRXZlbnQudGFyZ2V0Tm9kZSgpKSAmJiBpczxI
VE1MSW5wdXRFbGVtZW50PigqZG93bmNhc3Q8U2hhZG93Um9vdD4oKm1vdXNlRXZlbnQudGFyZ2V0
Tm9kZSgpKS5ob3N0RWxlbWVudCgpKSkKICAgICAgICAgICAgIG1vdXNlRXZlbnQgPSBtX2ZyYW1l
LmRvY3VtZW50KCktPnByZXBhcmVNb3VzZUV2ZW50KEhpdFRlc3RSZXF1ZXN0KCksIGRvY3VtZW50
UG9pbnQsIHBsYXRmb3JtTW91c2VFdmVudCk7CiAKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0g
bV9mcmFtZS52aWV3KCk7CkBAIC0yMTQxLDcgKzIxNDEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
ZGlzcGF0Y2hEcmFnRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEVsZW1lbnQm
IGRyYQogCiBzdGF0aWMgYm9vbCB0YXJnZXRJc0ZyYW1lKE5vZGUqIHRhcmdldCwgRnJhbWUqJiBm
cmFtZSkKIHsKLSAgICBpZiAoIXRhcmdldCB8fCAhaXM8SFRNTEZyYW1lRWxlbWVudEJhc2U+KHRh
cmdldCkpCisgICAgaWYgKCFpczxIVE1MRnJhbWVFbGVtZW50QmFzZT4odGFyZ2V0KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZnJhbWUgPSBkb3duY2FzdDxIVE1MRnJhbWVFbGVtZW50
QmFzZT4oKnRhcmdldCkuY29udGVudEZyYW1lKCk7CkBAIC0yMTg2LDcgKzIxODYsOCBAQCBzdGF0
aWMgYm9vbCBoYXNEcm9wWm9uZVR5cGUoRGF0YVRyYW5zZmVyJiBkYXRhVHJhbnNmZXIsIGNvbnN0
IFN0cmluZyYga2V5d29yZCkKIAogc3RhdGljIGJvb2wgZmluZERyb3Bab25lKE5vZGUqIHRhcmdl
dCwgRGF0YVRyYW5zZmVyKiBkYXRhVHJhbnNmZXIpCiB7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9
IGlzPEVsZW1lbnQ+KHRhcmdldCkgPyBkb3duY2FzdDxFbGVtZW50Pih0YXJnZXQpIDogdGFyZ2V0
LT5wYXJlbnRFbGVtZW50KCk7CisgICAgQVNTRVJUKHRhcmdldCk7CisgICAgRWxlbWVudCogZWxl
bWVudCA9IGlzPEVsZW1lbnQ+KCp0YXJnZXQpID8gZG93bmNhc3Q8RWxlbWVudD4odGFyZ2V0KSA6
IHRhcmdldC0+cGFyZW50RWxlbWVudCgpOwogICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0g
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNl
OwogICAgICAgICBTdHJpbmcgZHJvcFpvbmVTdHIgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRl
KHdlYmtpdGRyb3B6b25lQXR0cik7CkBAIC0yMjMzLDcgKzIyMzQsNyBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6dXBkYXRlRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwg
RGF0YVRyYW5zZgogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdUYXJnZXQ7CiAgICAgaWYgKE5vZGUq
IHRhcmdldE5vZGUgPSBtb3VzZUV2ZW50LnRhcmdldE5vZGUoKSkgewogICAgICAgICAvLyBEcmFn
IGV2ZW50cyBzaG91bGQgbmV2ZXIgZ28gdG8gbm9uLWVsZW1lbnQgbm9kZXMgKGZvbGxvd2luZyBJ
RSwgYW5kIHByb3BlciBtb3VzZW92ZXIvb3V0IGRpc3BhdGNoKQotICAgICAgICBpZiAoIWlzPEVs
ZW1lbnQ+KHRhcmdldE5vZGUpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCp0YXJnZXROb2Rl
KSkKICAgICAgICAgICAgIG5ld1RhcmdldCA9IHRhcmdldE5vZGUtPnBhcmVudE9yU2hhZG93SG9z
dEVsZW1lbnQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbmV3VGFyZ2V0ID0gZG93bmNh
c3Q8RWxlbWVudD4odGFyZ2V0Tm9kZSk7CkBAIC0yMzk0LDcgKzIzOTUsNyBAQCB2b2lkIEV2ZW50
SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUoTm9kZSogdGFyZ2V0Tm9kZSwgY29u
c3QgUGxhdGZvcm1NbwogICAgICAgICB0YXJnZXRFbGVtZW50ID0gbV9jYXB0dXJpbmdNb3VzZUV2
ZW50c0VsZW1lbnQuZ2V0KCk7CiAgICAgZWxzZSBpZiAodGFyZ2V0Tm9kZSkgewogICAgICAgICAv
LyBJZiB0aGUgdGFyZ2V0IG5vZGUgaXMgYSBub24tZWxlbWVudCwgZGlzcGF0Y2ggb24gdGhlIHBh
cmVudC4gPHJkYXI6Ly9wcm9ibGVtLzQxOTY2NDY+Ci0gICAgICAgIGlmICghaXM8RWxlbWVudD4o
dGFyZ2V0Tm9kZSkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4oKnRhcmdldE5vZGUpKQogICAg
ICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IHRhcmdldE5vZGUtPnBhcmVudE9yU2hhZG93SG9zdEVs
ZW1lbnQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGRvd25j
YXN0PEVsZW1lbnQ+KHRhcmdldE5vZGUpOwpAQCAtMzUyMyw3ICszNTI0LDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQq
IHVuZGVybHlpbmdFdmUKIHsKICAgICAvLyBQbGF0Zm9ybXMgc2hvdWxkIGRpZmZlcmVudGlhdGUg
cmVhbCBjb21tYW5kcyBsaWtlIHNlbGVjdEFsbCBmcm9tIHRleHQgaW5wdXQgaW4gZGlzZ3Vpc2Ug
KGxpa2UgaW5zZXJ0TmV3bGluZSksCiAgICAgLy8gYW5kIGF2b2lkIGRpc3BhdGNoaW5nIHRleHQg
aW5wdXQgZXZlbnRzIGZyb20ga2V5ZG93biBkZWZhdWx0IGhhbmRsZXJzLgotICAgIEFTU0VSVCgh
dW5kZXJseWluZ0V2ZW50IHx8ICFpczxLZXlib2FyZEV2ZW50Pih1bmRlcmx5aW5nRXZlbnQpIHx8
IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCp1bmRlcmx5aW5nRXZlbnQpLnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5cHJlc3NFdmVudCk7CisgICAgQVNTRVJUKCFpczxLZXlib2FyZEV2ZW50Pih1
bmRlcmx5aW5nRXZlbnQpIHx8IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCp1bmRlcmx5aW5nRXZl
bnQpLnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCk7CiAKICAgICBFdmVudFRh
cmdldCogdGFyZ2V0OwogICAgIGlmICh1bmRlcmx5aW5nRXZlbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZvY3VzQ29udHJvbGxlci5jcHAKaW5kZXggMTNlNTFjMmM3YjMzMjQwNjVlOTMxMjg4ZDEwMjFh
MDEwN2ZkN2EyNy4uY2E0MzIwOGQ2ZGNjNTJhZWY5MTBjMTYxODNiNTcyOTM5NzU0OTlhNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtODIsNyArODIsNyBAQCBD
b250YWluZXJOb2RlKiBGb2N1c05hdmlnYXRpb25TY29wZTo6cm9vdE5vZGUoKSBjb25zdAogRWxl
bWVudCogRm9jdXNOYXZpZ2F0aW9uU2NvcGU6Om93bmVyKCkgY29uc3QKIHsKICAgICBDb250YWlu
ZXJOb2RlKiByb290ID0gcm9vdE5vZGUoKTsKLSAgICBpZiAoaXM8U2hhZG93Um9vdD4ocm9vdCkp
CisgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KCpyb290KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFNoYWRvd1Jvb3Q+KCpyb290KS5ob3N0RWxlbWVudCgpOwogICAgIGlmIChGcmFtZSogZnJhbWUg
PSByb290LT5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBmcmFtZS0+b3duZXJF
bGVtZW50KCk7CkBAIC0yMjgsNyArMjI4LDcgQEAgRWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpm
aW5kRm9jdXNhYmxlRWxlbWVudERlc2NlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnQoRm8KICAg
ICAvLyBUaGUgbm9kZSB3ZSBmb3VuZCBtaWdodCBiZSBhIEhUTUxGcmFtZU93bmVyRWxlbWVudCwg
c28gZGVzY2VuZCBkb3duIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgZWl0aGVyOgogICAgIC8vIDEp
IGEgZm9jdXNhYmxlIG5vZGUsIG9yCiAgICAgLy8gMikgdGhlIGRlZXBlc3QtbmVzdGVkIEhUTUxG
cmFtZU93bmVyRWxlbWVudC4KLSAgICB3aGlsZSAoZWxlbWVudCAmJiBpczxIVE1MRnJhbWVPd25l
ckVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgd2hpbGUgKGlzPEhUTUxGcmFtZU93bmVyRWxlbWVu
dD4oZWxlbWVudCkpIHsKICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50JiBvd25lciA9IGRv
d25jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudD4oKmVsZW1lbnQpOwogICAgICAgICBpZiAoIW93
bmVyLmNvbnRlbnRGcmFtZSgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTAsNyArMzUwLDcg
QEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWIKIAogRWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpm
aW5kRm9jdXNhYmxlRWxlbWVudEFjcm9zc0ZvY3VzU2NvcGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBGb2N1c05hdmlnYXRpb25TY29wZSBzY29wZSwgTm9kZSogY3VycmVudE5vZGUsIEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogewotICAgIEFTU0VSVCghY3VycmVudE5vZGUgfHwgIWlzPEVsZW1l
bnQ+KGN1cnJlbnROb2RlKSB8fCAhaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KCpkb3duY2FzdDxF
bGVtZW50PihjdXJyZW50Tm9kZSksICpldmVudCkpOworICAgIEFTU0VSVCghaXM8RWxlbWVudD4o
Y3VycmVudE5vZGUpIHx8ICFpc05vbkZvY3VzYWJsZVNoYWRvd0hvc3QoKmRvd25jYXN0PEVsZW1l
bnQ+KGN1cnJlbnROb2RlKSwgKmV2ZW50KSk7CiAgICAgRWxlbWVudCogZm91bmQ7CiAgICAgaWYg
KGN1cnJlbnROb2RlICYmIGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQgJiYgaXNG
b2N1c2FibGVTaGFkb3dIb3N0KCpjdXJyZW50Tm9kZSwgKmV2ZW50KSkgewogICAgICAgICBFbGVt
ZW50KiBmb3VuZEluSW5uZXJGb2N1c1Njb3BlID0gZmluZEZvY3VzYWJsZUVsZW1lbnRSZWN1cnNp
dmVseShkaXJlY3Rpb24sIEZvY3VzTmF2aWdhdGlvblNjb3BlOjpmb2N1c05hdmlnYXRpb25TY29w
ZU93bmVkQnlTaGFkb3dIb3N0KGN1cnJlbnROb2RlKSwgMCwgZXZlbnQpOwpAQCAtNDEwLDcgKzQx
MCw3IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEVsZW1lbnRXaXRoRXhhY3RUYWJJ
bmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4CiAgICAgLy8gU2VhcmNoIGlzIGluY2x1c2l2
ZSBvZiBzdGFydAogICAgIHVzaW5nIG5hbWVzcGFjZSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOwog
ICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gZGlyZWN0aW9uID09IEZv
Y3VzRGlyZWN0aW9uRm9yd2FyZCA/IG5leHRJblNjb3BlKG5vZGUpIDogcHJldmlvdXNJblNjb3Bl
KG5vZGUpKSB7Ci0gICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmICgh
aXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEVsZW1l
bnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIGlmIChzaG91
bGRWaXNpdChlbGVtZW50LCAqZXZlbnQpICYmIGFkanVzdGVkVGFiSW5kZXgoZWxlbWVudCwgKmV2
ZW50KSA9PSB0YWJJbmRleCkKQEAgLTQyNSw3ICs0MjUsNyBAQCBzdGF0aWMgRWxlbWVudCogbmV4
dEVsZW1lbnRXaXRoR3JlYXRlclRhYkluZGV4KE5vZGUqIHN0YXJ0LCBpbnQgdGFiSW5kZXgsIEtl
eWJvYQogICAgIGludCB3aW5uaW5nVGFiSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNob3J0
Pjo6bWF4KCkgKyAxOwogICAgIEVsZW1lbnQqIHdpbm5lciA9IG51bGxwdHI7CiAgICAgZm9yIChO
b2RlKiBub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpu
ZXh0SW5TY29wZShub2RlKSkgewotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAg
ICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAgICAg
ICBpZiAoc2hvdWxkVmlzaXQoZWxlbWVudCwgZXZlbnQpICYmIGVsZW1lbnQudGFiSW5kZXgoKSA+
IHRhYkluZGV4ICYmIGVsZW1lbnQudGFiSW5kZXgoKSA8IHdpbm5pbmdUYWJJbmRleCkgewpAQCAt
NDQzLDcgKzQ0Myw3IEBAIHN0YXRpYyBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnRXaXRoTG93ZXJU
YWJJbmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXliCiAgICAgaW50IHdpbm5pbmdU
YWJJbmRleCA9IDA7CiAgICAgRWxlbWVudCogd2lubmVyID0gbnVsbHB0cjsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnBy
ZXZpb3VzSW5TY29wZShub2RlKSkgewotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQor
ICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAg
ICAgICBpbnQgY3VycmVudFRhYkluZGV4ID0gYWRqdXN0ZWRUYWJJbmRleChlbGVtZW50LCBldmVu
dCk7CkBAIC00NjQsNyArNDY0LDcgQEAgRWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpuZXh0Rm9j
dXNhYmxlRWxlbWVudChGb2N1c05hdmlnYXRpb25TY29wZSBzY29wZSwgTm9kZSoKICAgICAgICAg
Ly8gSWYgYSBub2RlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIG5vcm1hbCB0YWJiaW5nIGN5Y2xlLCB0
aGUgbmV4dCBmb2N1c2FibGUgbm9kZSBpcyBkZXRlcm1pbmVkIGJ5IHRyZWUgb3JkZXIKICAgICAg
ICAgaWYgKHRhYkluZGV4IDwgMCkgewogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gbmV4
dEluU2NvcGUoc3RhcnQpOyBub2RlOyBub2RlID0gbmV4dEluU2NvcGUobm9kZSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICAgICAgICAgIGlmICgh
aXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwog
ICAgICAgICAgICAgICAgIGlmIChzaG91bGRWaXNpdChlbGVtZW50LCAqZXZlbnQpICYmIGFkanVz
dGVkVGFiSW5kZXgoZWxlbWVudCwgKmV2ZW50KSA+PSAwKQpAQCAtNTE2LDcgKzUxNiw3IEBAIEVs
ZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVFbGVtZW50KEZvY3VzTmF2
aWdhdGlvblNjb3BlIHNjb3BlLCBOCiAgICAgLy8gSG93ZXZlciwgaWYgYSBub2RlIGlzIGV4Y2x1
ZGVkIGZyb20gdGhlIG5vcm1hbCB0YWJiaW5nIGN5Y2xlLCB0aGUgcHJldmlvdXMgZm9jdXNhYmxl
IG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0cmVlIG9yZGVyCiAgICAgaWYgKHN0YXJ0aW5nVGFiSW5k
ZXggPCAwKSB7CiAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0aW5nTm9kZTsgbm9kZTsg
bm9kZSA9IHByZXZpb3VzSW5TY29wZShub2RlKSkgewotICAgICAgICAgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKKyAgICAgICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25j
YXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgIGlmIChzaG91bGRWaXNpdChlbGVtZW50
LCAqZXZlbnQpICYmIGFkanVzdGVkVGFiSW5kZXgoZWxlbWVudCwgKmV2ZW50KSA+PSAwKQpAQCAt
NTc1LDcgKzU3NSw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUq
IG9sZEZvY3VzZWRGcmFtZSwgRnJhbWUqIG5ld0ZvY3VzZWRGcmFtCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgICAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3JOb2RlID0gcm9v
dC0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50PihzaGFkb3dBbmNlc3Rvck5vZGUpICYmICFpczxIVE1MVGV4
dEFyZWFFbGVtZW50PihzaGFkb3dBbmNlc3Rvck5vZGUpKQorICAgICAgICAgICAgICAgIGlmICgh
aXM8SFRNTElucHV0RWxlbWVudD4oKnNoYWRvd0FuY2VzdG9yTm9kZSkgJiYgIWlzPEhUTUxUZXh0
QXJlYUVsZW1lbnQ+KCpzaGFkb3dBbmNlc3Rvck5vZGUpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTg3Niw3ICs4NzYsNyBAQCBib29s
IEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVjdGlv
biBkaXJlY3Rpb24sIEtleWJvYQogICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gZm9jdXNl
ZERvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgIE5vZGUqIGNvbnRhaW5lciA9IGZvY3Vz
ZWREb2N1bWVudDsKIAotICAgIGlmIChpczxEb2N1bWVudD4oY29udGFpbmVyKSkKKyAgICBpZiAo
aXM8RG9jdW1lbnQ+KCpjb250YWluZXIpKQogICAgICAgICBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRhaW5lcikudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICAv
LyBGaWd1cmUgb3V0IHRoZSBzdGFydGluZyByZWN0LgpAQCAtODg1LDcgKzg4NSw3IEBAIGJvb2wg
Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbiwgS2V5Ym9hCiAgICAgICAgIGlmICghaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2Vk
RWxlbWVudCkpIHsKICAgICAgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVFbmNsb3NpbmdC
b3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNlZEVsZW1l
bnQpOwogICAgICAgICAgICAgc3RhcnRpbmdSZWN0ID0gbm9kZVJlY3RJbkFic29sdXRlQ29vcmRp
bmF0ZXMoZm9jdXNlZEVsZW1lbnQsIHRydWUgLyogaWdub3JlIGJvcmRlciAqLyk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoaXM8SFRNTEFyZWFFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkpIHsKKyAgICAg
ICAgfSBlbHNlIGlmIChpczxIVE1MQXJlYUVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkpIHsKICAg
ICAgICAgICAgIEhUTUxBcmVhRWxlbWVudCYgYXJlYSA9IGRvd25jYXN0PEhUTUxBcmVhRWxlbWVu
dD4oKmZvY3VzZWRFbGVtZW50KTsKICAgICAgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVF
bmNsb3NpbmdCb3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9uKGRpcmVjdGlvbiwgYXJl
YS5pbWFnZUVsZW1lbnQoKSk7CiAgICAgICAgICAgICBzdGFydGluZ1JlY3QgPSB2aXJ0dWFsUmVj
dEZvckFyZWFFbGVtZW50QW5kRGlyZWN0aW9uKCZhcmVhLCBkaXJlY3Rpb24pOwpAQCAtOTAwLDcg
KzkwMCw3IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5
KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hCiAgICAgICAgIGNvbnN1bWVkID0gYWR2
YW5jZUZvY3VzRGlyZWN0aW9uYWxseUluQ29udGFpbmVyKGNvbnRhaW5lciwgc3RhcnRpbmdSZWN0
LCBkaXJlY3Rpb24sIGV2ZW50KTsKICAgICAgICAgc3RhcnRpbmdSZWN0ID0gbm9kZVJlY3RJbkFi
c29sdXRlQ29vcmRpbmF0ZXMoY29udGFpbmVyLCB0cnVlIC8qIGlnbm9yZSBib3JkZXIgKi8pOwog
ICAgICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlRW5jbG9zaW5nQm94T3JQYXJlbnRGcmFtZUZv
ck5vZGVJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGNvbnRhaW5lcik7Ci0gICAgICAgIGlmIChjb250
YWluZXIgJiYgaXM8RG9jdW1lbnQ+KGNvbnRhaW5lcikpCisgICAgICAgIGlmIChpczxEb2N1bWVu
dD4oY29udGFpbmVyKSkKICAgICAgICAgICAgIGRvd25jYXN0PERvY3VtZW50PigqY29udGFpbmVy
KS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICB9IHdoaWxlICgh
Y29uc3VtZWQgJiYgY29udGFpbmVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBhOWNkM2Jh
ODg2Y2U1M2Y0YTJmN2I0Y2YxOGJmY2FiODIzNjk3OWRlLi4yZWZmZTFkMGQ0M2E2MzkyMWY4YWFm
M2Y0MGNhMWJlZjQyODgxM2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMzkwLDEyICszOTAs
MTIgQEAgU3RyaW5nIEZyYW1lOjpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQKICAgICBOb2RlKiBuOwogICAgIGZvciAobiA9
IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKGVsZW1lbnQpOyBuICYmIGxlbmd0aFNlYXJjaGVkIDwg
Y2hhcnNTZWFyY2hlZFRocmVzaG9sZDsgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG4pKSB7
CiAgICAgICAgIC8vIFdlIGhpdCBhbm90aGVyIGZvcm0gZWxlbWVudCBvciB0aGUgc3RhcnQgb2Yg
dGhlIGZvcm0gLSBiYWlsIG91dAotICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50PihuKSB8
fCBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihuKSkKKyAgICAgICAgaWYgKGlzPEhUTUxGb3Jt
RWxlbWVudD4oKm4pIHx8IGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpuKSkKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKHRkVGFnKSAmJiAhc3RhcnRp
bmdUYWJsZUNlbGwpCiAgICAgICAgICAgICBzdGFydGluZ1RhYmxlQ2VsbCA9IGRvd25jYXN0PEhU
TUxUYWJsZUNlbGxFbGVtZW50PihuKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8SFRNTFRhYmxlUm93
RWxlbWVudD4obikgJiYgc3RhcnRpbmdUYWJsZUNlbGwpIHsKKyAgICAgICAgZWxzZSBpZiAoaXM8
SFRNTFRhYmxlUm93RWxlbWVudD4oKm4pICYmIHN0YXJ0aW5nVGFibGVDZWxsKSB7CiAgICAgICAg
ICAgICBTdHJpbmcgcmVzdWx0ID0gc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKHJlZ0V4cCwgc3Rh
cnRpbmdUYWJsZUNlbGwsIHJlc3VsdERpc3RhbmNlKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRJc0luQ2VsbEFib3ZlKQpA
QCAtOTY4LDcgKzk2OCw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMo
ZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAKICAgICAvLyBSZXNw
ZWN0IFNWR3Mgem9vbUFuZFBhbj0iZGlzYWJsZWQiIHByb3BlcnR5IGluIHN0YW5kYWxvbmUgU1ZH
IGRvY3VtZW50cy4KICAgICAvLyBGSVhNRTogSG93IHRvIGhhbmRsZSBjb21wb3VuZCBkb2N1bWVu
dHMgKyB6b29tQW5kUGFuPSJkaXNhYmxlZCI/IE5lZWRzIFNWRyBXRyBjbGFyaWZpY2F0aW9uLgot
ICAgIGlmIChpczxTVkdEb2N1bWVudD4oZG9jdW1lbnQpICYmICFkb3duY2FzdDxTVkdEb2N1bWVu
dD4oKmRvY3VtZW50KS56b29tQW5kUGFuRW5hYmxlZCgpKQorICAgIGlmIChpczxTVkdEb2N1bWVu
dD4oKmRvY3VtZW50KSAmJiAhZG93bmNhc3Q8U1ZHRG9jdW1lbnQ+KCpkb2N1bWVudCkuem9vbUFu
ZFBhbkVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcGFnZVpvb21GYWN0
b3IgIT0gcGFnZVpvb21GYWN0b3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBi
Y2I1MDQ0YjE1Njg0ZTI0Mjc5OWQ3ODllMmFlYzQzY2FjNjUyMWVjLi43OGUyNzVlYzAxZDI3OTcx
NzY1ZDMzNDg1ZDNiOTM5N2FmOWNkMzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBA
IC0zMjIsNyArMzIyLDcgQEAgdm9pZCBGcmFtZVZpZXc6OmluaXQoKQogCiAgICAgLy8gUHJvcGFn
YXRlIHRoZSBtYXJnaW53aWR0aC9oZWlnaHQgYW5kIHNjcm9sbGluZyBtb2RlcyB0byB0aGUgdmll
dy4KICAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBmcmFtZSgpLm93bmVyRWxlbWVudCgpOwot
ICAgIGlmIChvd25lckVsZW1lbnQgJiYgaXM8SFRNTEZyYW1lRWxlbWVudEJhc2U+KG93bmVyRWxl
bWVudCkpIHsKKyAgICBpZiAoaXM8SFRNTEZyYW1lRWxlbWVudEJhc2U+KG93bmVyRWxlbWVudCkp
IHsKICAgICAgICAgSFRNTEZyYW1lRWxlbWVudEJhc2UmIGZyYW1lRWxlbWVudCA9IGRvd25jYXN0
PEhUTUxGcmFtZUVsZW1lbnRCYXNlPigqb3duZXJFbGVtZW50KTsKICAgICAgICAgaWYgKGZyYW1l
RWxlbWVudC5zY3JvbGxpbmdNb2RlKCkgPT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQogICAgICAgICAg
ICAgc2V0Q2FuSGF2ZVNjcm9sbGJhcnMoZmFsc2UpOwpAQCAtMTk2MCw3ICsxOTYwLDcgQEAgYm9v
bCBGcmFtZVZpZXc6OnNjcm9sbFRvQW5jaG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICAvLyBT
ZXR0aW5nIHRvIG51bGwgd2lsbCBjbGVhciB0aGUgY3VycmVudCB0YXJnZXQuCiAgICAgZnJhbWUo
KS5kb2N1bWVudCgpLT5zZXRDU1NUYXJnZXQoYW5jaG9yRWxlbWVudCk7CiAKLSAgICBpZiAoaXM8
U1ZHRG9jdW1lbnQ+KGZyYW1lKCkuZG9jdW1lbnQoKSkpIHsKKyAgICBpZiAoaXM8U1ZHRG9jdW1l
bnQ+KCpmcmFtZSgpLmRvY3VtZW50KCkpKSB7CiAgICAgICAgIGlmIChTVkdTVkdFbGVtZW50KiBz
dmcgPSBkb3duY2FzdDxTVkdEb2N1bWVudD4oKmZyYW1lKCkuZG9jdW1lbnQoKSkucm9vdEVsZW1l
bnQoKSkgewogICAgICAgICAgICAgc3ZnLT5zZXR1cEluaXRpYWxWaWV3KG5hbWUsIGFuY2hvckVs
ZW1lbnQpOwogICAgICAgICAgICAgaWYgKCFhbmNob3JFbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCA1NGNhOTY3OTgwZGI3YzU2MzE0ZDRkYWJjNDFiYWZi
ZjlmYjI0OTljLi44ZDQ3NThhNmU3NDE0M2JmZTQyNWZhYzNhYmVhY2NjMjNhMGRmODYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMjIyLDcgKzIyMiw3IEBAIHZv
aWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW1lKiBmcmFtZSkKIAogICAgIGZv
ciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0g
bm9kZXMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7Ci0gICAg
ICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5v
ZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9
IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2
aWdhdGlvbi5jcHAKaW5kZXggMjhkOWQzZDUwMjdiYzk2ZGI3YTkzYjVkODFjOWEzYmM5ZjJkMWM0
YS4uYjE3Nzk2OGY3YjIxODMyNDdlOGQzY2Q3MTI4OWI2MDNiYWI0N2IxOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTYzLDEwICs2Myw5IEBAIEZvY3Vz
Q2FuZGlkYXRlOjpGb2N1c0NhbmRpZGF0ZShOb2RlKiBub2RlLCBGb2N1c0RpcmVjdGlvbiBkaXJl
Y3Rpb24pCiAgICAgLCBpc09mZnNjcmVlbih0cnVlKQogICAgICwgaXNPZmZzY3JlZW5BZnRlclNj
cm9sbGluZyh0cnVlKQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+aXNF
bGVtZW50Tm9kZSgpKTsKKyAgICBBU1NFUlQoaXM8RWxlbWVudD4obm9kZSkpOwogCi0gICAgaWYg
KGlzPEhUTUxBcmVhRWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoaXM8SFRNTEFyZWFFbGVtZW50
Pigqbm9kZSkpIHsKICAgICAgICAgSFRNTEFyZWFFbGVtZW50JiBhcmVhID0gZG93bmNhc3Q8SFRN
TEFyZWFFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlID0g
YXJlYS5pbWFnZUVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPnJlbmRl
cmVyKCkpCkBAIC0zNjYsNyArMzY1LDcgQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihGcmFtZSog
ZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24o
Tm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgQVNTRVJU
KGNvbnRhaW5lcik7Ci0gICAgaWYgKGlzPERvY3VtZW50Pihjb250YWluZXIpKQorICAgIGlmIChp
czxEb2N1bWVudD4oKmNvbnRhaW5lcikpCiAgICAgICAgIHJldHVybiBzY3JvbGxJbkRpcmVjdGlv
bihkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRhaW5lcikuZnJhbWUoKSwgZGlyZWN0aW9uKTsKIAog
ICAgIGlmICghY29udGFpbmVyLT5yZW5kZXJCb3goKSkKQEAgLTQzNSwxMSArNDM0LDExIEBAIE5v
ZGUqIHNjcm9sbGFibGVFbmNsb3NpbmdCb3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9u
KEZvY3VzRGlyZWN0aW9uIGRpcmVjCiAgICAgQVNTRVJUKG5vZGUpOwogICAgIE5vZGUqIHBhcmVu
dCA9IG5vZGU7CiAgICAgZG8gewotICAgICAgICBpZiAoaXM8RG9jdW1lbnQ+KHBhcmVudCkpCisg
ICAgICAgIGlmIChpczxEb2N1bWVudD4oKnBhcmVudCkpCiAgICAgICAgICAgICBwYXJlbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4oKnBhcmVudCkuZG9jdW1lbnQoKS5mcmFtZSgpLT5vd25lckVsZW1l
bnQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRO
b2RlKCk7Ci0gICAgfSB3aGlsZSAocGFyZW50ICYmICFjYW5TY3JvbGxJbkRpcmVjdGlvbihwYXJl
bnQsIGRpcmVjdGlvbikgJiYgIWlzPERvY3VtZW50PihwYXJlbnQpKTsKKyAgICB9IHdoaWxlIChw
YXJlbnQgJiYgIWNhblNjcm9sbEluRGlyZWN0aW9uKHBhcmVudCwgZGlyZWN0aW9uKSAmJiAhaXM8
RG9jdW1lbnQ+KCpwYXJlbnQpKTsKIAogICAgIHJldHVybiBwYXJlbnQ7CiB9CkBAIC00NDgsMTAg
KzQ0NywxMCBAQCBib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKGNvbnN0IE5vZGUqIGNvbnRhaW5l
ciwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIEFTU0VSVChjb250YWluZXIpOwog
Ci0gICAgaWYgKGlzPEhUTUxTZWxlY3RFbGVtZW50Pihjb250YWluZXIpKQorICAgIGlmIChpczxI
VE1MU2VsZWN0RWxlbWVudD4oKmNvbnRhaW5lcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChpczxEb2N1bWVudD4oY29udGFpbmVyKSkKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KCpj
b250YWluZXIpKQogICAgICAgICByZXR1cm4gY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250YWluZXIpLmZyYW1lKCksIGRpcmVjdGlvbik7CiAKICAgICBpZiAoIWlz
U2Nyb2xsYWJsZU5vZGUoY29udGFpbmVyKSkKQEAgLTUyMCw3ICs1MTksNyBAQCBMYXlvdXRSZWN0
IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKE5vZGUqIG5vZGUsIGJvb2wgaWdub3JlQm9y
ZGVyKQogewogICAgIEFTU0VSVChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgIW5vZGUtPmRv
Y3VtZW50KCkudmlldygpLT5uZWVkc0xheW91dCgpKTsKIAotICAgIGlmIChpczxEb2N1bWVudD4o
bm9kZSkpCisgICAgaWYgKGlzPERvY3VtZW50Pigqbm9kZSkpCiAgICAgICAgIHJldHVybiBmcmFt
ZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoZG93bmNhc3Q8RG9jdW1lbnQ+KCpub2RlKS5mcmFt
ZSgpKTsKICAgICBMYXlvdXRSZWN0IHJlY3QgPSByZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKG5v
ZGUtPmRvY3VtZW50KCkuZnJhbWUoKSwgbm9kZS0+Ym91bmRpbmdCb3goKSk7CiAKQEAgLTYwNyw3
ICs2MDYsNyBAQCBib29sIGFyZUVsZW1lbnRzT25TYW1lTGluZShjb25zdCBGb2N1c0NhbmRpZGF0
ZSYgZmlyc3RDYW5kaWRhdGUsIGNvbnN0IEZvY3VzQ2FuZAogICAgIGlmICghZmlyc3RDYW5kaWRh
dGUucmVjdC5pbnRlcnNlY3RzKHNlY29uZENhbmRpZGF0ZS5yZWN0KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKGlzPEhUTUxBcmVhRWxlbWVudD4oZmlyc3RDYW5kaWRhdGUuZm9j
dXNhYmxlTm9kZSkgfHwgaXM8SFRNTEFyZWFFbGVtZW50PihzZWNvbmRDYW5kaWRhdGUuZm9jdXNh
YmxlTm9kZSkpCisgICAgaWYgKGlzPEhUTUxBcmVhRWxlbWVudD4oKmZpcnN0Q2FuZGlkYXRlLmZv
Y3VzYWJsZU5vZGUpIHx8IGlzPEhUTUxBcmVhRWxlbWVudD4oKnNlY29uZENhbmRpZGF0ZS5mb2N1
c2FibGVOb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFmaXJzdENhbmRp
ZGF0ZS52aXNpYmxlTm9kZS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSB8fCAhc2Vjb25k
Q2FuZGlkYXRlLnZpc2libGVOb2RlLT5yZW5kZXJlcigpLT5pc1JlbmRlcklubGluZSgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCA5Yzg5NDQzZGYwZWQ5MTUzYmEwODNlYTdk
ODE5YmUxZDBjY2EyNTdmLi5kZDk0M2ViNDQwZDQxNjI4YzY1NTdlMjkzMzFiNDJiNWEzMjUzMTE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtMzUxLDcgKzM1MSw3IEBAIHN0
YXRpYyBOb2RlKiBhbmNlc3RvclJlc3BvbmRpbmdUb0NsaWNrRXZlbnRzKGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIGhpdFRlc3RSZXN1bHQsCiAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW50ZXJlc3Rl
ZCBhYm91dCB0aGUgZnJhbWUsIHVzZSBpdC4KICAgICAgICAgICAgIGlmIChub2RlQm91bmRzKSB7
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGNoZWNrIHRvIHNlZSB3aGV0aGVyIHRoaXMg
bm9kZSBpcyBhbiBhcmVhIGVsZW1lbnQuICBUaGUgb25seSB3YXkgdGhpcyBjYW4gaGFwcGVuIGlz
IGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNoZWNrLgotICAgICAgICAgICAgICAgIGlmIChub2RlID09
IGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSAhPSBoaXRUZXN0UmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpICYmIGlzPEhUTUxBcmVhRWxlbWVudD4obm9kZSkpCisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUgPT0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBub2RlICE9IGhp
dFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgJiYgaXM8SFRNTEFyZWFFbGVtZW50Pigq
bm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICpub2RlQm91bmRzID0gc25hcHBlZEludFJlY3Qo
ZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50Pigqbm9kZSkuY29tcHV0ZVJlY3QoaGl0VGVzdFJlc3Vs
dC5pbm5lck5vblNoYXJlZE5vZGUoKS0+cmVuZGVyZXIoKSkpOwogICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUgJiYgbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICAgICAgKm5v
ZGVCb3VuZHMgPSBub2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXgg
NWZkM2JiNTQwZjAzNWY2NzI2MTUxMTIxNDg4ODNjNDJmMTRjMGFjNi4uY2M2YTRiNTQ1OTg0M2Rm
MDc2NGJiNGEwOWQ5MWU5ODg0ZTJkOTRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIEZvcm1EYXRhOjph
cHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNvbnN0IFRl
eHRFbmNvZAogICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBibG9iLCB0aGVu
IHdlIGFsc28gbmVlZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQogICAgICAgICAgICAgaWYgKHZh
bHVlLmJsb2IoKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAgICAg
ICAgIGlmIChpczxGaWxlPih2YWx1ZS5ibG9iKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
PEZpbGU+KCp2YWx1ZS5ibG9iKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIEZpbGUmIGZpbGUg
PSBkb3duY2FzdDxGaWxlPigqdmFsdWUuYmxvYigpKTsKICAgICAgICAgICAgICAgICAgICAgbmFt
ZSA9IGZpbGUubmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0
aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFj
ZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lkIEZvcm1E
YXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNv
bnN0IFRleHRFbmNvZAogICAgICAgICAgICAgLy8gQXBwZW5kIGJvZHkKICAgICAgICAgICAgIGFw
cGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7CiAgICAgICAgICAgICBpZiAo
dmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPEZpbGU+KHZhbHVlLmJsb2Io
KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8RmlsZT4oKnZhbHVlLmJsb2IoKSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgRmlsZSYgZmlsZSA9IGRvd25jYXN0PEZpbGU+KCp2YWx1ZS5ibG9i
KCkpOwogICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgYWRkIHRoZSBmaWxlIGlmIHRoZSBw
YXRoIGlzIGVtcHR5LgogICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGUucGF0aCgpLmlzRW1w
dHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA3
MjFiZDU4YjBlZDY4NmVmMDRmZjI3MjYxMTFkOGEzZDI4M2ZiOTQ5Li5mZjg0ZjY3MTI0MjA1MTZk
NWIxZGY4NmU5ZDlmY2IzMTMxNWM3MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCkBAIC0xMzEsMTQgKzEzMSwxNCBAQCB2b2lkIEhpdFRlc3RSZXN1bHQ6
OnNldFRvTm9uU2hhZG93QW5jZXN0b3IoKQogCiB2b2lkIEhpdFRlc3RSZXN1bHQ6OnNldElubmVy
Tm9kZShOb2RlKiBub2RlKQogewotICAgIGlmIChub2RlICYmIGlzPFBzZXVkb0VsZW1lbnQ+KG5v
ZGUpKQorICAgIGlmIChpczxQc2V1ZG9FbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9IGRv
d25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpub2RlKS5ob3N0RWxlbWVudCgpOwogICAgIG1faW5uZXJO
b2RlID0gbm9kZTsKIH0KICAgICAKIHZvaWQgSGl0VGVzdFJlc3VsdDo6c2V0SW5uZXJOb25TaGFy
ZWROb2RlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUgJiYgaXM8UHNldWRvRWxlbWVudD4o
bm9kZSkpCisgICAgaWYgKGlzPFBzZXVkb0VsZW1lbnQ+KG5vZGUpKQogICAgICAgICBub2RlID0g
ZG93bmNhc3Q8UHNldWRvRWxlbWVudD4oKm5vZGUpLmhvc3RFbGVtZW50KCk7CiAgICAgbV9pbm5l
ck5vblNoYXJlZE5vZGUgPSBub2RlOwogfQpAQCAtMjIzLDcgKzIyMyw3IEBAIFN0cmluZyBIaXRU
ZXN0UmVzdWx0Ojp0aXRsZShUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiAgICAgLy8gRmluZCB0
aGUgdGl0bGUgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIERPTSBub2RlLgogICAgIC8vIEZvciA8
YXJlYT4gdGFncyBpbiBpbWFnZSBtYXBzLCB3YWxrIHRoZSB0cmVlIGZvciB0aGUgPGFyZWE+LCBu
b3QgdGhlIDxpbWc+IHVzaW5nIGl0LgogICAgIGZvciAoTm9kZSogdGl0bGVOb2RlID0gbV9pbm5l
ck5vZGUuZ2V0KCk7IHRpdGxlTm9kZTsgdGl0bGVOb2RlID0gdGl0bGVOb2RlLT5wYXJlbnROb2Rl
KCkpIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KHRpdGxlTm9kZSkpIHsKKyAgICAgICAgaWYg
KGlzPEVsZW1lbnQ+KCp0aXRsZU5vZGUpKSB7CiAgICAgICAgICAgICBFbGVtZW50JiB0aXRsZUVs
ZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqdGl0bGVOb2RlKTsKICAgICAgICAgICAgIFN0cmlu
ZyB0aXRsZSA9IHRpdGxlRWxlbWVudC50aXRsZSgpOwogICAgICAgICAgICAgaWYgKCF0aXRsZS5p
c0VtcHR5KCkpIHsKQEAgLTIzOSw3ICsyMzksNyBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0
bGUoVGV4dERpcmVjdGlvbiYgZGlyKSBjb25zdAogU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OmlubmVy
VGV4dElmVHJ1bmNhdGVkKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKIHsKICAgICBmb3IgKE5v
ZGUqIHRydW5jYXRlZE5vZGUgPSBtX2lubmVyTm9kZS5nZXQoKTsgdHJ1bmNhdGVkTm9kZTsgdHJ1
bmNhdGVkTm9kZSA9IHRydW5jYXRlZE5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAo
IWlzPEVsZW1lbnQ+KHRydW5jYXRlZE5vZGUpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCp0
cnVuY2F0ZWROb2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChhdXRv
IHJlbmRlcmVyID0gZG93bmNhc3Q8RWxlbWVudD4oKnRydW5jYXRlZE5vZGUpLnJlbmRlcmVyKCkp
IHsKQEAgLTM2Myw3ICszNjMsNyBAQCBib29sIEhpdFRlc3RSZXN1bHQ6Om1lZGlhU3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbHQobWVkaWFFbGVtZW50KCkpOwotICAgIHJldHVybiAobWVkaWFFbHQgJiYg
aXM8SFRNTFZpZGVvRWxlbWVudD4obWVkaWFFbHQpICYmIG1lZGlhRWx0LT5zdXBwb3J0c0Z1bGxz
Y3JlZW4oKSk7CisgICAgcmV0dXJuIGlzPEhUTUxWaWRlb0VsZW1lbnQ+KG1lZGlhRWx0KSAmJiBt
ZWRpYUVsdC0+c3VwcG9ydHNGdWxsc2NyZWVuKCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgpAQCAtNDI1LDcgKzQyNSw3IEBAIHZvaWQgSGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxs
c2NyZWVuRm9yVmlkZW8oKSBjb25zdAogewogI2lmIEVOQUJMRShWSURFTykKICAgICBIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQodGhpcy0+bWVkaWFFbGVtZW50KCkpOwotICAgIGlmICht
ZWRpYUVsZW1lbnQgJiYgaXM8SFRNTFZpZGVvRWxlbWVudD4obWVkaWFFbGVtZW50KSkgeworICAg
IGlmIChpczxIVE1MVmlkZW9FbGVtZW50PihtZWRpYUVsZW1lbnQpKSB7CiAgICAgICAgIEhUTUxW
aWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCA9IGRvd25jYXN0PEhUTUxWaWRlb0VsZW1lbnQ+KCpt
ZWRpYUVsZW1lbnQpOwogICAgICAgICBpZiAoIXZpZGVvRWxlbWVudC5pc0Z1bGxzY3JlZW4oKSAm
JiBtZWRpYUVsZW1lbnQtPnN1cHBvcnRzRnVsbHNjcmVlbigpKSB7CiAgICAgICAgICAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSk7CkBAIC00ODMsNyArNDgzLDcgQEAgYm9vbCBIaXRUZXN0UmVzdWx0OjptZWRpYUlzVmlkZW8o
KSBjb25zdAogewogI2lmIEVOQUJMRShWSURFTykKICAgICBpZiAoSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbHQgPSBtZWRpYUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGlzPEhUTUxWaWRlb0Vs
ZW1lbnQ+KG1lZGlhRWx0KTsKKyAgICAgICAgcmV0dXJuIGlzPEhUTUxWaWRlb0VsZW1lbnQ+KCpt
ZWRpYUVsdCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC02NzYsNyArNjc2LDcg
QEAgRWxlbWVudCogSGl0VGVzdFJlc3VsdDo6aW5uZXJFbGVtZW50KCkgY29uc3QKICAgICBOb2Rl
KiBub2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEVsZW1l
bnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAg
IHJldHVybiBub2RlLT5wYXJlbnRFbGVtZW50KCk7CiB9CkBAIC02ODYsNyArNjg2LDcgQEAgRWxl
bWVudCogSGl0VGVzdFJlc3VsdDo6aW5uZXJOb25TaGFyZWRFbGVtZW50KCkgY29uc3QKICAgICBO
b2RlKiBub2RlID0gbV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCk7CiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCisgICAg
aWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+
KG5vZGUpOwogICAgIHJldHVybiBub2RlLT5wYXJlbnRFbGVtZW50KCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IDNmYjg0ZDgyMWZjMzYw
NmE4NDM4MmMyY2UyMzM2ZjkzNjlmNGRhNjQuLmM3Mzc3MTQwNzcyZTc4NGNlZTkzZGJjMzQ0ZTFl
MWFlNmE1YWNiYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuY3BwCkBAIC0zNTY3LDcgKzM1NjcsNyBAQCBpbmxpbmUgc3RhdGljIGJvb2wgcmVzaXplVGV4
dFBlcm1pdHRlZChSZW5kZXJPYmplY3QqIHJlbmRlcikKICAgICBhdXRvIHJlbmRlcmVyID0gcmVu
ZGVyLT5wYXJlbnQoKTsKICAgICB3aGlsZSAocmVuZGVyZXIpIHsKICAgICAgICAgLy8gR2V0IHRo
ZSBmaXJzdCBub24tc2hhZG93IEhUTUxFbGVtZW50IGFuZCBzZWUgaWYgaXQncyBhbiBpbnB1dC4K
LSAgICAgICAgaWYgKHJlbmRlcmVyLT5lbGVtZW50KCkgJiYgaXM8SFRNTEVsZW1lbnQ+KHJlbmRl
cmVyLT5lbGVtZW50KCkpICYmICFyZW5kZXJlci0+ZWxlbWVudCgpLT5pc0luU2hhZG93VHJlZSgp
KSB7CisgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4ocmVuZGVyZXItPmVsZW1lbnQoKSkgJiYg
IXJlbmRlcmVyLT5lbGVtZW50KCktPmlzSW5TaGFkb3dUcmVlKCkpIHsKICAgICAgICAgICAgIGNv
bnN0IEhUTUxFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpyZW5kZXJl
ci0+ZWxlbWVudCgpKTsKICAgICAgICAgICAgIHJldHVybiAhaXM8SFRNTElucHV0RWxlbWVudD4o
ZWxlbWVudCkgJiYgIWlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQpOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDEzYTFhNGQ3N2FmN2Vl
NWU3OGUwOTkyOWEzZjc5YTQzMmJjZWY5ZmEuLmUxZGU0MjA3NmYxM2MzNGI3ODg2MDk0NWU2YTgy
MWZjMWE1ZjhjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0y
NDc4LDcgKzI0NzgsNyBAQCBib29sIFJlbmRlckJveDo6c2l6ZXNMb2dpY2FsV2lkdGhUb0ZpdENv
bnRlbnQoU2l6ZVR5cGUgd2lkdGhUeXBlKSBjb25zdAogICAgIC8vIHN0cmV0Y2hpbmcgY29sdW1u
IGZsZXhib3guCiAgICAgLy8gRklYTUU6IFRoaW5rIGFib3V0IGJsb2NrLWZsb3cgaGVyZS4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY0NzMKLSAgICBp
ZiAobG9naWNhbFdpZHRoLnR5cGUoKSA9PSBBdXRvICYmICFpc1N0cmV0Y2hpbmdDb2x1bW5GbGV4
SXRlbSgqdGhpcykgJiYgZWxlbWVudCgpICYmIChpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50
KCkpIHx8IGlzPEhUTUxTZWxlY3RFbGVtZW50PihlbGVtZW50KCkpIHx8IGlzPEhUTUxCdXR0b25F
bGVtZW50PihlbGVtZW50KCkpIHx8IGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVsZW1lbnQoKSkg
fHwgaXM8SFRNTExlZ2VuZEVsZW1lbnQ+KGVsZW1lbnQoKSkpKQorICAgIGlmIChsb2dpY2FsV2lk
dGgudHlwZSgpID09IEF1dG8gJiYgIWlzU3RyZXRjaGluZ0NvbHVtbkZsZXhJdGVtKCp0aGlzKSAm
JiBlbGVtZW50KCkgJiYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KCkpIHx8IGlzPEhU
TUxTZWxlY3RFbGVtZW50PigqZWxlbWVudCgpKSB8fCBpczxIVE1MQnV0dG9uRWxlbWVudD4oKmVs
ZW1lbnQoKSkgfHwgaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKmVsZW1lbnQoKSkgfHwgaXM8SFRN
TExlZ2VuZEVsZW1lbnQ+KCplbGVtZW50KCkpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBjb250YWluaW5nQmxvY2soKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b3VudGVyLmNwcAppbmRleCBlMzZhYWVjZjA3MmJhYmExYmY3OTE5MmZiMWY3ZDk0MDk4Y2Y4ODIx
Li5hZTAyMGRlOWNjNTdjNWI2ZmVkZDlhNmZkZDdiMzM3MGMzYWU2Y2ZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgc3Rh
dGljIGJvb2wgcGxhbkNvdW50ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaWRlbnRpZmllciwKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoaXM8SFRNTE9MaXN0RWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAg
ICAgIGlmIChpczxIVE1MT0xpc3RFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KCplbGVtZW50KS5zdGFydCgpOwog
ICAgICAgICAgICAgICAgIGlzUmVzZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNN
YXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIu
Y3BwCmluZGV4IGM5NTY2ZGY3ZTkxNjRlNDMyZWJiYTg4MDg5OTY5ZWFkMjczODg5N2EuLmFlNTg4
MGE1YjUyYjU4NDk1MGYwN2E3NDk3ZmJmNzA1YWQ5ZmY2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKQEAgLTE0NCw5ICsxNDQsOSBA
QCBib29sIFJlbmRlckRldGFpbHNNYXJrZXI6OmlzT3BlbigpIGNvbnN0CiAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gcGFyZW50KCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRl
cmVyLT5wYXJlbnQoKSkgewogICAgICAgICBpZiAoIXJlbmRlcmVyLT5ub2RlKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGlzPEhUTUxEZXRhaWxzRWxlbWVudD4ocmVuZGVy
ZXItPm5vZGUoKSkpCisgICAgICAgIGlmIChpczxIVE1MRGV0YWlsc0VsZW1lbnQ+KCpyZW5kZXJl
ci0+bm9kZSgpKSkKICAgICAgICAgICAgIHJldHVybiAhZG93bmNhc3Q8SFRNTERldGFpbHNFbGVt
ZW50PigqcmVuZGVyZXItPm5vZGUoKSkuZ2V0QXR0cmlidXRlKG9wZW5BdHRyKS5pc051bGwoKTsK
LSAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpKQorICAg
ICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKnJlbmRlcmVyLT5ub2RlKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCBiNDY0Y2M3MzMwNGMxNjhjMzU5ODEx
NDNiYjJlOGRhNGNiNmY5NjUwLi4zYmI3MjQzMjUyMzA2MzJjNWY0ZTI1NDE1MjU0YmFmMzVkZjFl
MzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5jcHAKQEAgLTYwMCw3ICs2MDAsNyBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojpo
YW5kbGVVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvckV2ZW50KEV2ZW50KiBldmVudCkKICAgICBp
ZiAoIXNob3VsZFVuYXZhaWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKGRvY3VtZW50KCksIG1f
cGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KCpldmVudCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2Fz
dDxNb3VzZUV2ZW50PigqZXZlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKaW5kZXggYTVjMmIwNmUwNzJiNDUwM2NhM2Fj
NGZiN2FiMTQ4OGYzYTcxNDQ5MS4uNGIzY2I4YjE2ZmU0NTBmZTdjNmFhZmY3ZTVjNjg2ZmMxZGJh
NTJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxv
YWRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuY3BwCkBAIC0yNTUsNyArMjU1LDcgQEAgSFRNTElucHV0RWxlbWVudCogUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2w6OnVwbG9hZEJ1dHRvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGlucHV0RWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAgICAgTm9kZSogYnV0dG9uTm9kZSA9IGlu
cHV0RWxlbWVudCgpLnNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpOwotICAgIHJldHVybiBidXR0
b25Ob2RlICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGJ1dHRvbk5vZGUpID8gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oYnV0dG9uTm9kZSkgOiBudWxscHRyOworICAgIHJldHVybiBpczxIVE1M
SW5wdXRFbGVtZW50PihidXR0b25Ob2RlKSA/IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGJ1
dHRvbk5vZGUpIDogbnVsbHB0cjsKIH0KIAogU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRDb250cm9s
OjpidXR0b25WYWx1ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApp
bmRleCA3ZmMzMzMwYWJmMzVmMDY2ZDYzNGY2Y2ZhOWVkZTM4MGMyMWM1NzRhLi42YjBiZGFlZGY0
MDE5MGYxMzQzMjVmYmYyZDc4NGQ4NjlkMWEwODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5jcHAKQEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpw
YWludEFyZWFFbGVtZW50Rm9jdXNSaW5nKFBhaW50SW5mbyYgcGFpbnRJbmZvKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50KCkuZm9jdXNl
ZEVsZW1lbnQoKTsKLSAgICBpZiAoIWZvY3VzZWRFbGVtZW50IHx8ICFpczxIVE1MQXJlYUVsZW1l
bnQ+KGZvY3VzZWRFbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxBcmVhRWxlbWVudD4oZm9jdXNl
ZEVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBIVE1MQXJlYUVsZW1lbnQmIGFyZWFF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpOwpAQCAt
NTYwLDcgKzU2MCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYgKCFpbWcgfHwg
aW1nLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2VFbGVtZW50ID0gKGVsZW1lbnQoKSAmJiBpczxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50
KCkpKSA/IGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgOiBudWxscHRyOwor
ICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IGlzPEhUTUxJbWFnZUVsZW1lbnQ+
KGVsZW1lbnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVs
bHB0cjsKICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGltYWdlRWxl
bWVudCA/IGltYWdlRWxlbWVudC0+Y29tcG9zaXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJj
ZU92ZXI7CiAgICAgSW1hZ2UqIGltYWdlID0gaW1hZ2VSZXNvdXJjZSgpLmltYWdlKCkuZ2V0KCk7
CiAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5
KGNvbnRleHQsIGltYWdlLCBpbWFnZSwgTGF5b3V0U2l6ZShyZWN0LnNpemUoKSkpOwpAQCAtNjIy
LDcgKzYyMiw3IEBAIExheW91dFVuaXQgUmVuZGVySW1hZ2U6Om1pbmltdW1SZXBsYWNlZEhlaWdo
dCgpIGNvbnN0CiAKIEhUTUxNYXBFbGVtZW50KiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKSBjb25z
dAogewotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlID0gZWxlbWVudCgpICYmIGlzPEhUTUxJ
bWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVt
ZW50KCkpIDogbnVsbHB0cjsKKyAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9IGlzPEhUTUxJ
bWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVt
ZW50KCkpIDogbnVsbHB0cjsKICAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+dHJlZVNjb3BlKCku
Z2V0SW1hZ2VNYXAoaW1hZ2UtPmZhc3RHZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikpIDogbnVsbHB0
cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDlk
NTkzM2FmMmM2MzJjYjI5ZmQxZjA0ZGQ4NTg3MDBhYzFjZTVlOS4uYTU3ZGM1OWRmOThlNmVjYjg4
NmMyNjdjOTMxNzVhZjZkOTljYzIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCkBAIC0yMzgwLDcgKzIzODAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxS
ZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFNjcm9sbEFsaWdubQog
ICAgICAgICBpZiAob3duZXJFbGVtZW50ICYmIG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKSkgewog
ICAgICAgICAgICAgSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVudEJhc2UgPSBudWxs
cHRyOwogCi0gICAgICAgICAgICBpZiAoaXM8SFRNTEZyYW1lRWxlbWVudEJhc2U+KG93bmVyRWxl
bWVudCkpCisgICAgICAgICAgICBpZiAoaXM8SFRNTEZyYW1lRWxlbWVudEJhc2U+KCpvd25lckVs
ZW1lbnQpKQogICAgICAgICAgICAgICAgIGZyYW1lRWxlbWVudEJhc2UgPSBkb3duY2FzdDxIVE1M
RnJhbWVFbGVtZW50QmFzZT4ob3duZXJFbGVtZW50KTsKIAogICAgICAgICAgICAgaWYgKGZyYW1l
RWxlbWVudEFuZFZpZXdQZXJtaXRTY3JvbGwoZnJhbWVFbGVtZW50QmFzZSwgJmZyYW1lVmlldykp
IHsKQEAgLTI1NzQsNyArMjU3NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2ZmCiAKICAgICBF
UmVzaXplIHJlc2l6ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnJlc2l6ZSgpOwogICAgIGlmIChyZXNp
emUgIT0gUkVTSVpFX1ZFUlRJQ0FMICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgewotICAgICAgICBp
ZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGlz
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgLy8gTWFr
ZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KICAgICAgICAgICAgIHN0eWxl
ZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCBy
ZW5kZXJlci0+bWFyZ2luTGVmdCgpIC8gem9vbUZhY3RvciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCk7CiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZh
Y3RvciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CkBAIC0yNTg1LDcgKzI1ODUsNyBAQCB2
b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNv
bnN0IExheW91dFNpemUmIG9sZE9mZgogICAgIH0KIAogICAgIGlmIChyZXNpemUgIT0gUkVTSVpF
X0hPUklaT05UQUwgJiYgZGlmZmVyZW5jZS5oZWlnaHQoKSkgewotICAgICAgICBpZiAoaXM8SFRN
TEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNp
dCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KICAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5t
YXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAg
ICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CkBAIC0zMDg5LDcgKzMwODksNyBAQCBib29sIFJlbmRl
ckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5kIHN1
cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KLSAgICBpZiAoIWVuY2xvc2luZ0VsZW1lbnQoKSB8
fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSB8fCAhaXM8SFRNTEVsZW1lbnQ+KGVu
Y2xvc2luZ0VsZW1lbnQoKSkpCisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxl
bWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJv
eCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAppbmRleCAyMTNjYzkwZmNlYWI2OWFiYjllM2M1NWY3ZTQ1MDYxZGQyMDYxOTU1Li5lM2NjYmM3
ZTQ1Njk1NGQzMmFjZDFmOWM5YmM3ZThiZWE5NTQ4ZDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMTY4MSw3ICsxNjgxLDcgQEAg
c3RhdGljIGJvb2wgaXNSZXN0YXJ0ZWRQbHVnaW4oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpOwotICAgIGlmICghZWxlbWVudCB8fCAhaXM8SFRNTFBs
dWdJbkVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KGVs
ZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TFBsdWdJbkVsZW1lbnQ+KCplbGVtZW50KS5pc1Jlc3RhcnRlZFBsdWdpbigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IGQyYWQ3NDNkN2U4NWYxMzBk
ZjAzYWVjYWZiMWVjYTU2MzRjYmI4MWEuLjliMjBlMDRjZjZmMjNmNWJiMDMyNjk2NDgyMDc0MTMx
YzgwYWMxYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
QEAgLTExNiw5ICsxMTYsOSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50
KCkKICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOwogICAg
ICAgICAgICAgU3RyaW5nIHRleHQ7CiAgICAgICAgICAgICBGb250IGl0ZW1Gb250ID0gc3R5bGUo
KS5mb250KCk7Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQp
KQorICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkpCiAgICAg
ICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCku
dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwotICAgICAgICAgICAgZWxzZSBpZiAo
aXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgICAgIHRl
eHQgPSBkb3duY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50PigqZWxlbWVudCkuZ3JvdXBMYWJlbFRl
eHQoKTsKICAgICAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZCA9IGl0ZW1Gb250LmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2VpZ2h0
KCkpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6YWRkRm9jdXNSaW5n
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdEVsZW1lbnQoKS5saXN0
SXRlbXMoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBI
VE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKLSAgICAgICAgaWYgKGlzPEhUTUxP
cHRpb25FbGVtZW50PihlbGVtZW50KSAmJiAhZWxlbWVudC0+aXNEaXNhYmxlZEZvcm1Db250cm9s
KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgIWVs
ZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKSB7CiAgICAgICAgICAgICBzZWxlY3RFbGVt
ZW50KCkuc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoaSk7CiAgICAgICAgICAgICByZWN0cy5h
cHBlbmQoc25hcHBlZEludFJlY3QoaXRlbUJvdW5kaW5nQm94UmVjdChhZGRpdGlvbmFsT2Zmc2V0
LCBpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzg1LDEwICszODUsMTAgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGl0ZW1UZXh0
OwotICAgIGJvb2wgaXNPcHRpb25FbGVtZW50ID0gaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGxpc3RJ
dGVtRWxlbWVudCk7CisgICAgYm9vbCBpc09wdGlvbkVsZW1lbnQgPSBpczxIVE1MT3B0aW9uRWxl
bWVudD4oKmxpc3RJdGVtRWxlbWVudCk7CiAgICAgaWYgKGlzT3B0aW9uRWxlbWVudCkKICAgICAg
ICAgaXRlbVRleHQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVu
dCkudGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwotICAgIGVsc2UgaWYgKGlzPEhU
TUxPcHRHcm91cEVsZW1lbnQ+KGxpc3RJdGVtRWxlbWVudCkpCisgICAgZWxzZSBpZiAoaXM8SFRN
TE9wdEdyb3VwRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVudCkpCiAgICAgICAgIGl0ZW1UZXh0ID0g
ZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVudCkuZ3JvdXBMYWJl
bFRleHQoKTsKICAgICBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgaXRlbVRleHQsICcgJyk7
CiAKQEAgLTQwOSw3ICs0MDksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVn
cm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogICAgIExheW91
dFJlY3QgciA9IGl0ZW1Cb3VuZGluZ0JveFJlY3QocGFpbnRPZmZzZXQsIGxpc3RJbmRleCk7CiAg
ICAgci5tb3ZlKGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQodGV4dFJ1biwgaXRlbVN0eWxlLCBpdGVt
Rm9udCwgcikpOwogCi0gICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KGxpc3RJdGVtRWxl
bWVudCkpIHsKKyAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVu
dCkpIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRp
b24oKTsKICAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7CiAgICAgICAgIGl0
ZW1Gb250ID0gRm9udChkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRT
cGFjaW5nKCkpOwpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJ
dGVtQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAg
ICAgSFRNTEVsZW1lbnQqIGxpc3RJdGVtRWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwog
CiAgICAgQ29sb3IgYmFja0NvbG9yOwotICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4obGlz
dEl0ZW1FbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmxpc3RJdGVtRWxl
bWVudCkuc2VsZWN0ZWQoKSkgeworICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmxpc3RJ
dGVtRWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1l
bnQpLnNlbGVjdGVkKCkpIHsKICAgICAgICAgaWYgKGZyYW1lKCkuc2VsZWN0aW9uKCkuaXNGb2N1
c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpID09ICZzZWxlY3RF
bGVtZW50KCkpCiAgICAgICAgICAgICBiYWNrQ29sb3IgPSB0aGVtZSgpLmFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKICAgICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCmluZGV4IGY0YWY3MGVjNDA4NzI0MWE1NGMwOTFm
M2RlY2JjZGJhYzg3Y2UyMmYuLjY1MDFmZTJhNjI2NjkwODI1YzNiYTg1MzNmZWVmYTkwMWFiMzk1
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKQEAgLTcz
LDcgKzczLDcgQEAgaW50IFJlbmRlck1hcnF1ZWU6Om1hcnF1ZWVTcGVlZCgpIGNvbnN0CiB7CiAg
ICAgaW50IHJlc3VsdCA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlU3BlZWQo
KTsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gbV9sYXllci0+cmVuZGVyZXIoKS5lbGVtZW50KCk7
Ci0gICAgaWYgKGVsZW1lbnQgJiYgaXM8SFRNTE1hcnF1ZWVFbGVtZW50PihlbGVtZW50KSkKKyAg
ICBpZiAoaXM8SFRNTE1hcnF1ZWVFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmVzdWx0ID0g
c3RkOjptYXgocmVzdWx0LCBkb3duY2FzdDxIVE1MTWFycXVlZUVsZW1lbnQ+KCplbGVtZW50KS5t
aW5pbXVtRGVsYXkoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCmluZGV4IDdjYTM1MmRjN2YyODViODAzM2M0NzQ0
NWRkMGNkNGY2Y2IxMjdmMGEuLjFlMGNmNTEyNDliN2MxNTM1NDg1MjEwZTZlZDg4NmZiNWI5Nzlm
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcApAQCAt
NjQsNyArNjQsNyBAQCBzdGF0aWMgc2l6ZV90IHNlbGVjdGVkT3B0aW9uQ291bnQoY29uc3QgUmVu
ZGVyTWVudUxpc3QmIHJlbmRlck1lbnVMaXN0KQogCiAgICAgc2l6ZV90IGNvdW50ID0gMDsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7ICsraSkgewotICAgICAgICBp
ZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGxpc3RJdGVtc1tpXSkgJiYgZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KCpsaXN0SXRlbXNbaV0pLnNlbGVjdGVkKCkpCisgICAgICAgIGlmIChpczxI
VE1MT3B0aW9uRWxlbWVudD4oKmxpc3RJdGVtc1tpXSkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpsaXN0SXRlbXNbaV0pLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICArK2NvdW50Owog
ICAgIH0KICAgICByZXR1cm4gY291bnQ7CkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBSZW5kZXJN
ZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKCkKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ld
OwotICAgICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAg
aWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgU3RyaW5nIHRleHQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
KmVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKQEAgLTI3MCw3ICsy
NzAsNyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbihpbnQgb3B0aW9u
SW5kZXgpCiAgICAgU3RyaW5nIHRleHQgPSBlbXB0eVN0cmluZygpOwogICAgIGlmIChpID49IDAg
JiYgaSA8IHNpemUpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsK
LSAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkgeworICAgICAgICBp
ZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgdGV4dCA9
IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVkVG9SZXNw
ZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgbV9vcHRpb25TdHlsZSA9IGVsZW1lbnQtPmNv
bXB1dGVkU3R5bGUoKTsKICAgICAgICAgfQpAQCAtNDUwLDkgKzQ1MCw5IEBAIFN0cmluZyBSZW5k
ZXJNZW51TGlzdDo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogCiAgICAgU3Ry
aW5nIGl0ZW1TdHJpbmc7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5k
ZXhdOwotICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAo
aXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICBpdGVtU3RyaW5nID0g
ZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7
Ci0gICAgZWxzZSBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGVsc2Ug
aWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgIGl0ZW1TdHJpbmcg
PSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVz
cGVjdEdyb3VwTGFiZWwoKTsKIAogICAgIGFwcGx5VGV4dFRyYW5zZm9ybShzdHlsZSgpLCBpdGVt
U3RyaW5nLCAnICcpOwpAQCAtNDkyLDEyICs0OTIsMTIgQEAgYm9vbCBSZW5kZXJNZW51TGlzdDo6
aXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiAgICAgaWYgKGxpc3RJbmRl
eCA+PSBsaXN0SXRlbXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTEVs
ZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKLSAgICBpZiAoIWlzPEhUTUxP
cHRpb25FbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50Pigq
ZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgZ3JvdXBFbmFibGVk
ID0gdHJ1ZTsKICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVu
dEVsZW1lbnQoKSkgewotICAgICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4ocGFyZW50
RWxlbWVudCkpCisgICAgICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqcGFyZW50RWxl
bWVudCkpCiAgICAgICAgICAgICBncm91cEVuYWJsZWQgPSAhcGFyZW50RWxlbWVudC0+aXNEaXNh
YmxlZEZvcm1Db250cm9sKCk7CiAgICAgfQogICAgIGlmICghZ3JvdXBFbmFibGVkKQpAQCAtNjQ1
LDcgKzY0NSw3IEBAIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlcGFyYXRvcih1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0CiBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNMYWJlbCh1bnNp
Z25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4m
IGxpc3RJdGVtcyA9IHNlbGVjdEVsZW1lbnQoKS5saXN0SXRlbXMoKTsKLSAgICByZXR1cm4gbGlz
dEluZGV4IDwgbGlzdEl0ZW1zLnNpemUoKSAmJiBpczxIVE1MT3B0R3JvdXBFbGVtZW50PihsaXN0
SXRlbXNbbGlzdEluZGV4XSk7CisgICAgcmV0dXJuIGxpc3RJbmRleCA8IGxpc3RJdGVtcy5zaXpl
KCkgJiYgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmxpc3RJdGVtc1tsaXN0SW5kZXhdKTsKIH0K
IAogYm9vbCBSZW5kZXJNZW51TGlzdDo6aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdApAQCAtNjU0LDcgKzY1NCw3IEBAIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1Nl
bGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKICAgICBpZiAobGlzdEluZGV4ID49IGxp
c3RJdGVtcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwotICAgIHJldHVybiBpczxIVE1MT3B0aW9u
RWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50
KS5zZWxlY3RlZCgpOworICAgIHJldHVybiBpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQp
ICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKTsKIH0K
IAogdm9pZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRl
eCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCmluZGV4IDk5MDU5NmQ5
ZTEwNTMzMGE2ZjNkNDA1N2RiOWY3NmFmYzY5ZWM4OWQuLmQzYzQyOTE1MzVkMGI2ZDIyNzM0YWEz
YjQ3OGJjNTE3M2JmNTkxZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVy
LmNwcApAQCAtNDMsNyArNDMsNyBAQCBIVE1MTWV0ZXJFbGVtZW50KiBSZW5kZXJNZXRlcjo6bWV0
ZXJFbGVtZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQoZWxlbWVudCgpKTsKIAotICAgIGlmIChp
czxIVE1MTWV0ZXJFbGVtZW50PihlbGVtZW50KCkpKQorICAgIGlmIChpczxIVE1MTWV0ZXJFbGVt
ZW50PigqZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxNZXRlckVsZW1l
bnQ+KGVsZW1lbnQoKSk7CiAKICAgICBBU1NFUlQoZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNw
cAppbmRleCA4MWRjOWZlZmI3OWY2Y2Y2ODMwNWNmYTk2OTYzNmViYmIyZTZlNTMwLi44NmZhNTM5
ZjFiMTM1YWRmYjFjNDJlY2M3YWYyYjljMzE1ZTNlOWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcApAQCAtNTQ1LDEwICs1NDUs
MTAgQEAgYm9vbCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJl
bmRlck9iamVjdCYgY2hpbGQsIGNvbnN0IFJlbmQKICAgICBpZiAoIWNoaWxkLm5vZGUoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBBU1NFUlQoaXM8RWxlbWVudD4oY2hpbGQubm9kZSgp
KSk7CisgICAgQVNTRVJUKGlzPEVsZW1lbnQ+KCpjaGlsZC5ub2RlKCkpKTsKIAogICAgIE5vZGUq
IG9yaWdpbmFsUGFyZW50ID0gTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6cGFyZW50KGNoaWxkLm5v
ZGUoKSk7Ci0gICAgaWYgKCFvcmlnaW5hbFBhcmVudCB8fCAhaXM8RWxlbWVudD4ob3JpZ2luYWxQ
YXJlbnQpIHx8ICFvcmlnaW5hbFBhcmVudC0+cmVuZGVyZXIoKSkKKyAgICBpZiAoIWlzPEVsZW1l
bnQ+KG9yaWdpbmFsUGFyZW50KSB8fCAhb3JpZ2luYWxQYXJlbnQtPnJlbmRlcmVyKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCpvcmlnaW5h
bFBhcmVudCkucmVuZGVyZXIoKS0+aXNDaGlsZEFsbG93ZWQoY2hpbGQsIHN0eWxlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMjRlZjQ5Njg0NDI4YWMx
YzI2Yjc2MWYwODg5N2I5ZmQ1ODI2NTI5MC4uY2M2NDI1ZmI2YzVlYzMxMjNiZjk4MjllNzZjYjJl
NDE1OTNkODkzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
QEAgLTEwMzQsNyArMTAzNCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPCiAgICAgaWYgKHVy
bFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgTm9kZSogbm9kZSA9IHRoaXMt
Pm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzTGluaygpIHx8ICFpczxFbGVtZW50
Pihub2RlKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpIHx8ICFub2RlLT5pc0xpbmsoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHJlZiA9IGRvd25jYXN0
PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOwogICAgIGlmIChocmVmLmlz
TnVsbCgpKQpAQCAtMTkxOCw3ICsxOTE4LDcgQEAgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVt
IFJlbmRlck9iamVjdDo6c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSBjb25zdAogI2Vu
ZGlmCiAgICAgLy8gUmVzcGVjdCB0aGUgaW1hZ2UncyBvcmllbnRhdGlvbiBpZiBpdCdzIGJlaW5n
IHVzZWQgYXMgYSBmdWxsLXBhZ2UgaW1hZ2Ugb3IgaXQncwogICAgIC8vIGFuIDxpbWc+IGFuZCB0
aGUgc2V0dGluZyB0byByZXNwZWN0IGl0IGV2ZXJ5d2hlcmUgaXMgc2V0LgotICAgIHJldHVybiAo
ZnJhbWUoKS5zZXR0aW5ncygpLnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgJiYgbm9k
ZSgpICYmIGlzPEhUTUxJbWFnZUVsZW1lbnQ+KG5vZGUoKSkpID8gUmVzcGVjdEltYWdlT3JpZW50
YXRpb24gOiBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uOworICAgIHJldHVybiAoZnJhbWUo
KS5zZXR0aW5ncygpLnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgJiYgaXM8SFRNTElt
YWdlRWxlbWVudD4obm9kZSgpKSkgPyBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA6IERvTm90UmVz
cGVjdEltYWdlT3JpZW50YXRpb247CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0OjpoYXNPdXRsaW5l
QW5ub3RhdGlvbigpIGNvbnN0CkBAIC0yMTQxLDcgKzIxNDEsNyBAQCB2b2lkIFJlbmRlck9iamVj
dDo6dXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKQogewogICAgIGJvb2wgdmFsdWVDaGFuZ2Vk
ID0gKGRyYWdPbiAhPSBpc0RyYWdnaW5nKCkpOwogICAgIHNldElzRHJhZ2dpbmcoZHJhZ09uKTsK
LSAgICBpZiAodmFsdWVDaGFuZ2VkICYmIG5vZGUoKSAmJiAoc3R5bGUoKS5hZmZlY3RlZEJ5RHJh
ZygpIHx8IChpczxFbGVtZW50Pihub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKCkp
LmNoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKSkpKQorICAgIGlmICh2YWx1ZUNoYW5nZWQgJiYgbm9k
ZSgpICYmIChzdHlsZSgpLmFmZmVjdGVkQnlEcmFnKCkgfHwgKGlzPEVsZW1lbnQ+KCpub2RlKCkp
ICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKCkpLmNoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKSkp
KQogICAgICAgICBub2RlKCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBmb3IgKFJlbmRl
ck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGRTbG93KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0
U2libGluZygpKQogICAgICAgICBjdXJyLT51cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKQEAgLTIy
MzQsNyArMjIzNCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlck9iamVjdDo6Z2V0
VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlCiAKICAgICAvLyBGSVhNRTog
VGhpcyAiZmluZCBuZWFyZXN0IGVsZW1lbnQgcGFyZW50IiBzaG91bGQgYmUgYSBoZWxwZXIgZnVu
Y3Rpb24uCiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICB3aGlsZSAobm9kZSAm
JiAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KCpu
b2RlKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjI5OCw3ICsyMjk4LDcgQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sb3JzKGludCBkZWNvcmF0aW9ucywgQ29sb3Im
IHVuZGVybGluZSwgQ28KICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwogICAgICAgICBp
ZiAoY3VyciAmJiBjdXJyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgdG9SZW5kZXJCbG9jayhjdXJy
KS0+Y29udGludWF0aW9uKCkpCiAgICAgICAgICAgICBjdXJyID0gdG9SZW5kZXJCbG9jayhjdXJy
KS0+Y29udGludWF0aW9uKCk7Ci0gICAgfSB3aGlsZSAoY3VyciAmJiBkZWNvcmF0aW9ucyAmJiAo
IXF1aXJrc01vZGUgfHwgIWN1cnItPm5vZGUoKSB8fCAoIWlzPEhUTUxBbmNob3JFbGVtZW50Pihj
dXJyLT5ub2RlKCkpICYmICFjdXJyLT5ub2RlKCktPmhhc1RhZ05hbWUoZm9udFRhZykpKSk7Cisg
ICAgfSB3aGlsZSAoY3VyciAmJiBkZWNvcmF0aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwgIWN1cnIt
Pm5vZGUoKSB8fCAoIWlzPEhUTUxBbmNob3JFbGVtZW50PigqY3Vyci0+bm9kZSgpKSAmJiAhY3Vy
ci0+bm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOwogCiAgICAgLy8gSWYgd2UgYmFpbGVk
IG91dCwgdXNlIHRoZSBlbGVtZW50IHdlIGJhaWxlZCBvdXQgYXQgKHR5cGljYWxseSBhIDxmb250
PiBvciA8YT4gZWxlbWVudCkuCiAgICAgaWYgKGRlY29yYXRpb25zICYmIGN1cnIpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCmluZGV4IDZiOGNkNDJkYWVl
M2VjNGUwMjVhZmE2MzY0MjdhZjZiZGZkZTgwY2UuLjMzNmIxMTY3MmQwM2I1ZjA2Yjc0NTNhODMz
MGJjYjMyNjk2NzhjYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQcm9ncmVzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dy
ZXNzLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIEhUTUxQcm9ncmVzc0VsZW1lbnQqIFJlbmRlclBy
b2dyZXNzOjpwcm9ncmVzc0VsZW1lbnQoKSBjb25zdAogICAgIGlmICghZWxlbWVudCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChpczxIVE1MUHJvZ3Jlc3NFbGVtZW50Pihl
bGVtZW50KCkpKQorICAgIGlmIChpczxIVE1MUHJvZ3Jlc3NFbGVtZW50PigqZWxlbWVudCgpKSkK
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQ+KGVsZW1lbnQoKSk7
CiAKICAgICBBU1NFUlQoZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAKaW5kZXggODcw
YTU0MTQwNGQxYzVlMGIyODkxZmRkMjMyZmViZWM0ZDQ1ODVhMC4uNTY5NzIxMjcxNTMxZWFmYzEx
MWYxOTcwNjBiOTYxODAwMGM5ZTc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgQ3Vy
c29yRGlyZWN0aXZlIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luOjpnZXRDdXJzb3IoY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50LCBDdXIKIAogdm9pZCBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6aGFu
ZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZlbnQp
KQorICAgIGlmICghaXM8TW91c2VFdmVudD4oKmV2ZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCA1OTcxNzdhYWQx
Zjc4Mjg5ZTgyMDg1OTk3YTdkMzJiMzllYjk2MTVhLi5kMTFlZTZjODhlOTg2N2MzZjRlZmM4NTg3
ZmIwYTc5N2ZjZWU3ZWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHAKQEAgLTM1MCw3ICszNTAsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlOjpjb252ZXJ0U3R5
bGVMb2dpY2FsV2lkdGhUb0NvbXB1dGVkV2lkdGgoY29uc3QgTGVuZ3RoJiBzdAogCiAgICAgLy8g
SFRNTCB0YWJsZXMnIHdpZHRoIHN0eWxlcyBhbHJlYWR5IGluY2x1ZGUgYm9yZGVycyBhbmQgcGFk
ZGluZ3MsIGJ1dCBDU1MgdGFibGVzJyB3aWR0aCBzdHlsZXMgZG8gbm90LgogICAgIExheW91dFVu
aXQgYm9yZGVycyA9IDA7Ci0gICAgYm9vbCBpc0NTU1RhYmxlID0gIWVsZW1lbnQoKSB8fCAhaXM8
SFRNTFRhYmxlRWxlbWVudD4oZWxlbWVudCgpKTsKKyAgICBib29sIGlzQ1NTVGFibGUgPSAhaXM8
SFRNTFRhYmxlRWxlbWVudD4oZWxlbWVudCgpKTsKICAgICBpZiAoaXNDU1NUYWJsZSAmJiBzdHls
ZUxvZ2ljYWxXaWR0aC5pc1NwZWNpZmllZCgpICYmIHN0eWxlTG9naWNhbFdpZHRoLmlzUG9zaXRp
dmUoKSAmJiBzdHlsZSgpLmJveFNpemluZygpID09IENPTlRFTlRfQk9YKQogICAgICAgICBib3Jk
ZXJzID0gYm9yZGVyU3RhcnQoKSArIGJvcmRlckVuZCgpICsgKGNvbGxhcHNlQm9yZGVycygpID8g
TGF5b3V0VW5pdCgpIDogcGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkpOwogCkBAIC0zNjQs
NyArMzY0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6Y29udmVydFN0eWxlTG9naWNhbEhl
aWdodFRvQ29tcHV0ZWRIZWlnaHQoY29uc3QgTGVuZ3RoJgogICAgICAgICAvLyBIVE1MIHRhYmxl
cyBzaXplIGFzIHRob3VnaCBDU1MgaGVpZ2h0IGluY2x1ZGVzIGJvcmRlci9wYWRkaW5nLCBDU1Mg
dGFibGVzIGRvIG5vdC4KICAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJzID0gTGF5b3V0VW5pdCgp
OwogICAgICAgICAvLyBGSVhNRTogV2UgY2Fubm90IGFwcGx5IGJveC1zaXppbmc6IGNvbnRlbnQt
Ym94IG9uIDx0YWJsZT4gd2hpY2ggb3RoZXIgYnJvd3NlcnMgYWxsb3cuCi0gICAgICAgIGlmICgo
ZWxlbWVudCgpICYmIGlzPEhUTUxUYWJsZUVsZW1lbnQ+KGVsZW1lbnQoKSkpIHx8IHN0eWxlKCku
Ym94U2l6aW5nKCkgPT0gQk9SREVSX0JPWCkgeworICAgICAgICBpZiAoaXM8SFRNTFRhYmxlRWxl
bWVudD4oZWxlbWVudCgpKSB8fCBzdHlsZSgpLmJveFNpemluZygpID09IEJPUkRFUl9CT1gpIHsK
ICAgICAgICAgICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSA9IGJvcmRlckJl
Zm9yZSgpICsgKGNvbGxhcHNlQm9yZGVycygpID8gTGF5b3V0VW5pdCgpIDogcGFkZGluZ0JlZm9y
ZSgpKTsKICAgICAgICAgICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0FmdGVyID0gYm9y
ZGVyQWZ0ZXIoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQoKSA6IHBhZGRpbmdB
ZnRlcigpKTsKICAgICAgICAgICAgIGJvcmRlcnMgPSBib3JkZXJBbmRQYWRkaW5nQmVmb3JlICsg
Ym9yZGVyQW5kUGFkZGluZ0FmdGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcAppbmRleCA0MjE1YjhmNGIxMmUwYjU4YmEwNWI1YWIxNTdjNDBhOTlmOWRi
OTdiLi45MmFlZTkwYTMwMTA1ZTI1MzMxMDE4ZGUwNzBjOTJhNWEyYTIzZDQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtODgsNyArODgsNyBA
QCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkKIHVuc2lnbmVk
IFJlbmRlclRhYmxlQ2VsbDo6cGFyc2VDb2xTcGFuRnJvbURPTSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKGlzPEhUTUxUYWJsZUNlbGxFbGVtZW50PihlbGVtZW50
KCkpKQorICAgIGlmIChpczxIVE1MVGFibGVDZWxsRWxlbWVudD4oKmVsZW1lbnQoKSkpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4oZG93bmNhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1l
bnQ+KCplbGVtZW50KCkpLmNvbFNwYW4oKSwgbWF4Q29sdW1uSW5kZXgpOwogI2lmIEVOQUJMRShN
QVRITUwpCiAgICAgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXRkVGFn
KSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB1bnNpZ25lZCBSZW5kZXJUYWJsZUNlbGw6OnBhcnNlQ29s
U3BhbkZyb21ET00oKSBjb25zdAogdW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpwYXJzZVJvd1Nw
YW5Gcm9tRE9NKCkgY29uc3QKIHsKICAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoaXM8
SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KGVsZW1lbnQoKSkpCisgICAgaWYgKGlzPEhUTUxUYWJsZUNl
bGxFbGVtZW50PigqZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVk
Pihkb3duY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudD4oKmVsZW1lbnQoKSkucm93U3BhbigpLCBt
YXhSb3dJbmRleCk7CiAjaWYgRU5BQkxFKE1BVEhNTCkKICAgICBpZiAoZWxlbWVudCgpLT5oYXNU
YWdOYW1lKE1hdGhNTE5hbWVzOjptdGRUYWcpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHAKaW5kZXggOTc0N2I0YTIxNmM4NWIyMjcwODhkY2Q5M2FiODdiNTdmOGNhOGMz
NS4uMTI4YWZhZjgyMzEyNDQ5NGY4ZDIzODVkNmFmYWRhN2QyYWQxYjZiMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC04MDUsNyArODA1LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZTo6aXNJbmRldGVybWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QK
IGJvb2wgUmVuZGVyVGhlbWU6OmlzRW5hYmxlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
KSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2RlKCk7Ci0gICAgaWYgKCFu
b2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gIWRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKIH0KQEAgLTgxMyw3ICs4MTMsNyBAQCBib29sIFJl
bmRlclRoZW1lOjppc0VuYWJsZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QK
IGJvb2wgUmVuZGVyVGhlbWU6OmlzRm9jdXNlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
KSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2RlKCk7Ci0gICAgaWYgKCFu
b2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFbGVtZW50KiBmb2N1c0RlbGVnYXRlID0gZG93
bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZvY3VzRGVsZWdhdGUoKTsKQEAgLTgyNCw3ICs4MjQsNyBA
QCBib29sIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
cikgY29uc3QKIAogYm9vbCBSZW5kZXJUaGVtZTo6aXNQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJlci5ub2RlKCkgfHwgIWlzPEVs
ZW1lbnQ+KHJlbmRlcmVyLm5vZGUoKSkpCisgICAgaWYgKCFpczxFbGVtZW50PihyZW5kZXJlci5u
b2RlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1l
bnQ+KCpyZW5kZXJlci5ub2RlKCkpLmFjdGl2ZSgpOwogfQpAQCAtODMyLDcgKzgzMiw3IEBAIGJv
b2wgUmVuZGVyVGhlbWU6OmlzUHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBj
b25zdAogYm9vbCBSZW5kZXJUaGVtZTo6aXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSByZW5kZXJl
ci5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAo
IWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRWxlbWVudCYg
ZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICBpZiAoIWVsZW1lbnQuYWN0
aXZlKCkgfHwgIWVsZW1lbnQuaXNTcGluQnV0dG9uRWxlbWVudCgpKQpAQCAtODQzLDcgKzg0Myw3
IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQoY29uc3QgUmVu
ZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIGJvb2wgUmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlD
b250cm9sKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgTm9kZSog
bm9kZSA9IHJlbmRlcmVyLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIWlzPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
bm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gIWRvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKS5tYXRjaGVzUmVhZFdyaXRlUHNldWRvQ2xhc3MoKTsKIH0KQEAgLTg1MSw3ICs4
NTEsNyBAQCBib29sIFJlbmRlclRoZW1lOjppc1JlYWRPbmx5Q29udHJvbChjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyKSBjb25zdAogYm9vbCBSZW5kZXJUaGVtZTo6aXNIb3ZlcmVkKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHJlbmRl
cmVyLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlm
ICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1NwaW5CdXR0b25FbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaG92ZXJlZCgpOwpAQCAtODYyLDcgKzg2Miw3
IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyKSBjb25zdAogYm9vbCBSZW5kZXJUaGVtZTo6aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSBy
ZW5kZXJlci5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSB8fCAh
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKKyAgICBpZiAo
IWlzPEVsZW1lbnQ+KG5vZGUpIHx8ICFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNTcGluQnV0
dG9uRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3BpbkJ1dHRvbkVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTcGluQnV0dG9uRWxlbWVudCo+KG5vZGUpOwogICAg
IHJldHVybiBlbGVtZW50LT51cERvd25TdGF0ZSgpID09IFNwaW5CdXR0b25FbGVtZW50OjpVcDsK
QEAgLTEwMzUsNyArMTAzNSw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3Mo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50CiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihvLnN0eWxlKCkudmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBOb2RlKiBub2RlID0gb3B0aW9ucy0+aXRlbShpKTsgaSsrKSB7Ci0g
ICAgICAgIEFTU0VSVChpczxIVE1MT3B0aW9uRWxlbWVudD4obm9kZSkpOworICAgICAgICBBU1NF
UlQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpub2RlKSk7CiAgICAgICAgIEhUTUxPcHRpb25FbGVt
ZW50JiBvcHRpb25FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpub2RlKTsK
ICAgICAgICAgU3RyaW5nIHZhbHVlID0gb3B0aW9uRWxlbWVudC52YWx1ZSgpOwogICAgICAgICBp
ZiAoIWlucHV0LT5pc1ZhbGlkVmFsdWUodmFsdWUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXggNDgzODhlYmMzMGQwNWVkNzk2MTFlYWUwOTk5NmE3
YWI5MDhmZGFlMC4uNzcyNjI4ZDNjYTU5MGE2OTc2ZjJlNTQ3Mjk2MzQ1ZTBlODM5ZWQzYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCkBAIC0yNjEsNyAr
MjYxLDcgQEAgc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5k
ZXJPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5v
ZGUgPyBub2RlLT5zaGFkb3dIb3N0KCkgOiBudWxscHRyOwogICAgIGlmICghbWVkaWFOb2RlKQog
ICAgICAgICBtZWRpYU5vZGUgPSBub2RlOwotICAgIGlmICghbWVkaWFOb2RlIHx8ICFpczxIVE1M
TWVkaWFFbGVtZW50PihtZWRpYU5vZGUpKQorICAgIGlmICghaXM8SFRNTE1lZGlhRWxlbWVudD4o
bWVkaWFOb2RlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTE1lZGlhRWxlbWVudD4obWVkaWFOb2RlKTsKQEAgLTMxNiw3ICszMTYsNyBAQCBzdGF0
aWMgYm9vbCBub2RlSGFzUHNldWRvKE5vZGUqIG5vZGUsIGNvbnN0IGNoYXIqIHBzZXVkbykKIAog
c3RhdGljIGJvb2wgbm9kZUhhc0NsYXNzKE5vZGUqIG5vZGUsIGNvbnN0IGNoYXIqIGNsYXNzTmFt
ZSkKIHsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4o
Km5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0g
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCmluZGV4IDkyMDAyNmNkOGM2Zjg5ODBmNTY4OTU5NjgxMTE2NDg2ODU3Njhk
MDYuLjMzNTU1NDZlZTY3NjU1YjNkZTBlOGZiN2I1YWRhYmM3OTdiM2U5YTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTcyOSw3ICs3MjksNyBAQCB2
b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25z
dCBSZW5kZXJPYmplY3QmIG8pCiB2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVQcmVzc2VkU3Rh
dGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QmIG8pCiB7CiAgICAgYm9vbCBvbGRQ
cmVzc2VkID0gW2NlbGwgaXNIaWdobGlnaHRlZF07Ci0gICAgYm9vbCBwcmVzc2VkID0gby5ub2Rl
KCkgJiYgaXM8RWxlbWVudD4oby5ub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpvLm5vZGUo
KSkuYWN0aXZlKCk7CisgICAgYm9vbCBwcmVzc2VkID0gaXM8RWxlbWVudD4oby5ub2RlKCkpICYm
IGRvd25jYXN0PEVsZW1lbnQ+KCpvLm5vZGUoKSkuYWN0aXZlKCk7CiAgICAgaWYgKHByZXNzZWQg
IT0gb2xkUHJlc3NlZCkKICAgICAgICAgW2NlbGwgc2V0SGlnaGxpZ2h0ZWQ6cHJlc3NlZF07CiB9
CkBAIC0xNTMxLDcgKzE1MzEsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRo
dW1iKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYQogCiAgICAgLy8g
VXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUVuYWJs
ZWRTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8pOwotICAgICAgICBFbGVtZW50KiBmb2N1c0RlbGVn
YXRlID0gKG8ubm9kZSgpICYmIGlzPEVsZW1lbnQ+KG8ubm9kZSgpKSkgPyBkb3duY2FzdDxFbGVt
ZW50PihvLm5vZGUoKSktPmZvY3VzRGVsZWdhdGUoKSA6IG51bGxwdHI7CisgICAgICAgIEVsZW1l
bnQqIGZvY3VzRGVsZWdhdGUgPSBpczxFbGVtZW50PihvLm5vZGUoKSkgPyBkb3duY2FzdDxFbGVt
ZW50Pigqby5ub2RlKCkpLmZvY3VzRGVsZWdhdGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKGZvY3Vz
RGVsZWdhdGUpCiAgICAgICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShzbGlkZXJUaHVtYkNlbGwsICpm
b2N1c0RlbGVnYXRlLT5yZW5kZXJlcigpKTsKIApAQCAtMTY4Myw3ICsxNjgzLDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmIG8sIGNvbnN0IFAKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlz
LT5zZWFyY2goKTsKIAotICAgIGlmICghaW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICYm
IChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oaW5wdXQpICYmICFkb3duY2FzdDxIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmlucHV0KS5pc1JlYWRPbmx5KCkpKQorICAgIGlmICgh
aW5wdXQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICYmIChpczxIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudD4oKmlucHV0KSAmJiAhZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+
KCppbnB1dCkuaXNSZWFkT25seSgpKSkKICAgICAgICAgdXBkYXRlUHJlc3NlZFN0YXRlKFtzZWFy
Y2ggY2FuY2VsQnV0dG9uQ2VsbF0sIG8pOwogICAgIGVsc2UgaWYgKFtbc2VhcmNoIGNhbmNlbEJ1
dHRvbkNlbGxdIGlzSGlnaGxpZ2h0ZWRdKQogICAgICAgICBbW3NlYXJjaCBjYW5jZWxCdXR0b25D
ZWxsXSBzZXRIaWdobGlnaHRlZDpOT107CkBAIC0xODUxLDEyICsxODUxLDEyIEBAIGJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9i
amVjdCYgbywgY29uc3QKICAgICAvLyBmcm9tIG91ciBub2RlLiBBc3N1bWluZyB0aGlzIG5vZGUg
aXMgdGhlIHBsdWdpbiBvdmVybGF5IGVsZW1lbnQsIHdlIHNob3VsZCBnZXQgdG8gdGhlCiAgICAg
Ly8gcGx1Z2luIGl0c2VsZiBieSBhc2tpbmcgZm9yIHRoZSBzaGFkb3cgcm9vdCBwYXJlbnQsIGFu
ZCB0aGVuIGl0cyBwYXJlbnQuCiAKLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihyZW5kZXJCbG9j
ay5lbGVtZW50KCkpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KCpyZW5kZXJCbG9jay5lbGVt
ZW50KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEhUTUxFbGVtZW50JiBwbHVnSW5P
dmVybGF5ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpyZW5kZXJCbG9jay5lbGVtZW50KCkpOwog
ICAgIEVsZW1lbnQqIHBhcmVudCA9IHBsdWdJbk92ZXJsYXkucGFyZW50T3JTaGFkb3dIb3N0RWxl
bWVudCgpOwotICAgIHdoaWxlIChwYXJlbnQgJiYgIWlzPEhUTUxQbHVnSW5FbGVtZW50PihwYXJl
bnQpKQorICAgIHdoaWxlIChwYXJlbnQgJiYgIWlzPEhUTUxQbHVnSW5FbGVtZW50PigqcGFyZW50
KSkKICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7
CiAKICAgICBpZiAoIXBhcmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAppbmRleCBkNDViYzViZDRmMDgyMjk3ZjdlNzdhNzdkYmM0NTMxZjc2ZTll
ZTgyLi5kMzNhOTM0N2I3MjZmODA3ZjhiNTMyMjE3NjE3NzQ0ODNkMGUxMzQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0xMjUsNyArMTI1
LDcgQEAgc3RhdGljIFN0cmluZyBnZXRUYWdOYW1lKE5vZGUqIG4pCiAKIHN0YXRpYyBib29sIGlz
RW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBp
ZiAoIW5vZGUgfHwgIWlzPEhUTUxTcGFuRWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxIVE1M
U3BhbkVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBI
VE1MRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxTcGFuRWxlbWVudD4oKm5vZGUpOwpA
QCAtMzkzLDcgKzM5Myw3IEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmpl
Y3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywKICAgICB9CiAgICAgCiAg
ICAgaWYgKGJlaGF2aW9yICYgUmVuZGVyQXNUZXh0U2hvd0lEQW5kQ2xhc3MpIHsKLSAgICAgICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBvLm5vZGUoKSAmJiBpczxFbGVtZW50PihvLm5vZGUoKSkg
PyBkb3duY2FzdDxFbGVtZW50PihvLm5vZGUoKSkgOiBudWxscHRyKSB7CisgICAgICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gaXM8RWxlbWVudD4oby5ub2RlKCkpID8gZG93bmNhc3Q8RWxlbWVu
dD4oby5ub2RlKCkpIDogbnVsbHB0cikgewogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0lE
KCkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBpZD1cIiIgKyBlbGVtZW50LT5nZXRJZEF0dHJp
YnV0ZSgpICsgIlwiIjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIu
Y3BwCmluZGV4IGQzOTJkODg3MGZlMDdhY2E4MmNhNzBiNTUwZGFiYWRkMTk1NzM4ZmYuLmY2MDU5
ZmUwOTExOGU3MDU5Njg0YWQ2ZDlkYjAzMDY1OTg2N2EwMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTI3Nyw3ICsyNzcsNyBAQCBib29sIFRleHRB
dXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogICAgICAgICByZXR1cm4gcmVuZGVyZXItPmlzRmxvYXRpbmcoKSB8fCByZW5kZXJlci0+
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCk7CiAgICAgLy8gQXZvaWQgY3JlYXRpbmcgY29udGFpbmVy
cyBmb3IgdGV4dCB3aXRoaW4gdGV4dCBjb250cm9scywgYnV0dG9ucywgb3IgPHNlbGVjdD4gYnV0
dG9ucy4KICAgICBOb2RlKiBwYXJlbnROb2RlID0gcmVuZGVyZXItPnBhcmVudCgpID8gcmVuZGVy
ZXItPnBhcmVudCgpLT5nZW5lcmF0aW5nTm9kZSgpIDogbnVsbHB0cjsKLSAgICBpZiAocGFyZW50
Tm9kZSAmJiBpczxFbGVtZW50PihwYXJlbnROb2RlKSAmJiBmb3JtSW5wdXRUYWdzKCkuY29udGFp
bnMoZG93bmNhc3Q8RWxlbWVudD4oKnBhcmVudE5vZGUpLnRhZ1FOYW1lKCkpKQorICAgIGlmIChp
czxFbGVtZW50PihwYXJlbnROb2RlKSAmJiBmb3JtSW5wdXRUYWdzKCkuY29udGFpbnMoZG93bmNh
c3Q8RWxlbWVudD4oKnBhcmVudE5vZGUpLnRhZ1FOYW1lKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4OCw3ICszODgsNyBAQCBib29sIFRleHRBdXRv
c2l6ZXI6OmNvbnRhaW5lckNvbnRhaW5zT25lT2ZUYWdzKGNvbnN0IFJlbmRlckJsb2NrKiBjb250
YWluZXIsIGNvbgogICAgIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb250YWluZXI7
CiAgICAgd2hpbGUgKHJlbmRlcmVyKSB7CiAgICAgICAgIGNvbnN0IE5vZGUqIHJlbmRlcmVyTm9k
ZSA9IHJlbmRlcmVyLT5ub2RlKCk7Ci0gICAgICAgIGlmIChyZW5kZXJlck5vZGUgJiYgaXM8RWxl
bWVudD4ocmVuZGVyZXJOb2RlKSkgeworICAgICAgICBpZiAoaXM8RWxlbWVudD4ocmVuZGVyZXJO
b2RlKSkgewogICAgICAgICAgICAgaWYgKHRhZ3MuY29udGFpbnMoZG93bmNhc3Q8RWxlbWVudD4o
KnJlbmRlcmVyTm9kZSkudGFnUU5hbWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxCbG9jay5jcHAKaW5kZXggMjRjMTkwZDI5ODE4ODdlYjUzZWRhZWQ3MmFlNzMx
NGZmZTNiYTExYi4uM2U5YTU0MjlmZmI5Y2IyYTM5NTMwNjA5MGQyYTA5OTA1NGY1MDI3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9j
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgUmVuZGVyTWF0aE1MQmxvY2s6OlJlbmRlck1hdGhN
TEJsb2NrKERvY3VtZW50JiBkb2N1bWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3QKIAogYm9v
bCBSZW5kZXJNYXRoTUxCbG9jazo6aXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBj
aGlsZCwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdAogewotICAgIHJldHVybiBjaGlsZC5ub2Rl
KCkgJiYgaXM8RWxlbWVudD4oKmNoaWxkLm5vZGUoKSk7CisgICAgcmV0dXJuIGlzPEVsZW1lbnQ+
KGNoaWxkLm5vZGUoKSk7CiB9CiAKIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxCbG9jaz4gUmVuZGVy
TWF0aE1MQmxvY2s6OmNyZWF0ZUFub255bW91c01hdGhNTEJsb2NrKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcAppbmRl
eCBlMTE0NjRmZWUyMDU5NjliNmNkOGE3NzQxNTM2Yzc1NDUyMmEwMjUzLi44ODNhMjJkYmJlYjlm
MmVkOWU2YTY5YzQ2ZTY4NzQ4ZGUzZGRiMjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwCkBAIC02Nyw4ICs2Nyw4
IEBAIHZvaWQgUmVuZGVyU1ZHR3JhZGllbnRTdG9wOjpsYXlvdXQoKQogCiBTVkdHcmFkaWVudEVs
ZW1lbnQqIFJlbmRlclNWR0dyYWRpZW50U3RvcDo6Z3JhZGllbnRFbGVtZW50KCkKIHsKLSAgICBp
ZiAoZWxlbWVudCgpLnBhcmVudEVsZW1lbnQoKSAmJiBpczxTVkdHcmFkaWVudEVsZW1lbnQ+KCpl
bGVtZW50KCkucGFyZW50RWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuICZkb3duY2FzdDxTVkdH
cmFkaWVudEVsZW1lbnQ+KCplbGVtZW50KCkucGFyZW50RWxlbWVudCgpKTsKKyAgICBpZiAoaXM8
U1ZHR3JhZGllbnRFbGVtZW50PihlbGVtZW50KCkucGFyZW50RWxlbWVudCgpKSkKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFNWR0dyYWRpZW50RWxlbWVudD4oZWxlbWVudCgpLnBhcmVudEVsZW1l
bnQoKSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXIuY3BwCmluZGV4IDkwYmE4YTA2NjNiYjAxYmFlNTIzYThhOTgzMWJjZThkNGM1NTQ0NWEuLmYz
NmE5MjBlMWM2YmM2MDU3MzhlMzg0YWNkZmY0MzMxYTY2ODMzYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmNwcApAQCAtNDYsNyArNDYsNyBAQCBib29sIFJlbmRlclNWR1RyYW5zZm9y
bWFibGVDb250YWluZXI6OmNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCkKICAgICAgICAgdXNlRWxl
bWVudCA9ICZkb3duY2FzdDxTVkdVc2VFbGVtZW50PihlbGVtZW50KTsKICAgICBlbHNlIGlmIChl
bGVtZW50LmlzSW5TaGFkb3dUcmVlKCkgJiYgaXM8U1ZHR0VsZW1lbnQ+KGVsZW1lbnQpKSB7CiAg
ICAgICAgIFNWR0VsZW1lbnQqIGNvcnJlc3BvbmRpbmdFbGVtZW50ID0gZWxlbWVudC5jb3JyZXNw
b25kaW5nRWxlbWVudCgpOwotICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0VsZW1lbnQgJiYgaXM8
U1ZHVXNlRWxlbWVudD4oY29ycmVzcG9uZGluZ0VsZW1lbnQpKQorICAgICAgICBpZiAoaXM8U1ZH
VXNlRWxlbWVudD4oY29ycmVzcG9uZGluZ0VsZW1lbnQpKQogICAgICAgICAgICAgdXNlRWxlbWVu
dCA9IGRvd25jYXN0PFNWR1VzZUVsZW1lbnQ+KGNvcnJlc3BvbmRpbmdFbGVtZW50KTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5n
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0Nv
bnRleHQuY3BwCmluZGV4IDlmNTEyNjEwOTkxNWUxMjE5YmVmODljOWNiYjJmYzg3ZDBhNzY4ZTEu
LmViNmI4OWI1ZTBhZDRmZmI4M2UxYmZmMTg3YzFjYjY3OWY4ZmQ3YTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAt
MTA1LDcgKzEwNSw3IEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVy
U1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUGFpCiAgICAgYm9vbCBpc29sYXRl
TWFza0ZvckJsZW5kaW5nID0gZmFsc2U7CiAKICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQot
ICAgIGlmIChzdmdTdHlsZS5oYXNNYXNrZXIoKSAmJiBpczxTVkdHcmFwaGljc0VsZW1lbnQ+KGRv
d25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSkpKSB7CisgICAgaWYgKHN2Z1N0
eWxlLmhhc01hc2tlcigpICYmIGlzPFNWR0dyYXBoaWNzRWxlbWVudD4oZG93bmNhc3Q8U1ZHRWxl
bWVudD4oKnJlbmRlcmVyLmVsZW1lbnQoKSkpKSB7CiAgICAgICAgIFNWR0dyYXBoaWNzRWxlbWVu
dCYgZ3JhcGhpY3NFbGVtZW50ID0gZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50PigqcmVuZGVy
ZXIuZWxlbWVudCgpKTsKICAgICAgICAgaXNvbGF0ZU1hc2tGb3JCbGVuZGluZyA9IGdyYXBoaWNz
RWxlbWVudC5zaG91bGRJc29sYXRlQmxlbmRpbmcoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCmluZGV4IDIyZThlMWFkNmNiMjhmNzZkMmQxNWZjNDZk
NTEzYTdjMDRhNTc1ZjMuLmMyNGMyMTZjZGE5M2IwMTA0MTRkNjJlY2JlOTMxMjZjY2Y2M2NiYTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCkBAIC0zNTksMTMg
KzM1OSwxMyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlV2hpdGVzcGFjZU9ubHlUZXh0U2libGlu
Z3NBZnRlckF0dGFjaElmTmVlZGVkKE5vZGUmIGN1cnJlbgogICAgIGZvciAoTm9kZSogc2libGlu
ZyA9IGN1cnJlbnQubmV4dFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5l
eHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKHNpYmxpbmctPm5lZWRzU3R5bGVSZWNhbGMoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHNpYmxpbmctPmlzRWxlbWVudE5vZGUo
KSkgeworICAgICAgICBpZiAoaXM8RWxlbWVudD4oKnNpYmxpbmcpKSB7CiAgICAgICAgICAgICAv
LyBUZXh0IHJlbmRlcmVycyBiZXlvbmQgcmVuZGVyZWQgZWxlbWVudHMgY2FuJ3QgYmUgYWZmZWN0
ZWQuCiAgICAgICAgICAgICBpZiAoIXNpYmxpbmctPnJlbmRlcmVyKCkgfHwgaXNSZW5kZXJlclJl
cGFyZW50ZWQoc2libGluZy0+cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFpczxUZXh0Pihz
aWJsaW5nKSkKKyAgICAgICAgaWYgKCFpczxUZXh0Pigqc2libGluZykpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgVGV4dCYgdGV4dFNpYmxpbmcgPSBkb3duY2FzdDxUZXh0Pigqc2li
bGluZyk7CiAgICAgICAgIGlmICghdGV4dFNpYmxpbmcuY29udGFpbnNPbmx5V2hpdGVzcGFjZSgp
KQpAQCAtNDc4LDExICs0NzgsMTEgQEAgc3RhdGljIHZvaWQgYXR0YWNoQ2hpbGRyZW4oQ29udGFp
bmVyTm9kZSYgY3VycmVudCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlLAogICAgICAgICAg
ICAgcmVuZGVyVHJlZVBvc2l0aW9uLmludmFsaWRhdGVOZXh0U2libGluZygqY2hpbGQtPnJlbmRl
cmVyKCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlz
PFRleHQ+KGNoaWxkKSkgeworICAgICAgICBpZiAoaXM8VGV4dD4oKmNoaWxkKSkgewogICAgICAg
ICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKGRvd25jYXN0PFRleHQ+KCpjaGlsZCksIHJlbmRlclRy
ZWVQb3NpdGlvbik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoaXM8RWxlbWVudD4oY2hpbGQpKQorICAgICAgICBpZiAoaXM8RWxlbWVudD4oKmNoaWxkKSkK
ICAgICAgICAgICAgIGF0dGFjaFJlbmRlclRyZWUoZG93bmNhc3Q8RWxlbWVudD4oKmNoaWxkKSwg
aW5oZXJpdGVkU3R5bGUsIHJlbmRlclRyZWVQb3NpdGlvbiwgbnVsbHB0cik7CiAgICAgfQogfQpA
QCAtNDk1LDEzICs0OTUsMTMgQEAgc3RhdGljIHZvaWQgYXR0YWNoRGlzdHJpYnV0ZWRDaGlsZHJl
bihJbnNlcnRpb25Qb2ludCYgaW5zZXJ0aW9uUG9pbnQsIFJlbmRlclN0eWwKICAgICBmb3IgKE5v
ZGUqIGN1cnJlbnQgPSBpbnNlcnRpb25Qb2ludC5maXJzdERpc3RyaWJ1dGVkKCk7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBpbnNlcnRpb25Qb2ludC5uZXh0RGlzdHJpYnV0ZWRUbyhjdXJyZW50KSkgewog
ICAgICAgICBpZiAoY3VycmVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlclRyZWVQ
b3NpdGlvbi5pbnZhbGlkYXRlTmV4dFNpYmxpbmcoKmN1cnJlbnQtPnJlbmRlcmVyKCkpOwotICAg
ICAgICBpZiAoaXM8VGV4dD4oY3VycmVudCkpIHsKKyAgICAgICAgaWYgKGlzPFRleHQ+KCpjdXJy
ZW50KSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBhdHRhY2hUZXh0UmVuZGVyZXIoZG93bmNhc3Q8
VGV4dD4oKmN1cnJlbnQpLCByZW5kZXJUcmVlUG9zaXRpb24pOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KGN1cnJlbnQpKSB7CisgICAg
ICAgIGlmIChpczxFbGVtZW50PigqY3VycmVudCkpIHsKICAgICAgICAgICAgIEVsZW1lbnQmIGN1
cnJlbnRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKmN1cnJlbnQpOwogICAgICAgICAgICAg
aWYgKGN1cnJlbnRFbGVtZW50LnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgZGV0YWNoUmVu
ZGVyVHJlZShjdXJyZW50RWxlbWVudCk7CkBAIC02NTEsMTEgKzY1MSwxMSBAQCBzdGF0aWMgdm9p
ZCBhdHRhY2hSZW5kZXJUcmVlKEVsZW1lbnQmIGN1cnJlbnQsIFJlbmRlclN0eWxlJiBpbmhlcml0
ZWRTdHlsZSwgUmVuZAogc3RhdGljIHZvaWQgZGV0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbihJbnNl
cnRpb25Qb2ludCYgaW5zZXJ0aW9uUG9pbnQpCiB7CiAgICAgZm9yIChOb2RlKiBjdXJyZW50ID0g
aW5zZXJ0aW9uUG9pbnQuZmlyc3REaXN0cmlidXRlZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gaW5z
ZXJ0aW9uUG9pbnQubmV4dERpc3RyaWJ1dGVkVG8oY3VycmVudCkpIHsKLSAgICAgICAgaWYgKGlz
PFRleHQ+KGN1cnJlbnQpKSB7CisgICAgICAgIGlmIChpczxUZXh0PigqY3VycmVudCkpIHsKICAg
ICAgICAgICAgIGRldGFjaFRleHRSZW5kZXJlcihkb3duY2FzdDxUZXh0PigqY3VycmVudCkpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+
KGN1cnJlbnQpKQorICAgICAgICBpZiAoaXM8RWxlbWVudD4oKmN1cnJlbnQpKQogICAgICAgICAg
ICAgZGV0YWNoUmVuZGVyVHJlZShkb3duY2FzdDxFbGVtZW50PigqY3VycmVudCkpOwogICAgIH0K
IH0KQEAgLTY2NiwxMSArNjY2LDExIEBAIHN0YXRpYyB2b2lkIGRldGFjaENoaWxkcmVuKENvbnRh
aW5lck5vZGUmIGN1cnJlbnQsIERldGFjaFR5cGUgZGV0YWNoVHlwZSkKICAgICAgICAgZGV0YWNo
RGlzdHJpYnV0ZWRDaGlsZHJlbihkb3duY2FzdDxJbnNlcnRpb25Qb2ludD4oY3VycmVudCkpOwog
CiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGN1cnJlbnQuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaXM8VGV4dD4oY2hpbGQp
KSB7CisgICAgICAgIGlmIChpczxUZXh0PigqY2hpbGQpKSB7CiAgICAgICAgICAgICBTdHlsZTo6
ZGV0YWNoVGV4dFJlbmRlcmVyKGRvd25jYXN0PFRleHQ+KCpjaGlsZCkpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KGNoaWxkKSkKKyAg
ICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjaGlsZCkpCiAgICAgICAgICAgICBkZXRhY2hSZW5kZXJU
cmVlKGRvd25jYXN0PEVsZW1lbnQ+KCpjaGlsZCksIGRldGFjaFR5cGUpOwogICAgIH0KICAgICBj
dXJyZW50LmNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CkBAIC04MTUsMTEgKzgxNSwxMSBA
QCBzdGF0aWMgdm9pZCByZXNvbHZlU2hhZG93VHJlZShTaGFkb3dSb290JiBzaGFkb3dSb290LCBF
bGVtZW50JiBob3N0LCBTdHlsZTo6Q2hhbgogICAgIGZvciAoTm9kZSogY2hpbGQgPSBzaGFkb3dS
b290LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcmVuZGVyVHJlZVBv
c2l0aW9uLmludmFsaWRhdGVOZXh0U2libGluZygqY2hpbGQtPnJlbmRlcmVyKCkpOwotICAgICAg
ICBpZiAoaXM8VGV4dD4oY2hpbGQpICYmIGNoaWxkLT5uZWVkc1N0eWxlUmVjYWxjKCkpIHsKKyAg
ICAgICAgaWYgKGlzPFRleHQ+KCpjaGlsZCkgJiYgY2hpbGQtPm5lZWRzU3R5bGVSZWNhbGMoKSkg
ewogICAgICAgICAgICAgcmVzb2x2ZVRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpjaGlsZCksIHJl
bmRlclRyZWVQb3NpdGlvbik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oY2hpbGQpKQorICAgICAgICBpZiAoaXM8RWxlbWVudD4oKmNo
aWxkKSkKICAgICAgICAgICAgIHJlc29sdmVUcmVlKGRvd25jYXN0PEVsZW1lbnQ+KCpjaGlsZCks
IGhvc3QucmVuZGVyZXIoKS0+c3R5bGUoKSwgcmVuZGVyVHJlZVBvc2l0aW9uLCBjaGFuZ2UpOwog
ICAgIH0KIApAQCAtOTM5LDExICs5MzksMTEgQEAgdm9pZCByZXNvbHZlVHJlZShFbGVtZW50JiBj
dXJyZW50LCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUsIFJlbmRlclRyZWVQb3NpdGkKICAg
ICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGN1cnJlbnQuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKFJlbmRlck9iamVj
dCogY2hpbGRSZW5kZXJlciA9IGNoaWxkLT5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIGNo
aWxkUmVuZGVyVHJlZVBvc2l0aW9uLmludmFsaWRhdGVOZXh0U2libGluZygqY2hpbGRSZW5kZXJl
cik7Ci0gICAgICAgICAgICBpZiAoaXM8VGV4dD4oY2hpbGQpICYmIGNoaWxkLT5uZWVkc1N0eWxl
UmVjYWxjKCkpIHsKKyAgICAgICAgICAgIGlmIChpczxUZXh0PigqY2hpbGQpICYmIGNoaWxkLT5u
ZWVkc1N0eWxlUmVjYWxjKCkpIHsKICAgICAgICAgICAgICAgICByZXNvbHZlVGV4dE5vZGUoZG93
bmNhc3Q8VGV4dD4oKmNoaWxkKSwgY2hpbGRSZW5kZXJUcmVlUG9zaXRpb24pOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFpczxFbGVt
ZW50PihjaGlsZCkpCisgICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpjaGlsZCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIEVsZW1lbnQmIGNoaWxkRWxlbWVu
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpjaGlsZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNw
cAppbmRleCA0ZWNmNTJiZmJiNDIyZmM4ZDMwNmQ1Y2FlMjdiNmQ5ZmM5MDQ3MzA4Li41NTEwNmNl
NmE2ZTA2OTY4YmVkODk3YTRmMjYyOGYzNTEyMjljYjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxl
bWVudC5jcHAKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIFNWR0FFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIAogICAgICAgICAgICAgaWYgKHVybFswXSA9PSAnIycp
IHsKICAgICAgICAgICAgICAgICBFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdHJlZVNjb3BlKCku
Z2V0RWxlbWVudEJ5SWQodXJsLnN1YnN0cmluZ1NoYXJpbmdJbXBsKDEpKTsKLSAgICAgICAgICAg
ICAgICBpZiAodGFyZ2V0RWxlbWVudCAmJiBpczxTVkdTTUlMRWxlbWVudD4oKnRhcmdldEVsZW1l
bnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzPFNWR1NNSUxFbGVtZW50Pih0YXJnZXRFbGVt
ZW50KSkgewogICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxTVkdTTUlMRWxlbWVudD4oKnRh
cmdldEVsZW1lbnQpLmJlZ2luQnlMaW5rQWN0aXZhdGlvbigpOwogICAgICAgICAgICAgICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcAppbmRleCBhNmYwN2I4
MTYwNTBlMGU0MGFiZmZjNWYwYzNiZWY0MmY3ZGIyNGUwLi40YWQwNjNkZThlZTJhNjcxOWRkOTUx
ZDNiYTViZTdjNmI3NzNmZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQWx0
R2x5cGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQWx0R2x5cGhFbGVt
ZW50LmNwcApAQCAtOTQsMTIgKzk0LDEyIEBAIGJvb2wgU1ZHQWx0R2x5cGhFbGVtZW50OjpoYXNW
YWxpZEdseXBoRWxlbWVudHMoVmVjdG9yPFN0cmluZz4mIGdseXBoTmFtZXMpIGNvbnN0CiAgICAg
aWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXM8U1ZHR2x5
cGhFbGVtZW50PihlbGVtZW50KSkgeworICAgIGlmIChpczxTVkdHbHlwaEVsZW1lbnQ+KCplbGVt
ZW50KSkgewogICAgICAgICBnbHlwaE5hbWVzLmFwcGVuZCh0YXJnZXQpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoaXM8U1ZHQWx0R2x5cGhEZWZFbGVtZW50PihlbGVt
ZW50KQorICAgIGlmIChpczxTVkdBbHRHbHlwaERlZkVsZW1lbnQ+KCplbGVtZW50KQogICAgICAg
ICAmJiBkb3duY2FzdDxTVkdBbHRHbHlwaERlZkVsZW1lbnQ+KCplbGVtZW50KS5oYXNWYWxpZEds
eXBoRWxlbWVudHMoZ2x5cGhOYW1lcykpCiAgICAgICAgIHJldHVybiB0cnVlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAppbmRleCA4NTVhMjM4
NmRhMzBmYzQyNzk3ODgzYWQzMTE1NjhkOTYwNzY5YTgzLi5jNTU5NDNhZTE0YTg0M2Y5MWIxNjIz
YmM4MzQ3YmRlOWZhZjYyMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
TW90aW9uRWxlbWVudC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBTVkdBbmltYXRlTW90aW9u
RWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkKICAgICBpZiAodGFyZ2V0RWxlbWVudC0+
aGFzVGFnTmFtZShnVGFnKQogICAgICAgICB8fCB0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKGRl
ZnNUYWcpCiAgICAgICAgIHx8IHRhcmdldEVsZW1lbnQtPmhhc1RhZ05hbWUodXNlVGFnKQotICAg
ICAgICB8fCBpczxTVkdJbWFnZUVsZW1lbnQ+KHRhcmdldEVsZW1lbnQpCisgICAgICAgIHx8IGlz
PFNWR0ltYWdlRWxlbWVudD4oKnRhcmdldEVsZW1lbnQpCiAgICAgICAgIHx8IHRhcmdldEVsZW1l
bnQtPmhhc1RhZ05hbWUoc3dpdGNoVGFnKQogICAgICAgICB8fCB0YXJnZXRFbGVtZW50LT5oYXNU
YWdOYW1lKHBhdGhUYWcpCiAgICAgICAgIHx8IHRhcmdldEVsZW1lbnQtPmhhc1RhZ05hbWUocmVj
dFRhZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuY3BwCmluZGV4IDE0MTNkZjRjOTc5ZWExNjYz
M2I1YmY4YWNjZDA4ZTIzMTMxODNhNDEuLjNiOTBkM2M4ODM4M2Y0NjcwNDIwNTFiMTE3NmQ4Y2Zh
ODczYTY3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmNwcApAQCAtNDIsNyArNDIsNyBA
QCBTVkdEb2N1bWVudDo6U1ZHRG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkK
IFNWR1NWR0VsZW1lbnQqIFNWR0RvY3VtZW50Ojpyb290RWxlbWVudCgpIGNvbnN0CiB7CiAgICAg
RWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50RWxlbWVudCgpOwotICAgIGlmIChlbGVtZW50ICYm
IGlzPFNWR1NWR0VsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmIChpczxTVkdTVkdFbGVtZW50Pihl
bGVtZW50KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR1NWR0VsZW1lbnQ+KGVsZW1lbnQp
OwogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXgg
NTIzYTc1NmMxNDYwMGNjNjRmYWI5YWViMGQxN2Q1YzQ4ZDZiMmQwMi4uYjkzOTlmMzExZjA3MDQ2
MjAxOTEzOWEzNWRlYTViNDNiM2U3ZjAwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApA
QCAtMzIwLDcgKzMyMCw3IEBAIFNWR0VsZW1lbnRSYXJlRGF0YSYgU1ZHRWxlbWVudDo6ZW5zdXJl
U1ZHUmFyZURhdGEoKQogCiBib29sIFNWR0VsZW1lbnQ6OmlzT3V0ZXJtb3N0U1ZHU1ZHRWxlbWVu
dCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFpczxTVkdTVkdFbGVtZW50Pih0aGlzKSkKKyAgICBpZiAo
IWlzPFNWR1NWR0VsZW1lbnQ+KCp0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8gSWYgd2UncmUgbGl2aW5nIGluIGEgc2hhZG93IHRyZWUsIHdlJ3JlIGEgPHN2Zz4gZWxlbWVu
dCB0aGF0IGdvdCBjcmVhdGVkIGFzIHJlcGxhY2VtZW50CkBAIC0zOTYsNyArMzk2LDcgQEAgU1ZH
U1ZHRWxlbWVudCogU1ZHRWxlbWVudDo6b3duZXJTVkdFbGVtZW50KCkgY29uc3QKIHsKICAgICBD
b250YWluZXJOb2RlKiBub2RlID0gcGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOwogICAgIHdoaWxl
IChub2RlKSB7Ci0gICAgICAgIGlmIChpczxTVkdTVkdFbGVtZW50Pihub2RlKSkKKyAgICAgICAg
aWYgKGlzPFNWR1NWR0VsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxTVkdTVkdFbGVtZW50Pihub2RlKTsKIAogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50T3JT
aGFkb3dIb3N0Tm9kZSgpOwpAQCAtNDExLDcgKzQxMSw3IEBAIFNWR0VsZW1lbnQqIFNWR0VsZW1l
bnQ6OnZpZXdwb3J0RWxlbWVudCgpIGNvbnN0CiAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSAib3Zl
cmZsb3ciIHByb3BlcnR5LiA8dXNlPiBvbiA8c3ltYm9sPiB3b3VsZG4ndCB3b3JrIG90aGVyd2hp
c2UuCiAgICAgQ29udGFpbmVyTm9kZSogbm9kZSA9IHBhcmVudE9yU2hhZG93SG9zdE5vZGUoKTsK
ICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4obm9kZSkg
fHwgaXM8U1ZHSW1hZ2VFbGVtZW50Pihub2RlKSB8fCBub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVz
OjpzeW1ib2xUYWcpKQorICAgICAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4oKm5vZGUpIHx8IGlz
PFNWR0ltYWdlRWxlbWVudD4oKm5vZGUpIHx8IG5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN5
bWJvbFRhZykpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9kZSk7
CiAKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udERhdGEuY3BwCmluZGV4IDUwOTNiMmVkMWI3ZWE2MjM4Zjc2NjZkOGE4OTgw
ZDc0NzlhMDNkYmQuLjI3MmNlOTQyYjg3ZDIxYjBhN2I0MDQ4YzE5YzQ1MmI2N2Y4NDdjZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcApAQCAtMTU5LDcgKzE1OSw3IEBAIGJvb2wgU1ZH
Rm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYgaXRlcmF0b3Is
IEdseXBoRGF0YSYgZ2x5CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRSZW5kZXJlckVsZW1l
bnQgPSBwYXJlbnRSZW5kZXJlci0+ZWxlbWVudCgpKSB7CiAgICAgICAgICAgICBsYW5ndWFnZSA9
IHBhcmVudFJlbmRlcmVyRWxlbWVudC0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7
CiAKLSAgICAgICAgICAgIGlmIChpczxTVkdBbHRHbHlwaEVsZW1lbnQ+KHBhcmVudFJlbmRlcmVy
RWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChpczxTVkdBbHRHbHlwaEVsZW1lbnQ+KCpwYXJl
bnRSZW5kZXJlckVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgU1ZHQWx0R2x5cGhFbGVtZW50
JiBhbHRHbHlwaCA9IGRvd25jYXN0PFNWR0FsdEdseXBoRWxlbWVudD4oKnBhcmVudFJlbmRlcmVy
RWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhbHRHbHlwaC5oYXNWYWxpZEdseXBoRWxl
bWVudHMoYWx0R2x5cGhOYW1lcykpCiAgICAgICAgICAgICAgICAgICAgIGFsdEdseXBoTmFtZXMu
Y2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKaW5kZXgg
MmRmYzc2ZTViMjJlMGM3YWM2NDRhMTkyMGFmZWJjNzIyZjZhOTNiYS4uMDZkZDI0ODA0YjI0N2U1
ZDkzNmY1NTQxZDgwYmRjYjU2NjYwNTMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRG
YWNlRWxlbWVudC5jcHAKQEAgLTIxNiw3ICsyMTYsNyBAQCBTdHJpbmcgU1ZHRm9udEZhY2VFbGVt
ZW50Ojpmb250RmFtaWx5KCkgY29uc3QKIFNWR0ZvbnRFbGVtZW50KiBTVkdGb250RmFjZUVsZW1l
bnQ6OmFzc29jaWF0ZWRGb250RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHBhcmVudE5v
ZGUoKSA9PSBtX2ZvbnRFbGVtZW50KTsKLSAgICBBU1NFUlQoIXBhcmVudE5vZGUoKSB8fCBpczxT
VkdGb250RWxlbWVudD4ocGFyZW50Tm9kZSgpKSk7CisgICAgQVNTRVJUKCFwYXJlbnROb2RlKCkg
fHwgaXM8U1ZHRm9udEVsZW1lbnQ+KCpwYXJlbnROb2RlKCkpKTsKICAgICByZXR1cm4gbV9mb250
RWxlbWVudDsKIH0KIApAQCAtMjMwLDcgKzIzMCw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50
OjpyZWJ1aWxkRm9udEZhY2UoKQogICAgIC8vIHdlIGN1cnJlbnRseSBpZ25vcmUgYWxsIGJ1dCB0
aGUgZmlyc3Qgc3JjIGVsZW1lbnQsIGFsdGVybmF0aXZlbHkgd2UgY291bGQgY29uY2F0IHRoZW0K
ICAgICBhdXRvIHNyY0VsZW1lbnQgPSBjaGlsZHJlbk9mVHlwZTxTVkdGb250RmFjZVNyY0VsZW1l
bnQ+KCp0aGlzKS5maXJzdCgpOwogCi0gICAgYm9vbCBkZXNjcmliZXNQYXJlbnRGb250ID0gaXM8
U1ZHRm9udEVsZW1lbnQ+KHBhcmVudE5vZGUoKSk7CisgICAgYm9vbCBkZXNjcmliZXNQYXJlbnRG
b250ID0gaXM8U1ZHRm9udEVsZW1lbnQ+KCpwYXJlbnROb2RlKCkpOwogICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGxpc3Q7CiAKICAgICBpZiAoZGVzY3JpYmVzUGFyZW50Rm9udCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VTcmNFbGVtZW50LmNwcAppbmRleCAyZjgwNmJiYmIy
NmRkYzg2NGE1ZjFmMzBiOWFiZGRhYmM4ZjVkZTc4Li42YWMxZDdiZjhhMGFjZjdjYmExZjA4Nzkx
NGY0YjkwMTU1ZWNlNTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZh
Y2VTcmNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VTcmNF
bGVtZW50LmNwcApAQCAtNjMsNyArNjMsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gU1ZH
Rm9udEZhY2VTcmNFbGVtZW50OjpzcmNWYWx1ZSgpIGNvbnN0CiB2b2lkIFNWR0ZvbnRGYWNlU3Jj
RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaGFuZ2UpCiB7CiAg
ICAgU1ZHRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZSk7Ci0gICAgaWYgKHBhcmVudE5v
ZGUoKSAmJiBpczxTVkdGb250RmFjZUVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpCisgICAgaWYgKGlz
PFNWR0ZvbnRGYWNlRWxlbWVudD4ocGFyZW50Tm9kZSgpKSkKICAgICAgICAgZG93bmNhc3Q8U1ZH
Rm9udEZhY2VFbGVtZW50PigqcGFyZW50Tm9kZSgpKS5yZWJ1aWxkRm9udEZhY2UoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAppbmRleCBkOTFhNDdiYWY5YTM1NDMy
ZjVmMTFjYWNjNWQzYWE5ZDMwYTc5ZmE2Li5mYTEyMjUwMGU3MDZmNmUyNWI5NjBhZmZhNDI1Mzg3
M2Q0YTViMzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcApAQCAtNDcs
NyArNDcsNyBAQCBQYXNzUmVmUHRyPFNWR0dseXBoRWxlbWVudD4gU1ZHR2x5cGhFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZQogdm9pZCBTVkdHbHlwaEVsZW1lbnQ6
OmludmFsaWRhdGVHbHlwaENhY2hlKCkKIHsKICAgICBDb250YWluZXJOb2RlKiBmb250Tm9kZSA9
IHBhcmVudE5vZGUoKTsKLSAgICBpZiAoZm9udE5vZGUgJiYgaXM8U1ZHRm9udEVsZW1lbnQ+KGZv
bnROb2RlKSkKKyAgICBpZiAoaXM8U1ZHRm9udEVsZW1lbnQ+KGZvbnROb2RlKSkKICAgICAgICAg
ZG93bmNhc3Q8U1ZHRm9udEVsZW1lbnQ+KCpmb250Tm9kZSkuaW52YWxpZGF0ZUdseXBoQ2FjaGUo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAppbmRleCA0NzJhNjMz
OTBlOTkxYzBhODVkNDEzODY2NmNhNTllYTAwYzJiOWY4Li5iZmQ5MzE5Y2FhOTFjOWM3Y2I2NTA5
OGM5Y2ViNzJmODg1NzY5YjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtl
cm5FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNw
cApAQCAtNDQsNyArNDQsNyBAQCBQYXNzUmVmUHRyPFNWR0hLZXJuRWxlbWVudD4gU1ZHSEtlcm5F
bGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZQogTm9kZTo6SW5zZXJ0
aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdIS2VybkVsZW1lbnQ6Omluc2VydGVkSW50byhDb250
YWluZXJOb2RlJiByb290UGFyZW50KQogewogICAgIENvbnRhaW5lck5vZGUqIGZvbnROb2RlID0g
cGFyZW50Tm9kZSgpOwotICAgIGlmIChmb250Tm9kZSAmJiBpczxTVkdGb250RWxlbWVudD4oZm9u
dE5vZGUpKQorICAgIGlmIChpczxTVkdGb250RWxlbWVudD4oZm9udE5vZGUpKQogICAgICAgICBk
b3duY2FzdDxTVkdGb250RWxlbWVudD4oKmZvbnROb2RlKS5pbnZhbGlkYXRlR2x5cGhDYWNoZSgp
OwogCiAgICAgcmV0dXJuIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKQEAg
LTUzLDcgKzUzLDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdIS2Vy
bkVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJgogdm9pZCBTVkdIS2VybkVsZW1l
bnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCiB7CiAgICAgQ29udGFp
bmVyTm9kZSogZm9udE5vZGUgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKGZvbnROb2RlICYmIGlz
PFNWR0ZvbnRFbGVtZW50Pihmb250Tm9kZSkpCisgICAgaWYgKGlzPFNWR0ZvbnRFbGVtZW50Pihm
b250Tm9kZSkpCiAgICAgICAgIGRvd25jYXN0PFNWR0ZvbnRFbGVtZW50PigqZm9udE5vZGUpLmlu
dmFsaWRhdGVHbHlwaENhY2hlKCk7CiAKICAgICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShyb290
UGFyZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAppbmRleCBjMDVh
NzNlOWUwMmM2ZTE2MTJlYjhmNDg3ZTZjOGQyOTE5OTc3YjVhLi5iOWE2OTAxMzM3OTE2ZDM2ZDUx
MDZkMzgwYzc2ZGM0YjE0NTk2NzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGVuZ3RoQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRl
eHQuY3BwCkBAIC0zMTgsNyArMzE4LDcgQEAgYm9vbCBTVkdMZW5ndGhDb250ZXh0OjpkZXRlcm1p
bmVWaWV3cG9ydChGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSkgY29uc3QKIAogICAgIC8vIFRha2Ug
c2l6ZSBmcm9tIG5lYXJlc3Qgdmlld3BvcnQgZWxlbWVudC4KICAgICBTVkdFbGVtZW50KiB2aWV3
cG9ydEVsZW1lbnQgPSBtX2NvbnRleHQtPnZpZXdwb3J0RWxlbWVudCgpOwotICAgIGlmICghdmll
d3BvcnRFbGVtZW50IHx8ICFpczxTVkdTVkdFbGVtZW50Pih2aWV3cG9ydEVsZW1lbnQpKQorICAg
IGlmICghaXM8U1ZHU1ZHRWxlbWVudD4odmlld3BvcnRFbGVtZW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgY29uc3QgU1ZHU1ZHRWxlbWVudCYgc3ZnID0gZG93bmNhc3Q8U1ZHU1ZH
RWxlbWVudD4oKnZpZXdwb3J0RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCmluZGV4IGRjNGYyYjIzMjJjMTc4NGNlYjJjNzkwN2Vl
NzQ0NGRlMjdjMjkwOGIuLmU3MjViZDlhOTRjODYzY2QwZjdiZmY1MjE1ZjMwMTk4MjRjNjMwYjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3Bw
CkBAIC0xNzMsNyArMTczLDcgQEAgYm9vbCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNvbGxl
Y3RHcmFkaWVudEF0dHJpYnV0ZXMoTGluZWFyR3JhZGllbnRBdHRyaWJ1dGUKICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgICAvLyBSZXNwZWN0IHhsaW5rOmhyZWYsIHRha2UgYXR0cmlidXRlcyBm
cm9tIHJlZmVyZW5jZWQgZWxlbWVudAogICAgICAgICBOb2RlKiByZWZOb2RlID0gU1ZHVVJJUmVm
ZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhjdXJyZW50LT5ocmVmKCksIGRvY3Vt
ZW50KCkpOwotICAgICAgICBpZiAocmVmTm9kZSAmJiBpczxTVkdHcmFkaWVudEVsZW1lbnQ+KCpy
ZWZOb2RlKSkgeworICAgICAgICBpZiAoaXM8U1ZHR3JhZGllbnRFbGVtZW50PihyZWZOb2RlKSkg
ewogICAgICAgICAgICAgY3VycmVudCA9IGRvd25jYXN0PFNWR0dyYWRpZW50RWxlbWVudD4ocmVm
Tm9kZSk7CiAKICAgICAgICAgICAgIC8vIEN5Y2xlIGRldGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TG9jYXRhYmxlLmNwcAppbmRleCBmZmM0YjZjYTYyZmI1ZDc2ZTJmYmNiY2MyNmNjYjhkYTUwNjc1
MzE2Li45ZjJhNTU0YTM2MjRlOTAyNTQ2ZjI5ZDBjYmIxZTk2MmUyZTQ4M2UzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTG9jYXRhYmxlLmNwcApAQCAtMzYsNyArMzYsNyBAQCBzdGF0aWMgYm9vbCBpc1Zp
ZXdwb3J0RWxlbWVudChOb2RlKiBub2RlKQogICAgIHJldHVybiAobm9kZS0+aGFzVGFnTmFtZShT
VkdOYW1lczo6c3ZnVGFnKQogICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpz
eW1ib2xUYWcpCiAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZvcmVpZ25P
YmplY3RUYWcpCi0gICAgICAgIHx8IGlzPFNWR0ltYWdlRWxlbWVudD4obm9kZSkpOworICAgICAg
ICB8fCBpczxTVkdJbWFnZUVsZW1lbnQ+KCpub2RlKSk7CiB9CiAKIFNWR0VsZW1lbnQqIFNWR0xv
Y2F0YWJsZTo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudChjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50
KQpAQCAtMTAxLDcgKzEwMSw3IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdMb2NhdGFibGU6OmdldFRy
YW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50KiB0YXJnZXQsIEV4Y2VwdGlvCiB7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIGN0bSA9IGdldENUTShzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIAotICAgIGlm
ICh0YXJnZXQgJiYgaXM8U1ZHR3JhcGhpY3NFbGVtZW50Pih0YXJnZXQpKSB7CisgICAgaWYgKGlz
PFNWR0dyYXBoaWNzRWxlbWVudD4odGFyZ2V0KSkgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
dGFyZ2V0Q1RNID0gZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50PigqdGFyZ2V0KS5nZXRDVE0o
c3R5bGVVcGRhdGVTdHJhdGVneSk7CiAgICAgICAgIGlmICghdGFyZ2V0Q1RNLmlzSW52ZXJ0aWJs
ZSgpKSB7CiAgICAgICAgICAgICBlYyA9IFNWR0V4Y2VwdGlvbjo6U1ZHX01BVFJJWF9OT1RfSU5W
RVJUQUJMRTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAKaW5kZXggYjVmOGE3
MjhhNDRiMGI0ZDUzZjljZDE5ODgzN2IyNjYzNzk5MTQ0Ni4uN2NhNWIwZTc5ODE0ZjMwNjc1YzU0
NDdiMjgzZTljZjY4NTI4NjE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01Q
YXRoRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5j
cHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIFNWR01QYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIFNWR1BhdGhFbGVtZW50KiBT
VkdNUGF0aEVsZW1lbnQ6OnBhdGhFbGVtZW50KCkKIHsKICAgICBFbGVtZW50KiB0YXJnZXQgPSB0
YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIGRvY3VtZW50KCkpOwotICAgIGlmICh0
YXJnZXQgJiYgaXM8U1ZHUGF0aEVsZW1lbnQ+KHRhcmdldCkpCisgICAgaWYgKGlzPFNWR1BhdGhF
bGVtZW50Pih0YXJnZXQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHUGF0aEVsZW1lbnQ+
KHRhcmdldCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9p
ZCBTVkdNUGF0aEVsZW1lbnQ6OnRhcmdldFBhdGhDaGFuZ2VkKCkKIAogdm9pZCBTVkdNUGF0aEVs
ZW1lbnQ6Om5vdGlmeVBhcmVudE9mUGF0aENoYW5nZShDb250YWluZXJOb2RlKiBwYXJlbnQpCiB7
Ci0gICAgaWYgKHBhcmVudCAmJiBpczxTVkdBbmltYXRlTW90aW9uRWxlbWVudD4ocGFyZW50KSkK
KyAgICBpZiAoaXM8U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ+KHBhcmVudCkpCiAgICAgICAgIGRv
d25jYXN0PFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50PigqcGFyZW50KS51cGRhdGVBbmltYXRpb25Q
YXRoKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCmluZGV4IDEyYzRh
Mzg1YTk0MGFmM2E2ZGJjM2UyYTNjZGFlNDBlMWJhMWJmN2IuLjA1NWZlMDM3MTljZDdhYjgxNWE5
NjM4YzZmZGMxMzQ0ZWY2NjZkZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNw
cApAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0
aERlcGVuZGVuY2llcygpCiAgICAgLy8gbWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52
YWxpZGF0aW9uIHNvIHdlIHVwZGF0ZSBhbnkgbXBhdGggZGVwZW5kZW5jaWVzIG1hbnVhbGx5Lgog
ICAgIGlmIChIYXNoU2V0PFNWR0VsZW1lbnQqPiogZGVwZW5kZW5jaWVzID0gZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KHRoaXMp
KSB7CiAgICAgICAgIGZvciAoYXV0byogZWxlbWVudCA6ICpkZXBlbmRlbmNpZXMpIHsKLSAgICAg
ICAgICAgIGlmIChpczxTVkdNUGF0aEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAgICAgaWYg
KGlzPFNWR01QYXRoRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgICAgIGRvd25jYXN0
PFNWR01QYXRoRWxlbWVudD4oKmVsZW1lbnQpLnRhcmdldFBhdGhDaGFuZ2VkKCk7CiAgICAgICAg
IH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAppbmRleCA5
YmQ0ZTg1Y2ViNWI4MzhmMDdhMTQ2ZmEzNWE2ZjE0ZmM0Y2Y2YWUwLi45YjNjN2FmNjFkN2VmODlm
NzU5MDVjYjVjZjM5YjYyNjU0NDY1YWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0dGVybkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJu
RWxlbWVudC5jcHAKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50Ojpj
b2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMoUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiAK
ICAgICAgICAgLy8gUmVzcGVjdCB4bGluazpocmVmLCB0YWtlIGF0dHJpYnV0ZXMgZnJvbSByZWZl
cmVuY2VkIGVsZW1lbnQKICAgICAgICAgRWxlbWVudCogcmVmRWxlbWVudCA9IFNWR1VSSVJlZmVy
ZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoY3VycmVudC0+aHJlZigpLCBkb2N1bWVu
dCgpKTsKLSAgICAgICAgaWYgKHJlZkVsZW1lbnQgJiYgaXM8U1ZHUGF0dGVybkVsZW1lbnQ+KHJl
ZkVsZW1lbnQpKSB7CisgICAgICAgIGlmIChpczxTVkdQYXR0ZXJuRWxlbWVudD4ocmVmRWxlbWVu
dCkpIHsKICAgICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2FzdDxTVkdQYXR0ZXJuRWxlbWVudD4o
cmVmRWxlbWVudCk7CiAKICAgICAgICAgICAgIC8vIEN5Y2xlIGRldGVjdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAppbmRleCBiMWY1OTZm
ODdjYzZiNTU4ZWQxNzMwNzYzMDU0NGU1ZTFmYmFlOTg2Li44MjExN2YxNjg5MWEwYzBhY2ZkYTQw
ZjMzODcwNTA2OTQzYzExNWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50LmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIGJvb2wgU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50Ojpjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFJhZGlhbEdyYWRpZW50QXR0
cmlidXRlCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgLy8gUmVzcGVjdCB4bGluazpocmVm
LCB0YWtlIGF0dHJpYnV0ZXMgZnJvbSByZWZlcmVuY2VkIGVsZW1lbnQKICAgICAgICAgTm9kZSog
cmVmTm9kZSA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoY3Vy
cmVudC0+aHJlZigpLCBkb2N1bWVudCgpKTsKLSAgICAgICAgaWYgKHJlZk5vZGUgJiYgaXM8U1ZH
R3JhZGllbnRFbGVtZW50PigqcmVmTm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPFNWR0dyYWRpZW50
RWxlbWVudD4ocmVmTm9kZSkpIHsKICAgICAgICAgICAgIGN1cnJlbnQgPSBkb3duY2FzdDxTVkdH
cmFkaWVudEVsZW1lbnQ+KHJlZk5vZGUpOwogCiAgICAgICAgICAgICAvLyBDeWNsZSBkZXRlY3Rp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAppbmRleCBjMTRjYzNiNTZmYTI0OWY0
NDhhMTRlMjk4MTk3ZTMwMGFiMmE0YzcxLi5mNDFhMzQ0YzU3MjZmNzgxZDMxZjY1MWE5YTYyODIy
MWEzYzMyMWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCkBAIC02NjEsMTAg
KzY2MSwxMCBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldHVwSW5pdGlhbFZpZXcoY29uc3QgU3Ry
aW5nJiBmcmFnbWVudElkZW50aWZpZXIsIEVsZW1lbnQqCiAgICAgLy8gb3IgTXlEcmF3aW5nLnN2
ZyN4cG9pbnRlcihpZCgnTXlWaWV3JykpKSB0aGVuIHRoZSBjbG9zZXN0IGFuY2VzdG9yIOKAmHN2
Z+KAmSBlbGVtZW50IGlzIGRpc3BsYXllZCBpbiB0aGUgdmlld3BvcnQuCiAgICAgLy8gQW55IHZp
ZXcgc3BlY2lmaWNhdGlvbiBhdHRyaWJ1dGVzIGluY2x1ZGVkIG9uIHRoZSBnaXZlbiDigJh2aWV3
4oCZIGVsZW1lbnQgb3ZlcnJpZGUgdGhlIGNvcnJlc3BvbmRpbmcgdmlldyBzcGVjaWZpY2F0aW9u
CiAgICAgLy8gYXR0cmlidXRlcyBvbiB0aGUgY2xvc2VzdCBhbmNlc3RvciDigJhzdmfigJkgZWxl
bWVudC4KLSAgICBpZiAoYW5jaG9yTm9kZSAmJiBpczxTVkdWaWV3RWxlbWVudD4oYW5jaG9yTm9k
ZSkpIHsKKyAgICBpZiAoaXM8U1ZHVmlld0VsZW1lbnQ+KGFuY2hvck5vZGUpKSB7CiAgICAgICAg
IFNWR1ZpZXdFbGVtZW50JiB2aWV3RWxlbWVudCA9IGRvd25jYXN0PFNWR1ZpZXdFbGVtZW50Pigq
YW5jaG9yTm9kZSk7CiAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBTVkdMb2NhdGFibGU6
Om5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoJnZpZXdFbGVtZW50KTsKLSAgICAgICAgaWYgKGlzPFNW
R1NWR0VsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChpczxTVkdTVkdFbGVtZW50Pigq
ZWxlbWVudCkpIHsKICAgICAgICAgICAgIFNWR1NWR0VsZW1lbnQmIHN2ZyA9IGRvd25jYXN0PFNW
R1NWR0VsZW1lbnQ+KCplbGVtZW50KTsKICAgICAgICAgICAgIHN2Zy5pbmhlcml0Vmlld0F0dHJp
YnV0ZXMoJnZpZXdFbGVtZW50KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RleHRDb250ZW50RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRl
bnRFbGVtZW50LmNwcAppbmRleCA3MTc0ODhhNTQ0NzJlYWFhMzdmMmM2ZmZkOGQ2NjY4Mzc2NzUz
NWI2Li4yYzY0YTBlZDlkODg1NDJlYmFiYzY2ZThhMTY0ODQ3ZWRlZjVhNDk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcApAQCAtMjk2LDcgKzI5Niw3
IEBAIFNWR1RleHRDb250ZW50RWxlbWVudCogU1ZHVGV4dENvbnRlbnRFbGVtZW50OjplbGVtZW50
RnJvbVJlbmRlcmVyKFJlbmRlck9iamVjdCoKICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gZG93
bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSk7CiAgICAgQVNTRVJUKGVsZW1lbnQp
OwogCi0gICAgaWYgKCFpczxTVkdUZXh0Q29udGVudEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlm
ICghaXM8U1ZHVGV4dENvbnRlbnRFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgcmV0dXJuIGRvd25jYXN0PFNWR1RleHRDb250ZW50RWxlbWVudD4oZWxl
bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggNjY3Y2RmYzIxNDgx
Y2M1N2Y5NWQ3NTVmMDg5M2VjNjJkYTVjYjY1OC4uZWVmYzc3MTU1NjkzMTdmNzI1NGQ2MWU5ZWYx
Y2NiZTEyNGJlOTRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcApAQCAtMjgy
LDcgKzI4Miw3IEBAIHN0YXRpYyB2b2lkIGR1bXBJbnN0YW5jZVRyZWUodW5zaWduZWQgaW50JiBk
ZXB0aCwgU3RyaW5nJiB0ZXh0LCBTVkdFbGVtZW50SW5zdGFuCiAgICAgU1ZHRWxlbWVudCogZWxl
bWVudCA9IHRhcmdldEluc3RhbmNlLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpOwogICAgIEFTU0VS
VChlbGVtZW50KTsKIAotICAgIGlmIChpczxTVkdVc2VFbGVtZW50PihlbGVtZW50KSkgeworICAg
IGlmIChpczxTVkdVc2VFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgaWYgKGRvd25jYXN0
PFNWR1VzZUVsZW1lbnQ+KCplbGVtZW50KS5jYWNoZWREb2N1bWVudElzU3RpbGxMb2FkaW5nKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTQ0LDkgKzU0NCw2IEBAIHZvaWQgU1ZH
VXNlRWxlbWVudDo6dG9DbGlwUGF0aChQYXRoJiBwYXRoKQogICAgIEFTU0VSVChwYXRoLmlzRW1w
dHkoKSk7CiAKICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gbV90YXJnZXRFbGVtZW50SW5zdGFu
Y2UgPyBtX3RhcmdldEVsZW1lbnRJbnN0YW5jZS0+c2hhZG93VHJlZUVsZW1lbnQoKSA6IG51bGxw
dHI7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoaXM8U1ZH
R3JhcGhpY3NFbGVtZW50PihlbGVtZW50KSkgewogICAgICAgICBpZiAoIWlzRGlyZWN0UmVmZXJl
bmNlKCplbGVtZW50KSkgewogICAgICAgICAgICAgLy8gU3BlYzogSW5kaXJlY3QgcmVmZXJlbmNl
cyBhcmUgYW4gZXJyb3IgKDE0LjMuNSkKQEAgLTcxMCw3ICs3MDcsNyBAQCB2b2lkIFNWR1VzZUVs
ZW1lbnQ6OmV4cGFuZFVzZUVsZW1lbnRzSW5TaGFkb3dUcmVlKE5vZGUqIGVsZW1lbnQpCiAgICAg
Ly8gY29udGFpbnMgPHVzZT4gdGFncywgd2UnZCBtaXNzIHRoZW0uIFNvIG9uY2Ugd2UncmUgZG9u
ZSB3aXRoIHNldHRpbicgdXAgdGhlCiAgICAgLy8gYWN0dWFsIHNoYWRvdyB0cmVlIChhZnRlciB0
aGUgc3BlY2lhbCBjYXNlIG1vZGlmaWNhdGlvbiBmb3Igc3ZnL3N5bWJvbCkgd2UgaGF2ZQogICAg
IC8vIHRvIHdhbGsgaXQgY29tcGxldGVseSBhbmQgZXhwYW5kIGFsbCA8dXNlPiBlbGVtZW50cy4K
LSAgICBpZiAoaXM8U1ZHVXNlRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICBpZiAoaXM8U1ZHVXNl
RWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgIFNWR1VzZUVsZW1lbnQmIHVzZSA9IGRvd25j
YXN0PFNWR1VzZUVsZW1lbnQ+KCplbGVtZW50KTsKICAgICAgICAgQVNTRVJUKCF1c2UuY2FjaGVk
RG9jdW1lbnRJc1N0aWxsTG9hZGluZygpKTsKIApAQCAtNzYyLDcgKzc1OSw3IEBAIHZvaWQgU1ZH
VXNlRWxlbWVudDo6ZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1RyZWUoTm9kZSogZWxlbWVudCkK
IAogdm9pZCBTVkdVc2VFbGVtZW50OjpleHBhbmRTeW1ib2xFbGVtZW50c0luU2hhZG93VHJlZShO
b2RlKiBub2RlKQogewotICAgIGlmIChpczxTVkdTeW1ib2xFbGVtZW50Pihub2RlKSkgeworICAg
IGlmIChpczxTVkdTeW1ib2xFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgLy8gU3BlYzogVGhl
IHJlZmVyZW5jZWQgJ3N5bWJvbCcgYW5kIGl0cyBjb250ZW50cyBhcmUgZGVlcC1jbG9uZWQgaW50
byB0aGUgZ2VuZXJhdGVkIHRyZWUsCiAgICAgICAgIC8vIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0
IHRoZSAnc3ltYm9sJyBpcyByZXBsYWNlZCBieSBhbiAnc3ZnJy4gVGhpcyBnZW5lcmF0ZWQgJ3N2
Zycgd2lsbAogICAgICAgICAvLyBhbHdheXMgaGF2ZSBleHBsaWNpdCB2YWx1ZXMgZm9yIGF0dHJp
YnV0ZXMgd2lkdGggYW5kIGhlaWdodC4gSWYgYXR0cmlidXRlcyB3aWR0aCBhbmQvb3IKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAKaW5kZXggODE5YWIxZTA5NGM4NzRhMGQ0Yzkx
NWQxODkyMTRjOWQ3ZmIwZmU3Yy4uYjg0YzNlNzllMzQzNzlkNTI2ZGU5NTYxNmUxMDUxMjE5NWRj
YzYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAKQEAgLTQ0LDcgKzQ0
LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdWS2VybkVsZW1lbnQ6
Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJgogewogICAgIGlmIChyb290UGFyZW50LmluRG9j
dW1lbnQoKSkgewogICAgICAgICBDb250YWluZXJOb2RlKiBmb250Tm9kZSA9IHBhcmVudE5vZGUo
KTsKLSAgICAgICAgaWYgKGZvbnROb2RlICYmIGlzPFNWR0ZvbnRFbGVtZW50Pihmb250Tm9kZSkp
CisgICAgICAgIGlmIChpczxTVkdGb250RWxlbWVudD4oZm9udE5vZGUpKQogICAgICAgICAgICAg
ZG93bmNhc3Q8U1ZHRm9udEVsZW1lbnQ+KCpmb250Tm9kZSkuaW52YWxpZGF0ZUdseXBoQ2FjaGUo
KTsKICAgICB9CiAKQEAgLTU0LDcgKzU0LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9u
UmVxdWVzdCBTVkdWS2VybkVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJgogdm9p
ZCBTVkdWS2VybkVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQp
CiB7CiAgICAgQ29udGFpbmVyTm9kZSogZm9udE5vZGUgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYg
KGZvbnROb2RlICYmIGlzPFNWR0ZvbnRFbGVtZW50Pihmb250Tm9kZSkpCisgICAgaWYgKGlzPFNW
R0ZvbnRFbGVtZW50Pihmb250Tm9kZSkpCiAgICAgICAgIGRvd25jYXN0PFNWR0ZvbnRFbGVtZW50
PigqZm9udE5vZGUpLmludmFsaWRhdGVHbHlwaENhY2hlKCk7CiAKICAgICBTVkdFbGVtZW50Ojpy
ZW1vdmVkRnJvbShyb290UGFyZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5jcHAKaW5kZXggZDU0NWU5ZGRlYTEyNWJhMzdkYzhhY2QwZDVlODM4
OTYxY2RmOGI3OC4uYzI5OTIyZGU5NDQ4OGQ3MGE5NDI0YzAzNTFiOGU3Zjk5ODhjNjE4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKQEAg
LTE2NSwxMCArMTY1LDEwIEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291
cmNlKCkKICAgICBTdHJpbmcgaHJlZiA9IGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0
cik7CiAgICAgRWxlbWVudCogdGFyZ2V0OwogICAgIGlmIChocmVmLmlzRW1wdHkoKSkKLSAgICAg
ICAgdGFyZ2V0ID0gcGFyZW50Tm9kZSgpICYmIGlzPEVsZW1lbnQ+KHBhcmVudE5vZGUoKSkgPyBk
b3duY2FzdDxFbGVtZW50PihwYXJlbnROb2RlKCkpIDogbnVsbHB0cjsKKyAgICAgICAgdGFyZ2V0
ID0gaXM8RWxlbWVudD4ocGFyZW50Tm9kZSgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5v
ZGUoKSkgOiBudWxscHRyOwogICAgIGVsc2UKICAgICAgICAgdGFyZ2V0ID0gU1ZHVVJJUmVmZXJl
bmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmLCBkb2N1bWVudCgpLCAmaWQpOwot
ICAgIFNWR0VsZW1lbnQqIHN2Z1RhcmdldCA9IHRhcmdldCAmJiBpczxTVkdFbGVtZW50Pih0YXJn
ZXQpID8gZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0KSA6IG51bGxwdHI7CisgICAgU1ZHRWxl
bWVudCogc3ZnVGFyZ2V0ID0gaXM8U1ZHRWxlbWVudD4odGFyZ2V0KSA/IGRvd25jYXN0PFNWR0Vs
ZW1lbnQ+KHRhcmdldCkgOiBudWxscHRyOwogCiAgICAgaWYgKHN2Z1RhcmdldCAmJiAhc3ZnVGFy
Z2V0LT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHN2Z1RhcmdldCA9IG51bGxwdHI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKaW5kZXggOWUxYjdjODgz
YWJkMTBlYTZlZjY0ZjA1M2RiNDczOWIxMDVjMzZlZi4uOThlNTBmNjIzMjJjOWFkNTkxOTBhYTFm
ZTI2MGFiY2ZlYWE5OTE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZUNhY2hlLmNwcApAQCAtOTIsNyArOTIsNyBAQCBJbWFnZSogU1ZHSW1hZ2VDYWNoZTo6aW1h
Z2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIFJlZlB0cjxT
VkdJbWFnZUZvckNvbnRhaW5lcj4gaW1hZ2VGb3JDb250YWluZXIgPSBpdC0+dmFsdWU7CiAgICAg
CiAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKG5vZGUgJiYgaXM8
SFRNTEltYWdlRWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoaXM8SFRNTEltYWdlRWxlbWVudD4o
bm9kZSkpIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB1cmxTdHJpbmcgPSBkb3duY2Fz
dDxIVE1MSW1hZ2VFbGVtZW50Pigqbm9kZSkuaW1hZ2VTb3VyY2VVUkwoKTsKICAgICAgICAgVVJM
IHVybCA9IG5vZGUtPmRvY3VtZW50KCkuY29tcGxldGVVUkwodXJsU3RyaW5nKTsKICAgICAgICAg
aW1hZ2VGb3JDb250YWluZXItPnNldFVSTCh1cmwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCmluZGV4IDQ0MTU3NTAyNmQ0MGUxNzZhMzZkNTc3MzZkNjdlODcxNTJkZWNlYWQuLjY1
NDk1NTBiZWIyMzI5YzQyNDMzYTFlMTdlNTg1MTdjMDI0YjlmNzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKQEAgLTU4MSw3ICs1ODEsNyBAQCBOb2RlKiBJbnRlcm5hbHM6OnNo
YWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKIFN0cmluZyBJbnRl
cm5hbHM6OnNoYWRvd1Jvb3RUeXBlKGNvbnN0IE5vZGUqIHJvb3QsIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAogewotICAgIGlmICghcm9vdCB8fCAhaXM8U2hhZG93Um9vdD4ocm9vdCkpIHsKKyAg
ICBpZiAoIWlzPFNoYWRvd1Jvb3Q+KHJvb3QpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NF
U1NfRVJSOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQpAQCAtNjIzLDcgKzYyMyw3
IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRTaGFkb3dQc2V1ZG9JZChFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBTdHJpbmcmIGlkLCBFeGNlcHRpb25DCiAKIFN0cmluZyBJbnRlcm5hbHM6OnZpc2libGVQ
bGFjZWhvbGRlcihFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmIChlbGVtZW50ICYmIGlzPEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICBpZiAoaXM8SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKSB7CiAgICAgICAgIGNvbnN0IEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50JiB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KTsKICAgICAgICAgaWYgKCF0ZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmlzUGxhY2Vob2xkZXJWaXNpYmxlKCkpCiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CkBAIC02MzcsNyArNjM3LDcgQEAgU3RyaW5nIEludGVybmFsczo6dmlzaWJs
ZVBsYWNlaG9sZGVyKEVsZW1lbnQqIGVsZW1lbnQpCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09M
T1IpCiB2b2lkIEludGVybmFsczo6c2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3NlcihFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBTdHJpbmcmIGNvbG9yVmFsdWUpCiB7Ci0gICAgaWYgKCFpczxIVE1MSW5w
dXRFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuOwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQpCkBA
IC05MTIsNyArOTEyLDcgQEAgYm9vbCBJbnRlcm5hbHM6Ondhc0xhc3RDaGFuZ2VVc2VyRWRpdChF
bGVtZW50KiB0ZXh0RmllbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmIChIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0ZXh0RmllbGQtPnRvSW5wdXRFbGVtZW50KCkpCiAgICAg
ICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogCi0gICAg
aWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KHRleHRGaWVsZCkpCisgICAgaWYgKGlzPEhUTUxU
ZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0RmllbGQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TFRleHRBcmVhRWxlbWVudD4oKnRleHRGaWVsZCkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7CiAK
ICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKQEAgLTE5MTYsOSArMTkxNiw5IEBAIHZv
aWQgSW50ZXJuYWxzOjp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHNBbmRSdW5Q
b3N0TGF5b3V0VGFza3MoTm9kZSoKICAgICBEb2N1bWVudCogZG9jdW1lbnQ7CiAgICAgaWYgKCFu
b2RlKQogICAgICAgICBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwotICAgIGVsc2UgaWYg
KGlzPERvY3VtZW50Pihub2RlKSkKKyAgICBlbHNlIGlmIChpczxEb2N1bWVudD4oKm5vZGUpKQog
ICAgICAgICBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihub2RlKTsKLSAgICBlbHNlIGlm
IChpczxIVE1MSUZyYW1lRWxlbWVudD4obm9kZSkpCisgICAgZWxzZSBpZiAoaXM8SFRNTElGcmFt
ZUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgZG9jdW1lbnQgPSBkb3duY2FzdDxIVE1MSUZyYW1l
RWxlbWVudD4oKm5vZGUpLmNvbnRlbnREb2N1bWVudCgpOwogICAgIGVsc2UgewogICAgICAgICBl
YyA9IFR5cGVFcnJvcjsKQEAgLTIwODMsNyArMjA4Myw3IEBAIHZvaWQgSW50ZXJuYWxzOjpzaW11
bGF0ZUF1ZGlvSW50ZXJydXB0aW9uKE5vZGUqIG5vZGUpCiAKIGJvb2wgSW50ZXJuYWxzOjppc1Nl
bGVjdFBvcHVwVmlzaWJsZShOb2RlKiBub2RlKQogewotICAgIGlmICghaXM8SFRNTFNlbGVjdEVs
ZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCA9IGRv
d25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pigqbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKaW5kZXggYWVhOGU0YTkwZDQxMWVlYzg3
N2IwZDQ5ZTM5Zjk3MGYzMjQyMjJmMS4uYWFmZDEyYWQxNWM2MTkxODI2YjIwMzNmYWNjYWJlYjUx
YjJhNzdlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVz
dFN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RT
dXBwb3J0LmNwcApAQCAtNDYsNyArNDYsNyBAQCB2b2lkIGluamVjdEludGVybmFsc09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCkKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7Ci0gICAgaWYgKGlzPERvY3VtZW50PihzY3JpcHRDb250ZXh0KSkKKyAgICBpZiAoaXM8RG9j
dW1lbnQ+KCpzY3JpcHRDb250ZXh0KSkKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIEludGVybmFsczo6Y3JlYXRlKGRvd25jYXN0PERvY3VtZW50
PihzY3JpcHRDb250ZXh0KSkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAKaW5kZXggNGQ1MzRlZTlhOGY1ZmMzMjU5OGI0OGRhZTU5YjVmMDBhYzYyMjU3ZS4uODMwMzFi
OGRiYTI1NGUxNzdmODcxZmNjOGUzNTgyMTcxY2U5NjY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCkBAIC00ODcsNyArNDg3LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
b3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIEV4
Y2UKIAogICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gY2hlY2sgdGhlIGlzb2xhdGVkIHdv
cmxkJ3MgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgb25jZSB3ZWJraXQub3JnL2IvMTA0NTIwIGlz
IHNvbHZlZC4KICAgICBib29sIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBv
bGljeSA9IGZhbHNlOwotICAgIGlmIChpczxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKSkgeworICAgIGlmIChpczxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkp
IHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgICAgICBpZiAoZG9jdW1lbnQuZnJhbWUoKSkKICAg
ICAgICAgICAgIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSA9IGRv
Y3VtZW50LmZyYW1lKCktPnNjcmlwdCgpLnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1
cml0eVBvbGljeSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rp
b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKaW5kZXggMWZm
ODM4NDA0MGI1NGY5ZTJkODAzMDdjYjNkN2M3YzEzNGQ3MDQxNy4uMjE2YTMxZTdkYWU0NzJhMGIy
M2RhNmVjNTYzYTg2MTUwNzA0MzdjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMu
Y3BwCkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgZXhwYW5kZWROYW1l
TG9jYWxQYXJ0KE5vZGUqIG5vZGUpCiB7CiAgICAgLy8gVGhlIGxvY2FsIHBhcnQgb2YgYW4gWFBh
dGggZXhwYW5kZWQtbmFtZSBtYXRjaGVzIERPTSBsb2NhbCBuYW1lIGZvciBtb3N0IG5vZGUgdHlw
ZXMsIGV4Y2VwdCBmb3IgbmFtZXNwYWNlIG5vZGVzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9u
IG5vZGVzLgogICAgIEFTU0VSVChub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OlhQQVRIX05BTUVT
UEFDRV9OT0RFKTsgLy8gTm90IHN1cHBvcnRlZCB5ZXQuCi0gICAgaWYgKGlzPFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbj4obm9kZSkpCisgICAgaWYgKGlzPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKm5v
ZGUpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPigqbm9k
ZSkudGFyZ2V0KCk7CiAgICAgcmV0dXJuIG5vZGUtPmxvY2FsTmFtZSgpLnN0cmluZygpOwogfQpA
QCAtNTgzLDcgKzU4Myw3IEBAIFZhbHVlIEZ1bkxhbmc6OmV2YWx1YXRlKCkgY29uc3QKICAgICBj
b25zdCBBdHRyaWJ1dGUqIGxhbmd1YWdlQXR0cmlidXRlID0gbnVsbHB0cjsKICAgICBOb2RlKiBu
b2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlLmdldCgpOwogICAgIHdoaWxlIChub2RlKSB7
Ci0gICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgeworICAgICAgICBpZiAoaXM8RWxlbWVu
dD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxl
bWVudD4oKm5vZGUpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlcygpKQog
ICAgICAgICAgICAgICAgIGxhbmd1YWdlQXR0cmlidXRlID0gZWxlbWVudC5maW5kQXR0cmlidXRl
QnlOYW1lKFhNTE5hbWVzOjpsYW5nQXR0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhOb2RlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuY3Bw
CmluZGV4IGI4NjE2ODEyNjgwYWZiOTJlMTJmYzMzY2EwZDg5NjBiYjA5ZWY5ZDUuLjAzMzJmZGVj
ZjdhNTM5YWJjOTQ3ZmMzMDQ4MTBjNDc1YTNiNjc2NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aE5vZGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5v
ZGVTZXQuY3BwCkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyB2b2lkIHNvcnRCbG9jayh1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCB0bywgVmVjdG9yPFZlY3RvcjxOb2RlKj4+JiBwYXJlbnRNCiAgICAg
ICAgIC8vIEZJWE1FOiBuYW1lc3BhY2Ugbm9kZXMgYXJlIG5vdCBpbXBsZW1lbnRlZC4KICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc29ydGVkRW5kOyBpIDwgdG87ICsraSkgewogICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IHBhcmVudE1hdHJpeFtpXVswXTsKLSAgICAgICAgICAgIGlmIChpczxB
dHRyPihub2RlKSAmJiBkb3duY2FzdDxBdHRyPigqbm9kZSkub3duZXJFbGVtZW50KCkgPT0gY29t
bW9uQW5jZXN0b3IpCisgICAgICAgICAgICBpZiAoaXM8QXR0cj4oKm5vZGUpICYmIGRvd25jYXN0
PEF0dHI+KCpub2RlKS5vd25lckVsZW1lbnQoKSA9PSBjb21tb25BbmNlc3RvcikKICAgICAgICAg
ICAgICAgICBwYXJlbnRNYXRyaXhbaV0uc3dhcChwYXJlbnRNYXRyaXhbc29ydGVkRW5kKytdKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoc29ydGVkRW5kICE9IGZyb20pIHsKQEAgLTE1Nyw3ICsx
NTcsNyBAQCB2b2lkIE5vZGVTZXQ6OnNvcnQoKSBjb25zdAogICAgICAgICBWZWN0b3I8Tm9kZSo+
JiBwYXJlbnRzVmVjdG9yID0gcGFyZW50TWF0cml4W2ldOwogICAgICAgICBOb2RlKiBub2RlID0g
bV9ub2Rlc1tpXS5nZXQoKTsKICAgICAgICAgcGFyZW50c1ZlY3Rvci5hcHBlbmQobm9kZSk7Ci0g
ICAgICAgIGlmIChpczxBdHRyPihub2RlKSkgeworICAgICAgICBpZiAoaXM8QXR0cj4oKm5vZGUp
KSB7CiAgICAgICAgICAgICBub2RlID0gZG93bmNhc3Q8QXR0cj4oKm5vZGUpLm93bmVyRWxlbWVu
dCgpOwogICAgICAgICAgICAgcGFyZW50c1ZlY3Rvci5hcHBlbmQobm9kZSk7CiAgICAgICAgICAg
ICBjb250YWluc0F0dHJpYnV0ZU5vZGVzID0gdHJ1ZTsKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lk
IE5vZGVTZXQ6OnNvcnQoKSBjb25zdAogCiBzdGF0aWMgTm9kZSogZmluZFJvb3ROb2RlKE5vZGUq
IG5vZGUpCiB7Ci0gICAgaWYgKGlzPEF0dHI+KG5vZGUpKQorICAgIGlmIChpczxBdHRyPigqbm9k
ZSkpCiAgICAgICAgIG5vZGUgPSBkb3duY2FzdDxBdHRyPigqbm9kZSkub3duZXJFbGVtZW50KCk7
CiAgICAgaWYgKG5vZGUtPmluRG9jdW1lbnQoKSkKICAgICAgICAgbm9kZSA9ICZub2RlLT5kb2N1
bWVudCgpOwpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgTm9kZVNldDo6dHJhdmVyc2FsU29ydCgp
IGNvbnN0CiAgICAgICAgIGlmIChub2Rlcy5jb250YWlucyhub2RlKSkKICAgICAgICAgICAgIHNv
cnRlZE5vZGVzLmFwcGVuZChub2RlKTsKIAotICAgICAgICBpZiAoIWNvbnRhaW5zQXR0cmlidXRl
Tm9kZXMgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoIWNvbnRhaW5zQXR0cmli
dXRlTm9kZXMgfHwgIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAKaW5kZXggOTZkYWNmN2M3ZTFkYTU0ZWFkYjNmOWVlMGYyMmQ5MzI5Mzk1YmUzZS4u
YWYxMGM2YzU1ZjU5MjM2YWI4OTk5ODAxMWEyNTk3ZGU2NWU3M2E5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApA
QCAtNjIyLDcgKzYyMiw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihE
b2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50CiAgICAgICAgIGVsZW1T
dGFjay5hcHBlbmQocGFyZW50RWxlbWVudCk7CiAKICAgICAgICAgQ29udGFpbmVyTm9kZSogbm9k
ZSA9IHBhcmVudEVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgaWYgKCFub2RlIHx8ICFp
czxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBwYXJlbnRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4o
bm9kZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50SU9TLm1tIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50SU9TLm1tCmluZGV4IDE4NWM2NjMxY2VhMWNlMWE1NTEwZWJjYWRi
NDcyNTY1MWU1OWM0ZDguLjhkMDViMzRlYTI5MzkzODgyNjYzMTdjNWI4ZDVkNjUyOWE1ZGEwMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnRJT1MubW0KQEAgLTMwOSw4ICszMDksNiBAQCB2b2lkIFdlYkNocm9tZUNsaWVudElP
Uzo6d2ViQXBwT3JpZW50YXRpb25zVXBkYXRlZCgpCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50SU9T
Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVs
ZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQppbmRleCBlMWRjMTBkZmM0MjU0NGJkYTZi
NmE4ODdhNmQzNjZkMzMxMmViNmU5Li4xNmMxNDYzMjU1MDk1MzNiOTY5MTkxZmQyZWFmNTc3ZjZm
ZmQ3NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50Lm1tCkBAIC0yMTgsOCArMjE4LDYgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAKIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAo
IWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+
KGVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA4ODQwNTQ5MDM0MjcxYjYw
OWFhYjY1MWI3YTI5NzI0MDM0YWM3NmNjLi4xOGY0ZTEyYTQ4ODdlMzczMzEzYTRjNTlkMWM4OTg3
Yzk2MmE4OWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC03MDUsNyArNzA1LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGll
bnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50KiBldmVudCkKIAogdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlbGVt
ZW50KQogewotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IERPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdChkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PihlbGVtZW50KSk7CkBAIC03MTUsNyArNzE1LDcgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogCiB2b2lk
IFdlYkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlbGVtZW50
KQogewotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKCFp
czxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERP
TUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdChkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50PihlbGVtZW50KSk7CkBAIC03MjUsNyArNzI1LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKIAogdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChFbGVtZW50KiBlbGVtZW50KQog
ewotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKCFpczxI
VE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAogI2lmICFQTEFU
Rk9STShJT1MpCkBAIC03NjMsNyArNzYzLDcgQEAgc3RhdGljIFNFTCBzZWxlY3RvckZvcktleUV2
ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6ZG9UZXh0
RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqIGVsZW1lbnQsIEtleWJvYXJkRXZlbnQqIGV2
ZW50KQogewotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBOTzsKIAog
ICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGtpdChkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50PihlbGVtZW50KSk7CkBAIC03NzUsNyArNzc1LDcgQEAgYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiBlbGVtZW50LCBL
ZXlib2FyZEV2ZW4KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxsQmVEZWxldGVkSW5U
ZXh0RmllbGQoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1l
bnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBET01IVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSBraXQoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpOwpAQCAtNzg2LDcgKzc4
Niw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxk
KEVsZW1lbnQqIGVsZW1lbnQpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdl
SW5UZXh0QXJlYShFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghaXM8SFRNTFRleHRBcmVh
RWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MVGV4dEFyZWFFbGVtZW50PigqZWxl
bWVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHRl
eHRBcmVhRWxlbWVudCA9IGtpdChkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNl
bnRhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0
aW9uLm1tCmluZGV4IDg0ZDM1MzE3M2JlOWVkZjBjNzM4MmJkMmQ0Y2I2YWY5YmRhZjk5NDQuLjZl
NDBhZTUwNTM2MDZiMGEzZjJmMWEyZWQ3ZTNmMzllMmE4MWZlMmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCkBAIC0zMDUsNyAr
MzA1LDcgQEAgLSAoRE9NRWxlbWVudCAqKWVsZW1lbnRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1l
IGluRm9ybTooRE9NRWxlbWVudCAqKWZvcm0KIHN0YXRpYyBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50KiBlbGVtZW50KQogewogICAgIEVsZW1l
bnQqIG5vZGUgPSBjb3JlKGVsZW1lbnQpOwotICAgIHJldHVybiBub2RlICYmIGlzPEhUTUxJbnB1
dEVsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4obm9kZSkgOiBudWxs
cHRyOworICAgIHJldHVybiBpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSA/IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KG5vZGUpIDogbnVsbHB0cjsKIH0KIAogLSAoQk9PTCllbGVtZW50RG9l
c0F1dG9Db21wbGV0ZTooRE9NRWxlbWVudCAqKWVsZW1lbnQKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBz
dGF0aWMgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoRnJhbWUqIGZyYW1l
LCBOU0FycmF5KiBsYWJlbHMsIEVsZQogICAgIGZvciAobiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZp
b3VzKGVsZW1lbnQpOwogICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hhcnNTZWFyY2hl
ZFRocmVzaG9sZDsKICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG4pKSB7Ci0g
ICAgICAgIGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KG4pIHx8IGlzPEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+KG4pKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KCpuKSB8fCBpczxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbikpIHsKICAgICAgICAgICAgIC8vIFdlIGhpdCBhbm90
aGVyIGZvcm0gZWxlbWVudCBvciB0aGUgc3RhcnQgb2YgdGhlIGZvcm0gLSBiYWlsIG91dAogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViUmVuZGVyTGF5ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlJlbmRlckxheWVyLm1tCmluZGV4IDg0ZmIzNzYwMGIzM2FkNzZhZjcxNjdjOTNiNGFjMmI1ZDg5
ZWJhODUuLjg3OGYzNDkxOWJkYjRmNGMwNWNkZGFjYzBiNGRmNTlkYmRlYWU4ODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTGF5ZXIubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJSZW5kZXJMYXllci5tbQpAQCAtNTIsNyArNTIsNyBA
QCArIChOU1N0cmluZyAqKW5hbWVGb3JMYXllcjooUmVuZGVyTGF5ZXIqKWxheWVyCiAgICAgY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOwogICAgIE5TU3Ry
aW5nICpuYW1lID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnJlbmRlcmVyLnJlbmRl
ck5hbWUoKV07CiAKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLm5vZGUoKSAm
JiBpczxFbGVtZW50PihyZW5kZXJlci5ub2RlKCkpID8gZG93bmNhc3Q8RWxlbWVudD4ocmVuZGVy
ZXIubm9kZSgpKSA6IG51bGxwdHIpIHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGlzPEVs
ZW1lbnQ+KHJlbmRlcmVyLm5vZGUoKSkgPyBkb3duY2FzdDxFbGVtZW50PihyZW5kZXJlci5ub2Rl
KCkpIDogbnVsbHB0cikgewogICAgICAgICBuYW1lID0gW25hbWUgc3RyaW5nQnlBcHBlbmRpbmdG
b3JtYXQ6QCIgJUAiLCAoTlNTdHJpbmcgKillbGVtZW50LT50YWdOYW1lKCldOwogICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzSUQoKSkKICAgICAgICAgICAgIG5hbWUgPSBbbmFtZSBzdHJpbmdCeUFw
cGVuZGluZ0Zvcm1hdDpAIiBpZD1cIiVAXCIiLCAoTlNTdHJpbmcgKillbGVtZW50LT5nZXRJZEF0
dHJpYnV0ZSgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2Vz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcAppbmRleCA5YzUwYmNk
ODQxNGQyYjQyYzYyMTFkN2MzMGU0OWFjZGU4NjMwZTQxLi5lYzJiOTIzZGUzYWE3Mzk4NTJkNGQ1
NDU2YjJiODcwZTkyNzE5NzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01Db3Jl
Q2xhc3Nlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCkBA
IC0xNDk1LDI3ICsxNDk1LDI3IEBAIERPTUVsZW1lbnQ6On5ET01FbGVtZW50KCkKIElET01FbGVt
ZW50KiBET01FbGVtZW50OjpjcmVhdGVJbnN0YW5jZShXZWJDb3JlOjpFbGVtZW50KiBlKQogewog
ICAgIGlmICghZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgSFJFU1VMVCBocjsKICAgICBJRE9NRWxlbWVudCogZG9tRWxlbWVudCA9IDA7CiAKLSAg
ICBpZiAoaXM8V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50PihlKSkgeworICAgIGlmIChpczxXZWJD
b3JlOjpIVE1MRm9ybUVsZW1lbnQ+KCplKSkgewogICAgICAgICBET01IVE1MRm9ybUVsZW1lbnQq
IG5ld0VsZW1lbnQgPSBuZXcgRE9NSFRNTEZvcm1FbGVtZW50KGUpOwogICAgICAgICBociA9IG5l
d0VsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NRWxlbWVudCwgKHZvaWQqKikmZG9tRWxl
bWVudCk7CiAgICAgfSBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKICAgICAg
ICAgRE9NSFRNTElGcmFtZUVsZW1lbnQqIG5ld0VsZW1lbnQgPSBuZXcgRE9NSFRNTElGcmFtZUVs
ZW1lbnQoZSk7CiAgICAgICAgIGhyID0gbmV3RWxlbWVudC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lE
T01FbGVtZW50LCAodm9pZCoqKSZkb21FbGVtZW50KTsKLSAgICB9IGVsc2UgaWYgKGlzPFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ+KGUpKSB7CisgICAgfSBlbHNlIGlmIChpczxXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50PigqZSkpIHsKICAgICAgICAgRE9NSFRNTElucHV0RWxlbWVudCogbmV3
RWxlbWVudCA9IG5ldyBET01IVE1MSW5wdXRFbGVtZW50KGUpOwogICAgICAgICBociA9IG5ld0Vs
ZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NRWxlbWVudCwgKHZvaWQqKikmZG9tRWxlbWVu
dCk7Ci0gICAgfSBlbHNlIGlmIChpczxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4oZSkpIHsK
KyAgICB9IGVsc2UgaWYgKGlzPFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50PigqZSkpIHsKICAg
ICAgICAgRE9NSFRNTE9wdGlvbkVsZW1lbnQqIG5ld0VsZW1lbnQgPSBuZXcgRE9NSFRNTE9wdGlv
bkVsZW1lbnQoZSk7CiAgICAgICAgIGhyID0gbmV3RWxlbWVudC0+UXVlcnlJbnRlcmZhY2UoSUlE
X0lET01FbGVtZW50LCAodm9pZCoqKSZkb21FbGVtZW50KTsKICAgICB9IGVsc2UgaWYgKGUtPmhh
c1RhZ05hbWUoc2VsZWN0VGFnKSkgewogICAgICAgICBET01IVE1MU2VsZWN0RWxlbWVudCogbmV3
RWxlbWVudCA9IG5ldyBET01IVE1MU2VsZWN0RWxlbWVudChlKTsKICAgICAgICAgaHIgPSBuZXdF
bGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURPTUVsZW1lbnQsICh2b2lkKiopJmRvbUVsZW1l
bnQpOwotICAgIH0gZWxzZSBpZiAoaXM8V2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudD4oZSkp
IHsKKyAgICB9IGVsc2UgaWYgKGlzPFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ+KCplKSkg
ewogICAgICAgICBET01IVE1MVGV4dEFyZWFFbGVtZW50KiBuZXdFbGVtZW50ID0gbmV3IERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQoZSk7CiAgICAgICAgIGhyID0gbmV3RWxlbWVudC0+UXVlcnlJbnRl
cmZhY2UoSUlEX0lET01FbGVtZW50LCAodm9pZCoqKSZkb21FbGVtZW50KTsKICAgICB9IGVsc2Ug
aWYgKGUtPmlzSFRNTEVsZW1lbnQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
RE9NSFRNTENsYXNzZXMuY3BwIGIvU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3Bw
CmluZGV4IDAwNWU2Y2UyZjFiZWFlMmYzZTgyYmJjMDU0NjE1NTUxODAzYjFmMDkuLjY3OTEzZWZi
Y2NiODVmODkzMmViNzRlN2MxYTlhYTJlNzgzNDVkNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1M
Q2xhc3Nlcy5jcHAKQEAgLTI1OCw3ICsyNTgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IERPTUhUTUxEb2N1bWVudDo6Ym9keSgKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJRE9N
SFRNTEVsZW1lbnQqKiBib2R5RWxlbWVudCkKIHsKICAgICAqYm9keUVsZW1lbnQgPSBudWxscHRy
OwotICAgIGlmICghbV9kb2N1bWVudCB8fCAhaXM8SFRNTERvY3VtZW50PihtX2RvY3VtZW50KSkK
KyAgICBpZiAoIWlzPEhUTUxEb2N1bWVudD4obV9kb2N1bWVudCkpCiAgICAgICAgIHJldHVybiBF
X0ZBSUw7CiAKICAgICBIVE1MRG9jdW1lbnQmIGh0bWxEb2MgPSBkb3duY2FzdDxIVE1MRG9jdW1l
bnQ+KCptX2RvY3VtZW50KTsKQEAgLTMwMSw3ICszMDEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERPTUhUTUxEb2N1bWVudDo6Zm9ybXMoCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0g
Ki8gSURPTUhUTUxDb2xsZWN0aW9uKiogY29sbGVjdGlvbikKIHsKICAgICAqY29sbGVjdGlvbiA9
IG51bGxwdHI7Ci0gICAgaWYgKCFtX2RvY3VtZW50IHx8ICFpczxIVE1MRG9jdW1lbnQ+KG1fZG9j
dW1lbnQpKQorICAgIGlmICghaXM8SFRNTERvY3VtZW50PihtX2RvY3VtZW50KSkKICAgICAgICAg
cmV0dXJuIEVfRkFJTDsKIAogICAgIEhUTUxEb2N1bWVudCYgaHRtbERvYyA9IGRvd25jYXN0PEhU
TUxEb2N1bWVudD4oKm1fZG9jdW1lbnQpOwpAQCAtMzk1LDcgKzM5NSw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEVsZW1lbnQ6OmlkTmFtZSgKICAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8
SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxIVE1MRWxlbWVudD4obV9l
bGVtZW50KSk7CiAgICAgU3RyaW5nIGlkU3RyaW5nID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG1f
ZWxlbWVudCktPmdldEF0dHJpYnV0ZShpZEF0dHIpOwogICAgICpyZXN1bHQgPSBCU3RyaW5nKGlk
U3RyaW5nKS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIFNfT0s7CkBAIC00ODEsNyArNDgxLDcgQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRWxlbWVudDo6c2V0SW5uZXJIVE1MKAog
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRWxlbWVudDo6aW5uZXJUZXh0KCAKICAg
ICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKG1f
ZWxlbWVudCAmJiBpczxIVE1MRWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhU
TUxFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBXVEY6OlN0cmluZyBpbm5lclRleHRTdHJpbmcg
PSBkb3duY2FzdDxIVE1MRWxlbWVudD4obV9lbGVtZW50KS0+aW5uZXJUZXh0KCk7CiAgICAgKnJl
c3VsdCA9IEJTdHJpbmcoaW5uZXJUZXh0U3RyaW5nKS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIFNf
T0s7CkBAIC00OTAsNyArNDkwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1M
RWxlbWVudDo6aW5uZXJUZXh0KAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRWxl
bWVudDo6c2V0SW5uZXJUZXh0KCAKICAgICAgICAgLyogW2luXSAqLyBCU1RSIHRleHQpCiB7Ci0g
ICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MRWxlbWVudD4obV9lbGVtZW50KSk7CisgICAg
QVNTRVJUKGlzPEhUTUxFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MRWxlbWVudCogaHRt
bEVsZSA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihtX2VsZW1lbnQpOwogICAgIFdURjo6U3RyaW5n
IHRleHRTdHJpbmcodGV4dCwgU3lzU3RyaW5nTGVuKHRleHQpKTsKICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKQEAgLTU1OSw3ICs1NTksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERPTUhUTUxGb3JtRWxlbWVudDo6c2V0QWNjZXB0Q2hhcnNldCgKIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEZvcm1FbGVtZW50OjphY3Rpb24oIAogICAgICAgICAvKiBb
cmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQobV9lbGVtZW50ICYm
IGlzPEhUTUxGb3JtRWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxGb3Jt
RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgV1RGOjpTdHJpbmcgYWN0aW9uU3RyaW5nID0gZG93
bmNhc3Q8SFRNTEZvcm1FbGVtZW50PigqbV9lbGVtZW50KS5hY3Rpb24oKTsKICAgICAqcmVzdWx0
ID0gQlN0cmluZyhhY3Rpb25TdHJpbmcpLnJlbGVhc2UoKTsKICAgICByZXR1cm4gU19PSzsKQEAg
LTU4OSw3ICs1ODksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxGb3JtRWxl
bWVudDo6c2V0RW5jdHlwZSgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEZvcm1F
bGVtZW50OjptZXRob2QoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3Vs
dCkKIHsKLSAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzPEhUTUxGb3JtRWxlbWVudD4obV9lbGVt
ZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxGb3JtRWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAg
V1RGOjpTdHJpbmcgbWV0aG9kU3RyaW5nID0gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PigqbV9l
bGVtZW50KS5tZXRob2QoKTsKICAgICAqcmVzdWx0ID0gQlN0cmluZyhtZXRob2RTdHJpbmcpLnJl
bGVhc2UoKTsKICAgICByZXR1cm4gU19PSzsKQEAgLTg1OCw3ICs4NTgsNiBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIERPTUhUTUxPcHRpb25FbGVtZW50Ojp0ZXh0KAogCiAgICAgKnJlc3Vs
dCA9IDA7CiAKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb25FbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQpOwogCkBAIC04OTUs
NyArODk0LDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MT3B0aW9uRWxlbWVu
dDo6bGFiZWwoCiAKICAgICAqcmVzdWx0ID0gMDsKIAotICAgIEFTU0VSVChtX2VsZW1lbnQpOwog
ICAgIEFTU0VSVChpczxIVE1MT3B0aW9uRWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTE9w
dGlvbkVsZW1lbnQmIG9wdGlvbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
Km1fZWxlbWVudCk7CiAKQEAgLTk5Miw3ICs5OTAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OmZvcm0oCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBFX1BPSU5URVI7CiAgICAgKnJlc3VsdCA9IG51bGxwdHI7Ci0gICAgQVNTRVJUKG1f
ZWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQo
aXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYg
aW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAg
ICAgQ09NUHRyPElET01FbGVtZW50PiBkb21FbGVtZW50OwogICAgIGRvbUVsZW1lbnQuYWRvcHRS
ZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGlucHV0RWxlbWVudC5mb3JtKCkpKTsK
QEAgLTEwNzQsNyArMTA3Miw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElu
cHV0RWxlbWVudDo6c2V0Q2hlY2tlZCgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRN
TElucHV0RWxlbWVudDo6ZGlzYWJsZWQoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJP
T0wqIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1l
bnQpKTsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKICAgICAqcmVzdWx0ID0gaW5wdXRFbGVtZW50Lmlz
RGlzYWJsZWRGb3JtQ29udHJvbCgpID8gVFJVRSA6IEZBTFNFOwogICAgIHJldHVybiBTX09LOwpA
QCAtMTExOCw3ICsxMTE2LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5w
dXRFbGVtZW50OjpzZXROYW1lKAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5w
dXRFbGVtZW50OjpyZWFkT25seSggCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQk9PTCog
cmVzdWx0KQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4o
bV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkp
OwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNSZWFk
T25seSgpID8gVFJVRSA6IEZBTFNFOwogICAgIHJldHVybiBTX09LOwpAQCAtMTE4Myw3ICsxMTgx
LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojp0eXBl
KAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRUeXBl
KCAKICAgICAgICAgLyogW2luXSAqLyBCU1RSIHR5cGUpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVu
dCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRN
TElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgV1RG
OjpTdHJpbmcgdHlwZVN0cmluZyh0eXBlLCBTeXNTdHJpbmdMZW4odHlwZSkpOwogICAgIGlucHV0
RWxlbWVudC5zZXRUeXBlKHR5cGVTdHJpbmcpOwpAQCAtMTIwNyw3ICsxMjA1LDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRVc2VNYXAoCiBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlKCAKICAgICAg
ICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKG1fZWxl
bWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8
SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5w
dXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAg
V1RGOjpTdHJpbmcgdmFsdWVTdHJpbmcgPSBpbnB1dEVsZW1lbnQudmFsdWUoKTsKICAgICAqcmVz
dWx0ID0gQlN0cmluZyh2YWx1ZVN0cmluZykucmVsZWFzZSgpOwpAQCAtMTIxOSw3ICsxMjE3LDcg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZSgK
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUo
IAogICAgICAgICAvKiBbaW5dICovIEJTVFIgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVu
dCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRN
TElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgaW5w
dXRFbGVtZW50LnNldFZhbHVlKFN0cmluZygoVUNoYXIqKSB2YWx1ZSwgU3lzU3RyaW5nTGVuKHZh
bHVlKSkpOwogICAgIHJldHVybiBTX09LOwpAQCAtMTIyOCw3ICsxMjI2LDYgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSgKIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGb3JVc2VyKAog
ICAgICAgICAvKiBbaW5dICovIEJTVFIgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7
CiAgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpt
X2VsZW1lbnQpOwogICAgIGlucHV0RWxlbWVudC5zZXRWYWx1ZUZvclVzZXIoU3RyaW5nKHN0YXRp
Y19jYXN0PFVDaGFyKj4odmFsdWUpLCBTeXNTdHJpbmdMZW4odmFsdWUpKSk7CkBAIC0xMjM3LDcg
KzEyMzQsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6
OnNldFZhbHVlRm9yVXNlcigKIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5w
dXRFbGVtZW50OjpzZWxlY3QoIHZvaWQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxI
VE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxl
bWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgaW5wdXRFbGVtZW50
LnNlbGVjdCgpOwogICAgIHJldHVybiBTX09LOwpAQCAtMTI1Miw3ICsxMjQ5LDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpjbGljayggdm9pZCkKIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9u
U3RhcnQoIAogICAgIC8qIFtpbl0gKi8gbG9uZyBzdGFydCkKIHsKLSAgICBBU1NFUlQobV9lbGVt
ZW50ICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxI
VE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1
dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKICAgICBp
bnB1dEVsZW1lbnQuc2V0U2VsZWN0aW9uU3RhcnQoc3RhcnQpOwogICAgIHJldHVybiBTX09LOwpA
QCAtMTI2MSw3ICsxMjU4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5w
dXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydCgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoIAogICAgIC8qIFtyZXR2YWxdW291
dF0gKi8gbG9uZyAqc3RhcnQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MSW5w
dXRFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4o
bV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgKnN0YXJ0ID0gaW5wdXRFbGVt
ZW50LnNlbGVjdGlvblN0YXJ0KCk7CiAgICAgcmV0dXJuIFNfT0s7CkBAIC0xMjcwLDcgKzEyNjcs
NyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVj
dGlvblN0YXJ0KAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50
OjpzZXRTZWxlY3Rpb25FbmQoIAogICAgIC8qIFtpbl0gKi8gbG9uZyBlbmQpCiB7Ci0gICAgQVNT
RVJUKG1fZWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBB
U1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxl
bWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVu
dCk7CiAgICAgaW5wdXRFbGVtZW50LnNldFNlbGVjdGlvbkVuZChlbmQpOwogICAgIHJldHVybiBT
X09LOwpAQCAtMTI3OSw3ICsxMjc2LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01I
VE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQoCiBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCggCiAgICAgLyogW3JldHZhbF1b
b3V0XSAqLyBsb25nICplbmQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MSW5w
dXRFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4o
bV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgKmVuZCA9IGlucHV0RWxlbWVu
dC5zZWxlY3Rpb25FbmQoKTsKICAgICByZXR1cm4gU19PSzsKQEAgLTEyOTAsNyArMTI4Nyw2IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9u
RW5kKAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojppc1Rl
eHRGaWVsZCgKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkKIHsKLSAgICBB
U1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVt
ZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgKnJlc3VsdCA9IGlucHV0RWxlbWVudC5p
c1RleHRGaWVsZCgpID8gVFJVRSA6IEZBTFNFOwpAQCAtMTMwMCw3ICsxMjk2LDYgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojppc1RleHRGaWVsZCgKIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6cmVjdE9uU2NyZWVu
KCAKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIExQUkVDVCByZWN0KQogewotICAgIEFTU0VSVCht
X2VsZW1lbnQpOwogICAgIEFTU0VSVChpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsK
ICAgICByZWN0LT5sZWZ0ID0gcmVjdC0+dG9wID0gcmVjdC0+cmlnaHQgPSByZWN0LT5ib3R0b20g
PSAwOwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCk7
CkBAIC0xMzI2LDcgKzEzMjEsNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJ
bnB1dEVsZW1lbnQ6OnJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZSgKICAgICBpZiAoIXJlcGxhY2Vt
ZW50U3RyaW5nKQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgQVNTRVJUKG1fZWxl
bWVudCk7CiAgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KCptX2VsZW1lbnQpOwogCkBAIC0xMzQzLDcgKzEzMzcsNiBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGVkUmFuZ2UoCiAgICAgLyogW291
dF0gKi8gaW50KiBzdGFydCwKICAgICAvKiBbb3V0XSAqLyBpbnQqIGVuZCkKIHsKLSAgICBBU1NF
UlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50
KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgKnN0YXJ0ID0gaW5wdXRFbGVtZW50LnNlbGVj
dGlvblN0YXJ0KCk7CkBAIC0xMzU0LDcgKzEzNDcsNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGVkUmFuZ2UoCiBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldEF1dG9maWxsZWQoIAogICAgIC8qIFtp
bl0gKi8gQk9PTCBmaWxsZWQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJU
KGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQm
IGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwog
ICAgIGlucHV0RWxlbWVudC5zZXRBdXRvZmlsbGVkKCEhZmlsbGVkKTsKQEAgLTEzNjQsNyArMTM1
Niw2IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0
QXV0b2ZpbGxlZCgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVu
dDo6aXNBdXRvZmlsbGVkKAogICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQk9PTCogcmVzdWx0KQog
ewotICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VSVChpczxIVE1MSW5wdXRFbGVtZW50
PihtX2VsZW1lbnQpKTsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKICAgICAqcmVzdWx0ID0gaW5wdXRF
bGVtZW50LmlzQXV0b2ZpbGxlZCgpID8gVFJVRSA6IEZBTFNFOwpAQCAtMTM4MCw3ICsxMzcxLDcg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojppc1VzZXJF
ZGl0ZWQoCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKICAgICAqcmVzdWx0ID0gRkFMU0U7
Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQp
KTsKKyAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgQk9P
TCB0ZXh0RmllbGQgPSBGQUxTRTsKICAgICBpZiAoRkFJTEVEKGlzVGV4dEZpZWxkKCZ0ZXh0Rmll
bGQpKSB8fCAhdGV4dEZpZWxkKQogICAgICAgICByZXR1cm4gU19PSzsKQEAgLTE0MjYsOCArMTQx
Nyw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6
Zm9ybSgKIHsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAg
ICAqcmVzdWx0ID0gMDsKLSAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzPEhUTUxUZXh0QXJlYUVs
ZW1lbnQ+KG1fZWxlbWVudCkpOworICAgICpyZXN1bHQgPSBudWxscHRyOworICAgIEFTU0VSVChp
czxIVE1MVGV4dEFyZWFFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MVGV4dEFyZWFFbGVt
ZW50JiB0ZXh0YXJlYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9l
bGVtZW50KTsKICAgICBDT01QdHI8SURPTUVsZW1lbnQ+IGRvbUVsZW1lbnQ7CiAgICAgZG9tRWxl
bWVudC5hZG9wdFJlZihET01IVE1MRWxlbWVudDo6Y3JlYXRlSW5zdGFuY2UodGV4dGFyZWFFbGVt
ZW50LmZvcm0oKSkpOwpAQCAtMTU0NCw3ICsxNTM1LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01IVE1MVGV4dEFyZWFFbGVtZW50Ojp0eXBlKAogSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01IVE1MVGV4dEFyZWFFbGVtZW50Ojp2YWx1ZSggCiAgICAgICAgIC8qIFtyZXR2YWxd
W291dF0gKi8gQlNUUiogcmVzdWx0KQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRN
TFRleHRBcmVhRWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQmIHRleHRhcmVh
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAg
IFdURjo6U3RyaW5nIHZhbHVlU3RyaW5nID0gdGV4dGFyZWFFbGVtZW50LnZhbHVlKCk7CiAgICAg
KnJlc3VsdCA9IEJTdHJpbmcodmFsdWVTdHJpbmcpLnJlbGVhc2UoKTsKQEAgLTE1NTYsNyArMTU0
Nyw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6
dmFsdWUoCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6
OnNldFZhbHVlKCAKICAgICAgICAgLyogW2luXSAqLyBCU1RSIHZhbHVlKQogewotICAgIEFTU0VS
VChtX2VsZW1lbnQgJiYgaXM8SFRNTFRleHRBcmVhRWxlbWVudD4obV9lbGVtZW50KSk7CisgICAg
QVNTRVJUKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxUZXh0
QXJlYUVsZW1lbnQmIHRleHRhcmVhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1l
bnQ+KCptX2VsZW1lbnQpOwogICAgIHRleHRhcmVhRWxlbWVudC5zZXRWYWx1ZShTdHJpbmcoKFVD
aGFyKikgdmFsdWUsIFN5c1N0cmluZ0xlbih2YWx1ZSkpKTsKICAgICByZXR1cm4gU19PSzsKQEAg
LTE1NjQsNyArMTU1NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFRleHRB
cmVhRWxlbWVudDo6c2V0VmFsdWUoCiAgICAgCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVjdCggdm9pZCkKIHsKLSAgICBBU1NFUlQobV9lbGVt
ZW50ICYmIGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChp
czxIVE1MVGV4dEFyZWFFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MVGV4dEFyZWFFbGVt
ZW50JiB0ZXh0YXJlYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9l
bGVtZW50KTsKICAgICB0ZXh0YXJlYUVsZW1lbnQuc2VsZWN0KCk7CiAgICAgcmV0dXJuIFNfT0s7
CkBAIC0xNTc5LDcgKzE1NzAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OmlzVXNlckVkaXRlZCgKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsK
IAogICAgICpyZXN1bHQgPSBGQUxTRTsKLSAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzPEhUTUxU
ZXh0QXJlYUVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxIVE1MVGV4dEFyZWFF
bGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBpZiAoZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVu
dD4oKm1fZWxlbWVudCkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCkpCiAgICAgICAgICpyZXN1bHQg
PSBUUlVFOwogICAgIHJldHVybiBTX09LOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCmluZGV4IGZmMWJm
YWIxYzBiZGI4MzQzZTk0MDNlNjJjMTJkM2RjNTU4MWU1NDcuLjY4ZWQ3MDViNTVjMWI1OTUxOGEx
NzgxZTY0NzhmMjBmNjI3NGRjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKQEAgLTIwMiw3ICsy
MDIsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudEZyb21ET01FbGVtZW50
KElET01FbGVtZW50ICplbGVtZW50KQogICAgICAgICBFbGVtZW50KiBlbGU7CiAgICAgICAgIGhy
ID0gZWxlUHJpdi0+Y29yZUVsZW1lbnQoKHZvaWQqKikmZWxlKTsKICAgICAgICAgZWxlUHJpdi0+
UmVsZWFzZSgpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSAmJiBlbGUgJiYgaXM8SFRNTEZv
cm1FbGVtZW50PihlbGUpKQorICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSAmJiBpczxIVE1MRm9y
bUVsZW1lbnQ+KGVsZSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1FbGVt
ZW50PihlbGUpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIxOSw3ICsyMTksNyBA
QCBzdGF0aWMgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQoSURP
TUVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIEVsZW1lbnQqIGVsZTsKICAgICAgICAgaHIgPSBl
bGVQcml2LT5jb3JlRWxlbWVudCgodm9pZCoqKSZlbGUpOwogICAgICAgICBlbGVQcml2LT5SZWxl
YXNlKCk7Ci0gICAgICAgIGlmIChTVUNDRUVERUQoaHIpICYmIGVsZSAmJiBpczxIVE1MSW5wdXRF
bGVtZW50PihlbGUpKQorICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSAmJiBpczxIVE1MSW5wdXRF
bGVtZW50PihlbGUpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KGVsZSk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwpAQCAtMTEwMSw3ICsxMTAxLDcg
QEAgSFJFU1VMVCBXZWJGcmFtZTo6ZWxlbWVudFdpdGhOYW1lKEJTVFIgbmFtZSwgSURPTUVsZW1l
bnQqIGZvcm0sIElET01FbGVtZW50KiogZWwKICAgICAgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5hc3NvY2lhdGVkRWxlbWVu
dHMoKTsKICAgICAgICAgQXRvbWljU3RyaW5nIHRhcmdldE5hbWUoKFVDaGFyKiluYW1lLCBTeXNT
dHJpbmdMZW4obmFtZSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGVs
ZW1lbnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+KGVsZW1lbnRzW2ldKSkKKyAgICAgICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4oKmVsZW1lbnRzW2ldKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmIGVsdCA9IGRvd25jYXN0PEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KCplbGVtZW50c1tpXSk7CiAgICAgICAgICAgICAvLyBTa2lwIG9wdGlv
biBlbGVtZW50cywgb3RoZXIgZHVkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVyT2Jq
ZWN0LmNwcAppbmRleCAxOTYwM2M1YzAxM2EzOTdmYTgyOTIwZmQ0ZDM5ZjM3NDM3ZDY1MTQ3Li4x
YmVmMjY0ODlkNDg2OTBjNmQ4ZTU5ZGVlNTY3YWRiZTFmMzUzNzA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcApAQCAtNjYsNyArNjYsNyBAQCBXZWJSZW5kZXJP
YmplY3Q6OldlYlJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBib29sIHNob3Vs
ZEluY2x1ZGVEZXNjZQogICAgIG1fbmFtZSA9IHJlbmRlcmVyLT5yZW5kZXJOYW1lKCk7CiAKICAg
ICBpZiAoTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEVs
ZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKICAgICAg
ICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CiAgICAg
ICAgICAgICBtX2VsZW1lbnRUYWdOYW1lID0gZWxlbWVudC50YWdOYW1lKCk7CiAgICAgICAgICAg
ICBtX2VsZW1lbnRJRCA9IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVIaXRU
ZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcAppbmRleCBmNDQ0NzM0ZjgzYzE3MmEzOGZj
MmI1MTQwY2UzOGUwNjRlYzZlYjQyLi5hNGE1MzA2N2VmN2ViNTRlNDE4NjY0NmQwM2E1OWU0MTZm
MGQ2N2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3Bw
CkBAIC0xMTQsNyArMTE0LDcgQEAgQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZSBJbmplY3Rl
ZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6Om1lZGlhVHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIEJ1bmRs
ZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGVOb25lOwogI2Vsc2UKICAgICBXZWJDb3JlOjpOb2RlKiBu
b2RlID0gbV9oaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICghaXM8
RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIHJl
dHVybiBCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlTm9uZTsKICAgICAKICAgICBpZiAoIWRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc01lZGlhRWxlbWVudCgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGU0OTMyOTI3ZDNm
ZDMyYzE2NmM5ODI1NGFhYzYzMjZjYWYxMDIyZTIuLjM2OTY4ZjBkOTFlNzQ0Y2U5NGIwNjQ5Njhh
NWVjNWIyYWZiNTliZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHAKQEAgLTg5Miw3ICs4OTIsNyBAQCB2b2lkIFBsdWdpblZpZXc6Omhh
bmRsZUV2ZW50KEV2ZW50KiBldmVudCkKIAogICAgIGNvbnN0IFdlYkV2ZW50KiBjdXJyZW50RXZl
bnQgPSBXZWJQYWdlOjpjdXJyZW50RXZlbnQoKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViRXZl
bnQ+IHNpbXVsYXRlZFdlYkV2ZW50OwotICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkgJiYg
ZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5pc1NpbXVsYXRlZCgpKSB7CisgICAgaWYgKGlz
PE1vdXNlRXZlbnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5pc1Np
bXVsYXRlZCgpKSB7CiAgICAgICAgIHNpbXVsYXRlZFdlYkV2ZW50ID0gY3JlYXRlV2ViRXZlbnQo
ZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpKTsKICAgICAgICAgY3VycmVudEV2ZW50ID0gc2lt
dWxhdGVkV2ViRXZlbnQuZ2V0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4
IGNkZWNiZGE0ZjljNGNjMWJiMDQ2NjVkZDA5ZGQwZDQxNmRlN2FmMmMuLjgwMDY0NWJmMGYwYTg5
Y2U1MTVmMzUwNzMyNjE5NWU3OTBmYmEwYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAg
LTE3Niw4ICsxNzYsNiBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6dGFrZUZvY3VzKEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbikKIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmZvY3VzZWRFbGVtZW50
Q2hhbmdlZChFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAg
cmV0dXJuOwogICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IDRiNTI5YTk3ZTgwOGFlYjQz
YTIzZWVmNjVjZWVhZTFiMDRmNDdlNTYuLjE3ZmMzYTUyYjM4ZmMzMGIzMjZhMTAwMDAwMTFmZDk3
Y2ZlZTA3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZl
bnQqKQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVs
ZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50
KSkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUo
KmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlbGVtZW50
KQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50
KiBlbGVtZW50KQogewotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCisg
ICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVt
ZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwpAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQgV2ViRWRp
dG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQpCiAKIHZv
aWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCogZWxl
bWVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlm
ICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBib29sIGluaXRpYXRlZEJ5VXNlclR5cGluZyA9IFVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9y
Ojpwcm9jZXNzaW5nVXNlclR5cGluZ0dlc3R1cmUoKSAmJiBVc2VyVHlwaW5nR2VzdHVyZUluZGlj
YXRvcjo6Zm9jdXNlZEVsZW1lbnRBdEdlc3R1cmVTdGFydCgpID09IGVsZW1lbnQ7CkBAIC0zMzAs
NyArMzMwLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRGaWVs
ZChFbGVtZW50KiBlbGVtZW50KQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5n
ZUluVGV4dEFyZWEoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKmVs
ZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBXZWJG
cmFtZTo6ZnJvbUNvcmVGcmFtZSgqZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKQEAgLTM5
Myw3ICszOTMsNyBAQCBzdGF0aWMgQVBJOjpJbmplY3RlZEJ1bmRsZTo6Rm9ybUNsaWVudDo6SW5w
dXRGaWVsZEFjdGlvbiB0b0lucHV0RmllbGRBY3Rpb24oV0tJbgogCiBib29sIFdlYkVkaXRvckNs
aWVudDo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqIGVsZW1lbnQsIEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVu
dCkpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIFdLSW5wdXRGaWVsZEFjdGlvblR5cGUgYWN0aW9uVHlwZSA9IHN0
YXRpY19jYXN0PFdLSW5wdXRGaWVsZEFjdGlvblR5cGU+KDApOwpAQCAtNDA4LDcgKzQwOCw3IEBA
IGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVu
dCogZWxlbWVudCwgS2V5Ym9hcmRFdmVuCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2ls
bEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxI
VE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+
KCplbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0g
V2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRleCBk
OWFkY2M2MTY5M2UzZTU5YjczNzQxZjk5NDk0M2RjMjRlZjFhNmUzLi41NGUwYjdkZmYyODdlNzhh
YzQ0M2VmODA4N2VmZDQyOTk3Y2IxYWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAgLTYxMyw5ICs2MTMsOSBAQCBib29sIFdlYkZyYW1l
Ojpjb250YWluc0FueUZvcm1FbGVtZW50cygpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsgbm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKCFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KG5vZGUp
KQorICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjMxLDkgKzYzMSw5IEBA
IGJvb2wgV2ViRnJhbWU6OmNvbnRhaW5zQW55Rm9ybUNvbnRyb2xzKCkgY29uc3QKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewotICAg
ICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50
Pigqbm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGlzPEhUTUxJbnB1
dEVsZW1lbnQ+KG5vZGUpIHx8IGlzPEhUTUxTZWxlY3RFbGVtZW50Pihub2RlKSB8fCBpczxIVE1M
VGV4dEFyZWFFbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKSB8fCBpczxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpIHx8IGlzPEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKaW5kZXggNmVhNzZhY2YzM2M3MTE0MjMzNzY1ZjJmZmU2YWQ5NWY1NDcwMDIyNC4uMzZm
YjhmYzJkMjhlYjgzODdmNzQyZTFhMDlmOTgyMmNmNjQ4YWFkZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzcwMCw5ICszNzAwLDYgQEAg
dm9pZCBXZWJQYWdlOjpzdG9wU3BlYWtpbmcoKQogUmV0YWluUHRyPFBERkRvY3VtZW50PiBXZWJQ
YWdlOjpwZGZEb2N1bWVudEZvclByaW50aW5nRnJhbWUoRnJhbWUqIGNvcmVGcmFtZSkKIHsKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFk
b2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICBpZiAoIWlzPFBsdWdpbkRv
Y3VtZW50Pihkb2N1bWVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC00NjIyLDcg
KzQ2MTksNyBAQCB2b2lkIFdlYlBhZ2U6OmRldGVybWluZVByaW1hcnlTbmFwc2hvdHRlZFBsdWdJ
bigpCiAgICAgICAgICAgICBpbmZsYXRlZFBsdWdpblJlY3QuaW5mbGF0ZVkoeU9mZnNldCk7CiAK
ICAgICAgICAgICAgIGlmIChlbGVtZW50ICE9ICZwbHVnSW5JbWFnZUVsZW1lbnQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIShpczxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KQorICAgICAgICAg
ICAgICAgIGlmICghKGlzPEhUTUxJbWFnZUVsZW1lbnQ+KCplbGVtZW50KQogICAgICAgICAgICAg
ICAgICAgICAmJiBpbmZsYXRlZFBsdWdpblJlY3QuY29udGFpbnMoZWxlbWVudFJlY3RSZWxhdGl2
ZVRvVG9wRG9jdW1lbnQpCiAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnRSZWN0UmVsYXRp
dmVUb1RvcERvY3VtZW50LndpZHRoKCkgPiBwbHVnaW5SZW5kZXJCb3gud2lkdGgoKSAqIG1pbmlt
dW1PdmVybGFwcGluZ0ltYWdlVG9QbHVnaW5EaW1lbnNpb25TY2FsZQogICAgICAgICAgICAgICAg
ICAgICAmJiBlbGVtZW50UmVjdFJlbGF0aXZlVG9Ub3BEb2N1bWVudC5oZWlnaHQoKSA+IHBsdWdp
blJlbmRlckJveC5oZWlnaHQoKSAqIG1pbmltdW1PdmVybGFwcGluZ0ltYWdlVG9QbHVnaW5EaW1l
bnNpb25TY2FsZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggN2QyOWMwMzZkNzBkN2IwMTIyNjlmN2U2ZjkzM2Q4YWNi
YTVjODFkOC4uYzY2N2NmN2Y4ZDQ4OTM5MDUxYTY4OGJlNzBjNjk1ODhkODVlYjM3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQpAQCAtNjA0LDE1ICs2MDQsMTMgQEAgdm9pZCBXZWJQYWdlOjppbnNwZWN0b3JOb2RlU2VhcmNo
RW5kZWRBdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQogCiB2b2lkIFdlYlBh
Z2U6OmJsdXJBc3Npc3RlZE5vZGUoKQogewotICAgIGlmIChtX2Fzc2lzdGVkTm9kZSAmJiBpczxF
bGVtZW50PigqbV9hc3Npc3RlZE5vZGUpKQorICAgIGlmIChpczxFbGVtZW50PihtX2Fzc2lzdGVk
Tm9kZSkpCiAgICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkuYmx1cigp
OwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldEFzc2lzdGVkTm9kZVZhbHVlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7Ci0gICAgaWYgKCFtX2Fzc2lzdGVkTm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChpczxIVE1MSW5wdXRFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpKSB7CisgICAgaWYgKGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KG1fYXNzaXN0ZWROb2RlKSkgewogICAgICAgICBIVE1MSW5wdXRF
bGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWRO
b2RlKTsKICAgICAgICAgZWxlbWVudC5zZXRWYWx1ZSh2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENo
YW5nZUV2ZW50KTsKICAgICB9CkBAIC02MjEsOSArNjE5LDcgQEAgdm9pZCBXZWJQYWdlOjpzZXRB
c3Npc3RlZE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogCiB2b2lkIFdlYlBhZ2U6OnNl
dEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIoZG91YmxlIHZhbHVlKQogewotICAgIGlmICghbV9h
c3Npc3RlZE5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVu
dD4oKm1fYXNzaXN0ZWROb2RlKSkgeworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihtX2Fz
c2lzdGVkTm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSk7CiAgICAgICAgIGVsZW1lbnQu
c2V0VmFsdWVBc051bWJlcih2YWx1ZSwgQVNTRVJUX05PX0VYQ0VQVElPTiwgRGlzcGF0Y2hJbnB1
dEFuZENoYW5nZUV2ZW50KTsKICAgICB9CkBAIC02MzEsNyArNjI3LDcgQEAgdm9pZCBXZWJQYWdl
OjpzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKIAogdm9pZCBXZWJQ
YWdlOjpzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFs
bG93TXVsdGlwbGVTZWxlY3Rpb24pCiB7Ci0gICAgaWYgKCFtX2Fzc2lzdGVkTm9kZSB8fCAhaXM8
SFRNTFNlbGVjdEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkpCisgICAgaWYgKCFpczxIVE1MU2Vs
ZWN0RWxlbWVudD4obV9hc3Npc3RlZE5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgSFRNTFNl
bGVjdEVsZW1lbnQmIHNlbGVjdCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9hc3Np
c3RlZE5vZGUpOwogICAgIHNlbGVjdC5vcHRpb25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSwg
YWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7CkBAIC0xODg4LDcgKzE4ODQsNyBAQCB2b2lkIFdlYlBh
Z2U6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgSW50UG9pbnQmIHBvaW50LCBJbnRlcmFj
dGlvbkluZm9ybWF0aQogICAgIGlmIChoaXROb2RlKSB7CiAgICAgICAgIGluZm8uY2xpY2thYmxl
RWxlbWVudE5hbWUgPSBoaXROb2RlLT5ub2RlTmFtZSgpOwogCi0gICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBpczxFbGVtZW50PihoaXROb2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGhpdE5vZGUp
IDogbnVsbHB0cjsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KCpoaXRO
b2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGhpdE5vZGUpIDogbnVsbHB0cjsKICAgICAgICAgaWYg
KGVsZW1lbnQpIHsKICAgICAgICAgICAgIEVsZW1lbnQqIGxpbmtFbGVtZW50ID0gbnVsbHB0cjsK
ICAgICAgICAgICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpICYmIGVsZW1lbnQtPnJlbmRlcmVy
KCktPmlzUmVuZGVySW1hZ2UoKSkgewpAQCAtMTk1Miw3ICsxOTQ4LDcgQEAgdm9pZCBXZWJQYWdl
OjpzdG9wSW50ZXJhY3Rpb24oKQogCiB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1BY3Rpb25PbkVsZW1l
bnQodWludDMyX3QgYWN0aW9uKQogewotICAgIGlmICghbV9pbnRlcmFjdGlvbk5vZGUgfHwgIWlz
PEhUTUxFbGVtZW50PihtX2ludGVyYWN0aW9uTm9kZS5nZXQoKSkpCisgICAgaWYgKCFpczxIVE1M
RWxlbWVudD4obV9pbnRlcmFjdGlvbk5vZGUuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihtX2ludGVyYWN0
aW9uTm9kZS5nZXQoKSk7CkBAIC0xOTkwLDExICsxOTg2LDExIEBAIHZvaWQgV2ViUGFnZTo6cGVy
Zm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24pCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0Fzc2lzdGFibGVOb2RlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGlzPEhUTUxTZWxlY3RF
bGVtZW50Pihub2RlKSkKKyAgICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG5vZGUp
KQorICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIHJldHVy
biAhZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpLmlzUmVhZE9ubHlOb2RlKCk7
Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50
ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgICAgICByZXR1cm4gIWVs
ZW1lbnQuaXNSZWFkT25seU5vZGUoKSAmJiAoZWxlbWVudC5pc1RleHRGaWVsZCgpIHx8IGVsZW1l
bnQuaXNEYXRlRmllbGQoKSB8fCBlbGVtZW50LmlzRGF0ZVRpbWVMb2NhbEZpZWxkKCkgfHwgZWxl
bWVudC5pc01vbnRoRmllbGQoKSB8fCBlbGVtZW50LmlzVGltZUZpZWxkKCkpOwogICAgIH0KQEAg
LTIwNzcsMTAgKzIwNzMsMTAgQEAgdm9pZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbihBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24pCiAgICAgICAgIC8vIElm
IGEgc2VsZWN0IGRvZXMgbm90IGhhdmUgZ3JvdXBzLCBhbGwgdGhlIG9wdGlvbiBlbGVtZW50cyBo
YXZlIGdyb3VwIElEIDAuCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewogICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGl0ZW0gPSBpdGVtc1tpXTsKLSAgICAgICAg
ICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbSkpIHsKKyAgICAgICAgICAgIGlmIChp
czxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pKSB7CiAgICAgICAgICAgICAgICAgSFRNTE9wdGlv
bkVsZW1lbnQmIG9wdGlvbiA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqaXRlbSk7CiAg
ICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uc2VsZWN0T3B0aW9ucy5hcHBlbmQoT3B0aW9uSXRl
bShvcHRpb24udGV4dCgpLCBmYWxzZSwgcGFyZW50R3JvdXBJRCwgb3B0aW9uLnNlbGVjdGVkKCks
IG9wdGlvbi5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRy
KSkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PihpdGVt
KSkgeworICAgICAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqaXRl
bSkpIHsKICAgICAgICAgICAgICAgICBIVE1MT3B0R3JvdXBFbGVtZW50JiBncm91cCA9IGRvd25j
YXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCppdGVtKTsKICAgICAgICAgICAgICAgICBwYXJlbnRH
cm91cElEKys7CiAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uc2VsZWN0T3B0aW9ucy5hcHBl
bmQoT3B0aW9uSXRlbShncm91cC5ncm91cExhYmVsVGV4dCgpLCB0cnVlLCAwLCBmYWxzZSwgZ3Jv
dXAuZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cikpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239129</attachid>
            <date>2014-10-02 12:38:39 -0700</date>
            <delta_ts>2014-10-02 12:41:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137333-20141002123841.patch</filename>
            <type>text/plain</type>
            <size>491443</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGM0ZWNmODZhMGQyNmI1MWMyZTVjNjNj
NDIzODQwNTAyNzJjNGQzYTMuLjM3OTQ2NGU1MmI3MDFjMjA1YWNlNTYyNDQ4MjBiZmExYzM0YTQz
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTQtMTAtMDEgIENocmlzdG9waGUgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgaXM8PihUKikgZnVuY3Rpb24gZG8gYSBu
dWxsIGNoZWNrIG9uIHRoZSBwb2ludGVyIGFyZ3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzMKKworICAgICAgICBSZXZpZXdlZCBieSBH
YXZpbiBCYXJyYWNsb3VnaC4KKworICAgICAgICBIYXZlIGlzPD4oVCopIGZ1bmN0aW9uIGRvIGEg
bnVsbCBjaGVjayBvbiB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiBhCisgICAgICAgIHNpbXBsZSBh
c3NlcnRpb24uIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIDIgcmVhc29uczoKKyAgICAgICAgMS4gSXQg
aXMgbW9yZSBjb25zaXN0ZW50IHdpdGggZG93bmNhc3Q8PihUKiksIHdoaWNoIHdpbGwgc3VjY2Vl
ZCBldmVuCisgICAgICAgICAgIGlmIHRoZSBhcmd1bWVudCBpcyBhIG51bGxwdHIuCisgICAgICAg
IDIuIEl0IHNpbXBsaWZpZXMgdGhlIGNvZGUgYSBiaXQgYXMgaXQgZ2V0cyByaWQgb2YgYSBsb3Qg
b2YgZXhwbGljaXQKKyAgICAgICAgICAgbnVsbCBjaGVja3MuCisKKyAgICAgICAgKiB3dGYvVHlw
ZUNhc3RzLmg6CisgICAgICAgIChXVEY6OmlzKToKKwogMjAxNC0xMC0wMiAgRGFuaWVsIEJhdGVz
ICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQ2xlYW4gdXA6IE1vdmUgWFBDIGZvcndh
cmQgZGVjbGFyYXRpb25zIGluIEphdmFTY3JpcHRDb3JlIHRvIFdURiBTUEkgd3JhcHBlciBoZWFk
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAwNWE2NjE3YmUzOWQ2ZGZjMWY0NzMzMDM4NDc3MTQxMDNkNDAwYTY2
Li41N2RjNjAwZTU5ZGYzMDZiNWRlNWJlMGRmNjI4YjNlOTQzOThiZWQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsODY1IEBACisyMDE0LTEwLTAxICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBIYXZlIGlzPD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVsbCBjaGVj
ayBvbiB0aGUgcG9pbnRlciBhcmd1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFy
cmFjbG91Z2guCisKKyAgICAgICAgSGF2ZSBpczw+KFQqKSBmdW5jdGlvbiBkbyBhIG51bGwgY2hl
Y2sgb24gdGhlIGFyZ3VtZW50IGluc3RlYWQgb2YgYQorICAgICAgICBzaW1wbGUgYXNzZXJ0aW9u
LiBUaGlzIG1ha2VzIHNlbnNlIGZvciAyIHJlYXNvbnM6CisgICAgICAgIDEuIEl0IGlzIG1vcmUg
Y29uc2lzdGVudCB3aXRoIGRvd25jYXN0PD4oVCopLCB3aGljaCB3aWxsIHN1Y2NlZWQgZXZlbgor
ICAgICAgICAgICBpZiB0aGUgYXJndW1lbnQgaXMgYSBudWxscHRyLgorICAgICAgICAyLiBJdCBz
aW1wbGlmaWVzIHRoZSBjb2RlIGEgYml0IGFzIGl0IGdldHMgcmlkIG9mIGEgbG90IG9mIGV4cGxp
Y2l0CisgICAgICAgICAgIG51bGwgY2hlY2tzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8g
YmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHA6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRpb0NvbnRleHQ6OmNyZWF0ZSk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUpOgor
ICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0Ojpjb25uZWN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRz
aGFrZTo6Y2xpZW50SGFuZHNoYWtlTWVzc2FnZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmZvY3Vz
ZWRVSUVsZW1lbnRGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyb21SZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVMaXZlUmVnaW9uQ3JlYXRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxhYmVsQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNOb2RlQXJpYVZpc2libGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eUxpc3RCb3hPcHRpb246OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6aXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OnN0cmluZ1ZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjpsaXN0Qm94T3B0
aW9uUGFyZW50Tm9kZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVk
aWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1l
bGluZTo6dmFsdWVEZXNjcmlwdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TWVudUxpc3RQb3B1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
TWVudUxpc3RQb3B1cDo6bWVudUxpc3RPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5
Um9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FudmFz
SGFzRmFsbGJhY2tDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojppc0hvdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVxdWlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRm9yUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQ29udHJvbCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YW5jaG9yRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjppc05vZGVBY3Rpb25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojptb3VzZUJ1dHRvbkxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpsYWJlbEZvckVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlRWxlbWVudFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFsdGVybmF0aXZlVGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dmlzaWJsZVRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFjY2Vzc2liaWxp
dHlEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6aGVscFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmhpZXJhcmNoaWNhbExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojp0aXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6Y29sb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjphY2Nlc3NpYmxlTmFtZUZv
ck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNl
dEZvY3VzQXR0cmlidXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzVGFnTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGFzc0xpc3QpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YW5jaG9yRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoZWxwVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYWJlbEVsZW1lbnRD
b250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
aW50ZXJuYWxMaW5rRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphZGRSYWRpb0J1dHRvbkdyb3VwTWVtYmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRsZVVJRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlz
SWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
Y2Nlc3NLZXkpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEVs
ZW1lbnRBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzZXRGb2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0
VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb3Jy
ZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJPYmplY3RJc09ic2VydmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJp
bGl0eVJvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
aW5oZXJpdHNQcmVzZW50YXRpb25hbFJvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEZpZWxkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cmVtb3RlU1ZHUm9vdEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0QWNjZXNzaWJsZU5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5n
VmFsdWVGb3JNU0FBKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmlzTGlua2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OnN0cmluZ1JvbGVGb3JNU0FBKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmlzTWF0aEVsZW1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNlYXJjaEZpZWxkQnV0dG9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5U2VhcmNoRmllbGRDYW5jZWxCdXR0b246OnByZXNzKToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5VGFibGU6OnRhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6dGl0bGUpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5
Q2hpbGRyZW5TZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlVGFibGVHZXRDYXB0aW9uKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0TmFt
ZSk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0RGVzY3JpcHRpb24pOgorICAgICAgICAo
d2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2dvYmpl
Y3QvV2ViS2l0RE9NUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OndyYXApOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnN0cnVjdEpTQXVkaW9Db250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTRE9NR2xvYmFsT2JqZWN0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpuYW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFbGVt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6aGFu
ZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNSZWFj
aGFibGVGcm9tRE9NKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVdyYXBwZXJJbmxpbmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZyYW1lRnJvbUV4ZWNTdGF0ZSk6Cisg
ICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06CisgICAgICAgIChraXRDbGFzcyk6CisgICAg
ICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVz
b3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVT
aGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0FjY2VwdGFibGVDU1NTdHlsZVNoZWV0UGFy
ZW50KToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNo
ZWNrZXJUZXN0RnVuY3Rpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjppc0F1dG9maWxsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjppc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6Om1h
dGNoZXNMYW5nUHNldWRvQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2hlc0Z1dHVyZUN1
ZVBzZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNQYXN0Q3VlUHNldWRvQ2xh
c3MpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmVsZW1l
bnRIYXNEaXJlY3Rpb25BdXRvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjp1c2VTVkdab29tUnVsZXNGb3JMZW5ndGgpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVt
KToKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpzdHls
ZSk6CisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFy
YWN0ZXJEYXRhOjpzZXREYXRhQW5kVXBkYXRlKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0FjY2VwdENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6Om5vdGlmeUNoaWxkUmVtb3ZlZCk6CisgICAgICAgICogZG9t
L0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9k
ZUluc2VydGlvbk5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50SW5zZXJ0ZWRJbnRvVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRh
bnRSZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAqIGRvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRTY3JpcHRJbmNyZW1lbnRlcjo6Q3VycmVu
dFNjcmlwdEluY3JlbWVudGVyKToKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6c2V0RHJhZ0ltYWdlKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVsZW1lbnRGcm9t
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFRpdGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjppY29uVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpldmVudFRh
cmdldEVsZW1lbnRGb3JEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBk
YXRlSG92ZXJBY3RpdmVTdGF0ZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpjb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2Up
OgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpwYXJl
bnRFbGVtZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudFRyYXZlcnNhbC5oOgorICAgICAgICAo
V2ViQ29yZTo6VHJhdmVyc2FsPEVsZW1lbnQ+OjpuZXh0VGVtcGxhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8pOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBp
bmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpwc2V1ZG9B
d2FyZVByZXZpb3VzU2libGluZyk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dFdmVudENvbnRleHQ6OldpbmRvd0V2ZW50Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6bm9kZU9ySG9zdElmUHNldWRvRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFBhdGg6OkV2ZW50UGF0aCk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMp
OgorICAgICAgICAqIGRvbS9LZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBkb20vTGl2ZU5vZGVMaXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdDo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBkb20vTWVz
c2FnZVBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVz
c2FnZXMpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXVsYXRlZE1vdXNlRXZlbnQ6OlNpbXVsYXRlZE1vdXNlRXZlbnQpOgorICAgICAgICAqIGRv
bS9OYW1lZE5vZGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpzZXRO
YW1lZEl0ZW0pOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBzZXVkb0F3YXJl
UHJldmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBzZXVkb0F3YXJlTmV4
dFNpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29tcHV0ZWRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpwYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6YW5jZXN0b3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEF0dHJpYnV0ZURlc2Mp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2hvd05vZGVQYXRoRm9yVGhpcyk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjplbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBkb20vTm9kZVJlbmRlcmluZ1RyYXZl
cnNhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpub2Rl
Q2FuQmVEaXN0cmlidXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJhdmVy
c2FsOjp0cmF2ZXJzZVBhcmVudCk6CisgICAgICAgICogZG9tL05vZGVUcmF2ZXJzYWwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8p
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tp
cHBpbmdDaGlsZHJlbik6CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZHNPZk5vZGVB
cmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
Ojppc1JlbmRlcmVkQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpsZWFk
aW5nV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6
OmdldEJvcmRlckFuZFRleHRRdWFkcyk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSk6CisgICAgICAg
ICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBhcmVudE9yU2hh
ZG93SG9zdE5vZGUpOgorICAgICAgICAqIGRvbS9UZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmVhcmxpZXN0TG9naWNhbGx5QWRqYWNlbnRUZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjps
YXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU1ZH
U2hhZG93VGV4dCk6CisgICAgICAgICogZG9tL1RleHROb2RlVHJhdmVyc2FsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHROb2RlVHJhdmVyc2FsOjpjb250ZW50c0FzU3RyaW5nKToKKyAgICAg
ICAgKiBkb20vVGV4dE5vZGVUcmF2ZXJzYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHROb2Rl
VHJhdmVyc2FsOjpmaXJzdFRleHRDaGlsZFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHROb2RlVHJhdmVyc2FsOjpmaXJzdFRleHRXaXRoaW5UZW1wbGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Tm9kZVRyYXZlcnNhbDo6dHJhdmVyc2VOZXh0VGV4dFRlbXBsYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHROb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyk6CisgICAgICAgICog
ZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRv
cHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFk
b3B0ZXI6Om1vdmVOb2RlVG9OZXdEb2N1bWVudCk6CisgICAgICAgICogZWRpdGluZy9BcHBseUJs
b2NrRWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNOZXdMaW5lQXRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmVuZE9m
TmV4dFBhcmFncmFoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQpOgorICAgICAgICAqIGVkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNMZWdhY3lBcHBs
ZVN0eWxlU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjppc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5
U3R5bGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNTcGFuV2l0aG91dEF0dHJpYnV0
ZXNPclVuc3R5bGVkU3R5bGVTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRW1wdHlGb250VGFn
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250
U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9yc1dp
dGhVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRv
UHVzaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4
dEF0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRF
bGVtZW50QXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3Vs
ZFNwbGl0VGV4dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2Rlcyk6CisgICAgICAgICogZWRpdGlu
Zy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFrQmxv
Y2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omlz
UmVtb3ZhYmxlQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6
Omluc2VydE5vZGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6
Y2FuUmViYWxhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpw
cmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxpdCk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckRlbGV0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBo
cyk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmVuY2xvc2luZ0RlbGV0YWJsZUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVwV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OndyYXBw
aW5nU3R5bGVGb3JTZXJpYWxpemF0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omlz
U3BlbGxDaGVja2luZ0VuYWJsZWRGb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eUVkaXRpbmdTdHlsZVRvRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0Nv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNFbGVtZW50Rm9yRm9ybWF0QmxvY2spOgor
ICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhcmV0QmFz
ZTo6cGFpbnRDYXJldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6ZGVidWdS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToK
KyAgICAgICAgKFdlYkNvcmU6OnNjYW5Gb3JGb3JtKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2Vy
dExpbmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFr
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hi
b3JpbmdMaXN0cyk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6Omluc2VydFRhYik6CisgICAg
ICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpoYXZlU2FtZVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVVucmVuZGVy
ZWRUZXh0Tm9kZXNBdEVuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OnNob3VsZFBlcmZvcm1TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNlc0ZvclNtYXJ0UmVwbGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VUZXh0Tm9kZXNBcm91bmRQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5z
ZXJ0QXNMaXN0SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFjZSk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjppc0NoZWNrYWJsZSk6Cisg
ICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzUmVuZGVyZXJSZXBsYWNlZEVsZW1lbnQpOgorICAgICAgICAqIGVkaXRp
bmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0
aW9uOjppc0luUGFzc3dvcmRGaWVsZCk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRQb3NpdGlvbkZvckxpbmUpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5kUG9zaXRpb25Gb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZQ
YXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3JhcGgpOgorICAgICAgICAq
IGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6
OmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yQW5jZXN0b3JzKToKKyAgICAgICAgKEhUTUxDb252ZXJ0
ZXI6OmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudEFuZEl0c0FuY2VzdG9ycyk6CisgICAg
ICAgIChXZWJDb3JlOjplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSk6CisgICAgICAg
ICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdC
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdFbGVtZW50V2l0aFRhZyk6CisgICAg
ICAgIChXZWJDb3JlOjplbmNsb3NpbmdBbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmVuY2xvc2luZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6bGluZUJyZWFrRXhpc3RzQXRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjphcmVJZGVudGljYWxFbGVtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjppc05vblRhYmxlQ2VsbEhUTUxCbG9ja0VsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQpOgorICAgICAgICAqIGVk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4
dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0RpcmVjdGlvbik6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JUb1JldGFpblN0cnVj
dHVyZUFuZEFwcGVhcmFuY2VGb3JCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjppc1BsYWluVGV4
dE1hcmt1cCk6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
UmVhZGVyOjpyZWFkQXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRB
c0RhdGFVUkwpOgorICAgICAgICAqIGh0bWwvQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1
dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJ
bnB1dFR5cGU6OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAqIGh0bWwvRlRQRGlyZWN0b3J5
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJz
ZXI6OmxvYWREb2N1bWVudFRlbXBsYXRlKToKKyAgICAgICAgKiBodG1sL0Zvcm1Bc3NvY2lhdGVk
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZp
bmRBc3NvY2lhdGVkRm9ybSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpldmVudFR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6aXNFbnRlcktleUtleWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjppc0xp
bmtDbGljayk6CisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjppbWFnZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwv
SFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6
aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rp
b246OnVwZGF0ZU5hbWVkRWxlbWVudENhY2hlKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OmJnQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjpzZXRCZ0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxEb2N1bWVudDo6ZmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6
OnNldEZnQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjphbGlua0NvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6c2V0QWxpbmtDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OmxpbmtDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRG9jdW1lbnQ6OnNldExpbmtDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnQ6OnZsaW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjpzZXRW
bGlua0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6aXNGcmFtZVNldCk6
CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RWxlbWVudDo6bWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6
Om1lcmdlV2l0aE5leHRUZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6
c2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpzZXRPdXRlclRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6Omluc2VydEFkamFjZW50RWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0RWxlbWVudEZvckluc2VydGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEVsZW1lbnQ6OmRpckF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwv
SFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlRnJvbUNvbnRyb2xFbGVtZW50c0FuY2VzdG9y
RGlzYWJsZWRTdGF0ZVVuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1l
bnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
Y29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
c2hvdWxkQXV0b2ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmVuY2xvc2luZ0Zvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0SW1w
bGljaXRseSk6CisgICAgICAgIChXZWJDb3JlOjpzdWJtaXRFbGVtZW50RnJvbUV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpkZWZhdWx0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKToKKyAgICAgICAgKiBodG1sL0hU
TUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25l
ckVsZW1lbnQ6OmdldFNWR0RvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGF0YUxpc3QpOgorICAgICAgICAq
IGh0bWwvSFRNTExhYmVsRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub2RlQXNTdXBw
b3J0ZWRMYWJlbGFibGVFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxMZWdlbmRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Ojp2aXJ0dWFsRm9ybSk6
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxP
YmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpo
YXNGYWxsYmFja0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6
OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6OnJlY2FsY1NlbGVj
dE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudDo6b3duZXJT
ZWxlY3RFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudDo6b3duZXJEYXRhTGlzdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6aXNEaXNhYmxlZEZvcm1Db250cm9s
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uSW5u
ZXJUZXh0KToKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkUGx1Z0luc0Zyb21Ob2RlTGlzdE1hdGNoaW5nUGx1Z0luT3JpZ2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OnNldFRleHQpOgorICAgICAgICAqIGh0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6Om5leHRWYWxpZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpzYXZlTGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RlZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpzZWxlY3RPcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
ZWxlY3RFbGVtZW50OjpsaXN0VG9PcHRpb25JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6ZGVzZWxlY3RJdGVtc1dpdGhvdXRWYWxpZGF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2VhcmNoT3B0aW9uc0ZvclZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlRm9ybUNvbnRyb2xT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVk
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZh
dWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpsYXN0U2VsZWN0ZWRMaXN0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVs
ZW1lbnQ6Om9wdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6OmFjY2Vzc0tleVNldFNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6Omxlbmd0aCk6CisgICAgICAgICogaHRtbC9IVE1MU291cmNlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTb3VyY2VFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAg
ICAgICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXND
bGlja2FibGVDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdW1tYXJ5RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmNhcHRpb24pOgorICAgICAg
ICAqIGh0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRhYmxlUGFydEVsZW1lbnQ6OmZpbmRQYXJlbnRUYWJsZSk6CisgICAgICAgICogaHRtbC9IVE1M
VGFibGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1l
bnQ6OnJvd0luZGV4KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpyb3dBZnRlcik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6bGFzdFJvdyk6Cisg
ICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlubmVyVGV4dFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OnBvc2l0aW9uRm9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ6OmluZGV4Rm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlV2l0aEhhcmRMaW5lQnJlYWtzKToKKyAgICAgICAg
KiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxl
RWxlbWVudDo6c2V0VGV4dCk6CisgICAgICAgICogaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6Om1lZGlhRWxlbWVudCk6CisgICAg
ICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseSk6Cisg
ICAgICAgICogaHRtbC9NZWRpYURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFuY2Vz
dG9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6aXNLZXlib2FyZEZvY3VzYWJsZSk6CisgICAg
ICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNJ
bXBsaWVkRW5kVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjph
dHRhY2hMYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5z
ZXJ0SFRNTEZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRUZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6b3duZXJEb2N1bWVudEZvckN1cnJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVyU2l0ZSk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6Omlz
U2NvcGVNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVzOjppc1RhYmxlU2NvcGVN
YXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVzOjppc1NlbGVjdFNjb3BlTWFya2Vy
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpyZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXJCdWZmZXIp
OgorICAgICAgICAqIGh0bWwvc2hhZG93L0luc2VydGlvblBvaW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjppc0FjdGl2ZUluc2VydGlvblBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVudE5v
ZGVGb3JEaXN0cmlidXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cGFyZW50RWxlbWVudEZvckRp
c3RyaWJ1dGlvbik6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5
cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVudE1lZGlhRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjptZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xD
bG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OmNvbnRhaW5zUmVsYXRlZFRhcmdldCk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbHNBcHBsZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBo
dG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGlu
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpT
cGluQnV0dG9uRWxlbWVudDo6Zm9yd2FyZEV2ZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIpOgorICAgICAgICAqIGh0bWwvdHJhY2svVlRUQ3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlZUVEN1ZTo6Y29weVdlYlZUVE5vZGVUb0RPTVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VlRU
Q3VlOjptYXJrRnV0dXJlQW5kUGFzdE5vZGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmVs
ZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQ
YXJlbnROb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGlzcGF0Y2hFdmVu
dEFzQ29udGV4dE1lbnVFdmVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmcmFtZUZvclNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpp
bnN0cnVtZW50aW5nQWdlbnRzRm9yTm9uRG9jdW1lbnRDb250ZXh0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTm9kZUZpbmRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JOb2RlRmluZGVyOjpzZWFyY2hVc2luZ0RPTVRyZWVUcmF2ZXJzYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTm9kZUZpbmRlcjo6c2VhcmNoVXNpbmdYUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOb2RlRmluZGVyOjpzZWFyY2hVc2luZ0NTU1Nl
bGVjdG9ycyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldDo6aW5saW5lU3R5bGVTaGVldFRleHQpOgorICAgICAgICAqIGxvYWRlci9G
b3JtU3VibWlzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmhhbmRsZUZhbGxiYWNrQ29udGVudCk6CisgICAgICAgICogbG9hZGVy
L1N1YmZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjps
b2FkUGx1Z2luKToKKyAgICAgICAgKiBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAg
ICogbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9y
eUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9y
eUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXMpOgorICAgICAgICAqIG1hdGht
bC9NYXRoTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTEVsZW1lbnQ6OmF0
dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxTZWxlY3RFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTFNlbGVjdEVsZW1lbnQ6OmdldFNlbGVjdGVkU2Vt
YW50aWNzQ2hpbGQpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZTo6c2V0VG9vbFRpcCk6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjptYXli
ZUNyZWF0ZUNvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJv
bGxlcjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBhZ2UvRE9NVGltZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NVGltZXI6Omluc3RhbGwpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6
OmZpcmVkKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmVsZW1lbnRVbmRlck1vdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjpvcGVyYXRpb25Gb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVy
OjpjYW5Qcm9jZXNzRHJhZyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJh
Z2dhYmxlRWxlbWVudCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNTdWJtaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjp0YXJnZXRJc0Zy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmREcm9wWm9uZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OnVwZGF0ZURyYWdBbmREcm9wKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5wdXRFdmVudCk6CisgICAgICAgICogcGFnZS9G
b2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2Nv
cGU6Om93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3Vz
YWJsZUVsZW1lbnREZXNjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZUVsZW1lbnRBY3Jvc3NGb2N1c1Nj
b3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEVsZW1lbnRXaXRo
RXhhY3RUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0RWxlbWVudFdpdGhHcmVhdGVy
VGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNFbGVtZW50V2l0aExvd2VyVGFi
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxl
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9j
dXNhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhclNlbGVjdGlvbklmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0
aW9uYWxseSk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojppbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAgICAqIHBhZ2UvUGFnZVNl
cmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6
ZUZyYW1lKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvY3VzQ2FuZGlkYXRlOjpGb2N1c0NhbmRpZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxhYmxlRW5j
bG9zaW5nQm94T3JQYXJlbnRGcmFtZUZvck5vZGVJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpjYW5TY3JvbGxJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub2RlUmVjdElu
QWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjphcmVFbGVtZW50c09uU2Ft
ZUxpbmUpOgorICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6YW5jZXN0b3JSZXNwb25kaW5nVG9DbGlja0V2ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5k
S2V5VmFsdWVQYWlySXRlbXMpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnNldElubmVyTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZXRJbm5lck5vblNoYXJlZE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVuY2F0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdDo6bWVkaWFTdXBwb3J0c0Z1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6ZW50ZXJGdWxsc2NyZWVuRm9yVmlkZW8pOgorICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdDo6bWVkaWFJc1ZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
dFRlc3RSZXN1bHQ6OmlubmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVz
dWx0Ojppbm5lck5vblNoYXJlZEVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzaXplVGV4dFBlcm1pdHRlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNpemVzTG9naWNhbFdpZHRoVG9GaXRDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbGFuQ291bnRlcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRGV0YWlsc01hcmtlcjo6aXNPcGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6
OnBhaW50QXJlYUVsZW1lbnRGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1h
Z2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmltYWdl
TWFwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlU25hcE9mZnNldHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNSZXN0YXJ0ZWRQbHVnaW4pOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6
cGFpbnRJdGVtQmFja2dyb3VuZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6bWFycXVlZVNwZWVkKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c2VsZWN0ZWRPcHRpb25Db3VudCk6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0
aW9uc1dpZHRoKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbik6
CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6aXRlbVRleHQpOgorICAgICAgICAoUmVuZGVyTWVu
dUxpc3Q6Oml0ZW1Jc0VuYWJsZWQpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0xh
YmVsKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZWxlY3RlZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1l
dGVyOjptZXRlckVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjppc0No
aWxkQWxsb3dlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkZFBERlVSTFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0OjpzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnVwZGF0ZURyYWdTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmdldFVuY2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clByb2dyZXNzOjpwcm9ncmVzc0VsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbmFwc2hvdHRl
ZFBsdWdJbjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29udmVydFN0eWxlTG9naWNhbFdp
ZHRoVG9Db21wdXRlZFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjb252
ZXJ0U3R5bGVMb2dpY2FsSGVpZ2h0VG9Db21wdXRlZEhlaWdodCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNl
bGw6OnBhcnNlQ29sU3BhbkZyb21ET00pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
ZWxsOjpwYXJzZVJvd1NwYW5Gcm9tRE9NKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjppc1ByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OmlzUmVhZE9ubHlDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpp
c0hvdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9u
UGFydEhvdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50U2xpZGVy
VGlja3MpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om5vZGVIYXNDbGFzcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbmFwc2hv
dHRlZFBsdWdpbk92ZXJsYXkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NvbnRhaW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0QXV0b3NpemVyOjpjb250YWluZXJDb250YWluc09uZU9mVGFncyk6CisgICAgICAg
ICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6aXNDaGlsZEFsbG93ZWQpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0dyYWRpZW50U3RvcDo6Z3JhZGllbnRFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6Y2FsY3VsYXRlTG9jYWxUcmFu
c2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJT
VkdDb250ZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjppbnZhbGlkYXRlV2hpdGVzcGFjZU9ubHlUZXh0U2libGluZ3NB
ZnRlckF0dGFjaElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjphdHRhY2hDaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6YXR0YWNoRGlzdHJpYnV0ZWRDaGlsZHJl
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OnJlc29sdmVTaGFkb3dUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpyZXNvbHZlVHJlZSk6CisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBz
dmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FsdEdseXBo
RWxlbWVudDo6aGFzVmFsaWRHbHlwaEVsZW1lbnRzKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50Ojpyb290RWxlbWVudCk6CisgICAg
ICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6
aXNPdXRlcm1vc3RTVkdTVkdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6
Om93bmVyU1ZHRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojp2aWV3cG9y
dEVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdGb250RGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVjdGlvbik6CisgICAgICAgICogc3Zn
L1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVs
ZW1lbnQ6OmFzc29jaWF0ZWRGb250RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250
RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNl
U3JjRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZVNyY0VsZW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR0dseXBoRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1lbnQ6OmludmFsaWRhdGVHbHlwaENhY2hlKToK
KyAgICAgICAgKiBzdmcvU1ZHSEtlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0hLZXJuRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0hLZXJu
RWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmRldGVybWluZVZpZXdwb3J0
KToKKyAgICAgICAgKiBzdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Y29sbGVjdEdyYWRpZW50QXR0cmli
dXRlcyk6CisgICAgICAgICogc3ZnL1NWR0xvY2F0YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojppc1ZpZXdwb3J0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMb2NhdGFibGU6Omdl
dFRyYW5zZm9ybVRvRWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVsZW1lbnQ6OnBhdGhFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR01QYXRoRWxlbWVudDo6bm90aWZ5UGFyZW50T2ZQYXRoQ2hhbmdlKToK
KyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0aERlcGVuZGVuY2llcyk6CisgICAgICAgICogc3Zn
L1NWR1BhdHRlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVt
ZW50Ojpjb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMpOgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxH
cmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50Ojpjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHU1ZH
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpzZXR1cEluaXRp
YWxWaWV3KToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6ZWxlbWVudEZyb21SZW5kZXJlcik6
CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHVt
cEluc3RhbmNlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50Ojp0b0NsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmV4cGFuZFVzZUVsZW1lbnRz
SW5TaGFkb3dUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmV4cGFuZFN5
bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKToKKyAgICAgICAgKiBzdmcvU1ZHVktlcm5FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZLZXJuRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1ZLZXJuRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAg
ICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hl
OjppbWFnZUZvclJlbmRlcmVyKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNoYWRvd1Jvb3RUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6c2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3Nlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6Ondhc0xhc3RDaGFuZ2VVc2VyRWRpdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RM
YXlvdXRUYXNrcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmlzU2VsZWN0UG9wdXBW
aXNpYmxlKToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdCk6CisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpvcGVuKToKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OmV4cGFuZGVkTmFtZUxvY2FsUGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6RnVuTGFuZzo6ZXZhbHVhdGUpOgorICAgICAgICAqIHhtbC9YUGF0aE5vZGVT
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OnNvcnRCbG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6Tm9kZVNldDo6c29ydCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
ZmluZFJvb3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojp0cmF2ZXJz
YWxTb3J0KToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJz
ZXIpOgorCiAyMDE0LTEwLTAyICBSaWsgQ2FiYW5pZXIgIDxjYWJhbmllckBhZG9iZS5jb20+CiAK
ICAgICAgICAgQ2xlYW4gdXAgbG9vcHMgaW4gQ1NTR3JhZGllbnRWYWx1ZS5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5n
ZUxvZwppbmRleCAzYzA3MzlkYTA5ODYwMzkwZTk5YzcyNTY2OTEwMGFkZGNmZTUzYWJmLi5hYTU4
ZTcxMzRjZTJiZDJiYjg4NWYxMWMzYzZkOTFmZWRjZTIyYTI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTQtMTAtMDEgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgorCisgICAgICAgIEhhdmUgaXM8PihUKikgZnVuY3Rpb24gZG8gYSBudWxsIGNoZWNr
IG9uIHRoZSBwb2ludGVyIGFyZ3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzczMzMKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJy
YWNsb3VnaC4KKworICAgICAgICBIYXZlIGlzPD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVsbCBjaGVj
ayBvbiB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiBhCisgICAgICAgIHNpbXBsZSBhc3NlcnRpb24u
IFRoaXMgbWFrZXMgc2Vuc2UgZm9yIDIgcmVhc29uczoKKyAgICAgICAgMS4gSXQgaXMgbW9yZSBj
b25zaXN0ZW50IHdpdGggZG93bmNhc3Q8PihUKiksIHdoaWNoIHdpbGwgc3VjY2VlZCBldmVuCisg
ICAgICAgICAgIGlmIHRoZSBhcmd1bWVudCBpcyBhIG51bGxwdHIuCisgICAgICAgIDIuIEl0IHNp
bXBsaWZpZXMgdGhlIGNvZGUgYSBiaXQgYXMgaXQgZ2V0cyByaWQgb2YgYSBsb3Qgb2YgZXhwbGlj
aXQKKyAgICAgICAgICAgbnVsbCBjaGVja3MuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnRJT1MubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnRJT1M6OmZvY3Vz
ZWRFbGVtZW50Q2hhbmdlZCk6CisKIDIwMTQtMDktMjkgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNA
YXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFJlbW92ZSBDb3JlTG9jYXRpb24gd29ya2Fyb3Vu
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCmluZGV4IDRiMTA5YWI0NTMxNzJhOWQ3OThiMTQ2OGI0ZGMxM2ZmMjJh
YjUzYWYuLmVhZTMzM2FiYWI4MmU5Y2UxMzQ1YzRjN2Y3YzZkNTZmZjkyNTYyMjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxNC0xMC0wMSAgQ2hyaXN0b3BoZSBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBpczw+KFQqKSBmdW5jdGlvbiBkbyBh
IG51bGwgY2hlY2sgb24gdGhlIHBvaW50ZXIgYXJndW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzMworCisgICAgICAgIFJldmlld2VkIGJ5
IEdhdmluIEJhcnJhY2xvdWdoLgorCisgICAgICAgIEhhdmUgaXM8PihUKikgZnVuY3Rpb24gZG8g
YSBudWxsIGNoZWNrIG9uIHRoZSBhcmd1bWVudCBpbnN0ZWFkIG9mIGEKKyAgICAgICAgc2ltcGxl
IGFzc2VydGlvbi4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgMiByZWFzb25zOgorICAgICAgICAxLiBJ
dCBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBkb3duY2FzdDw+KFQqKSwgd2hpY2ggd2lsbCBzdWNj
ZWVkIGV2ZW4KKyAgICAgICAgICAgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVsbHB0ci4KKyAgICAg
ICAgMi4gSXQgc2ltcGxpZmllcyB0aGUgY29kZSBhIGJpdCBhcyBpdCBnZXRzIHJpZCBvZiBhIGxv
dCBvZiBleHBsaWNpdAorICAgICAgICAgICBudWxsIGNoZWNrcy4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6
Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2lu
RWRpdGluZyk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRp
bmcpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQp
OgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQp
OgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxk
KToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEpOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tOgorICAgICAgICAoaW5w
dXRFbGVtZW50RnJvbURPTUVsZW1lbnQpOgorICAgICAgICAoc2VhcmNoRm9yTGFiZWxzQmVmb3Jl
RWxlbWVudCk6CisgICAgICAgICogV2ViVmlldy9XZWJSZW5kZXJMYXllci5tbToKKyAgICAgICAg
KCtbV2ViUmVuZGVyTGF5ZXIgbmFtZUZvckxheWVyOl0pOgorCiAyMDE0LTEwLTAxICBNYXJrIFJv
d2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEz
NzMwOD4gV2ViS2l0IHNob3VsZCBidWlsZCBvbiBPUyBYIFlvc2VtaXRlIGZvciBleHRlcm5hbCB1
c2VycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGFmYWM4MmZjZDc2MzBlMzYwYTUzNWQ1YjcyNGI5NTA2
MTVlNWJhMTAuLmM3MTJhODFmMmUwYmVkMDYxYzk2NzBhMDZmOGVlZWMzODdjYTMyYjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxNC0xMC0wMSAgQ2hyaXN0b3BoZSBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBpczw+KFQqKSBmdW5jdGlvbiBk
byBhIG51bGwgY2hlY2sgb24gdGhlIHBvaW50ZXIgYXJndW1lbnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IEdhdmluIEJhcnJhY2xvdWdoLgorCisgICAgICAgIEhhdmUgaXM8PihUKikgZnVuY3Rpb24g
ZG8gYSBudWxsIGNoZWNrIG9uIHRoZSBhcmd1bWVudCBpbnN0ZWFkIG9mIGEKKyAgICAgICAgc2lt
cGxlIGFzc2VydGlvbi4gVGhpcyBtYWtlcyBzZW5zZSBmb3IgMiByZWFzb25zOgorICAgICAgICAx
LiBJdCBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBkb3duY2FzdDw+KFQqKSwgd2hpY2ggd2lsbCBz
dWNjZWVkIGV2ZW4KKyAgICAgICAgICAgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVsbHB0ci4KKyAg
ICAgICAgMi4gSXQgc2ltcGxpZmllcyB0aGUgY29kZSBhIGJpdCBhcyBpdCBnZXRzIHJpZCBvZiBh
IGxvdCBvZiBleHBsaWNpdAorICAgICAgICAgICBudWxsIGNoZWNrcy4KKworICAgICAgICAqIERP
TUNvcmVDbGFzc2VzLmNwcDoKKyAgICAgICAgKERPTUVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKToK
KyAgICAgICAgKiBET01IVE1MQ2xhc3Nlcy5jcHA6CisgICAgICAgIChET01IVE1MRG9jdW1lbnQ6
OmJvZHkpOgorICAgICAgICAoRE9NSFRNTERvY3VtZW50Ojpmb3Jtcyk6CisgICAgICAgIChET01I
VE1MRWxlbWVudDo6aWROYW1lKToKKyAgICAgICAgKERPTUhUTUxFbGVtZW50Ojppbm5lclRleHQp
OgorICAgICAgICAoRE9NSFRNTEVsZW1lbnQ6OnNldElubmVyVGV4dCk6CisgICAgICAgIChET01I
VE1MRm9ybUVsZW1lbnQ6OmFjdGlvbik6CisgICAgICAgIChET01IVE1MRm9ybUVsZW1lbnQ6Om1l
dGhvZCk6CisgICAgICAgIChET01IVE1MT3B0aW9uRWxlbWVudDo6dGV4dCk6CisgICAgICAgIChE
T01IVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVu
dDo6Zm9ybSk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpkaXNhYmxlZCk6CisgICAg
ICAgIChET01IVE1MSW5wdXRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpzZXRUeXBlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVl
KToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAgICAgKERP
TUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcik6CisgICAgICAgIChET01IVE1MSW5w
dXRFbGVtZW50OjpzZWxlY3QpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2Vs
ZWN0aW9uU3RhcnQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3Rh
cnQpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKToKKyAg
ICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCk6CisgICAgICAgIChET01I
VE1MSW5wdXRFbGVtZW50Ojppc1RleHRGaWVsZCk6CisgICAgICAgIChET01IVE1MSW5wdXRFbGVt
ZW50OjpyZWN0T25TY3JlZW4pOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6cmVwbGFj
ZUNoYXJhY3RlcnNJblJhbmdlKToKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVj
dGVkUmFuZ2UpOgorICAgICAgICAoRE9NSFRNTElucHV0RWxlbWVudDo6c2V0QXV0b2ZpbGxlZCk6
CisgICAgICAgIChET01IVE1MSW5wdXRFbGVtZW50Ojppc0F1dG9maWxsZWQpOgorICAgICAgICAo
RE9NSFRNTElucHV0RWxlbWVudDo6aXNVc2VyRWRpdGVkKToKKyAgICAgICAgKERPTUhUTUxUZXh0
QXJlYUVsZW1lbnQ6OmZvcm0pOgorICAgICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6dmFs
dWUpOgorICAgICAgICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0VmFsdWUpOgorICAgICAg
ICAoRE9NSFRNTFRleHRBcmVhRWxlbWVudDo6c2VsZWN0KToKKyAgICAgICAgKERPTUhUTUxUZXh0
QXJlYUVsZW1lbnQ6OmlzVXNlckVkaXRlZCk6CisgICAgICAgICogV2ViRnJhbWUuY3BwOgorICAg
ICAgICAoZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudCk6CisgICAgICAgIChpbnB1dEVsZW1lbnRG
cm9tRE9NRWxlbWVudCk6CisgICAgICAgIChXZWJGcmFtZTo6ZWxlbWVudFdpdGhOYW1lKToKKwog
MjAxNC0wOS0zMCAgQ2hyaXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAg
ICAgR2VuZXJhbGl6ZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgc3VwcG9ydCB0byBhbGwgdHlwZXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1ZGMxMzJlMDI3MjYyNWZlOWQ3ZmRjMGMxOGI2MTViYmU5YWRjODlkLi4x
NzFjN2IzNGUyMjBiOTE0ZjdjYWZiMWFmZWZlMDc2MjFkMjcyNmNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDggQEAKKzIwMTQtMTAtMDEgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCisgICAgICAgIEhhdmUgaXM8PihUKikgZnVuY3Rpb24gZG8gYSBudWxsIGNoZWNrIG9u
IHRoZSBwb2ludGVyIGFyZ3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzczMzMKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNs
b3VnaC4KKworICAgICAgICBIYXZlIGlzPD4oVCopIGZ1bmN0aW9uIGRvIGEgbnVsbCBjaGVjayBv
biB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiBhCisgICAgICAgIHNpbXBsZSBhc3NlcnRpb24uIFRo
aXMgbWFrZXMgc2Vuc2UgZm9yIDIgcmVhc29uczoKKyAgICAgICAgMS4gSXQgaXMgbW9yZSBjb25z
aXN0ZW50IHdpdGggZG93bmNhc3Q8PihUKiksIHdoaWNoIHdpbGwgc3VjY2VlZCBldmVuCisgICAg
ICAgICAgIGlmIHRoZSBhcmd1bWVudCBpcyBhIG51bGxwdHIuCisgICAgICAgIDIuIEl0IHNpbXBs
aWZpZXMgdGhlIGNvZGUgYSBiaXQgYXMgaXQgZ2V0cyByaWQgb2YgYSBsb3Qgb2YgZXhwbGljaXQK
KyAgICAgICAgICAgbnVsbCBjaGVja3MuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVuZGVyT2JqZWN0OjpXZWJSZW5kZXJPYmpl
Y3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVI
aXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVIaXRUZXN0
UmVzdWx0OjptZWRpYVR5cGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6aGFuZGxlRXZlbnQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVk
aXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJ
blRleHRGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dGV4dERpZENo
YW5nZUluVGV4dEFyZWEpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmRvVGV4
dEZpZWxkQ29tbWFuZEZyb21FdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVu
dDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmNvbnRhaW5z
QW55Rm9ybUVsZW1lbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmNvbnRhaW5zQW55
Rm9ybUNvbnRyb2xzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBkZkRvY3VtZW50Rm9yUHJpbnRpbmdGcmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRldGVybWluZVByaW1hcnlTbmFwc2hvdHRlZFBs
dWdJbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpibHVyQXNzaXN0ZWROb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpwZXJmb3JtQWN0aW9uT25FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6aXNBc3Npc3Rh
YmxlTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9y
bWF0aW9uKToKKwogMjAxNC0xMC0wMiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+
CiAKICAgICAgICAgQ2xlYW4gdXA6IE1vdmUgWFBDIGZvcndhcmQgZGVjbGFyYXRpb25zIGluIEph
dmFTY3JpcHRDb3JlIHRvIFdURiBTUEkgd3JhcHBlciBoZWFkZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1R5cGVDYXN0cy5oIGIvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKaW5kZXgg
NmY3NmM4Y2QwY2M2ZTc5NWM0ZTE1MDg5ZmZjNTQzYTdiYTUwZGJkNi4uM2MyMDM0MTUwY2EzZjY2
YWRlYTRkNmJiNmU1ZWY5ZWFmNzIzYzNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVHlw
ZUNhc3RzLmgKKysrIGIvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKQEAgLTYwLDkgKzYwLDgg
QEAgaW5saW5lIGJvb2wgaXMoQXJnVHlwZSYgc291cmNlKQogdGVtcGxhdGUgPHR5cGVuYW1lIEV4
cGVjdGVkVHlwZSwgdHlwZW5hbWUgQXJnVHlwZT4KIGlubGluZSBib29sIGlzKEFyZ1R5cGUqIHNv
dXJjZSkKIHsKLSAgICBBU1NFUlQoc291cmNlKTsKICAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6Omlz
X2Jhc2Vfb2Y8RXhwZWN0ZWRUeXBlLCBBcmdUeXBlPjo6dmFsdWUsICJVbm5lY2Vzc2FyeSB0eXBl
IGNoZWNrIik7Ci0gICAgcmV0dXJuIFR5cGVDYXN0VHJhaXRzPGNvbnN0IEV4cGVjdGVkVHlwZSwg
Y29uc3QgQXJnVHlwZT46OmlzT2ZUeXBlKCpzb3VyY2UpOworICAgIHJldHVybiBzb3VyY2UgJiYg
VHlwZUNhc3RUcmFpdHM8Y29uc3QgRXhwZWN0ZWRUeXBlLCBjb25zdCBBcmdUeXBlPjo6aXNPZlR5
cGUoKnNvdXJjZSk7CiB9CiAKIC8vIFNhZmUgZG93bmNhc3RpbmcgZnVuY3Rpb25zLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAppbmRleCAwMTI4
ZjUwZDI5MjlmNTEyNWY4YjBiMTMyZGViYWQ3ZWVhOGM2MzhhLi4wZTQ2YWM2MjY1MGY2ZmZhNDdm
NTNjYmE3YWQ5MmYwZTdmYTI2YWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmNwcApAQCAtNjgsOCArNjgsOCBAQCBJREJGYWN0b3J5Ojp+SURC
RmFjdG9yeSgpCiBuYW1lc3BhY2Ugewogc3RhdGljIGJvb2wgaXNDb250ZXh0VmFsaWQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBBU1NFUlQoaXM8RG9jdW1lbnQ+KGNv
bnRleHQpIHx8IGNvbnRleHQtPmlzV29ya2VyR2xvYmFsU2NvcGUoKSk7Ci0gICAgaWYgKGlzPERv
Y3VtZW50Pihjb250ZXh0KSkgeworICAgIEFTU0VSVChpczxEb2N1bWVudD4oKmNvbnRleHQpIHx8
IGNvbnRleHQtPmlzV29ya2VyR2xvYmFsU2NvcGUoKSk7CisgICAgaWYgKGlzPERvY3VtZW50Pigq
Y29udGV4dCkpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmZyYW1lKCkgJiYgZG9jdW1l
bnQucGFnZSgpICYmICghZG9jdW1lbnQucGFnZSgpLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpIHx8
IFNjaGVtZVJlZ2lzdHJ5OjphbGxvd3NEYXRhYmFzZUFjY2Vzc0luUHJpdmF0ZUJyb3dzaW5nKGRv
Y3VtZW50LnNlY3VyaXR5T3JpZ2luKCktPnByb3RvY29sKCkpKTsKICAgICB9CkBAIC03OSw3ICs3
OSw3IEBAIHN0YXRpYyBib29sIGlzQ29udGV4dFZhbGlkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCiBzdGF0aWMgU3RyaW5nIGdldEluZGV4ZWREQkRhdGFiYXNlUGF0aChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIEFTU0VSVChpc0NvbnRleHRWYWxpZChj
b250ZXh0KSk7Ci0gICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0KSkgeworICAgIGlmIChpczxE
b2N1bWVudD4oKmNvbnRleHQpKSB7CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCk7CiAgICAgICAgIHJldHVybiBkb2N1bWVudC5wYWdlKCkt
Pmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpLmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMv
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IDgzOWZhODcyMzY2YmRlNmU0Mzcw
NjA1MTJhZDI2MWY0Y2QwODI1YzIuLmEyNzI4NTJkY2Y2ODcwMDVlNDhmMGNhMjczM2NlNzhkZjAw
MGYzMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtNTUsNyArNTUsNyBA
QCBQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6Y3JlYXRlKFNjcmlwdAogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NF
UlQoY2xpZW50KTsKIAotICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCkpIHsK
KyAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KSkgewogICAgICAgICBXb3Jr
ZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUgPSBkb3duY2FzdDxXb3JrZXJHbG9iYWxT
Y29wZT4oKmNvbnRleHQpOwogICAgICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2Vy
R2xvYmFsU2NvcGUudGhyZWFkKCkucnVuTG9vcCgpOwogICAgICAgICBTdHJpbmdCdWlsZGVyIG1v
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3Bw
CmluZGV4IDk4YmRjZTJmZDNkZGJlNzI5MGIzN2RkMzkxMzA1ZGZiN2UwZmYwNDMuLmZkNDc3OTZk
MTNhYjkyNGU5ODIwN2VmMWQyNDhkNThjNzhiMWNiZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCkBAIC0yMzksNyArMjM5LDcgQEAgdm9p
ZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwcm90b2NvbHMsIEV4Y2UKIAogICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gY2hl
Y2sgdGhlIGlzb2xhdGVkIHdvcmxkJ3MgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgb25jZSB3ZWJr
aXQub3JnL2IvMTA0NTIwIGlzIHNvbHZlZC4KICAgICBib29sIHNob3VsZEJ5cGFzc01haW5Xb3Js
ZENvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlOwotICAgIGlmIChpczxEb2N1bWVudD4oc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKSkgeworICAgIGlmIChpczxEb2N1bWVudD4oKnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgICAgICBzaG91bGRC
eXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBkb2N1bWVudC5mcmFtZSgpLT5z
Y3JpcHQoKS5zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0SGFuZHNoYWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXRIYW5kc2hha2UuY3BwCmluZGV4IGYzNjZhMmQ1ZmE2ODcyNGIxOTg2MGMzMDc5ZWM5Njgw
MmJlYzM3MmQuLmM3MzA0NjFkY2U5MjBhM2FhOTAzODg4NjgwMDZjZjM0ZDZiNjA2YzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hh
a2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwCkBAIC0xOTYsNyArMTk2LDcgQEAgQ1N0cmluZyBXZWJTb2NrZXRIYW5kc2hh
a2U6OmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKSBjb25zdAogICAgICAgICBmaWVsZHMuYXBwZW5k
KCJTZWMtV2ViU29ja2V0LVByb3RvY29sOiAiICsgbV9jbGllbnRQcm90b2NvbCk7CiAKICAgICBV
UkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygpOwotICAgIGlmIChp
czxEb2N1bWVudD4obV9jb250ZXh0KSkgeworICAgIGlmIChpczxEb2N1bWVudD4oKm1fY29udGV4
dCkpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpt
X2NvbnRleHQpOwogICAgICAgICBTdHJpbmcgY29va2llID0gY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoJmRvY3VtZW50LCB1cmwpOwogICAgICAgICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRl
eCA2ZDJmMzJjYjgxMGY0NDdmNmNhYzQ5NTExZmMyZjcxODAwYjE1YTQ4Li41N2VhMDZmYTkyNzQ3
YjY0Y2U5NmQyMTJhMTI5NDExNDQ3MWFmMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTE3Niw3ICsxNzYsNyBAQCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpmb2N1c2VkVUlFbGVtZW50Rm9yUGFnZShjb25zdCBQ
YWdlKiBwYWdlKQogICAgIC8vIGdldCB0aGUgZm9jdXNlZCBub2RlIGluIHRoZSBwYWdlCiAgICAg
RG9jdW1lbnQqIGZvY3VzZWREb2N1bWVudCA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpLmRvY3VtZW50KCk7CiAgICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQg
PSBmb2N1c2VkRG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgaWYgKGZvY3VzZWRFbGVt
ZW50ICYmIGlzPEhUTUxBcmVhRWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKQorICAgIGlmIChpczxI
VE1MQXJlYUVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZvY3VzZWRJ
bWFnZU1hcFVJRWxlbWVudChkb3duY2FzdDxIVE1MQXJlYUVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50
KSk7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBmb2N1c2VkRG9jdW1lbnQtPmF4
T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoZm9jdXNlZEVsZW1lbnQgPyBzdGF0aWNfY2FzdDxO
b2RlKj4oZm9jdXNlZEVsZW1lbnQpIDogZm9jdXNlZERvY3VtZW50KTsKQEAgLTI5NCw3ICsyOTQs
NyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGVGcm9tUmVu
ZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcgogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0
eVNWR1Jvb3Q6OmNyZWF0ZShyZW5kZXJlcik7CiAgICAgCiAgICAgLy8gU2VhcmNoIGZpZWxkIGJ1
dHRvbnMKLSAgICBpZiAobm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSkuaXNTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKKyAgICBpZiAo
aXM8RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzU2VhcmNoRmll
bGRDYW5jZWxCdXR0b25FbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b246OmNyZWF0ZShyZW5kZXJlcik7CiAgICAgCiAgICAgaWYgKHJl
bmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKQEAgLTM4Niw3ICszODYsNyBAQCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShOb2RlKiBub2RlKQogCiAg
ICAgYm9vbCBpbnNpZGVNZXRlckVsZW1lbnQgPSBmYWxzZTsKICNpZiBFTkFCTEUoTUVURVJfRUxF
TUVOVCkKLSAgICBpbnNpZGVNZXRlckVsZW1lbnQgPSBpczxIVE1MTWV0ZXJFbGVtZW50Pihub2Rl
LT5wYXJlbnRFbGVtZW50KCkpOworICAgIGluc2lkZU1ldGVyRWxlbWVudCA9IGlzPEhUTUxNZXRl
ckVsZW1lbnQ+KCpub2RlLT5wYXJlbnRFbGVtZW50KCkpOwogI2VuZGlmCiAgICAgCiAgICAgaWYg
KCFpbkNhbnZhc1N1YnRyZWUgJiYgIWlzSGlkZGVuICYmICFpbnNpZGVNZXRlckVsZW1lbnQpCkBA
IC02NTMsNyArNjUzLDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVNZW51T3BlbmVkKE5v
ZGUqIG5vZGUpCiAgICAgCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUxpdmVSZWdpb25DcmVh
dGVkKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8
ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpIHx8ICFub2Rl
LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgRWxlbWVudCogZWxlbWVu
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwpAQCAtOTE3LDcgKzkxNyw3IEBAIHZvaWQgQVhP
YmplY3RDYWNoZTo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSwgRWxlbWVuCiAgICAgICAgIGhhbmRsZUFyaWFSb2xlQ2hhbmdlZChlbGVtZW50KTsK
ICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBhbHRBdHRyIHx8IGF0dHJOYW1lID09IHRpdGxlQXR0
cikKICAgICAgICAgdGV4dENoYW5nZWQoZWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gZm9yQXR0ciAmJiBpczxIVE1MTGFiZWxFbGVtZW50PihlbGVtZW50KSkKKyAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBmb3JBdHRyICYmIGlzPEhUTUxMYWJlbEVsZW1lbnQ+KCplbGVtZW50KSkK
ICAgICAgICAgbGFiZWxDaGFuZ2VkKGVsZW1lbnQpOwogCiAgICAgaWYgKCFhdHRyTmFtZS5sb2Nh
bE5hbWUoKS5zdHJpbmcoKS5zdGFydHNXaXRoKCJhcmlhLSIpKQpAQCAtOTQ3LDggKzk0Nyw4IEBA
IHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSwgRWxlbWVuCiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6bGFiZWxDaGFu
Z2VkKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGlzPEhUTUxMYWJlbEVsZW1lbnQ+
KGVsZW1lbnQpKTsKLSAgICBIVE1MRWxlbWVudCogY29ycmVzcG9uZGluZ0NvbnRyb2wgPSBkb3du
Y2FzdDxIVE1MTGFiZWxFbGVtZW50PihlbGVtZW50KS0+Y29udHJvbCgpOworICAgIEFTU0VSVChp
czxIVE1MTGFiZWxFbGVtZW50PigqZWxlbWVudCkpOworICAgIEhUTUxFbGVtZW50KiBjb3JyZXNw
b25kaW5nQ29udHJvbCA9IGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KCplbGVtZW50KS5jb250
cm9sKCk7CiAgICAgdGV4dENoYW5nZWQoY29ycmVzcG9uZGluZ0NvbnRyb2wpOwogfQogCkBAIC0x
MDMwLDcgKzEwMzAsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yVmlz
aWJsZVBvc2l0aW9uKFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRAogY29uc3QgRWxlbWVudCog
QVhPYmplY3RDYWNoZTo6cm9vdEFYRWRpdGFibGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiB7
CiAgICAgY29uc3QgRWxlbWVudCogcmVzdWx0ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwotICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50Pihub2RlKSA/IGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpOworICAgIGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihu
b2RlKSA6IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKIAogICAgIGZvciAoOyBlbGVtZW50OyBlbGVt
ZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChub2RlSXNUZXh0
Q29udHJvbChlbGVtZW50KSkKQEAgLTEwNzMsNyArMTA3Myw3IEBAIGJvb2wgaXNOb2RlQXJpYVZp
c2libGUoTm9kZSogbm9kZSkKICAgICAvLyBUbyBkZXRlcm1pbmUgaWYgYSBub2RlIGlzIEFSSUEg
dmlzaWJsZSwgd2UgbmVlZCB0byBjaGVjayB0aGUgcGFyZW50IGhpZXJhcmNoeSB0byBzZWUgaWYg
YW55b25lIHNwZWNpZmllcwogICAgIC8vIGFyaWEtaGlkZGVuIGV4cGxpY2l0bHkuCiAgICAgZm9y
IChOb2RlKiB0ZXN0Tm9kZSA9IG5vZGU7IHRlc3ROb2RlOyB0ZXN0Tm9kZSA9IHRlc3ROb2RlLT5w
YXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KHRlc3ROb2RlKSkgeworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oKnRlc3ROb2RlKSkgewogICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBhcmlhSGlkZGVuVmFsdWUgPSBkb3duY2FzdDxFbGVtZW50PigqdGVzdE5vZGUp
LmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9oaWRkZW5BdHRyKTsKICAgICAgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShhcmlhSGlkZGVuVmFsdWUsICJmYWxzZSIpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAppbmRleCBmMDM4ODdjYTZhMzVkMzZk
YjUyM2I3OGI0ZjViYTBlMjRjNTZkZmM2Li5kY2EwZWE2ZWM2Zjg5MjEwM2RiOWIxOWRmODIyMGZh
MTk1YWUzYjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcApAQCAtNjEsOSArNjEsNiBAQCBQYXNz
UmVmUHRyPEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uPiBBY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbjo6Y3JlYXRlKCkKICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246Omlz
RW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX29wdGlvbkVsZW1lbnQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4obV9vcHRp
b25FbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03OCw5ICs3NSw2IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmlzRW5hYmxlZCgpIGNvbnN0CiAgICAgCiBi
b29sIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjppc1NlbGVjdGVkKCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fb3B0aW9uRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYg
KCFpczxIVE1MT3B0aW9uRWxlbWVudD4obV9vcHRpb25FbGVtZW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC0xMzEsOSArMTI1LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbjo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSBjb25z
dAogewotICAgIGlmICghbV9vcHRpb25FbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCiAgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4obV9vcHRpb25FbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtMTU2LDEwICsxNDcsMTAgQEAgU3RyaW5nIEFj
Y2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjpzdHJpbmdWYWx1ZSgpIGNvbnN0CiAgICAgaWYgKCFh
cmlhTGFiZWwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBhcmlhTGFiZWw7CiAgICAgCi0gICAg
aWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihtX29wdGlvbkVsZW1lbnQpKQorICAgIGlmIChpczxI
VE1MT3B0aW9uRWxlbWVudD4oKm1fb3B0aW9uRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm1fb3B0aW9uRWxlbWVudCkudGV4dCgpOwogICAgIAot
ICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PihtX29wdGlvbkVsZW1lbnQpKQorICAgIGlm
IChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqbV9vcHRpb25FbGVtZW50KSkKICAgICAgICAgcmV0
dXJuIGRvd25jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCptX29wdGlvbkVsZW1lbnQpLmdyb3Vw
TGFiZWxUZXh0KCk7CiAgICAgCiAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMjAyLDEwICsxOTMs
MTAgQEAgSFRNTFNlbGVjdEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjpsaXN0
Qm94T3B0aW9uUGFyZW50Tm9kZSgpIGNvbnN0CiAgICAgaWYgKCFtX29wdGlvbkVsZW1lbnQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50Piht
X29wdGlvbkVsZW1lbnQpKQorICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKm1fb3B0aW9u
RWxlbWVudCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm1f
b3B0aW9uRWxlbWVudCkub3duZXJTZWxlY3RFbGVtZW50KCk7CiAKLSAgICBpZiAoaXM8SFRNTE9w
dEdyb3VwRWxlbWVudD4obV9vcHRpb25FbGVtZW50KSkKKyAgICBpZiAoaXM8SFRNTE9wdEdyb3Vw
RWxlbWVudD4oKm1fb3B0aW9uRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1M
T3B0R3JvdXBFbGVtZW50PigqbV9vcHRpb25FbGVtZW50KS5vd25lclNlbGVjdEVsZW1lbnQoKTsK
IAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcAppbmRleCBlZTM1ZWZh
ZWJhNjdkMTAwOWQ0ZDYyZTAxZmJiMDUxOGNjY2FjMzI2Li44ODdiYjk5YjRmZjdlYjFkNjgwZjhh
ODFmNjU1MjU1YmI0NTgzN2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcApAQCAtMjc0LDcgKzI3
NCw3IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gQWNjZXNzaWJpbGl0eU1lZGlh
VGltZWxpbmU6OmNyZWF0ZShSZW5kZXJPYmplY3QqCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlh
VGltZWxpbmU6OnZhbHVlRGVzY3JpcHRpb24oKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSBt
X3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkK
KyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCiAgICAgZmxvYXQgdGltZSA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpu
b2RlKS52YWx1ZSgpLnRvRmxvYXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKaW5kZXggMzUwZGEw
ZGE1ZmY5ZDUxZWQwZGJkZTVjNWExNWUwODI1OWIwNmNmNy4uNDY5YWZjYWEwMTQxMmU1ZjY2NDNi
ZWNhNmVkZDdkNTAwNWI0MTJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKQEAgLTcwLDcgKzcw
LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6Y29tcHV0ZUFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSBjb25zdAogCiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24qIEFjY2Vz
c2liaWxpdHlNZW51TGlzdFBvcHVwOjptZW51TGlzdE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3Qo
SFRNTEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFpczxI
VE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkgfHwgIWVsZW1lbnQtPmluUmVuZGVyZWREb2N1bWVu
dCgpKQorICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpIHx8ICFlbGVtZW50
LT5pblJlbmRlcmVkRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKE1lbnVMaXN0T3B0aW9uUm9sZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCmluZGV4IGJk
YmUzNDRlMDFlN2MxNDNmODljNjEwZjE5MWE3NjhhYjkyMWFmOTIuLjI5MGU1YmViMTJjM2U1NGI1
NTM3YjA3MDFiYjc5ZTgyZTU3ZTYzMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCkBAIC0yOTIsNyArMjky
LDcgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWlu
ZUFjY2Vzc2liaWxpdHlSb2xlKCkKICAgICAgICAgcmV0dXJuIFN0YXRpY1RleHRSb2xlOwogICAg
IGlmIChub2RlKCktPmhhc1RhZ05hbWUoYnV0dG9uVGFnKSkKICAgICAgICAgcmV0dXJuIGJ1dHRv
blJvbGVUeXBlKCk7Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpIHsKKyAg
ICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkpIHsKICAgICAgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKTsKICAg
ICAgICAgaWYgKGlucHV0LmlzQ2hlY2tib3goKSkKICAgICAgICAgICAgIHJldHVybiBDaGVja0Jv
eFJvbGU7CkBAIC0zMTUsNyArMzE1LDcgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkKICAgICAgICAgSFRNTFNl
bGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4o
Km5vZGUoKSk7CiAgICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50Lm11bHRpcGxlKCkgPyBMaXN0
Qm94Um9sZSA6IFBvcFVwQnV0dG9uUm9sZTsKICAgICB9Ci0gICAgaWYgKGlzPEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KG5vZGUoKSkpCisgICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCpub2Rl
KCkpKQogICAgICAgICByZXR1cm4gVGV4dEFyZWFSb2xlOwogICAgIGlmIChoZWFkaW5nTGV2ZWwo
KSkKICAgICAgICAgcmV0dXJuIEhlYWRpbmdSb2xlOwpAQCAtMzIzLDkgKzMyMyw5IEBAIEFjY2Vz
c2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmls
aXR5Um9sZSgpCiAgICAgICAgIHJldHVybiBEaXZSb2xlOwogICAgIGlmIChub2RlKCktPmhhc1Rh
Z05hbWUocFRhZykpCiAgICAgICAgIHJldHVybiBQYXJhZ3JhcGhSb2xlOwotICAgIGlmIChpczxI
VE1MTGFiZWxFbGVtZW50Pihub2RlKCkpKQorICAgIGlmIChpczxIVE1MTGFiZWxFbGVtZW50Pigq
bm9kZSgpKSkKICAgICAgICAgcmV0dXJuIExhYmVsUm9sZTsKLSAgICBpZiAoaXM8RWxlbWVudD4o
bm9kZSgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSgpKS5pc0ZvY3VzYWJsZSgpKQorICAg
IGlmIChpczxFbGVtZW50Pigqbm9kZSgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSgpKS5p
c0ZvY3VzYWJsZSgpKQogICAgICAgICByZXR1cm4gR3JvdXBSb2xlOwogICAgIAogICAgIHJldHVy
biBVbmtub3duUm9sZTsKQEAgLTQ0Miw3ICs0NDIsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiBib29sIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjYW52YXNIYXNGYWxsYmFja0NvbnRlbnQoKSBjb25zdAogewog
ICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxIVE1M
Q2FudmFzRWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxIVE1MQ2FudmFzRWxlbWVudD4obm9k
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFz
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pigqbm9kZSk7CiAgICAgLy8gSWYg
aXQgaGFzIGFueSBjaGlsZHJlbiB0aGF0IGFyZSBlbGVtZW50cywgd2UnbGwgYXNzdW1lIGl0IG1p
Z2h0IGJlIGZhbGxiYWNrCkBAIC00NjcsMTAgKzQ2NywxMCBAQCBib29sIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKCkgY29uc3QKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50Pihu
b2RlKSkKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkgeworICAg
IGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxl
bWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CiAgICAgICAg
IHJldHVybiBpbnB1dC5pc1RleHQoKSB8fCBpbnB1dC5pc051bWJlckZpZWxkKCk7CiAgICAgfQpA
QCAtNTE0LDEzICs1MTQsMTMgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNOYXRp
dmVJbWFnZSgpIGNvbnN0CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoaXM8SFRNTEltYWdlRWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxJbWFn
ZUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAobm9kZS0+
aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG5v
ZGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBp
ZiAoaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoaXM8SFRNTElucHV0RWxl
bWVudD4oKm5vZGUpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgICAgICByZXR1cm4gaW5wdXQuaXNJbWFn
ZUJ1dHRvbigpOwogICAgIH0KQEAgLTU1MiwxMCArNTUyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aXNQYXNzd29yZEZpZWxkKCkgY29uc3QKIGJvb2wgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmlzSW5wdXRJbWFnZSgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMt
Pm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAKLSAgICBp
ZiAocm9sZVZhbHVlKCkgPT0gQnV0dG9uUm9sZSAmJiBpczxIVE1MSW5wdXRFbGVtZW50Pihub2Rl
KSkgeworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSAmJiByb2xlVmFsdWUoKSA9
PSBCdXR0b25Sb2xlKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgICAgICByZXR1cm4gaW5wdXQuaXNJbWFn
ZUJ1dHRvbigpOwogICAgIH0KQEAgLTY0Myw3ICs2NDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Ojppc0VuYWJsZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIWlzPEVs
ZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgcmV0dXJuICFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCk7CkBAIC02NzgsNyArNjc1LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aXNQcmVzc2VkKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pigqbm9k
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4o
Km5vZGUpLmFjdGl2ZSgpOwogfQpAQCAtNzE3LDkgKzcxNCw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmlzQ2hlY2tlZCgpIGNvbnN0CiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojppc0hvdmVyZWQoKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7
Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gaXM8
RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmhvdmVyZWQoKTsKIH0K
IApAQCAtNzQwLDEwICs3MzQsMTAgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNS
ZWFkT25seSgpIGNvbnN0CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50Pihub2RlKSkKLSAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG5vZGUpLT5pc1JlYWRPbmx5KCk7CisgICAgaWYg
KGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCpub2RlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCpub2RlKS5pc1JlYWRPbmx5KCk7CiAKLSAgICBpZiAoaXM8
SFRNTElucHV0RWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4o
Km5vZGUpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgICAgICBpZiAoaW5wdXQuaXNUZXh0RmllbGQoKSkK
ICAgICAgICAgICAgIHJldHVybiBpbnB1dC5pc1JlYWRPbmx5KCk7CkBAIC03NjIsOCArNzU2LDgg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNSZXF1aXJlZCgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIG4gPSB0aGlzLT5ub2RlKCk7Ci0gICAgaWYg
KG4gJiYgaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obikpCi0gICAgICAgIHJldHVybiBkb3du
Y2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihuKS0+aXNSZXF1aXJlZCgpOworICAgIGlmIChp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihuKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpuKS5pc1JlcXVpcmVkKCk7CiAKICAgICByZXR1cm4gZmFs
c2U7CiB9CkBAIC04MzksNyArODMzLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Ojp2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QKIAogZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OnZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewotICAgIGlmIChub2RlKCkgJiYgaXM8SFRNTElu
cHV0RWxlbWVudD4obm9kZSgpKSkgeworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2Rl
KCkpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKm5vZGUoKSk7CiAgICAgICAgIGlmIChpbnB1dC5pc1JhbmdlQ29udHJvbCgp
KQogICAgICAgICAgICAgcmV0dXJuIGlucHV0LnZhbHVlQXNOdW1iZXIoKTsKQEAgLTg1Myw3ICs4
NDcsNyBAQCBmbG9hdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dmFsdWVGb3JSYW5nZSgpIGNv
bnN0CiAKIGZsb2F0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlKCkg
Y29uc3QKIHsKLSAgICBpZiAobm9kZSgpICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkp
IHsKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSgpKSkgewogICAgICAgICBIVE1M
SW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkp
OwogICAgICAgICBpZiAoaW5wdXQuaXNSYW5nZUNvbnRyb2woKSkKICAgICAgICAgICAgIHJldHVy
biBpbnB1dC5tYXhpbXVtKCk7CkBAIC04NjcsNyArODYxLDcgQEAgZmxvYXQgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAogCiBmbG9hdCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6bWluVmFsdWVGb3JSYW5nZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG5vZGUo
KSAmJiBpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKCkpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1
dEVsZW1lbnQ+KG5vZGUoKSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKTsKICAgICAgICAgaWYgKGlucHV0Lmlz
UmFuZ2VDb250cm9sKCkpCiAgICAgICAgICAgICByZXR1cm4gaW5wdXQubWluaW11bSgpOwpAQCAt
OTAwLDcgKzg5NCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQ29udHJvbCgp
IGNvbnN0CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSkgfHwgQWNjZXNzaWJpbGl0eU9iamVj
dDo6aXNBUklBQ29udHJvbChhcmlhUm9sZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gaXM8SFRN
TEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUpIHx8IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJ
QUNvbnRyb2woYXJpYVJvbGVBdHRyaWJ1dGUoKSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmlzRmllbGRzZXQoKSBjb25zdApAQCAtOTY1LDcgKzk1OSw3IEBAIEVsZW1lbnQq
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphbmNob3JFbGVtZW50KCkgY29uc3QKICAgICAvLyBz
ZWFyY2ggdXAgdGhlIERPTSB0cmVlIGZvciBhbiBhbmNob3IgZWxlbWVudAogICAgIC8vIE5PVEU6
IHRoaXMgYXNzdW1lcyB0aGF0IGFueSBub24taW1hZ2Ugd2l0aCBhbiBhbmNob3IgaXMgYW4gSFRN
TEFuY2hvckVsZW1lbnQKICAgICBmb3IgKCA7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50Pihub2RlKSB8fCAobm9kZS0+
cmVuZGVyZXIoKSAmJiBjYWNoZS0+Z2V0T3JDcmVhdGUobm9kZS0+cmVuZGVyZXIoKSktPmlzQW5j
aG9yKCkpKQorICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSB8fCAobm9k
ZS0+cmVuZGVyZXIoKSAmJiBjYWNoZS0+Z2V0T3JDcmVhdGUobm9kZS0+cmVuZGVyZXIoKSktPmlz
QW5jaG9yKCkpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwog
ICAgIH0KIApAQCAtOTc0LDcgKzk2OCw3IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjphbmNob3JFbGVtZW50KCkgY29uc3QKIAogc3RhdGljIGJvb2wgaXNOb2RlQWN0aW9uRWxl
bWVudChOb2RlKiBub2RlKQogewotICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkg
eworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgSFRNTElu
cHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CiAg
ICAgICAgIGlmICghaW5wdXQuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgJiYgKGlucHV0LmlzUmFk
aW9CdXR0b24oKSB8fCBpbnB1dC5pc0NoZWNrYm94KCkgfHwgaW5wdXQuaXNUZXh0QnV0dG9uKCkg
fHwgaW5wdXQuaXNGaWxlVXBsb2FkKCkgfHwgaW5wdXQuaXNJbWFnZUJ1dHRvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTA0Niw3ICsxMDQwLDcgQEAgRWxlbWVudCogQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6Om1vdXNlQnV0dG9uTGlzdGVuZXIoTW91c2VCdXR0b25MaXN0ZW5l
clJlc3VsdEYKIAogICAgIC8vIGNoZWNrIGlmIG91ciBwYXJlbnQgaXMgYSBtb3VzZSBidXR0b24g
bGlzdGVuZXIKICAgICAvLyBGSVhNRTogRG8gdGhlIGNvbnRpbnVhdGlvbiBzZWFyY2ggbGlrZSBh
bmNob3JFbGVtZW50IGRvZXMKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50TGluZWFn
ZShpczxFbGVtZW50Pihub2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFy
ZW50RWxlbWVudCgpKSkgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRMaW5lYWdl
KGlzPEVsZW1lbnQ+KCpub2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFy
ZW50RWxlbWVudCgpKSkgewogICAgICAgICAvLyBJZiB3ZSd2ZSByZWFjaGVkIHRoZSBib2R5IGFu
ZCB0aGlzIGlzIG5vdCBhIGNvbnRyb2wgZWxlbWVudCwgZG8gbm90IGV4cG9zZSBwcmVzcyBhY3Rp
b24gZm9yIHRoaXMgZWxlbWVudCB1bmxlc3MgZmlsdGVyIGlzIEluY2x1ZGVCb2R5RWxlbWVudC4K
ICAgICAgICAgLy8gSXQgY2FuIGNhdXNlIGZhbHNlIHBvc2l0aXZlcywgd2hlcmUgZXZlcnkgcGll
Y2Ugb2YgdGV4dCBpcyBsYWJlbGVkIGFzIGFjY2VwdGluZyBwcmVzcyBhY3Rpb25zLgogICAgICAg
ICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGJvZHlUYWcpICYmIGlzU3RhdGljVGV4dCgpICYmIGZp
bHRlciA9PSBFeGNsdWRlQm9keUVsZW1lbnQpCkBAIC0xMTYxLDcgKzExNTUsNyBAQCBib29sIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0dlbmVyaWNGb2N1c2FibGVFbGVtZW50KCkgY29uc3QK
IAogSFRNTExhYmVsRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmxhYmVsRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+
KGVsZW1lbnQpIHx8ICFkb3duY2FzdDxIVE1MRWxlbWVudD4oZWxlbWVudCktPmlzTGFiZWxhYmxl
KCkpCisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oKmVsZW1lbnQpIHx8ICFkb3duY2FzdDxIVE1M
RWxlbWVudD4oKmVsZW1lbnQpLmlzTGFiZWxhYmxlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRl
KCk7CkBAIC0xMjUyLDcgKzEyNDYsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0
aXRsZUVsZW1lbnRUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRPcgogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGJvb2wgaXNJbnB1dFRhZyA9IGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpOworICAgIGJvb2wgaXNJbnB1dFRhZyA9IGlzPEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKTsKICAgICBpZiAoaXNJbnB1dFRhZyB8fCBBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojppc0FSSUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSB8fCBpc0NvbnRyb2woKSkg
ewogICAgICAgICBpZiAoSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJlbEZvckVsZW1lbnQo
ZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBsYWJlbE9iamVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobGFiZWwpOwpA
QCAtMTMwNiw3ICsxMzAwLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWx0ZXJu
YXRpdmVUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRPcmQKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIC8vIFRoZSBmaWVsZHNldCBlbGVtZW50IGRlcml2ZXMgaXRzIGFsdGVy
bmF0aXZlIHRleHQgZnJvbSB0aGUgZmlyc3QgYXNzb2NpYXRlZCBsZWdlbmQgZWxlbWVudCBpZiBv
bmUgaXMgYXZhaWxhYmxlLgotICAgIGlmIChpczxIVE1MRmllbGRTZXRFbGVtZW50Pihub2RlKSkg
eworICAgIGlmIChpczxIVE1MRmllbGRTZXRFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShk
b3duY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50Pigqbm9kZSkubGVnZW5kKCkpOwogICAgICAgICBp
ZiAob2JqZWN0ICYmICFvYmplY3QtPmlzSGlkZGVuKCkpCiAgICAgICAgICAgICB0ZXh0T3JkZXIu
YXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KGFjY2Vzc2libGVOYW1lRm9yTm9kZShvYmplY3QtPm5v
ZGUoKSksIEFsdGVybmF0aXZlVGV4dCkpOwpAQCAtMTMyOCw3ICsxMzIyLDcgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6dmlzaWJsZVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0
PiYgdGV4dE9yZGVyKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IGJvb2wgaXNJbnB1dFRhZyA9IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpOworICAgIGJvb2wg
aXNJbnB1dFRhZyA9IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKICAgICBpZiAoaXNJbnB1
dFRhZykgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgaWYgKGlucHV0LmlzVGV4dEJ1dHRvbigpKSB7
CkBAIC0xNTAzLDcgKzE0OTcsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFj
Y2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgICAgIHJldHVybiBkb3duY2FzdDxT
VkdFbGVtZW50PigqbV9ub2RlKS50aXRsZSgpOwogICAgIAogI2lmIEVOQUJMRShNQVRITUwpCi0g
ICAgaWYgKG1fbm9kZSAmJiBpczxNYXRoTUxFbGVtZW50PigqbV9ub2RlKSkKKyAgICBpZiAoaXM8
TWF0aE1MRWxlbWVudD4obV9ub2RlKSkKICAgICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShNYXRo
TUxOYW1lczo6YWx0dGV4dEF0dHIpOwogI2VuZGlmCiAKQEAgLTE1MzMsNyArMTUyNyw3IEBAIFN0
cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGVscFRleHQoKSBjb25zdAogICAgIAogICAg
IFN0cmluZyBkZXNjcmlwdGlvbiA9IGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpOwogICAgIGZv
ciAoTm9kZSogYW5jZXN0b3IgPSBub2RlOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+
cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oYW5jZXN0b3IpKSB7
CisgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oKmFuY2VzdG9yKSkgewogICAgICAgICAgICAg
SFRNTEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmFuY2VzdG9yKTsK
ICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3VtbWFyeSA9IGVsZW1lbnQuZ2V0QXR0
cmlidXRlKHN1bW1hcnlBdHRyKTsKICAgICAgICAgICAgIGlmICghc3VtbWFyeS5pc0VtcHR5KCkp
CkBAIC0xNTYxLDcgKzE1NTUsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omhl
bHBUZXh0KCkgY29uc3QKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoaWVyYXJj
aGljYWxMZXZlbCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAg
ICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4o
bm9kZSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGV2ZWwgPSBl
bGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9sZXZlbEF0dHIpOwpAQCAtMTY1NCw3ICsxNjQ4
LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kTmFtZVRvU3RyaW5nQnVpbGRlcihTdHJpbmdCdWlsZGVy
JiBidWlsZGVyLCBjb25zdCBTdHJpbmcmIHRleHQKIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUg
bW9kZSkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmIChu
b2RlICYmIGlzPFRleHQ+KG5vZGUpKQorICAgIGlmIChpczxUZXh0Pihub2RlKSkKICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFRleHQ+KCpub2RlKS53aG9sZVRleHQoKTsKIAogICAgIC8vIFRoZSBy
ZW5kZXIgdHJlZSBzaG91bGQgYmUgc3RhYmxlIGJlZm9yZSBnb2luZyBhaGVhZC4gT3RoZXJ3aXNl
LCBmdXJ0aGVyIHVzZXMgb2YgdGhlCkBAIC0xNjk4LDcgKzE2OTIsNyBAQCBTdHJpbmcgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKCkgY29uc3QKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAotICAgIGJvb2wgaXNJbnB1dFRhZyA9IGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUpOworICAgIGJvb2wgaXNJbnB1dFRhZyA9IGlzPEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKTsKICAgICBpZiAoaXNJbnB1dFRhZykgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgaWYg
KGlucHV0LmlzVGV4dEJ1dHRvbigpKQpAQCAtMTgyNCw3ICsxODE4LDcgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZShpbnQmIHIsIGludCYgZywgaW50JiBiKSBjb25z
dAogICAgIGlmICghaXNDb2xvcldlbGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFu
b2RlKCkgfHwgIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpCisgICAgaWYgKCFpczxIVE1M
SW5wdXRFbGVtZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBIVE1MSW5wdXRF
bGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpOwpAQCAt
MTg0NCw3ICsxODM4LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1
ZShpbnQmIHIsIGludCYgZywgaW50JiBiKSBjb25zdAogc3RhdGljIFN0cmluZyBhY2Nlc3NpYmxl
TmFtZUZvck5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgaWYgKCFu
b2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCiAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKQEAgLTE4NjUsNyArMTg1OSw3IEBAIHN0YXRpYyBTdHJp
bmcgYWNjZXNzaWJsZU5hbWVGb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICByZXR1cm4g
dmFsdWVEZXNjcmlwdGlvbjsKICAgICB9CiAgICAgCi0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkpCiAgICAgICAg
IHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkudmFsdWUoKTsKICAgICAK
ICAgICBTdHJpbmcgdGV4dDsKQEAgLTE5NDEsOSArMTkzNSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmNhblNldEZvY3VzQXR0cmlidXRlKCkgY29uc3QKICAgICAvLyBOT1RFOiBJ
dCB3b3VsZCBiZSBtb3JlIGFjY3VyYXRlIHRvIGFzayB0aGUgZG9jdW1lbnQgd2hldGhlciBzZXRG
b2N1c2VkRWxlbWVudCgpIHdvdWxkCiAgICAgLy8gZG8gYW55dGhpbmcuIEZvciBleGFtcGxlLCBz
ZXRGb2N1c2VkRWxlbWVudCgpIHdpbGwgZG8gbm90aGluZyBpZiB0aGUgY3VycmVudCBmb2N1c2Vk
CiAgICAgLy8gbm9kZSB3aWxsIG5vdCByZWxpbnF1aXNoIHRoZSBmb2N1cy4KLSAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggOTE0ZGJkZGE3Mjk5YTY1Nzk2
MGIzNjE1ZDBlMGI2ZmViMjllYmNmZS4uZjZlOTgyNzdhZjgyN2U2ZTNiNzZjMGM5MjYzMTZjMGU0
Y2M5YTVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCkBAIC04NTEsNyArODUxLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpwcmVzcygpCiAgICAgICAgIGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmhpdFRlc3Qo
cmVxdWVzdCwgaGl0VGVzdFJlc3VsdCk7CiAgICAgICAgIGlmIChoaXRUZXN0UmVzdWx0LmlubmVy
Tm9kZSgpKSB7CiAgICAgICAgICAgICBOb2RlKiBpbm5lck5vZGUgPSBoaXRUZXN0UmVzdWx0Lmlu
bmVyTm9kZSgpLT5kZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgICAgICAgICBp
ZiAoaXM8RWxlbWVudD4oaW5uZXJOb2RlKSkKKyAgICAgICAgICAgIGlmIChpczxFbGVtZW50Pigq
aW5uZXJOb2RlKSkKICAgICAgICAgICAgICAgICBoaXRUZXN0RWxlbWVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KGlubmVyTm9kZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzU5LDE1ICsxNzU5LDEy
IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbnZhbGlkU3RhdHVzKCkgY29uc3QKIGJv
b2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgcmV0
dXJuIG5vZGUgJiYgaXM8RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUp
Lmhhc1RhZ05hbWUodGFnTmFtZSk7CisgICAgcmV0dXJuIGlzPEVsZW1lbnQ+KG5vZGUpICYmIGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKS5oYXNUYWdOYW1lKHRhZ05hbWUpOwogfQogICAgIAogYm9v
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCiAgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtMTk2Niw3ICsxOTYz
LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNIaWdobGlnaHRpbmcoKSBjb25zdAog
RWxlbWVudCogQWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudCgpIGNvbnN0CiB7CiAgICAgTm9k
ZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAobm9kZSAmJiBpczxFbGVtZW50Pihub2Rl
KSkKKyAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTIxMTQsNyArMjExMSw3
IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppZGVudGlmaWVyQXR0cmlidXRlKCkgY29u
c3QKIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xhc3NMaXN0KFZlY3RvcjxTdHJpbmc+JiBj
bGFzc0xpc3QpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBp
ZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9k
ZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG93bmNh
c3Q8RWxlbWVudD4obm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA5OGQ1ODdhYjYxZmEz
NDU1Nzk3Y2FjN2VlZTBhNmFjZjg4NzMwNTM0Li40NTA1NjU1YTU5MmRhZmNiZTEyMzBiMjljOWIw
YmZlYzdiZjUzNjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTUyMyw3ICs1MjMsNyBAQCBi
b29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQXR0YWNobWVudCgpIGNvbnN0CiAKIGJv
b2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNGaWxlVXBsb2FkQnV0dG9uKCkgY29uc3QK
IHsKLSAgICBpZiAobV9yZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5ub2RlKCkgJiYgaXM8SFRNTElu
cHV0RWxlbWVudD4obV9yZW5kZXJlci0+bm9kZSgpKSkgeworICAgIGlmIChtX3JlbmRlcmVyICYm
IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fcmVuZGVyZXItPm5vZGUoKSkpIHsKICAgICAgICAgSFRN
TElucHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9yZW5k
ZXJlci0+bm9kZSgpKTsKICAgICAgICAgcmV0dXJuIGlucHV0LmlzRmlsZVVwbG9hZCgpOwogICAg
IH0KQEAgLTU4NSw3ICs1ODUsNyBAQCBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphbmNob3JFbGVtZW50KCkgY29uc3QKICAgICAvLyBOT1RFOiB0aGlzIGFzc3VtZXMgdGhhdCBh
bnkgbm9uLWltYWdlIHdpdGggYW4gYW5jaG9yIGlzIGFuIEhUTUxBbmNob3JFbGVtZW50CiAgICAg
Tm9kZSogbm9kZSA9IGN1cnJSZW5kZXJlci0+bm9kZSgpOwogICAgIGZvciAoIDsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1l
bnQ+KG5vZGUpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIGNhY2hlLT5nZXRPckNyZWF0ZShub2Rl
LT5yZW5kZXJlcigpKS0+aXNBbmNob3IoKSkpCisgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxl
bWVudD4oKm5vZGUpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIGNhY2hlLT5nZXRPckNyZWF0ZShu
b2RlLT5yZW5kZXJlcigpKS0+aXNBbmNob3IoKSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8RWxlbWVudD4obm9kZSk7CiAgICAgfQogICAgIApAQCAtNjA3LDcgKzYwNyw3IEBAIFN0cmlu
ZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0CiAgICAgCiAgICAg
U3RyaW5nIGRlc2NyaXB0aW9uID0gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7CiAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGFuY2VzdG9yID0gbV9yZW5kZXJlcjsgYW5jZXN0b3I7IGFuY2VzdG9y
ID0gYW5jZXN0b3ItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChhbmNlc3Rvci0+bm9kZSgpICYm
IGlzPEhUTUxFbGVtZW50PihhbmNlc3Rvci0+bm9kZSgpKSkgeworICAgICAgICBpZiAoaXM8SFRN
TEVsZW1lbnQ+KGFuY2VzdG9yLT5ub2RlKCkpKSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudCYg
ZWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PigqYW5jZXN0b3ItPm5vZGUoKSk7CiAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN1bW1hcnkgPSBlbGVtZW50LmdldEF0dHJpYnV0
ZShzdW1tYXJ5QXR0cik7CiAgICAgICAgICAgICBpZiAoIXN1bW1hcnkuaXNFbXB0eSgpKQpAQCAt
NzgzLDcgKzc4Myw3IEBAIEhUTUxMYWJlbEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmxhYmVsRWxlbWVudENvbnRhaW5lcigpIGNvbnN0CiAgICAgCiAgICAgLy8gZmluZCBpZiB0
aGlzIGhhcyBhIHBhcmVudCB0aGF0IGlzIGEgbGFiZWwKICAgICBmb3IgKE5vZGUqIHBhcmVudE5v
ZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7IHBhcmVudE5vZGU7IHBhcmVudE5vZGUgPSBwYXJlbnRO
b2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxMYWJlbEVsZW1lbnQ+KHBh
cmVudE5vZGUpKQorICAgICAgICBpZiAoaXM8SFRNTExhYmVsRWxlbWVudD4oKnBhcmVudE5vZGUp
KQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KHBhcmVudE5v
ZGUpOwogICAgIH0KICAgICAKQEAgLTkxMSw5ICs5MTEsNiBAQCBJbnRQb2ludCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpjbGlja1BvaW50KCkKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmludGVybmFsTGlua0VsZW1lbnQoKSBjb25zdAogewogICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBhbmNob3JFbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtZW50KQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKICAgICAvLyBSaWdodCBub3csIHdlIGRvIG5v
dCBzdXBwb3J0IEFSSUEgbGlua3MgYXMgaW50ZXJuYWwgbGluayBlbGVtZW50cwogICAgIGlmICgh
aXM8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTk1MSw3ICs5NDgsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZFJh
ZGlvQnV0dG9uR3JvdXBNZW1iZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlbgogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAo
IW5vZGUgfHwgIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8SFRNTElu
cHV0RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBIVE1MSW5wdXRF
bGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKQEAgLTk2
OSw3ICs5NjYsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZFJhZGlvQnV0
dG9uR3JvdXBNZW1iZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlbgogICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBsaXN0LT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBOb2RlKiBpdGVtID0gbGlzdC0+aXRlbShpKTsK
LSAgICAgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihpdGVtKSkgeworICAgICAgICAg
ICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCppdGVtKSkgewogICAgICAgICAgICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQmIGFzc29jaWF0ZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PigqaXRlbSk7CiAgICAgICAgICAgICAgICAgaWYgKGFzc29jaWF0ZUVsZW1lbnQuaXNSYWRp
b0J1dHRvbigpICYmIGFzc29jaWF0ZUVsZW1lbnQubmFtZSgpID09IGlucHV0Lm5hbWUoKSkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gYXhP
YmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgmYXNzb2NpYXRlRWxlbWVudCkpCkBAIC0xMTA2LDcg
KzExMDMsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojp0aXRsZVVJRWxlbWVudCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKHRvUmVuZGVyRmllbGRzZXQobV9yZW5kZXJlciktPmZpbmRMZWdlbmQoUmVu
ZGVyRmllbGRzZXQ6OkluY2x1ZGVGbG9hdGluZ09yT3V0T2ZGbG93KSk7CiAgICAgCiAgICAgTm9k
ZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1l
bnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsKICAgICBpZiAobGFiZWwgJiYgbGFiZWwtPnJlbmRlcmVy
KCkpCkBAIC0xMjc2LDcgKzEyNzMsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKICAgICAKICAgICAvLyBkb24n
dCBpZ25vcmUgbGFiZWxzLCBiZWNhdXNlIHRoZXkgc2VydmUgYXMgVGl0bGVVSUVsZW1lbnRzCiAg
ICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAobm9kZSAmJiBpczxI
VE1MTGFiZWxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoaXM8SFRNTExhYmVsRWxlbWVudD4obm9k
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBBbnl0aGluZyB0aGF0IGlz
IGNvbnRlbnQgZWRpdGFibGUgc2hvdWxkIG5vdCBiZSBpZ25vcmVkLgpAQCAtMTQ2NSw4ICsxNDYy
LDYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dCgpIGNv
bnN0CiBjb25zdCBBdG9taWNTdHJpbmcmIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vz
c0tleSgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAg
ICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBudWxsQXRvbTsKICAgICBpZiAoIWlzPEVsZW1l
bnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gbnVsbEF0b207CiAgICAgcmV0dXJuIGRvd25jYXN0
PEVsZW1lbnQ+KCpub2RlKS5nZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0cik7CkBAIC0xNTA4LDcg
KzE1MDMsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVGV4
dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZQogCiBVUkwgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6dXJsKCkgY29uc3QKIHsKLSAgICBpZiAoaXNBbmNob3IoKSAmJiBpczxIVE1M
QW5jaG9yRWxlbWVudD4obV9yZW5kZXJlci0+bm9kZSgpKSkgeworICAgIGlmIChpc0FuY2hvcigp
ICYmIGlzPEhUTUxBbmNob3JFbGVtZW50PigqbV9yZW5kZXJlci0+bm9kZSgpKSkgewogICAgICAg
ICBpZiAoSFRNTEFuY2hvckVsZW1lbnQqIGFuY2hvciA9IGRvd25jYXN0PEhUTUxBbmNob3JFbGVt
ZW50PihhbmNob3JFbGVtZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuIGFuY2hvci0+aHJlZigp
OwogICAgIH0KQEAgLTE1MTYsNyArMTUxMSw3IEBAIFVSTCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojp1cmwoKSBjb25zdAogICAgIGlmIChpc1dlYkFyZWEoKSkKICAgICAgICAgcmV0dXJuIG1f
cmVuZGVyZXItPmRvY3VtZW50KCkudXJsKCk7CiAgICAgCi0gICAgaWYgKGlzSW1hZ2UoKSAmJiBt
X3JlbmRlcmVyLT5ub2RlKCkgJiYgaXM8SFRNTEltYWdlRWxlbWVudD4obV9yZW5kZXJlci0+bm9k
ZSgpKSkKKyAgICBpZiAoaXNJbWFnZSgpICYmIGlzPEhUTUxJbWFnZUVsZW1lbnQ+KG1fcmVuZGVy
ZXItPm5vZGUoKSkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50Pigq
bV9yZW5kZXJlci0+bm9kZSgpKS5zcmMoKTsKICAgICAKICAgICBpZiAoaXNJbnB1dEltYWdlKCkp
CkBAIC0xNTQzLDcgKzE1MzgsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNl
dEVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdAogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBp
ZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9k
ZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSku
c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsICh2YWx1ZSkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsK
QEAgLTE2NDYsNyArMTY0MSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0
Rm9jdXNlZChib29sIG9uKQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50
KCk7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKIAotICAgIGlmICghb24gfHwgIW5v
ZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKCFvbiB8fCAhaXM8RWxlbWVudD4o
bm9kZSkpIHsKICAgICAgICAgZG9jdW1lbnQtPnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTY3OCw3ICsxNjczLDcgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJiBzZWwKICAgICAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0VmFs
dWUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3Jl
bmRlcmVyLT5ub2RlKCkgfHwgIWlzPEVsZW1lbnQ+KG1fcmVuZGVyZXItPm5vZGUoKSkpCisgICAg
aWYgKCFtX3JlbmRlcmVyIHx8ICFpczxFbGVtZW50PihtX3JlbmRlcmVyLT5ub2RlKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpt
X3JlbmRlcmVyLT5ub2RlKCkpOwogCkBAIC0xNzU5LDcgKzE3NTQsNyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJiByZQogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXhvYmopOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgTm9kZSogcGFyZW50ID0gY3Vyci0+cGFyZW50Tm9kZSgp
OwotICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBpczxIVE1MQXJlYUVsZW1lbnQ+KGN1cnIpICYm
IGlzPEhUTUxNYXBFbGVtZW50PihwYXJlbnQpKSB7CisgICAgICAgICAgICBpZiAoaXM8SFRNTEFy
ZWFFbGVtZW50PigqY3VycikgJiYgaXM8SFRNTE1hcEVsZW1lbnQ+KHBhcmVudCkpIHsKICAgICAg
ICAgICAgICAgICBBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rKiBhcmVhT2JqZWN0ID0gdG9BY2Nl
c3NpYmlsaXR5SW1hZ2VNYXBMaW5rKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoSW1hZ2VN
YXBMaW5rUm9sZSkpOwogICAgICAgICAgICAgICAgIEhUTUxNYXBFbGVtZW50JiBtYXAgPSBkb3du
Y2FzdDxIVE1MTWFwRWxlbWVudD4oKnBhcmVudCk7CiAgICAgICAgICAgICAgICAgYXJlYU9iamVj
dC0+c2V0SFRNTEFyZWFFbGVtZW50KGRvd25jYXN0PEhUTUxBcmVhRWxlbWVudD4oY3VycikpOwpA
QCAtMjE1OCw3ICsyMTUzLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdChIVE0KIAogICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG51bGxwdHI7CiAgICAgZm9yIChFbGVtZW50KiBtYXBQ
YXJlbnQgPSBhcmVhLT5wYXJlbnRFbGVtZW50KCk7IG1hcFBhcmVudDsgbWFwUGFyZW50ID0gbWFw
UGFyZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxNYXBFbGVtZW50
PihtYXBQYXJlbnQpKSB7CisgICAgICAgIGlmIChpczxIVE1MTWFwRWxlbWVudD4oKm1hcFBhcmVu
dCkpIHsKICAgICAgICAgICAgIHBhcmVudCA9IGFjY2Vzc2liaWxpdHlQYXJlbnRGb3JJbWFnZU1h
cChkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4obWFwUGFyZW50KSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMjIwNywxMSArMjIwMiwxMiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJ
bnRQbwogICAgIGlmICghaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmRl
cHJlY2F0ZWRTaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBBU1NFUlQobm9kZSk7CiAKLSAgICBp
ZiAoaXM8SFRNTEFyZWFFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoaXM8SFRNTEFyZWFFbGVtZW50
Pigqbm9kZSkpCiAgICAgICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5SW1hZ2VNYXBIaXRUZXN0KGRv
d25jYXN0PEhUTUxBcmVhRWxlbWVudD4obm9kZSksIHBvaW50KTsKICAgICAKLSAgICBpZiAoaXM8
SFRNTE9wdGlvbkVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4o
Km5vZGUpKQogICAgICAgICBub2RlID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpub2Rl
KS5vd25lclNlbGVjdEVsZW1lbnQoKTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IG5v
ZGUtPnJlbmRlcmVyKCk7CkBAIC0yMzgxLDcgKzIzNzcsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9s
RWxlbQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRl
cmVyLT5ub2RlKCk7Ci0gICAgaWYgKG5vZGUgJiYgaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7Cisg
ICAgaWYgKGlzPEhUTUxFbGVtZW50Pihub2RlKSkgewogICAgICAgICBpZiAoSFRNTExhYmVsRWxl
bWVudCogbGFiZWwgPSBsYWJlbEZvckVsZW1lbnQoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUp
KSkKICAgICAgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGxhYmVs
KTsKICAgICB9CkBAIC0yNDA0LDcgKzI0MDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnJlbmRlck9iamVjdElzT2JzZXJ2YWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFRleHRib3hlcyBzaG91bGQgc2VuZCBvdXQg
bm90aWZpY2F0aW9ucy4KLSAgICBpZiAobm9kZUhhc1JvbGUobm9kZSwgInRleHRib3giKSB8fCAo
aXM8RWxlbWVudD4obm9kZSkgJiYgY29udGVudEVkaXRhYmxlQXR0cmlidXRlSXNFbmFibGVkKGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpKSkpCisgICAgaWYgKG5vZGVIYXNSb2xlKG5vZGUsICJ0ZXh0
Ym94IikgfHwgKGlzPEVsZW1lbnQ+KCpub2RlKSAmJiBjb250ZW50RWRpdGFibGVBdHRyaWJ1dGVJ
c0VuYWJsZWQoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQ4Miw3ICsyNDc4LDcgQEAgQWNjZXNzaWJp
bGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0
eVJvbGUoKQogICAgIGlmIChtX3JlbmRlcmVyLT5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuIFN0
YXRpY1RleHRSb2xlOwogICAgIGlmIChjc3NCb3ggJiYgY3NzQm94LT5pc0ltYWdlKCkpIHsKLSAg
ICAgICAgaWYgKG5vZGUgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlm
IChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKICAgICAgICAgICAgIHJldHVybiBhcmlhSGFz
UG9wdXAoKSA/IFBvcFVwQnV0dG9uUm9sZSA6IEJ1dHRvblJvbGU7CiAgICAgICAgIGlmIChpc1NW
R0ltYWdlKCkpCiAgICAgICAgICAgICByZXR1cm4gU1ZHUm9vdFJvbGU7CkBAIC0yNTAxLDcgKzI0
OTcsNyBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRl
cm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgaWYgKGNzc0JveCAmJiBjc3NCb3gtPmlzVGV4
dEFyZWEoKSkKICAgICAgICAgcmV0dXJuIFRleHRBcmVhUm9sZTsKIAotICAgIGlmIChub2RlICYm
IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG5vZGUpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwogICAgICAgICBpZiAoaW5wdXQuaXNDaGVja2JveCgp
KQogICAgICAgICAgICAgcmV0dXJuIENoZWNrQm94Um9sZTsKQEAgLTI1NzEsNyArMjU2Nyw3IEBA
IEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGVybWluZUFj
Y2Vzc2liaWxpdHlSb2xlKCkKICAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKHRyVGFn
KSkKICAgICAgICAgcmV0dXJuIFJvd1JvbGU7CiAKLSAgICBpZiAobm9kZSAmJiBpczxIVE1MVGFi
bGVFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4obm9kZSkpCiAg
ICAgICAgIHJldHVybiBUYWJsZVJvbGU7CiAjZW5kaWYKIApAQCAtMjU4NSw3ICsyNTgxLDcgQEAg
QWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0ZXJtaW5lQWNj
ZXNzaWJpbGl0eVJvbGUoKQogICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUocFRhZykp
CiAgICAgICAgIHJldHVybiBQYXJhZ3JhcGhSb2xlOwogCi0gICAgaWYgKG5vZGUgJiYgaXM8SFRN
TExhYmVsRWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxMYWJlbEVsZW1lbnQ+KG5vZGUp
KQogICAgICAgICByZXR1cm4gTGFiZWxSb2xlOwogCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFz
VGFnTmFtZShkZm5UYWcpKQpAQCAtMjU5NCw3ICsyNTkwLDcgQEAgQWNjZXNzaWJpbGl0eVJvbGUg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQog
ICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoZGl2VGFnKSkKICAgICAgICAgcmV0dXJu
IERpdlJvbGU7CiAKLSAgICBpZiAobm9kZSAmJiBpczxIVE1MRm9ybUVsZW1lbnQ+KG5vZGUpKQor
ICAgIGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gRm9ybVJv
bGU7CiAKICAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGFydGljbGVUYWcpKQpAQCAt
MjYxNiw5ICsyNjEyLDkgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgICAgICByZXR1cm4gTGFuZG1h
cmtDb250ZW50SW5mb1JvbGU7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKG5vZGUgJiYg
aXM8SFRNTFZpZGVvRWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEhUTUxWaWRlb0VsZW1lbnQ+
KG5vZGUpKQogICAgICAgICByZXR1cm4gVmlkZW9Sb2xlOwotICAgIGlmIChub2RlICYmIGlzPEhU
TUxBdWRpb0VsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxIVE1MQXVkaW9FbGVtZW50Pihub2Rl
KSkKICAgICAgICAgcmV0dXJuIEF1ZGlvUm9sZTsKICNlbmRpZgogICAgIApAQCAtMjY5OCw3ICsy
Njk0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbmhlcml0c1ByZXNlbnRh
dGlvbmFsUm9sZSgpIGNvbnN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAg
ICAgIE5vZGUqIG5vZGUgPSB0b0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QocGFyZW50KS0+bm9k
ZSgpOwotICAgICAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAog
ICAgICAgICAvLyBJZiBuYXRpdmUgdGFnIG9mIHRoZSBwYXJlbnQgZWxlbWVudCBtYXRjaGVzIGFu
IGFjY2VwdGFibGUgbmFtZSwgdGhlbiByZXR1cm4KQEAgLTI4MzgsNyArMjgzNCw3IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpCiB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZFRleHRGaWVsZENoaWxkcmVuKCkKIHsK
ICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8SFRN
TElucHV0RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2Rl
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwpAQCAtMjg4Myw3ICsyODc5LDcgQEAg
QWNjZXNzaWJpbGl0eVNWR1Jvb3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbW90ZVNW
R1Jvb3RFbGVtZW50KCkgY29uc3QKICAgICBGcmFtZSYgZnJhbWUgPSBmcmFtZVZpZXctPmZyYW1l
KCk7CiAgICAgCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUuZG9jdW1lbnQoKTsKLSAg
ICBpZiAoIWRvY3VtZW50IHx8ICFpczxTVkdEb2N1bWVudD4oZG9jdW1lbnQpKQorICAgIGlmICgh
aXM8U1ZHRG9jdW1lbnQ+KGRvY3VtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
CiAgICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSBkb3duY2FzdDxTVkdEb2N1bWVudD4o
KmRvY3VtZW50KS5yb290RWxlbWVudCgpOwpAQCAtMzI1Myw3ICszMjQ5LDcgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRBY2Nlc3NpYmxlTmFtZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpCiAgICAgZWxzZQogICAgICAgICBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwog
Ci0gICAgaWYgKG5vZGUgJiYgaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKGlzPEVsZW1lbnQ+
KG5vZGUpKQogICAgICAgICBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuc2V0QXR0cmlidXRlKGFy
aWFfbGFiZWxBdHRyLCBuYW1lKTsKIH0KICAgICAKQEAgLTMyNzEsNyArMzI2Nyw3IEBAIFN0cmlu
ZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdWYWx1ZUZvck1TQUEoKSBjb25zdAog
ewogICAgIGlmIChpc0xpbmthYmxlKCp0aGlzKSkgewogICAgICAgICBFbGVtZW50KiBhbmNob3Ig
PSBhbmNob3JFbGVtZW50KCk7Ci0gICAgICAgIGlmIChhbmNob3IgJiYgaXM8SFRNTEFuY2hvckVs
ZW1lbnQ+KGFuY2hvcikpCisgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4oYW5jaG9y
KSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKmFuY2hv
cikuaHJlZigpOwogICAgIH0KIApAQCAtMzI4NCw3ICszMjgwLDcgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc0xpbmtlZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIEVsZW1lbnQqIGFuY2hvciA9IGFuY2hvckVsZW1lbnQoKTsKLSAgICBpZiAoIWFuY2hv
ciB8fCAhaXM8SFRNTEFuY2hvckVsZW1lbnQ+KGFuY2hvcikpCisgICAgaWYgKCFpczxIVE1MQW5j
aG9yRWxlbWVudD4oYW5jaG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJu
ICFkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKmFuY2hvcikuaHJlZigpLmlzRW1wdHkoKTsK
QEAgLTMzNzQsNyArMzM3MCw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpz
dHJpbmdSb2xlRm9yTVNBQSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAg
IE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxF
bGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4o
Km5vZGUpOwpAQCAtMzQ4OSwxMSArMzQ4NSwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKICNpZiBFTkFCTEUo
TUFUSE1MKQogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhFbGVtZW50KCkg
Y29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbV9yZW5k
ZXJlciB8fCAhbm9kZSkKKyAgICBpZiAoIW1fcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKLSAgICByZXR1cm4gaXM8TWF0aE1MRWxlbWVudD4obm9kZSk7CisgICAgcmV0dXJu
IGlzPE1hdGhNTEVsZW1lbnQ+KG5vZGUoKSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aXNNYXRoRnJhY3Rpb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRCdXR0b25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNlYXJjaEZpZWxkQnV0dG9u
cy5jcHAKaW5kZXggMmM1YzI0NjVhZGVlNTE2MTgxNDY1NzE1MzJhYWNiNDIxMGZjOWZhYy4uM2Q0
ZTcwYzg3NjIyZjUyNjllMWJjN2IxZGFhNzBmMGU2MjljYzc4OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRCdXR0b25zLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTZWFyY2hG
aWVsZEJ1dHRvbnMuY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uOjphY2Nlc3NpYmlsaXR5VGV4dChWZWN0b3I8QWNjZXNzaWJpbGl0
CiBib29sIEFjY2Vzc2liaWxpdHlTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbjo6cHJlc3MoKQogewog
ICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxFbGVt
ZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlLmNwcAppbmRleCA4Mjg4NzRmMzkwODk1M2VhNWYxNDgyYTU3NjExNzVmNWYzN2UwZWQ0
Li5kNWIxM2U1ZjgzYzU1YzAyMDc4ZGNhOTM0ZTU3NTY3YjhkNzNkNGVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCkBAIC05
Niw3ICs5Niw3IEBAIEhUTUxUYWJsZUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlUYWJsZTo6dGFibGVF
bGVtZW50KCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVuZGVy
VGFibGUqIHRhYmxlID0gdG9SZW5kZXJUYWJsZShtX3JlbmRlcmVyKTsKLSAgICBpZiAodGFibGUt
PmVsZW1lbnQoKSAmJiBpczxIVE1MVGFibGVFbGVtZW50Pih0YWJsZS0+ZWxlbWVudCgpKSkKKyAg
ICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4odGFibGUtPmVsZW1lbnQoKSkpCiAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pih0YWJsZS0+ZWxlbWVudCgpKTsKICAgICAK
ICAgICAvLyBJZiB0aGUgdGFibGUgaGFzIGEgZGlzcGxheTp0YWJsZS1yb3ctZ3JvdXAsIHRoZW4g
dGhlIFJlbmRlclRhYmxlIGRvZXMgbm90IGhhdmUgYSBwb2ludGVyIHRvIGl0J3MgSFRNTFRhYmxl
RWxlbWVudC4KQEAgLTEwNiw3ICsxMDYsNyBAQCBIVE1MVGFibGVFbGVtZW50KiBBY2Nlc3NpYmls
aXR5VGFibGU6OnRhYmxlRWxlbWVudCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIAogICAgIEVsZW1lbnQqIGFjdHVhbFRhYmxlID0gZmlyc3RCb2R5LT5lbGVtZW50KCktPnBh
cmVudEVsZW1lbnQoKTsKLSAgICBpZiAoIWFjdHVhbFRhYmxlIHx8ICFpczxIVE1MVGFibGVFbGVt
ZW50PihhY3R1YWxUYWJsZSkpCisgICAgaWYgKCFpczxIVE1MVGFibGVFbGVtZW50PihhY3R1YWxU
YWJsZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MVGFibGVFbGVtZW50PihhY3R1YWxUYWJsZSk7CkBAIC0yMTgsNyArMjE4LDcgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKCkgY29uc3QKICAgICAgICAgICAgICAg
ICBoZWFkZXJzSW5GaXJzdENvbHVtbkNvdW50Kys7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIEluIHRoaXMgY2FzZSwgdGhlIGRldmVsb3BlciBleHBsaWNpdGx5IGFzc2lnbmVkIGEgImRh
dGEiIHRhYmxlIGF0dHJpYnV0ZS4KLSAgICAgICAgICAgIGlmIChpczxIVE1MVGFibGVDZWxsRWxl
bWVudD4oY2VsbEVsZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAoaXM8SFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ+KCpjZWxsRWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICBIVE1MVGFibGVDZWxsRWxl
bWVudCYgdGFibGVDZWxsRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50Pigq
Y2VsbEVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmICghdGFibGVDZWxsRWxlbWVudC5oZWFk
ZXJzKCkuaXNFbXB0eSgpIHx8ICF0YWJsZUNlbGxFbGVtZW50LmFiYnIoKS5pc0VtcHR5KCkKICAg
ICAgICAgICAgICAgICAgICAgfHwgIXRhYmxlQ2VsbEVsZW1lbnQuYXhpcygpLmlzRW1wdHkoKSB8
fCAhdGFibGVDZWxsRWxlbWVudC5zY29wZSgpLmlzRW1wdHkoKSkKQEAgLTMyOCw3ICszMjgsNyBA
QCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsZVRocm91Z2hBY2Nlc3Np
YmlsaXR5KCkgY29uc3QKICAgICAvLyBHdGsrIEFUcyBleHBlY3QgYWxsIHRhYmxlcyB0byBiZSBl
eHBvc2VkIGFzIHRhYmxlcy4KICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICAg
ICBFbGVtZW50KiB0YWJsZU5vZGUgPSB0b1JlbmRlclRhYmxlKG1fcmVuZGVyZXIpLT5lbGVtZW50
KCk7Ci0gICAgcmV0dXJuIHRhYmxlTm9kZSAmJiBpczxIVE1MVGFibGVFbGVtZW50Pih0YWJsZU5v
ZGUpOworICAgIHJldHVybiBpczxIVE1MVGFibGVFbGVtZW50Pih0YWJsZU5vZGUpOwogI2VuZGlm
CiAKICAgICByZXR1cm4gaXNEYXRhVGFibGUoKTsKQEAgLTYwNyw3ICs2MDcsNyBAQCBTdHJpbmcg
QWNjZXNzaWJpbGl0eVRhYmxlOjp0aXRsZSgpIGNvbnN0CiAgICAgCiAgICAgLy8gc2VlIGlmIHRo
ZXJlIGlzIGEgY2FwdGlvbgogICAgIE5vZGUqIHRhYmxlRWxlbWVudCA9IG1fcmVuZGVyZXItPm5v
ZGUoKTsKLSAgICBpZiAodGFibGVFbGVtZW50ICYmIGlzPEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxl
RWxlbWVudCkpIHsKKyAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4odGFibGVFbGVtZW50KSkg
ewogICAgICAgICBpZiAoSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24gPSBkb3duY2Fz
dDxIVE1MVGFibGVFbGVtZW50PigqdGFibGVFbGVtZW50KS5jYXB0aW9uKCkpCiAgICAgICAgICAg
ICB0aXRsZSA9IGNhcHRpb24tPmlubmVyVGV4dCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKaW5kZXggMjBi
MTQ1ODk1NTFiOTgwZmE5MjhkMmFkMTZhMmQzMzgyNmUzNWUwMi4uMmQyMjEwMDA0ZmRmOGUyMDA2
MTQ2NzcyMzM1NTdjYzUxYWY2ZjY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKQEAgLTEzMyw3ICsxMzMsNyBAQCBz
dGF0aWMgdm9pZCBub3RpZnlDaGlsZHJlblNlbGVjdGlvbkNoYW5nZShBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QpCiAKICAgICAvLyBPbmx5IHN1cHBvcnQgSFRNTCBzZWxlY3QgZWxlbWVudHMg
c28gZmFyIChBUklBIHNlbGVjdG9ycyBub3Qgc3VwcG9ydGVkKS4KICAgICBOb2RlKiBub2RlID0g
b2JqZWN0LT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxIVE1MU2VsZWN0RWxlbWVudD4o
bm9kZSkpCisgICAgaWYgKCFpczxIVE1MU2VsZWN0RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEVtaXQgc2lnbmFsIGZyb20gdGhlIGxpc3Rib3gncyBwb2ludCBvZiB2
aWV3IGZpcnN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAKaW5kZXggMzQ5
MmI3ZTBlZjJjNzdmOWQ0M2U5Yzc2YmZhNmU4NmVjZWZjNjBjOC4uMDI1ZWYwODE3ZWU1OWM5NjAz
NWM2NWU4NTBiMWIzNTViMDQ4M2EyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFi
bGUuY3BwCkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIEF0a09iamVjdCogd2Via2l0QWNjZXNz
aWJsZVRhYmxlR2V0Q2FwdGlvbihBdGtUYWJsZSogdGFibGUpCiAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKICAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhY2NUYWJsZS0+
bm9kZSgpOwotICAgICAgICBpZiAobm9kZSAmJiBpczxIVE1MVGFibGVFbGVtZW50Pihub2RlKSkg
eworICAgICAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAg
IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjYXB0aW9uID0gZG93bmNhc3Q8SFRNTFRhYmxlRWxl
bWVudD4oKm5vZGUpLmNhcHRpb24oKTsKICAgICAgICAgICAgIGlmIChjYXB0aW9uKQogICAgICAg
ICAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaXJzdEFjY2Vzc2libGVPYmpl
Y3RGcm9tTm9kZShjYXB0aW9uLT5yZW5kZXJlcigpLT5lbGVtZW50KCkpLT53cmFwcGVyKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlV3JhcHBlckF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKaW5kZXggZTFkMmE4MjMxNjE2Y2Q4ZDVkNWZlMGQ0
ZDlhMDQ2YmU2Y2Q1MzljNy4uY2ZjNTAyNTA5NTkxMzNhYTBmN2YxZGY0NTRjNTVhODJkZTMzMGI4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZVdyYXBwZXJBdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcApAQCAtMTM3LDcgKzEzNyw3IEBAIHN0
YXRpYyBjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUdldE5hbWUoQXRrT2JqZWN0KiBvYmpl
Y3QpCiAKICAgICBpZiAoY29yZU9iamVjdC0+aXNJbWFnZSgpIHx8IGNvcmVPYmplY3QtPmlzSW5w
dXRJbWFnZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBjb3JlT2JqZWN0LT5ub2RlKCk7Ci0g
ICAgICAgIGlmIChub2RlICYmIGlzPEhUTUxFbGVtZW50Pihub2RlKSkgeworICAgICAgICBpZiAo
aXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgICAgICAvLyBHZXQgdGhlIGF0dHJpYnV0
ZSByYXRoZXIgdGhhbiBhbHRUZXh0IFN0cmluZyBzbyBhcyBub3QgdG8gZmFsbCBiYWNrIG9uIHRp
dGxlLgogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHQgPSBkb3duY2FzdDxIVE1M
RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmFsdEF0dHIpOwogICAgICAg
ICAgICAgaWYgKCFhbHQuaXNFbXB0eSgpKQpAQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyBjb25z
dCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUdldERlc2NyaXB0aW9uKEF0a09iamVjdCogb2JqZWN0
KQogICAgIE5vZGUqIG5vZGUgPSBudWxscHRyOwogICAgIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoKSkKICAgICAgICAgbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUo
KTsKLSAgICBpZiAoIW5vZGUgfHwgIWlzPEhUTUxFbGVtZW50Pihub2RlKSB8fCBjb3JlT2JqZWN0
LT5hcmlhUm9sZUF0dHJpYnV0ZSgpICE9IFVua25vd25Sb2xlIHx8IGNvcmVPYmplY3QtPmlzSW1h
Z2UoKSkKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pihub2RlKSB8fCBjb3JlT2JqZWN0LT5hcmlh
Um9sZUF0dHJpYnV0ZSgpICE9IFVua25vd25Sb2xlIHx8IGNvcmVPYmplY3QtPmlzSW1hZ2UoKSkK
ICAgICAgICAgcmV0dXJuIGNhY2hlQW5kUmV0dXJuQXRrUHJvcGVydHkob2JqZWN0LCBBdGtDYWNo
ZWRBY2Nlc3NpYmxlRGVzY3JpcHRpb24sIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbihjb3JlT2Jq
ZWN0KSk7CiAKICAgICAvLyBhdGtfdGFibGVfZ2V0X3N1bW1hcnkgcmV0dXJucyBhbiBBdGtPYmpl
Y3QuIFdlIGhhdmUgbm8gc3VtbWFyeSBvYmplY3QsIHNvIGV4cG9zZSBzdW1tYXJ5IGhlcmUuCkBA
IC01MDYsNyArNTA2LDcgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJs
ZUdldEF0dHJpYnV0ZXMoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAgLy8gY2Fubm90IGJlIGRvbmUg
ZnJvbSB0aGUgVUlQcm9jZXNzLiBBc3Npc3RpdmUgdGVjaG5vbG9naWVzIGhhdmUgbm8gbmVlZAog
ICAgIC8vIGZvciB0aGlzIGluZm9ybWF0aW9uLgogICAgIE5vZGUqIG5vZGUgPSBjb3JlT2JqZWN0
LT5ub2RlKCk7Ci0gICAgaWYgKG5vZGUgJiYgaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAo
aXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgU3RyaW5nIGlkID0gZG93bmNhc3Q8RWxlbWVu
dD4oKm5vZGUpLmdldElkQXR0cmlidXRlKCkuc3RyaW5nKCk7CiAgICAgICAgIGlmICghaWQuaXNF
bXB0eSgpKQogICAgICAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQo
YXR0cmlidXRlU2V0LCAiaHRtbC1pZCIsIGlkLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Qcml2YXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NUHJpdmF0ZS5jcHAKaW5kZXgg
MDhjNWYwMjc2NDY2MjVhZTUzZjViZjg1ZmFiOWI3YmU0YTU0ZjhjYi4uODBjYzZkNjI5MzU4NGE5
ODk0YWNmMTJhZmM5YzFmMTA1MGJlNzc4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01Qcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwCkBAIC04NCw3ICs4NCw3IEBAIFdl
YktpdERPTU5vZGUqIHdyYXAoTm9kZSogbm9kZSkKIAogICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5
cGUoKSkgewogICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgotICAgICAgICBpZiAoaXM8SFRN
TEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCpub2RlKSkKICAg
ICAgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX05PREUod3JhcChkb3duY2FzdDxIVE1MRWxlbWVu
dD4obm9kZSkpKTsKICAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTk9ERSh3cmFwRWxlbWVudChk
b3duY2FzdDxFbGVtZW50Pihub2RlKSkpOwogICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6
CkBAIC0xMDAsNyArMTAwLDcgQEAgV2ViS2l0RE9NTm9kZSogd3JhcChOb2RlKiBub2RlKQogICAg
IGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgogICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9OT0RF
KHdyYXBDb21tZW50KHN0YXRpY19jYXN0PENvbW1lbnQqPihub2RlKSkpOwogICAgIGNhc2UgTm9k
ZTo6RE9DVU1FTlRfTk9ERToKLSAgICAgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4obm9kZSkpCisg
ICAgICAgIGlmIChpczxIVE1MRG9jdW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIHJldHVybiBX
RUJLSVRfRE9NX05PREUod3JhcEhUTUxEb2N1bWVudChkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KG5v
ZGUpKSk7CiAgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX05PREUod3JhcERvY3VtZW50KGRvd25j
YXN0PERvY3VtZW50Pihub2RlKSkpOwogICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RF
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0
b20uY3BwCmluZGV4IDVjODQxMmFmMDBkNDdkYzE0OWY1ZDVlZTg0ZGVkNzQ1NzFkMGE2MTEuLjFh
NzVkOTM1YmM3MzIyMDVhYjQ3YTVkMTk2MDRkMDgyOWQxZDRlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAKQEAgLTUzLDcg
KzUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0F1ZGlvQ29u
dGV4dChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4
ZWMsICJBdWRpb0NvbnRleHQgY29uc3RydWN0b3Igc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IGlz
IHVuYXZhaWxhYmxlIikpOwogICAgICAgICAKLSAgICBpZiAoIWlzPERvY3VtZW50PihzY3JpcHRF
eGVjdXRpb25Db250ZXh0KSkKKyAgICBpZiAoIWlzPERvY3VtZW50Pigqc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJl
bmNlRXJyb3IoZXhlYywgIkF1ZGlvQ29udGV4dCBjb25zdHJ1Y3RvciBjYWxsZWQgaW4gYSBzY3Jp
cHQgZXhlY3V0aW9uIGNvbnRleHQgd2hpY2ggaXMgbm90IGEgZG9jdW1lbnQiKSk7CiAKICAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuY3BwCmluZGV4IGQ0ZWRkNjkxZjkxY2IwMzk5M2FmOTNkMDQzMjY3Y2JiZTRhNTJjYmMuLmQy
YjMwZTRmNGE0NzE3ZTA4ZDIyZDVkNDMxYmYyNDk2MGFhZDZhZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKQEAgLTEwNSwxMCArMTA1
LDEwIEBAIEpTRE9NR2xvYmFsT2JqZWN0KiB0b0pTRE9NR2xvYmFsT2JqZWN0KERvY3VtZW50KiBk
b2N1bWVudCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiAKIEpTRE9NR2xvYmFsT2JqZWN0KiB0b0pT
RE9NR2xvYmFsT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChpczxEb2N1bWVudD4oc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCkpCisgICAgaWYgKGlzPERvY3VtZW50Pigqc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCkpCiAgICAgICAgIHJldHVybiB0b0pTRE9NR2xvYmFsT2JqZWN0KGRvd25jYXN0
PERvY3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSwgZXhlYyk7CiAKLSAgICBpZiAoaXM8
V29ya2VyR2xvYmFsU2NvcGU+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQorICAgIGlmIChpczxX
b3JrZXJHbG9iYWxTY29wZT4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQogICAgICAgICByZXR1
cm4gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KS5z
Y3JpcHQoKS0+d29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyKCk7CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTEyMiwxMCArMTIyLDEwIEBAIEpTRE9NR2xvYmFsT2JqZWN0KiB0b0pTRE9N
R2xvYmFsT2JqZWN0KERvY3VtZW50KiBkb2N1bWVudCwgRE9NV3JhcHBlcldvcmxkJiB3b3JsCiAK
IEpTRE9NR2xvYmFsT2JqZWN0KiB0b0pTRE9NR2xvYmFsT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCiB7
Ci0gICAgaWYgKGlzPERvY3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkKKyAgICBpZiAo
aXM8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkKICAgICAgICAgcmV0dXJuIHRv
SlNET01HbG9iYWxPYmplY3QoZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpLCB3b3JsZCk7CiAKLSAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpKQorICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oKnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+
KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KS5zY3JpcHQoKS0+d29ya2VyR2xvYmFsU2NvcGVXcmFw
cGVyKCk7CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCA2Mzk1OGNjNWYzOGM2MDY1
YjYwNWIyYzlmYjAyOWY2MDQyNDNhMjJjLi5jYTg5MTAxZGFhZjVkMWI1ZDM5NTQ2NjM3YzI5OTFk
MDU5MjY4MDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCkBAIC03OSw3ICs3OSw2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBuYW1l
ZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kCiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpc09iai0+aW1wbCgpLmZyYW1lKCktPmRvY3VtZW50
KCk7CiAKICAgICBBU1NFUlQoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9N
V2luZG93KGV4ZWMsIHRoaXNPYmotPmltcGwoKSkpOwotICAgIEFTU0VSVChkb2N1bWVudCk7CiAg
ICAgQVNTRVJUKGlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQpKTsKIAogICAgIEF0b21pY1N0cmlu
Z0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7CkBA
IC0yNDQsNyArMjQzLDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHkKIAogICAgIC8vIEFsbG93
IHNob3J0Y3V0cyBsaWtlICdJbWFnZTEnIGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdl
MQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPmltcGwoKS5mcmFtZSgpLT5k
b2N1bWVudCgpOwotICAgIGlmIChpczxIVE1MRG9jdW1lbnQ+KGRvY3VtZW50KSkgeworICAgIGlm
IChpczxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkpIHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1w
bCogYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKICAgICAg
ICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KCpkb2N1
bWVudCkuaGFzV2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSwgbmFtZWRJdGVtR2V0dGVyKTsKQEAgLTMyMSw3ICszMjAsNyBAQCBib29sIEpTRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgdQogCiAgICAgLy8gQWxsb3cgc2hvcnRjdXRzIGxpa2UgJ0ltYWdlMScgaW5z
dGVhZCBvZiBkb2N1bWVudC5pbWFnZXMuSW1hZ2UxCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
dGhpc09iamVjdC0+aW1wbCgpLmZyYW1lKCktPmRvY3VtZW50KCk7Ci0gICAgaWYgKGlzPEhUTUxE
b2N1bWVudD4oZG9jdW1lbnQpKSB7CisgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4oKmRvY3VtZW50
KSkgewogICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9w
ZXJ0eU5hbWUucHVibGljTmFtZSgpOwogICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYm
IGRvd25jYXN0PEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KS5oYXNXaW5kb3dOYW1lZEl0ZW0oKmF0
b21pY1Byb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmpl
Y3QsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtLCBuYW1lZEl0ZW1HZXR0ZXIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKaW5kZXgg
ZWQ4NTcxOTAwMDI0OWExODJmNTA3Nzk2YTc1ZDdhOGRmNGM1MTEyOS4uYjRlNWFiNjk0NzBmYzU5
MjMzZjJlMDM0YWUxMGI3MTg4ODdjZjhiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCkBAIC01Niw5ICs1Niw5IEBAIEpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bGVtZW50KiBlCiAgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29y
bGQoKSwgZWxlbWVudCkpOwogCiAgICAgSlNET01XcmFwcGVyKiB3cmFwcGVyOyAgICAgICAgCi0g
ICAgaWYgKGlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+
KCplbGVtZW50KSkKICAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTSFRNTFdyYXBwZXIoZ2xvYmFs
T2JqZWN0LCBkb3duY2FzdDxIVE1MRWxlbWVudD4oZWxlbWVudCkpOwotICAgIGVsc2UgaWYgKGlz
PFNWR0VsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGVsc2UgaWYgKGlzPFNWR0VsZW1lbnQ+KCplbGVt
ZW50KSkKICAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTU1ZHV3JhcHBlcihnbG9iYWxPYmplY3Qs
IGRvd25jYXN0PFNWR0VsZW1lbnQ+KGVsZW1lbnQpKTsKICAgICBlbHNlCiAgICAgICAgIHdyYXBw
ZXIgPSBDUkVBVEVfRE9NX1dSQVBQRVIoZ2xvYmFsT2JqZWN0LCBFbGVtZW50LCBlbGVtZW50KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAppbmRleCA1
NGJlMjRiZTdjYzU1Mzk5MTc2YjE2Y2Y0MDlhMzNmMzY1Y2VmYjY1Li5jMmVjNTc4NDRhMmVmNWVl
YTFmNDU3YzNlY2JkYjY5YTA3NzgwN2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFcnJvckhhbmRsZXIuY3BwCkBAIC01OSw3ICs1OSw3IEBAIEpTRXJyb3JIYW5kbGVyOjp+
SlNFcnJvckhhbmRsZXIoKQogdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRXZlbnQqIGV2ZW50KQog
ewogCi0gICAgaWYgKCFpczxFcnJvckV2ZW50PihldmVudCkpCisgICAgaWYgKCFpczxFcnJvckV2
ZW50PigqZXZlbnQpKQogICAgICAgICByZXR1cm4gSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBldmVudCk7CiAKICAgICBBU1NFUlQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcAppbmRleCA0YWM1ZTE5ZTVhNzJjZDY3NjgzNzk0ZWJkY2RmY2ZmMWFiNjIwZWFh
Li5lOWM5YzZlYjE5MGUzZDk4YTJmOGMzYWYyYjQ2OGMyZDUwNDhmYmI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKQEAgLTEzMSw3ICsxMzEs
NyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dAogCiAgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0
Q3VycmVudEV2ZW50KHNhdmVkRXZlbnQpOwogCi0gICAgICAgIGlmIChpczxXb3JrZXJHbG9iYWxT
Y29wZT4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpIHsKKyAgICAgICAgaWYgKGlzPFdvcmtlckds
b2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpIHsKICAgICAgICAgICAgIGJvb2wg
dGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiA9IChleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBpc1Rl
cm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhlYy0+ZXhjZXB0aW9uKCkpKTsKICAgICAgICAg
ICAgIGlmICh0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uIHx8ICh2bS53YXRjaGRvZyAmJiB2bS53
YXRjaGRvZy0+ZGlkRmlyZSgpKSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxXb3JrZXJHbG9i
YWxTY29wZT4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRp
b24oKTsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dAogICAgICAg
ICAgICAgZXZlbnQtPnRhcmdldCgpLT51bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7
CiAgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghcmV0dmFsLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYg
aXM8QmVmb3JlVW5sb2FkRXZlbnQ+KGV2ZW50KSkKKyAgICAgICAgICAgIGlmICghcmV0dmFsLmlz
VW5kZWZpbmVkT3JOdWxsKCkgJiYgaXM8QmVmb3JlVW5sb2FkRXZlbnQ+KCpldmVudCkpCiAgICAg
ICAgICAgICAgICAgZG93bmNhc3Q8QmVmb3JlVW5sb2FkRXZlbnQ+KCpldmVudCkuc2V0UmV0dXJu
VmFsdWUocmV0dmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICBp
ZiAobV9pc0F0dHJpYnV0ZSkgewogICAgICAgICAgICAgICAgIGlmIChyZXR2YWwuaXNGYWxzZSgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0
b20uY3BwCmluZGV4IDUyMjFlMWRlZDU0YmFiOWYxZjhhODNhZDU2MDExZDZjOGRlZjQ5OWQuLjli
MWI1NzZkODFkNWM0NjE5OGNjMTAxNTlkNWZiMjJiNGVmZjg0YjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTczLDcg
KzczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEUKICAgICB9CiAKICAgICBFbGVtZW50KiBl
bGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnROYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSk7
Ci0gICAgaWYgKFVOTElLRUxZKGlzPEhUTUxJRnJhbWVFbGVtZW50PihlbGVtZW50KSkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoaXM8SFRNTElGcmFtZUVsZW1lbnQ+KCplbGVtZW50KSkpIHsKICAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PigqZWxlbWVu
dCkuY29udGVudEZyYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlMoZXhlYywgZnJhbWUpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGIyY2MyNzZjNDE4ZTYwY2UxNjA0OTI2
MzNiNjkzN2VmMTA0MmU2MDYuLjZkZGU1MTBjNDMyNTUyNmNkMjc5NzliODIyYjcxMjQ2MTI3NTNi
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlz
dGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlz
dGVuZXIuY3BwCkBAIC03Miw3ICs3Miw2IEBAIEpTTGF6eUV2ZW50TGlzdGVuZXI6On5KU0xhenlF
dmVudExpc3RlbmVyKCkKIAogSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxp
emVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGV4ZWN1dGlvbkNvbnRleHQpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKGV4ZWN1dGlvbkNvbnRleHQpOwogICAgIEFTU0VSVChpczxEb2N1
bWVudD4oZXhlY3V0aW9uQ29udGV4dCkpOwogICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
Q3VzdG9tLmNwcAppbmRleCBkNmMzYzlkZTZhZjc4M2Q4ZGRkYjk3ZWY3ZjQ5MDk3ZTRlZTFjMDE3
Li5kNDc5M2FiZGViOWU0YTIxZWNjOWY5YWRiZGZlYWU0OGI2NTIzNDJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgc3Rh
dGljIGlubGluZSBib29sIGlzT2JzZXJ2YWJsZShKU05vZGUqIGpzTm9kZSwgTm9kZSogbm9kZSkK
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oSlNOb2RlKiBqc05vZGUsIE5v
ZGUqIG5vZGUsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICghbm9kZS0+aW5Eb2N1
bWVudCgpKSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgeworICAgICAgICBpZiAo
aXM8RWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBlbGVtZW50ID0gZG93bmNh
c3Q8RWxlbWVudD4oKm5vZGUpOwogCiAgICAgICAgICAgICAvLyBJZiBhIHdyYXBwZXIgaXMgdGhl
IGxhc3QgcmVmZXJlbmNlIHRvIGFuIGltYWdlIGVsZW1lbnQKQEAgLTE5Miw5ICsxOTIsOSBAQCBz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNyZWF0ZVdyYXBwZXJJbmxpbmUoRXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iagogICAgIEpTRE9NV3JhcHBlciogd3JhcHBlcjsgICAgCiAg
ICAgc3dpdGNoIChub2RlLT5ub2RlVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVO
VF9OT0RFOgotICAgICAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50Pihub2RlKSkKKyAgICAgICAg
ICAgIGlmIChpczxIVE1MRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgICAgIHdyYXBwZXIg
PSBjcmVhdGVKU0hUTUxXcmFwcGVyKGdsb2JhbE9iamVjdCwgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+
KG5vZGUpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzPFNWR0VsZW1lbnQ+KG5vZGUpKQorICAg
ICAgICAgICAgZWxzZSBpZiAoaXM8U1ZHRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgICAg
IHdyYXBwZXIgPSBjcmVhdGVKU1NWR1dyYXBwZXIoZ2xvYmFsT2JqZWN0LCBkb3duY2FzdDxTVkdF
bGVtZW50Pihub2RlKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgd3JhcHBl
ciA9IENSRUFURV9ET01fV1JBUFBFUihnbG9iYWxPYmplY3QsIEVsZW1lbnQsIG5vZGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKaW5kZXggYTFi
NTFhYTM1ZjI3MzU5MzIyOTEwMjkyZmE3YzYxYmM4NmY3NjUyMy4uYWJhMmNkM2JiZjk4ODYyNzJi
NWMxYjQzYWZlNTJlOTJjY2IyN2Y5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uY3BwCkBAIC03NCw3ICs3NCw3IEBAIFNjaGVkdWxlZEFjdGlvbjo6
U2NoZWR1bGVkQWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbiwgRE9NV3Jh
cHBlcldvCiAKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0KSkKKyAgICBp
ZiAoaXM8RG9jdW1lbnQ+KCpjb250ZXh0KSkKICAgICAgICAgZXhlY3V0ZShkb3duY2FzdDxEb2N1
bWVudD4oY29udGV4dCkpOwogICAgIGVsc2UKICAgICAgICAgZXhlY3V0ZShkb3duY2FzdDxXb3Jr
ZXJHbG9iYWxTY29wZT4oY29udGV4dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0U3RhdGUuY3BwCmluZGV4IDM3NmNkMjU0Zjg3ZDM0MTZmYTczOWYyYTExN2NjM2ZkNjBkY2U0
ZTIuLjczMmM3Y2M2OWU0YzJmNTUwOWZkNjAwY2JmOWRhYzQyMjQyYmJmNDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgRE9N
V2luZG93KiBkb21XaW5kb3dGcm9tRXhlY1N0YXRlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSkKIEZyYW1lKiBmcmFtZUZyb21FeGVjU3RhdGUoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRl
KQogewogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRp
b25Db250ZXh0RnJvbUV4ZWNTdGF0ZShzY3JpcHRTdGF0ZSk7Ci0gICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29udGV4dCAmJiBpczxEb2N1bWVudD4oY29udGV4dCkgPyBkb3duY2FzdDxEb2N1bWVu
dD4oY29udGV4dCkgOiBudWxscHRyOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGlzPERvY3Vt
ZW50Pihjb250ZXh0KSA/IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSA6IG51bGxwdHI7CiAg
ICAgcmV0dXJuIGRvY3VtZW50ID8gZG9jdW1lbnQtPmZyYW1lKCkgOiBudWxscHRyOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IGQ1MDRhNzQ1MGVlZmRlNTliOTgzODgy
ZTk0NTBlODA5MjkzZDIyMDIuLjMzNzI1OTQxOWI1OWZlOGRlNThjODA0ZGQ0ZTU1Y2M1ZmIzYjA3
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC0zMDEsNyArMzAxLDcgQEAg
Q2xhc3Mga2l0Q2xhc3MoV2ViQ29yZTo6Tm9kZSogaW1wbCkKIHsKICAgICBzd2l0Y2ggKGltcGwt
Pm5vZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBXZWJDb3JlOjpOb2RlOjpFTEVNRU5UX05PREU6
Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KGltcGwpKQorICAgICAgICAgICAgaWYg
KGlzPEhUTUxFbGVtZW50PigqaW1wbCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OmVsZW1lbnRDbGFzcyhkb3duY2FzdDxIVE1MRWxlbWVudD4oKmltcGwpLnRhZ1FOYW1lKCksIFtE
T01IVE1MRWxlbWVudCBjbGFzc10pOwogICAgICAgICAgICAgcmV0dXJuIFtET01FbGVtZW50IGNs
YXNzXTsKICAgICAgICAgY2FzZSBXZWJDb3JlOjpOb2RlOjpBVFRSSUJVVEVfTk9ERToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcAppbmRleCA1ODZiOGZkYWY3NzE2
OWEyMjgzZGEwNWJkMGU3ODU3OWM1NDI4YTEzLi5mNThjOTIwNWFkZmI0MWMyODc2NGVmYjhhNDNj
NmQyZjNhNGQ4ZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUu
Y3BwCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBpbmxpbmUg
U1ZHQ3Vyc29yRWxlbWVudCogcmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KGNvbnN0
IFN0cmluZyYgdXJsLCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgRWxlbWVudCogZWxlbWVu
dCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcodXJsLCBkb2N1
bWVudCk7Ci0gICAgaWYgKGVsZW1lbnQgJiYgaXM8U1ZHQ3Vyc29yRWxlbWVudD4oZWxlbWVudCkp
CisgICAgaWYgKGlzPFNWR0N1cnNvckVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8U1ZHQ3Vyc29yRWxlbWVudD4oZWxlbWVudCk7CiAKICAgICByZXR1cm4gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAppbmRleCBhYWQ2ZTU4OWZmMTUxY2I2
MjY2NmQ2OWU0YmVmMzdjNGQ2NDM0YzVlLi5iZDRhM2ZmOGQ5NmE2Yzg3Njk2NTA2MTI4MzkwYTRk
NDhjZDY3ZjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCkBAIC02OCw5ICs2
OCw5IEBAIHN0YXRpYyBib29sIGlzQWNjZXB0YWJsZUNTU1N0eWxlU2hlZXRQYXJlbnQoTm9kZSog
cGFyZW50Tm9kZSkKICAgICAvLyBPbmx5IHRoZXNlIG5vZGVzIGNhbiBiZSBwYXJlbnRzIG9mIFN0
eWxlU2hlZXRzLCBhbmQgdGhleSBuZWVkIHRvIGNhbGwgY2xlYXJPd25lck5vZGUoKSB3aGVuIG1v
dmVkIG91dCBvZiBkb2N1bWVudC4KICAgICByZXR1cm4gIXBhcmVudE5vZGUKICAgICAgICAgfHwg
cGFyZW50Tm9kZS0+aXNEb2N1bWVudE5vZGUoKQotICAgICAgICB8fCBpczxIVE1MTGlua0VsZW1l
bnQ+KHBhcmVudE5vZGUpCi0gICAgICAgIHx8IGlzPEhUTUxTdHlsZUVsZW1lbnQ+KHBhcmVudE5v
ZGUpCi0gICAgICAgIHx8IGlzPFNWR1N0eWxlRWxlbWVudD4ocGFyZW50Tm9kZSkKKyAgICAgICAg
fHwgaXM8SFRNTExpbmtFbGVtZW50PigqcGFyZW50Tm9kZSkKKyAgICAgICAgfHwgaXM8SFRNTFN0
eWxlRWxlbWVudD4oKnBhcmVudE5vZGUpCisgICAgICAgIHx8IGlzPFNWR1N0eWxlRWxlbWVudD4o
KnBhcmVudE5vZGUpCiAgICAgICAgIHx8IHBhcmVudE5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IDUzODdkNGY1OWIzZGJhODIzYjIwZmRmNzhjZTllNjIz
NTYzYjFlMWMuLmRlN2FjODA0N2E0ZjliOGZkN2RkZmYzNjEyM2ZjYzA1MWYzZjRlNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC01NTYsMTEgKzU1NiwxMSBAQCBi
b29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBib29s
IHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gZWxlbWVu
dC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzPFRleHQ+KG5vZGUp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxUZXh0Pigqbm9kZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Tm9kZS5kYXRhKCkuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAppbmRleCA2ZjQx
OGMzYjQ0NTA4ZmVlNzE1OGY4MTUyZGRkOWExYjE3ZmNkY2Y3Li5hZmRhZDk5Y2Y1N2RlODAwMDIw
NDM1OWNkMTZmODI5ZmI0YWE5NzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNBdXRvZmlsbGVkKGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCiB7Ci0gICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQp
KSB7CisgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAg
ICAgICBpZiAoY29uc3QgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzQXV0
b2ZpbGxlZCgpOwogICAgIH0KQEAgLTU2LDEzICs1NiwxMyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNEZWZhdWx0QnV0dG9uRm9yRm9ybShjb25zdCBFbGVtZW50KiBlbGVtZW50KQogCiBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNEaXNhYmxlZChjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIHJl
dHVybiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KGVsZW1lbnQpIHx8IGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KGVsZW1lbnQpKQor
ICAgIHJldHVybiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpIHx8IGlzPEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgfHwgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVs
ZW1lbnQpKQogICAgICAgICAmJiBlbGVtZW50LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKIH0K
IAogQUxXQVlTX0lOTElORSBib29sIGlzRW5hYmxlZChjb25zdCBFbGVtZW50KiBlbGVtZW50KQog
ewotICAgIHJldHVybiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8
SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpIHx8IGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KGVs
ZW1lbnQpKQorICAgIHJldHVybiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQp
IHx8IGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgfHwgaXM8SFRNTE9wdEdyb3VwRWxl
bWVudD4oKmVsZW1lbnQpKQogICAgICAgICAmJiAhZWxlbWVudC0+aXNEaXNhYmxlZEZvcm1Db250
cm9sKCk7CiB9CiAKQEAgLTc5LDcgKzc5LDcgQEAgQUxXQVlTX0lOTElORSBib29sIGlzQ2hlY2tl
ZChFbGVtZW50KiBlbGVtZW50KQogICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKGlucHV0RWxlbWVudCAm
JiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5z
aG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
IChpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKQorICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVu
dD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2Vs
ZWN0ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAt
MTI3LDcgKzEyNyw3IEBAIGlubGluZSBib29sIG1hdGNoZXNMYW5nUHNldWRvQ2xhc3MoY29uc3Qg
RWxlbWVudCogZWxlbWVudCwgQXRvbWljU3RyaW5nSW1wbCogZmlsCiB7CiAgICAgQXRvbWljU3Ry
aW5nIHZhbHVlOwogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAoaXM8V2ViVlRURWxl
bWVudD4oZWxlbWVudCkpCisgICAgaWYgKGlzPFdlYlZUVEVsZW1lbnQ+KCplbGVtZW50KSkKICAg
ICAgICAgdmFsdWUgPSBkb3duY2FzdDxXZWJWVFRFbGVtZW50PigqZWxlbWVudCkubGFuZ3VhZ2Uo
KTsKICAgICBlbHNlCiAjZW5kaWYKQEAgLTMwNCwxMiArMzA0LDEyIEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBtYXRjaGVzRnVsbFNjcmVlbkRvY3VtZW50UHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCog
ZWxlbWVudCkKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiBBTFdBWVNfSU5MSU5FIGJvb2wgbWF0
Y2hlc0Z1dHVyZUN1ZVBzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAg
cmV0dXJuIGlzPFdlYlZUVEVsZW1lbnQ+KGVsZW1lbnQpICYmICFkb3duY2FzdDxXZWJWVFRFbGVt
ZW50PigqZWxlbWVudCkuaXNQYXN0Tm9kZSgpOworICAgIHJldHVybiBpczxXZWJWVFRFbGVtZW50
PigqZWxlbWVudCkgJiYgIWRvd25jYXN0PFdlYlZUVEVsZW1lbnQ+KCplbGVtZW50KS5pc1Bhc3RO
b2RlKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBtYXRjaGVzUGFzdEN1ZVBzZXVkb0NsYXNz
KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGlzPFdlYlZUVEVsZW1lbnQ+
KGVsZW1lbnQpICYmIGRvd25jYXN0PFdlYlZUVEVsZW1lbnQ+KCplbGVtZW50KS5pc1Bhc3ROb2Rl
KCk7CisgICAgcmV0dXJuIGlzPFdlYlZUVEVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxX
ZWJWVFRFbGVtZW50PigqZWxlbWVudCkuaXNQYXN0Tm9kZSgpOwogfQogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAwNzhhNWNhMmUyYzRjZWQ1OWE2ZDMyZGE4
MGIzMjA0ZDM2ZDNhODhkLi4yZjJkZmM2MTdiZDFjNDE1ZDFmNDA3MWE0ZGYxNDk3MTdjOThhMDI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0zODgsNyArMzg4LDcgQEAg
aW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6OnVwZGF0ZUNvbnZlcnNpb25EYXRhKCkK
IGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVudChFbGVtZW50KiBl
bGVtZW50KQogewogICAgIG1fZWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgbV9zdHlsZWRFbGVtZW50
ID0gZWxlbWVudCAmJiBpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSA/IGRvd25jYXN0PFN0eWxl
ZEVsZW1lbnQ+KGVsZW1lbnQpIDogbnVsbHB0cjsKKyAgICBtX3N0eWxlZEVsZW1lbnQgPSBlbGVt
ZW50ICYmIGlzPFN0eWxlZEVsZW1lbnQ+KCplbGVtZW50KSA/IGRvd25jYXN0PFN0eWxlZEVsZW1l
bnQ+KGVsZW1lbnQpIDogbnVsbHB0cjsKICAgICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBlbGVtZW50
ID8gZWxlbWVudC0+ZG9jdW1lbnQoKS52aXNpdGVkTGlua1N0YXRlKCkuZGV0ZXJtaW5lTGlua1N0
YXRlKCplbGVtZW50KSA6IE5vdEluc2lkZUxpbms7CiAgICAgdXBkYXRlQ29udmVyc2lvbkRhdGEo
KTsKIH0KQEAgLTQ0NSwxMiArNDQ1LDEyIEBAIE5vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNv
dXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VuCiB7CiAg
ICAgaWYgKHZpc2l0ZWROb2RlQ291bnQgPj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkICogY1N0eWxl
U2VhcmNoTGV2ZWxUaHJlc2hvbGQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICgh
cGFyZW50IHx8ICFpczxTdHlsZWRFbGVtZW50PihwYXJlbnQpKQorICAgIGlmICghaXM8U3R5bGVk
RWxlbWVudD4ocGFyZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgU3R5bGVkRWxl
bWVudCogc3R5bGVkUGFyZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4ocGFyZW50KTsKICAg
ICBpZiAoc3R5bGVkUGFyZW50LT5pbmxpbmVTdHlsZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpZiAoaXM8U1ZHRWxlbWVudD4oc3R5bGVkUGFyZW50KSAmJiBkb3duY2FzdDxTVkdF
bGVtZW50Pigqc3R5bGVkUGFyZW50KS5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAg
ICBpZiAoaXM8U1ZHRWxlbWVudD4oKnN0eWxlZFBhcmVudCkgJiYgZG93bmNhc3Q8U1ZHRWxlbWVu
dD4oKnN0eWxlZFBhcmVudCkuYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIGlmIChzdHlsZWRQYXJlbnQtPmhhc0lEKCkgJiYgbV9ydWxl
U2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoc3R5bGVkUGFyZW50LT5pZEZvclN0
eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNDY3
LDcgKzQ2Nyw3IEBAIE5vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVu
dCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VuCiAgICAgICAgIHdoaWxlIChjdXJy
ZW50Tm9kZSkgewogICAgICAgICAgICAgKytzdWJjb3VudDsKICAgICAgICAgICAgIGlmIChjdXJy
ZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAmJiBjdXJyZW50Tm9kZS0+bGFz
dENoaWxkKCkKLSAgICAgICAgICAgICAgICAmJiBpczxFbGVtZW50PihjdXJyZW50Tm9kZSkgJiYg
IXBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoZG93bmNhc3Q8RWxlbWVudD4oY3VycmVudE5v
ZGUpKQorICAgICAgICAgICAgICAgICYmIGlzPEVsZW1lbnQ+KCpjdXJyZW50Tm9kZSkgJiYgIXBh
cmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoZG93bmNhc3Q8RWxlbWVudD4oY3VycmVudE5vZGUp
KQogICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51
c2VkIHJlc2VydmVkIHRyaWVzLgogICAgICAgICAgICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0g
Y1N0eWxlU2VhcmNoVGhyZXNob2xkIC0gc3ViY291bnQ7CkBAIC01NDYsNyArNTQ2LDcgQEAgYm9v
bCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0
byhFbGVtZW50KiBlbGVtZW50KQogewogICAgIC8vIEZJWE1FOiBUaGlzIGxpbmUgaXMgc3VycHJp
c2luZ2x5IGhvdCwgd2UgbWF5IHdpc2ggdG8gaW5saW5lIGhhc0RpcmVjdGlvbkF1dG8gaW50byBT
dHlsZVJlc29sdmVyLgotICAgIHJldHVybiBpczxIVE1MRWxlbWVudD4oZWxlbWVudCkgJiYgZG93
bmNhc3Q8SFRNTEVsZW1lbnQ+KCplbGVtZW50KS5oYXNEaXJlY3Rpb25BdXRvKCk7CisgICAgcmV0
dXJuIGlzPEhUTUxFbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpl
bGVtZW50KS5oYXNEaXJlY3Rpb25BdXRvKCk7CiB9CiAKIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hh
cmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRF
bGVtZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25zdApAQCAtNjI2LDkgKzYyNiw5IEBAIGJvb2wg
U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0
dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24o
KS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGlzQ29udHJvbCA9
IGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpOworICAgIGJvb2wgaXNDb250cm9s
ID0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpOwogCi0gICAgaWYgKGlzQ29u
dHJvbCAhPSBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihzdGF0ZS5lbGVtZW50KCkpKQorICAg
IGlmIChpc0NvbnRyb2wgIT0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKnN0YXRlLmVsZW1l
bnQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc0NvbnRyb2wgJiYgIWNh
blNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKQEAgLTY1MCw3ICs2NTAsNyBAQCBib29s
IFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBl
bGVtZW50KSBjb25zdAogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIC8vIERlbnkgc2hh
cmluZyBzdHlsZXMgYmV0d2VlbiBXZWJWVFQgYW5kIG5vbi1XZWJWVFQgbm9kZXMuCi0gICAgaWYg
KGlzPFdlYlZUVEVsZW1lbnQ+KHN0YXRlLmVsZW1lbnQoKSkpCisgICAgaWYgKGlzPFdlYlZUVEVs
ZW1lbnQ+KCpzdGF0ZS5lbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYK
IApAQCAtNjY0LDcgKzY2NCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdp
dGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiBpbmxpbmUgU3R5bGVkRWxl
bWVudCogU3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9k
ZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAogewogICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9k
ZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFpczxTdHlsZWRFbGVtZW50Pihu
b2RlKSkKKyAgICAgICAgaWYgKCFpczxTdHlsZWRFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChkb3duY2Fz
dDxTdHlsZWRFbGVtZW50Pihub2RlKSkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTExNjcsNyAr
MTE2Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyCiAgICAgICAgICAgICBpZiAoZS0+aGFz
VGFnTmFtZSh0ZFRhZykpIHsKICAgICAgICAgICAgICAgICBzdHlsZS5zZXREaXNwbGF5KFRBQkxF
X0NFTEwpOwogICAgICAgICAgICAgICAgIHN0eWxlLnNldEZsb2F0aW5nKE5vRmxvYXQpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MVGFibGVFbGVtZW50PihlKSkKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oKmUpKQogICAgICAgICAgICAgICAgIHN0
eWxlLnNldERpc3BsYXkoc3R5bGUuaXNEaXNwbGF5SW5saW5lVHlwZSgpID8gSU5MSU5FX1RBQkxF
IDogVEFCTEUpOwogICAgICAgICB9CiAKQEAgLTExODQsNyArMTE4NCw3IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSYgcGFyCiAgICAgICAgIH0KIAogICAgICAgICAvLyBUYWJsZXMgbmV2ZXIgc3VwcG9y
dCB0aGUgLXdlYmtpdC0qIHZhbHVlcyBmb3IgdGV4dC1hbGlnbiBhbmQgd2lsbCByZXNldCBiYWNr
IHRvIHRoZSBkZWZhdWx0LgotICAgICAgICBpZiAoZSAmJiBpczxIVE1MVGFibGVFbGVtZW50Pihl
KSAmJiAoc3R5bGUudGV4dEFsaWduKCkgPT0gV0VCS0lUX0xFRlQgfHwgc3R5bGUudGV4dEFsaWdu
KCkgPT0gV0VCS0lUX0NFTlRFUiB8fCBzdHlsZS50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQp
KQorICAgICAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oZSkgJiYgKHN0eWxlLnRleHRBbGln
bigpID09IFdFQktJVF9MRUZUIHx8IHN0eWxlLnRleHRBbGlnbigpID09IFdFQktJVF9DRU5URVIg
fHwgc3R5bGUudGV4dEFsaWduKCkgPT0gV0VCS0lUX1JJR0hUKSkKICAgICAgICAgICAgIHN0eWxl
LnNldFRleHRBbGlnbihUQVNUQVJUKTsKIAogICAgICAgICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0
cyBuZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjphYnNvbHV0ZS4gVGhp
cyBpcyBuZWNlc3NhcnkgdG8KQEAgLTEyNjcsNyArMTI2Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSYgcGFyCiAgICAgICAgIHN0eWxlLnNldFpJbmRleCgwKTsKIAogICAgIC8vIFRleHRhcmVhIGNv
bnNpZGVycyBvdmVyZmxvdyB2aXNpYmxlIGFzIGF1dG8uCi0gICAgaWYgKGUgJiYgaXM8SFRNTFRl
eHRBcmVhRWxlbWVudD4oZSkpIHsKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oZSkp
IHsKICAgICAgICAgc3R5bGUuc2V0T3ZlcmZsb3dYKHN0eWxlLm92ZXJmbG93WCgpID09IE9WSVNJ
QkxFID8gT0FVVE8gOiBzdHlsZS5vdmVyZmxvd1goKSk7CiAgICAgICAgIHN0eWxlLnNldE92ZXJm
bG93WShzdHlsZS5vdmVyZmxvd1koKSA9PSBPVklTSUJMRSA/IE9BVVRPIDogc3R5bGUub3ZlcmZs
b3dZKCkpOwogICAgIH0KQEAgLTEzMzIsMTAgKzEzMzIsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
JiBwYXIKIAogICAgIC8vIEltcG9ydGFudDogSW50cmluc2ljIG1hcmdpbnMgZ2V0IGFkZGVkIHRv
IGNvbnRyb2xzIGJlZm9yZSB0aGUgdGhlbWUgaGFzIGFkanVzdGVkIHRoZSBzdHlsZSwgc2luY2Ug
dGhlIHRoZW1lIHdpbGwKICAgICAvLyBhbHRlciBmb250cyBhbmQgaGVpZ2h0cy93aWR0aHMuCi0g
ICAgaWYgKGUgJiYgaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZSkgJiYgc3R5bGUuZm9udFNp
emUoKSA+PSAxMSkgeworICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlKSAmJiBz
dHlsZS5mb250U2l6ZSgpID49IDExKSB7CiAgICAgICAgIC8vIERvbid0IGFwcGx5IGludHJpbnNp
YyBtYXJnaW5zIHRvIGltYWdlIGJ1dHRvbnMuIFRoZSBkZXNpZ25lciBrbm93cyBob3cgYmlnIHRo
ZSBpbWFnZXMgYXJlLAogICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHRyZWF0IGFsbCBpbWFnZSBi
dXR0b25zIGFzIHRob3VnaCB0aGV5IHdlcmUgZXhwbGljaXRseSBzaXplZC4KLSAgICAgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50PihlKSB8fCAhZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
KmUpLmlzSW1hZ2VCdXR0b24oKSkKKyAgICAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pigq
ZSkgfHwgIWRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplKS5pc0ltYWdlQnV0dG9uKCkpCiAg
ICAgICAgICAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKICAgICB9CiAKQEAgLTE4ODAs
NyArMTg4MCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKIC8vIFNj
YWxlIHdpdGgvaGVpZ2h0IHByb3BlcnRpZXMgb24gaW5saW5lIFNWRyByb290LgogYm9vbCBTdHls
ZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKQogewotICAgIHJldHVybiBtX3N0
YXRlLmVsZW1lbnQoKSAmJiBtX3N0YXRlLmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgIShp
czxTVkdTVkdFbGVtZW50PihtX3N0YXRlLmVsZW1lbnQoKSkgJiYgbV9zdGF0ZS5lbGVtZW50KCkt
PnBhcmVudE5vZGUoKSk7CisgICAgcmV0dXJuIGlzPFNWR0VsZW1lbnQ+KG1fc3RhdGUuZWxlbWVu
dCgpKSAmJiAhKGlzPFNWR1NWR0VsZW1lbnQ+KCptX3N0YXRlLmVsZW1lbnQoKSkgJiYgbV9zdGF0
ZS5lbGVtZW50KCktPnBhcmVudE5vZGUoKSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZ
T1VUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAKaW5kZXggZTkwMTZkOTVmMDVi
YWMzNGZkMjQwNDVhNWQyN2M1ZGI1MDk4OWE2My4uYzJiOWY0MjkwZjdiYzkzMGY5OTQ2ZTY4Nzlh
ZGIyZTFjYzI2MDc5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRM
aXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCkBAIC03
Niw3ICs3Niw3IEBAIEhUTUxTdHlsZUVsZW1lbnQqIFN0eWxlU2hlZXRMaXN0OjpnZXROYW1lZEl0
ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogICAgIC8vIGFuZCBkb2Vzbid0IGxvb2sgZm9y
IG5hbWUgYXR0cmlidXRlLgogICAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlz
IGdvb2QgcHJhY3RpY2UgYW55d2F5IDspCiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1l
bnQtPmdldEVsZW1lbnRCeUlkKG5hbWUpOwotICAgIGlmIChlbGVtZW50ICYmIGlzPEhUTUxTdHls
ZUVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmIChpczxIVE1MU3R5bGVFbGVtZW50PihlbGVtZW50
KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0F0
dHIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCmluZGV4IDE3MmZjYzc2ZDRhNGFi
ODc4YjYwYWFjYWY2MjAwZGMxOTUyZWJiOTAuLjcxZGE5YzZjM2U5ZDZlNTU4YmUzMjZiNWVmODAw
OWUwOTNlN2U5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCBib29sIEF0
dHI6OmlzSWQoKSBjb25zdAogQ1NTU3R5bGVEZWNsYXJhdGlvbiogQXR0cjo6c3R5bGUoKQogewog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBleGlzdHMgdG8gc3VwcG9ydCB0aGUgT2JqLUMgYmlu
ZGluZ3MuCi0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIWlzPFN0eWxlZEVsZW1lbnQ+KG1fZWxlbWVu
dCkpCisgICAgaWYgKCFpczxTdHlsZWRFbGVtZW50PihtX2VsZW1lbnQpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBtX3N0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KCk7CiAgICAgZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oKm1fZWxlbWVudCkuY29sbGVjdFN0eWxl
Rm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKHF1YWxpZmllZE5hbWUoKSwgdmFsdWUoKSwgKm1fc3R5
bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IDMxYTU5NDMxYjVjOTRk
YzA3MjQ3OGZlODk5NzY4NzZlMTA3YjkyYTEuLjcxNzAwMDgyM2FmMzE1OTgzYWRkMzBlN2YzZWRh
MTBkOTMwMDM0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKQEAgLTg3LDgg
Kzg3LDggQEAgdW5zaWduZWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YShjb25zdCBT
dHJpbmcmIHN0cmluZywgdW5zaWduZWQgb2Zmc2V0LAogICAgIGVsc2UKICAgICAgICAgbV9kYXRh
LmFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczE2KCkgKyBvZmZzZXQsIGNoYXJhY3Rlckxlbmd0aExp
bWl0KTsKIAotICAgIEFTU0VSVCghcmVuZGVyZXIoKSB8fCBpczxUZXh0Pih0aGlzKSk7Ci0gICAg
aWYgKGlzPFRleHQ+KHRoaXMpKQorICAgIEFTU0VSVCghcmVuZGVyZXIoKSB8fCBpczxUZXh0Pigq
dGhpcykpOworICAgIGlmIChpczxUZXh0PigqdGhpcykpCiAgICAgICAgIFN0eWxlOjp1cGRhdGVU
ZXh0UmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZ2UoZG93bmNhc3Q8VGV4dD4oKnRoaXMpLCBvbGRM
ZW5ndGgsIDApOwogCiAgICAgZG9jdW1lbnQoKS5pbmNET01UcmVlVmVyc2lvbigpOwpAQCAtMTk0
LDExICsxOTQsMTEgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXREYXRhQW5kVXBkYXRlKGNvbnN0
IFN0cmluZyYgbmV3RGF0YSwgdW5zaWduZWQgb2Zmc2V0T2ZSZXAKICAgICBTdHJpbmcgb2xkRGF0
YSA9IG1fZGF0YTsKICAgICBtX2RhdGEgPSBuZXdEYXRhOwogCi0gICAgQVNTRVJUKCFyZW5kZXJl
cigpIHx8IGlzPFRleHQ+KHRoaXMpKTsKLSAgICBpZiAoaXM8VGV4dD4odGhpcykpCisgICAgQVNT
RVJUKCFyZW5kZXJlcigpIHx8IGlzPFRleHQ+KCp0aGlzKSk7CisgICAgaWYgKGlzPFRleHQ+KCp0
aGlzKSkKICAgICAgICAgU3R5bGU6OnVwZGF0ZVRleHRSZW5kZXJlckFmdGVyQ29udGVudENoYW5n
ZShkb3duY2FzdDxUZXh0PigqdGhpcyksIG9mZnNldE9mUmVwbGFjZWREYXRhLCBvbGRMZW5ndGgp
OwogCi0gICAgaWYgKGlzPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4odGhpcykpCisgICAgaWYgKGlz
PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKnRoaXMpKQogICAgICAgICBkb3duY2FzdDxQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24+KCp0aGlzKS5jaGVja1N0eWxlU2hlZXQoKTsKIAogICAgIGlmIChkb2N1
bWVudCgpLmZyYW1lKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggMTBh
MjNhNThjMTI4YTMwYzllOTU2ZTdkMWRjY2ZjOTg4MTlmZjY3Yy4uOGE0ZjNhYjRlM2NhYzY2MmRm
YzUwMzM0YjNiMWIzYzNkMDQ0NGIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cApAQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uQ29kZSBjaGVja0Fj
Y2VwdENoaWxkKENvbnRhaW5lck5vZGUqIG5ld1BhcmVudCwgTm9kZSogbmV3CiAgICAgaWYgKGNv
bnRhaW5zQ29uc2lkZXJpbmdIb3N0RWxlbWVudHMobmV3Q2hpbGQsIG5ld1BhcmVudCkpCiAgICAg
ICAgIHJldHVybiBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CiAKLSAgICBpZiAob2xkQ2hpbGQgJiYg
aXM8RG9jdW1lbnQ+KG5ld1BhcmVudCkpIHsKKyAgICBpZiAob2xkQ2hpbGQgJiYgaXM8RG9jdW1l
bnQ+KCpuZXdQYXJlbnQpKSB7CiAgICAgICAgIGlmICghZG93bmNhc3Q8RG9jdW1lbnQ+KCpuZXdQ
YXJlbnQpLmNhblJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQpKQogICAgICAgICAgICAg
cmV0dXJuIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICB9IGVsc2UgaWYgKCFpc0NoaWxkVHlw
ZUFsbG93ZWQobmV3UGFyZW50LCBuZXdDaGlsZCkpCkBAIC0zNDgsOCArMzQ4LDggQEAgdm9pZCBD
b250YWluZXJOb2RlOjpub3RpZnlDaGlsZFJlbW92ZWQoTm9kZSYgY2hpbGQsIE5vZGUqIHByZXZp
b3VzU2libGluZywgTm9kZSoKIHsKICAgICBDaGlsZENoYW5nZSBjaGFuZ2U7CiAgICAgY2hhbmdl
LnR5cGUgPSBpczxFbGVtZW50PihjaGlsZCkgPyBFbGVtZW50UmVtb3ZlZCA6IGlzPFRleHQ+KGNo
aWxkKSA/IFRleHRSZW1vdmVkIDogTm9uQ29udGVudHNDaGlsZENoYW5nZWQ7Ci0gICAgY2hhbmdl
LnByZXZpb3VzU2libGluZ0VsZW1lbnQgPSAoIXByZXZpb3VzU2libGluZyB8fCBpczxFbGVtZW50
PihwcmV2aW91c1NpYmxpbmcpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KHByZXZpb3VzU2libGluZykg
OiBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcocHJldmlvdXNTaWJsaW5nKTsKLSAg
ICBjaGFuZ2UubmV4dFNpYmxpbmdFbGVtZW50ID0gKCFuZXh0U2libGluZyB8fCBpczxFbGVtZW50
PihuZXh0U2libGluZykpID8gZG93bmNhc3Q8RWxlbWVudD4obmV4dFNpYmxpbmcpIDogRWxlbWVu
dFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobmV4dFNpYmxpbmcpOworICAgIGNoYW5nZS5wcmV2aW91
c1NpYmxpbmdFbGVtZW50ID0gKCFwcmV2aW91c1NpYmxpbmcgfHwgaXM8RWxlbWVudD4oKnByZXZp
b3VzU2libGluZykpID8gZG93bmNhc3Q8RWxlbWVudD4ocHJldmlvdXNTaWJsaW5nKSA6IEVsZW1l
bnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhwcmV2aW91c1NpYmxpbmcpOworICAgIGNoYW5n
ZS5uZXh0U2libGluZ0VsZW1lbnQgPSAoIW5leHRTaWJsaW5nIHx8IGlzPEVsZW1lbnQ+KCpuZXh0
U2libGluZykpID8gZG93bmNhc3Q8RWxlbWVudD4obmV4dFNpYmxpbmcpIDogRWxlbWVudFRyYXZl
cnNhbDo6bmV4dFNpYmxpbmcobmV4dFNpYmxpbmcpOwogICAgIGNoYW5nZS5zb3VyY2UgPSBzb3Vy
Y2U7CiAKICAgICBjaGlsZHJlbkNoYW5nZWQoY2hhbmdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCmluZGV4IDAzMWQzY2QyMWI2M2VjODA4MDM2
Njk4Nzg2MTIwZDI0ZWZhMmU1NjMuLjM3Yzk0Njc4NzU2OWFiYjgxZTZlYTljMzA1YzFhODc3YWZl
MTYwNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3Jp
dGhtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1z
LmNwcApAQCAtNTIsNyArNTIsNyBAQCB2b2lkIENoaWxkTm9kZUluc2VydGlvbk5vdGlmaWVyOjpu
b3RpZnlEZXNjZW5kYW50SW5zZXJ0ZWRJbnRvRG9jdW1lbnQoQ29udGFpbmVyTgogdm9pZCBDaGls
ZE5vZGVJbnNlcnRpb25Ob3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudEluc2VydGVkSW50b1RyZWUo
Q29udGFpbmVyTm9kZSYgbm9kZSkKIHsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gbm9kZS5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAg
IGlmIChpczxDb250YWluZXJOb2RlPihjaGlsZCkpCisgICAgICAgIGlmIChpczxDb250YWluZXJO
b2RlPigqY2hpbGQpKQogICAgICAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUoZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKmNoaWxkKSk7CiAgICAgfQogCkBAIC04Niw3ICs4Niw3IEBA
IHZvaWQgQ2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50UmVtb3ZlZEZy
b21Eb2N1bWVudChDb250YWluZXJOb2RlCiB2b2lkIENoaWxkTm9kZVJlbW92YWxOb3RpZmllcjo6
bm90aWZ5RGVzY2VuZGFudFJlbW92ZWRGcm9tVHJlZShDb250YWluZXJOb2RlJiBub2RlKQogewog
ICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KGNo
aWxkKSkKKyAgICAgICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KCpjaGlsZCkpCiAgICAgICAgICAg
ICBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpjaGls
ZCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1cnJlbnRTY3Jp
cHRJbmNyZW1lbnRlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1cnJlbnRTY3JpcHRJbmNyZW1l
bnRlci5oCmluZGV4IGJkN2RlMDcwZjRjYWM3N2Q3YjUxYjI5ZDBhNmZkMTEzNzdhY2M5OTUuLmEz
Y2Y4ZjQ3MGM5YzQzNTljYjczYjM4MzBlMTY1YTVmNTM5NDJkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DdXJyZW50U2NyaXB0SW5jcmVtZW50ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ3VycmVudFNjcmlwdEluY3JlbWVudGVyLmgKQEAgLTM5LDcgKzM5LDcgQEAgY2xh
c3MgQ3VycmVudFNjcmlwdEluY3JlbWVudGVyIHsKIHB1YmxpYzoKICAgICBDdXJyZW50U2NyaXB0
SW5jcmVtZW50ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBFbGVtZW50KiBlbGVtZW50KQogICAgICAg
ICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgICAgICwgbV9pc0hUTUxTY3JpcHRFbGVtZW50
KGlzPEhUTUxTY3JpcHRFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgLCBtX2lzSFRNTFNjcmlw
dEVsZW1lbnQoaXM8SFRNTFNjcmlwdEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICB7CiAgICAgICAg
IGlmIChtX2lzSFRNTFNjcmlwdEVsZW1lbnQpCiAgICAgICAgICAgICBtX2RvY3VtZW50LT5wdXNo
Q3VycmVudFNjcmlwdChkb3duY2FzdDxIVE1MU2NyaXB0RWxlbWVudD4oZWxlbWVudCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAppbmRleCBjNzgzOTU5M2NkMzJiNjhhMGFiZTY2OGYw
MTg3YTI4ZmIzZGQ3MjI4Li5mZTIxYWZmZmYzNTk5M2E5ZmU0OTE4NWIzMjU4MDM4MjI3NTkzOGMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcApAQCAtMjU0LDcgKzI1NCw3IEBAIHZv
aWQgRGF0YVRyYW5zZmVyOjpzZXREcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgaW50IHgsIGlu
dCB5KQogICAgICAgICByZXR1cm47CiAKICAgICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBudWxscHRy
OwotICAgIGlmIChlbGVtZW50ICYmIGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQpICYmICFl
bGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgaWYgKGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1l
bnQpICYmICFlbGVtZW50LT5pbkRvY3VtZW50KCkpCiAgICAgICAgIGltYWdlID0gZG93bmNhc3Q8
SFRNTEltYWdlRWxlbWVudD4oKmVsZW1lbnQpLmNhY2hlZEltYWdlKCk7CiAKICAgICBtX2RyYWdM
b2NhdGlvbiA9IEludFBvaW50KHgsIHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZWFj
YjA3YWU5MmIxMzY5Mjk4ODNkZGUxNWI5M2ExZWRmOTg0Njk3Yy4uZTM5ZmMzYTZiNWFiZDBiZDVh
Zjg1MzA5NTQxYjMxYzdmZjkyN2Q2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xNDE1
LDcgKzE0MTUsNyBAQCBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVudEZyb21Qb2ludChjb25zdCBM
YXlvdXRQb2ludCYgY2xpZW50UG9pbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
Tm9kZSogbm9kZSA9IG5vZGVGcm9tUG9pbnQoY2xpZW50UG9pbnQpOwotICAgIHdoaWxlIChub2Rl
ICYmICFpczxFbGVtZW50Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4o
Km5vZGUpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogCiAgICAgaWYgKG5v
ZGUpCkBAIC0xNTUyLDcgKzE1NTIsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRUaXRsZShjb25zdCBT
dHJpbmcmIHRpdGxlKQogICAgIC8vIFRoZSBET00gQVBJIGhhcyBubyBtZXRob2Qgb2Ygc3BlY2lm
eWluZyBkaXJlY3Rpb24sIHNvIGFzc3VtZSBMVFIuCiAgICAgdXBkYXRlVGl0bGUoU3RyaW5nV2l0
aERpcmVjdGlvbih0aXRsZSwgTFRSKSk7CiAKLSAgICBpZiAobV90aXRsZUVsZW1lbnQgJiYgaXM8
SFRNTFRpdGxlRWxlbWVudD4oKm1fdGl0bGVFbGVtZW50KSkKKyAgICBpZiAoaXM8SFRNTFRpdGxl
RWxlbWVudD4obV90aXRsZUVsZW1lbnQuZ2V0KCkpKQogICAgICAgICBkb3duY2FzdDxIVE1MVGl0
bGVFbGVtZW50PigqbV90aXRsZUVsZW1lbnQpLnNldFRleHQodGl0bGUpOwogfQogCkBAIC00NjYz
LDcgKzQ2NjMsNyBAQCBjb25zdCBWZWN0b3I8SWNvblVSTD4mIERvY3VtZW50OjppY29uVVJMcyhp
bnQgaWNvblR5cGVzTWFzaykKICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gY2hpbGRyZW4tPmxl
bmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZHJlbi0+aXRlbShpKTsKLSAgICAgICAgaWYgKCFp
czxIVE1MTGlua0VsZW1lbnQ+KGNoaWxkKSkKKyAgICAgICAgaWYgKCFpczxIVE1MTGlua0VsZW1l
bnQ+KCpjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgSFRNTExpbmtFbGVt
ZW50JiBsaW5rRWxlbWVudCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4oKmNoaWxkKTsKICAg
ICAgICAgaWYgKCEobGlua0VsZW1lbnQuaWNvblR5cGUoKSAmIGljb25UeXBlc01hc2spKQpAQCAt
NTkxOCw5ICs1OTE4LDkgQEAgRWxlbWVudCogZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQo
RG9jdW1lbnQqIGRvY3VtZW50KQogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQo
KTsKLSAgICBpZiAoIWVsZW1lbnQgJiYgaXM8UGx1Z2luRG9jdW1lbnQ+KGRvY3VtZW50KSkKKyAg
ICBpZiAoIWVsZW1lbnQgJiYgaXM8UGx1Z2luRG9jdW1lbnQ+KCpkb2N1bWVudCkpCiAgICAgICAg
IGVsZW1lbnQgPSBkb3duY2FzdDxQbHVnaW5Eb2N1bWVudD4oKmRvY3VtZW50KS5wbHVnaW5FbGVt
ZW50KCk7Ci0gICAgaWYgKCFlbGVtZW50ICYmIGlzPEhUTUxEb2N1bWVudD4oZG9jdW1lbnQpKQor
ICAgIGlmICghZWxlbWVudCAmJiBpczxIVE1MRG9jdW1lbnQ+KCpkb2N1bWVudCkpCiAgICAgICAg
IGVsZW1lbnQgPSBkb2N1bWVudC0+Ym9keSgpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAg
ZWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKQEAgLTYwODQsNyArNjA4NCw3
IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEVsZW1lbnQqIGluCiAgICAgICAgICAgICAgICAgZWxlbWVudHNUb1Jl
bW92ZUZyb21DaGFpbi5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gVW5z
ZXQgaG92ZXJlZCBub2RlcyBpbiBzdWIgZnJhbWUgZG9jdW1lbnRzIGlmIHRoZSBvbGQgaG92ZXJl
ZCBub2RlIHdhcyBhIGZyYW1lIG93bmVyLgotICAgICAgICBpZiAob2xkSG92ZXJlZEVsZW1lbnQg
JiYgaXM8SFRNTEZyYW1lT3duZXJFbGVtZW50Pigqb2xkSG92ZXJlZEVsZW1lbnQpKSB7CisgICAg
ICAgIGlmIChpczxIVE1MRnJhbWVPd25lckVsZW1lbnQ+KG9sZEhvdmVyZWRFbGVtZW50LmdldCgp
KSkgewogICAgICAgICAgICAgaWYgKERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSBkb3duY2Fz
dDxIVE1MRnJhbWVPd25lckVsZW1lbnQ+KCpvbGRIb3ZlcmVkRWxlbWVudCkuY29udGVudERvY3Vt
ZW50KCkpCiAgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LT51cGRhdGVIb3ZlckFjdGl2
ZVN0YXRlKHJlcXVlc3QsIG51bGxwdHIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKaW5kZXggY2RhNmMwN2Ni
YTRjNDBlM2RhNDYwMTI0MzA3NmIwZjc2NGYyZTQ1Yi4uN2E2ZGZiOTQ0ZjFmMDY5MjQzN2RiZjNh
YmUxYWI0OTA3ZTA2MDk3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcApAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxS
ZWZQdHI8U3R5bGVTCiAKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3N0eWxlU2hlZXRDYW5kaWRh
dGVOb2RlcykgewogICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IG51bGxwdHI7Ci0gICAgICAg
IGlmIChpczxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KG5vZGUpKSB7CisgICAgICAgIGlmIChpczxQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KCpub2RlKSkgewogICAgICAgICAgICAgLy8gUHJvY2Vzc2lu
ZyBpbnN0cnVjdGlvbiAoWE1MIGRvY3VtZW50cyBvbmx5KS4KICAgICAgICAgICAgIC8vIFdlIGRv
bid0IHN1cHBvcnQgbGlua2luZyB0byBlbWJlZGRlZCBDU1Mgc3R5bGVzaGVldHMsIHNlZSA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MjgxPiBmb3IgZGlzY3Vzc2lv
bi4KICAgICAgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYgcGkgPSBkb3duY2FzdDxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24+KCpub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBlOWNi
ZTA3ODIwYjM1NGZhZjk0ZjQyNzA0NzExZWE1MGQ0NTAwYWRiLi5jNmUxZmZmYjE4ZjEzMzViNzVi
NDAxM2RmMDM3MTk3NzMwZTQzNzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yMTk1LDEy
ICsyMTk1LDEyIEBAIEF0b21pY1N0cmluZyBFbGVtZW50Ojpjb21wdXRlSW5oZXJpdGVkTGFuZ3Vh
Z2UoKSBjb25zdAogICAgIC8vIFRoZSBsYW5ndWFnZSBwcm9wZXJ0eSBpcyBpbmhlcml0ZWQsIHNv
IHdlIGl0ZXJhdGUgb3ZlciB0aGUgcGFyZW50cyB0byBmaW5kIHRoZSBmaXJzdCBsYW5ndWFnZS4K
ICAgICBjb25zdCBOb2RlKiBjdXJyZW50Tm9kZSA9IHRoaXM7CiAgICAgd2hpbGUgKChjdXJyZW50
Tm9kZSA9IGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkpKSB7Ci0gICAgICAgIGlmIChpczxFbGVt
ZW50PihjdXJyZW50Tm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjdXJyZW50Tm9k
ZSkpIHsKICAgICAgICAgICAgIGlmIChjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBk
b3duY2FzdDxFbGVtZW50PigqY3VycmVudE5vZGUpLmVsZW1lbnREYXRhKCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBlbGVtZW50RGF0YS0+Zmlu
ZExhbmd1YWdlQXR0cmlidXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1
dGUtPnZhbHVlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1l
bnQ+KGN1cnJlbnROb2RlKSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzPERvY3VtZW50PigqY3Vy
cmVudE5vZGUpKSB7CiAgICAgICAgICAgICAvLyBjaGVja2luZyB0aGUgTUlNRSBjb250ZW50LWxh
bmd1YWdlCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjdXJyZW50Tm9k
ZSkuY29udGVudExhbmd1YWdlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDAw
ZjJiY2IyNjZhZmQyM2Q0MTc5ZTExZTg4M2Q1ZjkxZTg3MDcwYjAuLjkxNjIzOTQ2NDQ4ODFkODJi
OGFmZjE1Yzg1MjQ0YTEzYTlmN2EwMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtNjc5LDcgKzY3
OSw3IEBAIGlubGluZSBOYW1lZE5vZGVNYXAqIE5vZGU6OmF0dHJpYnV0ZXMoKSBjb25zdAogaW5s
aW5lIEVsZW1lbnQqIE5vZGU6OnBhcmVudEVsZW1lbnQoKSBjb25zdAogewogICAgIENvbnRhaW5l
ck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKLSAgICByZXR1cm4gcGFyZW50ICYmIGlzPEVs
ZW1lbnQ+KHBhcmVudCkgPyBkb3duY2FzdDxFbGVtZW50PihwYXJlbnQpIDogbnVsbHB0cjsKKyAg
ICByZXR1cm4gaXM8RWxlbWVudD4ocGFyZW50KSA/IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudCkg
OiBudWxscHRyOwogfQogCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpmYXN0SGFzQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudFRyYXZlcnNhbC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRUcmF2
ZXJzYWwuaAppbmRleCAwMmZmZDMzNDZiN2I5ODc5NDgwZDRjYzdiMjkyOTM4NmNmZjUwNGM5Li5j
NWM5OTk0ZTdhMTM0NTQzODRlMjk0ZDA3ZTBkY2U1ZWIzOWI4YjBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudFRyYXZlcnNhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50VHJhdmVyc2FsLmgKQEAgLTk1LDcgKzk1LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IEN1cnJlbnRUeXBlPgogaW5saW5lIEVsZW1lbnQqIFRyYXZlcnNhbDxFbGVtZW50Pjo6bmV4dFRl
bXBsYXRlKEN1cnJlbnRUeXBlKiBjdXJyZW50KQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KGN1cnJlbnQpOwotICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pihu
b2RlKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSk7CiAgICAgcmV0
dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQpAQCAtMTA1LDcgKzEwNSw3IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBDdXJyZW50VHlwZT4KIGlubGluZSBFbGVtZW50KiBUcmF2ZXJzYWw8RWxl
bWVudD46Om5leHRUZW1wbGF0ZShDdXJyZW50VHlwZSogY3VycmVudCwgY29uc3QgTm9kZSogc3Rh
eVdpdGhpbikKIHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50
LCBzdGF5V2l0aGluKTsKLSAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4obm9kZSkpCisg
ICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUsIHN0YXlXaXRoaW4pOwogICAg
IHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0KQEAgLTI1OCw3ICsyNTgsNyBAQCBp
bmxpbmUgRWxlbWVudFR5cGUqIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5leHQoY29uc3QgTm9k
ZSogY3VycmVudCwgY29uc3QgTm9kZQogaW5saW5lIEVsZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6
OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUq
IHN0YXlXaXRoaW4pCiB7CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3Vz
SW5jbHVkaW5nUHNldWRvKGN1cnJlbnQsIHN0YXlXaXRoaW4pOwotICAgIHdoaWxlIChub2RlICYm
ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4oKm5v
ZGUpKQogICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1
ZG8obm9kZSwgc3RheVdpdGhpbik7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUp
OwogfQpAQCAtMjY2LDcgKzI2Niw3IEBAIGlubGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2Fs
OjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiBjdXJyZW50LCBjCiBpbmxpbmUg
RWxlbWVudCogRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2Rl
KiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQogewogICAgIE5vZGUqIG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKGN1cnJlbnQsIHN0YXlXaXRoaW4pOwot
ICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAm
JiAhaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dEluY2x1ZGluZ1BzZXVkbyhub2RlLCBzdGF5V2l0aGluKTsKICAgICByZXR1cm4gZG93bmNhc3Q8
RWxlbWVudD4obm9kZSk7CiB9CkBAIC0yNzQsNyArMjc0LDcgQEAgaW5saW5lIEVsZW1lbnQqIEVs
ZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSogY3VycmVudCwg
Y29uc3QKIGlubGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNl
dWRvU2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5
V2l0aGluKQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5n
UHNldWRvU2tpcHBpbmdDaGlsZHJlbihjdXJyZW50LCBzdGF5V2l0aGluKTsKLSAgICB3aGlsZSAo
bm9kZSAmJiAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1l
bnQ+KCpub2RlKSkKICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQ
c2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKG5vZGUsIHN0YXlXaXRoaW4pOwogICAgIHJldHVybiBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKIH0KQEAgLTI4Miw3ICsyODIsNyBAQCBpbmxpbmUgRWxlbWVu
dCogRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4o
Y29uc3QgTm9kZQogaW5saW5lIEVsZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6OnBzZXVkb0F3YXJl
UHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqIGN1cnJlbnQpCiB7CiAgICAgTm9kZSogbm9kZSA9
IGN1cnJlbnQtPnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgd2hpbGUgKG5vZGUg
JiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pigq
bm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZygp
OwogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggZjc3OThkMzBhNDA3MjlmMDJjZTFmYWRiY2Q4NmIw
NzE0MTA4YzFhMi4uZDhlZTE5ZjdmNGY5ZWQ0YjM1ZjJhYjljOGQ5MTdmNmMzNTM2YTU5MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgcHJp
dmF0ZToKIFdpbmRvd0V2ZW50Q29udGV4dDo6V2luZG93RXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8
Tm9kZT4gbm9kZSwgY29uc3QgRXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQpCiB7CiAgICAg
Tm9kZSogdG9wTGV2ZWxDb250YWluZXIgPSB0b3BFdmVudENvbnRleHQgPyB0b3BFdmVudENvbnRl
eHQtPm5vZGUoKSA6IG5vZGUuZ2V0KCk7Ci0gICAgaWYgKCFpczxEb2N1bWVudD4odG9wTGV2ZWxD
b250YWluZXIpKQorICAgIGlmICghaXM8RG9jdW1lbnQ+KCp0b3BMZXZlbENvbnRhaW5lcikpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fd2luZG93ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCp0b3BM
ZXZlbENvbnRhaW5lcikuZG9tV2luZG93KCk7CkBAIC0zNTYsNyArMzU2LDcgQEAgYm9vbCBFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogb3JpZ2luLCBQYXNzUmVmUHRyPEV2ZW50
PiBwcnBFdmVudCkKICAgICBXaW5kb3dFdmVudENvbnRleHQgd2luZG93RXZlbnRDb250ZXh0KG5v
ZGUuZ2V0KCksIGV2ZW50UGF0aC5sYXN0Q29udGV4dElmRXhpc3RzKCkpOwogCiAgICAgSW5wdXRF
bGVtZW50Q2xpY2tTdGF0ZSBjbGlja0hhbmRsaW5nU3RhdGU7Ci0gICAgaWYgKGlzPEhUTUxJbnB1
dEVsZW1lbnQ+KG5vZGUuZ2V0KCkpKQorICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9k
ZSkpCiAgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKS53aWxsRGlzcGF0
Y2hFdmVudCgqZXZlbnQsIGNsaWNrSGFuZGxpbmdTdGF0ZSk7CiAKICAgICBpZiAoIWV2ZW50LT5w
cm9wYWdhdGlvblN0b3BwZWQoKSAmJiAhZXZlbnRQYXRoLmlzRW1wdHkoKSkKQEAgLTQxOCw3ICs0
MTgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5
KEV2ZW50JiBldmVudCwgU2hhZG93Um9vdCYgc2hhZAogCiBzdGF0aWMgTm9kZSogbm9kZU9ySG9z
dElmUHNldWRvRWxlbWVudChOb2RlKiBub2RlKQogewotICAgIHJldHVybiBpczxQc2V1ZG9FbGVt
ZW50Pihub2RlKSA/IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpub2RlKS5ob3N0RWxlbWVudCgp
IDogbm9kZTsKKyAgICByZXR1cm4gaXM8UHNldWRvRWxlbWVudD4oKm5vZGUpID8gZG93bmNhc3Q8
UHNldWRvRWxlbWVudD4oKm5vZGUpLmhvc3RFbGVtZW50KCkgOiBub2RlOwogfQogCiBFdmVudFBh
dGg6OkV2ZW50UGF0aChOb2RlJiB0YXJnZXROb2RlLCBFdmVudCYgZXZlbnQpCkBAIC00NDcsNyAr
NDQ3LDcgQEAgRXZlbnRQYXRoOjpFdmVudFBhdGgoTm9kZSYgdGFyZ2V0Tm9kZSwgRXZlbnQmIGV2
ZW50KQogICAgICAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxFdmVu
dENvbnRleHQ+KG5vZGUsICZjdXJyZW50VGFyZ2V0LCB0YXJnZXQpKTsKICAgICAgICAgICAgIGlm
ICghaW5Eb2N1bWVudCkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAo
aXM8U2hhZG93Um9vdD4obm9kZSkpCisgICAgICAgICAgICBpZiAoaXM8U2hhZG93Um9vdD4oKm5v
ZGUpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmICghbm9k
ZSB8fCAhc2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KGV2ZW50LCBkb3duY2FzdDxTaGFk
b3dSb290Pigqbm9kZSksICp0YXJnZXQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5k
ZXggNDgzN2Q4NjFkZmNmYTZhMTk0NmI1NzdiZmQ2NDM1ZTAxNzc0ZGU4OC4uOTg5ZjUwMjYxZjYx
NTFmOWM2MzE2ZTBmOTY4YTRmODdjMDk0YWUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
Y3BwCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVu
ZXJzKEV2ZW50KiBldmVudCwgRXZlbnRUYXJnZXREYXRhKiBkLCBFdmVudExpc3QKICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG51bGxwdHI7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50Q29va2llOwotICAgIGlmIChjb250ZXh0ICYm
IGlzPERvY3VtZW50Pihjb250ZXh0KSkgeworICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkp
IHsKICAgICAgICAgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCk7CiAgICAg
ICAgIHdpbGxEaXNwYXRjaEV2ZW50Q29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsRGlzcGF0Y2hFdmVudChkb2N1bWVudCwgKmV2ZW50LCBzaXplID4gMCk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCmluZGV4IGI0MDMxNDBhOTgwZmEzODNjNjVkNWUz
MDQyOGE5NTQ1NmE0MWRlYjAuLjY0Y2ViYTJmMTA5MTI3OWY1ODFjODk4YzkzYTUwMzRhZmQxYTJk
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKQEAgLTIyMCw3ICsyMjAsNyBA
QCBpbnQgS2V5Ym9hcmRFdmVudDo6d2hpY2goKSBjb25zdAogS2V5Ym9hcmRFdmVudCogZmluZEtl
eWJvYXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogewogICAgIGZvciAoRXZlbnQqIGUgPSBldmVudDsg
ZTsgZSA9IGUtPnVuZGVybHlpbmdFdmVudCgpKQotICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVu
dD4oZSkpCisgICAgICAgIGlmIChpczxLZXlib2FyZEV2ZW50PigqZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oZSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuY3BwCmluZGV4IGVlMjBlMTFkZGE0NGE0M2EyNjZj
OTRlNzYyYTg1YjY2MWMxOGQwNmMuLjRiYmFmZGZhYzBjMzM0N2NiYTIyNjgzZDI2NWYxYjk0Njg3
OWZkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuY3BwCkBAIC02OCw3ICs2OCw3IEBA
IE5vZGUqIExpdmVOb2RlTGlzdDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVu
dElkKSBjb25zdAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICBOb2RlKiBub2Rl
ID0gaXRlbShpKTsKLSAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYg
KCFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRWxl
bWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGdldElkQXR0cmlidXRlIGluc3RlYWQg
b2YgaWRGb3JTdHlsZVJlc29sdXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TWVzc2FnZVBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRl
eCA1OGJlYjdmOWFhNDZkNjc2OTYyOWI2NGNiZGVjZjQ0OWVhNDE4NDFlLi5mODhhZTc3ODVkMTdi
NWZiNjk5YjgyZDEwYTFlMDk3MjIwNzliZjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTWVzc2FnZVBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5j
cHAKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2Vz
KCkKICAgICB3aGlsZSAobV9lbnRhbmdsZWRDaGFubmVsICYmIG1fZW50YW5nbGVkQ2hhbm5lbC0+
dHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUobWVzc2FnZSwgY2hhbm5lbHMpKSB7CiAKICAgICAgICAg
Ly8gY2xvc2UoKSBpbiBXb3JrZXIgb25tZXNzYWdlIGhhbmRsZXIgc2hvdWxkIHByZXZlbnQgbmV4
dCBtZXNzYWdlIGZyb20gZGlzcGF0Y2hpbmcuCi0gICAgICAgIGlmIChpczxXb3JrZXJHbG9iYWxT
Y29wZT4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KSAmJiBkb3duY2FzdDxXb3JrZXJHbG9iYWxT
Y29wZT4oKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkuaXNDbG9zaW5nKCkpCisgICAgICAgIGlm
IChpczxXb3JrZXJHbG9iYWxTY29wZT4oKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgJiYgZG93
bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLmlzQ2xv
c2luZygpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxN
ZXNzYWdlUG9ydEFycmF5PiBwb3J0cyA9IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCptX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIFdURjo6bW92ZShjaGFubmVscykpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlRXZlbnQuY3BwCmluZGV4IDU4ZDNkNjBjZDE1MzM5MmQ2YTU2MmJkN2NkZTVlMTRlYzVmNTlj
NmIuLmRmOTQzODhjNGRjNTg0MTMxMjJiYzk4MjQ1ODk3NmE2NGQyZjE0ZTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTW91c2VFdmVudC5jcHAKQEAgLTI3Niw3ICsyNzYsNyBAQCBTaW11bGF0ZWRNb3VzZUV2ZW50
OjpTaW11bGF0ZWRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUAogICAgIH0KICAgICBzZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50KTsKIAot
ICAgIGlmICh0aGlzLT51bmRlcmx5aW5nRXZlbnQoKSAmJiBpczxNb3VzZUV2ZW50Pih0aGlzLT51
bmRlcmx5aW5nRXZlbnQoKSkpIHsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4odGhpcy0+dW5kZXJs
eWluZ0V2ZW50KCkpKSB7CiAgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2Fz
dDxNb3VzZUV2ZW50PigqdGhpcy0+dW5kZXJseWluZ0V2ZW50KCkpOwogICAgICAgICBtX3NjcmVl
bkxvY2F0aW9uID0gbW91c2VFdmVudC5zY3JlZW5Mb2NhdGlvbigpOwogICAgICAgICBpbml0Q29v
cmRpbmF0ZXMobW91c2VFdmVudC5jbGllbnRMb2NhdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVk
Tm9kZU1hcC5jcHAKaW5kZXggYWFlYTBiYTYyMWFmM2ZmMmMzOGMyNDNlNzY4ZTU5NTc0NzU2MzFm
My4uNzE0YmExN2M2YWFiMjc5OWRlNzMzY2NhYmI2OGFkNDY0MDIzNTMwNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05hbWVkTm9kZU1hcC5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBO
YW1lZE5vZGVNYXA6OnNldE5hbWVkSXRlbShOb2RlKiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICB9CiAKICAgICAvLyBOb3QgbWVudGlvbmVkIGluIHNwZWM6IHRocm93IGEgSElFUkFSQ0hZ
X1JFUVVFU1RfRVJST1IgaWYgdGhlIHVzZXIgcGFzc2VzIGluIGEgbm9uLWF0dHJpYnV0ZSBub2Rl
Ci0gICAgaWYgKCFpczxBdHRyPihub2RlKSkgeworICAgIGlmICghaXM8QXR0cj4oKm5vZGUpKSB7
CiAgICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNTZjNzZjMDgzOTgxYjNhYjJjZjBhOGEy
MmNhM2I2MjBiOTJhZTdhZC4uYWY0NzE2NDVmNTBjNzM1MjNkZGJkYzZiNzk4NTU3MThiZWFiMDgw
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0
YXRpc3RpY3MoKQogCiAgICAgICAgIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpKSB7CiAgICAgICAg
ICAgICArK25vZGVzV2l0aFJhcmVEYXRhOwotICAgICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5v
ZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgICAg
ICAgICAgKytlbGVtZW50c1dpdGhSYXJlRGF0YTsKICAgICAgICAgICAgICAgICBpZiAoZG93bmNh
c3Q8RWxlbWVudD4oKm5vZGUpLmhhc05hbWVkTm9kZU1hcCgpKQogICAgICAgICAgICAgICAgICAg
ICArK2VsZW1lbnRzV2l0aE5hbWVkTm9kZU1hcDsKQEAgLTg3Miw3ICs4NzIsNyBAQCBib29sIE5v
ZGU6OmNvbnRhaW5zSW5jbHVkaW5nSG9zdEVsZW1lbnRzKGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0
CiAKIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKCkgY29uc3QKIHsKLSAg
ICBFbGVtZW50KiBwYXJlbnRPckhvc3QgPSBpczxQc2V1ZG9FbGVtZW50Pih0aGlzKSA/IGRvd25j
YXN0PFBzZXVkb0VsZW1lbnQ+KCp0aGlzKS5ob3N0RWxlbWVudCgpIDogcGFyZW50RWxlbWVudCgp
OworICAgIEVsZW1lbnQqIHBhcmVudE9ySG9zdCA9IGlzPFBzZXVkb0VsZW1lbnQ+KCp0aGlzKSA/
IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCp0aGlzKS5ob3N0RWxlbWVudCgpIDogcGFyZW50RWxl
bWVudCgpOwogICAgIGlmIChwYXJlbnRPckhvc3QgJiYgIXByZXZpb3VzU2libGluZygpKSB7CiAg
ICAgICAgIGlmIChpc0FmdGVyUHNldWRvRWxlbWVudCgpICYmIHBhcmVudE9ySG9zdC0+bGFzdENo
aWxkKCkpCiAgICAgICAgICAgICByZXR1cm4gcGFyZW50T3JIb3N0LT5sYXN0Q2hpbGQoKTsKQEAg
LTg4NCw3ICs4ODQsNyBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZygp
IGNvbnN0CiAKIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcoKSBjb25zdAogewot
ICAgIEVsZW1lbnQqIHBhcmVudE9ySG9zdCA9IGlzPFBzZXVkb0VsZW1lbnQ+KHRoaXMpID8gZG93
bmNhc3Q8UHNldWRvRWxlbWVudD4oKnRoaXMpLmhvc3RFbGVtZW50KCkgOiBwYXJlbnRFbGVtZW50
KCk7CisgICAgRWxlbWVudCogcGFyZW50T3JIb3N0ID0gaXM8UHNldWRvRWxlbWVudD4oKnRoaXMp
ID8gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4oKnRoaXMpLmhvc3RFbGVtZW50KCkgOiBwYXJlbnRF
bGVtZW50KCk7CiAgICAgaWYgKHBhcmVudE9ySG9zdCAmJiAhbmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICBpZiAoaXNCZWZvcmVQc2V1ZG9FbGVtZW50KCkgJiYgcGFyZW50T3JIb3N0LT5maXJzdENo
aWxkKCkpCiAgICAgICAgICAgICByZXR1cm4gcGFyZW50T3JIb3N0LT5maXJzdENoaWxkKCk7CkBA
IC05MjcsNyArOTI3LDcgQEAgTm9kZSogTm9kZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQoKSBjb25z
dAogUmVuZGVyU3R5bGUqIE5vZGU6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVu
dFNwZWNpZmllcikKIHsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0g
bm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50
Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuY29tcHV0ZWRTdHlsZShwc2V1ZG9FbGVtZW50
U3BlY2lmaWVyKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDA0LDEwICsxMDA0
LDEwIEBAIEVsZW1lbnQqIE5vZGU6OnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSBjb25zdAog
ICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChpczxT
aGFkb3dSb290PihwYXJlbnQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8U2hhZG93Um9vdD4o
cGFyZW50KS0+aG9zdEVsZW1lbnQoKTsKKyAgICBpZiAoaXM8U2hhZG93Um9vdD4oKnBhcmVudCkp
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxTaGFkb3dSb290PigqcGFyZW50KS5ob3N0RWxlbWVu
dCgpOwogCi0gICAgaWYgKCFpczxFbGVtZW50PihwYXJlbnQpKQorICAgIGlmICghaXM8RWxlbWVu
dD4oKnBhcmVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIGRvd25j
YXN0PEVsZW1lbnQ+KHBhcmVudCk7CkBAIC0xMDU3LDkgKzEwNTcsOSBAQCBFbGVtZW50KiBOb2Rl
Ojpyb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QKIHsKICAgICBFbGVtZW50KiByZXN1bHQgPSBu
dWxscHRyOwogICAgIGZvciAoTm9kZSogbm9kZSA9IGNvbnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpOyBu
b2RlICYmIG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KSkgewotICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmIChpczxFbGVt
ZW50Pigqbm9kZSkpCiAgICAgICAgICAgICByZXN1bHQgPSBkb3duY2FzdDxFbGVtZW50Pihub2Rl
KTsKLSAgICAgICAgaWYgKGlzPEhUTUxCb2R5RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmIChp
czxIVE1MQm9keUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMTM4NCw3ICsxMzg0LDcgQEAgRWxlbWVudCogTm9kZTo6YW5j
ZXN0b3JFbGVtZW50KCkgY29uc3QKIHsKICAgICAvLyBJbiB0aGVvcnksIHRoZXJlIGNhbiBiZSBF
bnRpdHlSZWZlcmVuY2Ugbm9kZXMgYmV0d2VlbiBlbGVtZW50cywgYnV0IHRoaXMgaXMgY3VycmVu
dGx5IG5vdCBzdXBwb3J0ZWQuCiAgICAgZm9yIChDb250YWluZXJOb2RlKiBhbmNlc3RvciA9IHBh
cmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkg
ewotICAgICAgICBpZiAoaXM8RWxlbWVudD4oYW5jZXN0b3IpKQorICAgICAgICBpZiAoaXM8RWxl
bWVudD4oKmFuY2VzdG9yKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihh
bmNlc3Rvcik7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwpAQCAtMTQwNCw4ICsxNDA0LDgg
QEAgdW5zaWduZWQgc2hvcnQgTm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24oTm9kZSogb3Ro
ZXJOb2RlKQogICAgIGlmIChvdGhlck5vZGUgPT0gdGhpcykKICAgICAgICAgcmV0dXJuIERPQ1VN
RU5UX1BPU0lUSU9OX0VRVUlWQUxFTlQ7CiAgICAgCi0gICAgQXR0ciogYXR0cjEgPSBpczxBdHRy
Pih0aGlzKSA/IGRvd25jYXN0PEF0dHI+KHRoaXMpIDogbnVsbHB0cjsKLSAgICBBdHRyKiBhdHRy
MiA9IGlzPEF0dHI+KG90aGVyTm9kZSkgPyBkb3duY2FzdDxBdHRyPihvdGhlck5vZGUpIDogbnVs
bHB0cjsKKyAgICBBdHRyKiBhdHRyMSA9IGlzPEF0dHI+KCp0aGlzKSA/IGRvd25jYXN0PEF0dHI+
KHRoaXMpIDogbnVsbHB0cjsKKyAgICBBdHRyKiBhdHRyMiA9IGlzPEF0dHI+KCpvdGhlck5vZGUp
ID8gZG93bmNhc3Q8QXR0cj4ob3RoZXJOb2RlKSA6IG51bGxwdHI7CiAgICAgCiAgICAgTm9kZSog
c3RhcnQxID0gYXR0cjEgPyBhdHRyMS0+b3duZXJFbGVtZW50KCkgOiB0aGlzOwogICAgIE5vZGUq
IHN0YXJ0MiA9IGF0dHIyID8gYXR0cjItPm93bmVyRWxlbWVudCgpIDogb3RoZXJOb2RlOwpAQCAt
MTUyOSw3ICsxNTI5LDcgQEAgRmxvYXRQb2ludCBOb2RlOjpjb252ZXJ0RnJvbVBhZ2UoY29uc3Qg
RmxvYXRQb2ludCYgcCkgY29uc3QKIAogc3RhdGljIHZvaWQgYXBwZW5kQXR0cmlidXRlRGVzYyhj
b25zdCBOb2RlKiBub2RlLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBjaGFyKiBhdHRyRGVzYykKIHsKLSAgICBpZiAoIWlzPEVs
ZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1
cm47CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHIgPSBkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSkuZ2V0QXR0cmlidXRlKG5hbWUpOwpAQCAtMTU3Miw3ICsxNTcyLDcgQEAgdm9pZCBOb2Rl
OjpzaG93Tm9kZVBhdGhGb3JUaGlzKCkgY29uc3QKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IGNoYWluLnNpemUoKTsgaW5kZXggPiAwOyAtLWluZGV4KSB7CiAgICAgICAgIGNvbnN0
IE5vZGUqIG5vZGUgPSBjaGFpbltpbmRleCAtIDFdOwotICAgICAgICBpZiAoaXM8U2hhZG93Um9v
dD4obm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KCpub2RlKSkgewogICAgICAg
ICAgICAgaW50IGNvdW50ID0gMDsKICAgICAgICAgICAgIGZvciAoY29uc3QgU2hhZG93Um9vdCog
c2hhZG93Um9vdCA9IGRvd25jYXN0PFNoYWRvd1Jvb3Q+KG5vZGUpOyBzaGFkb3dSb290ICYmIHNo
YWRvd1Jvb3QgIT0gbm9kZTsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPnNoYWRvd1Jvb3QoKSkK
ICAgICAgICAgICAgICAgICArK2NvdW50OwpAQCAtMTcyMyw3ICsxNzIzLDcgQEAgRWxlbWVudCog
Tm9kZTo6ZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCkKICAgICAgICAgLy8gRm9yIGlt
YWdlbWFwcywgdGhlIGVuY2xvc2luZyBsaW5rIGVsZW1lbnQgaXMgdGhlIGFzc29jaWF0ZWQgYXJl
YSBlbGVtZW50IG5vdCB0aGUgaW1hZ2UgaXRzZWxmLgogICAgICAgICAvLyBTbyB3ZSBkb24ndCBs
ZXQgaW1hZ2VzIGJlIHRoZSBlbmNsb3NpbmcgbGluayBlbGVtZW50LCBldmVuIHRob3VnaCBpc0xp
bmsgc29tZXRpbWVzIHJldHVybnMKICAgICAgICAgLy8gdHJ1ZSBmb3IgdGhlbS4KLSAgICAgICAg
aWYgKG5vZGUtPmlzTGluaygpICYmICFpczxIVE1MSW1hZ2VFbGVtZW50Pihub2RlKSkKKyAgICAg
ICAgaWYgKG5vZGUtPmlzTGluaygpICYmICFpczxIVE1MSW1hZ2VFbGVtZW50Pigqbm9kZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgfQogCkBAIC0y
MDMyLDcgKzIwMzIsNyBAQCB2b2lkIE5vZGU6OmRpc3BhdGNoU2NvcGVkRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4gZXZlbnQpCiBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIVBMQVRGT1JNKElPUykK
LSAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQuZ2V0KCkpKQorICAgIGlmIChpczxUb3VjaEV2
ZW50PigqZXZlbnQpKQogICAgICAgICByZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFkb3B0UmVm
KGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50LmxlYWtSZWYoKSkpKTsKICNlbmRpZgogICAgIHJl
dHVybiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQodGhpcywgZXZlbnQpOwpAQCAtMjEw
MCwxMiArMjEwMCwxMiBAQCB2b2lkIE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogICAgICAgICByZXR1cm47CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUg
PSBldmVudC0+dHlwZSgpOwogICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleWRv
d25FdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKLSAg
ICAgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkgeworICAgICAgICBpZiAoaXM8S2V5
Ym9hcmRFdmVudD4oKmV2ZW50KSkgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCku
ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KGV2ZW50
KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
Y2xpY2tFdmVudCkgewotICAgICAgICBpbnQgZGV0YWlsID0gaXM8VUlFdmVudD4oZXZlbnQpID8g
ZG93bmNhc3Q8VUlFdmVudD4oKmV2ZW50KS5kZXRhaWwoKSA6IDA7CisgICAgICAgIGludCBkZXRh
aWwgPSBpczxVSUV2ZW50PigqZXZlbnQpID8gZG93bmNhc3Q8VUlFdmVudD4oKmV2ZW50KS5kZXRh
aWwoKSA6IDA7CiAgICAgICAgIGlmIChkaXNwYXRjaERPTUFjdGl2YXRlRXZlbnQoZGV0YWlsLCBl
dmVudCkpCiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICNpZiBFTkFC
TEUoQ09OVEVYVF9NRU5VUykKQEAgLTIxMTUsMTIgKzIxMTUsMTIgQEAgdm9pZCBOb2RlOjpkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgICAgICBwYWdlLT5jb250
ZXh0TWVudUNvbnRyb2xsZXIoKS5oYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKICNlbmRp
ZgogICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVu
dCkgewotICAgICAgICBpZiAoaXM8VGV4dEV2ZW50PihldmVudCkpIHsKKyAgICAgICAgaWYgKGlz
PFRleHRFdmVudD4oKmV2ZW50KSkgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCku
ZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcihkb3duY2FzdDxUZXh0RXZlbnQ+KGV2ZW50KSk7
CiAgICAgICAgIH0KICNpZiBFTkFCTEUoUEFOX1NDUk9MTElORykKLSAgICB9IGVsc2UgaWYgKGV2
ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4o
ZXZlbnQpKSB7CisgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KCpldmVudCkpIHsKICAgICAgICAgaWYgKGRvd25j
YXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTWlkZGxlQnV0dG9uKSB7CiAgICAg
ICAgICAgICBpZiAoZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMjEzNSw3ICsyMTM1LDcgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlm
Ci0gICAgfSBlbHNlIGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8
IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBpczxXaGVlbEV2
ZW50PihldmVudCkpIHsKKyAgICB9IGVsc2UgaWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LndoZWVsRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQp
ICYmIGlzPFdoZWVsRXZlbnQ+KCpldmVudCkpIHsKIAogICAgICAgICAvLyBJZiB3ZSBkb24ndCBo
YXZlIGEgcmVuZGVyZXIsIHNlbmQgdGhlIHdoZWVsIGV2ZW50IHRvIHRoZSBmaXJzdCBub2RlIHdl
IGZpbmQgd2l0aCBhIHJlbmRlcmVyLgogICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgPG9w
dGlvbj4gYW5kIDxvcHRncm91cD4gZWxlbWVudHMgc28gdGhhdCA8c2VsZWN0PnMgZ2V0IGEgd2hl
ZWwgc2Nyb2xsLgpAQCAtMjE0Nyw3ICsyMTQ3LDcgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRl
ZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihzdGFydE5vZGUsIGRvd25jYXN0PFdoZWVsRXZlbnQ+KGV2
ZW50KSk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgUExBVEZPUk0oSU9TKQotICAgIH0g
ZWxzZSBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpICYmIGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZl
bnRUeXBlKGV2ZW50VHlwZSkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPFRvdWNoRXZlbnQ+KCpldmVu
dCkgJiYgZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkgewogICAgICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICAgICAgd2hp
bGUgKHJlbmRlcmVyICYmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXRvUmVuZGVyQm94KHJlbmRl
cmVyKS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpKQogICAgICAgICAgICAg
cmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHAKaW5kZXggODJlYzdkYjYyZWFjOTQ0MjJjNWE5OTc4NjA5
MjM2NGNlMmQ4NDliNS4uZDUwN2JjMTI1NzBiYjRjODk5ODI0MjJmNzIzMzI2ZjhiMzQ0NzAwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdUcmF2ZXJzYWwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2FsLmNwcApAQCAt
NTIsNyArNTIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbm9kZUNhbkJlRGlzdHJpYnV0ZWQoY29u
c3QgTm9kZSogbm9kZSkKICAgICBpZiAocGFyZW50LT5pc1NoYWRvd1Jvb3QoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzPEVsZW1lbnQ+KHBhcmVudCkgJiYgZG93bmNhc3Q8
RWxlbWVudD4oKnBhcmVudCkuc2hhZG93Um9vdCgpKQorICAgIGlmIChpczxFbGVtZW50PigqcGFy
ZW50KSAmJiBkb3duY2FzdDxFbGVtZW50PigqcGFyZW50KS5zaGFkb3dSb290KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTEzMiwxMCArMTMyLDEw
IEBAIHN0YXRpYyBDb250YWluZXJOb2RlKiB0cmF2ZXJzZVBhcmVudChjb25zdCBOb2RlKiBub2Rl
LCBTaGFkb3dSb290Q3Jvc3Npbmcgc2hhZG93CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KHBhcmVudCkpCisgICAgaWYg
KGlzPFNoYWRvd1Jvb3Q+KCpwYXJlbnQpKQogICAgICAgICByZXR1cm4gc2hhZG93Um9vdENyb3Nz
aW5nID09IENyb3NzU2hhZG93Um9vdCA/IGRvd25jYXN0PFNoYWRvd1Jvb3Q+KHBhcmVudCktPmhv
c3RFbGVtZW50KCkgOiBwYXJlbnQ7CiAKLSAgICBpZiAoaXM8SW5zZXJ0aW9uUG9pbnQ+KHBhcmVu
dCkpIHsKKyAgICBpZiAoaXM8SW5zZXJ0aW9uUG9pbnQ+KCpwYXJlbnQpKSB7CiAgICAgICAgIGNv
bnN0IEluc2VydGlvblBvaW50JiBpbnNlcnRpb25Qb2ludCA9IGRvd25jYXN0PEluc2VydGlvblBv
aW50PigqcGFyZW50KTsKICAgICAgICAgaWYgKGluc2VydGlvblBvaW50Lmhhc0Rpc3RyaWJ1dGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZl
cnNhbC5jcHAKaW5kZXggZmJmZDdkOGQwYWQwOGE5NmI3NGU3MTVmZjdlM2Q5NDBlYWFlOWE3My4u
ODUyOThiMDE2NWUzYTEyODc4Y2YwNjE3NTQyNWZlMGZmZDFmNzJlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlVHJhdmVyc2FsLmNwcApAQCAtNDEsNyArNDEsNyBAQCBOb2RlKiBwcmV2aW91c0luY2x1
ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQog
ICAgICAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy0+cHNldWRvQXdhcmVMYXN0Q2hpbGQoKTsK
ICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwogICAgIH0KLSAgICByZXR1cm4gaXM8UHNldWRvRWxl
bWVudD4oY3VycmVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkuaG9zdEVs
ZW1lbnQoKSA6IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICByZXR1cm4gaXM8UHNldWRvRWxl
bWVudD4oKmN1cnJlbnQpID8gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4oKmN1cnJlbnQpLmhvc3RF
bGVtZW50KCkgOiBjdXJyZW50LT5wYXJlbnROb2RlKCk7CiB9CiAKIE5vZGUqIG5leHRJbmNsdWRp
bmdQc2V1ZG8oY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKQEAg
LTUzLDcgKzUzLDcgQEAgTm9kZSogbmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiBjdXJy
ZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBpZiAoKG5leHQgPSBjdXJyZW50LT5wc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkpKQogICAgICAg
ICByZXR1cm4gbmV4dDsKLSAgICBjdXJyZW50ID0gaXM8UHNldWRvRWxlbWVudD4oY3VycmVudCkg
PyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkuaG9zdEVsZW1lbnQoKSA6IGN1cnJl
bnQtPnBhcmVudE5vZGUoKTsKKyAgICBjdXJyZW50ID0gaXM8UHNldWRvRWxlbWVudD4oKmN1cnJl
bnQpID8gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4oKmN1cnJlbnQpLmhvc3RFbGVtZW50KCkgOiBj
dXJyZW50LT5wYXJlbnROb2RlKCk7CiAgICAgZm9yICg7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJy
ZW50LT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzAsNyArNzAsNyBAQCBOb2RlKiBuZXh0
SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25z
dCBOb2RlKiBzdGF5VwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoKG5leHQgPSBj
dXJyZW50LT5wc2V1ZG9Bd2FyZU5leHRTaWJsaW5nKCkpKQogICAgICAgICByZXR1cm4gbmV4dDsK
LSAgICBjdXJyZW50ID0gaXM8UHNldWRvRWxlbWVudD4oY3VycmVudCkgPyBkb3duY2FzdDxQc2V1
ZG9FbGVtZW50PigqY3VycmVudCkuaG9zdEVsZW1lbnQoKSA6IGN1cnJlbnQtPnBhcmVudE5vZGUo
KTsKKyAgICBjdXJyZW50ID0gaXM8UHNldWRvRWxlbWVudD4oKmN1cnJlbnQpID8gZG93bmNhc3Q8
UHNldWRvRWxlbWVudD4oKmN1cnJlbnQpLmhvc3RFbGVtZW50KCkgOiBjdXJyZW50LT5wYXJlbnRO
b2RlKCk7CiAgICAgZm9yICg7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2Rl
KCkpIHsKICAgICAgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggZGM4MjE5MGM1YmUwZmZh
MzE2ZTA0YjdjZTcyMjM0NmY4YTg2ZjU4My4uNGJiYTRkMjcwY2QxNGM3ZjU3YmRhNjBjMWE0NGE3
NjI3NDgwZDdhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC0yOTEsNyArMjkxLDcgQEAg
UG9zaXRpb246OkFuY2hvclR5cGUgUG9zaXRpb246OmFuY2hvclR5cGVGb3JMZWdhY3lFZGl0aW5n
UG9zaXRpb24oTm9kZSogYW5jaG9yTm8KIEVsZW1lbnQqIFBvc2l0aW9uOjplbGVtZW50KCkgY29u
c3QKIHsKICAgICBOb2RlKiBub2RlID0gYW5jaG9yTm9kZSgpOwotICAgIHdoaWxlIChub2RlICYm
ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4oKm5v
ZGUpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIHJldHVybiBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKIH0KQEAgLTUyOSw3ICs1MjksNyBAQCBzdGF0aWMgYm9vbCBl
bmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhOb2RlKiBub2RlKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgLy8gRG9uJ3QgaW5jbHVkZSBpbmxpbmUgdGFi
bGVzLgotICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoaXM8SFRN
TFRhYmxlRWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
Ly8gVGhlcmUgaXMgYSBWaXNpYmxlUG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGlubGluZS1ibG9j
ayBjb250YWluZXIuCkBAIC05NTAsNyArOTUwLDcgQEAgYm9vbCBQb3NpdGlvbjo6aXNDYW5kaWRh
dGUoKSBjb25zdAogCiBib29sIFBvc2l0aW9uOjppc1JlbmRlcmVkQ2hhcmFjdGVyKCkgY29uc3QK
IHsKLSAgICBpZiAoaXNOdWxsKCkgfHwgIWlzPFRleHQ+KGRlcHJlY2F0ZWROb2RlKCkpKQorICAg
IGlmICghaXM8VGV4dD4oZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCiAgICAgUmVuZGVyVGV4dCogcmVuZGVyZXIgPSBkb3duY2FzdDxUZXh0PigqZGVw
cmVjYXRlZE5vZGUoKSkucmVuZGVyZXIoKTsKQEAgLTEwNjIsNyArMTA2Miw3IEBAIFBvc2l0aW9u
IFBvc2l0aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKEVBZmZpbml0eSBhZmZpbml0eSwg
Ym9vbCBjb25zaWRlck5vCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAgUG9zaXRp
b24gcHJldiA9IHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oYWZmaW5pdHkpOwotICAgIGlmIChw
cmV2ICE9ICp0aGlzICYmIGluU2FtZUVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoZGVwcmVjYXRl
ZE5vZGUoKSwgcHJldi5kZXByZWNhdGVkTm9kZSgpKSAmJiBpczxUZXh0PihwcmV2LmRlcHJlY2F0
ZWROb2RlKCkpKSB7CisgICAgaWYgKHByZXYgIT0gKnRoaXMgJiYgaW5TYW1lRW5jbG9zaW5nQmxv
Y2tGbG93RWxlbWVudChkZXByZWNhdGVkTm9kZSgpLCBwcmV2LmRlcHJlY2F0ZWROb2RlKCkpICYm
IGlzPFRleHQ+KCpwcmV2LmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIFN0cmluZyBzdHJp
bmcgPSBkb3duY2FzdDxUZXh0PigqcHJldi5kZXByZWNhdGVkTm9kZSgpKS5kYXRhKCk7CiAgICAg
ICAgIFVDaGFyIGMgPSBzdHJpbmdbcHJldi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpXTsKICAg
ICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID8gKGlzU3BhY2VPck5l
d2xpbmUoYykgfHwgYyA9PSBub0JyZWFrU3BhY2UpIDogZGVwcmVjYXRlZElzQ29sbGFwc2libGVX
aGl0ZXNwYWNlKGMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggMjdkZTdlZmRlY2FhYTQ5ZGIxYTgy
ZGFkNDI0NjIyM2E5MTc1MzgzYy4uY2UzMmY2OWQyMWNmOTIxOGExYTM5MjMxOTFjNTVlNjc4ZGM4
MjU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC05NzgsNyArOTc4LDcgQEAgdm9pZCBSYW5nZTo6
aW5zZXJ0Tm9kZShQYXNzUmVmUHRyPE5vZGU+IHBycE5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogICAgIC8vIGRvZXMgbm90IGFsbG93IGNoaWxkcmVuIG9mIHRoZSB0eXBlIG9mIG5ld05vZGUg
b3IgaWYgbmV3Tm9kZSBpcyBhbiBhbmNlc3RvciBvZiB0aGUgY29udGFpbmVyLgogCiAgICAgLy8g
YW4gZXh0cmEgb25lIGhlcmUgLSBpZiBhIHRleHQgbm9kZSBpcyBnb2luZyB0byBzcGxpdCwgaXQg
bXVzdCBoYXZlIGEgcGFyZW50IHRvIGluc2VydCBpbnRvCi0gICAgYm9vbCBzdGFydElzVGV4dCA9
IGlzPFRleHQ+KG1fc3RhcnQuY29udGFpbmVyKCkpOworICAgIGJvb2wgc3RhcnRJc1RleHQgPSBp
czxUZXh0PigqbV9zdGFydC5jb250YWluZXIoKSk7CiAgICAgaWYgKHN0YXJ0SXNUZXh0ICYmICFt
X3N0YXJ0LmNvbnRhaW5lcigpLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgZWMgPSBISUVSQVJD
SFlfUkVRVUVTVF9FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTIyMjQsNyArMjIyNCw3IEBAIHZv
aWQgUmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMp
IGNvbnN0CiAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNTZXQucmVtb3ZlKHBhcmVudCk7CiAKICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5v
ZGUpICYmIHNlbGVjdGVkRWxlbWVudHNTZXQuY29udGFpbnMobm9kZSkgJiYgIXNlbGVjdGVkRWxl
bWVudHNTZXQuY29udGFpbnMobm9kZS0+cGFyZW50Tm9kZSgpKSkgeworICAgICAgICBpZiAoaXM8
RWxlbWVudD4oKm5vZGUpICYmIHNlbGVjdGVkRWxlbWVudHNTZXQuY29udGFpbnMobm9kZSkgJiYg
IXNlbGVjdGVkRWxlbWVudHNTZXQuY29udGFpbnMobm9kZS0+cGFyZW50Tm9kZSgpKSkgewogICAg
ICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9iamVjdCA9
IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5yZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7CiAgICAg
ICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gZWxlbWVudFF1YWRzOwogICAgICAgICAgICAg
ICAgIHJlbmRlckJveE1vZGVsT2JqZWN0LT5hYnNvbHV0ZVF1YWRzKGVsZW1lbnRRdWFkcyk7CkBA
IC0yMjMyLDcgKzIyMzIsNyBAQCB2b2lkIFJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVj
dG9yPEZsb2F0UXVhZD4mIHF1YWRzKSBjb25zdAogCiAgICAgICAgICAgICAgICAgcXVhZHMuYXBw
ZW5kVmVjdG9yKGVsZW1lbnRRdWFkcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoaXM8VGV4dD4obm9kZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkp
IHsKICAgICAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZG93bmNhc3Q8VGV4
dD4oKm5vZGUpLnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJUZXh0
JiByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KCpyZW5kZXJlcik7CiAgICAgICAgICAgICAgICAg
aW50IHN0YXJ0T2Zmc2V0ID0gKG5vZGUgPT0gc3RhcnRDb250YWluZXIpID8gbV9zdGFydC5vZmZz
ZXQoKSA6IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggZTdhNjcxNmQy
OWVlYjZhNWM0M2FjNDM5NmIzZTMxZmEyOTQxZTlkYi4uZGIxY2ZiOGEzZmNiZDk3MzhhZGJhYjM3
Mzc1MDc0OGFhZmVlMGY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAt
MzgyLDEwICszODIsMTAgQEAgU3RyaW5nIFNjcmlwdEVsZW1lbnQ6OnNjcmlwdENvbnRlbnQoKSBj
b25zdAogCiBTY3JpcHRFbGVtZW50KiB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKEVsZW1lbnQq
IGVsZW1lbnQpCiB7Ci0gICAgaWYgKGlzPEhUTUxTY3JpcHRFbGVtZW50PihlbGVtZW50KSkKKyAg
ICBpZiAoaXM8SFRNTFNjcmlwdEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxTY3JpcHRFbGVtZW50PihlbGVtZW50KTsKIAotICAgIGlmIChpczxTVkdTY3Jp
cHRFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoaXM8U1ZHU2NyaXB0RWxlbWVudD4oKmVsZW1l
bnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU2NyaXB0RWxlbWVudD4oZWxlbWVudCk7
CiAKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCmluZGV4IDFiZTc1
N2YxNzJmZjYyNTUzOWFmOWYxMzIxMzAwMzY4MzY0YTJjY2IuLmFkOGEzZWRjNzFiYTI3NmFlZGNl
NjFhM2JmY2JiNWM1MzIxMTc2MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFk
b3dSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaApAQCAtMTA1LDcg
KzEwNSw3IEBAIGlubGluZSBTaGFkb3dSb290KiBOb2RlOjpzaGFkb3dSb290KCkgY29uc3QKIGlu
bGluZSBDb250YWluZXJOb2RlKiBOb2RlOjpwYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkT3JHQ1RocmVhZCgpKTsKLSAgICBpZiAoaXM8U2hh
ZG93Um9vdD4odGhpcykpCisgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KCp0aGlzKSkKICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCp0aGlzKS5ob3N0RWxlbWVudCgpOwogICAgIHJl
dHVybiBwYXJlbnROb2RlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKaW5kZXggN2QyODliMGEwOTkwYjcz
NzgwY2QyMTg2Y2Q2Mzc5M2IxOGNhNThiZS4uZDU0YmRhZTBkMTExMzIyOGZmMTA0YWNlYmUxY2U0
ZjRlYzk5YWY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcApAQCAtOTQsNyArOTQsNyBAQCBzdGF0aWMgY29u
c3QgVGV4dCogZWFybGllc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKGNvbnN0IFRleHQqIHRl
eHQpCiB7CiAgICAgY29uc3QgTm9kZSogbm9kZSA9IHRleHQ7CiAgICAgd2hpbGUgKChub2RlID0g
bm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpKSB7Ci0gICAgICAgIGlmICghaXM8VGV4dD4obm9kZSkp
CisgICAgICAgIGlmICghaXM8VGV4dD4oKm5vZGUpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIHRleHQgPSBkb3duY2FzdDxUZXh0Pihub2RlKTsKICAgICB9CkBAIC0xMDUsNyArMTA1LDcg
QEAgc3RhdGljIGNvbnN0IFRleHQqIGxhdGVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUoY29u
c3QgVGV4dCogdGV4dCkKIHsKICAgICBjb25zdCBOb2RlKiBub2RlID0gdGV4dDsKICAgICB3aGls
ZSAoKG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSkgewotICAgICAgICBpZiAoIWlzPFRleHQ+
KG5vZGUpKQorICAgICAgICBpZiAoIWlzPFRleHQ+KCpub2RlKSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4obm9kZSk7CiAgICAgfQpAQCAtMTc4LDcg
KzE3OCw4IEBAIFBhc3NSZWZQdHI8Tm9kZT4gVGV4dDo6Y2xvbmVOb2RlKGJvb2wgLypkZWVwKi8p
CiBzdGF0aWMgYm9vbCBpc1NWR1NoYWRvd1RleHQoVGV4dCogdGV4dCkKIHsKICAgICBOb2RlKiBw
YXJlbnROb2RlID0gdGV4dC0+cGFyZW50Tm9kZSgpOwotICAgIHJldHVybiBpczxTaGFkb3dSb290
PihwYXJlbnROb2RlKSAmJiBkb3duY2FzdDxTaGFkb3dSb290PigqcGFyZW50Tm9kZSkuaG9zdEVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dHJlZlRhZyk7CisgICAgQVNTRVJUKHBhcmVu
dE5vZGUpOworICAgIHJldHVybiBpczxTaGFkb3dSb290PigqcGFyZW50Tm9kZSkgJiYgZG93bmNh
c3Q8U2hhZG93Um9vdD4oKnBhcmVudE5vZGUpLmhvc3RFbGVtZW50KCktPmhhc1RhZ05hbWUoU1ZH
TmFtZXM6OnRyZWZUYWcpOwogfQogCiBzdGF0aWMgYm9vbCBpc1NWR1RleHQoVGV4dCogdGV4dCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNhbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vVGV4dE5vZGVUcmF2ZXJzYWwuY3BwCmluZGV4IDlmMDczMTllZmVm
M2VlNDhmNGMyNmMxYmJjNzNlNjUyMWY3MDcwMzYuLmFlMjNiMzE5MjU4MGJjZjE3Mzk3NThlMjRm
MzkwMzBmYWIwYzJkMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRy
YXZlcnNhbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2FsLmNw
cApAQCAtNDcsOSArNDcsMTAgQEAgU3RyaW5nIGNvbnRlbnRzQXNTdHJpbmcoY29uc3QgQ29udGFp
bmVyTm9kZSogcm9vdCkKIAogU3RyaW5nIGNvbnRlbnRzQXNTdHJpbmcoY29uc3QgTm9kZSogcm9v
dCkKIHsKLSAgICBpZiAoaXM8VGV4dD4ocm9vdCkpCisgICAgQVNTRVJUKHJvb3QpOworICAgIGlm
IChpczxUZXh0Pigqcm9vdCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxUZXh0Pigqcm9vdCku
ZGF0YSgpOwotICAgIGlmIChpczxDb250YWluZXJOb2RlPihyb290KSkKKyAgICBpZiAoaXM8Q29u
dGFpbmVyTm9kZT4oKnJvb3QpKQogICAgICAgICByZXR1cm4gY29udGVudHNBc1N0cmluZyhkb3du
Y2FzdDxDb250YWluZXJOb2RlPihyb290KSk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2FsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vVGV4dE5vZGVUcmF2ZXJzYWwuaAppbmRleCBiODRhMDIzNTk3MjBjOTg2OGJj
MWQ4ZjM5MjA1MjBmMjJhZDYzZmU3Li44YmFiN2IxZTY2OTYzMzk5YTBlYmYyNjBkYTU3NTA0ZTEx
YWM1NzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dE5vZGVUcmF2ZXJzYWwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dE5vZGVUcmF2ZXJzYWwuaApAQCAtNjYsNyAr
NjYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+CiBpbmxpbmUgVGV4dCogZmlyc3RUZXh0
Q2hpbGRUZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCkKIHsKICAgICBOb2RlKiBub2RlID0gY3Vy
cmVudC0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChub2RlICYmICFpczxUZXh0Pihub2RlKSkK
KyAgICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4oKm5vZGUpKQogICAgICAgICBub2RlID0gbm9k
ZS0+bmV4dFNpYmxpbmcoKTsKICAgICByZXR1cm4gZG93bmNhc3Q8VGV4dD4obm9kZSk7CiB9CkBA
IC03Nyw3ICs3Nyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBOb2RlVHlwZT4KIGlubGluZSBUZXh0KiBm
aXJzdFRleHRXaXRoaW5UZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCkKIHsKICAgICBOb2RlKiBu
b2RlID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChub2RlICYmICFpczxUZXh0
Pihub2RlKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4oKm5vZGUpKQogICAgICAgICBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBjdXJyZW50KTsKICAgICByZXR1cm4gZG93
bmNhc3Q8VGV4dD4obm9kZSk7CiB9CkBAIC04OCw3ICs4OCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBO
b2RlVHlwZT4KIGlubGluZSBUZXh0KiB0cmF2ZXJzZU5leHRUZXh0VGVtcGxhdGUoTm9kZVR5cGUq
IGN1cnJlbnQpCiB7CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoY3VycmVu
dCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYgIWlzPFRleHQ+KG5vZGUpKQorICAgIHdoaWxlIChub2Rl
ICYmICFpczxUZXh0Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG5vZGUpOwogICAgIHJldHVybiBkb3duY2FzdDxUZXh0Pihub2RlKTsKIH0KQEAgLTk5LDcgKzk5
LDcgQEAgdGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgogaW5saW5lIFRleHQqIHRyYXZlcnNlTmV4
dFRleHRUZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikK
IHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBzdGF5V2l0
aGluKTsKLSAgICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4obm9kZSkpCisgICAgd2hpbGUgKG5v
ZGUgJiYgIWlzPFRleHQ+KCpub2RlKSkKICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSwgc3RheVdpdGhpbik7CiAgICAgcmV0dXJuIGRvd25jYXN0PFRleHQ+KG5vZGUpOwog
fQpAQCAtMTA5LDcgKzEwOSw3IEBAIGlubGluZSBUZXh0KiBuZXh0KGNvbnN0IFRleHQqIGN1cnJl
bnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlCiBpbmxpbmUgVGV4
dCogbmV4dFNpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCkKIHsKICAgICBOb2RlKiBub2RlID0g
Y3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4obm9k
ZSkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPFRleHQ+KCpub2RlKSkKICAgICAgICAgbm9kZSA9
IG5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgcmV0dXJuIGRvd25jYXN0PFRleHQ+KG5vZGUpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCmluZGV4IDA0NWU4OGU0MzE5
N2I4M2RhZmI4ZWMzZDlkMjUzMTJiNWZkNDdhZDMuLjBmMTc1Mjc3ZWMwOWFkOWYyMzgzZDk5OTg0
ZGRiMjc0ZDM1NjY0OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVB
ZG9wdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAK
QEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2Nv
cGUoTm9kZSogcm9vdCkgY29uc3QKICAgICAgICAgICAgICAgICByYXJlRGF0YS0+bm9kZUxpc3Rz
KCktPmFkb3B0VHJlZVNjb3BlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWlzPEVsZW1l
bnQ+KG5vZGUpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChub2RlLT5oYXNTeW50aGV0aWNBdHRyQ2hpbGROb2Rl
cygpKSB7CkBAIC0xMjQsNyArMTI0LDcgQEAgaW5saW5lIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6
bW92ZU5vZGVUb05ld0RvY3VtZW50KE5vZGUqIG5vZGUsIERvY3VtZW50KiBvbGREb2MKICAgICBp
ZiAob2xkRG9jdW1lbnQpCiAgICAgICAgIG9sZERvY3VtZW50LT5tb3ZlTm9kZUl0ZXJhdG9yc1Rv
TmV3RG9jdW1lbnQobm9kZSwgbmV3RG9jdW1lbnQpOwogCi0gICAgaWYgKGlzPFNoYWRvd1Jvb3Q+
KG5vZGUpKQorICAgIGlmIChpczxTaGFkb3dSb290Pigqbm9kZSkpCiAgICAgICAgIGRvd25jYXN0
PFNoYWRvd1Jvb3Q+KCpub2RlKS5zZXREb2N1bWVudFNjb3BlKG5ld0RvY3VtZW50KTsKIAogI2lm
bmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9j
a0VsZW1lbnRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0Vs
ZW1lbnRDb21tYW5kLmNwcAppbmRleCBhMmNjNWM5MmUxYWQ4N2EzZmExYWM3OTY1OWVmMjBmMTgx
ZjVhZWViLi5mNzQwZWMzYWM2NDdlZDBjNjlmMTk4MzlhYTAzNGRjMTdhY2M1MDM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3Bw
CkBAIC0xNjQsNyArMTY0LDcgQEAgc3RhdGljIGJvb2wgaXNOZXdMaW5lQXRQb3NpdGlvbihjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgTm9kZSogdGV4dE5vZGUgPSBwb3NpdGlvbi5j
b250YWluZXJOb2RlKCk7CiAgICAgaW50IG9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpOwotICAgIGlmICghdGV4dE5vZGUgfHwgIWlzPFRleHQ+KHRleHROb2RlKSB8fCBv
ZmZzZXQgPCAwIHx8IG9mZnNldCA+PSB0ZXh0Tm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCisg
ICAgaWYgKCFpczxUZXh0Pih0ZXh0Tm9kZSkgfHwgb2Zmc2V0IDwgMCB8fCBvZmZzZXQgPj0gdGV4
dE5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTI2NywxOCArMjY3LDE4IEBAIFZpc2libGVQb3Np
dGlvbiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmVuZE9mTmV4dFBhcmFncmFoU3BsaXR0aW5n
VGV4dE5vZGVzSWZOCiAgICAgLy8gQXZvaWQgdGhpcyBieSBzcGxpdHRpbmcgIlxuIgogICAgIHNw
bGl0VGV4dE5vZGUodGV4dCwgMSk7CiAKLSAgICBpZiAodGV4dCA9PSBzdGFydC5jb250YWluZXJO
b2RlKCkgJiYgdGV4dC0+cHJldmlvdXNTaWJsaW5nKCkgJiYgaXM8VGV4dD4odGV4dC0+cHJldmlv
dXNTaWJsaW5nKCkpKSB7CisgICAgaWYgKHRleHQgPT0gc3RhcnQuY29udGFpbmVyTm9kZSgpICYm
IGlzPFRleHQ+KHRleHQtPnByZXZpb3VzU2libGluZygpKSkgewogICAgICAgICBBU1NFUlQoc3Rh
cnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSk7CiAgICAgICAgIHN0YXJ0ID0gUG9zaXRpb24oZG93bmNhc3Q8VGV4dD4odGV4dC0+cHJl
dmlvdXNTaWJsaW5nKCkpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgfQot
ICAgIGlmICh0ZXh0ID09IGVuZC5jb250YWluZXJOb2RlKCkgJiYgdGV4dC0+cHJldmlvdXNTaWJs
aW5nKCkgJiYgaXM8VGV4dD4odGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpKSB7CisgICAgaWYgKHRl
eHQgPT0gZW5kLmNvbnRhaW5lck5vZGUoKSAmJiBpczxUZXh0Pih0ZXh0LT5wcmV2aW91c1NpYmxp
bmcoKSkpIHsKICAgICAgICAgQVNTRVJUKGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IHBv
c2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgZW5kID0gUG9zaXRpb24o
ZG93bmNhc3Q8VGV4dD4odGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpLCBlbmQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkpOwogICAgIH0KICAgICBpZiAodGV4dCA9PSBtX2VuZE9mTGFzdFBhcmFncmFw
aC5jb250YWluZXJOb2RlKCkpIHsKICAgICAgICAgaWYgKG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpIDwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
IHsKICAgICAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGZpeCBlbmRPZkxhc3RQYXJhZ3JhcGggaWYg
dGhlIHByZXZpb3VzIG5vZGUgd2FzIHN0aWxsIHRleHQgYW5kIGhhc24ndCBiZWVuIG1vZGlmaWVk
IGJ5IHNjcmlwdC4KLSAgICAgICAgICAgIGlmIChpczxUZXh0Pih0ZXh0LT5wcmV2aW91c1NpYmxp
bmcoKSkKKyAgICAgICAgICAgIGlmIChpczxUZXh0PigqdGV4dC0+cHJldmlvdXNTaWJsaW5nKCkp
CiAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZW5kT2ZMYXN0UGFy
YWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA8PSBkb3duY2FzdDxUZXh0Pih0ZXh0LT5w
cmV2aW91c1NpYmxpbmcoKSktPmxlbmd0aCgpKQogICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0
UGFyYWdyYXBoID0gUG9zaXRpb24oZG93bmNhc3Q8VGV4dD4odGV4dC0+cHJldmlvdXNTaWJsaW5n
KCkpLCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAg
ICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNw
cAppbmRleCA5NDI3NTE2NzU4YWE4MDdmYzUxYWZkY2U0NzQyNzYwYjc5ZTFhYzY3Li42NmJlZmY0
MTc1ZDA3YTBjYzcxZTJhNzg4ODdkYTYwOWRkNGNhNDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgU3Ry
aW5nJiBzdHlsZVNwYW5DbGFzc1N0cmluZygpCiAKIGJvb2wgaXNMZWdhY3lBcHBsZVN0eWxlU3Bh
bihjb25zdCBOb2RlKiBub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhaXM8SFRNTFNwYW5FbGVt
ZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEhUTUxTcGFuRWxlbWVudD4obm9kZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBkb3duY2FzdDxIVE1MU3BhbkVsZW1lbnQ+KCpu
b2RlKS5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmco
KTsKQEAgLTkyLDIxICs5MiwyMSBAQCBzdGF0aWMgYm9vbCBoYXNOb0F0dHJpYnV0ZU9yT25seVN0
eWxlQXR0cmlidXRlKGNvbnN0IFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIFNobwogCiBib29sIGlz
U3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHlsZUF0dHJpYnV0ZShjb25zdCBFbGVtZW50KiBlbGVt
ZW50KQogewotICAgIGlmICghZWxlbWVudCB8fCAhaXM8SFRNTFNwYW5FbGVtZW50PihlbGVtZW50
KSkKKyAgICBpZiAoIWlzPEhUTUxTcGFuRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICByZXR1cm4gaGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZShk
b3duY2FzdDxIVE1MU3BhbkVsZW1lbnQ+KGVsZW1lbnQpLCBBbGxvd05vbkVtcHR5U3R5bGVBdHRy
aWJ1dGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNP
clVuc3R5bGVkU3R5bGVTcGFuKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFl
bGVtZW50IHx8ICFpczxIVE1MU3BhbkVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRN
TFNwYW5FbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biBoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0cmlidXRlKGRvd25jYXN0PEhUTUxTcGFuRWxl
bWVudD4oZWxlbWVudCksIFN0eWxlQXR0cmlidXRlU2hvdWxkQmVFbXB0eSk7CiB9CiAKIGJvb2wg
aXNFbXB0eUZvbnRUYWcoY29uc3QgRWxlbWVudCogZWxlbWVudCwgU2hvdWxkU3R5bGVBdHRyaWJ1
dGVCZUVtcHR5IHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSkKIHsKLSAgICBpZiAoIWVsZW1l
bnQgfHwgIWlzPEhUTUxGb250RWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MRm9u
dEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
aGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZShkb3duY2FzdDxIVE1MRm9udEVsZW1l
bnQ+KGVsZW1lbnQpLCBzaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkpOwpAQCAtMjc3LDcgKzI3
Nyw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5
bGUgKnN0eWxlKQogICAgICAgICAgICAgICAgICAgICBibG9jayA9IG5ld0Jsb2NrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgQVNTRVJUKCFibG9jayB8fCBpczxIVE1MRWxlbWVudD4oKmJs
b2NrKSk7Ci0gICAgICAgICAgICBpZiAoYmxvY2sgJiYgaXM8SFRNTEVsZW1lbnQ+KCpibG9jaykp
IHsKKyAgICAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oYmxvY2suZ2V0KCkpKSB7CiAgICAg
ICAgICAgICAgICAgcmVtb3ZlQ1NTU3R5bGUoc3R5bGUsIGRvd25jYXN0PEhUTUxFbGVtZW50Pihi
bG9jay5nZXQoKSkpOwogICAgICAgICAgICAgICAgIGlmICghbV9yZW1vdmVPbmx5KQogICAgICAg
ICAgICAgICAgICAgICBhZGRCbG9ja1N0eWxlKHN0eWxlQ2hhbmdlLCBkb3duY2FzdDxIVE1MRWxl
bWVudD4oYmxvY2suZ2V0KCkpKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUp
CiAgICAgTm9kZSogbGFzdFN0eWxlZE5vZGUgPSAwOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHN0
YXJ0Tm9kZTsgbm9kZSAhPSBiZXlvbmRFbmQ7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUpKSB7CiAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudDsKLSAgICAgICAgaWYg
KGlzPEhUTUxFbGVtZW50Pihub2RlKSkgeworICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCpu
b2RlKSkgewogICAgICAgICAgICAgLy8gT25seSB3b3JrIG9uIGZ1bGx5IHNlbGVjdGVkIG5vZGVz
LgogICAgICAgICAgICAgaWYgKCFub2RlRnVsbHlTZWxlY3RlZChub2RlLCBzdGFydCwgZW5kKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQyMCw3ICs0MjAsNyBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSog
c3R5bGUpCiAKIHN0YXRpYyBDb250YWluZXJOb2RlKiBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUo
Y29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICB3aGlsZSAobm9kZSAmJiAoIWlzPEVsZW1lbnQ+KG5v
ZGUpIHx8ICFpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUoZG93bmNhc3Q8
RWxlbWVudD4obm9kZSkpKSkKKyAgICB3aGlsZSAobm9kZSAmJiAoIWlzPEVsZW1lbnQ+KCpub2Rl
KSB8fCAhaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGUpKSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAg
CiAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5wYXJlbnROb2RlKCkgOiBudWxscHRyOwpAQCAtNDcz
LDcgKzQ3Myw3IEBAIEhUTUxFbGVtZW50KiBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRBbmNlc3Rv
cnNXaXRoVW5pY29kZUJpZGkoTm9kZSogbm9kZSwgYm9vbCBiCiAgICAgV3JpdGluZ0RpcmVjdGlv
biBoaWdoZXN0QW5jZXN0b3JEaXJlY3Rpb247CiAgICAgaWYgKGFsbG93ZWREaXJlY3Rpb24gIT0g
TmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24KICAgICAgICAgJiYgaGlnaGVzdEFuY2VzdG9yVW5pY29k
ZUJpZGkgIT0gQ1NTVmFsdWVCaWRpT3ZlcnJpZGUKLSAgICAgICAgJiYgaXM8SFRNTEVsZW1lbnQ+
KGhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSkKKyAgICAgICAgJiYgaXM8SFRNTEVsZW1l
bnQ+KCpoaWdoZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGkpCiAgICAgICAgICYmIEVkaXRpbmdT
dHlsZTo6Y3JlYXRlKGhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSwgRWRpdGluZ1N0eWxl
OjpBbGxQcm9wZXJ0aWVzKS0+dGV4dERpcmVjdGlvbihoaWdoZXN0QW5jZXN0b3JEaXJlY3Rpb24p
CiAgICAgICAgICYmIGhpZ2hlc3RBbmNlc3RvckRpcmVjdGlvbiA9PSBhbGxvd2VkRGlyZWN0aW9u
KSB7CiAgICAgICAgIGlmICghbmV4dEhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSkKQEAg
LTUwNSw3ICs1MDUsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVFbWJlZGRpbmdV
cFRvRW5jbG9zaW5nQmxvY2soTm9kZSogbm9kZSwgTm9kZSogdW5zcAogICAgIE5vZGUqIHBhcmVu
dCA9IG51bGxwdHI7CiAgICAgZm9yIChOb2RlKiBhbmNlc3RvciA9IG5vZGUtPnBhcmVudE5vZGUo
KTsgYW5jZXN0b3IgIT0gYmxvY2sgJiYgYW5jZXN0b3IgIT0gdW5zcGxpdEFuY2VzdG9yOyBhbmNl
c3RvciA9IHBhcmVudCkgewogICAgICAgICBwYXJlbnQgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgp
OwotICAgICAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9yKSkKKyAgICAgICAgaWYg
KCFpczxTdHlsZWRFbGVtZW50PigqYW5jZXN0b3IpKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgU3R5bGVkRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+
KCphbmNlc3Rvcik7CkBAIC05ODAsNyArOTgwLDcgQEAgSFRNTEVsZW1lbnQqIEFwcGx5U3R5bGVD
b21tYW5kOjpoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZShFZGl0aW4K
ICAgICBOb2RlKiB1bnNwbGl0dGFibGVFbGVtZW50ID0gdW5zcGxpdHRhYmxlRWxlbWVudEZvclBv
c2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSk7CiAKICAgICBmb3IgKE5v
ZGUqIGFuY2VzdG9yID0gbm9kZTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVu
dE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KGFuY2VzdG9yKSAmJiBzaG91
bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBkb3duY2FzdDxIVE1MRWxlbWVu
dD4oYW5jZXN0b3IpKSkKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PigqYW5jZXN0b3IpICYm
IHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGRvd25jYXN0PEhUTUxF
bGVtZW50PihhbmNlc3RvcikpKQogICAgICAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8SFRNTEVs
ZW1lbnQ+KGFuY2VzdG9yKTsKICAgICAgICAgLy8gU2hvdWxkIHN0b3AgYXQgdGhlIGVkaXRhYmxl
IHJvb3QgKGNhbm5vdCBjcm9zcyBlZGl0aW5nIGJvdW5kYXJ5KSBhbmQKICAgICAgICAgLy8gYWxz
byBzdG9wIGF0IHRoZSB1bnNwbGl0dGFibGUgZWxlbWVudCB0byBiZSBjb25zaXN0ZW50IHdpdGgg
b3RoZXIgVUFzCkBAIC05OTcsMTggKzk5NywxOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlVG9QdXNoRG93bihOb2RlKiBub2RlLCBFZGl0aW5nU3R5bGUqIHN0eQog
CiAgICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKLSAgICBpZiAo
IXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgaXM8SFRN
TElGcmFtZUVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHko
KSB8fCAhbm9kZS0+cmVuZGVyZXIoKSB8fCBpczxIVE1MSUZyYW1lRWxlbWVudD4oKm5vZGUpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBuZXdJbmxpbmVTdHls
ZSA9IHN0eWxlOwotICAgIGlmIChpczxIVE1MRWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8SFRN
TEVsZW1lbnQ+KG5vZGUpLT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKGlzPEhUTUxFbGVtZW50
Pigqbm9kZSkgJiYgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpLT5pbmxpbmVTdHlsZSgpKSB7
CiAgICAgICAgIG5ld0lubGluZVN0eWxlID0gc3R5bGUtPmNvcHkoKTsKICAgICAgICAgbmV3SW5s
aW5lU3R5bGUtPm1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+
KG5vZGUpLCBFZGl0aW5nU3R5bGU6Ok92ZXJyaWRlVmFsdWVzKTsKICAgICB9CiAKICAgICAvLyBT
aW5jZSBhZGRJbmxpbmVTdHlsZUlmTmVlZGVkIGNhbid0IGFkZCBzdHlsZXMgdG8gYmxvY2stZmxv
dyByZW5kZXIgb2JqZWN0cywgYWRkIHN0eWxlIGF0dHJpYnV0ZSBpbnN0ZWFkLgogICAgIC8vIEZJ
WE1FOiBhcHBseUlubGluZVN0eWxlVG9SYW5nZSBzaG91bGQgYmUgdXNlZCBoZXJlIGluc3RlYWQu
Ci0gICAgaWYgKChub2RlLT5yZW5kZXJlcigpLT5pc1JlbmRlckJsb2NrRmxvdygpIHx8IG5vZGUt
Pmhhc0NoaWxkTm9kZXMoKSkgJiYgaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKChu
b2RlLT5yZW5kZXJlcigpLT5pc1JlbmRlckJsb2NrRmxvdygpIHx8IG5vZGUtPmhhc0NoaWxkTm9k
ZXMoKSkgJiYgaXM8SFRNTEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICBzZXROb2RlQXR0cmli
dXRlKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKSwgc3R5bGVBdHRyLCBuZXdJbmxpbmVTdHls
ZS0+c3R5bGUoKS0+YXNUZXh0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTIwOCw3
ICsxMjA4LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRFbmQoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW4KICAgICBzcGxpdFRleHROb2RlKCZ0
ZXh0LCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogCiAgICAgTm9kZSogcHJldk5vZGUg
PSB0ZXh0LnByZXZpb3VzU2libGluZygpOwotICAgIGlmICghcHJldk5vZGUgfHwgIWlzPFRleHQ+
KHByZXZOb2RlKSkKKyAgICBpZiAoIWlzPFRleHQ+KHByZXZOb2RlKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUG9zaXRpb24gbmV3U3RhcnQgPSBzaG91bGRVcGRhdGVTdGFydCA/IFBvc2l0aW9u
KGRvd25jYXN0PFRleHQ+KHByZXZOb2RlKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
IDogc3RhcnQ7CkBAIC0xMjQwLDcgKzEyNDAsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpz
cGxpdFRleHRFbGVtZW50QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdAog
ICAgIGlmICghcGFyZW50RWxlbWVudCB8fCAhcGFyZW50RWxlbWVudC0+cHJldmlvdXNTaWJsaW5n
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBOb2RlKiBmaXJzdFRleHROb2RlID0gcGFyZW50RWxl
bWVudC0+cHJldmlvdXNTaWJsaW5nKCktPmxhc3RDaGlsZCgpOwotICAgIGlmICghZmlyc3RUZXh0
Tm9kZSB8fCAhaXM8VGV4dD4oZmlyc3RUZXh0Tm9kZSkpCisgICAgaWYgKCFpczxUZXh0PihmaXJz
dFRleHROb2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUG9zaXRpb24gbmV3U3RhcnQgPSBz
aG91bGRVcGRhdGVTdGFydCA/IFBvc2l0aW9uKGRvd25jYXN0PFRleHQ+KGZpcnN0VGV4dE5vZGUp
LCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgOiBzdGFydDsKQEAgLTEyNDksNyArMTI0
OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0CiAKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6
OnNob3VsZFNwbGl0VGV4dEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRWRpdGluZ1N0eWxlKiBz
dHlsZSkKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkK
KyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgcmV0dXJuIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUs
IGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVtZW50KSk7CkBAIC0xMzU5LDEzICsxMzU5LDE0IEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoUGFz
c1JlZlB0cjxOb2RlPiBwYXNzZWRTdGFyCiAKICAgICBSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcg
PSBlbGVtZW50LT5uZXh0U2libGluZygpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxp
bmcgPSBlbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBpZiAobmV4dFNpYmxpbmcgJiYg
aXM8RWxlbWVudD4oKm5leHRTaWJsaW5nKSAmJiBuZXh0U2libGluZy0+aGFzRWRpdGFibGVTdHls
ZSgpCisgICAgaWYgKGlzPEVsZW1lbnQ+KG5leHRTaWJsaW5nLmdldCgpKSAmJiBuZXh0U2libGlu
Zy0+aGFzRWRpdGFibGVTdHlsZSgpCiAgICAgICAgICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGVs
ZW1lbnQuZ2V0KCksIGRvd25jYXN0PEVsZW1lbnQ+KG5leHRTaWJsaW5nLmdldCgpKSkpCiAgICAg
ICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudC5nZXQoKSwgZG93bmNhc3Q8RWxlbWVu
dD4obmV4dFNpYmxpbmcuZ2V0KCkpKTsKIAotICAgIGlmIChwcmV2aW91c1NpYmxpbmcgJiYgaXM8
RWxlbWVudD4oKnByZXZpb3VzU2libGluZykgJiYgcHJldmlvdXNTaWJsaW5nLT5oYXNFZGl0YWJs
ZVN0eWxlKCkpIHsKKyAgICBpZiAoaXM8RWxlbWVudD4ocHJldmlvdXNTaWJsaW5nLmdldCgpKSAm
JiBwcmV2aW91c1NpYmxpbmctPmhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICBOb2RlKiBt
ZXJnZWRFbGVtZW50ID0gcHJldmlvdXNTaWJsaW5nLT5uZXh0U2libGluZygpOwotICAgICAgICBp
ZiAoaXM8RWxlbWVudD4obWVyZ2VkRWxlbWVudCkgJiYgbWVyZ2VkRWxlbWVudC0+aGFzRWRpdGFi
bGVTdHlsZSgpCisgICAgICAgIEFTU0VSVChtZXJnZWRFbGVtZW50KTsKKyAgICAgICAgaWYgKGlz
PEVsZW1lbnQ+KCptZXJnZWRFbGVtZW50KSAmJiBtZXJnZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0
eWxlKCkKICAgICAgICAgICAgICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGRvd25jYXN0PEVsZW1l
bnQ+KHByZXZpb3VzU2libGluZy5nZXQoKSksIGRvd25jYXN0PEVsZW1lbnQ+KG1lcmdlZEVsZW1l
bnQpKSkKICAgICAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZG93bmNhc3Q8RWxlbWVu
dD4ocHJldmlvdXNTaWJsaW5nLmdldCgpKSwgZG93bmNhc3Q8RWxlbWVudD4obWVyZ2VkRWxlbWVu
dCkpOwogICAgIH0KQEAgLTE0MzEsMTAgKzE0MzIsMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlJbmxpbmVTdHlsZUNoYW5nZShQYXNzUmVmUHRyPE5vZGU+IHBhc3NlZFN0YXJ0LCBQ
YXMKICAgICBIVE1MRm9udEVsZW1lbnQqIGZvbnRDb250YWluZXIgPSBudWxscHRyOwogICAgIEhU
TUxFbGVtZW50KiBzdHlsZUNvbnRhaW5lciA9IG51bGxwdHI7CiAgICAgZm9yIChOb2RlKiBjb250
YWluZXIgPSBzdGFydE5vZGUuZ2V0KCk7IGNvbnRhaW5lciAmJiBzdGFydE5vZGUgPT0gZW5kTm9k
ZTsgY29udGFpbmVyID0gY29udGFpbmVyLT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgaWYgKGlz
PEhUTUxGb250RWxlbWVudD4oY29udGFpbmVyKSkKKyAgICAgICAgaWYgKGlzPEhUTUxGb250RWxl
bWVudD4oKmNvbnRhaW5lcikpCiAgICAgICAgICAgICBmb250Q29udGFpbmVyID0gZG93bmNhc3Q8
SFRNTEZvbnRFbGVtZW50Pihjb250YWluZXIpOwotICAgICAgICBib29sIHN0eWxlQ29udGFpbmVy
SXNOb3RTcGFuID0gIXN0eWxlQ29udGFpbmVyIHx8ICFpczxIVE1MU3BhbkVsZW1lbnQ+KHN0eWxl
Q29udGFpbmVyKTsKLSAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50Pihjb250YWluZXIpICYmIChp
czxIVE1MU3BhbkVsZW1lbnQ+KGNvbnRhaW5lcikgfHwgKHN0eWxlQ29udGFpbmVySXNOb3RTcGFu
ICYmIGNvbnRhaW5lci0+aGFzQ2hpbGROb2RlcygpKSkpCisgICAgICAgIGJvb2wgc3R5bGVDb250
YWluZXJJc05vdFNwYW4gPSAhaXM8SFRNTFNwYW5FbGVtZW50PihzdHlsZUNvbnRhaW5lcik7Cisg
ICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oKmNvbnRhaW5lcikgJiYgKGlzPEhUTUxTcGFuRWxl
bWVudD4oKmNvbnRhaW5lcikgfHwgKHN0eWxlQ29udGFpbmVySXNOb3RTcGFuICYmIGNvbnRhaW5l
ci0+aGFzQ2hpbGROb2RlcygpKSkpCiAgICAgICAgICAgICBzdHlsZUNvbnRhaW5lciA9IGRvd25j
YXN0PEhUTUxFbGVtZW50Pihjb250YWluZXIpOwogICAgICAgICBpZiAoIWNvbnRhaW5lci0+Zmly
c3RDaGlsZCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTI4LDcgKzE1MjksNyBAQCB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kZXMoTm9kZSogbm9kZSwgY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjbwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGV4dE5vZGVz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIFRleHQqIGNoaWxkVGV4dCA9IHRleHROb2Rlc1tpXS5n
ZXQoKTsKICAgICAgICAgTm9kZSogbmV4dCA9IGNoaWxkVGV4dC0+bmV4dFNpYmxpbmcoKTsKLSAg
ICAgICAgaWYgKCFuZXh0IHx8ICFpczxUZXh0PihuZXh0KSkKKyAgICAgICAgaWYgKCFpczxUZXh0
PihuZXh0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgIAogICAgICAgICBUZXh0JiBuZXh0
VGV4dCA9IGRvd25jYXN0PFRleHQ+KCpuZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCmluZGV4IDU1MjMzYzViYzk5ODQ0MzhhYTNm
YjVmOWVhOTNkYmFlYTlhYTljMGUuLjY0NGQzNDVmZWYxOTgyM2IxOTRmNDMzOTcxYzk2MWYzOTBi
NTU1OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3Rl
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVD
b21tYW5kLmNwcApAQCAtMTA0LDkgKzEwNCw5IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFu
ZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gc3RhcnROb2RlIGlzIHRoZSBmaXJzdCBub2RlIHRo
YXQgd2UgbmVlZCB0byBtb3ZlIHRvIHRoZSBuZXcgYmxvY2txdW90ZS4KICAgICBOb2RlKiBzdGFy
dE5vZGUgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICAgICAgCisgICAgQVNTRVJUKHN0YXJ0
Tm9kZSk7CiAgICAgLy8gU3BsaXQgYXQgcG9zIGlmIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5v
ZGUuCi0gICAgaWYgKGlzPFRleHQ+KHN0YXJ0Tm9kZSkpIHsKKyAgICBpZiAoaXM8VGV4dD4oKnN0
YXJ0Tm9kZSkpIHsKICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigqc3Rh
cnROb2RlKTsKICAgICAgICAgaWYgKCh1bnNpZ25lZClwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSA+PSB0ZXh0Tm9kZS5sZW5ndGgoKSkgewogICAgICAgICAgICAgc3RhcnROb2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChzdGFydE5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAyMTY3M2NkMGYzZjM3ZGZlM2UzYWQxYWVk
YTNjZDE0NjFkNGJjYTBiLi4zNDY0YzI3NTUyOTQ2ZWQyOTg4NzI5Yjc1ZjBmOGJkMzQ5MjhmZmJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cApAQCAtMzI0LDcgKzMyNCw4IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydExp
bmVCcmVhaygpCiAKIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzUmVtb3ZhYmxlQmxvY2so
Y29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIWlzPEhUTUxEaXZFbGVtZW50Pihub2RlKSkK
KyAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKCFpczxIVE1MRGl2RWxlbWVudD4oKm5vZGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOwpAQCAtMzc4LDcgKzM3OSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
Omluc2VydE5vZGVBdChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBjb25zdCBQb3NpCiAg
ICAgICAgICAgICBhcHBlbmROb2RlKGluc2VydENoaWxkLCBkb3duY2FzdDxDb250YWluZXJOb2Rl
PihyZWZDaGlsZCkpOwogICAgIH0gZWxzZSBpZiAoY2FyZXRNaW5PZmZzZXQocmVmQ2hpbGQpID49
IG9mZnNldCkKICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShpbnNlcnRDaGlsZCwgcmVmQ2hpbGQp
OwotICAgIGVsc2UgaWYgKGlzPFRleHQ+KHJlZkNoaWxkKSAmJiBjYXJldE1heE9mZnNldChyZWZD
aGlsZCkgPiBvZmZzZXQpIHsKKyAgICBlbHNlIGlmIChpczxUZXh0PigqcmVmQ2hpbGQpICYmIGNh
cmV0TWF4T2Zmc2V0KHJlZkNoaWxkKSA+IG9mZnNldCkgewogICAgICAgICBzcGxpdFRleHROb2Rl
KGRvd25jYXN0PFRleHQ+KHJlZkNoaWxkKSwgb2Zmc2V0KTsKIAogICAgICAgICAvLyBNdXRhdGlv
biBldmVudHMgKGJ1ZyAyMjYzNCkgZnJvbSB0aGUgdGV4dCBub2RlIGluc2VydGlvbiBtYXkgaGF2
ZSByZW1vdmVkIHRoZSByZWZDaGlsZApAQCAtNjc4LDcgKzY3OSw3IEBAIGJvb2wgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnNob3VsZFJlYmFsYW5jZUxlYWRpbmdXaGl0ZXNwYWNlRm9yKGNvbnN0IFN0
cmluZyYgdGV4CiBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpjYW5SZWJhbGFuY2UoY29uc3Qg
UG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5j
b250YWluZXJOb2RlKCk7Ci0gICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5cGUoKSAhPSBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yIHx8ICFub2RlIHx8ICFpczxUZXh0Pihub2RlKSkK
KyAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IgfHwgIWlzPFRleHQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpub2RlKTsKQEAgLTc1MCw3ICs3
NTEsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlT25U
ZXh0U3Vic3RyaW5nKFBhc3NSZWZQdHI8VGV4dD4gcAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQoUG9zaXRpb24mIHBvc2l0aW9u
KQogewogICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwotICAgIGlm
ICghbm9kZSB8fCAhaXM8VGV4dD4obm9kZSkpCisgICAgaWYgKCFpczxUZXh0Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUp
OwogICAgIApAQCAtNzY5LDkgKzc3MCw5IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBy
ZXBhcmVXaGl0ZXNwYWNlQXRQb3NpdGlvbkZvclNwbGl0KFBvc2l0aW9uJiBwb3NpdGlvCiAgICAg
VmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzVmlzaWJsZVBvcyh2aXNpYmxlUG9zLnByZXZpb3VzKCkp
OwogICAgIFBvc2l0aW9uIHByZXZpb3VzKHByZXZpb3VzVmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVu
dCgpKTsKICAgICAKLSAgICBpZiAoZGVwcmVjYXRlZElzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHBy
ZXZpb3VzVmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBpczxUZXh0PihwcmV2aW91cy5k
ZXByZWNhdGVkTm9kZSgpKSAmJiAhaXM8SFRNTEJSRWxlbWVudD4ocHJldmlvdXMuZGVwcmVjYXRl
ZE5vZGUoKSkpCisgICAgaWYgKGRlcHJlY2F0ZWRJc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShwcmV2
aW91c1Zpc2libGVQb3MuY2hhcmFjdGVyQWZ0ZXIoKSkgJiYgaXM8VGV4dD4oKnByZXZpb3VzLmRl
cHJlY2F0ZWROb2RlKCkpICYmICFpczxIVE1MQlJFbGVtZW50PigqcHJldmlvdXMuZGVwcmVjYXRl
ZE5vZGUoKSkpCiAgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoZG93
bmNhc3Q8VGV4dD4ocHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKSksIHByZXZpb3VzLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7Ci0gICAgaWYg
KGRlcHJlY2F0ZWRJc0NvbGxhcHNpYmxlV2hpdGVzcGFjZSh2aXNpYmxlUG9zLmNoYXJhY3RlckFm
dGVyKCkpICYmIGlzPFRleHQ+KHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpICYmICFpczxIVE1M
QlJFbGVtZW50Pihwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkKKyAgICBpZiAoZGVwcmVjYXRl
ZElzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHZpc2libGVQb3MuY2hhcmFjdGVyQWZ0ZXIoKSkgJiYg
aXM8VGV4dD4oKnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpICYmICFpczxIVE1MQlJFbGVtZW50
PigqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2Rl
UHJlc2VydmluZ01hcmtlcnMoZG93bmNhc3Q8VGV4dD4ocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KSksIHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3Bh
Y2VTdHJpbmcoKSk7CiB9CiAKQEAgLTg3Nyw3ICs4NzgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0CiAKICAgICBWZWN0b3I8UmVmUHRyPFRleHQ+PiBub2RlczsKICAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlKSkgewotICAgICAgICBpZiAoaXM8VGV4dD4obm9kZSkpCisgICAgICAgIGlmIChp
czxUZXh0Pigqbm9kZSkpCiAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoZG93bmNhc3Q8VGV4dD4o
bm9kZSkpOwogICAgICAgICBpZiAobm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtOTUxLDcgKzk1Miw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQoY29uc3QgUG9zaXRpb24mIHApCiAgICAgQVNTRVJUKGxp
bmVCcmVha0V4aXN0c0F0UG9zaXRpb24ocCkpOwogICAgIAogICAgIC8vIFdlIGFyZSBjZXJ0YWlu
IHRoYXQgdGhlIHBvc2l0aW9uIGlzIGF0IGEgbGluZSBicmVhaywgYnV0IGl0IG1heSBiZSBhIGJy
IG9yIGEgcHJlc2VydmVkIG5ld2xpbmUuCi0gICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KHAuYW5j
aG9yTm9kZSgpKSkgeworICAgIGlmIChpczxIVE1MQlJFbGVtZW50PigqcC5hbmNob3JOb2RlKCkp
KSB7CiAgICAgICAgIHJlbW92ZU5vZGUocC5hbmNob3JOb2RlKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTEyMCw4ICsxMTIxLDkgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
Y2xlYW51cEFmdGVyRGVsZXRpb24oVmlzaWJsZVBvc2l0aW9uIGRlc3RpbmF0aW9uKQogICAgICAg
ICAvLyBOb3RlOiBXZSB3YW50IHRoZSByaWdodG1vc3QgY2FuZGlkYXRlLgogICAgICAgICBQb3Np
dGlvbiBwb3NpdGlvbiA9IGNhcmV0QWZ0ZXJEZWxldGUuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3Ry
ZWFtKCk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwor
ICAgICAgICBBU1NFUlQobm9kZSk7CiAgICAgICAgIC8vIE5vcm1hbGx5IGRlbGV0aW9uIHdpbGwg
bGVhdmUgYSBiciBhcyBhIHBsYWNlaG9sZGVyLgotICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVu
dD4obm9kZSkpCisgICAgICAgIGlmIChpczxIVE1MQlJFbGVtZW50Pigqbm9kZSkpCiAgICAgICAg
ICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobm9kZSk7CiAgICAgICAgIC8vIElmIHRo
ZSBzZWxlY3Rpb24gdG8gbW92ZSB3YXMgZW1wdHkgYW5kIGluIGFuIGVtcHR5IGJsb2NrIHRoYXQg
CiAgICAgICAgIC8vIGRvZXNuJ3QgcmVxdWlyZSBhIHBsYWNlaG9sZGVyIHRvIHByb3AgaXRzZWxm
IG9wZW4gKGxpa2UgYSBib3JkZXJlZApAQCAtMTM0Nyw5ICsxMzQ5LDkgQEAgYm9vbCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0oKQogICAgICAgICB8fCBsaXN0
Tm9kZSA9PSBlbXB0eUxpc3RJdGVtLT5yb290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxFbGVtZW50PiBuZXdCbG9jayA9IDA7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IG5ld0Jsb2NrOwogICAgIGlmIChDb250YWluZXJOb2RlKiBibG9ja0VuY2xv
c2luZ0xpc3QgPSBsaXN0Tm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1M
TElFbGVtZW50PihibG9ja0VuY2xvc2luZ0xpc3QpKSB7IC8vIGxpc3ROb2RlIGlzIGluc2lkZSBh
bm90aGVyIGxpc3QgaXRlbQorICAgICAgICBpZiAoaXM8SFRNTExJRWxlbWVudD4oKmJsb2NrRW5j
bG9zaW5nTGlzdCkpIHsgLy8gbGlzdE5vZGUgaXMgaW5zaWRlIGFub3RoZXIgbGlzdCBpdGVtCiAg
ICAgICAgICAgICBpZiAodmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKGJsb2NrRW5jbG9zaW5nTGlz
dCkgPT0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKGxpc3ROb2RlLmdldCgpKSkgewogICAgICAg
ICAgICAgICAgIC8vIElmIGxpc3ROb2RlIGFwcGVhcnMgYXQgdGhlIGVuZCBvZiB0aGUgb3V0ZXIg
bGlzdCBpdGVtLCB0aGVuIG1vdmUgbGlzdE5vZGUgb3V0c2lkZSBvZiB0aGlzIGxpc3QgaXRlbQog
ICAgICAgICAgICAgICAgIC8vIGUuZy4gPHVsPjxsaT5oZWxsbyA8dWw+PGxpPjxicj48L2xpPjwv
dWw+IDwvbGk+PC91bD4gc2hvdWxkIGJlY29tZSA8dWw+PGxpPmhlbGxvPC9saT4gPHVsPjxsaT48
YnI+PC9saT48L3VsPiA8L3VsPiBhZnRlciB0aGlzIHNlY3Rpb24KQEAgLTE0MzYsNyArMTQzOCw3
IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eU1haWxCbG9ja3F1
b3RlZFBhcmFncmFwaCgpCiAgICAgCiAgICAgaWYgKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCkt
Pmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMo
Y2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSk7Ci0gICAgZWxzZSBpZiAoaXM8VGV4dD4oY2FyZXRQ
b3MuZGVwcmVjYXRlZE5vZGUoKSkpIHsKKyAgICBlbHNlIGlmIChpczxUZXh0PigqY2FyZXRQb3Mu
ZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgQVNTRVJUKGNhcmV0UG9zLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPT0gMCk7CiAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8
VGV4dD4oKmNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnROb2RlID0gdGV4dE5vZGUucGFyZW50Tm9kZSgpOwpAQCAtMTUyNCw3ICsxNTI2LDcg
QEAgUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUcmVlVG9Ob2Rl
KE5vZGUqIHN0YXJ0LCBOb2RlKiBlbmQsIGIKIAogICAgIFJlZlB0cjxOb2RlPiBlbmROb2RlID0g
ZW5kOwogICAgIGZvciAobm9kZSA9IHN0YXJ0OyBub2RlICYmIG5vZGUtPnBhcmVudE5vZGUoKSAh
PSBlbmROb2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmICghaXM8
RWxlbWVudD4obm9kZS0+cGFyZW50Tm9kZSgpKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pigq
bm9kZS0+cGFyZW50Tm9kZSgpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAvLyBEbyBu
b3Qgc3BsaXQgYSBub2RlIHdoZW4gZG9pbmcgc28gaW50cm9kdWNlcyBhbiBlbXB0eSBub2RlLgog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25JblBhcmVudCA9IGZpcnN0UG9zaXRpb25J
bk5vZGUobm9kZS0+cGFyZW50Tm9kZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDkwYTFlZmU3N2E2NWM0OGQwZjJlZWI0
ZTQ4ZTk1NmZjZjk3NGRlZDIuLmY3Njc2ZTkwYWFiNTgwMDJiN2RhMmFkYTNkNDhjNThjMjBhMDkx
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9s
bGVyLmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIHN0YXRpYyBIVE1MRWxlbWVudCogZW5jbG9zaW5n
RGVsZXRhYmxlRWxlbWVudChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgTm9kZSogZWxlbWVudCA9IGVuY2xvc2luZ05vZGVP
ZlR5cGUoZmlyc3RQb3NpdGlvbkluTm9kZShjb250YWluZXIpLCAmaXNEZWxldGFibGVFbGVtZW50
KTsKLSAgICByZXR1cm4gZWxlbWVudCAmJiBpczxIVE1MRWxlbWVudD4oZWxlbWVudCkgPyBkb3du
Y2FzdDxIVE1MRWxlbWVudD4oZWxlbWVudCkgOiBudWxscHRyOworICAgIHJldHVybiBpczxIVE1M
RWxlbWVudD4oZWxlbWVudCkgPyBkb3duY2FzdDxIVE1MRWxlbWVudD4oZWxlbWVudCkgOiBudWxs
cHRyOwogfQogCiB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYWJj
NTMzNmYwMTU1MjUwMmQ0YzY1Y2Y1NDY3YjRlMGIyMzAzZTg1NC4uZWVjYTk0Mzk2NTRhNDI0ZDgw
NTIzZjdlYzE2ZDUyODBmM2M1YzQyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC00NTksMTQgKzQ1OSwxNCBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgIG1ha2VTdHls
aW5nRWxlbWVudHNEaXJlY3RDaGlsZHJlbk9mRWRpdGFibGVSb290VG9QcmV2ZW50U3R5bGVMb3Nz
KCk7CiAKICAgICAvLyBOZXZlciByZW1vdmUgdGhlIHN0YXJ0IGJsb2NrIHVubGVzcyBpdCdzIGEg
dGFibGUsIGluIHdoaWNoIGNhc2Ugd2Ugd29uJ3QgbWVyZ2UgY29udGVudCBpbi4KLSAgICBpZiAo
c3RhcnROb2RlID09IG1fc3RhcnRCbG9jayAmJiAhc3RhcnRPZmZzZXQgJiYgY2FuSGF2ZUNoaWxk
cmVuRm9yRWRpdGluZyhzdGFydE5vZGUpICYmICFpczxIVE1MVGFibGVFbGVtZW50PihzdGFydE5v
ZGUpKSB7CisgICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgIXN0YXJ0T2Zmc2V0
ICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoc3RhcnROb2RlKSAmJiAhaXM8SFRNTFRhYmxl
RWxlbWVudD4oKnN0YXJ0Tm9kZSkpIHsKICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgICAg
ICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7CiAgICAgICAgIGlm
ICghc3RhcnROb2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChzdGFy
dE9mZnNldCA+PSBjYXJldE1heE9mZnNldChzdGFydE5vZGUpICYmIGlzPFRleHQ+KHN0YXJ0Tm9k
ZSkpIHsKKyAgICBpZiAoc3RhcnRPZmZzZXQgPj0gY2FyZXRNYXhPZmZzZXQoc3RhcnROb2RlKSAm
JiBpczxUZXh0Pigqc3RhcnROb2RlKSkgewogICAgICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8
VGV4dD4oKnN0YXJ0Tm9kZSk7CiAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCgpID4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9kZSkpKQogICAgICAgICAgICAgZGVs
ZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0LCBjYXJldE1heE9mZnNldChzdGFydE5vZGUpLCB0ZXh0Lmxl
bmd0aCgpIC0gY2FyZXRNYXhPZmZzZXQoc3RhcnROb2RlKSk7CkBAIC00ODMsNyArNDgzLDcgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKIAogICAg
IGlmIChzdGFydE5vZGUgPT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpIHsKICAg
ICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gc3Rh
cnRPZmZzZXQgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoaXM8VGV4dD4oc3RhcnROb2RlKSkgewor
ICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmltbWVkCiAgICAgICAgICAgICAg
ICAgVGV4dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCpzdGFydE5vZGUpOwogICAgICAgICAgICAg
ICAgIGRlbGV0ZVRleHRGcm9tTm9kZSgmdGV4dCwgc3RhcnRPZmZzZXQsIG1fZG93bnN0cmVhbUVu
ZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gc3RhcnRPZmZzZXQpOwpAQCAtNTAzLDcgKzUw
Myw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgp
CiAgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlKHN0YXJ0Tm9kZSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc3RhcnRPZmZzZXQgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoaXM8VGV4dD4oc3RhcnRO
b2RlKSkgeworICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmltbWVkCiAgICAg
ICAgICAgICAgICAgVGV4dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCpub2RlKTsKICAgICAgICAg
ICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUoJnRleHQsIHN0YXJ0T2Zmc2V0LCB0ZXh0Lmxlbmd0
aCgpIC0gc3RhcnRPZmZzZXQpOwpAQCAtNTExLDcgKzUxMSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIG5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KHN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzdGFydE5vZGUgPT0g
bV91cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpICYmIGlzPFRleHQ+KHN0YXJ0Tm9kZSkpIHsK
KyAgICAgICAgfSBlbHNlIGlmIChzdGFydE5vZGUgPT0gbV91cHN0cmVhbUVuZC5kZXByZWNhdGVk
Tm9kZSgpICYmIGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgICAgICBUZXh0JiB0ZXh0
ID0gZG93bmNhc3Q8VGV4dD4oKm1fdXBzdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAg
ICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUoJnRleHQsIDAsIG1fdXBzdHJlYW1FbmQuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgIH0KQEAgLTU0Myw3ICs1NDMsNyBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAg
ICAgICAgIC8vIFRoZSBub2RlIGl0c2VsZiBpcyBmdWxseSBzZWxlY3RlZCwgbm90IGp1c3QgaXRz
IGNvbnRlbnRzLiAgRGVsZXRlIGl0LgogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobV9kb3du
c3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBpZiAoaXM8VGV4dD4obV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCptX2Rvd25zdHJlYW1FbmQuZGVwcmVj
YXRlZE5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhh
dCBuZWVkcyB0byBiZSB0cmltbWVkCiAgICAgICAgICAgICAgICAgICAgIFRleHQmIHRleHQgPSBk
b3duY2FzdDxUZXh0PigqbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCkgPiAwKSB7CkBAIC01NzYsMTIgKzU3NiwxMiBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OmZpeHVwV2hpdGVzcGFjZSgpCiB7CiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICAvLyBGSVhNRTogaXNSZW5kZXJlZENoYXJhY3Rl
ciBzaG91bGQgYmUgcmVtb3ZlZCwgYW5kIHdlIHNob3VsZCB1c2UgVmlzaWJsZVBvc2l0aW9uOjpj
aGFyYWN0ZXJBZnRlciBhbmQgVmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJCZWZvcmUKLSAgICBp
ZiAobV9sZWFkaW5nV2hpdGVzcGFjZS5pc05vdE51bGwoKSAmJiAhbV9sZWFkaW5nV2hpdGVzcGFj
ZS5pc1JlbmRlcmVkQ2hhcmFjdGVyKCkgJiYgaXM8VGV4dD4obV9sZWFkaW5nV2hpdGVzcGFjZS5k
ZXByZWNhdGVkTm9kZSgpKSkgeworICAgIGlmIChtX2xlYWRpbmdXaGl0ZXNwYWNlLmlzTm90TnVs
bCgpICYmICFtX2xlYWRpbmdXaGl0ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBpczxU
ZXh0PigqbV9sZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBU
ZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCptX2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgICAgICBBU1NFUlQoIXRleHROb2RlLnJlbmRlcmVyKCkgfHwgdGV4
dE5vZGUucmVuZGVyZXIoKS0+c3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAg
IHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoJnRleHROb2RlLCBtX2xlYWRpbmdX
aGl0ZXNwYWNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VT
dHJpbmcoKSk7CiAgICAgfQotICAgIGlmIChtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc05vdE51bGwo
KSAmJiAhbV90cmFpbGluZ1doaXRlc3BhY2UuaXNSZW5kZXJlZENoYXJhY3RlcigpICYmIGlzPFRl
eHQ+KG1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgaWYgKG1f
dHJhaWxpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmICFtX3RyYWlsaW5nV2hpdGVzcGFjZS5p
c1JlbmRlcmVkQ2hhcmFjdGVyKCkgJiYgaXM8VGV4dD4oKm1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRl
cHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4
dD4oKm1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBBU1NF
UlQoIXRleHROb2RlLnJlbmRlcmVyKCkgfHwgdGV4dE5vZGUucmVuZGVyZXIoKS0+c3R5bGUoKS5j
b2xsYXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vydmlu
Z01hcmtlcnMoJnRleHROb2RlLCBtX3RyYWlsaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwpAQCAtODY2LDcgKzg2Niw3
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgYm9vbCBzaG91
bGRSZWJhbGFjZVdoaXRlU3BhY2UgPSB0cnVlOwogICAgIGlmICghZnJhbWUoKS5lZGl0b3IoKS5i
ZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2VzSW5TZWN1cmVGaWVsZCgpKSB7CiAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGluZ1Bvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7Ci0g
ICAgICAgIGlmIChub2RlICYmIGlzPFRleHQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChpczxUZXh0
Pihub2RlKSkgewogICAgICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigq
bm9kZSk7CiAgICAgICAgICAgICBpZiAodGV4dE5vZGUubGVuZ3RoKCkpCiAgICAgICAgICAgICAg
ICAgc2hvdWxkUmViYWxhY2VXaGl0ZVNwYWNlID0gdGV4dE5vZGUucmVuZGVyZXIoKS0+c3R5bGUo
KS50ZXh0U2VjdXJpdHkoKSA9PSBUU05PTkU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdT
dHlsZS5jcHAKaW5kZXggYzA5YWNhMmIxYTk3ZjIzZDY0YmNmOGMwYjg4OGY1M2Q1ZmFjN2Y5MS4u
NzgwZDg0NzE4ODFiZjRmYTMwYWQxZDg2MWFhZjllNTllODdkYTI3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTAzNiw3ICsxMDM2LDcgQEAgUGFzc1JlZlB0
cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6d3JhcHBpbmdTdHlsZUZvclNlcmlhbGl6YXRp
b24oTm9kZSogY29udGUKIAogICAgIC8vIFdoZW4gbm90IGFubm90YXRpbmcgZm9yIGludGVyY2hh
bmdlLCB3ZSBvbmx5IHByZXNlcnZlIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbnMuCiAgICAgZm9y
IChOb2RlKiBub2RlID0gY29udGV4dDsgbm9kZSAmJiAhbm9kZS0+aXNEb2N1bWVudE5vZGUoKTsg
bm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8U3R5bGVkRWxlbWVu
dD4obm9kZSkgJiYgIWlzTWFpbEJsb2NrcXVvdGUobm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPFN0
eWxlZEVsZW1lbnQ+KCpub2RlKSAmJiAhaXNNYWlsQmxvY2txdW90ZShub2RlKSkgewogICAgICAg
ICAgICAgd3JhcHBpbmdTdHlsZS0+bWVyZ2VJbmxpbmVBbmRJbXBsaWNpdFN0eWxlT2ZFbGVtZW50
KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KG5vZGUpLCBFZGl0aW5nU3R5bGU6OkRvTm90T3ZlcnJp
ZGVWYWx1ZXMsCiAgICAgICAgICAgICAgICAgRWRpdGluZ1N0eWxlOjpFZGl0aW5nUHJvcGVydGll
c0luRWZmZWN0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGU5
Y2Q2Yjg5YTlkZWY3NTQyYjZlZTc5ZTkwMzg5YzliNzIxMzAzMjEuLjVhZjRmZmVkMTk5NTdiMTM4
YzkzZTdkMzFmMDQyNTNjN2U1YjVhMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAg
LTMyOCw4ICszMjgsNiBAQCBzdGF0aWMgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50RnJv
bUltYWdlRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAKICAgICBOb2RlKiBub2RlID0gYm9keS0+Zmlyc3RDaGlsZCgpOwotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFpczxIVE1MSW1hZ2VFbGVt
ZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxJbWFnZUVsZW1lbnQ+KG5vZGUpOwpAQCAtNTg4LDcgKzU4Niw3IEBAIGJvb2wgRWRpdG9y
OjpzaG91bGRJbnNlcnRGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50LCBQYXNzUmVmCiAgICAgCiAgICAgaWYgKGZyYWdtZW50KSB7CiAgICAgICAgIE5vZGUqIGNo
aWxkID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKGNoaWxkICYmIGZyYWdt
ZW50LT5sYXN0Q2hpbGQoKSA9PSBjaGlsZCAmJiBpczxDaGFyYWN0ZXJEYXRhPihjaGlsZCkpCisg
ICAgICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPihjaGlsZCkgJiYgZnJhZ21lbnQtPmxhc3RDaGls
ZCgpID09IGNoaWxkKQogICAgICAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnRU
ZXh0KGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpjaGlsZCkuZGF0YSgpLCByZXBsYWNpbmdET01S
YW5nZS5nZXQoKSwgZ2l2ZW5BY3Rpb24pOwogICAgIH0KIApAQCAtMTY2MCw3ICsxNjU4LDcgQEAg
dm9pZCBFZGl0b3I6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGly
ZWN0aW9uKQogI2VuZGlmCiAgICAgICAgIAogICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0g
ZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpOwotICAgIGlmIChmb2N1c2VkRWxlbWVudCAmJiBp
czxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KSkgeworICAgIGlm
IChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CiAgICAg
ICAgIGlmIChkaXJlY3Rpb24gPT0gTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24pCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigq
Zm9jdXNlZEVsZW1lbnQpLnNldEF0dHJpYnV0ZShkaXJBdHRyLCBkaXJlY3Rpb24gPT0gTGVmdFRv
UmlnaHRXcml0aW5nRGlyZWN0aW9uID8gImx0ciIgOiAicnRsIik7CkBAIC0xODY1LDcgKzE4NjMs
NyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgICAgICBOb2RlKiBleHRlbnROb2RlID0g
ZXh0ZW50LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIHVuc2lnbmVkIGV4dGVudE9mZnNldCA9
IGV4dGVudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogCi0gICAgICAgIGlmIChiYXNlTm9k
ZSAmJiBiYXNlTm9kZSA9PSBleHRlbnROb2RlICYmIGlzPFRleHQ+KGJhc2VOb2RlKSAmJiBiYXNl
T2Zmc2V0ICsgdGV4dC5sZW5ndGgoKSA9PSBleHRlbnRPZmZzZXQpIHsKKyAgICAgICAgaWYgKGlz
PFRleHQ+KGJhc2VOb2RlKSAmJiBiYXNlTm9kZSA9PSBleHRlbnROb2RlICYmIGJhc2VPZmZzZXQg
KyB0ZXh0Lmxlbmd0aCgpID09IGV4dGVudE9mZnNldCkgewogICAgICAgICAgICAgbV9jb21wb3Np
dGlvbk5vZGUgPSBkb3duY2FzdDxUZXh0PihiYXNlTm9kZSk7CiAgICAgICAgICAgICBtX2NvbXBv
c2l0aW9uU3RhcnQgPSBiYXNlT2Zmc2V0OwogICAgICAgICAgICAgbV9jb21wb3NpdGlvbkVuZCA9
IGV4dGVudE9mZnNldDsKQEAgLTIzNzgsNyArMjM3Niw3IEBAIGJvb2wgRWRpdG9yOjppc1NwZWxs
Q2hlY2tpbmdFbmFibGVkRm9yKE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQg
PSBpczxFbGVtZW50Pihub2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFy
ZW50RWxlbWVudCgpOworICAgIGNvbnN0IEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gaXM8RWxl
bWVudD4oKm5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJlbnRFbGVt
ZW50KCk7CiAgICAgaWYgKCFmb2N1c2VkRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBmb2N1c2VkRWxlbWVudC0+aXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwpAQCAt
MzEwNSw5ICszMTAzLDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxl
bWVudCgpIGNvbnN0CiAKIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChF
bGVtZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0
dXJuOwotICAgIEFTU0VSVChpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSk7CisgICAgQVNTRVJU
KCFlbGVtZW50IHx8IGlzPFN0eWxlZEVsZW1lbnQ+KCplbGVtZW50KSk7CiAgICAgaWYgKCFpczxT
dHlsZWRFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKaW5kZXggMzE3NDVmOTM1YmZiYjc5
MGY5ZDFiNmY0ZDJlZDgxNDVkMzZjYzczYy4uZjlkOWI5MGM4NGI1MzhmM2M5OTEwODlhMDJiZDVi
Mjg4MmUzOTYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9j
a0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21t
YW5kLmNwcApAQCAtNDMsNyArNDMsNyBAQCBzdGF0aWMgTm9kZSogZW5jbG9zaW5nQmxvY2tUb1Nw
bGl0VHJlZVRvKE5vZGUqIHN0YXJ0Tm9kZSk7CiBzdGF0aWMgYm9vbCBpc0VsZW1lbnRGb3JGb3Jt
YXRCbG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhOb2RlKiBub2RlKQogewotICAgIHJldHVybiBpczxF
bGVtZW50Pihub2RlKSAmJiBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhkb3duY2FzdDxFbGVtZW50
Pigqbm9kZSkudGFnUU5hbWUoKSk7CisgICAgcmV0dXJuIGlzPEVsZW1lbnQ+KCpub2RlKSAmJiBp
c0VsZW1lbnRGb3JGb3JtYXRCbG9jayhkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkudGFnUU5hbWUo
KSk7CiB9CiAKIEZvcm1hdEJsb2NrQ29tbWFuZDo6Rm9ybWF0QmxvY2tDb21tYW5kKERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggYmEzYmUxMWRlODMzZGM3NzNjZjUwODYz
NmNlMTU4YzRiZmZlNDlmYy4uZTgyNDIxMDMyN2RhOWVhMTI0MTQ1ODBmMzIyOGE3ZjY2ZmQwNDJl
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTM5OCw3
ICszOTgsNyBAQCBzdGF0aWMgYm9vbCByZW1vdmluZ05vZGVSZW1vdmVzUG9zaXRpb24oTm9kZSog
bm9kZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIGlmIChwb3NpdGlvbi5hbmNob3JO
b2RlKCkgPT0gbm9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIWlzPEVsZW1l
bnQ+KG5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7
CkBAIC0xNDkxLDcgKzE0OTEsNyBAQCB2b2lkIENhcmV0QmFzZTo6cGFpbnRDYXJldChOb2RlKiBu
b2RlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaQogCiAgICAgQ29s
b3IgY2FyZXRDb2xvciA9IENvbG9yOjpibGFjazsKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2Ug
PSBDb2xvclNwYWNlRGV2aWNlUkdCOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50
Pihub2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgp
OworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxF
bGVtZW50Pihub2RlKSA6IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKICAgICBFbGVtZW50KiByb290
RWRpdGFibGVFbGVtZW50ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogCiAgICAgaWYg
KGVsZW1lbnQgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkgewpAQCAtMTUyMiw5ICsxNTIyLDkgQEAg
dm9pZCBDYXJldEJhc2U6OnBhaW50Q2FyZXQoTm9kZSogbm9kZSwgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBMYXlvdXRQb2kKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6ZGVidWdSZW5k
ZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBib29sIHNlbGVjdGVkKSBjb25zdAogewotICAg
IGlmIChpczxFbGVtZW50PihyZW5kZXJlci0+bm9kZSgpKSkgewotICAgICAgICBFbGVtZW50KiBl
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSk7Ci0gICAgICAgIGZw
cmludGYoc3RkZXJyLCAiJXMlc1xuIiwgc2VsZWN0ZWQgPyAiPT0+ICIgOiAiICAgICIsIGVsZW1l
bnQtPmxvY2FsTmFtZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChpczxFbGVt
ZW50PigqcmVuZGVyZXItPm5vZGUoKSkpIHsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRv
d25jYXN0PEVsZW1lbnQ+KCpyZW5kZXJlci0+bm9kZSgpKTsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICIlcyVzXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIgICAgIiwgZWxlbWVudC5sb2NhbE5h
bWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5p
c1RleHQoKSkgewogICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRl
eHQocmVuZGVyZXIpOwogICAgICAgICBpZiAoIXRleHRSZW5kZXJlci0+dGV4dExlbmd0aCgpIHx8
ICF0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpKSB7CkBAIC0xNjY4LDcgKzE2NjgsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRv
Y3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwotICAgIGlmIChmb2N1c2VkRWxlbWVudCAmJiBpczxI
VE1MU2VsZWN0RWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CisgICAgaWYgKGlzPEhUTUxTZWxl
Y3RFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkpIHsKICAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQm
IHNlbGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKmZvY3VzZWRFbGVt
ZW50KTsKICAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQuY2FuU2VsZWN0QWxsKCkpIHsKICAgICAg
ICAgICAgIHNlbGVjdEVsZW1lbnQuc2VsZWN0QWxsKCk7CkBAIC0xNjg2LDcgKzE2ODYsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogICAgICAgICAgICAgc2VsZWN0U3RhcnRU
YXJnZXQgPSByb290LmdldCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX3NlbGVjdGlv
bi5pc05vbmUoKSAmJiBmb2N1c2VkRWxlbWVudCkgewotICAgICAgICAgICAgaWYgKGlzPEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlm
IChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KSkgewogICAg
ICAgICAgICAgICAgIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZm9jdXNl
ZEVsZW1lbnQpLnNlbGVjdCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KQEAgLTIwMjIsOCArMjAyMiw4IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JG
b3JtKEVsZW1lbnQqIHN0YXJ0KQogICAgIGF1dG8gZGVzY2VuZGFudHMgPSBkZXNjZW5kYW50c09m
VHlwZTxIVE1MRWxlbWVudD4oc3RhcnQtPmRvY3VtZW50KCkpOwogICAgIGZvciAoYXV0byBpdCA9
IGRlc2NlbmRhbnRzLmZyb20oKnN0YXJ0KSwgZW5kID0gZGVzY2VuZGFudHMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICBIVE1MRWxlbWVudCYgZWxlbWVudCA9ICppdDsKLSAgICAg
ICAgaWYgKGlzPEhUTUxGb3JtRWxlbWVudD4oJmVsZW1lbnQpKQotICAgICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxGb3JtRWxlbWVudD4oJmVsZW1lbnQpOworICAgICAgICBpZiAoaXM8SFRN
TEZvcm1FbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8SFRN
TEZvcm1FbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KGVsZW1lbnQpLmZvcm0oKTsKICAgICAgICAgaWYgKGlzPEhUTUxGcmFtZUVs
ZW1lbnRCYXNlPihlbGVtZW50KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKaW5kZXggNDMzNmM1Y2EyNDgzNGJmMzE2MTgyMmY0ZDE5
YTFiZmQzMzY3NWYzNy4uNmVlMjFkOTIyNzNkY2U1NWYxMjQ4NmY4Zjk3ODdhMjY4MGVlMzkwMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQu
Y3BwCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0Fw
cGx5KCkKICAgICAvLyBGSVhNRTogTmVlZCB0byBtZXJnZSB0ZXh0IG5vZGVzIHdoZW4gaW5zZXJ0
aW5nIGp1c3QgYWZ0ZXIgb3IgYmVmb3JlIHRleHQuCiAgICAgCiAgICAgaWYgKGlzRW5kT2ZQYXJh
Z3JhcGgoY2FyZXQpICYmICFsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbihjYXJldCkp
IHsKLSAgICAgICAgYm9vbCBuZWVkRXh0cmFMaW5lQnJlYWsgPSAhaXM8SFRNTEhSRWxlbWVudD4o
cG9zLmRlcHJlY2F0ZWROb2RlKCkpICYmICFpczxIVE1MVGFibGVFbGVtZW50Pihwb3MuZGVwcmVj
YXRlZE5vZGUoKSk7CisgICAgICAgIGJvb2wgbmVlZEV4dHJhTGluZUJyZWFrID0gIWlzPEhUTUxI
UkVsZW1lbnQ+KCpwb3MuZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+
KCpwb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIAogICAgICAgICBpbnNlcnROb2RlQXQo
bm9kZVRvSW5zZXJ0LmdldCgpLCBwb3MpOwogICAgICAgICAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2
b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgIH0gZWxzZSBpZiAocG9z
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQocG9zLmRlcHJlY2F0
ZWROb2RlKCkpIHx8ICFwb3MuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAg
ICAgIGluc2VydE5vZGVBdChub2RlVG9JbnNlcnQuZ2V0KCksIHBvcyk7CiAgICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
bm9kZVRvSW5zZXJ0LmdldCgpKSwgRE9XTlNUUkVBTSwgZW5kaW5nU2VsZWN0aW9uKCkuaXNEaXJl
Y3Rpb25hbCgpKSk7Ci0gICAgfSBlbHNlIGlmIChpczxUZXh0Pihwb3MuZGVwcmVjYXRlZE5vZGUo
KSkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPFRleHQ+KCpwb3MuZGVwcmVjYXRlZE5vZGUoKSkpIHsK
ICAgICAgICAgLy8gU3BsaXQgYSB0ZXh0IG5vZGUKICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBk
b3duY2FzdDxUZXh0PigqcG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBzcGxpdFRleHRO
b2RlKCZ0ZXh0Tm9kZSwgcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAppbmRleCAxMTZlMjFkNjNjZmY4
NWM2NjhlYTBmMDM2ZmU5NTZiNDk3NzA2ZWYxLi41OGU1YzcxMjMyMGVkNTJiNzM0OGEwYWZjM2I2
OGJiZGI3YzA2M2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExp
c3RDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmNwcApAQCAtNzQsNyArNzQsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRM
aXN0Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhQYXNzUmVmUHRyPAogICAgIGlm
ICghbGlzdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgRWxlbWVudCogc2libGluZyA9
IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGxpc3QuZ2V0KCkpOwotICAgIGlmICghc2li
bGluZyB8fCAhaXM8SFRNTEVsZW1lbnQ+KHNpYmxpbmcpKQorICAgIGlmICghaXM8SFRNTEVsZW1l
bnQ+KHNpYmxpbmcpKQogICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAKICAgICBSZWZQ
dHI8SFRNTEVsZW1lbnQ+IG5leHRMaXN0ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KHNpYmxpbmcp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yQ29tbWFuZC5jcHAKaW5kZXggZTlmZTVhZDRkZTM2MDc4ZWNjOWIxYjEyYTkwNmNj
ZmY0OWYxNGIwZS4uNjA2MTE3Yjg4YWViZTZlZjczMmZlNDlmNjZlYzNkYWYwN2VlMDQyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNl
cGFyYXRvckNvbW1hbmQuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIXN0YXJ0QmxvY2sKICAgICAg
ICAgfHwgIXN0YXJ0QmxvY2stPm5vblNoYWRvd0JvdW5kYXJ5UGFyZW50Tm9kZSgpCiAgICAgICAg
IHx8IGlzVGFibGVDZWxsKHN0YXJ0QmxvY2suZ2V0KCkpCi0gICAgICAgIHx8IGlzPEhUTUxGb3Jt
RWxlbWVudD4oc3RhcnRCbG9jay5nZXQoKSkKKyAgICAgICAgfHwgaXM8SFRNTEZvcm1FbGVtZW50
Pigqc3RhcnRCbG9jaykKICAgICAgICAgLy8gRklYTUU6IElmIHRoZSBub2RlIGlzIGhpZGRlbiwg
d2UgZG9uJ3QgaGF2ZSBhIGNhbm9uaWNhbCBwb3NpdGlvbiBzbyB3ZSB3aWxsIGRvIHRoZSB3cm9u
ZyB0aGluZyBmb3IgdGFibGVzIGFuZCA8aHI+LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDAzNDIKICAgICAgICAgfHwgKCFjYW5vbmljYWxQb3MuaXNOdWxsKCkgJiYg
Y2Fub25pY2FsUG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgY2Fub25pY2FsUG9z
LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSkKICAgICAgICAgfHwgKCFj
YW5vbmljYWxQb3MuaXNOdWxsKCkgJiYgY2Fub25pY2FsUG9zLmRlcHJlY2F0ZWROb2RlKCktPmhh
c1RhZ05hbWUoaHJUYWcpKSkgewpAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgUG9zaXRpb24gbGVhZGluZ1doaXRl
c3BhY2UgPSBpbnNlcnRpb25Qb3NpdGlvbi5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RF
RkFVTFRfQUZGSU5JVFkpOwogICAgIC8vIEZJWE1FOiBsZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9u
IGlzIHJldHVybmluZyB0aGUgcG9zaXRpb24gYmVmb3JlIHByZXNlcnZlZCBuZXdsaW5lcyBmb3Ig
cG9zaXRpb25zCiAgICAgLy8gYWZ0ZXIgdGhlIHByZXNlcnZlZCBuZXdsaW5lLCBjYXVzaW5nIHRo
ZSBuZXdsaW5lIHRvIGJlIHR1cm5lZCBpbnRvIGEgbmJzcC4KLSAgICBpZiAobGVhZGluZ1doaXRl
c3BhY2UuaXNOb3ROdWxsKCkgJiYgaXM8VGV4dD4obGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRl
ZE5vZGUoKSkpIHsKKyAgICBpZiAoaXM8VGV4dD4obGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRl
ZE5vZGUoKSkpIHsKICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqbGVh
ZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIEFTU0VSVCghdGV4dE5v
ZGUucmVuZGVyZXIoKSB8fCB0ZXh0Tm9kZS5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNlV2hp
dGVTcGFjZSgpKTsKICAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycygm
dGV4dE5vZGUsIGxlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEs
IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBJbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICAvLyBTcGxp
dCBhdCBwb3MgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZS4KICAgICBQb3NpdGlvbiBw
b3NpdGlvbkFmdGVyU3BsaXQ7Ci0gICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmFuY2hvclR5cGUo
KSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIGlzPFRleHQ+KGluc2Vy
dGlvblBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkpIHsKKyAgICBpZiAoaW5zZXJ0aW9uUG9zaXRp
b24uYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYg
aXM8VGV4dD4oKmluc2VydGlvblBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkpIHsKICAgICAgICAg
UmVmUHRyPFRleHQ+IHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oaW5zZXJ0aW9uUG9zaXRpb24u
Y29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgYm9vbCBhdEVuZCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbnNlcnRpb25Qb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgPj0gdGV4dE5v
ZGUtPmxlbmd0aCgpOwogICAgICAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSA+IDAgJiYgIWF0RW5kKSB7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBJ
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIC8v
IENsZWFyIG91dCBhbGwgd2hpdGVzcGFjZSBhbmQgaW5zZXJ0IG9uZSBub24tYnJlYWtpbmcgc3Bh
Y2UKICAgICAgICAgICAgIEFTU0VSVCghcG9zaXRpb25BZnRlclNwbGl0LmNvbnRhaW5lck5vZGUo
KS0+cmVuZGVyZXIoKSB8fCBwb3NpdGlvbkFmdGVyU3BsaXQuY29udGFpbmVyTm9kZSgpLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgICAgIGRlbGV0
ZUluc2lnbmlmaWNhbnRUZXh0RG93bnN0cmVhbShwb3NpdGlvbkFmdGVyU3BsaXQpOwotICAgICAg
ICAgICAgaWYgKGlzPFRleHQ+KHBvc2l0aW9uQWZ0ZXJTcGxpdC5kZXByZWNhdGVkTm9kZSgpKSkK
KyAgICAgICAgICAgIGlmIChpczxUZXh0PigqcG9zaXRpb25BZnRlclNwbGl0LmRlcHJlY2F0ZWRO
b2RlKCkpKQogICAgICAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZShkb3duY2FzdDxUZXh0
Pihwb3NpdGlvbkFmdGVyU3BsaXQuY29udGFpbmVyTm9kZSgpKSwgMCwgbm9uQnJlYWtpbmdTcGFj
ZVN0cmluZygpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggYTcwMWY4OTBmMGZhMGQyYWNmOWY2MTAwZWRjMDg1
NmNhYjYxMWZlYi4uYmRkNTlhMzc0YjU4Y2JiMGM0ZjNjODU1YjI5ODhhZDY4YTc1OTRkYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTI1MCw3
ICsyNTAsNyBAQCBQb3NpdGlvbiBJbnNlcnRUZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKGNvbnN0IFBv
c2l0aW9uJiBwb3MpCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHNwYW5Ob2RlID0gY3JlYXRlVGFiU3Bh
bkVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgCiAgICAgLy8gcGxhY2UgaXQKLSAgICBpZiAoIWlz
PFRleHQ+KG5vZGUpKSB7CisgICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpIHsKICAgICAgICAgaW5z
ZXJ0Tm9kZUF0KHNwYW5Ob2RlLmdldCgpLCBpbnNlcnRQb3MpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KG5vZGUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCAxNTVlMTdhZjc1OWI0MDEwYTk2ZjQ0ZTgwYzdhODkzMDQzMWY2NjhkLi40NTgzNjNiMDQ3Zjdi
NjA3YWE1ODg4NmEwY2E5NDFkNDU4NDNkYmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDQ4LDcgKzQ0OCw3IEBAIHN0
YXRpYyBib29sIGlzSGVhZGVyRWxlbWVudChjb25zdCBOb2RlKiBhKQogCiBzdGF0aWMgYm9vbCBo
YXZlU2FtZVRhZ05hbWUoTm9kZSogYSwgTm9kZSogYikKIHsKLSAgICByZXR1cm4gYSAmJiBiICYm
IGlzPEVsZW1lbnQ+KGEpICYmIGlzPEVsZW1lbnQ+KGIpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCph
KS50YWdOYW1lKCkgPT0gZG93bmNhc3Q8RWxlbWVudD4oKmIpLnRhZ05hbWUoKTsKKyAgICByZXR1
cm4gaXM8RWxlbWVudD4oYSkgJiYgaXM8RWxlbWVudD4oYikgJiYgZG93bmNhc3Q8RWxlbWVudD4o
KmEpLnRhZ05hbWUoKSA9PSBkb3duY2FzdDxFbGVtZW50PigqYikudGFnTmFtZSgpOwogfQogCiBi
b29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRNZXJnZShjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHNvdXJjZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBkZXN0aW5hdGlvbikKQEAgLTQ4
OCw3ICs0ODgsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRh
bnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2VydAogICAgICAgICBjb25zdCBTdHls
ZVByb3BlcnRpZXMqIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKICAgICAg
ICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbmV3SW5saW5lU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNy
ZWF0ZShpbmxpbmVTdHlsZSk7CiAgICAgICAgIGlmIChpbmxpbmVTdHlsZSkgewotICAgICAgICAg
ICAgaWYgKGlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkgeworICAgICAgICAgICAgaWYgKGlzPEhU
TUxFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICBWZWN0b3I8UXVhbGlmaWVk
TmFtZT4gYXR0cmlidXRlczsKICAgICAgICAgICAgICAgICBIVE1MRWxlbWVudCYgaHRtbEVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnQpOwogCkBAIC02ODMsNyArNjgzLDcg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rl
c0F0RW5kcyhJbnNlcnRlZE5vZGVzJiBpbnMKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgTm9kZSogbGFzdExlYWZJbnNlcnRlZCA9
IGluc2VydGVkTm9kZXMubGFzdExlYWZJbnNlcnRlZCgpOwotICAgIGlmIChsYXN0TGVhZkluc2Vy
dGVkICYmIGlzPFRleHQ+KGxhc3RMZWFmSW5zZXJ0ZWQpICYmICFoYXNSZW5kZXJlZFRleHQoZG93
bmNhc3Q8VGV4dD4oKmxhc3RMZWFmSW5zZXJ0ZWQpKQorICAgIGlmIChpczxUZXh0PihsYXN0TGVh
Zkluc2VydGVkKSAmJiAhaGFzUmVuZGVyZWRUZXh0KGRvd25jYXN0PFRleHQ+KCpsYXN0TGVhZklu
c2VydGVkKSkKICAgICAgICAgJiYgIWVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShsYXN0TGVhZkluc2VydGVkKSwgc2VsZWN0VGFnKQogICAgICAgICAm
JiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGxh
c3RMZWFmSW5zZXJ0ZWQpLCBzY3JpcHRUYWcpKSB7CiAgICAgICAgIGluc2VydGVkTm9kZXMud2ls
bFJlbW92ZU5vZGUobGFzdExlYWZJbnNlcnRlZCk7CkBAIC02OTMsNyArNjkzLDcgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0RW5kcyhJ
bnNlcnRlZE5vZGVzJiBpbnMKICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0
IGZpcnN0Tm9kZUluc2VydGVkIGlzbid0IGluc2lkZSBhIHNlbGVjdCBvciBzY3JpcHQgZWxlbWVu
dAogICAgIC8vIGJlY2F1c2UgaXQgaXMgYSB0b3AgbGV2ZWwgbm9kZSBpbiB0aGUgZnJhZ21lbnQg
YW5kIHRoZSB1c2VyIGNhbid0IGluc2VydCBpbnRvIHRob3NlIGVsZW1lbnRzLgogICAgIE5vZGUq
IGZpcnN0Tm9kZUluc2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOwot
ICAgIGlmIChmaXJzdE5vZGVJbnNlcnRlZCAmJiBpczxUZXh0PihmaXJzdE5vZGVJbnNlcnRlZCkg
JiYgIWhhc1JlbmRlcmVkVGV4dChkb3duY2FzdDxUZXh0PigqZmlyc3ROb2RlSW5zZXJ0ZWQpKSkg
eworICAgIGlmIChpczxUZXh0PihmaXJzdE5vZGVJbnNlcnRlZCkgJiYgIWhhc1JlbmRlcmVkVGV4
dChkb3duY2FzdDxUZXh0PigqZmlyc3ROb2RlSW5zZXJ0ZWQpKSkgewogICAgICAgICBpbnNlcnRl
ZE5vZGVzLndpbGxSZW1vdmVOb2RlKGZpcnN0Tm9kZUluc2VydGVkKTsKICAgICAgICAgcmVtb3Zl
Tm9kZShmaXJzdE5vZGVJbnNlcnRlZCk7CiAgICAgfQpAQCAtMTI3Myw3ICsxMjczLDcgQEAgYm9v
bCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6c2hvdWxkUGVyZm9ybVNtYXJ0UmVwbGFjZSgpIGNv
bnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEVsZW1lbnQqIHRleHRDb250cm9sID0g
ZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50
KCkuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKHRleHRDb250cm9sICYmIGlzPEhUTUxJbnB1
dEVsZW1lbnQ+KHRleHRDb250cm9sKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4
dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50
Pih0ZXh0Q29udHJvbCkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnRleHRDb250cm9s
KS5pc1Bhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBEaXNhYmxlIHNt
YXJ0IHJlcGxhY2UgZm9yIHBhc3N3b3JkIGZpZWxkcy4KIAogICAgIHJldHVybiB0cnVlOwpAQCAt
MTI5MSw3ICsxMjkxLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6YWRkU3BhY2Vz
Rm9yU21hcnRSZXBsYWNlKCkKIAogICAgIFBvc2l0aW9uIGVuZFVwc3RyZWFtID0gZW5kT2ZJbnNl
cnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpOwogICAgIE5vZGUqIGVuZE5v
ZGUgPSBlbmRVcHN0cmVhbS5jb21wdXRlTm9kZUJlZm9yZVBvc2l0aW9uKCk7Ci0gICAgaW50IGVu
ZE9mZnNldCA9IGVuZE5vZGUgJiYgaXM8VGV4dD4oZW5kTm9kZSkgPyBkb3duY2FzdDxUZXh0Pigq
ZW5kTm9kZSkubGVuZ3RoKCkgOiAwOworICAgIGludCBlbmRPZmZzZXQgPSBpczxUZXh0PihlbmRO
b2RlKSA/IGRvd25jYXN0PFRleHQ+KCplbmROb2RlKS5sZW5ndGgoKSA6IDA7CiAgICAgaWYgKGVu
ZFVwc3RyZWFtLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKSB7CiAgICAgICAgIGVuZE5vZGUgPSBlbmRVcHN0cmVhbS5jb250YWluZXJOb2RlKCk7CiAg
ICAgICAgIGVuZE9mZnNldCA9IGVuZFVwc3RyZWFtLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwpA
QCAtMTMwMCw3ICsxMzAwLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6YWRkU3Bh
Y2VzRm9yU21hcnRSZXBsYWNlKCkKICAgICBib29sIG5lZWRzVHJhaWxpbmdTcGFjZSA9ICFpc0Vu
ZE9mUGFyYWdyYXBoKGVuZE9mSW5zZXJ0ZWRDb250ZW50KSAmJiAhaXNDaGFyYWN0ZXJTbWFydFJl
cGxhY2VFeGVtcHRDb25zaWRlcmluZ05vbkJyZWFraW5nU3BhY2UoZW5kT2ZJbnNlcnRlZENvbnRl
bnQuY2hhcmFjdGVyQWZ0ZXIoKSwgZmFsc2UpOwogICAgIGlmIChuZWVkc1RyYWlsaW5nU3BhY2Ug
JiYgZW5kTm9kZSkgewogICAgICAgICBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSA9ICFlbmROb2Rl
LT5yZW5kZXJlcigpIHx8IGVuZE5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkuY29sbGFwc2VXaGl0
ZVNwYWNlKCk7Ci0gICAgICAgIGlmIChpczxUZXh0PihlbmROb2RlKSkgeworICAgICAgICBpZiAo
aXM8VGV4dD4oKmVuZE5vZGUpKSB7CiAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoZG93
bmNhc3Q8VGV4dD4oZW5kTm9kZSksIGVuZE9mZnNldCwgY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9u
QnJlYWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKICAgICAgICAgICAgIGlmIChtX2VuZE9mSW5z
ZXJ0ZWRDb250ZW50LmNvbnRhaW5lck5vZGUoKSA9PSBlbmROb2RlKQogICAgICAgICAgICAgICAg
IG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQubW92ZVRvT2Zmc2V0KG1fZW5kT2ZJbnNlcnRlZENvbnRl
bnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyAxKTsKQEAgLTEzMjQsNyArMTMyNCw3IEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNlc0ZvclNtYXJ0UmVwbGFjZSgpCiAg
ICAgYm9vbCBuZWVkc0xlYWRpbmdTcGFjZSA9ICFpc1N0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZklu
c2VydGVkQ29udGVudCkgJiYgIWlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0Q29uc2lkZXJp
bmdOb25CcmVha2luZ1NwYWNlKHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQucHJldmlvdXMoKS5jaGFy
YWN0ZXJBZnRlcigpLCB0cnVlKTsKICAgICBpZiAobmVlZHNMZWFkaW5nU3BhY2UgJiYgc3RhcnRO
b2RlKSB7CiAgICAgICAgIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlID0gIXN0YXJ0Tm9kZS0+cmVu
ZGVyZXIoKSB8fCBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNw
YWNlKCk7Ci0gICAgICAgIGlmIChpczxUZXh0PihzdGFydE5vZGUpKSB7CisgICAgICAgIGlmIChp
czxUZXh0Pigqc3RhcnROb2RlKSkgewogICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRv
d25jYXN0PFRleHQ+KHN0YXJ0Tm9kZSksIHN0YXJ0T2Zmc2V0LCBjb2xsYXBzZVdoaXRlU3BhY2Ug
PyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwogICAgICAgICAgICAgaWYgKG1fZW5k
T2ZJbnNlcnRlZENvbnRlbnQuY29udGFpbmVyTm9kZSgpID09IHN0YXJ0Tm9kZSAmJiBtX2VuZE9m
SW5zZXJ0ZWRDb250ZW50Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICAgICAgICAg
IG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQubW92ZVRvT2Zmc2V0KG1fZW5kT2ZJbnNlcnRlZENvbnRl
bnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyAxKTsKQEAgLTEzNzUsMjIgKzEzNzUsMjIgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VUZXh0Tm9kZXNBcm91bmRQb3NpdGlv
bihQb3NpdGlvbiYgcG9zaXRpb24sIFAKICAgICBib29sIHBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
ciA9IHBvc2l0aW9uLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yOwogICAgIGJvb2wgcG9zaXRpb25Pbmx5VG9CZVVwZGF0ZWRJc09mZnNldEluQW5jaG9y
ID0gcG9zaXRpb25Pbmx5VG9CZVVwZGF0ZWQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3I7CiAgICAgUmVmUHRyPFRleHQ+IHRleHQ7Ci0gICAgaWYgKHBv
c2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBwb3NpdGlvbi5jb250YWluZXJOb2RlKCkgJiYgaXM8
VGV4dD4ocG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSkKKyAgICBpZiAocG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yICYmIGlzPFRleHQ+KHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAg
IHRleHQgPSBkb3duY2FzdDxUZXh0Pihwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpOwogICAgIGVs
c2UgewogICAgICAgICBOb2RlKiBiZWZvcmUgPSBwb3NpdGlvbi5jb21wdXRlTm9kZUJlZm9yZVBv
c2l0aW9uKCk7Ci0gICAgICAgIGlmIChiZWZvcmUgJiYgaXM8VGV4dD4oYmVmb3JlKSkKKyAgICAg
ICAgaWYgKGlzPFRleHQ+KGJlZm9yZSkpCiAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8VGV4
dD4oYmVmb3JlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBOb2RlKiBhZnRlciA9IHBv
c2l0aW9uLmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpOwotICAgICAgICAgICAgaWYgKGFmdGVy
ICYmIGlzPFRleHQ+KGFmdGVyKSkKKyAgICAgICAgICAgIGlmIChpczxUZXh0PihhZnRlcikpCiAg
ICAgICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0PFRleHQ+KGFmdGVyKTsKICAgICAgICAgfQog
ICAgIH0KICAgICBpZiAoIXRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0ZXh0LT5w
cmV2aW91c1NpYmxpbmcoKSAmJiBpczxUZXh0Pih0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSkpIHsK
KyAgICBpZiAoaXM8VGV4dD4odGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpKSB7CiAgICAgICAgIFJl
ZlB0cjxUZXh0PiBwcmV2aW91cyA9IGRvd25jYXN0PFRleHQ+KHRleHQtPnByZXZpb3VzU2libGlu
ZygpKTsKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHQsIDAsIHByZXZpb3VzLT5kYXRh
KCkpOwogCkBAIC0xNDA5LDcgKzE0MDksNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjptZXJnZVRleHROb2Rlc0Fyb3VuZFBvc2l0aW9uKFBvc2l0aW9uJiBwb3NpdGlvbiwgUAogCiAg
ICAgICAgIHJlbW92ZU5vZGUocHJldmlvdXMpOwogICAgIH0KLSAgICBpZiAodGV4dC0+bmV4dFNp
YmxpbmcoKSAmJiBpczxUZXh0Pih0ZXh0LT5uZXh0U2libGluZygpKSkgeworICAgIGlmIChpczxU
ZXh0Pih0ZXh0LT5uZXh0U2libGluZygpKSkgewogICAgICAgICBSZWZQdHI8VGV4dD4gbmV4dCA9
IGRvd25jYXN0PFRleHQ+KHRleHQtPm5leHRTaWJsaW5nKCkpOwogICAgICAgICB1bnNpZ25lZCBv
cmlnaW5hbExlbmd0aCA9IHRleHQtPmxlbmd0aCgpOwogICAgICAgICBpbnNlcnRUZXh0SW50b05v
ZGUodGV4dCwgb3JpZ2luYWxMZW5ndGgsIG5leHQtPmRhdGEoKSk7CkBAIC0xNDQ5LDcgKzE0NDks
NyBAQCBOb2RlKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRlbXMoUGFz
c1JlZlB0cjxIVE1MRWxlbWVudD4gcHJwTGlzdAogICAgIC8vIGxpc3QgaXRlbXMgYW5kIGluc2Vy
dCB0aGVzZSBub2RlcyBiZXR3ZWVuIHRoZW0uCiAgICAgaWYgKGlzTWlkZGxlKSB7CiAgICAgICAg
IGludCB0ZXh0Tm9kZU9mZnNldCA9IGluc2VydFBvcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsK
LSAgICAgICAgaWYgKGlzPFRleHQ+KGluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpKSAmJiB0ZXh0
Tm9kZU9mZnNldCA+IDApCisgICAgICAgIGlmIChpczxUZXh0PigqaW5zZXJ0UG9zLmRlcHJlY2F0
ZWROb2RlKCkpICYmIHRleHROb2RlT2Zmc2V0ID4gMCkKICAgICAgICAgICAgIHNwbGl0VGV4dE5v
ZGUoZG93bmNhc3Q8VGV4dD4oaW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCkpLCB0ZXh0Tm9kZU9m
ZnNldCk7CiAgICAgICAgIHNwbGl0VHJlZVRvTm9kZShpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUo
KSwgbGFzdE5vZGUsIHRydWUpOwogICAgIH0KQEAgLTE0ODgsNyArMTQ4OCw3IEBAIHZvaWQgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnVwZGF0ZU5vZGVzSW5zZXJ0ZWQoTm9kZSAqbm9kZSkKIC8v
IHNwbGl0IHRleHQgbm9kZXMuCiBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpwZXJmb3Jt
VHJpdmlhbFJlcGxhY2UoY29uc3QgUmVwbGFjZW1lbnRGcmFnbWVudCYgZnJhZ21lbnQpCiB7Ci0g
ICAgaWYgKCFmcmFnbWVudC5maXJzdENoaWxkKCkgfHwgZnJhZ21lbnQuZmlyc3RDaGlsZCgpICE9
IGZyYWdtZW50Lmxhc3RDaGlsZCgpIHx8ICFpczxUZXh0PihmcmFnbWVudC5maXJzdENoaWxkKCkp
KQorICAgIGlmICghaXM8VGV4dD4oZnJhZ21lbnQuZmlyc3RDaGlsZCgpKSB8fCBmcmFnbWVudC5m
aXJzdENoaWxkKCkgIT0gZnJhZ21lbnQubGFzdENoaWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBzbWFydCByZXBsYWNl
IGluIHRoZSBmYXN0IHBhdGguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAK
aW5kZXggZTk1ZDg1NDZlYzFlMDQzNTA4MmJmMDg5MDg2ZDJjNmIzNzhhM2Y2NC4uMDdhMjNhZjA0
YTM5MGY5YjAwZmI1Y2M1NDUxOWYzMDVmMTUyZTEwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIGJvb2wgU3BlbGxDaGVja2VyOjpp
c0NoZWNrYWJsZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAgICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2Ut
PmZpcnN0Tm9kZSgpIHx8ICFyYW5nZS0+Zmlyc3ROb2RlKCktPnJlbmRlcmVyKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBjb25zdCBOb2RlKiBub2RlID0gcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCk7Ci0gICAgaWYgKG5vZGUgJiYgaXM8RWxlbWVudD4obm9kZSkgJiYgIWRvd25jYXN0PEVs
ZW1lbnQ+KCpub2RlKS5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYgKGlzPEVsZW1l
bnQ+KG5vZGUpICYmICFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29u
dGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcAppbmRleCA4ZjdiZGY1ODQyOGYyYzU1ZjY3OThjMDc2
NDVhNDg3ZjU4OWFiMWZlLi41MTc1ZTNhNjhkNzY0OTYwNDY4ODUyMDRhMGIxYzUxZDA0OTQ0OWFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWlu
aW5nRWxlbWVudENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgdm9p
ZCBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBp
ZiAoIXBhcmVudFJlbmRlcmVyIHx8ICFwYXJlbnRSZW5kZXJlci0+aXNJbmxpbmUoKSkgewogICAg
ICAgICB3cmFwQ29udGVudHNJbkR1bW15U3BhbihwYXJlbnQpOwogICAgICAgICBOb2RlKiBmaXJz
dENoaWxkID0gcGFyZW50LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmICghZmlyc3RDaGlsZCB8
fCAhaXM8RWxlbWVudD4oZmlyc3RDaGlsZCkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4oZmly
c3RDaGlsZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHBhcmVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KGZpcnN0Q2hpbGQpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAppbmRleCBhNWQyODZjNWI0YThiYmNkYjU5NmYwODcxMTZkODA5OWFlNmJjNjY4
Li44ZWI0ZjAwMzJhZjQ4MTQ0ZDNmYmFmZjEzMWZjODJlZjJhM2M5NzU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0yNTUsNyArMjU1LDcgQEAgYm9vbCBpc1Jl
bmRlcmVyUmVwbGFjZWRFbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgaWYgKHJl
bmRlcmVyLT5pc0ltYWdlKCkgfHwgcmVuZGVyZXItPmlzV2lkZ2V0KCkgfHwgcmVuZGVyZXItPmlz
TWVkaWEoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAocmVuZGVyZXItPm5vZGUo
KSAmJiBpczxFbGVtZW50PihyZW5kZXJlci0+bm9kZSgpKSkgeworICAgIGlmIChpczxFbGVtZW50
PihyZW5kZXJlci0+bm9kZSgpKSkgewogICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNh
c3Q8RWxlbWVudD4oKnJlbmRlcmVyLT5ub2RlKCkpOwogICAgICAgICBpZiAoaXM8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTExlZ2VuZEVsZW1lbnQ+KGVsZW1lbnQp
IHx8IGlzPEhUTUxNZXRlckVsZW1lbnQ+KGVsZW1lbnQpIHx8IGlzPEhUTUxQcm9ncmVzc0VsZW1l
bnQ+KGVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCA2MTIwODBkNjJmNDcwN2ZlOWU5NzU5
NmFhN2RjNDkyZjFlZjUxZTNlLi5jOTlmNWJmOGRkYzBjMDFkMzM4YTlkMzFhODJkMDc5ZTMxMWQy
NDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAg
LTY2NCw3ICs2NjQsNyBAQCBOb2RlKiBWaXNpYmxlU2VsZWN0aW9uOjpub25Cb3VuZGFyeVNoYWRv
d1RyZWVSb290Tm9kZSgpIGNvbnN0CiBib29sIFZpc2libGVTZWxlY3Rpb246OmlzSW5QYXNzd29y
ZEZpZWxkKCkgY29uc3QKIHsKICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENv
bnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQoKSk7Ci0gICAgcmV0dXJuIHRl
eHRDb250cm9sICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KHRleHRDb250cm9sKSAmJiBkb3duY2Fz
dDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgpOworICAg
IHJldHVybiBpczxIVE1MSW5wdXRFbGVtZW50Pih0ZXh0Q29udHJvbCkgJiYgZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKnRleHRDb250cm9sKS5pc1Bhc3N3b3JkRmllbGQoKTsKIH0KIAogI2lm
bmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVu
aXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCBi
ZGYxMzI2OTRlM2RmZGJhMzdiZTE0OGUzYjgwNmE2NjNkOWFjOWJjLi5lYjVkZTA2ODEyZDI2NWY4
OWY3NjE1ZmEwZjgyNTZkZTNhYzQwY2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuY3BwCkBAIC03NjcsNyArNzY3LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFy
dFBvc2l0aW9uRm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIExpbmVFbmRwb2kKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBpczxUZXh0PihzdGFydE5vZGUpID8gUG9zaXRp
b24oZG93bmNhc3Q8VGV4dD4oc3RhcnROb2RlKSwgdG9JbmxpbmVUZXh0Qm94KHN0YXJ0Qm94KS0+
c3RhcnQoKSkKKyAgICByZXR1cm4gaXM8VGV4dD4oKnN0YXJ0Tm9kZSkgPyBQb3NpdGlvbihkb3du
Y2FzdDxUZXh0PihzdGFydE5vZGUpLCB0b0lubGluZVRleHRCb3goc3RhcnRCb3gpLT5zdGFydCgp
KQogICAgICAgICA6IHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydE5vZGUpOwogfQogCkBAIC04Mzgs
NyArODM4LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbkZvckxpbmUoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBMaW5lRW5kcG9pbnQKICAgICBQb3NpdGlvbiBwb3M7CiAg
ICAgaWYgKGVuZE5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAgICBwb3MgPSBwb3NpdGlv
bkJlZm9yZU5vZGUoZW5kTm9kZSk7Ci0gICAgZWxzZSBpZiAoZW5kQm94LT5pc0lubGluZVRleHRC
b3goKSAmJiBpczxUZXh0PihlbmROb2RlKSkgeworICAgIGVsc2UgaWYgKGVuZEJveC0+aXNJbmxp
bmVUZXh0Qm94KCkgJiYgaXM8VGV4dD4oKmVuZE5vZGUpKSB7CiAgICAgICAgIElubGluZVRleHRC
b3gqIGVuZFRleHRCb3ggPSB0b0lubGluZVRleHRCb3goZW5kQm94KTsKICAgICAgICAgaW50IGVu
ZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7CiAgICAgICAgIGlmICghZW5kVGV4dEJveC0+
aXNMaW5lQnJlYWsoKSkKQEAgLTExNDMsNyArMTE0Myw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFy
dE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgRWRpdGluZ0JvdW5kYXJ5Q3Jv
c3NpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBpZiAoci0+aXNUZXh0KCkgJiYgdG9S
ZW5kZXJUZXh0KHIpLT5oYXNSZW5kZXJlZFRleHQoKSkgewotICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8VGV4dD4obikpOworICAgICAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8VGV4dD4oKm4pKTsKICAgICAgICAgICAgIHR5
cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yOwogICAgICAgICAgICAgaWYg
KHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCYg
dGV4dCA9ICp0b1JlbmRlclRleHQociktPnRleHQoKTsKQEAgLTEyMjYsNyArMTIyNiw3IEBAIFZp
c2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEVk
aXRpbmdCb3VuZGFyeUNyb3NzaW5nCiAKICAgICAgICAgLy8gRklYTUU6IFdlIGF2b2lkIHJldHVy
bmluZyBhIHBvc2l0aW9uIHdoZXJlIHRoZSByZW5kZXJlciBjYW4ndCBhY2NlcHQgdGhlIGNhcmV0
LgogICAgICAgICBpZiAoci0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KHIpLT5oYXNSZW5kZXJl
ZFRleHQoKSkgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
aXM8VGV4dD4obikpOworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaXM8VGV4dD4oKm4pKTsKICAgICAgICAgICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yOwogICAgICAgICAgICAgaWYgKHN0eWxlLnByZXNlcnZlTmV3bGluZSgp
KSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCYgdGV4dCA9ICp0b1JlbmRlclRleHQocikt
PnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENv
bnZlcnRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bQppbmRleCBhN2UwYjQ3ODY3MjlkYmI2ZTIwOWNlYmVhZjAyYzQ2Mzg2MWE1NGQ3Li4wZDVkM2Zl
MGY3OWExYmIwMTE0Y2Q3MWYyN2M3MTllYzg0ZmMwMzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBOU0Rp
Y3Rpb25hcnkqIEhUTUxDb252ZXJ0ZXI6OmF0dHJpYnV0ZXNGb3JFbGVtZW50KEVsZW1lbnQmIGVs
ZW1lbnQpCiBOU0RpY3Rpb25hcnkqIEhUTUxDb252ZXJ0ZXI6OmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVz
Rm9yQW5jZXN0b3JzKENoYXJhY3RlckRhdGEmIG5vZGUpCiB7CiAgICAgTm9kZSogYW5jZXN0b3Ig
PSBub2RlLnBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoYW5jZXN0b3IgJiYgIWlzPEVsZW1lbnQ+
KGFuY2VzdG9yKSkKKyAgICB3aGlsZSAoYW5jZXN0b3IgJiYgIWlzPEVsZW1lbnQ+KCphbmNlc3Rv
cikpCiAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKICAgICBpZiAo
IWFuY2VzdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEzNzQsNyArMTM3NCw3IEBA
IE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YWdncmVnYXRlZEF0dHJpYnV0ZXNGb3JFbGVt
ZW50QW5kSXRzQW5jZXN0b3JzKEVsZW1lCiAgICAgQVNTRVJUKGF0dHJpYnV0ZXNGb3JDdXJyZW50
RWxlbWVudCk7CiAKICAgICBOb2RlKiBhbmNlc3RvciA9IGVsZW1lbnQucGFyZW50Tm9kZSgpOwot
ICAgIHdoaWxlIChhbmNlc3RvciAmJiAhaXM8RWxlbWVudD4oYW5jZXN0b3IpKQorICAgIHdoaWxl
IChhbmNlc3RvciAmJiAhaXM8RWxlbWVudD4oKmFuY2VzdG9yKSkKICAgICAgICAgYW5jZXN0b3Ig
PSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwogCiAgICAgaWYgKCFhbmNlc3RvcikgewpAQCAtMjU3
MSw3ICsyNTcxLDcgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmlu
Z0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UpCiAgICAgICAgIAogICAgICAgICBpZiAoc3RhcnRDb250
YWluZXIgPT0gZW5kQ29udGFpbmVyICYmIChzdGFydE9mZnNldCA9PSBlbmRPZmZzZXQgLSAxKSkg
ewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Q29udGFpbmVyLT50cmF2ZXJzZVRvQ2hp
bGRBdChzdGFydE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAobm9kZSAmJiBpczxIVE1MSW1hZ2VF
bGVtZW50Pihub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxJbWFnZUVsZW1lbnQ+KG5v
ZGUpKSB7CiAgICAgICAgICAgICAgICAgTlNGaWxlV3JhcHBlciogZmlsZVdyYXBwZXIgPSBmaWxl
V3JhcHBlckZvckVsZW1lbnQoZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4obm9kZSkpOwogICAg
ICAgICAgICAgICAgIE5TVGV4dEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBbW05TVGV4dEF0dGFj
aG1lbnQgYWxsb2NdIGluaXRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXJdOwogICAgICAgICAg
ICAgICAgIFtzdHJpbmcgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpbTlNBdHRyaWJ1dGVkU3RyaW5n
IGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDphdHRhY2htZW50XV07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCmluZGV4IGViZjViNWNiMWU4MjBlYzczNGM4OGFjZThh
ZDdjN2ExZWY5MmJmN2UuLjE2M2QxMGY5ZGZjNWRhMTM4NmFlNTc5N2JjMTE3ZGI1MTk0MTJiMmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCkBAIC0zMTYsNyArMzE2LDcg
QEAgYm9vbCBpc0lubGluZShjb25zdCBOb2RlKiBub2RlKQogRWxlbWVudCogZW5jbG9zaW5nQmxv
Y2soTm9kZSogbm9kZSwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpCiB7CiAgICAg
Tm9kZSogZW5jbG9zaW5nTm9kZSA9IGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKG5vZGUpLCBpc0Jsb2NrLCBydWxlKTsKLSAgICByZXR1cm4gZW5jbG9zaW5n
Tm9kZSAmJiBpczxFbGVtZW50PihlbmNsb3NpbmdOb2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGVu
Y2xvc2luZ05vZGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaXM8RWxlbWVudD4oZW5jbG9zaW5n
Tm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihlbmNsb3NpbmdOb2RlKSA6IG51bGxwdHI7CiB9CiAK
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYg
cG9zaXRpb24pCkBAIC01NTAsNyArNTUwLDcgQEAgRWxlbWVudCogZW5jbG9zaW5nRWxlbWVudFdp
dGhUYWcoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBRdWFsaWZpZWROYW1lJgogICAg
IGZvciAoTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKHJvb3QgJiYgIW5vZGUtPmhhc0Vk
aXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWlzPEVs
ZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmhhc1Rh
Z05hbWUodGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSk7CkBAIC02MzgsNyArNjM4LDcgQEAgRWxlbWVudCogZW5jbG9zaW5nQW5jaG9yRWxlbWVudChj
b25zdCBQb3NpdGlvbiYgcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpICYmIG5vZGUtPmlzTGluaygp
KQorICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpICYmIG5vZGUtPmlzTGluaygpKQogICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTY1Miw3ICs2NTIsNyBAQCBIVE1MRWxlbWVudCogZW5jbG9zaW5nTGlz
dChOb2RlKiBub2RlKQogICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSk7CiAgICAgCiAgICAgZm9yIChDb250YWluZXJO
b2RlKiBhbmNlc3RvciA9IG5vZGUtPnBhcmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0g
YW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXM8SFRNTFVMaXN0RWxlbWVu
dD4oYW5jZXN0b3IpIHx8IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KGFuY2VzdG9yKSkKKyAgICAgICAg
aWYgKGlzPEhUTUxVTGlzdEVsZW1lbnQ+KCphbmNlc3RvcikgfHwgaXM8SFRNTE9MaXN0RWxlbWVu
dD4oKmFuY2VzdG9yKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRWxlbWVudD4o
YW5jZXN0b3IpOwogICAgICAgICBpZiAoYW5jZXN0b3IgPT0gcm9vdCkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMTA1NSw3ICsxMDU1LDcgQEAgYm9vbCBsaW5lQnJlYWtFeGlzdHNB
dFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICBpZiAoIXBvc2l0aW9uLmFu
Y2hvck5vZGUoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IGlmICghaXM8VGV4dD4ocG9zaXRpb24uYW5jaG9yTm9kZSgpKSB8fCAhcG9zaXRpb24uYW5jaG9y
Tm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKQorICAgIGlmICgh
aXM8VGV4dD4oKnBvc2l0aW9uLmFuY2hvck5vZGUoKSkgfHwgIXBvc2l0aW9uLmFuY2hvck5vZGUo
KS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKnBvc2l0
aW9uLmFuY2hvck5vZGUoKSk7CkBAIC0xMTg0LDE1ICsxMTg0LDE1IEBAIGJvb2wgaXNSZW5kZXJl
ZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoY29uc3QgTm9kZSogbm9kZSkKIAogYm9vbCBhcmVJ
ZGVudGljYWxFbGVtZW50cyhjb25zdCBOb2RlKiBmaXJzdCwgY29uc3QgTm9kZSogc2Vjb25kKQog
ewotICAgIGlmICghaXM8RWxlbWVudD4oZmlyc3QpIHx8ICFpczxFbGVtZW50PihzZWNvbmQpKQor
ICAgIGlmICghaXM8RWxlbWVudD4oKmZpcnN0KSB8fCAhaXM8RWxlbWVudD4oKnNlY29uZCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9
IGRvd25jYXN0PEVsZW1lbnQ+KGZpcnN0KTsKLSAgICBjb25zdCBFbGVtZW50KiBzZWNvbmRFbGVt
ZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oc2Vjb25kKTsKLSAgICBpZiAoIWZpcnN0RWxlbWVudC0+
aGFzVGFnTmFtZShzZWNvbmRFbGVtZW50LT50YWdRTmFtZSgpKSkKKyAgICBjb25zdCBFbGVtZW50
JiBmaXJzdEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqZmlyc3QpOworICAgIGNvbnN0IEVs
ZW1lbnQmIHNlY29uZEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqc2Vjb25kKTsKKyAgICBp
ZiAoIWZpcnN0RWxlbWVudC5oYXNUYWdOYW1lKHNlY29uZEVsZW1lbnQudGFnUU5hbWUoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBmaXJzdEVsZW1lbnQtPmhhc0VxdWl2
YWxlbnRBdHRyaWJ1dGVzKHNlY29uZEVsZW1lbnQpOworICAgIHJldHVybiBmaXJzdEVsZW1lbnQu
aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoJnNlY29uZEVsZW1lbnQpOwogfQogCiBib29sIGlzTm9u
VGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQpAQCAtMTIwMCw3ICsx
MjAwLDcgQEAgYm9vbCBpc05vblRhYmxlQ2VsbEhUTUxCbG9ja0VsZW1lbnQoY29uc3QgTm9kZSog
bm9kZSkKICAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShsaXN0aW5nVGFnKQogICAgICAgICB8
fCBub2RlLT5oYXNUYWdOYW1lKG9sVGFnKQogICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKHBy
ZVRhZykKLSAgICAgICAgfHwgaXM8SFRNTFRhYmxlRWxlbWVudD4obm9kZSkKKyAgICAgICAgfHwg
aXM8SFRNTFRhYmxlRWxlbWVudD4oKm5vZGUpCiAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUo
dWxUYWcpCiAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoeG1wVGFnKQogICAgICAgICB8fCBu
b2RlLT5oYXNUYWdOYW1lKGgxVGFnKQpAQCAtMTI1MSw3ICsxMjUxLDcgQEAgRWxlbWVudCogZGVw
cmVjYXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoTm9kZSogbm9kZSkKICAgICBpZiAoaXNC
bG9ja0Zsb3dFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4o
bm9kZSk7CiAgICAgd2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSkgewotICAgICAg
ICBpZiAoaXNCbG9ja0Zsb3dFbGVtZW50KG5vZGUpIHx8IGlzPEhUTUxCb2R5RWxlbWVudD4obm9k
ZSkpCisgICAgICAgIGlmIChpc0Jsb2NrRmxvd0VsZW1lbnQobm9kZSkgfHwgaXM8SFRNTEJvZHlF
bGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3Mv
RWRpdG9ySU9TLm1tCmluZGV4IGQ5MjMzYTJiYmE1MjE1YmI1NThhYWJjZjZjNjk3NzE4MzM2ODFl
OTUuLmM1ZTdmZTQyYjNjM2FjYjVkMWQ2N2EyOTAzODMxZTc1MzIzNWNiMWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIEVk
aXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0
aW5nRGlyZWN0aW9uIGRpcgogICAgICAgICByZXR1cm47CiAKICAgICBFbGVtZW50KiBmb2N1c2Vk
RWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKLSAgICBpZiAo
Zm9jdXNlZEVsZW1lbnQgJiYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50
KSB8fCAoaXM8SFRNTElucHV0RWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpCisgICAgaWYgKGZvY3Vz
ZWRFbGVtZW50ICYmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpIHx8
IChpczxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpCiAgICAgICAgICYmIChkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpLmlzVGV4dEZpZWxkKCkKICAg
ICAgICAgICAgIHx8IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCku
aXNTZWFyY2hGaWVsZCgpKSkpKSB7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gTmF0dXJhbFdy
aXRpbmdEaXJlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggMWI5MGJlMjU3
MDBiMjcxNzU5OTg3OTYxNDZiZjA5NThjNGQwYmE3Yy4uOTBmNDU1YjZjMTY5ODZhN2FiZTEzOGM4
YzU5ODIzZTAyNjE5MWYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMjM0LDcg
KzIzNCw3IEBAIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMoKQog
CiB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXIm
IG91dCwgY29uc3QgVGV4dCYgdGV4dCkKIHsgICAgCi0gICAgY29uc3QgYm9vbCBwYXJlbnRJc1Rl
eHRhcmVhID0gdGV4dC5wYXJlbnRFbGVtZW50KCkgJiYgaXM8SFRNTFRleHRBcmVhRWxlbWVudD4o
dGV4dC5wYXJlbnRFbGVtZW50KCkpOworICAgIGNvbnN0IGJvb2wgcGFyZW50SXNUZXh0YXJlYSA9
IGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KHRleHQucGFyZW50RWxlbWVudCgpKTsKICAgICBjb25z
dCBib29sIHdyYXBwaW5nU3BhbiA9IHNob3VsZEFwcGx5V3JhcHBpbmdTdHlsZSh0ZXh0KSAmJiAh
cGFyZW50SXNUZXh0YXJlYTsKICAgICBpZiAod3JhcHBpbmdTcGFuKSB7CiAgICAgICAgIFJlZlB0
cjxFZGl0aW5nU3R5bGU+IHdyYXBwaW5nU3R5bGUgPSBtX3dyYXBwaW5nU3R5bGUtPmNvcHkoKTsK
QEAgLTQ1Miw3ICs0NTIsNyBAQCBzdGF0aWMgTm9kZSogYW5jZXN0b3JUb1JldGFpblN0cnVjdHVy
ZUFuZEFwcGVhcmFuY2VGb3JCbG9jayhOb2RlKiBjb21tb25BbmNlc3RvcgogCiAgICAgaWYgKGNv
bW1vbkFuY2VzdG9yQmxvY2stPmhhc1RhZ05hbWUodGJvZHlUYWcpIHx8IGNvbW1vbkFuY2VzdG9y
QmxvY2stPmhhc1RhZ05hbWUodHJUYWcpKSB7CiAgICAgICAgIENvbnRhaW5lck5vZGUqIHRhYmxl
ID0gY29tbW9uQW5jZXN0b3JCbG9jay0+cGFyZW50Tm9kZSgpOwotICAgICAgICB3aGlsZSAodGFi
bGUgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlKSkKKyAgICAgICAgd2hpbGUgKHRhYmxl
ICYmICFpczxIVE1MVGFibGVFbGVtZW50PigqdGFibGUpKQogICAgICAgICAgICAgdGFibGUgPSB0
YWJsZS0+cGFyZW50Tm9kZSgpOwogCiAgICAgICAgIHJldHVybiB0YWJsZTsKQEAgLTc0Myw3ICs3
NDMsOCBAQCBzdGF0aWMgdm9pZCBmaWxsQ29udGFpbmVyRnJvbVN0cmluZyhDb250YWluZXJOb2Rl
KiBwYXJhZ3JhcGgsIGNvbnN0IFN0cmluZyYgc3RyaQogCiBib29sIGlzUGxhaW5UZXh0TWFya3Vw
KE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFpczxIVE1MRGl2RWxlbWVudD4obm9kZSkpCisgICAg
QVNTRVJUKG5vZGUpOworICAgIGlmICghaXM8SFRNTERpdkVsZW1lbnQ+KCpub2RlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSFRNTERpdkVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2Fz
dDxIVE1MRGl2RWxlbWVudD4oKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9GaWxlUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5j
cHAKaW5kZXggNjEzNjY4YmRjY2JkZTc0OTNkZjQxOGRlZmRjYjZmM2I4YzA5ZTdjNi4uYzA2YzZh
YjZjMjZiOTIzY2QyNGY0NTlhNTIxODhiM2RkYTM1NWUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFz
QXJyYXlCdWZmZXIoQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFibG9i
KQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRp
bmcgYXMgYXJyYXkgYnVmZmVyOiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgaXM8RmlsZT4oYmxvYikgPyBkb3duY2FzdDxGaWxlPigqYmxvYikucGF0aCgpLnV0
ZjgoKS5kYXRhKCkgOiAiIik7CisgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5n
IGFzIGFycmF5IGJ1ZmZlcjogJXMgJXNcbiIsIGJsb2ItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIGlzPEZpbGU+KCpibG9iKSA/IGRvd25jYXN0PEZpbGU+KCpibG9iKS5wYXRoKCkudXRm
OCgpLmRhdGEoKSA6ICIiKTsKIAogICAgIHJlYWRJbnRlcm5hbChibG9iLCBGaWxlUmVhZGVyTG9h
ZGVyOjpSZWFkQXNBcnJheUJ1ZmZlciwgZWMpOwogfQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEZp
bGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKiBibG9iLCBFeGNlcHRpb25Db2RlJiBl
YykKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhGaWxlQVBJLCAi
RmlsZVJlYWRlcjogcmVhZGluZyBhcyBiaW5hcnk6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBpczxGaWxlPihibG9iKSA/IGRvd25jYXN0PEZpbGU+KCpibG9i
KS5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFk
ZXI6IHJlYWRpbmcgYXMgYmluYXJ5OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgaXM8RmlsZT4oKmJsb2IpID8gZG93bmNhc3Q8RmlsZT4oKmJsb2IpLnBhdGgo
KS51dGY4KCkuZGF0YSgpIDogIiIpOwogCiAgICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFk
ZXJMb2FkZXI6OlJlYWRBc0JpbmFyeVN0cmluZywgZWMpOwogfQpAQCAtMTAxLDcgKzEwMSw3IEBA
IHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzVGV4dChCbG9iKiBibG9iLCBjb25zdCBTdHJpbmcmIGVu
Y29kaW5nLCBFeGNlcHRpb25Db2RlJiBlCiAgICAgaWYgKCFibG9iKQogICAgICAgICByZXR1cm47
CiAKLSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgdGV4dDogJXMgJXNc
biIsIGJsb2ItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGlzPEZpbGU+KGJsb2IpID8g
ZG93bmNhc3Q8RmlsZT4oKmJsb2IpLnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOworICAgIExP
RyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0ZXh0OiAlcyAlc1xuIiwgYmxvYi0+
dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXM8RmlsZT4oKmJsb2IpID8gZG93bmNhc3Q8
RmlsZT4oKmJsb2IpLnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOwogCiAgICAgbV9lbmNvZGlu
ZyA9IGVuY29kaW5nOwogICAgIHJlYWRJbnRlcm5hbChibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpS
ZWFkQXNUZXh0LCBlYyk7CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFk
QXNEYXRhVVJMKEJsb2IqIGJsb2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmICghYmxvYikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5n
IGFzIGRhdGEgVVJMOiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgaXM8RmlsZT4oYmxvYikgPyBkb3duY2FzdDxGaWxlPigqYmxvYikucGF0aCgpLnV0ZjgoKS5k
YXRhKCkgOiAiIik7CisgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIGRh
dGEgVVJMOiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXM8
RmlsZT4oKmJsb2IpID8gZG93bmNhc3Q8RmlsZT4oKmJsb2IpLnBhdGgoKS51dGY4KCkuZGF0YSgp
IDogIiIpOwogCiAgICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRB
c0RhdGFVUkwsIGVjKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNo
b29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9C
YXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKaW5kZXggM2M3NDlhNDljZmYx
ZjhkMWE4MDk1M2M2MTA0NTAzNjM2MjEwMWMxNi4uNmIyYThlM2EwMmE5ZGU3Mzk2NTVlYmJlYzRl
ZGZiMjNlNWJiYmEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hvb3Nl
ck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9C
YXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKQEAgLTczLDcgKzczLDcgQEAg
dm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3Vi
dHJlZSgpCiB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjp1cGRhdGVB
cHBlYXJhbmNlKCkKIHsKICAgICBOb2RlKiBub2RlID0gZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRv
d1Jvb3QoKS0+Zmlyc3RDaGlsZCgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8SFRNTEVsZW1lbnQ+
KG5vZGUpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47
CiAgICAgU3RyaW5nIGRpc3BsYXlWYWx1ZSA9IHZpc2libGVWYWx1ZSgpOwogICAgIGlmIChkaXNw
bGF5VmFsdWUuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZU
UERpcmVjdG9yeURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5
RG9jdW1lbnQuY3BwCmluZGV4IDliMGZkZWE5OTYwNzg1ZmU1OWU0NGRlZDA5OWQxNTcyMWY5ZDM1
MGQuLmYzYmE5ZTUxNWUwZWMxZTVhYzk4MmYxNjkzZGUwNDcwYmYzMDk1ZTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCkBAIC0zMDAsNyArMzAwLDcg
QEAgYm9vbCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6bG9hZERvY3VtZW50VGVtcGxhdGUo
KQogICAgIFJlZlB0cjxFbGVtZW50PiB0YWJsZUVsZW1lbnQgPSBkb2N1bWVudCgpLT5nZXRFbGVt
ZW50QnlJZChTdHJpbmcoQVNDSUlMaXRlcmFsKCJmdHBEaXJlY3RvcnlUYWJsZSIpKSk7CiAgICAg
aWYgKCF0YWJsZUVsZW1lbnQpCiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGZpbmQgZWxl
bWVudCBieSBpZCBcImZ0cERpcmVjdG9yeVRhYmxlXCIgaW4gdGhlIHRlbXBsYXRlIGRvY3VtZW50
LiIpOwotICAgIGVsc2UgaWYgKCFpczxIVE1MVGFibGVFbGVtZW50Pih0YWJsZUVsZW1lbnQuZ2V0
KCkpKQorICAgIGVsc2UgaWYgKCFpczxIVE1MVGFibGVFbGVtZW50PigqdGFibGVFbGVtZW50KSkK
ICAgICAgICAgTE9HX0VSUk9SKCJFbGVtZW50IG9mIGlkIFwiZnRwRGlyZWN0b3J5VGFibGVcIiBp
cyBub3QgYSB0YWJsZSBlbGVtZW50Iik7CiAgICAgZWxzZSAKICAgICAgICAgbV90YWJsZUVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pih0YWJsZUVsZW1lbnQuZ2V0KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IDcwNDVh
OGY1ZThlY2NiNzU3ZmZjMDc3NDViMjE2ZDU4MDBhNjcwZmUuLjkyZDM4MTY5NjA3YzdjZDI3MDcw
YjFlZTM1ZDlhODBkMzJiMzMwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgSFRNTEZvcm1FbGVtZW50KiBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ6OmZpbmRBc3NvY2lhdGVkRm9ybShjb25zdCBIVE1MRWxlbWVudCog
ZWwKICAgICAgICAgLy8gdHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoKSBvdmVyIHRoZSBnaXZl
biBlbGVtZW50LgogICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIG5ld0Zvcm0gPSBudWxscHRyOwog
ICAgICAgICBFbGVtZW50KiBuZXdGb3JtQ2FuZGlkYXRlID0gZWxlbWVudC0+dHJlZVNjb3BlKCku
Z2V0RWxlbWVudEJ5SWQoZm9ybUlkKTsKLSAgICAgICAgaWYgKG5ld0Zvcm1DYW5kaWRhdGUgJiYg
aXM8SFRNTEZvcm1FbGVtZW50PihuZXdGb3JtQ2FuZGlkYXRlKSkKKyAgICAgICAgaWYgKGlzPEhU
TUxGb3JtRWxlbWVudD4obmV3Rm9ybUNhbmRpZGF0ZSkpCiAgICAgICAgICAgICBuZXdGb3JtID0g
ZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PihuZXdGb3JtQ2FuZGlkYXRlKTsKICAgICAgICAgcmV0
dXJuIG5ld0Zvcm07CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QW5jaG9yRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcAppbmRleCA5MTVlMmFhY2Y5N2E2MDJlNTg3NTI0NzFmMDk4OWY1NmJhMjNkYWQ2Li40NjJi
MjI4Mjg1YmU3OWZiMzQzOTMzNWE1MDFiNDU4ZWFhZDZlZTkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApAQCAtMTUyLDEzICsxNTIsMTQgQEAgYm9vbCBIVE1M
QW5jaG9yRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkg
Y29uc3QKIAogc3RhdGljIHZvaWQgYXBwZW5kU2VydmVyTWFwTW91c2VQb3NpdGlvbihTdHJpbmdC
dWlsZGVyJiB1cmwsIEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSkKKyAgICBBU1NFUlQoZXZlbnQpOworICAgIGlmICghaXM8TW91c2VFdmVudD4oKmV2ZW50
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7CiAgICAg
Tm9kZSogdGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKICAgICBBU1NFUlQodGFy
Z2V0KTsKLSAgICBpZiAoIWlzPEhUTUxJbWFnZUVsZW1lbnQ+KHRhcmdldCkpCisgICAgaWYgKCFp
czxIVE1MSW1hZ2VFbGVtZW50PigqdGFyZ2V0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSFRN
TEltYWdlRWxlbWVudCYgaW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4o
KnRhcmdldCk7CkBAIC0xOTYsNyArMTk3LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIGlmIChoYXNFZGl0YWJsZVN0
eWxlKCkpIHsKICAgICAgICAgICAgIC8vIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRhYmxl
IGJsb2NrIHRoYXQgdGhlIHNlbGVjdGlvbiB3YXMgaW4gKGlmIGl0IHdhcyBpbiBvbmUpIGp1c3Qg
YmVmb3JlIHRoZSBsaW5rIHdhcyBjbGlja2VkCiAgICAgICAgICAgICAvLyBmb3IgdGhlIExpdmVX
aGVuTm90Rm9jdXNlZCBlZGl0YWJsZSBsaW5rIGJlaGF2aW9yCi0gICAgICAgICAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVu
dD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgIT0gUmln
aHRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpKSB7CisgICAgICAgICAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4o
KmV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpICE9IFJpZ2h0
QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKSkgewogICAgICAgICAgICAgICAgIHNldFJvb3RF
ZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bihkb2N1bWVudCgpLmZyYW1lKCkt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CiAgICAgICAg
ICAgICAgICAgbV93YXNTaGlmdEtleURvd25Pbk1vdXNlRG93biA9IGRvd25jYXN0PE1vdXNlRXZl
bnQ+KCpldmVudCkuc2hpZnRLZXkoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKQEAgLTU1NSw3ICs1NTYsOCBA
QCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpoYW5kbGVDbGljayhFdmVudCogZXZlbnQpCiAKIEhU
TUxBbmNob3JFbGVtZW50OjpFdmVudFR5cGUgSFRNTEFuY2hvckVsZW1lbnQ6OmV2ZW50VHlwZShF
dmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkpCisgICAgQVNT
RVJUKGV2ZW50KTsKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KCpldmVudCkpCiAgICAgICAgIHJl
dHVybiBOb25Nb3VzZUV2ZW50OwogICAgIHJldHVybiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZl
bnQpLnNoaWZ0S2V5KCkgPyBNb3VzZUV2ZW50V2l0aFNoaWZ0S2V5IDogTW91c2VFdmVudFdpdGhv
dXRTaGlmdEtleTsKIH0KQEAgLTU5MiwxMiArNTk0LDEyIEBAIGJvb2wgSFRNTEFuY2hvckVsZW1l
bnQ6OnRyZWF0TGlua0FzTGl2ZUZvckV2ZW50VHlwZShFdmVudFR5cGUgZXZlbnRUeXBlKSBjb25z
dAogCiBib29sIGlzRW50ZXJLZXlLZXlkb3duRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIHJl
dHVybiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgaXM8S2V5
Ym9hcmRFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCkua2V5
SWRlbnRpZmllcigpID09ICJFbnRlciI7CisgICAgcmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCAmJiBpczxLZXlib2FyZEV2ZW50PigqZXZlbnQpICYmIGRv
d25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCkua2V5SWRlbnRpZmllcigpID09ICJFbnRlciI7
CiB9CiAKIGJvb2wgaXNMaW5rQ2xpY2soRXZlbnQqIGV2ZW50KQogewotICAgIHJldHVybiBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmICghaXM8TW91c2VFdmVudD4o
ZXZlbnQpIHx8IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgIT0gUmlnaHRC
dXR0b24pOworICAgIHJldHVybiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50ICYmICghaXM8TW91c2VFdmVudD4oKmV2ZW50KSB8fCBkb3duY2FzdDxNb3VzZUV2ZW50Pigq
ZXZlbnQpLmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uKTsKIH0KIAogYm9vbCBzaG91bGRQcm9oaWJp
dExpbmtzKEVsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVu
dC5jcHAKaW5kZXggYjExNTNlNzUzZDA5YzllZTRlOThhYmFiOWZkNzk2MTFkMDc1ZDIzOS4uMjBi
ZWYyODIwYTRiMWRlNmU3MDAyNjVlYjMzNTlkZjJhNTA3MzUzZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEFyZWFFbGVtZW50LmNwcApAQCAtMTgyLDcgKzE4Miw3IEBAIFBhdGggSFRNTEFyZWFF
bGVtZW50OjpnZXRSZWdpb24oY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgY29uc3QKIEhUTUxJbWFn
ZUVsZW1lbnQqIEhUTUxBcmVhRWxlbWVudDo6aW1hZ2VFbGVtZW50KCkgY29uc3QKIHsKICAgICBO
b2RlKiBtYXBFbGVtZW50ID0gcGFyZW50Tm9kZSgpOwotICAgIGlmICghbWFwRWxlbWVudCB8fCAh
aXM8SFRNTE1hcEVsZW1lbnQ+KG1hcEVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTE1hcEVsZW1l
bnQ+KG1hcEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+KCptYXBFbGVtZW50KS5pbWFnZUVsZW1lbnQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAppbmRleCAwMDkzMjllMmMzYWJh
ODVmNGM1YzMyZjhhMmNhZDI4ZTIwN2RiODhjLi42MTNkOGNlYzk3NzIxNGYwMzk3YWUzN2JhMzBm
YmI0NWFmNzgyOWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCkBA
IC0xNzUsNyArMTc1LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1M
Qm9keUVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJgogICAgIC8vIG1hZ2ljYWxs
eSBhcHBlYXIgb24gdGhlIDxib2R5PiBvZiBhbGwgZG9jdW1lbnRzIGVtYmVkZGVkIHRocm91Z2gg
PGlmcmFtZT4gb3IgPGZyYW1lPi4KICAgICAvLyBGSVhNRTogUGVyaGFwcyB0aGlzIGNvZGUgc2hv
dWxkIGJlIGluIGF0dGFjaCgpIGluc3RlYWQgb2YgaGVyZS4KICAgICBIVE1MRnJhbWVPd25lckVs
ZW1lbnQqIG93bmVyRWxlbWVudCA9IGRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7Ci0gICAgaWYg
KG93bmVyRWxlbWVudCAmJiBpczxIVE1MRnJhbWVFbGVtZW50QmFzZT4oKm93bmVyRWxlbWVudCkp
IHsKKyAgICBpZiAoaXM8SFRNTEZyYW1lRWxlbWVudEJhc2U+KG93bmVyRWxlbWVudCkpIHsKICAg
ICAgICAgSFRNTEZyYW1lRWxlbWVudEJhc2UmIG93bmVyRnJhbWVFbGVtZW50ID0gZG93bmNhc3Q8
SFRNTEZyYW1lRWxlbWVudEJhc2U+KCpvd25lckVsZW1lbnQpOwogICAgICAgICBpbnQgbWFyZ2lu
V2lkdGggPSBvd25lckZyYW1lRWxlbWVudC5tYXJnaW5XaWR0aCgpOwogICAgICAgICBpZiAobWFy
Z2luV2lkdGggIT0gLTEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0
b25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3Bw
CmluZGV4IDQ1MjlmOGIzMzhiOWU5ZjRiNTMxZTM2OGY1MDg4NTAzMjY4MTkwM2EuLjI4ZGI5MmY0
NDdhOTI4NDg3MGU4OGFiODUwY2ExODAyM2ZlYjg4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEJ1dHRvbkVsZW1lbnQuY3BwCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBIVE1MQnV0dG9u
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CisgICAgaWYgKGlzPEtl
eWJvYXJkRXZlbnQ+KCpldmVudCkpIHsKICAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRF
dmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CiAgICAgICAgIGlmIChrZXli
b2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGtleWJvYXJk
RXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CiAgICAgICAgICAgICBzZXRBY3Rp
dmUodHJ1ZSwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xs
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCmluZGV4
IDdhYzg2OTM0MzQ5ZjI3MGFlYWJiYmFiYTJlOTYwZmQ3YTUwY2QyYTguLjE3YTBjZmJlMTBkY2Ri
YzJiNTc1MmVhNzFiZmU1ZDEwYzhlZDYyZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxl
Y3Rpb24uY3BwCkBAIC00MDAsNyArNDAwLDcgQEAgTm9kZSogSFRNTENvbGxlY3Rpb246Om5hbWVk
SXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgICAgIH0gZWxzZSBpZiAo
dHJlZVNjb3BlLmhhc0VsZW1lbnRXaXRoTmFtZSgqbmFtZS5pbXBsKCkpKSB7CiAgICAgICAgICAg
ICBpZiAoIXRyZWVTY29wZS5jb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoTmFtZShuYW1lKSkg
ewogICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHRyZWVTY29wZS5nZXRFbGVtZW50QnlOYW1l
KG5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUgJiYgdHlwZSgpID09IERvY0Fs
bCAmJiAoIWlzPEhUTUxFbGVtZW50PihjYW5kaWRhdGUpIHx8ICFuYW1lU2hvdWxkQmVWaXNpYmxl
SW5Eb2N1bWVudEFsbChkb3duY2FzdDxIVE1MRWxlbWVudD4oKmNhbmRpZGF0ZSkpKSkKKyAgICAg
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlICYmIHR5cGUoKSA9PSBEb2NBbGwgJiYgKCFpczxIVE1M
RWxlbWVudD4oKmNhbmRpZGF0ZSkgfHwgIW5hbWVTaG91bGRCZVZpc2libGVJbkRvY3VtZW50QWxs
KGRvd25jYXN0PEhUTUxFbGVtZW50PigqY2FuZGlkYXRlKSkpKQogICAgICAgICAgICAgICAgICAg
ICBjYW5kaWRhdGUgPSBudWxscHRyOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKQEAg
LTQ0Myw3ICs0NDMsNyBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lZEVsZW1lbnRD
YWNoZSgpIGNvbnN0CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZWxl
bWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgp
KQogICAgICAgICAgICAgY2FjaGUtPmFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBlbGVtZW50KTsK
LSAgICAgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgIGlmICghaXM8
SFRNTEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxlbWVudC0+Z2V0TmFtZUF0dHJpYnV0
ZSgpOwogICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0g
bmFtZUF0dHJWYWwgJiYgKHR5cGUoKSAhPSBEb2NBbGwgfHwgbmFtZVNob3VsZEJlVmlzaWJsZUlu
RG9jdW1lbnRBbGwoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCplbGVtZW50KSkpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuY3BwCmluZGV4IGIyZDY1OTVlYjE5NDRlYWMzMzFlMDI3OTg4YjQx
YjUyNGI1NGM1MmQuLjU4Mzc0ODIyNTRhMjU5MTYwNjRkZmM2YmNjMjY3YmViODg2YmE4MzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lk
IEhUTUxEb2N1bWVudDo6c2V0RGVzaWduTW9kZShjb25zdCBTdHJpbmcmIHZhbHVlKQogY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OmJnQ29sb3IoKSBjb25zdAogewogICAgIEhUTUxF
bGVtZW50KiBib2R5RWxlbWVudCA9IGJvZHkoKTsKLSAgICBpZiAoIWJvZHlFbGVtZW50IHx8ICFp
czxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxCb2R5RWxl
bWVudD4oYm9keUVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZW1wdHlBdG9tOwogICAgIHJldHVy
biBib2R5RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShiZ2NvbG9yQXR0cik7CiB9CkBAIC0xNDcs
NyArMTQ3LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OmJnQ29sb3IoKSBj
b25zdAogdm9pZCBIVE1MRG9jdW1lbnQ6OnNldEJnQ29sb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IHsKICAgICBIVE1MRWxlbWVudCogYm9keUVsZW1lbnQgPSBib2R5KCk7Ci0gICAgaWYgKCFib2R5
RWxlbWVudCB8fCAhaXM8SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCisgICAgaWYgKCFp
czxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogICAgIGJv
ZHlFbGVtZW50LT5zZXRBdHRyaWJ1dGUoYmdjb2xvckF0dHIsIHZhbHVlKTsKIH0KQEAgLTE1NSw3
ICsxNTUsNyBAQCB2b2lkIEhUTUxEb2N1bWVudDo6c2V0QmdDb2xvcihjb25zdCBTdHJpbmcmIHZh
bHVlKQogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OmZnQ29sb3IoKSBjb25zdAog
ewogICAgIEhUTUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJvZHkoKTsKLSAgICBpZiAoIWJvZHlF
bGVtZW50IHx8ICFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKKyAgICBpZiAoIWlz
PEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZW1wdHlBdG9t
OwogICAgIHJldHVybiBib2R5RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZSh0ZXh0QXR0cik7CiB9
CkBAIC0xNjMsNyArMTYzLDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OmZn
Q29sb3IoKSBjb25zdAogdm9pZCBIVE1MRG9jdW1lbnQ6OnNldEZnQ29sb3IoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBIVE1MRWxlbWVudCogYm9keUVsZW1lbnQgPSBib2R5KCk7Ci0gICAg
aWYgKCFib2R5RWxlbWVudCB8fCAhaXM8SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCisg
ICAgaWYgKCFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKICAgICAgICAgcmV0dXJu
OwogICAgIGJvZHlFbGVtZW50LT5zZXRBdHRyaWJ1dGUodGV4dEF0dHIsIHZhbHVlKTsKIH0KQEAg
LTE3MSw3ICsxNzEsNyBAQCB2b2lkIEhUTUxEb2N1bWVudDo6c2V0RmdDb2xvcihjb25zdCBTdHJp
bmcmIHZhbHVlKQogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OmFsaW5rQ29sb3Io
KSBjb25zdAogewogICAgIEhUTUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJvZHkoKTsKLSAgICBp
ZiAoIWJvZHlFbGVtZW50IHx8ICFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKKyAg
ICBpZiAoIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQogICAgICAgICByZXR1cm4g
ZW1wdHlBdG9tOwogICAgIHJldHVybiBib2R5RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhbGlu
a0F0dHIpOwogfQpAQCAtMTc5LDcgKzE3OSw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTERv
Y3VtZW50OjphbGlua0NvbG9yKCkgY29uc3QKIHZvaWQgSFRNTERvY3VtZW50OjpzZXRBbGlua0Nv
bG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgSFRNTEVsZW1lbnQqIGJvZHlFbGVtZW50
ID0gYm9keSgpOwotICAgIGlmICghYm9keUVsZW1lbnQgfHwgIWlzPEhUTUxCb2R5RWxlbWVudD4o
Ym9keUVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkp
CiAgICAgICAgIHJldHVybjsKICAgICBib2R5RWxlbWVudC0+c2V0QXR0cmlidXRlKGFsaW5rQXR0
ciwgdmFsdWUpOwogfQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpzZXRB
bGlua0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxE
b2N1bWVudDo6bGlua0NvbG9yKCkgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudCogYm9keUVsZW1l
bnQgPSBib2R5KCk7Ci0gICAgaWYgKCFib2R5RWxlbWVudCB8fCAhaXM8SFRNTEJvZHlFbGVtZW50
Pihib2R5RWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50
KSkKICAgICAgICAgcmV0dXJuIGVtcHR5QXRvbTsKICAgICByZXR1cm4gYm9keUVsZW1lbnQtPmZh
c3RHZXRBdHRyaWJ1dGUobGlua0F0dHIpOwogfQpAQCAtMTk1LDcgKzE5NSw3IEBAIGNvbnN0IEF0
b21pY1N0cmluZyYgSFRNTERvY3VtZW50OjpsaW5rQ29sb3IoKSBjb25zdAogdm9pZCBIVE1MRG9j
dW1lbnQ6OnNldExpbmtDb2xvcihjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEhUTUxFbGVt
ZW50KiBib2R5RWxlbWVudCA9IGJvZHkoKTsKLSAgICBpZiAoIWJvZHlFbGVtZW50IHx8ICFpczxI
VE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxCb2R5RWxlbWVu
dD4oYm9keUVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAgICAgcmV0dXJuIGJvZHlFbGVtZW50
LT5zZXRBdHRyaWJ1dGUobGlua0F0dHIsIHZhbHVlKTsKIH0KQEAgLTIwMyw3ICsyMDMsNyBAQCB2
b2lkIEhUTUxEb2N1bWVudDo6c2V0TGlua0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCiBjb25z
dCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6dmxpbmtDb2xvcigpIGNvbnN0CiB7CiAgICAg
SFRNTEVsZW1lbnQqIGJvZHlFbGVtZW50ID0gYm9keSgpOwotICAgIGlmICghYm9keUVsZW1lbnQg
fHwgIWlzPEhUTUxCb2R5RWxlbWVudD4oYm9keUVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTEJv
ZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCiAgICAgICAgIHJldHVybiBlbXB0eUF0b207CiAgICAg
cmV0dXJuIGJvZHlFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHZsaW5rQXR0cik7CiB9CkBAIC0y
MTEsNyArMjExLDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OnZsaW5rQ29s
b3IoKSBjb25zdAogdm9pZCBIVE1MRG9jdW1lbnQ6OnNldFZsaW5rQ29sb3IoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBIVE1MRWxlbWVudCogYm9keUVsZW1lbnQgPSBib2R5KCk7Ci0gICAg
aWYgKCFib2R5RWxlbWVudCB8fCAhaXM8SFRNTEJvZHlFbGVtZW50Pihib2R5RWxlbWVudCkpCisg
ICAgaWYgKCFpczxIVE1MQm9keUVsZW1lbnQ+KGJvZHlFbGVtZW50KSkKICAgICAgICAgcmV0dXJu
OwogICAgIHJldHVybiBib2R5RWxlbWVudC0+c2V0QXR0cmlidXRlKHZsaW5rQXR0ciwgdmFsdWUp
OwogfQpAQCAtMzM5LDggKzMzOSw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpjbGVhcigpCiAKIGJv
b2wgSFRNTERvY3VtZW50Ojppc0ZyYW1lU2V0KCkgY29uc3QKIHsKLSAgICBIVE1MRWxlbWVudCog
Ym9keUVsZW1lbnQgPSBib2R5KCk7Ci0gICAgcmV0dXJuIGJvZHlFbGVtZW50ICYmIGlzPEhUTUxG
cmFtZVNldEVsZW1lbnQ+KGJvZHlFbGVtZW50KTsKKyAgICByZXR1cm4gaXM8SFRNTEZyYW1lU2V0
RWxlbWVudD4oYm9keSgpKTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudD4gSFRNTERvY3VtZW50
OjpjbG9uZURvY3VtZW50V2l0aG91dENoaWxkcmVuKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAKaW5kZXggOWFjNDEzZjAxMDc1ZDM2OGVkNGRlNThkZTI2N2JkYmIzMzA1Y2Mx
Yi4uYzc5MzFhZTU3ZjIzNWJhZjk5YWRmYWZjYzI4MTIyOGI2ZTBkNzQwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTM2NCw3ICszNjQsNyBAQCBib29sIEhUTUxFbGVtZW50
OjptYXRjaGVzUmVhZFdyaXRlUHNldWRvQ2xhc3MoKSBjb25zdAogewogICAgIGNvbnN0IEVsZW1l
bnQqIGN1cnJlbnRFbGVtZW50ID0gdGhpczsKICAgICBkbyB7Ci0gICAgICAgIGlmIChpczxIVE1M
RWxlbWVudD4oY3VycmVudEVsZW1lbnQpKSB7CisgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4o
KmN1cnJlbnRFbGVtZW50KSkgewogICAgICAgICAgICAgc3dpdGNoIChjb250ZW50RWRpdGFibGVU
eXBlKGRvd25jYXN0PEhUTUxFbGVtZW50PigqY3VycmVudEVsZW1lbnQpKSkgewogICAgICAgICAg
ICAgY2FzZSBDb250ZW50RWRpdGFibGVUeXBlOjpUcnVlOgogICAgICAgICAgICAgY2FzZSBDb250
ZW50RWRpdGFibGVUeXBlOjpQbGFpbnRleHRPbmx5OgpAQCAtNDM2LDcgKzQzNiw3IEBAIHZvaWQg
SFRNTEVsZW1lbnQ6OnNldElubmVySFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogc3RhdGljIHZvaWQgbWVyZ2VXaXRoTmV4dFRleHROb2RlKFRleHQmIG5vZGUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIE5vZGUqIG5leHQgPSBub2RlLm5leHRTaWJsaW5nKCk7
Ci0gICAgaWYgKCFuZXh0IHx8ICFpczxUZXh0PihuZXh0KSkKKyAgICBpZiAoIWlzPFRleHQ+KG5l
eHQpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWY8VGV4dD4gdGV4dE5vZGUobm9kZSk7CkBA
IC00NTAsNyArNDUwLDcgQEAgc3RhdGljIHZvaWQgbWVyZ2VXaXRoTmV4dFRleHROb2RlKFRleHQm
IG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogdm9pZCBIVE1MRWxlbWVudDo6c2V0T3V0ZXJIVE1M
KGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgRWxlbWVudCog
cCA9IHBhcmVudEVsZW1lbnQoKTsKLSAgICBpZiAoIXAgfHwgIWlzPEhUTUxFbGVtZW50PihwKSkg
eworICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KHApKSB7CiAgICAgICAgIGVjID0gTk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDY0LDkgKzQ2
NCw5IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNldE91dGVySFRNTChjb25zdCBTdHJpbmcmIGh0bWws
IEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgCiAgICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQoZnJh
Z21lbnQucmVsZWFzZSgpLCB0aGlzLCBlYyk7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0
ID8gbmV4dC0+cHJldmlvdXNTaWJsaW5nKCkgOiBudWxscHRyOwotICAgIGlmICghZWMgJiYgbm9k
ZSAmJiBpczxUZXh0Pigqbm9kZSkpCisgICAgaWYgKCFlYyAmJiBpczxUZXh0Pihub2RlLmdldCgp
KSkKICAgICAgICAgbWVyZ2VXaXRoTmV4dFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpub2RlKSwg
ZWMpOwotICAgIGlmICghZWMgJiYgcHJldiAmJiBpczxUZXh0PigqcHJldikpCisgICAgaWYgKCFl
YyAmJiBpczxUZXh0PihwcmV2LmdldCgpKSkKICAgICAgICAgbWVyZ2VXaXRoTmV4dFRleHROb2Rl
KGRvd25jYXN0PFRleHQ+KCpwcmV2KSwgZWMpOwogfQogCkBAIC01OTcsOSArNTk3LDkgQEAgdm9p
ZCBIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQobmV3Q2hpbGQucmVsZWFzZSgpLCB0
aGlzLCBlYyk7CiAKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG5leHQgPyBuZXh0LT5wcmV2aW91
c1NpYmxpbmcoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFlYyAmJiBub2RlICYmIGlzPFRleHQ+KCpu
b2RlKSkKKyAgICBpZiAoIWVjICYmIGlzPFRleHQ+KG5vZGUuZ2V0KCkpKQogICAgICAgICBtZXJn
ZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKm5vZGUpLCBlYyk7Ci0gICAgaWYgKCFl
YyAmJiBwcmV2ICYmIGlzPFRleHQ+KCpwcmV2KSkKKyAgICBpZiAoIWVjICYmIGlzPFRleHQ+KHBy
ZXYuZ2V0KCkpKQogICAgICAgICBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4o
KnByZXYpLCBlYyk7CiB9CiAKQEAgLTY0Miw3ICs2NDIsNyBAQCBFbGVtZW50KiBIVE1MRWxlbWVu
dDo6aW5zZXJ0QWRqYWNlbnRFbGVtZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQqIG5l
d0NoaQogICAgIH0KIAogICAgIE5vZGUqIHJldHVyblZhbHVlID0gaW5zZXJ0QWRqYWNlbnQod2hl
cmUsIG5ld0NoaWxkLCBlYyk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
IXJldHVyblZhbHVlIHx8IGlzPEVsZW1lbnQ+KHJldHVyblZhbHVlKSk7CisgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXJldHVyblZhbHVlIHx8IGlzPEVsZW1lbnQ+KCpyZXR1
cm5WYWx1ZSkpOwogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihyZXR1cm5WYWx1ZSk7IAog
fQogCkBAIC02NTEsMTEgKzY1MSwxMSBAQCBzdGF0aWMgRWxlbWVudCogY29udGV4dEVsZW1lbnRG
b3JJbnNlcnRpb24oY29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCogZWxlbWVudAogewogICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZSh3aGVyZSwgImJlZm9yZUJlZ2luIikgfHwgZXF1YWxJZ25v
cmluZ0Nhc2Uod2hlcmUsICJhZnRlckVuZCIpKSB7CiAgICAgICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgaWYgKHBhcmVudCAmJiAhaXM8
RWxlbWVudD4ocGFyZW50KSkgeworICAgICAgICBpZiAocGFyZW50ICYmICFpczxFbGVtZW50Pigq
cGFyZW50KSkgewogICAgICAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighcGFyZW50IHx8IGlzPEVsZW1lbnQ+KHBhcmVudCkp
OworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighcGFyZW50IHx8IGlz
PEVsZW1lbnQ+KCpwYXJlbnQpKTsKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KHBh
cmVudCk7CiAgICAgfQogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh3aGVyZSwgImFmdGVyQmVn
aW4iKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh3aGVyZSwgImJlZm9yZUVuZCIpKQpAQCAtOTM0LDEz
ICs5MzQsMTMgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkoTm9k
ZSoqIHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpIGMKICAgICB3aGlsZSAobm9kZSkgewog
ICAgICAgICAvLyBTa2lwIGJkaSwgc2NyaXB0LCBzdHlsZSBhbmQgdGV4dCBmb3JtIGNvbnRyb2xz
LgogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uobm9kZS0+bm9kZU5hbWUoKSwgImJkaSIp
IHx8IG5vZGUtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHN0eWxl
VGFnKSAKLSAgICAgICAgICAgIHx8IChpczxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSkuaXNUZXh0Rm9ybUNvbnRyb2woKSkpIHsKKyAgICAgICAgICAgIHx8IChpczxF
bGVtZW50Pigqbm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzVGV4dEZvcm1Db250
cm9sKCkpKSB7CiAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4obm9kZSwgdGhpcyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIFNraXAgZWxlbWVudHMgd2l0aCB2YWxpZCBkaXIgYXR0cmlidXRlCi0gICAg
ICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgeworICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5v
ZGUpKSB7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgZGlyQXR0cmlidXRlVmFsdWUgPSBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuZmFzdEdldEF0dHJpYnV0ZShkaXJBdHRyKTsKICAgICAgICAg
ICAgIGlmIChpc0xUUk9yUlRMSWdub3JpbmdDYXNlKGRpckF0dHJpYnV0ZVZhbHVlKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShkaXJBdHRyaWJ1dGVWYWx1ZSwgImF1dG8iKSkgewogICAgICAgICAgICAg
ICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0aGlz
KTsKQEAgLTk2OCw3ICs5NjgsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjpkaXJBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgRWxlbWVudCogcGFyZW50ID0g
cGFyZW50RWxlbWVudCgpOwogCi0gICAgaWYgKHBhcmVudCAmJiBpczxIVE1MRWxlbWVudD4ocGFy
ZW50KSAmJiBwYXJlbnQtPnNlbGZPckFuY2VzdG9ySGFzRGlyQXV0b0F0dHJpYnV0ZSgpKQorICAg
IGlmIChpczxIVE1MRWxlbWVudD4ocGFyZW50KSAmJiBwYXJlbnQtPnNlbGZPckFuY2VzdG9ySGFz
RGlyQXV0b0F0dHJpYnV0ZSgpKQogICAgICAgICBkb3duY2FzdDxIVE1MRWxlbWVudD4oKnBhcmVu
dCkuYWRqdXN0RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFmdGVyQ2hpbGRBdHRyaWJ1dGVDaGFuZ2Vk
KHRoaXMpOwogCiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAiYXV0byIpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKaW5kZXggYzE5MDFlZTlhNmRiODFj
YTU3YTg5MzQwYTIxMmM3MTIxYWZkNTQ4Ny4uMzQ1NDJhZGI0MGI4MDk3ZmY0YWIzYThlN2Y2ZTlj
NjkzYjk0MGUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCkBA
IC0xODksNyArMTg5LDcgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAvLyBJZiBteSBwYXJlbnQgaXMgYW4gPG9i
amVjdD4gYW5kIGlzIG5vdCBzZXQgdG8gdXNlIGZhbGxiYWNrIGNvbnRlbnQsIEkKICAgICAvLyBz
aG91bGQgYmUgaWdub3JlZCBhbmQgbm90IGdldCBhIHJlbmRlcmVyLgogICAgIENvbnRhaW5lck5v
ZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAocGFyZW50ICYmIGlzPEhUTUxPYmpl
Y3RFbGVtZW50PihwYXJlbnQpKSB7CisgICAgaWYgKGlzPEhUTUxPYmplY3RFbGVtZW50PihwYXJl
bnQpKSB7CiAgICAgICAgIGlmICghcGFyZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PigqcGFy
ZW50KS51c2VGYWxsYmFja0NvbnRlbnQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZp
ZWxkU2V0RWxlbWVudC5jcHAKaW5kZXggYWMzNjUxZjE5MzVmNDk1MWExYzE1YWQ5Y2I3ZjdhZDZk
YmI3YjRlMi4uZmEzMWU1ZDIyM2M1YzNiMmNkMmU3ZTg3NWI2NjM3OWEzMDcxZTY3YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCkBAIC02NSw3ICs2NSw3
IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUZyb21Db250cm9sRWxlbWVudHNBbmNlc3RvckRpc2FibGVk
U3RhdGVVbmRlcihIVE1MRWxlbWVudCYgc3RhCiAgICAgd2hpbGUgKGNvbnRyb2wpIHsKICAgICAg
ICAgY29udHJvbC0+c2V0QW5jZXN0b3JEaXNhYmxlZChpc0Rpc2FibGVkKTsKICAgICAgICAgLy8g
RG9uJ3QgY2FsbCBzZXRBbmNlc3RvckRpc2FibGVkKGZhbHNlKSBvbiBmb3JtIGNvbnRvcmxzIGlu
c2lkZSBkaXNhYmxlZCBmaWVsZHNldHMuCi0gICAgICAgIGlmIChpczxIVE1MRmllbGRTZXRFbGVt
ZW50Pihjb250cm9sKSAmJiBjb250cm9sLT5mYXN0SGFzQXR0cmlidXRlKGRpc2FibGVkQXR0cikp
CisgICAgICAgIGlmIChpczxIVE1MRmllbGRTZXRFbGVtZW50PigqY29udHJvbCkgJiYgY29udHJv
bC0+ZmFzdEhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpKQogICAgICAgICAgICAgY29udHJvbCA9
IFRyYXZlcnNhbDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pjo6bmV4dFNraXBwaW5nQ2hpbGRyZW4o
Y29udHJvbCwgJnN0YXJ0Tm9kZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRyb2wg
PSBUcmF2ZXJzYWw8SFRNTEZvcm1Db250cm9sRWxlbWVudD46Om5leHQoY29udHJvbCwgJnN0YXJ0
Tm9kZSk7CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6ZGlzYWJs
ZWRTdGF0ZUNoYW5nZWQoKQogICAgIGJvb2wgdGhpc0ZpZWxkc2V0SXNEaXNhYmxlZCA9IGZhc3RI
YXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKTsKICAgICBib29sIGhhc1NlZW5GaXJzdExlZ2VuZEVs
ZW1lbnQgPSBmYWxzZTsKICAgICBmb3IgKEhUTUxFbGVtZW50KiBjb250cm9sID0gVHJhdmVyc2Fs
PEhUTUxFbGVtZW50Pjo6Zmlyc3RDaGlsZCh0aGlzKTsgY29udHJvbDsgY29udHJvbCA9IFRyYXZl
cnNhbDxIVE1MRWxlbWVudD46Om5leHRTaWJsaW5nKGNvbnRyb2wpKSB7Ci0gICAgICAgIGlmICgh
aGFzU2VlbkZpcnN0TGVnZW5kRWxlbWVudCAmJiBpczxIVE1MTGVnZW5kRWxlbWVudD4oY29udHJv
bCkpIHsKKyAgICAgICAgaWYgKCFoYXNTZWVuRmlyc3RMZWdlbmRFbGVtZW50ICYmIGlzPEhUTUxM
ZWdlbmRFbGVtZW50PigqY29udHJvbCkpIHsKICAgICAgICAgICAgIGhhc1NlZW5GaXJzdExlZ2Vu
ZEVsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgdXBkYXRlRnJvbUNvbnRyb2xFbGVtZW50c0Fu
Y2VzdG9yRGlzYWJsZWRTdGF0ZVVuZGVyKCpjb250cm9sLCBmYWxzZSAvKiBpc0Rpc2FibGVkICov
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggMTViMDNkZGVjNWZmZTE0OTYyYjIxODM3YmNiOTgx
YWM1OWY4MzUwMy4uYzJhYjIwOWMzODBjNjE1ZDE2YjdhNzFkYzEzNzFiNzBkZThlODIxZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0x
MDMsOSArMTAzLDkgQEAgYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRlSXNEaXNh
YmxlZEJ5RmllbGRzZXRBbmNlc3RvcigpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogcHJldmlvdXNB
bmNlc3RvciA9IG51bGxwdHI7CiAgICAgZm9yIChFbGVtZW50KiBhbmNlc3RvciA9IHBhcmVudEVs
ZW1lbnQoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudEVsZW1lbnQoKSkg
ewotICAgICAgICBpZiAoaXM8SFRNTEZpZWxkU2V0RWxlbWVudD4oYW5jZXN0b3IpICYmIGFuY2Vz
dG9yLT5mYXN0SGFzQXR0cmlidXRlKGRpc2FibGVkQXR0cikpIHsKKyAgICAgICAgaWYgKGlzPEhU
TUxGaWVsZFNldEVsZW1lbnQ+KCphbmNlc3RvcikgJiYgYW5jZXN0b3ItPmZhc3RIYXNBdHRyaWJ1
dGUoZGlzYWJsZWRBdHRyKSkgewogICAgICAgICAgICAgSFRNTEZpZWxkU2V0RWxlbWVudCYgZmll
bGRTZXRBbmNlc3RvciA9IGRvd25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KCphbmNlc3Rvcik7
Ci0gICAgICAgICAgICBib29sIGlzSW5GaXJzdExlZ2VuZCA9IHByZXZpb3VzQW5jZXN0b3IgJiYg
aXM8SFRNTExlZ2VuZEVsZW1lbnQ+KHByZXZpb3VzQW5jZXN0b3IpICYmIHByZXZpb3VzQW5jZXN0
b3IgPT0gZmllbGRTZXRBbmNlc3Rvci5sZWdlbmQoKTsKKyAgICAgICAgICAgIGJvb2wgaXNJbkZp
cnN0TGVnZW5kID0gaXM8SFRNTExlZ2VuZEVsZW1lbnQ+KHByZXZpb3VzQW5jZXN0b3IpICYmIHBy
ZXZpb3VzQW5jZXN0b3IgPT0gZmllbGRTZXRBbmNlc3Rvci5sZWdlbmQoKTsKICAgICAgICAgICAg
IHJldHVybiAhaXNJbkZpcnN0TGVnZW5kOwogICAgICAgICB9CiAgICAgICAgIHByZXZpb3VzQW5j
ZXN0b3IgPSBhbmNlc3RvcjsKQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRB
dXRvZm9jdXMoSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCkKIAogICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyBzZXQgb2YgaGFzVGFnTmFtZSBjaGVja3MgYmUgcmVwbGFjZWQgYnkgYQog
ICAgIC8vIHZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9uPwotICAgIGlmIChpczxIVE1MSW5wdXRFbGVt
ZW50PihlbGVtZW50KSkKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQog
ICAgICAgICByZXR1cm4gIWRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KS5pc0lu
cHV0VHlwZUhpZGRlbigpOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHNlbGVjdFRhZykp
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAwLDcgKzIwMCw3IEBAIHN0YXRpYyBib29sIHNo
b3VsZEF1dG9mb2N1cyhIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShidXR0b25UYWcpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxlbWVu
dCkpCisgICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC01MDgsNyArNTA4LDcgQEAgdm9p
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRBdXRvY2FwaXRhbGl6ZShjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKQogSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6ZW5jbG9zaW5nRm9ybUNvbnRyb2xFbGVtZW50KE5vZGUqIG5vZGUpCiB7CiAgICAgZm9y
ICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCBiOWMzN2UwNWIwYTg0ZTNjZTQ1
OWJkYjRmMTlmMjNlMGYxZDIxM2ZlLi4zMGRmNmUwMzg5ZTI2ZDNiNmU1NDQzYTJkZjhmYWYwMDAx
MzM3NmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0xMTAs
NyArMTEwLDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhN
RTogU2hvdWxkbid0IHdlIGFsc28gY2hlY2sgZm9yIHRhYmxlIGNhcHRpb24gKHNlZSB8Zm9ybUlz
VGFibGVQYXJ0fCBiZWxvdykuCi0gICAgYm9vbCBwYXJlbnRJc1RhYmxlRWxlbWVudFBhcnQgPSAo
cGFyZW50UmVuZGVyZXItPmlzVGFibGUoKSAmJiBpczxIVE1MVGFibGVFbGVtZW50PihwYXJlbnQp
KQorICAgIGJvb2wgcGFyZW50SXNUYWJsZUVsZW1lbnRQYXJ0ID0gKHBhcmVudFJlbmRlcmVyLT5p
c1RhYmxlKCkgJiYgaXM8SFRNTFRhYmxlRWxlbWVudD4oKnBhcmVudCkpCiAgICAgICAgIHx8IChw
YXJlbnRSZW5kZXJlci0+aXNUYWJsZVJvdygpICYmIHBhcmVudC0+aGFzVGFnTmFtZSh0clRhZykp
CiAgICAgICAgIHx8IChwYXJlbnRSZW5kZXJlci0+aXNUYWJsZVNlY3Rpb24oKSAmJiBwYXJlbnQt
Pmhhc1RhZ05hbWUodGJvZHlUYWcpKQogICAgICAgICB8fCAocGFyZW50UmVuZGVyZXItPmlzUmVu
ZGVyVGFibGVDb2woKSAmJiBwYXJlbnQtPmhhc1RhZ05hbWUoY29sVGFnKSkKQEAgLTE4Miw3ICsx
ODIsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0SW1wbGljaXRseShFdmVudCogZXZl
bnQsIGJvb2wgZnJvbUltcGxpY2l0U3VibWlzc2lvbgogICAgIHVuc2lnbmVkIHN1Ym1pc3Npb25U
cmlnZ2VyQ291bnQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0
ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQq
IGZvcm1Bc3NvY2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwotICAgICAg
ICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGZvcm1Bc3NvY2lhdGVkRWxlbWVudCkp
CisgICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmZvcm1Bc3NvY2lhdGVk
RWxlbWVudCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCYgZm9ybUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pigq
Zm9ybUFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAgICAgaWYgKGZvcm1FbGVtZW50LmlzU3VjY2Vz
c2Z1bFN1Ym1pdEJ1dHRvbigpKSB7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBIVE1MRm9ybUVs
ZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqIGV2ZW50LCBib29sIGZyb21JbXBsaWNpdFN1
Ym1pc3Npb24KIHN0YXRpYyBpbmxpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVudCogc3VibWl0RWxl
bWVudEZyb21FdmVudChjb25zdCBFdmVudCogZXZlbnQpCiB7CiAgICAgZm9yIChOb2RlKiBub2Rl
ID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSkpCisg
ICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSk7CiAgICAgfQog
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMjIzLDcgKzIyMyw3IEBAIGJvb2wgSFRNTEZvcm1FbGVt
ZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkoRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
bV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pKQorICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKICAgICAgICAgICAgIGRvd25jYXN0
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkuaGlkZVZp
c2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwogICAgIH0KIApAQCAtMzQ1LDcgKzM0NSw3IEBAIHZv
aWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW50LCBib29sIGFjdGl2YXRlU3Vi
bWl0QnV0dG9uLCBib29sIHByb2NlCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
c3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRm9ybUFzc29jaWF0ZWRF
bGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwotICAg
ICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGFzc29jaWF0ZWRFbGVtZW50KSkK
KyAgICAgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqYXNzb2NpYXRlZEVsZW1l
bnQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChuZWVkQnV0dG9uQWN0aXZh
dGlvbikgewogICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgY29udHJvbCA9IGRv
d25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCphc3NvY2lhdGVkRWxlbWVudCk7CkBAIC0z
ODQsNyArMzg0LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlc2V0KCkKICAgICB9CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG1fYXNzb2NpYXRl
ZEVsZW1lbnRzW2ldKSkKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpt
X2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkpCiAgICAgICAgICAgICBkb3duY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLnJlc2V0KCk7CiAgICAgfQog
CkBAIC02OTYsNyArNjk2LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6Ondhc1VzZXJTdWJtaXR0
ZWQoKSBjb25zdAogSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OjpkZWZh
dWx0QnV0dG9uKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3Nv
Y2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PihtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkpCisgICAgICAgIGlmICghaXM8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50JiBjb250cm9s
ID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRz
W2ldKTsKICAgICAgICAgaWYgKGNvbnRyb2wuaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpCkBA
IC04MTAsNyArODEwLDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmRvY3VtZW50RGlkUmVzdW1l
RnJvbVBhZ2VDYWNoZSgpCiAgICAgQVNTRVJUKCFzaG91bGRBdXRvY29tcGxldGUoKSk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG1fYXNzb2NpYXRl
ZEVsZW1lbnRzW2ldKSkKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpt
X2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkpCiAgICAgICAgICAgICBkb3duY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLnJlc2V0KCk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCmluZGV4
IGE1ZTMxOTU4NDRlM2RmNjhmOTI1OTQyMGIxN2YzMWYxOTk4MWUzYTcuLjUyMDQ3MjY0OTQzNWE4
ZjViYTczZTZjNmEzZWEwNjE2ZGVhYmE2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZU93bmVyRWxlbWVudC5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCBib29sIEhUTUxGcmFt
ZU93bmVyRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkg
Y29uc3QKIFNWR0RvY3VtZW50KiBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmdldFNWR0RvY3VtZW50
KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNv
bnRlbnREb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudCAmJiBpczxTVkdEb2N1bWVudD4oZG9j
dW1lbnQpKQorICAgIGlmIChpczxTVkdEb2N1bWVudD4oZG9jdW1lbnQpKQogICAgICAgICByZXR1
cm4gZG93bmNhc3Q8U1ZHRG9jdW1lbnQ+KGRvY3VtZW50KTsKICAgICAvLyBTcGVjOiBodHRwOi8v
d3d3LnczLm9yZy9UUi9TVkcvc3RydWN0Lmh0bWwjSW50ZXJmYWNlR2V0U1ZHRG9jdW1lbnQKICAg
ICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
U2V0RWxlbWVudC5jcHAKaW5kZXggMzVlYTUyY2JjZWNiYzQ5NGMwZmY3ZTY3ZTRkMzQ1OWNjZDU5
ZmQ5YS4uOWE3OTYxN2RlYjNjNjczNjU3NDk1MDIwZTUwNDUxNTA3MjNkZmRkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCkBAIC0xODksNyArMTg5LDgg
QEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50Ojp3aWxsQXR0YWNoUmVuZGVyZXJzKCkKIAogdm9p
ZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
IHsKLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYmICFtX25vcmVzaXplICYmIHJlbmRl
cmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNGcmFtZVNldCgpKSB7CisgICAgQVNTRVJUKGV2ZW50KTsK
KyAgICBpZiAoaXM8TW91c2VFdmVudD4oKmV2ZW50KSAmJiAhbV9ub3Jlc2l6ZSAmJiByZW5kZXJl
cigpICYmIHJlbmRlcmVyKCktPmlzRnJhbWVTZXQoKSkgewogICAgICAgICBpZiAodG9SZW5kZXJG
cmFtZVNldChyZW5kZXJlcigpKS0+dXNlclJlc2l6ZShkb3duY2FzdDxNb3VzZUV2ZW50PihldmVu
dCkpKSB7CiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4
IGVhZjI2NTRlNTk3YmIwZTQ5MmE4Zjg5ZjM3MjcxNGNjMWU1NDQzY2MuLjA0MGJhMDE4YjlkYTY2
YjdjNjUyOGM3NTdmNWM2NjEzZDllODI3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcApAQCAtMTA0NSwyMSArMTA0NSwyMiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OmRpZERpc3BhdGNoQ2xpY2tFdmVudChFdmVudCYgZXZlbnQsIGNvbnN0IElucHV0RWxlbWVu
dENsaQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
IGV2dCkKIHsKLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZ0KSAmJiBldnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZ0KS5idXR0
b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgQVNTRVJUKGV2dCk7CisgICAgaWYgKGlzPE1vdXNl
RXZlbnQ+KCpldnQpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYm
IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAg
ICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUNsaWNrRXZlbnQoZG93bmNhc3Q8TW91c2VFdmVudD4o
ZXZ0KSk7CiAgICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAoaXM8VG91
Y2hFdmVudD4oZXZ0KSkgeworICAgIGlmIChpczxUb3VjaEV2ZW50PigqZXZ0KSkgewogICAgICAg
ICBtX2lucHV0VHlwZS0+aGFuZGxlVG91Y2hFdmVudChkb3duY2FzdDxUb3VjaEV2ZW50PihldnQp
KTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldnQpICYmIGV2
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICBpZiAoaXM8S2V5
Ym9hcmRFdmVudD4oKmV2dCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25F
dmVudCkgewogICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5ZG93bkV2ZW50KGRvd25jYXN0
PEtleWJvYXJkRXZlbnQ+KGV2dCkpOwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTA4Niw3ICsxMDg3LDcgQEAgdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAKICAgICAvLyBVc2Ug
a2V5IHByZXNzIGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2UgZXZlbnRz
CiAgICAgLy8gb24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0aGUga2V5
IHByZXNzIGV2ZW50LgotICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldnQpKSB7CisgICAgaWYg
KGlzPEtleWJvYXJkRXZlbnQ+KCpldnQpKSB7CiAgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJv
YXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZ0KTsKICAgICAgICAgaWYgKGtl
eWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CiAgICAg
ICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5cHJlc3NFdmVudCgma2V5Ym9hcmRFdmVudCk7
CkBAIC0xMTE4LDEwICsxMTE5LDEwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZ0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KGlzPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PihldnQpKQorICAgIGlmIChpczxCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudD4oKmV2dCkpCiAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudChkb3duY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4oZXZ0KSk7
CiAKLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZ0KSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oKmV2dCkgJiYg
ZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CiAgICAgICAgIG1f
aW5wdXRUeXBlLT5oYW5kbGVNb3VzZURvd25FdmVudChkb3duY2FzdDxNb3VzZUV2ZW50PihldnQp
KTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTE1MjIsNyArMTUyMyw3IEBAIEhUTUxEYXRhTGlzdEVsZW1lbnQqIEhUTUxJbnB1dEVs
ZW1lbnQ6OmRhdGFMaXN0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBF
bGVtZW50KiBlbGVtZW50ID0gdHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0dHJp
YnV0ZShsaXN0QXR0cikpOwotICAgIGlmICghZWxlbWVudCB8fCAhaXM8SFRNTERhdGFMaXN0RWxl
bWVudD4oZWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MRGF0YUxpc3RFbGVtZW50PihlbGVtZW50
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTERh
dGFMaXN0RWxlbWVudD4oZWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxMYWJlbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVt
ZW50LmNwcAppbmRleCAxMjUyNjBmYzYzMmY0MjNmNWY1NmYyODFjNDJjOGIwYTI3Y2M3NzVhLi4y
ZTE5ODg5ODY5NWEzNTU2NTQzZDMzYWM0OGVhM2M3ZDU3ZTY3YTVkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAogc3RhdGljIExhYmVsYWJsZUVsZW1lbnQqIG5vZGVBc1N1cHBvcnRl
ZExhYmVsYWJsZUVsZW1lbnQoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIWlzPExh
YmVsYWJsZUVsZW1lbnQ+KCpub2RlKSkKKyAgICBpZiAoIWlzPExhYmVsYWJsZUVsZW1lbnQ+KG5v
ZGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBMYWJlbGFibGVFbGVtZW50JiBlbGVt
ZW50ID0gZG93bmNhc3Q8TGFiZWxhYmxlRWxlbWVudD4oKm5vZGUpOwogICAgIHJldHVybiBlbGVt
ZW50LnN1cHBvcnRMYWJlbHMoKSA/ICZlbGVtZW50IDogbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKaW5kZXggOGU5YzgyOTMxYzI0NGQxOTlhODY3OTM2
MzdkZjNkMDYzYTVhZjY2OC4uYTE5N2MyMWUwNTg5Zjc5MjI4MzEzMjZmMDEyMzAyNDIyMThmZjAz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKQEAgLTc5LDcg
Kzc5LDcgQEAgSFRNTEZvcm1FbGVtZW50KiBIVE1MTGVnZW5kRWxlbWVudDo6dmlydHVhbEZvcm0o
KSBjb25zdAogICAgIC8vIGl0cyBwYXJlbnQsIHRoZW4gdGhlIGZvcm0gYXR0cmlidXRlIG11c3Qg
cmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHRoZQogICAgIC8vIGZvcm0gYXR0cmlidXRlIG9uIHRo
YXQgZmllbGRzZXQgZWxlbWVudC4gT3RoZXJ3aXNlLCBpdCBtdXN0IHJldHVybiBudWxsLgogICAg
IENvbnRhaW5lck5vZGUqIGZpZWxkc2V0ID0gcGFyZW50Tm9kZSgpOwotICAgIGlmICghZmllbGRz
ZXQgfHwgIWlzPEhUTUxGaWVsZFNldEVsZW1lbnQ+KGZpZWxkc2V0KSkKKyAgICBpZiAoIWlzPEhU
TUxGaWVsZFNldEVsZW1lbnQ+KGZpZWxkc2V0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudD4oKmZpZWxkc2V0KS5mb3Jt
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBlOWYwY2Q5
MGFkOGVmZTk0OTU4NTMyNDgzYzdkNTdhZGNlMWUwNzBhLi4xYzMwNWEyNjcwZTgyMGE4MGM0MWZh
ODJjMTkyMjVlNjI2ODRlNTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAKQEAgLTQ4NzcsNyArNDg3Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJG
dWxsc2NyZWVuKCkKICAgICBtX2lzSW5WaWRlb0Z1bGxzY3JlZW4gPSB0cnVlOwogICAgIGlmICho
YXNNZWRpYUNvbnRyb2xzKCkpCiAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+ZW50ZXJlZEZ1bGxz
Y3JlZW4oKTsKLSAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCkgJiYgaXM8SFRNTFZpZGVvRWxlbWVu
dD4odGhpcykpIHsKKyAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCkgJiYgaXM8SFRNTFZpZGVvRWxl
bWVudD4oKnRoaXMpKSB7CiAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQmIGFzVmlkZW8gPSBkb3du
Y2FzdDxIVE1MVmlkZW9FbGVtZW50PigqdGhpcyk7CiAgICAgICAgIGlmIChkb2N1bWVudCgpLnBh
Z2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKSkgewogICAg
ICAgICAgICAgZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmVudGVyVmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCZhc1ZpZGVvKTsKQEAgLTQ5MDEsNyArNDkwMSw3IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZXhpdEZ1bGxzY3JlZW4oKQogICAgIG1faXNJblZpZGVv
RnVsbHNjcmVlbiA9IGZhbHNlOwogICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCiAgICAgICAg
IG1lZGlhQ29udHJvbHMoKS0+ZXhpdGVkRnVsbHNjcmVlbigpOwotICAgIGlmIChkb2N1bWVudCgp
LnBhZ2UoKSAmJiBpczxIVE1MVmlkZW9FbGVtZW50Pih0aGlzKSkgeworICAgIGlmIChkb2N1bWVu
dCgpLnBhZ2UoKSAmJiBpczxIVE1MVmlkZW9FbGVtZW50PigqdGhpcykpIHsKICAgICAgICAgaWYg
KG1fbWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCp0aGlz
KSkKICAgICAgICAgICAgIHBhdXNlSW50ZXJuYWwoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPYmplY3RFbGVtZW50LmNwcAppbmRleCAxNDkzOGZhZDBjNGM3NjZlZGJmNzViZjgzMjA3YTkx
N2RhMjRiMGQyLi42ODhiNDUwYTM4MzQ2N2YwOTYyYmIxMWU0N2E5M2JlNjk4OTZmMWFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtMjMxLDEwICsyMzEs
MTAgQEAgYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6aGFzRmFsbGJhY2tDb250ZW50KCkgY29uc3QK
IHsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZS1vbmx5
IHRleHQsIGFuZCA8cGFyYW0+IHRhZ3MsIGFueSBvdGhlciBjb250ZW50IGlzIGZhbGxiYWNrIGNv
bnRlbnQuCi0gICAgICAgIGlmIChpczxUZXh0PihjaGlsZCkpIHsKKyAgICAgICAgaWYgKGlzPFRl
eHQ+KCpjaGlsZCkpIHsKICAgICAgICAgICAgIGlmICghZG93bmNhc3Q8VGV4dD4oKmNoaWxkKS5j
b250YWluc09ubHlXaGl0ZXNwYWNlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoIWlzPEhUTUxQYXJhbUVsZW1lbnQ+KGNoaWxkKSkKKyAgICAgICAg
fSBlbHNlIGlmICghaXM8SFRNTFBhcmFtRWxlbWVudD4oKmNoaWxkKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC00MjMsMTIgKzQyMywxMiBA
QCB2b2lkIEhUTUxPYmplY3RFbGVtZW50Ojp1cGRhdGVEb2NOYW1lZEl0ZW0oKQogICAgIGJvb2wg
aXNOYW1lZEl0ZW0gPSB0cnVlOwogICAgIE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAg
IHdoaWxlIChjaGlsZCAmJiBpc05hbWVkSXRlbSkgewotICAgICAgICBpZiAoaXM8RWxlbWVudD4o
Y2hpbGQpKSB7CisgICAgICAgIGlmIChpczxFbGVtZW50PigqY2hpbGQpKSB7CiAgICAgICAgICAg
ICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKmNoaWxkKTsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBVc2Ugb2YgaXNSZWNvZ25pemVkVGFnTmFtZSBpcyBhbG1vc3QgY2VydGFp
bmx5IHdyb25nIGhlcmUuCiAgICAgICAgICAgICBpZiAoaXNSZWNvZ25pemVkVGFnTmFtZShlbGVt
ZW50LnRhZ1FOYW1lKCkpICYmICFlbGVtZW50Lmhhc1RhZ05hbWUocGFyYW1UYWcpKQogICAgICAg
ICAgICAgICAgIGlzTmFtZWRJdGVtID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8VGV4
dD4oY2hpbGQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8VGV4dD4oKmNoaWxkKSkgewogICAg
ICAgICAgICAgaWYgKCFkb3duY2FzdDxUZXh0PigqY2hpbGQpLmNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UoKSkKICAgICAgICAgICAgICAgICBpc05hbWVkSXRlbSA9IGZhbHNlOwogICAgICAgICB9IGVs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCmluZGV4IGQ3
YmQ2Y2NkYjMzMmVhZGJmZmE1MWU1NDFkMjUxMmQyYzU0NDU5YmIuLmJiMzI3YjQzNzY1N2E4ZjMy
Y2Y0MjI3MWY4NmJmM2Y0NTU2ODhiNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0
R3JvdXBFbGVtZW50LmNwcApAQCAtODYsNyArODYsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21p
Ywogdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpyZWNhbGNTZWxlY3RPcHRpb25zKCkKIHsKICAg
ICBDb250YWluZXJOb2RlKiBzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKHNlbGVj
dCAmJiAhaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KHNlbGVjdCkpCisgICAgd2hpbGUgKHNlbGVjdCAm
JiAhaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KCpzZWxlY3QpKQogICAgICAgICBzZWxlY3QgPSBzZWxl
Y3QtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoc2VsZWN0KQogICAgICAgICBkb3duY2FzdDxIVE1M
U2VsZWN0RWxlbWVudD4oKnNlbGVjdCkuc2V0UmVjYWxjTGlzdEl0ZW1zKCk7CkBAIC0xMDcsNyAr
MTA3LDcgQEAgU3RyaW5nIEhUTUxPcHRHcm91cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KCkgY29u
c3QKIEhUTUxTZWxlY3RFbGVtZW50KiBIVE1MT3B0R3JvdXBFbGVtZW50Ojpvd25lclNlbGVjdEVs
ZW1lbnQoKSBjb25zdAogewogICAgIENvbnRhaW5lck5vZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUo
KTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmICFpczxIVE1MU2VsZWN0RWxlbWVudD4oc2VsZWN0KSkK
KyAgICB3aGlsZSAoc2VsZWN0ICYmICFpczxIVE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdCkpCiAg
ICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIAogICAgIGlmICghc2Vs
ZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAppbmRleCA3NzEz
NTg5Y2Y4MGUwZTMyOGU3NGEzNDBjMThkZTEwMmU3MjlkZDhjLi5hNjVhYzhiMTIzNDUwYzE3YTMx
MWIyNjQ0MDc4OGMwMDNkMzI2OGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25F
bGVtZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNl
dFRleHQoY29uc3QgU3RyaW5nICZ0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgIC8vIEhh
bmRsZSB0aGUgY29tbW9uIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGVyZSdzIGV4YWN0bHkgMSBjaGls
ZCBub2RlLCBhbmQgaXQncyBhIHRleHQgbm9kZS4KICAgICBOb2RlKiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsKLSAgICBpZiAoY2hpbGQgJiYgaXM8VGV4dD4oY2hpbGQpICYmICFjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKKyAgICBpZiAoaXM8VGV4dD4oY2hpbGQpICYmICFjaGlsZC0+bmV4dFNpYmxpbmco
KSkKICAgICAgICAgZG93bmNhc3Q8VGV4dD4oKmNoaWxkKS5zZXREYXRhKHRleHQsIGVjKTsKICAg
ICBlbHNlIHsKICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKQEAgLTE2MCw3ICsxNjAsNyBAQCBp
bnQgSFRNTE9wdGlvbkVsZW1lbnQ6OmluZGV4KCkgY29uc3QKICAgICBjb25zdCBWZWN0b3I8SFRN
TEVsZW1lbnQqPiYgaXRlbXMgPSBzZWxlY3RFbGVtZW50LT5saXN0SXRlbXMoKTsKICAgICBzaXpl
X3QgbGVuZ3RoID0gaXRlbXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbXNbaV0p
KQorICAgICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNbaV0pKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChpdGVtc1tpXSA9PSB0aGlzKQogICAgICAgICAg
ICAgcmV0dXJuIG9wdGlvbkluZGV4OwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgSFRNTE9wdGlv
bkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQogSFRN
TERhdGFMaXN0RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyRGF0YUxpc3RFbGVtZW50
KCkgY29uc3QKIHsKICAgICBmb3IgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUo
KTsgcGFyZW50IDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYg
KGlzPEhUTUxEYXRhTGlzdEVsZW1lbnQ+KHBhcmVudCkpCisgICAgICAgIGlmIChpczxIVE1MRGF0
YUxpc3RFbGVtZW50PigqcGFyZW50KSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1M
RGF0YUxpc3RFbGVtZW50PihwYXJlbnQpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTI2Nyw3ICsyNjcsNyBAQCBIVE1MRGF0YUxpc3RFbGVtZW50KiBIVE1MT3B0aW9uRWxlbWVudDo6
b3duZXJEYXRhTGlzdEVsZW1lbnQoKSBjb25zdAogSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRp
b25FbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQoKSBjb25zdAogewogICAgIENvbnRhaW5lck5v
ZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmICFpczxIVE1M
U2VsZWN0RWxlbWVudD4oc2VsZWN0KSkKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFpczxIVE1MU2Vs
ZWN0RWxlbWVudD4oKnNlbGVjdCkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9k
ZSgpOwogCiAgICAgaWYgKCFzZWxlY3QpCkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBIVE1MT3B0
aW9uRWxlbWVudDo6d2lsbFJlc2V0Q29tcHV0ZWRTdHlsZSgpCiBTdHJpbmcgSFRNTE9wdGlvbkVs
ZW1lbnQ6OnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKSBjb25zdAogewogICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAocGFyZW50ICYmIGlz
PEhUTUxPcHRHcm91cEVsZW1lbnQ+KHBhcmVudCkpCisgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVs
ZW1lbnQ+KHBhcmVudCkpCiAgICAgICAgIHJldHVybiAiICAgICIgKyB0ZXh0KCk7CiAgICAgcmV0
dXJuIHRleHQoKTsKIH0KQEAgLTMxMiw3ICszMTIsNyBAQCBib29sIEhUTUxPcHRpb25FbGVtZW50
Ojppc0Rpc2FibGVkRm9ybUNvbnRyb2woKSBjb25zdAogICAgIGlmIChvd25FbGVtZW50RGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIXBhcmVudE5vZGUoKSB8fCAh
aXM8SFRNTE9wdEdyb3VwRWxlbWVudD4ocGFyZW50Tm9kZSgpKSkKKyAgICBpZiAoIWlzPEhUTUxP
cHRHcm91cEVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50PigqcGFyZW50Tm9kZSgpKS5p
c0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKQEAgLTMzOCwxMCArMzM4LDEwIEBAIFN0cmluZyBIVE1M
T3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCgpIGNvbnN0CiB7CiAgICAgU3Ry
aW5nQnVpbGRlciB0ZXh0OwogICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9k
ZTsgKSB7Ci0gICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPFRleHQ+
KCpub2RlKSkKICAgICAgICAgICAgIHRleHQuYXBwZW5kKG5vZGUtPm5vZGVWYWx1ZSgpKTsKICAg
ICAgICAgLy8gVGV4dCBub2RlcyBpbnNpZGUgc2NyaXB0IGVsZW1lbnRzIGFyZSBub3QgcGFydCBv
ZiB0aGUgb3B0aW9uIHRleHQuCi0gICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSAmJiB0b1Nj
cmlwdEVsZW1lbnRJZlBvc3NpYmxlKGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSkKKyAgICAgICAg
aWYgKGlzPEVsZW1lbnQ+KCpub2RlKSAmJiB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGUpKSkKICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0aGlzKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAppbmRleCAzYjg2ODg0OWYzMzQz
YzdmNWMzM2FmN2U2Y2FkN2FlYzgxMzJhYWNiLi4wNjM2MTJmZGVlNjU0NjMzNmVlNzRkNjM1OGMy
ZmI2NzAwYWVjMjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdl
RWxlbWVudC5jcHAKQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgdm9pZCBhZGRQbHVnSW5zRnJv
bU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4oSFRNTFBsdWdJbkltYWdlRWxlbWVudExpcwog
ewogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IGNvbGxlY3Rpb24tPmxlbmd0aCgp
OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGNvbGxlY3Rpb24tPml0
ZW0oaSk7Ci0gICAgICAgIGlmIChpczxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Pihub2RlKSkgewor
ICAgICAgICBpZiAoaXM8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAg
ICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBkb3duY2Fz
dDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgICAgICBjb25zdCBVUkwm
IGxvYWRlZFVSTCA9IHBsdWdJbkltYWdlRWxlbWVudC5sb2FkZWRVcmwoKTsKICAgICAgICAgICAg
IFN0cmluZyBvdGhlck1pbWVUeXBlID0gcGx1Z0luSW1hZ2VFbGVtZW50LmxvYWRlZE1pbWVUeXBl
KCk7CkBAIC03NDcsNyArNzQ3LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBSZW5kZXJFbGVtZW50KiByID0g
cmVuZGVyZXIoKTsKICAgICBpZiAociAmJiByLT5pc0VtYmVkZGVkT2JqZWN0KCkpIHsKLSAgICAg
ICAgaWYgKGRpc3BsYXlTdGF0ZSgpID09IFdhaXRpbmdGb3JTbmFwc2hvdCAmJiBpczxNb3VzZUV2
ZW50PihldmVudCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkg
eworICAgICAgICBpZiAoZGlzcGxheVN0YXRlKCkgPT0gV2FpdGluZ0ZvclNuYXBzaG90ICYmIGlz
PE1vdXNlRXZlbnQ+KCpldmVudCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xp
Y2tFdmVudCkgewogICAgICAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0
PE1vdXNlRXZlbnQ+KCpldmVudCk7CiAgICAgICAgICAgICBpZiAobW91c2VFdmVudC5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgICAgICAgICAgdXNlckRpZENsaWNrU25hcHNob3Qo
Jm1vdXNlRXZlbnQsIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50
LmNwcAppbmRleCAxYzI3NWMxMTE2MGQ5ZTUwZTk4MmQzNzY1MTg2MDZkODg2OTEzMWE2Li41NWYx
ZWYzZTUwNzVkMzI1YTBjYzNkYjZhMTMzMmU3NzNlNDIzZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lkIEhUTUxTY3Jp
cHRFbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7CiAgICAgUmVmPEhUTUxT
Y3JpcHRFbGVtZW50PiBwcm90ZWN0RnJvbU11dGF0aW9uRXZlbnRzKCp0aGlzKTsKIAotICAgIGlm
IChoYXNPbmVDaGlsZCgpICYmIGlzPFRleHQ+KGZpcnN0Q2hpbGQoKSkpIHsKKyAgICBpZiAoaGFz
T25lQ2hpbGQoKSAmJiBpczxUZXh0PigqZmlyc3RDaGlsZCgpKSkgewogICAgICAgICBkb3duY2Fz
dDxUZXh0PigqZmlyc3RDaGlsZCgpKS5zZXREYXRhKHZhbHVlLCBJR05PUkVfRVhDRVBUSU9OKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHAKaW5kZXggZjk2NDhkYjk4ZDE5YmEzMDFlNDU1NjcxNjU0M2UzMGI5OWI1NWM3OC4u
YzRkMTI2NWU3NDU5MzVhZWMwYzA0MWY5MmM5NjM3NTIwNGIwYmZkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKQEAgLTUyMSw3ICs1MjEsNyBAQCBpbnQgSFRN
TFNlbGVjdEVsZW1lbnQ6Om5leHRWYWxpZEluZGV4KGludCBsaXN0SW5kZXgsIFNraXBEaXJlY3Rp
b24gZGlyZWN0aW9uLCBpbgogICAgIGludCBzaXplID0gbGlzdEl0ZW1zLnNpemUoKTsKICAgICBm
b3IgKGxpc3RJbmRleCArPSBkaXJlY3Rpb247IGxpc3RJbmRleCA+PSAwICYmIGxpc3RJbmRleCA8
IHNpemU7IGxpc3RJbmRleCArPSBkaXJlY3Rpb24pIHsKICAgICAgICAgLS1za2lwOwotICAgICAg
ICBpZiAoIWxpc3RJdGVtc1tsaXN0SW5kZXhdLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiBp
czxIVE1MT3B0aW9uRWxlbWVudD4obGlzdEl0ZW1zW2xpc3RJbmRleF0pKSB7CisgICAgICAgIGlm
ICghbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICYmIGlzPEhU
TUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1zW2xpc3RJbmRleF0pKSB7CiAgICAgICAgICAgICBs
YXN0R29vZEluZGV4ID0gbGlzdEluZGV4OwogICAgICAgICAgICAgaWYgKHNraXAgPD0gMCkKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTYwNSw3ICs2MDUsNyBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbigpCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50
Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0
ZW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNb
aV07Ci0gICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmFwcGVuZChpczxIVE1MT3B0aW9u
RWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQp
LT5zZWxlY3RlZCgpKTsKKyAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5kKGlz
PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKQEAgLTYyMCw3ICs2MjAsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChp
bnQgaW5kZXgpCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07Ci0gICAgICAgIG1fY2Fj
aGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzPEhUTUxPcHRpb25FbGVtZW50Pihl
bGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCktPnNlbGVjdGVk
KCkpOworICAgICAgICBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLmFwcGVuZChpczxI
VE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50
PigqZWxlbWVudCkuc2VsZWN0ZWQoKSk7CiAgICAgfQogfQogCkBAIC02NDQsNyArNjQ0LDcgQEAg
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbGVjdGlvbihib29sIGRlc2Vs
ZWN0T3RoZXJPcHRpb25zKQogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7
ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwotICAgICAg
ICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSB8fCBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgICAgICBp
ZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgfHwgZG93bmNhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChpID49IHN0YXJ0ICYmIGkgPD0gZW5kKQpAQCAtNjc2
LDcgKzY3Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSgpCiAg
ICAgYm9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBp
dGVtc1tpXTsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGlzPEhUTUxPcHRpb25FbGVtZW50Pihl
bGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVk
KCk7CisgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKTsK
ICAgICAgICAgaWYgKHNlbGVjdGVkICE9IG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uW2ldKQogICAg
ICAgICAgICAgZmlyZU9uQ2hhbmdlID0gdHJ1ZTsKICAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxl
Y3Rpb25baV0gPSBzZWxlY3RlZDsKQEAgLTc4MSwyOCArNzgxLDI4IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyhib29sIHVwZGF0ZVNlbGVjdGVkU3RhdGVzKSBjb25z
dAogICAgIEhUTUxPcHRpb25FbGVtZW50KiBmb3VuZFNlbGVjdGVkID0gMDsKICAgICBIVE1MT3B0
aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwogICAgIGZvciAoRWxlbWVudCogY3VycmVudEVs
ZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsgY3VycmVudEVsZW1l
bnQ7ICkgewotICAgICAgICBpZiAoIWN1cnJlbnRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsK
KyAgICAgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oKmN1cnJlbnRFbGVtZW50KSkgewogICAgICAg
ICAgICAgY3VycmVudEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGls
ZHJlbihjdXJyZW50RWxlbWVudCwgdGhpcyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBIVE1MRWxlbWVudCogY3VycmVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50
PihjdXJyZW50RWxlbWVudCk7CisgICAgICAgIEhUTUxFbGVtZW50JiBjdXJyZW50ID0gZG93bmNh
c3Q8SFRNTEVsZW1lbnQ+KCpjdXJyZW50RWxlbWVudCk7CiAKICAgICAgICAgLy8gb3B0Z3JvdXAg
dGFncyBtYXkgbm90IG5lc3QuIEhvd2V2ZXIsIGJvdGggRmlyZUZveCBhbmQgSUUgd2lsbAogICAg
ICAgICAvLyBmbGF0dGVuIHRoZSB0cmVlIGF1dG9tYXRpY2FsbHksIHNvIHdlIGZvbGxvdyBzdWl0
LgogICAgICAgICAvLyAoaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jt
cy5odG1sI2gtMTcuNikKICAgICAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KGN1cnJl
bnQpKSB7Ci0gICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVudCk7Ci0gICAgICAg
ICAgICBpZiAoRWxlbWVudCogbmV4dEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdp
dGhpbihjdXJyZW50KSkgeworICAgICAgICAgICAgbV9saXN0SXRlbXMuYXBwZW5kKCZjdXJyZW50
KTsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBuZXh0RWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJz
YWw6OmZpcnN0V2l0aGluKCZjdXJyZW50KSkgewogICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVt
ZW50ID0gbmV4dEVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGN1cnJl
bnQpKSB7Ci0gICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVudCk7CisgICAgICAg
ICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoJmN1cnJlbnQpOwogCiAgICAgICAgICAgICBpZiAodXBk
YXRlU2VsZWN0ZWRTdGF0ZXMgJiYgIW1fbXVsdGlwbGUpIHsKLSAgICAgICAgICAgICAgICBIVE1M
T3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpjdXJy
ZW50KTsKKyAgICAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KGN1cnJlbnQpOwogICAgICAgICAgICAgICAgIGlmICghZmly
c3RPcHRpb24pCiAgICAgICAgICAgICAgICAgICAgIGZpcnN0T3B0aW9uID0gJm9wdGlvbjsKICAg
ICAgICAgICAgICAgICBpZiAob3B0aW9uLnNlbGVjdGVkKCkpIHsKQEAgLTgxNiw4ICs4MTYsOCBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMoYm9vbCB1cGRhdGVTZWxl
Y3RlZFN0YXRlcykgY29uc3QKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlm
IChjdXJyZW50LT5oYXNUYWdOYW1lKGhyVGFnKSkKLSAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFw
cGVuZChjdXJyZW50KTsKKyAgICAgICAgaWYgKGN1cnJlbnQuaGFzVGFnTmFtZShoclRhZykpCisg
ICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoJmN1cnJlbnQpOwogCiAgICAgICAgIC8vIElu
IGNvbmZvcm1pbmcgSFRNTCBjb2RlLCBvbmx5IDxvcHRncm91cD4gYW5kIDxvcHRpb24+IHdpbGwg
YmUgZm91bmQKICAgICAgICAgLy8gd2l0aGluIGEgPHNlbGVjdD4uIFdlIGNhbGwgTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4gc28gdGhhdCB3ZSBvbmx5IHN0ZXAKQEAgLTg0MCw3
ICs4NDAsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAog
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRN
TEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25F
bGVtZW50PihlbGVtZW50KSkgeworICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KSkgewogICAgICAgICAgICAgaWYgKGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigq
ZWxlbWVudCkuc2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAg
ICAgICAgICArK2luZGV4OwpAQCAtODc2LDcgKzg3Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNlbGVjdE9wdGlvbihpbnQgb3B0aW9uSW5kZXgsIFNlbGVjdE9wdGlvbkZsYWdzIGZsYWdz
KQogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbnVsbHB0cjsKICAgICBpZiAobGlzdEluZGV4
ID49IDApIHsKICAgICAgICAgZWxlbWVudCA9IGl0ZW1zW2xpc3RJbmRleF07Ci0gICAgICAgIGlm
IChpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxP
cHRpb25FbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgIGlmIChtX2FjdGl2ZVNlbGVj
dGlvbkFuY2hvckluZGV4IDwgMCB8fCBzaG91bGREZXNlbGVjdCkKICAgICAgICAgICAgICAgICBz
ZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChsaXN0SW5kZXgpOwogICAgICAgICAgICAgaWYg
KG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXggPCAwIHx8IHNob3VsZERlc2VsZWN0KQpAQCAtOTE4
LDcgKzkxOCw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uVG9MaXN0SW5kZXgoaW50
IG9wdGlvbkluZGV4KSBjb25zdAogCiAgICAgaW50IG9wdGlvbkluZGV4MiA9IC0xOwogICAgIGZv
ciAoaW50IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3RTaXplOyArK2xpc3RJbmRleCkg
ewotICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGl0ZW1zW2xpc3RJbmRleF0pKSB7
CisgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2xpc3RJbmRleF0pKSB7
CiAgICAgICAgICAgICArK29wdGlvbkluZGV4MjsKICAgICAgICAgICAgIGlmIChvcHRpb25JbmRl
eDIgPT0gb3B0aW9uSW5kZXgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3RJbmRleDsKQEAg
LTkzMSwxMyArOTMxLDEzIEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uVG9MaXN0SW5k
ZXgoaW50IG9wdGlvbkluZGV4KSBjb25zdAogaW50IEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0VG9P
cHRpb25JbmRleChpbnQgbGlzdEluZGV4KSBjb25zdAogewogICAgIGNvbnN0IFZlY3RvcjxIVE1M
RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwotICAgIGlmIChsaXN0SW5kZXggPCAwIHx8
IGxpc3RJbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUoKSkgfHwgIWlzPEhUTUxP
cHRpb25FbGVtZW50PihpdGVtc1tsaXN0SW5kZXhdKSkKKyAgICBpZiAobGlzdEluZGV4IDwgMCB8
fCBsaXN0SW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihpdGVtcy5zaXplKCkpIHx8ICFpczxIVE1M
T3B0aW9uRWxlbWVudD4oKml0ZW1zW2xpc3RJbmRleF0pKQogICAgICAgICByZXR1cm4gLTE7CiAK
ICAgICAvLyBBY3R1YWwgaW5kZXggb2Ygb3B0aW9uIG5vdCBjb3VudGluZyBPUFRHUk9VUCBlbnRy
aWVzIHRoYXQgbWF5IGJlIGluIGxpc3QuCiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGxpc3RJbmRleDsgKytpKSB7Ci0gICAgICAgIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oaXRlbXNbaV0pKQorICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1l
bnQ+KCppdGVtc1tpXSkpCiAgICAgICAgICAgICArK29wdGlvbkluZGV4OwogICAgIH0KIApAQCAt
OTY4LDcgKzk2OCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXRo
b3V0VmFsaWRhdGlvbihIVE1MRWxlbWVudCogZXhjbHVkZUVsZW1lCiAgICAgY29uc3QgVmVjdG9y
PEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVt
ZW50ID0gaXRlbXNbaV07Ci0gICAgICAgIGlmIChlbGVtZW50ICE9IGV4Y2x1ZGVFbGVtZW50ICYm
IGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgaWYgKGVsZW1lbnQgIT0g
ZXhjbHVkZUVsZW1lbnQgJiYgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAg
ICAgICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2V0U2VsZWN0ZWRT
dGF0ZShmYWxzZSk7CiAgICAgfQogfQpAQCAtOTc5LDcgKzk3OSw3IEBAIEZvcm1Db250cm9sU3Rh
dGUgSFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKICAgICBz
aXplX3QgbGVuZ3RoID0gaXRlbXMuc2l6ZSgpOwogICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGU7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlm
ICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYgKCFpczxIVE1M
T3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCppdGVtc1tpXSk7CiAgICAgICAgIGlmICghb3B0aW9uLnNlbGVjdGVkKCkpCkBAIC05OTYsNyAr
OTk2LDcgQEAgc2l6ZV90IEhUTUxTZWxlY3RFbGVtZW50OjpzZWFyY2hPcHRpb25zRm9yVmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgc2l6ZV90IGxpc3QKICAgICBjb25zdCBWZWN0b3I8SFRNTEVs
ZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBzaXplX3QgbG9vcEVuZEluZGV4ID0g
c3RkOjptaW4oaXRlbXMuc2l6ZSgpLCBsaXN0SW5kZXhFbmQpOwogICAgIGZvciAoc2l6ZV90IGkg
PSBsaXN0SW5kZXhTdGFydDsgaSA8IGxvb3BFbmRJbmRleDsgKytpKSB7Ci0gICAgICAgIGlmICgh
aXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYgKCFpczxIVE1MT3B0
aW9uRWxlbWVudD4oKml0ZW1zW2ldKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBp
ZiAoZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSkudmFsdWUoKSA9PSB2YWx1
ZSkKICAgICAgICAgICAgIHJldHVybiBpOwpAQCAtMTAxNCw3ICsxMDE0LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRyb2xT
dGF0ZSYgc3RhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaXRlbXNTaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4o
aXRlbXNbaV0pKQorICAgICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNbaV0p
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVt
ZW50PigqaXRlbXNbaV0pLnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgIH0KQEAgLTEwNjEs
NyArMTA2MSw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1E
YXRhTGlzdCYgbGlzdCwgYm9vbCkKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVt
cy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ld
OwotICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0
PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSAmJiAhZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgeworICAg
ICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1M
T3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkgJiYgIWRvd25jYXN0PEhUTUxPcHRp
b25FbGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKICAgICAgICAg
ICAgIGxpc3QuYXBwZW5kRGF0YShuYW1lLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVs
ZW1lbnQpLnZhbHVlKCkpOwogICAgICAgICAgICAgc3VjY2Vzc2Z1bCA9IHRydWU7CiAgICAgICAg
IH0KQEAgLTEwODEsNyArMTA4MSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlc2V0KCkK
ICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKCFpczxIVE1MT3B0
aW9uRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEhUTUxPcHRpb25F
bGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpOwpA
QCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBSZWZQdHI8UmVuZGVyVGhlbWU+IHJl
bmRlclRoZW1lID0gcGFnZSA/ICZwYWdlLT50aGVtZSgpIDogUmVuZGVyVGhlbWU6OmRlZmF1bHRU
aGVtZSgpOwogCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25F
dmVudCkgewotICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKKyAgICAgICAg
aWYgKCFpczxLZXlib2FyZEV2ZW50PigqZXZlbnQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2
ZW50PigqZXZlbnQpOwpAQCAtMTE5OSw3ICsxMTk5LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAvLyBVc2Ug
a2V5IHByZXNzIGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2UgZXZlbnRz
CiAgICAgLy8gb24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0aGUga2V5
IHByZXNzIGV2ZW50LgogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlw
cmVzc0V2ZW50KSB7Ci0gICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKQorICAg
ICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KCpldmVudCkpCiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJv
YXJkRXZlbnQ+KCpldmVudCk7CkBAIC0xMjU4LDcgKzEyNTgsNyBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAg
ICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KIAotICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxNb3Vz
ZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8TW91c2VF
dmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGZvY3VzKCk7
CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIo
KS0+aXNNZW51TGlzdCgpKSB7CkBAIC0xMjk5LDcgKzEyOTksNyBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50Ojp1cGRhdGVTZWxlY3RlZFN0YXRlKGludCBsaXN0SW5kZXgsIGJvb2wgbXVsdGksIGJv
b2wgc2hpZgogICAgIGJvb2wgbXVsdGlTZWxlY3QgPSBtX211bHRpcGxlICYmIG11bHRpICYmICFz
aGlmdDsKIAogICAgIEhUTUxFbGVtZW50KiBjbGlja2VkRWxlbWVudCA9IGxpc3RJdGVtcygpW2xp
c3RJbmRleF07Ci0gICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihjbGlja2VkRWxlbWVudCkp
IHsKKyAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpjbGlja2VkRWxlbWVudCkpIHsKICAg
ICAgICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIGFuIGFjdGl2ZSBzZWxlY3Rpb24gKGxpa2Ug
ZHVyaW5nIGRyYWcKICAgICAgICAgLy8gc2VsZWN0aW9uKSwgc2hvdWxkIHNlbGVjdCBvciBkZXNl
bGVjdC4KICAgICAgICAgaWYgKGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqY2xpY2tlZEVs
ZW1lbnQpLnNlbGVjdGVkKCkgJiYgbXVsdGlTZWxlY3QpCkBAIC0xMzIwLDcgKzEzMjAsNyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVTZWxlY3RlZFN0YXRlKGludCBsaXN0SW5kZXgs
IGJvb2wgbXVsdGksIGJvb2wgc2hpZgogICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJ
bmRleChzZWxlY3RlZEluZGV4KCkpOwogCiAgICAgLy8gU2V0IHRoZSBzZWxlY3Rpb24gc3RhdGUg
b2YgdGhlIGNsaWNrZWQgb3B0aW9uLgotICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oY2xp
Y2tlZEVsZW1lbnQpICYmICFkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmNsaWNrZWRFbGVt
ZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1l
bnQ+KCpjbGlja2VkRWxlbWVudCkgJiYgIWRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqY2xp
Y2tlZEVsZW1lbnQpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmNsaWNrZWRFbGVtZW50KS5zZXRTZWxlY3RlZFN0YXRlKHRydWUp
OwogCiAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIHNlbGVjdGVkSW5kZXgoKSBmb3IgdGhlIHByZXZp
b3VzIGluaXRpYWxpemF0aW9uLCBvciBJZgpAQCAtMTMzOCw3ICsxMzM4LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ewogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0aGlzLT5saXN0
SXRlbXMoKTsKIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRv
d25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4o
KmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KCpldmVudCkg
JiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7
CiAgICAgICAgIGZvY3VzKCk7CiAgICAgICAgIC8vIENhbGxpbmcgZm9jdXMoKSBtYXkgcmVtb3Zl
IG9yIGNoYW5nZSBvdXIgcmVuZGVyZXIsIGluIHdoaWNoIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byBo
YW5kbGUgdGhlIGV2ZW50IGZ1cnRoZXIuCiAgICAgICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVu
ZGVyZXIoKS0+aXNMaXN0Qm94KCkpCkBAIC0xMzYxLDcgKzEzNjEsNyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAKICAg
ICAgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQg
JiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmICF0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2Fu
QmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpIHsKKyAgICB9IGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+
KCpldmVudCkgJiYgIXRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jYW5CZVNjcm9sbGVkQW5kSGFz
U2Nyb2xsYWJsZUFyZWEoKSkgewogICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93
bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKICAgICAgICAgaWYgKG1vdXNlRXZlbnQuYnV0dG9u
KCkgIT0gTGVmdEJ1dHRvbiB8fCAhbW91c2VFdmVudC5idXR0b25Eb3duKCkpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xMzg1LDcgKzEzODUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojps
aXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAm
JiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKS0+ZXZlbnRIYW5kbGVy
KCkuYXV0b3Njcm9sbFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIoKSkgeworICAgIH0gZWxzZSBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGlzPE1vdXNlRXZl
bnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBM
ZWZ0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9s
bFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIoKSkgewogICAgICAgICAvLyBUaGlzIGNsaWNrIG9yIGRy
YWcgZXZlbnQgd2FzIG5vdCBvdmVyIGFueSBvZiB0aGUgb3B0aW9ucy4KICAgICAgICAgaWYgKG1f
bGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTEzOTQsNyArMTM5NCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgLy8gdGltZXIgc3RvcHMuCiAgICAg
ICAgIGxpc3RCb3hPbkNoYW5nZSgpOwogICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVu
dD4oZXZlbnQpKQorICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KCpldmVudCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9
IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CkBAIC0xNDg1LDcgKzE0ODUsNyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCiAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAg
ICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtl
eXByZXNzRXZlbnQpIHsKLSAgICAgICAgaWYgKCFpczxLZXlib2FyZEV2ZW50PihldmVudCkpCisg
ICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJv
YXJkRXZlbnQ+KCpldmVudCk7CiAgICAgICAgIGludCBrZXlDb2RlID0ga2V5Ym9hcmRFdmVudC5r
ZXlDb2RlKCk7CkBAIC0xNTI4LDcgKzE1MjgsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBpZiAoZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50ICYmIGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkgewor
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50ICYmIGlz
PEtleWJvYXJkRXZlbnQ+KCpldmVudCkpIHsKICAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9h
cmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CiAgICAgICAgIGlmICgh
a2V5Ym9hcmRFdmVudC5jdHJsS2V5KCkgJiYgIWtleWJvYXJkRXZlbnQuYWx0S2V5KCkgJiYgIWtl
eWJvYXJkRXZlbnQubWV0YUtleSgpICYmIHVfaXNwcmludChrZXlib2FyZEV2ZW50LmNoYXJDb2Rl
KCkpKSB7CiAgICAgICAgICAgICB0eXBlQWhlYWRGaW5kKGtleWJvYXJkRXZlbnQpOwpAQCAtMTU0
NCw3ICsxNTQ0LDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2VsZWN0ZWRMaXN0SW5k
ZXgoKSBjb25zdAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJ
dGVtcygpOwogICAgIGZvciAoc2l6ZV90IGkgPSBpdGVtcy5zaXplKCk7IGk7KSB7CiAgICAgICAg
IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbLS1pXTsKLSAgICAgICAgaWYgKGlzPEhUTUxP
cHRpb25FbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVs
ZW1lbnQpLnNlbGVjdGVkKCkpCisgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVs
ZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQo
KSkKICAgICAgICAgICAgIHJldHVybiBpOwogICAgIH0KICAgICByZXR1cm4gLTE7CkBAIC0xNTY1
LDcgKzE1NjUsNyBAQCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkF0SW5kZXgoaW50
IGluZGV4KSBjb25zdAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxp
c3RJdGVtcygpOwogICAgIAogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaW5kZXhd
OwotICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpIHx8IGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAg
aWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpIHx8IGRvd25jYXN0PEhUTUxPcHRp
b25FbGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiB9CkBAIC0xNjAxLDcg
KzE2MDEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlY3RlZElu
ZGV4KGludCBpbmRleCkKICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoaW5k
ZXgpOwogICAgIGlmIChsaXN0SW5kZXggPj0gMCkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IGl0ZW1zW2xpc3RJbmRleF07Ci0gICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVu
dD4oZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVu
dCkpIHsKICAgICAgICAgICAgIGlmIChkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCplbGVtZW50KS5zZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAgICAgICAgICAgIGVsc2UK
QEAgLTE2MjMsNyArMTYyMyw3IEBAIHVuc2lnbmVkIEhUTUxTZWxlY3RFbGVtZW50OjpsZW5ndGgo
KSBjb25zdAogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oaXRlbXNbaV0pKQorICAgICAgICBp
ZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSkpCiAgICAgICAgICAgICArK29wdGlv
bnM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCmlu
ZGV4IDljZTllNWNhMDQ4MDMzZmNkMmQ1YTQ1OWEwZjU2MWM5YzAwMzA0MTguLmE0ODhhZTg4NTNk
NmIzMDQ4YTg2MDAxODE3MDFjZjc1YzU0NWJlNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNvdXJjZUVsZW1lbnQuY3BwCkBAIC01NSw3ICs1NSw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgSFRNTFNvdXJjZUVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJO
b2RlCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7CiAg
ICAgRWxlbWVudCogcGFyZW50ID0gcGFyZW50RWxlbWVudCgpOwotICAgIGlmIChwYXJlbnQgJiYg
aXM8SFRNTE1lZGlhRWxlbWVudD4ocGFyZW50KSkKKyAgICBpZiAoaXM8SFRNTE1lZGlhRWxlbWVu
dD4ocGFyZW50KSkKICAgICAgICAgZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4oKnBhcmVudCku
c291cmNlV2FzQWRkZWQodGhpcyk7CiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiB9CkBAIC02
NSw3ICs2NSw3IEBAIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmIHJlbW92YWxSb290KQogICAgIEVsZW1lbnQqIHBhcmVudCA9IHBhcmVudEVsZW1lbnQo
KTsKICAgICBpZiAoIXBhcmVudCAmJiBpczxFbGVtZW50PihyZW1vdmFsUm9vdCkpCiAgICAgICAg
IHBhcmVudCA9ICZkb3duY2FzdDxFbGVtZW50PihyZW1vdmFsUm9vdCk7Ci0gICAgaWYgKHBhcmVu
dCAmJiBpczxIVE1MTWVkaWFFbGVtZW50PihwYXJlbnQpKQorICAgIGlmIChpczxIVE1MTWVkaWFF
bGVtZW50PihwYXJlbnQpKQogICAgICAgICBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50PigqcGFy
ZW50KS5zb3VyY2VXYXNSZW1vdmVkKHRoaXMpOwogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJv
bShyZW1vdmFsUm9vdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
dW1tYXJ5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVu
dC5jcHAKaW5kZXggMTEyZDJmZDM2MjRjMTlkMjg4NDY2NzRkN2M4ODU1NTUzMTk2MDFjNy4uNzUz
YjQxY2UxOTBkODA3YzE2ZTE1MWViOTljZDYzNDdiZTcxODRlOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcApAQCAtMTAyLDcgKzEwMiw4IEBAIGJvb2wgSFRN
TFN1bW1hcnlFbGVtZW50Ojppc01haW5TdW1tYXJ5KCkgY29uc3QKIAogc3RhdGljIGJvb2wgaXND
bGlja2FibGVDb250cm9sKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFpczxFbGVtZW50Pihub2Rl
KSkKKyAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVu
dD4oKm5vZGUpOwogICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSkK
QEAgLTEyNiw3ICsxMjcsNyBAQCB2b2lkIEhUTUxTdW1tYXJ5RWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CisgICAgICAgIGlmIChpczxL
ZXlib2FyZEV2ZW50PigqZXZlbnQpKSB7CiAgICAgICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXli
b2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKICAgICAgICAgICAg
IGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYm
IGtleWJvYXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CiAgICAgICAgICAg
ICAgICAgc2V0QWN0aXZlKHRydWUsIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
RWxlbWVudC5jcHAKaW5kZXggYzczYzQ3NzJjZmY2MDFjYTE2MmIzZTdjMzkxOGYxYzRjZjFjN2Jm
OS4uYTA1NzcxMzk1NDlkZmYzZmUyNzExZTVjM2E2OTdmNWQyZmVmZWE2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCkBAIC03MCw3ICs3MCw3IEBAIFBhc3NSZWZQ
dHI8SFRNTFRhYmxlRWxlbWVudD4gSFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hCiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogSFRNTFRhYmxlRWxlbWVu
dDo6Y2FwdGlvbigpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlz
PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50PihjaGlsZCkpCisgICAgICAgIGlmIChpczxIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudD4oKmNoaWxkKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxI
VE1MVGFibGVDYXB0aW9uRWxlbWVudD4oY2hpbGQpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHAKaW5kZXgg
YmJkZDg0YmMzN2JhMjhiOGNlODRiYjI1YjRiMzE4YTQ2NDZlNjRkZS4uNjUwNmI1M2FlMTJiNDhi
NTUwODhhYjExOTZiM2NjMGVkYjNiMzlmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGFibGVQYXJ0RWxlbWVudC5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBIVE1MVGFibGVQYXJ0
RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE4KIEhUTUxUYWJsZUVsZW1lbnQqIEhUTUxUYWJsZVBhcnRFbGVtZW50OjpmaW5kUGFyZW50
VGFibGUoKSBjb25zdAogewogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUo
KTsKLSAgICB3aGlsZSAocGFyZW50ICYmICFpczxIVE1MVGFibGVFbGVtZW50PihwYXJlbnQpKQor
ICAgIHdoaWxlIChwYXJlbnQgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpwYXJlbnQpKQogICAg
ICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTFRhYmxlRWxlbWVudD4ocGFyZW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZVJvd0VsZW1lbnQuY3BwCmluZGV4IGM2YzRkOWUyYjI3N2ExZjMxNmYwODAyZWUzMWYyMDcx
OGExZTcwMDAuLjk3YmFhMjA3OTk2MGE4YTAwNjkxNGFjOWQ1ODg5NDY5MmMxYzAzODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcApAQCAtNjAsNyArNjAs
NyBAQCBpbnQgSFRNTFRhYmxlUm93RWxlbWVudDo6cm93SW5kZXgoKSBjb25zdAogICAgIGlmICgh
dGFibGUpCiAgICAgICAgIHJldHVybiAtMTsKICAgICB0YWJsZSA9IHRhYmxlLT5wYXJlbnROb2Rl
KCk7Ci0gICAgaWYgKCF0YWJsZSB8fCAhaXM8SFRNTFRhYmxlRWxlbWVudD4odGFibGUpKQorICAg
IGlmICghaXM8SFRNTFRhYmxlRWxlbWVudD4odGFibGUpKQogICAgICAgICByZXR1cm4gLTE7CiAK
ICAgICAvLyBUbyBtYXRjaCBGaXJlZm94LCB0aGUgcm93IGluZGljZXMgd29yayBsaWtlIHRoaXM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwCmlu
ZGV4IDExNjJhYTMyNTUzMTgwMzhhYjBkNzMyYmEwNjMxYTQ0YzlhYjhiNjQuLmI1OWY5MjY1MWJi
MDgwZDE1YTNkY2MyNGM5NmRmOGEwOGJkYmFhZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIEhUTUxUYWJs
ZVJvd0VsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpyb3dBZnRlcihIVE1MVGFibGVF
bGVtZW50KiB0YWJsZSwKICAgICBlbHNlIGlmIChpc0luU2VjdGlvbigqcHJldmlvdXMsIHRib2R5
VGFnKSkKICAgICAgICAgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhwcmV2
aW91cy0+cGFyZW50Tm9kZSgpKTsKICAgICBmb3IgKDsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRy
YXZlcnNhbDo6bmV4dFNpYmxpbmcoY2hpbGQpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MVGFibGVS
b3dFbGVtZW50PihjaGlsZCkpCisgICAgICAgIGlmIChpczxIVE1MVGFibGVSb3dFbGVtZW50Pigq
Y2hpbGQpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+
KGNoaWxkKTsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAg
ICAgICAgICAgaWYgKGF1dG8gcm93ID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRhYmxlUm93RWxlbWVu
dD4oKmNoaWxkKS5maXJzdCgpKQpAQCAtMTMwLDcgKzEzMCw3IEBAIEhUTUxUYWJsZVJvd0VsZW1l
bnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpsYXN0Um93KEhUTUxUYWJsZUVsZW1lbnQqIHRh
YmxlKQogICAgIH0KIAogICAgIGZvciAoYXV0byogY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjps
YXN0Q2hpbGQodGFibGUpOyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91
c1NpYmxpbmcoY2hpbGQpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MVGFibGVSb3dFbGVtZW50Pihj
aGlsZCkpCisgICAgICAgIGlmIChpczxIVE1MVGFibGVSb3dFbGVtZW50PigqY2hpbGQpKQogICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNoaWxkKTsKICAg
ICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewogICAgICAgICAgICAgaWYg
KGF1dG8qIHJvdyA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxUYWJsZVJvd0VsZW1lbnQ+KCpjaGlsZCku
bGFzdCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5k
ZXggMzVmYWUxMmM2NDY2MjU2ZjU4OWY2YjMwOTAzMzIyYmY1ZGI1ZDJkYi4uNTgzNzYxMGNmNWQ3
ZDNjZTU0NTI2ZTM5OGZjNDg2ZGNmMjU1ZTFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBIVE1MVGV4dEFy
ZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAo
cmVuZGVyZXIoKSAmJiAoZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVu
dCgpIHx8IGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VUeXBl
IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkpCiAgICAgICAgIGZv
cndhcmRFdmVudChldmVudCk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiBpczxCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudD4oZXZlbnQpKQorICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkgJiYgaXM8
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+KCpldmVudCkpCiAgICAgICAgIGhhbmRsZUJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KGRvd25jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PihldmVudCkp
OwogCiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcAppbmRleCBkNDU5ZWE3OGRjZWJhMTEzMDhhZTU0YmI5NDZlMWNmNjU0MjZiZjIw
Li4zNGIyODQ3ZTRiZmMyM2U3ODhmMGEyZDM5NDU0ZWE3ZWIwNDQyMTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtNTYx
LDkgKzU2MSw5IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5uZXJUZXh0
VmFsdWUoKSBjb25zdAogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgZm9yIChOb2Rl
KiBub2RlID0gaW5uZXJUZXh0OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2Rl
LCBpbm5lclRleHQpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MQlJFbGVtZW50Pihub2RlKSkKKyAg
ICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQobmV3bGluZUNoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2UgaWYgKGlzPFRleHQ+KG5vZGUp
KQorICAgICAgICBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkpCiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKGRvd25jYXN0PFRleHQ+KCpub2RlKS5kYXRhKCkpOwogICAgIH0KICAgICByZXR1cm4g
ZmluaXNoVGV4dChyZXN1bHQpOwpAQCAtNTc5LDcgKzU3OSw3IEBAIHN0YXRpYyBQb3NpdGlvbiBw
b3NpdGlvbkZvckluZGV4KFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0LCB1
bnNpZ25lCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShub2RlKTsK
ICAgICAgICAgICAgIHJlbWFpbmluZ0NoYXJhY3RlcnNUb01vdmVGb3J3YXJkLS07CiAgICAgICAg
ICAgICBsYXN0QnJPclRleHQgPSBub2RlOwotICAgICAgICB9IGVsc2UgaWYgKGlzPFRleHQ+KG5v
ZGUpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8VGV4dD4oKm5vZGUpKSB7CiAgICAgICAgICAg
ICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwogICAgICAgICAgICAgaWYgKHJl
bWFpbmluZ0NoYXJhY3RlcnNUb01vdmVGb3J3YXJkIDwgdGV4dC5sZW5ndGgoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gUG9zaXRpb24oJnRleHQsIHJlbWFpbmluZ0NoYXJhY3RlcnNUb01vdmVG
b3J3YXJkKTsKQEAgLTYwNywxMyArNjA3LDEzIEBAIHVuc2lnbmVkIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50OjppbmRleEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwYXNzZWRQb3NpCiAg
ICAgQVNTRVJUKGlubmVyVGV4dC0+Y29udGFpbnMoc3RhcnROb2RlKSk7CiAKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91
cyhub2RlLCBpbm5lclRleHQpKSB7Ci0gICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgeworICAg
ICAgICBpZiAoaXM8VGV4dD4oKm5vZGUpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBkb3duY2FzdDxUZXh0Pigqbm9kZSkubGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAobm9kZSA9
PSBwYXNzZWRQb3NpdGlvbi5jb250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICAgICAgaW5kZXgg
Kz0gc3RkOjptaW48dW5zaWduZWQ+KGxlbmd0aCwgcGFzc2VkUG9zaXRpb24ub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGluZGV4ICs9
IGxlbmd0aDsKLSAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MQlJFbGVtZW50Pihub2RlKSkKKyAg
ICAgICAgfSBlbHNlIGlmIChpczxIVE1MQlJFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICAr
K2luZGV4OwogICAgIH0KIApAQCAtNjg1LDkgKzY4NSw5IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6dmFsdWVXaXRoSGFyZExpbmVCcmVha3MoKSBjb25zdAogCiAgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CiAgICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0LT5maXJz
dENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGlubmVyVGV4
dCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAo
aXM8SFRNTEJSRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXds
aW5lQ2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8VGV4dD4obm9kZSkpIHsKKyAgICAg
ICAgZWxzZSBpZiAoaXM8VGV4dD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBTdHJpbmcgZGF0YSA9
IGRvd25jYXN0PFRleHQ+KCpub2RlKS5kYXRhKCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBkYXRhLmxlbmd0aCgpOwogICAgICAgICAgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKaW5kZXggOGU4MTgyNTAxNGIw
MDk4MTRjZGQxYjU2NjM3ZTI2ZmE5ZGYxMmNjZi4uOTQ4NjhkZGUzMmQwMTA2OWUyYzQ0NmIzNGZj
MGYyN2IyYzYyMmIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3Bw
CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgSFRNTFRpdGxlRWxlbWVudDo6c2V0VGV4dChjb25zdCBT
dHJpbmcgJnZhbHVlKQogewogICAgIFJlZjxIVE1MVGl0bGVFbGVtZW50PiBwcm90ZWN0RnJvbU11
dGF0aW9uRXZlbnRzKCp0aGlzKTsKICAgICAKLSAgICBpZiAoaGFzT25lQ2hpbGQoKSAmJiBpczxU
ZXh0PihmaXJzdENoaWxkKCkpKQorICAgIGlmIChoYXNPbmVDaGlsZCgpICYmIGlzPFRleHQ+KCpm
aXJzdENoaWxkKCkpKQogICAgICAgICBkb3duY2FzdDxUZXh0PigqZmlyc3RDaGlsZCgpKS5zZXRE
YXRhKHZhbHVlLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2Ug
bWFrZSBhIGNvcHkgaGVyZSBiZWNhdXNlIGVudGl0eSBvZiAidmFsdWUiIGFyZ3VtZW50IGNhbiBi
ZSBEb2N1bWVudDo6bV90aXRsZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRyYWNrRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQu
Y3BwCmluZGV4IDJkMGQxNDIzNWM3MWM5NzRhYTNhZmU0YTg3ZDk0NzJmYjdmNWIxZDQuLjJjNmU5
N2JhNzZjZjYyZDEwNWNmZTk4ZDk0Nzg5NjE3Y2Q2ZjMwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVHJhY2tFbGVtZW50LmNwcApAQCAtMzQzLDcgKzM0Myw3IEBAIHZvaWQgSFRNTFRyYWNr
RWxlbWVudDo6dGV4dFRyYWNrUmVtb3ZlQ3VlKFRleHRUcmFjayogdHJhY2ssIFBhc3NSZWZQdHI8
VGV4dFRyYWNrCiBIVE1MTWVkaWFFbGVtZW50KiBIVE1MVHJhY2tFbGVtZW50OjptZWRpYUVsZW1l
bnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHBhcmVudCA9IHBhcmVudEVsZW1lbnQoKTsKLSAg
ICBpZiAocGFyZW50ICYmIGlzPEhUTUxNZWRpYUVsZW1lbnQ+KHBhcmVudCkpCisgICAgaWYgKGlz
PEhUTUxNZWRpYUVsZW1lbnQ+KHBhcmVudCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1M
TWVkaWFFbGVtZW50PihwYXJlbnROb2RlKCkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAppbmRleCBjYzliZGM5OTBhNjg1NmYwYThkNjNi
OTFkZWJmNTkxNWFjMWUwZmMxLi4xNzllYzEwODE2NWZhM2JhMWE1MWNhMzFhYzVkZjZkZjZkZGRj
MGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKQEAgLTM5OCw3ICszOTgs
NyBAQCB2b2lkIEltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkucmVzaXplRXZlbnQpCiAgICAgICAgIG1fZG9jdW1lbnQud2luZG93U2l6ZUNoYW5n
ZWQoKTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkgeworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oKmV2ZW50KSkg
ewogICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVudD4o
KmV2ZW50KTsKICAgICAgICAgbV9kb2N1bWVudC5pbWFnZUNsaWNrZWQobW91c2VFdmVudC54KCks
IG1vdXNlRXZlbnQueSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKaW5kZXgg
M2IyMjdhYjAwYzQ5ODQ2MTZiYjA4ZjEyNTgyMjMzYzE4NmI3NDQyOC4uYzRiMzRiMmY5YWZmMGFl
YzM4YmY3ZDJkZmMzYWI1ZGNjOTA0NGVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcApA
QCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQgSW5wdXRUeXBlOjpmb3J3YXJkRXZlbnQoRXZlbnQqKQog
CiBib29sIElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVudCogZXZlbnQpCiB7
Ci0gICAgcmV0dXJuIGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSAmJiBldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50ICYmIGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpl
dmVudCkuY2hhckNvZGUoKSA9PSAnXHInOworICAgIHJldHVybiBpczxLZXlib2FyZEV2ZW50Pigq
ZXZlbnQpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgJiYg
ZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KS5jaGFyQ29kZSgpID09ICdccic7CiB9CiAK
IFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBJbnB1dFR5cGU6OmZvcm1Gb3JTdWJtaXNzaW9u
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRG9jdW1lbnQuY3BwCmluZGV4IDdkYTliYjg0
NTBhZWFlNDJmY2Q1M2NlMTI4YmIxMGM2NjA4ZDc0NTEuLmZhYzk1OGVmNTMzNzg4YzNmNGViMDZi
OWY5ZDhiYWI1NjAzZDcyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFE
b2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcApA
QCAtMTczLDcgKzE3Myw3IEBAIHN0YXRpYyBpbmxpbmUgSFRNTFZpZGVvRWxlbWVudCogZGVzY2Vu
ZGVudFZpZGVvRWxlbWVudChDb250YWluZXJOb2RlJiBub2RlKQogCiBzdGF0aWMgaW5saW5lIEhU
TUxWaWRlb0VsZW1lbnQqIGFuY2VzdG9yVmlkZW9FbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAg
d2hpbGUgKG5vZGUgJiYgIWlzPEhUTUxWaWRlb0VsZW1lbnQ+KG5vZGUpKQorICAgIHdoaWxlIChu
b2RlICYmICFpczxIVE1MVmlkZW9FbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2Rl
LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFZp
ZGVvRWxlbWVudD4obm9kZSk7CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCB2b2lkIE1lZGlhRG9jdW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2RlPih0YXJnZXROb2RlKSkKKyAgICBpZiAoIWlzPENv
bnRhaW5lck5vZGU+KCp0YXJnZXROb2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIENvbnRhaW5l
ck5vZGUmIHRhcmdldENvbnRhaW5lciA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0YXJnZXRO
b2RlKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50
ICYmIGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkgeworICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgaXM8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KSkg
ewogICAgICAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbyA9IGRlc2NlbmRlbnRWaWRlb0VsZW1l
bnQodGFyZ2V0Q29udGFpbmVyKTsKICAgICAgICAgaWYgKCF2aWRlbykKICAgICAgICAgICAgIHJl
dHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5kZXggNWY1ZWM3NTQy
YmQxODI4MGU3ZGZlNTY1MTQ4MWVhNWNiMTQ0MTUyYi4uZWVhZDEzNDZjYmRkZjkxYmZlYjhkMzVh
ZjM2NGVhMGVkMWJhOWJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lu
cHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAK
QEAgLTgxLDEwICs4MSwxMCBAQCB2b2lkIFJhZGlvSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZl
bnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgTm9kZSogbm9kZSA9ICZlbGVtZW50KCk7CiAg
ICAgd2hpbGUgKChub2RlID0gKGZvcndhcmQgPyBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpIDog
Tm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSkpKSkgewogICAgICAgICAvLyBPbmNlIHdlIGVu
Y291bnRlciBhIGZvcm0gZWxlbWVudCwgd2Uga25vdyB3ZSdyZSB0aHJvdWdoLgotICAgICAgICBp
ZiAoaXM8SFRNTEZvcm1FbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtRWxl
bWVudD4oKm5vZGUpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIC8vIExvb2sgZm9yIG1v
cmUgcmFkaW8gYnV0dG9ucy4KLSAgICAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2Rl
KSkKKyAgICAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0RWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpOwogICAgICAgICBpZiAoaW5wdXRF
bGVtZW50LT5mb3JtKCkgIT0gZWxlbWVudCgpLmZvcm0oKSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBi
b29sIFJhZGlvSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2
ZW50KSBjb25zdAogICAgIC8vIE5ldmVyIGFsbG93IGtleWJvYXJkIHRhYmJpbmcgdG8gbGVhdmUg
eW91IGluIHRoZSBzYW1lIHJhZGlvIGdyb3VwLiAgQWx3YXlzCiAgICAgLy8gc2tpcCBhbnkgb3Ro
ZXIgZWxlbWVudHMgaW4gdGhlIGdyb3VwLgogICAgIEVsZW1lbnQqIGN1cnJlbnRGb2N1c2VkTm9k
ZSA9IGVsZW1lbnQoKS5kb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgaWYgKGN1cnJl
bnRGb2N1c2VkTm9kZSAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihjdXJyZW50Rm9jdXNlZE5vZGUp
KSB7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGN1cnJlbnRGb2N1c2VkTm9kZSkpIHsK
ICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgZm9jdXNlZElucHV0ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKmN1cnJlbnRGb2N1c2VkTm9kZSk7CiAgICAgICAgIGlmIChmb2N1c2VkSW5w
dXQuaXNSYWRpb0J1dHRvbigpICYmIGZvY3VzZWRJbnB1dC5mb3JtKCkgPT0gZWxlbWVudCgpLmZv
cm0oKSAmJiBmb2N1c2VkSW5wdXQubmFtZSgpID09IGVsZW1lbnQoKS5uYW1lKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlw
ZS5jcHAKaW5kZXggN2E5ZmUxNDE2YjIzMTQ5YmExNzYwMDhkNjFiZDJiMjZmNzY1N2JiNS4uMGM4
ODkwOGJhOGVjOGViZmI2MWJkZTg1ODc3YzRmNDVmNzZmMzdmMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgVGV4
dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVCbHVyRXZlbnQoKQogCiBib29sIFRleHRGaWVsZElucHV0
VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVudCogZXZlbnQpCiB7Ci0gICAgcmV0dXJu
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBpczxUZXh0
RXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxUZXh0RXZlbnQ+KCpldmVudCkuZGF0YSgpID09ICJc
biIpCisgICAgcmV0dXJuIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRF
dmVudCAmJiBpczxUZXh0RXZlbnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8VGV4dEV2ZW50PigqZXZl
bnQpLmRhdGEoKSA9PSAiXG4iKQogICAgICAgICB8fCBJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdElt
cGxpY2l0bHkoZXZlbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggZDc0YzE0NTQ5NzBlNTM2ZjcwNzI2YjFi
ZjVlOTUzZTk0OGM3MGE1MC4uZmY0MDY2ZTNjYTEwMjA4M2ZhMDhkMjg1YWQ3MGQwMzMzYjBkNDYy
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcApAQCAtNjEsOCArNjEsOCBAQCBzdGF0aWMgYm9vbCBoYXNJbXBsaWVkRW5kVGFn
KGNvbnN0IEhUTUxTdGFja0l0ZW0qIGl0ZW0pCiAgICAgcmV0dXJuIGl0ZW0tPmhhc1RhZ05hbWUo
ZGRUYWcpCiAgICAgICAgIHx8IGl0ZW0tPmhhc1RhZ05hbWUoZHRUYWcpCiAgICAgICAgIHx8IGl0
ZW0tPmhhc1RhZ05hbWUobGlUYWcpCi0gICAgICAgIHx8IGlzPEhUTUxPcHRpb25FbGVtZW50Pihp
dGVtLT5ub2RlKCkpCi0gICAgICAgIHx8IGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KGl0ZW0tPm5v
ZGUoKSkKKyAgICAgICAgfHwgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtLT5ub2RlKCkpCisg
ICAgICAgIHx8IGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCppdGVtLT5ub2RlKCkpCiAgICAgICAg
IHx8IGl0ZW0tPmhhc1RhZ05hbWUocFRhZykKICAgICAgICAgfHwgaXRlbS0+aGFzVGFnTmFtZShy
YlRhZykKICAgICAgICAgfHwgaXRlbS0+aGFzVGFnTmFtZShycFRhZykKQEAgLTE1OCw3ICsxNTgs
NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXhlY3V0ZVRhc2soSFRNTENvbnN0cnVjdGlvblNpdGVU
YXNrJiB0YXNrKQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2hMYXRlcihDb250
YWluZXJOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8Tm9kZT4gcHJwQ2hpbGQsIGJvb2wgc2VsZkNs
b3NpbmcpCiB7Ci0gICAgQVNTRVJUKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV9wYXJzZXJD
b250ZW50UG9saWN5KSB8fCAhaXM8RWxlbWVudD4ocHJwQ2hpbGQuZ2V0KCkpIHx8ICF0b1Njcmlw
dEVsZW1lbnRJZlBvc3NpYmxlKGRvd25jYXN0PEVsZW1lbnQ+KHBycENoaWxkLmdldCgpKSkpOwor
ICAgIEFTU0VSVChzY3JpcHRpbmdDb250ZW50SXNBbGxvd2VkKG1fcGFyc2VyQ29udGVudFBvbGlj
eSkgfHwgIWlzPEVsZW1lbnQ+KCpwcnBDaGlsZCkgfHwgIXRvU2NyaXB0RWxlbWVudElmUG9zc2li
bGUoZG93bmNhc3Q8RWxlbWVudD4ocHJwQ2hpbGQuZ2V0KCkpKSk7CiAgICAgQVNTRVJUKHBsdWdp
bkNvbnRlbnRJc0FsbG93ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSB8fCAhcHJwQ2hpbGQtPmlz
UGx1Z2luRWxlbWVudCgpKTsKIAogICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayB0YXNrKEhU
TUxDb25zdHJ1Y3Rpb25TaXRlVGFzazo6SW5zZXJ0KTsKQEAgLTQ1OCw3ICs0NTgsNyBAQCB2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxGb3JtRWxl
bWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBib29sIGlzRGVtb3RlZCkKIHsKICAgICBSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KHRva2VuKTsKLSAgICBBU1NF
UlQoaXM8SFRNTEZvcm1FbGVtZW50PihlbGVtZW50LmdldCgpKSk7CisgICAgQVNTRVJUKGlzPEhU
TUxGb3JtRWxlbWVudD4oKmVsZW1lbnQpKTsKICAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBm
b3JtID0gc3RhdGljX3BvaW50ZXJfY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGVsZW1lbnQucmVsZWFz
ZSgpKTsKICAgICBpZiAoIWluc2lkZVRlbXBsYXRlRWxlbWVudCgpKQogICAgICAgICBtX2Zvcm0g
PSBmb3JtOwpAQCAtNTQ3LDcgKzU0Nyw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgV2hpdGVzcGFjZU1vCiAgICAg
Ly8gZm9yIHBlcmZvcm1hbmNlLCBzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NTg5OD4uCiAKICAgICBOb2RlKiBwcmV2aW91c0NoaWxkID0gdGFzay5uZXh0Q2hp
bGQgPyB0YXNrLm5leHRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiB0YXNrLnBhcmVudC0+bGFz
dENoaWxkKCk7Ci0gICAgaWYgKHByZXZpb3VzQ2hpbGQgJiYgaXM8VGV4dD4ocHJldmlvdXNDaGls
ZCkpIHsKKyAgICBpZiAoaXM8VGV4dD4ocHJldmlvdXNDaGlsZCkpIHsKICAgICAgICAgLy8gRklY
TUU6IFdlJ3JlIG9ubHkgc3VwcG9zZWQgdG8gYXBwZW5kIHRvIHRoaXMgdGV4dCBub2RlIGlmIGl0
CiAgICAgICAgIC8vIHdhcyB0aGUgbGFzdCB0ZXh0IG5vZGUgaW5zZXJ0ZWQgYnkgdGhlIHBhcnNl
ci4KICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqcHJldmlvdXNDaGls
ZCk7CkBAIC02MTgsNyArNjE4LDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLAogaW5saW5lIERv
Y3VtZW50JiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6b3duZXJEb2N1bWVudEZvckN1cnJlbnROb2Rl
KCkKIHsKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAoaXM8SFRNTFRlbXBs
YXRlRWxlbWVudD4oY3VycmVudE5vZGUoKSkpCisgICAgaWYgKGlzPEhUTUxUZW1wbGF0ZUVsZW1l
bnQ+KCpjdXJyZW50Tm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZW1wbGF0
ZUVsZW1lbnQ+KCpjdXJyZW50RWxlbWVudCgpKS5jb250ZW50KCktPmRvY3VtZW50KCk7CiAjZW5k
aWYKICAgICByZXR1cm4gY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQoKTsKQEAgLTcyNyw3ICs3Mjcs
NyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVyU2l0ZShIVE1MQ29uc3Ry
dWN0aW9uU2l0ZVRhc2smIHRhc2spCiAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHVzZSB0aGUgRG9j
dW1lbnRGcmFnbWVudCBhcyBhIHJvb3Qgbm9kZS4gU28gd2UgbXVzdCB0cmVhdCB0aGUgcm9vdCBu
b2RlIChEb2N1bWVudEZyYWdtZW50KSBhcyBpZiBpdCBpcyBhIGh0bWwgZWxlbWVudCBoZXJlLgog
ICAgICAgICBib29sIHBhcmVudENhbkJlRm9zdGVyUGFyZW50ID0gcGFyZW50ICYmIChwYXJlbnQt
PmlzRWxlbWVudE5vZGUoKSB8fCAobV9pc1BhcnNpbmdGcmFnbWVudCAmJiBwYXJlbnQgPT0gbV9v
cGVuRWxlbWVudHMucm9vdE5vZGUoKSkpOwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQot
ICAgICAgICBwYXJlbnRDYW5CZUZvc3RlclBhcmVudCA9IHBhcmVudENhbkJlRm9zdGVyUGFyZW50
IHx8IChwYXJlbnQgJiYgaXM8RG9jdW1lbnRGcmFnbWVudD4ocGFyZW50KSAmJiBkb3duY2FzdDxE
b2N1bWVudEZyYWdtZW50PihwYXJlbnQpLT5pc1RlbXBsYXRlQ29udGVudCgpKTsKKyAgICAgICAg
cGFyZW50Q2FuQmVGb3N0ZXJQYXJlbnQgPSBwYXJlbnRDYW5CZUZvc3RlclBhcmVudCB8fCAoaXM8
RG9jdW1lbnRGcmFnbWVudD4ocGFyZW50KSAmJiBkb3duY2FzdDxEb2N1bWVudEZyYWdtZW50Pihw
YXJlbnQpLT5pc1RlbXBsYXRlQ29udGVudCgpKTsKICNlbmRpZgogICAgICAgICBpZiAocGFyZW50
Q2FuQmVGb3N0ZXJQYXJlbnQpIHsKICAgICAgICAgICAgIHRhc2sucGFyZW50ID0gcGFyZW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAppbmRl
eCA5MTlhYzBlM2EyNTI1OGVjOWRkMDU5OTYxMDU2NTFmMzg5OWFkZGFlLi4zOTdkMWU2ZWMwYjJl
ZTVjM2UwYTAxM2YzZDI1NGZmODQ0ZGFhOGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcApAQCAtNTEsNyArNTEsNyBAQCBpbmxpbmUgYm9v
bCBpc1Njb3BlTWFya2VyKEhUTUxTdGFja0l0ZW0qIGl0ZW0pCiAgICAgICAgIHx8IGl0ZW0tPmhh
c1RhZ05hbWUoY2FwdGlvblRhZykKICAgICAgICAgfHwgaXRlbS0+aGFzVGFnTmFtZShtYXJxdWVl
VGFnKQogICAgICAgICB8fCBpdGVtLT5oYXNUYWdOYW1lKG9iamVjdFRhZykKLSAgICAgICAgfHwg
aXM8SFRNTFRhYmxlRWxlbWVudD4oaXRlbS0+bm9kZSgpKQorICAgICAgICB8fCBpczxIVE1MVGFi
bGVFbGVtZW50PigqaXRlbS0+bm9kZSgpKQogICAgICAgICB8fCBpdGVtLT5oYXNUYWdOYW1lKHRk
VGFnKQogICAgICAgICB8fCBpdGVtLT5oYXNUYWdOYW1lKHRoVGFnKQogICAgICAgICB8fCBpdGVt
LT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptaVRhZykKQEAgLTc4LDcgKzc4LDcgQEAgaW5saW5l
IGJvb2wgaXNMaXN0SXRlbVNjb3BlTWFya2VyKEhUTUxTdGFja0l0ZW0qIGl0ZW0pCiAKIGlubGlu
ZSBib29sIGlzVGFibGVTY29wZU1hcmtlcihIVE1MU3RhY2tJdGVtKiBpdGVtKQogewotICAgIHJl
dHVybiBpczxIVE1MVGFibGVFbGVtZW50PihpdGVtLT5ub2RlKCkpCisgICAgcmV0dXJuIGlzPEhU
TUxUYWJsZUVsZW1lbnQ+KCppdGVtLT5ub2RlKCkpCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1F
TlQpCiAgICAgICAgIHx8IGl0ZW0tPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpCiAjZW5kaWYKQEAg
LTEyMCw3ICsxMjAsNyBAQCBpbmxpbmUgYm9vbCBpc0J1dHRvblNjb3BlTWFya2VyKEhUTUxTdGFj
a0l0ZW0qIGl0ZW0pCiAKIGlubGluZSBib29sIGlzU2VsZWN0U2NvcGVNYXJrZXIoSFRNTFN0YWNr
SXRlbSogaXRlbSkKIHsKLSAgICByZXR1cm4gIWlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KGl0ZW0t
Pm5vZGUoKSkgJiYgIWlzPEhUTUxPcHRpb25FbGVtZW50PihpdGVtLT5ub2RlKCkpOworICAgIHJl
dHVybiAhaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKml0ZW0tPm5vZGUoKSkgJiYgIWlzPEhUTUxP
cHRpb25FbGVtZW50PigqaXRlbS0+bm9kZSgpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggZjdlY2FjODVkMGI0MjE5NWJk
ZTBjZjZjMjUwNWM1OTYxMDY5NDY5ZC4uZDQ3ZjI1MDlhMmQ5NDYxNDUxN2YyZTU3YjQwM2MwNzFh
MGFlOGIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxk
ZXIuY3BwCkBAIC0yOTgsNyArMjk4LDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxk
ZXIoSFRNTERvY3VtZW50UGFyc2VyJiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQmIGYKICNlbmRp
ZgogCiAgICAgICAgIHJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHkoKTsKLSAgICAgICAg
bV90cmVlLnNldEZvcm0oIWNvbnRleHRFbGVtZW50IHx8IGlzPEhUTUxGb3JtRWxlbWVudD4oY29u
dGV4dEVsZW1lbnQpID8gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50Pihjb250ZXh0RWxlbWVudCkg
OiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yKCpjb250ZXh0RWxlbWVu
dCkpOworICAgICAgICBtX3RyZWUuc2V0Rm9ybSghY29udGV4dEVsZW1lbnQgfHwgaXM8SFRNTEZv
cm1FbGVtZW50PigqY29udGV4dEVsZW1lbnQpID8gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50Pihj
b250ZXh0RWxlbWVudCkgOiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9y
KCpjb250ZXh0RWxlbWVudCkpOwogICAgIH0KIH0KIApAQCAtODY5LDcgKzg2OSw3IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSBvcHRncm91cFRhZyB8fCB0b2tlbi0+bmFtZSgpID09IG9wdGlvblRhZykgewotICAgICAgICBp
ZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUo
KSkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90cmVlLmN1cnJlbnRT
dGFja0l0ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZE9w
dGlvbihIVE1MVG9rZW46OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsKICAgICAgICAg
ICAgIHByb2Nlc3NFbmRUYWcoJmVuZE9wdGlvbik7CiAgICAgICAgIH0KQEAgLTEzNjAsNyArMTM2
MCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKLSAgICAgICAgICAgIGlmIChpczxIVE1MT3B0
aW9uRWxlbWVudD4obV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgeworICAgICAg
ICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0o
KS0+bm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24o
SFRNTFRva2VuOjpFbmRUYWcsIG9wdGlvblRhZy5sb2NhbE5hbWUoKSk7CiAgICAgICAgICAgICAg
ICAgcHJvY2Vzc0VuZFRhZygmZW5kT3B0aW9uKTsKICAgICAgICAgICAgIH0KQEAgLTEzNjgsMTEg
KzEzNjgsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNI
VE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGdyb3VwVGFnKSB7Ci0gICAgICAgICAgICBpZiAoaXM8
SFRNTE9wdGlvbkVsZW1lbnQ+KG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsK
KyAgICAgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3Rh
Y2tJdGVtKCktPm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5k
T3B0aW9uKEhUTUxUb2tlbjo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOwogICAgICAg
ICAgICAgICAgIHByb2Nlc3NFbmRUYWcoJmVuZE9wdGlvbik7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4obV90cmVlLmN1cnJlbnRTdGFja0l0
ZW0oKS0+bm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+
KCptX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAg
QXRvbWljSFRNTFRva2VuIGVuZE9wdGdyb3VwKEhUTUxUb2tlbjo6RW5kVGFnLCBvcHRncm91cFRh
Zy5sb2NhbE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZygmZW5kT3B0Z3Jv
dXApOwogICAgICAgICAgICAgfQpAQCAtMTYyOSw3ICsxNjI5LDcgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHkoKQogICAgICAgICAgICAgICAg
IHdoaWxlIChpdGVtLT5ub2RlKCkgIT0gbV90cmVlLm9wZW5FbGVtZW50cygpLT5yb290Tm9kZSgp
ICYmICFpdGVtLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkgewogICAgICAgICAgICAgICAgICAg
ICBub2RlUmVjb3JkID0gbm9kZVJlY29yZC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBp
dGVtID0gbm9kZVJlY29yZC0+c3RhY2tJdGVtKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChp
czxIVE1MVGFibGVFbGVtZW50PihpdGVtLT5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICBp
ZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oKml0ZW0tPm5vZGUoKSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJblNlbGVjdElu
VGFibGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE2NDcsNyArMTY0
Nyw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpyZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0
ZWx5KCkKICAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUoY29sZ3JvdXBUYWcpKSB7CiAgICAg
ICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdy
b3VwKTsKICAgICAgICAgfQotICAgICAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oaXRlbS0+
bm9kZSgpKSkKKyAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCppdGVtLT5ub2RlKCkp
KQogICAgICAgICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5U
YWJsZSk7CiAgICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKGhlYWRUYWcpKSB7CiAjaWYgRU5B
QkxFKFRFTVBMQVRFX0VMRU1FTlQpCkBAIC0yMjM0LDkgKzIyMzQsOSBAQCB2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgIGNhc2Ug
SW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3Q6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkg
PT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3QgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlv
bk1vZGU6OkluU2VsZWN0SW5UYWJsZSk7CiAgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9w
dGdyb3VwVGFnKSB7Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KG1fdHJl
ZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkgJiYgbV90cmVlLm9uZUJlbG93VG9wKCkgJiYg
aXM8SFRNTE9wdEdyb3VwRWxlbWVudD4obV90cmVlLm9uZUJlbG93VG9wKCktPm5vZGUoKSkpCisg
ICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX3RyZWUuY3VycmVudFN0YWNr
SXRlbSgpLT5ub2RlKCkpICYmIG1fdHJlZS5vbmVCZWxvd1RvcCgpICYmIGlzPEhUTUxPcHRHcm91
cEVsZW1lbnQ+KCptX3RyZWUub25lQmVsb3dUb3AoKS0+bm9kZSgpKSkKICAgICAgICAgICAgICAg
ICBwcm9jZXNzRmFrZUVuZFRhZyhvcHRpb25UYWcpOwotICAgICAgICAgICAgaWYgKGlzPEhUTUxP
cHRHcm91cEVsZW1lbnQ+KG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqbV90cmVlLmN1cnJlbnRTdGFj
a0l0ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+cG9wKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjI0
NCw3ICsyMjQ0LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWlj
SFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKLSAgICAgICAgICAgIGlmIChpczxI
VE1MT3B0aW9uRWxlbWVudD4obV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgewor
ICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90cmVlLmN1cnJlbnRTdGFj
a0l0ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+cG9wKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjQ4
Niw3ICsyNDg2LDcgQEAgUmVwcm9jZXNzQnVmZmVyOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9u
TW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluVGFibGUgfHwgaW5zZXJ0aW9uTW9kZSgpID09IElu
c2VydGlvbk1vZGU6OkluVGFibGVCb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25N
b2RlOjpJblJvdyk7CiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnMuaXNF
bXB0eSgpKTsKICAgICAgICAgaWYgKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmlzRWxlbWVu
dE5vZGUoKQotICAgICAgICAgICAgJiYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KG1fdHJlZS5jdXJy
ZW50U3RhY2tJdGVtKCktPm5vZGUoKSkKKyAgICAgICAgICAgICYmIChpczxIVE1MVGFibGVFbGVt
ZW50PigqbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKQogICAgICAgICAgICAgICAg
IHx8IG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9k
eVRhZykKICAgICAgICAgICAgICAgICB8fCBtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGZvb3RUYWcpCiAgICAgICAgICAgICAgICAgfHwgbV90cmVlLmN1
cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkVGFnKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmgKaW5kZXggMGY0MWEwMjQwYzFj
NWZjOWM5YTk3MTI5YjNkM2NhYTI2MWM5MjVmOS4uNTk0YTVjYzE0NDlmYzcxMjA5ZWU1ZDllM2Q3
NGJkYmZhZjhhM2MzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5z
ZXJ0aW9uUG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Q
b2ludC5oCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAKIGlubGluZSBib29sIGlzQWN0aXZl
SW5zZXJ0aW9uUG9pbnQoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZSAmJiBp
czxJbnNlcnRpb25Qb2ludD4obm9kZSkgJiYgZG93bmNhc3Q8SW5zZXJ0aW9uUG9pbnQ+KCpub2Rl
KS5pc0FjdGl2ZSgpOworICAgIHJldHVybiBpczxJbnNlcnRpb25Qb2ludD4obm9kZSkgJiYgZG93
bmNhc3Q8SW5zZXJ0aW9uUG9pbnQ+KCpub2RlKS5pc0FjdGl2ZSgpOwogfQogCiBpbmxpbmUgTm9k
ZSogcGFyZW50Tm9kZUZvckRpc3RyaWJ1dGlvbihjb25zdCBOb2RlKiBub2RlKQpAQCAtODUsNyAr
ODUsNyBAQCBpbmxpbmUgTm9kZSogcGFyZW50Tm9kZUZvckRpc3RyaWJ1dGlvbihjb25zdCBOb2Rl
KiBub2RlKQogICAgIEFTU0VSVChub2RlKTsKIAogICAgIGlmIChOb2RlKiBwYXJlbnQgPSBub2Rl
LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEluc2VydGlvblBvaW50PihwYXJlbnQp
ICYmIGRvd25jYXN0PEluc2VydGlvblBvaW50PigqcGFyZW50KS5zaG91bGRVc2VGYWxsYmFja0Vs
ZW1lbnRzKCkpCisgICAgICAgIGlmIChpczxJbnNlcnRpb25Qb2ludD4oKnBhcmVudCkgJiYgZG93
bmNhc3Q8SW5zZXJ0aW9uUG9pbnQ+KCpwYXJlbnQpLnNob3VsZFVzZUZhbGxiYWNrRWxlbWVudHMo
KSkKICAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPnBhcmVudE5vZGUoKTsKICAgICAgICAgcmV0
dXJuIHBhcmVudDsKICAgICB9CkBAIC05Niw3ICs5Niw3IEBAIGlubGluZSBOb2RlKiBwYXJlbnRO
b2RlRm9yRGlzdHJpYnV0aW9uKGNvbnN0IE5vZGUqIG5vZGUpCiBpbmxpbmUgRWxlbWVudCogcGFy
ZW50RWxlbWVudEZvckRpc3RyaWJ1dGlvbihjb25zdCBOb2RlKiBub2RlKQogewogICAgIGlmIChO
b2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlRm9yRGlzdHJpYnV0aW9uKG5vZGUpKSB7Ci0gICAgICAg
IGlmIChpczxFbGVtZW50PihwYXJlbnQpKQorICAgICAgICBpZiAoaXM8RWxlbWVudD4oKnBhcmVu
dCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50KTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50VHlwZXMuY3BwCmluZGV4IDI2Mzg2M2JlNzA2MGNkOTVhZWQ1OTc4ZDllM2VjMDRlMzIw
ODgwMGEuLjZkOTVmMzQzMzg0ZDIwZDA3NDZlNTdmMmI0OTBkZDA2N2VlZWI1M2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5
cGVzLmNwcApAQCAtNTMsNyArNTMsNyBAQCBIVE1MTWVkaWFFbGVtZW50KiBwYXJlbnRNZWRpYUVs
ZW1lbnQoTm9kZSogbm9kZSkKICAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlLT5zaGFkb3dIb3N0
KCk7CiAgICAgaWYgKCFtZWRpYU5vZGUpCiAgICAgICAgIG1lZGlhTm9kZSA9IG5vZGU7Ci0gICAg
aWYgKCFpczxIVE1MTWVkaWFFbGVtZW50PihtZWRpYU5vZGUpKQorICAgIGlmICghaXM8SFRNTE1l
ZGlhRWxlbWVudD4oKm1lZGlhTm9kZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50PihtZWRpYU5vZGUpOwogfQpAQCAtNjEsNyAr
NjEsNyBAQCBIVE1MTWVkaWFFbGVtZW50KiBwYXJlbnRNZWRpYUVsZW1lbnQoTm9kZSogbm9kZSkK
IE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIG1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKE5vZGUqIG5v
ZGUpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS0+aXNNZWRp
YUNvbnRyb2xFbGVtZW50KCkpOwotICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkK
KyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8TWVkaWFDb250cm9sSW5wdXRFbGVtZW50Kj4obm9kZSktPmRpc3BsYXlUeXBlKCk7
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbERpdkVsZW1lbnQqPihub2RlKS0+
ZGlzcGxheVR5cGUoKTsKIH0KQEAgLTE5Niw3ICsxOTYsNyBAQCBNZWRpYUNvbnRyb2xWb2x1bWVT
bGlkZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50JiBk
b2N1bQogdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBMZWZ0IGJ1dHRvbiBpcyAwLiBSZWplY3Rz
IG1vdXNlIGV2ZW50cyBub3QgZnJvbSBsZWZ0IGJ1dHRvbi4KLSAgICBpZiAoaXM8TW91c2VFdmVu
dD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkpCisgICAg
aWYgKGlzPE1vdXNlRXZlbnQ+KCpldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50
KS5idXR0b24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFyZW5kZXJlcigpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3Bw
CmluZGV4IDMyZjNhNTMzNGRjY2QzNmY5ODgyYzllODE2YWI2OTEyOGVhODFlZDUuLjI3MWYwNmEz
NDU5ZGUyMzA1ODMxZDE4ZTQwOGQ5OTczZGEzN2RjMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTIyMSw3ICsyMjEs
NyBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCiB7CiAgICAgTWVkaWFDb250cm9sRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7CiAKLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7CisgICAg
aWYgKGlzPE1vdXNlRXZlbnQ+KCpldmVudCkpIHsKICAgICAgICAgTGF5b3V0UG9pbnQgbG9jYXRp
b24gPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmFic29sdXRlTG9jYXRpb24oKTsKICAg
ICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYm
IGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKSB7CiAgICAgICAgICAgICBzdGFydERyYWcobG9jYXRp
b24pOwpAQCAtMzM3LDcgKzMzNyw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGVFbGVtZW50CiAKIHZvaWQg
TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkgfHwg
ZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKKyAgICBpZiAoIWlz
PE1vdXNlRXZlbnQ+KCpldmVudCkgfHwgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91
c2VvdXRFdmVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUG9vciBtYW4ncyBtb3VzZWxl
YXZlIGV2ZW50IGRldGVjdGlvbi4KQEAgLTY4OSw3ICs2ODksNyBAQCB2b2lkIE1lZGlhQ29udHJv
bENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZlbgogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICBOb2RlKiB0YXJnZXQgPSBldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpOwotICAgICAgICBpZiAoIXRhcmdldCB8fCAhaXM8RWxlbWVu
dD4odGFyZ2V0KSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pih0YXJnZXQpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIC8vIFdoZW4gd2UgY3JlYXRlZCB0aGUgZWxlbWVudHMgaW4g
dGhlIHRyYWNrIGxpc3QsIHdlIGdhdmUgdGhlbSBhIGN1c3RvbQpAQCAtODUxLDcgKzg1MSw3IEBA
IFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQ6OmNyZWF0ZShEb2N1CiB2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gTGVmdCBidXR0
b24gaXMgMC4gUmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAg
aWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQp
LmJ1dHRvbigpKQorICAgIGlmIChpczxNb3VzZUV2ZW50PigqZXZlbnQpICYmIGRvd25jYXN0PE1v
dXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICgh
cmVuZGVyZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlh
Q29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5j
cHAKaW5kZXggNGQzZWNmODBkMjkyZmEyNTUzNzViZGY0YTZhZjNkNDllNDMwYjYzYS4uNzEyOWZl
NjYxNzNhZmY3ZTQxMWY3NDVlNDM5NTlhMjIyNzc5ZGZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKQEAgLTM2Niw3ICszNjYsNyBAQCB2b2lkIE1l
ZGlhQ29udHJvbHM6OnN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKQogCiBib29sIE1l
ZGlhQ29udHJvbHM6OmNvbnRhaW5zUmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQpCiB7Ci0gICAg
aWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50PigqZXZl
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJn
ZXQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLnJlbGF0ZWRUYXJnZXQoKTsKICAgICBp
ZiAoIXJlbGF0ZWRUYXJnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sc0FwcGxlLmNwcAppbmRleCA4Yzg0ZGE3M2JmNjYwMGY0NWMxNDJiNjMzNGVhYTYz
NGM0M2Q4ZTg2Li4wMWUzZjZmYmY0YzI0ZjE4YmRjNGE0Y2Y4YjcyNGQzN2Y5MDJmOTVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAK
QEAgLTU4OCw3ICs1ODgsNyBAQCB2b2lkIE1lZGlhQ29udHJvbHNBcHBsZUV2ZW50TGlzdGVuZXI6
OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudAogewogICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQogICAgICAgICBtX21lZGlh
Q29udHJvbHMtPmhhbmRsZUNsaWNrRXZlbnQoZXZlbnQpOwotICAgIGVsc2UgaWYgKChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkgJiYgaXM8V2hlZWxFdmVudD4oZXZlbnQpKSB7Cisg
ICAgZWxzZSBpZiAoKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwg
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBpczxXaGVl
bEV2ZW50PigqZXZlbnQpKSB7CiAgICAgICAgIFdoZWVsRXZlbnQmIHdoZWVsRXZlbnQgPSBkb3du
Y2FzdDxXaGVlbEV2ZW50PigqZXZlbnQpOwogICAgICAgICBpZiAobV9tZWRpYUNvbnRyb2xzLT5z
aG91bGRDbG9zZWRDYXB0aW9uc0NvbnRhaW5lclByZXZlbnRQYWdlU2Nyb2xsaW5nKHdoZWVsRXZl
bnQud2hlZWxEZWx0YVkoKSkpCiAgICAgICAgICAgICB3aGVlbEV2ZW50LnByZXZlbnREZWZhdWx0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50
LmNwcAppbmRleCAyMmJlNjNiNDc1ZTA5NTEyNzU2NzhiODQ4ZmJhYjVkMzI4NjQ5ZDc4Li5kZGM1
YTUzYThiN2IyNTY5MGJlOGJkYTY1MzVkZjAyZjIwMTU4ZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKQEAgLTMzMyw3ICszMzMs
NyBAQCB2b2lkIFNsaWRlclRodW1iRWxlbWVudDo6c3RvcERyYWdnaW5nKCkKICNpZiAhUExBVEZP
Uk0oSU9TKQogdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogewotICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7CisgICAgaWYg
KCFpczxNb3VzZUV2ZW50PigqZXZlbnQpKSB7CiAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcAppbmRleCAzOGE0
MGE0M2RkNjg1NTgxNjAyOGQxY2RiZThhZGY0Yzk2YjJiNDU5Li5iYmRkMDFiOWEwOTY1Yzk2NTA1
NmM5Y2M4OTNjM2ZhZGNmM2I1ZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgU3BpbkJ1dHRv
bkVsZW1lbnQ6OndpbGxEZXRhY2hSZW5kZXJlcnMoKQogCiB2b2lkIFNwaW5CdXR0b25FbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWlzPE1vdXNl
RXZlbnQ+KGV2ZW50KSkgeworICAgIGlmICghaXM8TW91c2VFdmVudD4oKmV2ZW50KSkgewogICAg
ICAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgSFRNTERpdkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogICAgICAgICByZXR1cm47CkBAIC0x
NDYsNyArMTQ2LDcgQEAgdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6Zm9yd2FyZEV2ZW50KEV2ZW50
KiBldmVudCkKICAgICBpZiAoIXJlbmRlckJveCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIWlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkKKyAgICBpZiAoIWlzPFdoZWVsRXZlbnQ+KCpldmVu
dCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9zcGluQnV0dG9uT3duZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcAppbmRleCA3YjI5NTNkODc4YjkwYWQzMjFmYTVkZDJiMmYxYjA3NGViNmJkZjRhLi5i
NDc2MTkwMTNmNDJjOWQ3ZjA3ZWZhOGQzOGE5ZDU1ZmY5YjI4ZmFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAK
QEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIC8vIE9uIG1vdXNlZG93
biwgYnJpbmcgdXAgYSBtZW51LCBpZiBuZWVkZWQKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHNoYWRvd0hvc3QoKSk7Ci0gICAgaWYgKGlu
cHV0ICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlz
PE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRv
bigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoaW5wdXQgJiYgZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oKmV2ZW50KSAmJiBk
b3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAg
ICAgICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKICNpZiAhUExB
VEZPUk0oSU9TKQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0
b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZWRvd25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVu
dD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KCpldmVu
dCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9u
KSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRl
c3RpbmcoKSkgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJh
bWUoKSkgewogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5zZXRDYXB0dXJp
bmdNb3VzZUV2ZW50c0VsZW1lbnQodGhpcyk7CkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogICAgICAgICBpbnB1dC0+c2VsZWN0KCk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwogICAgIH0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2V1cEV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2
ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KCpldmVu
dCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9u
KSB7CiAgICAgICAgIGlmIChtX2NhcHR1cmluZykgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkgewogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQobnVsbHB0cik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAKaW5kZXggYjdhZjk4MTdkZmNlZjNlNTdkNjMyZTIw
MmQ3MjVjODYwNmVmZmNhZS4uMzgyNmYzZGU0MDY2Zjk3NDQxZDhmNDQyZGI3YjRkM2ZkMWJjOTEz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcApAQCAtNDk3LDEyICs0OTcsMTIg
QEAgdm9pZCBWVFRDdWU6OmNvcHlXZWJWVFROb2RlVG9ET01UcmVlKENvbnRhaW5lck5vZGUqIHdl
YlZUVE5vZGUsIENvbnRhaW5lck5vZGUqIHAKIHsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSB3ZWJW
VFROb2RlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7
CiAgICAgICAgIFJlZlB0cjxOb2RlPiBjbG9uZWROb2RlOwotICAgICAgICBpZiAoaXM8V2ViVlRU
RWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmIChpczxXZWJWVFRFbGVtZW50Pigqbm9kZSkpCiAg
ICAgICAgICAgICBjbG9uZWROb2RlID0gZG93bmNhc3Q8V2ViVlRURWxlbWVudD4oKm5vZGUpLmNy
ZWF0ZUVxdWl2YWxlbnRIVE1MRWxlbWVudChvd25lckRvY3VtZW50KCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBjbG9uZWROb2RlID0gbm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsKICAgICAg
ICAgcGFyZW50LT5hcHBlbmRDaGlsZChjbG9uZWROb2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
LSAgICAgICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQorICAgICAgICBpZiAoaXM8Q29u
dGFpbmVyTm9kZT4oKm5vZGUpKQogICAgICAgICAgICAgY29weVdlYlZUVE5vZGVUb0RPTVRyZWUo
ZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSksIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KGNs
b25lZE5vZGUuZ2V0KCkpKTsKICAgICB9CiB9CkBAIC03NjYsNyArNzY2LDcgQEAgdm9pZCBWVFRD
dWU6Om1hcmtGdXR1cmVBbmRQYXN0Tm9kZXMoQ29udGFpbmVyTm9kZSogcm9vdCwgY29uc3QgTWVk
aWFUaW1lJiBwcmV2aW8KICAgICAgICAgICAgICAgICBpc1Bhc3ROb2RlID0gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpczxXZWJWVFRFbGVtZW50PihjaGlsZCkpIHsK
KyAgICAgICAgaWYgKGlzPFdlYlZUVEVsZW1lbnQ+KCpjaGlsZCkpIHsKICAgICAgICAgICAgIGRv
d25jYXN0PFdlYlZUVEVsZW1lbnQ+KCpjaGlsZCkuc2V0SXNQYXN0Tm9kZShpc1Bhc3ROb2RlKTsK
ICAgICAgICAgICAgIC8vIE1ha2UgYW4gZWxlbWVuZXQgaWQgbWF0Y2ggYSBjdWUgaWQgZm9yIHN0
eWxlIG1hdGNoaW5nIHB1cnBvc2VzLgogICAgICAgICAgICAgaWYgKCFpZCgpLmlzRW1wdHkoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4
IGVlM2RkMzhhN2M1MDhjYmY5ODY4YmM0OTJkYjFmMTM0NTIwOTk3ZDAuLjZlZWNkNWQzMGI2ODgw
ODI4YzI4MzhhNTI4NzU0NDkzNjc3YWEzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtODk2LDcgKzg5Niw3IEBAIEVsZW1lbnQqIElu
c3BlY3RvckNTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkKQogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiTm8gbm9kZSB3
aXRoIGdpdmVuIGlkIGZvdW5kIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAg
ICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkp
IHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5vdCBhbiBlbGVtZW50IG5v
ZGUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMTA4Niw3ICsxMDg2LDgg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3AKIAogUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRy
aWJ1dGVzU3R5bGUoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWlzPFN0eWxlZEVsZW1l
bnQ+KGVsZW1lbnQpKQorICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBpZiAoIWlzPFN0eWxlZEVs
ZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhN
RTogVWdsaW5lc3MgYmVsb3cuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAppbmRleCBiZTk1ZmUwYjIzNTU4OWUyMjIxZDYyMTA3NGY2NWJjYWNjNGEw
MGNmLi45YmIwODE4YTMxMmNiMWQzNzg1ZWYxMmFkMjU2OTMwM2ViMTZmZGFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTMzOSw3ICsz
MzksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRv
SWRNYXAqIG5vZGVzTWFwKQogICAgICAgICAgICAgdW5iaW5kKGNvbnRlbnREb2N1bWVudCwgbm9k
ZXNNYXApOwogICAgIH0KIAotICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgeworICAgIGlmIChp
czxFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuc2hhZG93Um9vdCgpKQogICAgICAgICAgICAgdW5iaW5kKHJv
b3QsIG5vZGVzTWFwKTsKICAgICB9CkBAIC0zNzUsNyArMzc1LDcgQEAgRG9jdW1lbnQqIEluc3Bl
Y3RvckRPTUFnZW50Ojphc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghaXM8
RG9jdW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKCFpczxEb2N1bWVudD4oKm5vZGUpKSB7CiAgICAg
ICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJEb2N1bWVudCBpcyBub3QgYXZhaWxhYmxl
Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTM4Nyw3ICszODcsNyBAQCBF
bGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JT
dHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKCFpczxFbGVtZW50Pigqbm9k
ZSkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5vZGUgaXMgbm90IGFu
IEVsZW1lbnQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNTIwLDcgKzUy
MCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5v
ZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2RlPihub2RlKSkgeworICAgIGlmICghaXM8Q29udGFp
bmVyTm9kZT4oKm5vZGUpKSB7CiAgICAgICAgIGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5v
ZGVJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01NDEsNyArNTQxLDcgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQsIGMKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlz
PENvbnRhaW5lck5vZGU+KG5vZGUpKSB7CisgICAgaWYgKCFpczxDb250YWluZXJOb2RlPigqbm9k
ZSkpIHsKICAgICAgICAgYXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTcxOCw3ICs3MTgsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpzZXROb2RlTmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNv
bnN0CiAgICAgKm5ld0lkID0gMDsKIAogICAgIE5vZGUqIG9sZE5vZGUgPSBub2RlRm9ySWQobm9k
ZUlkKTsKLSAgICBpZiAoIW9sZE5vZGUgfHwgIWlzPEVsZW1lbnQ+KG9sZE5vZGUpKQorICAgIGlm
ICghaXM8RWxlbWVudD4ob2xkTm9kZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5v
ZGUKICAgICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZHJlbihjaGlsZHJlbi5yZWxlYXNlKCkpOwog
ICAgIH0KIAotICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgeworICAgIGlmIChpczxFbGVtZW50
Pigqbm9kZSkpIHsKICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KCpub2RlKTsKICAgICAgICAgdmFsdWUtPnNldEF0dHJpYnV0ZXMoYnVpbGRBcnJheUZvckVsZW1l
bnRBdHRyaWJ1dGVzKCZlbGVtZW50KSk7CiAgICAgICAgIGlmIChpczxIVE1MRnJhbWVPd25lckVs
ZW1lbnQ+KGVsZW1lbnQpKSB7CkBAIC0xMjkzLDE3ICsxMjkzLDE3IEBAIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmpl
Y3RGb3JOb2RlCiAgICAgICAgICAgICB2YWx1ZS0+c2V0VGVtcGxhdGVDb250ZW50KGJ1aWxkT2Jq
ZWN0Rm9yTm9kZShkb3duY2FzdDxIVE1MVGVtcGxhdGVFbGVtZW50PihlbGVtZW50KS5jb250ZW50
KCksIDAsIG5vZGVzTWFwKSk7CiAjZW5kaWYKIAotICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1lbnQ+
KG5vZGUpKSB7CisgICAgfSBlbHNlIGlmIChpczxEb2N1bWVudD4oKm5vZGUpKSB7CiAgICAgICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqbm9kZSk7CiAgICAgICAg
IHZhbHVlLT5zZXREb2N1bWVudFVSTChkb2N1bWVudFVSTFN0cmluZygmZG9jdW1lbnQpKTsKICAg
ICAgICAgdmFsdWUtPnNldEJhc2VVUkwoZG9jdW1lbnRCYXNlVVJMU3RyaW5nKCZkb2N1bWVudCkp
OwogICAgICAgICB2YWx1ZS0+c2V0WG1sVmVyc2lvbihkb2N1bWVudC54bWxWZXJzaW9uKCkpOwot
ICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1lbnRUeXBlPihub2RlKSkgeworICAgIH0gZWxzZSBpZiAo
aXM8RG9jdW1lbnRUeXBlPigqbm9kZSkpIHsKICAgICAgICAgRG9jdW1lbnRUeXBlJiBkb2NUeXBl
ID0gZG93bmNhc3Q8RG9jdW1lbnRUeXBlPigqbm9kZSk7CiAgICAgICAgIHZhbHVlLT5zZXRQdWJs
aWNJZChkb2NUeXBlLnB1YmxpY0lkKCkpOwogICAgICAgICB2YWx1ZS0+c2V0U3lzdGVtSWQoZG9j
VHlwZS5zeXN0ZW1JZCgpKTsKICAgICAgICAgdmFsdWUtPnNldEludGVybmFsU3Vic2V0KGRvY1R5
cGUuaW50ZXJuYWxTdWJzZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChpczxBdHRyPihub2RlKSkgewor
ICAgIH0gZWxzZSBpZiAoaXM8QXR0cj4oKm5vZGUpKSB7CiAgICAgICAgIEF0dHImIGF0dHJpYnV0
ZSA9IGRvd25jYXN0PEF0dHI+KCpub2RlKTsKICAgICAgICAgdmFsdWUtPnNldE5hbWUoYXR0cmli
dXRlLm5hbWUoKSk7CiAgICAgICAgIHZhbHVlLT5zZXRWYWx1ZShhdHRyaWJ1dGUudmFsdWUoKSk7
CkBAIC0xNTIyLDcgKzE1MjIsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OgogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlz
PEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7
CiAgICAgICAgICAgICAgICAgc3VwcG9ydHNGb2N1c2VkID0gZG93bmNhc3Q8RWxlbWVudD4oKm5v
ZGUpLmlzRm9jdXNhYmxlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzRm9jdXNlZCkK
ICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZCA9IGF4T2JqZWN0LT5pc0ZvY3VzZWQoKTsKQEAg
LTE3MjAsNyArMTcyMCw4IEBAIHVuc2lnbmVkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckNoaWxk
Tm9kZUNvdW50KE5vZGUqIG5vZGUpCiAKIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBh
cmVudE5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KG5vZGUpKQorICAg
IEFTU0VSVChub2RlKTsKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0
dXJuIGRvd25jYXN0PERvY3VtZW50Pigqbm9kZSkub3duZXJFbGVtZW50KCk7CiAgICAgcmV0dXJu
IG5vZGUtPnBhcmVudE5vZGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5kZXggMDMzYWFjODNlMDczOTljYjJmOTAwNjI1
MjNlNmMwNDU3NmM5ZmI2YS4uMWMwNWJiZmFkZWI2NGJjM2E1NTc4YzQ4ZDIzYzM3NjVlYTBiMWUy
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6
c2hvd0NvbnRleHRNZW51KEV2ZW50KiBldmVudCwgY29uc3QgVmVjdG9yPENvbnRleHRNZQogdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpc3BhdGNoRXZlbnRBc0NvbnRleHRNZW51RXZlbnQo
RXZlbnQqIGV2ZW50KQogewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKSAmJiBVU0UoQUNDRVNT
SUJJTElUWV9DT05URVhUX01FTlVTKQotICAgIGlmICghZXZlbnQgfHwgIWlzPE1vdXNlRXZlbnQ+
KGV2ZW50KSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgRnJhbWUqIGZyYW1lID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKS0+ZG9jdW1l
bnQoKS5mcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCA4ZTk0N2NhNThkMmJiYTNjZmE2OTkyMzJhYWJj
N2FjNWY0Mjc5OTAzLi4zMGI1YTIwYjljNGQ4ZjJkOTMwNzBmNDdjMWI5NmI0Y2JhYzEyZGVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmNwcApAQCAtMTAwLDggKzEwMCw4IEBAIGludCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnNfZnJvbnRlbmRDb3VudGVyID0gMDsKIHN0YXRpYyBGcmFtZSogZnJhbWVGb3JTY3JpcHRF
eGVjdXRpb25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gbnVsbHB0cjsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKQot
ICAgICAgICBmcmFtZSA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS0+ZnJhbWUoKTsKKyAg
ICBpZiAoaXM8RG9jdW1lbnQ+KCpjb250ZXh0KSkKKyAgICAgICAgZnJhbWUgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpLmZyYW1lKCk7CiAgICAgcmV0dXJuIGZyYW1lOwogfQogCkBAIC0x
MjYyLDcgKzEyNjIsOCBAQCBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JXb3JrZXJHbG9iYQogCiBJbnN0cnVtZW50aW5n
QWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JO
b25Eb2N1bWVudENvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpKQorICAgIEFTU0VSVChjb250ZXh0
KTsKKyAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KSkKICAgICAgICAgcmV0
dXJuIGluc3RydW1lbnRhdGlvbkZvcldvcmtlckdsb2JhbFNjb3BlKGRvd25jYXN0PFdvcmtlckds
b2JhbFNjb3BlPihjb250ZXh0KSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKaW5kZXgg
YjllMGNlNWYwODE5ODNlNTY3ZWUxYjg2YmYxMGJjZDgxM2MxMGNlYS4uODAwM2M1NDUzMmMxOWU5
NjUyMDY2OWRhNmI3MzY0MzNjMDBlNmU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMjA2Miw3ICsyMDYyLDcgQEAg
aW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5z
dHJ1bWVudGluZ0FnZW50c0ZvckNvbnQKIHsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpCisgICAgaWYgKGlz
PERvY3VtZW50PigqY29udGV4dCkpCiAgICAgICAgIHJldHVybiBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yUGFnZShkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCktPnBhZ2UoKSk7CiAgICAgcmV0dXJu
IGluc3RydW1lbnRpbmdBZ2VudHNGb3JOb25Eb2N1bWVudENvbnRleHQoY29udGV4dCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTm9kZUZpbmRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTm9kZUZpbmRlci5jcHAKaW5k
ZXggZTRjMGYxZTFhNzBhYjIzNDNjZTM0ZGJjNjhiZDAyM2I0MTliODQ4NC4uMGU2MDI4YWIwMTQ0
ODk0YzMxZmRkMjkxNjIxZjYzNWUyN2ViMjlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck5vZGVGaW5kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JOb2RlRmluZGVyLmNwcApAQCAtODksNyArODksNyBAQCB2b2lkIElu
c3BlY3Rvck5vZGVGaW5kZXI6OnNlYXJjaFVzaW5nRE9NVHJlZVRyYXZlcnNhbChOb2RlKiBwYXJl
bnROb2RlKQogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hZGQobm9kZSk7CiAKICAgICAgICAg
ICAgIC8vIFNlYXJjaCBpbnNpZGUgZnJhbWUgZWxlbWVudHMuCi0gICAgICAgICAgICBpZiAoaXM8
SFRNTEZyYW1lT3duZXJFbGVtZW50Pihub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxG
cmFtZU93bmVyRWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgICAgICAgICAgSFRNTEZyYW1lT3du
ZXJFbGVtZW50JiBmcmFtZU93bmVyID0gZG93bmNhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Pigq
bm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lT3du
ZXIuY29udGVudERvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1TZWFyY2go
ZG9jdW1lbnQpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgSW5zcGVjdG9yTm9kZUZpbmRlcjo6
c2VhcmNoVXNpbmdYUGF0aChOb2RlKiBwYXJlbnROb2RlKQogICAgICAgICBpZiAoZWMpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKGlzPEF0dHI+KG5vZGUpKQorICAgICAgICBp
ZiAoaXM8QXR0cj4oKm5vZGUpKQogICAgICAgICAgICAgbm9kZSA9IGRvd25jYXN0PEF0dHI+KCpu
b2RlKS5vd25lckVsZW1lbnQoKTsKIAogICAgICAgICAvLyBYUGF0aCBjYW4gZ2V0IG91dCBvZiB0
aGUgY29udGV4dCBub2RlIHRoYXQgd2UgcGFzcyBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gZXZh
bHVhdGUsIHNvIHdlIG5lZWQgdG8gZmlsdGVyIGZvciBqdXN0IHRoZSBub2RlcyB3ZSBjYXJlIGFi
b3V0LgpAQCAtMTU3LDcgKzE1Nyw4IEBAIHZvaWQgSW5zcGVjdG9yTm9kZUZpbmRlcjo6c2VhcmNo
VXNpbmdYUGF0aChOb2RlKiBwYXJlbnROb2RlKQogCiB2b2lkIEluc3BlY3Rvck5vZGVGaW5kZXI6
OnNlYXJjaFVzaW5nQ1NTU2VsZWN0b3JzKE5vZGUqIHBhcmVudE5vZGUpCiB7Ci0gICAgaWYgKCFp
czxDb250YWluZXJOb2RlPihwYXJlbnROb2RlKSkKKyAgICBBU1NFUlQocGFyZW50Tm9kZSk7Cisg
ICAgaWYgKCFpczxDb250YWluZXJOb2RlPigqcGFyZW50Tm9kZSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuY3BwCmluZGV4IDZlNjVhODEwYTk4ZGFkYzE2OGZkZTRhYmViNjI5
ZjQ1ODYxMzE1ODQuLmU2ZjIxYmJjYTM1YjQyYTM5NWYzOTc4MjFhNGRjYzdlZmExOTZmNDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTY3
Niw3ICs2NzYsOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2Jq
ZWN0Rm9yU2hhcGVPdXRzaWRlKEZyYW1lKiBjb250YWluaW5nRgogCiBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8oTm9kZSogbm9kZSkK
IHsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpIHx8ICFub2RlLT5kb2N1bWVudCgpLmZyYW1l
KCkpCisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpIHx8ICFu
b2RlLT5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZWxlbWVudEluZm8gPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwCmluZGV4IGViNzAwZjlmZGY2MWVhMmE2MTgzZTJhMTBiZGVlYzZkNzI1MmYzYzMuLjVi
N2ZhNmUzNzM0N2EzYTE5YTY5OTJjZWQxMzVjMDgzNjBmZjUzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTEzODgsNyArMTM4
OCw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5saW5lU3R5bGVTaGVldFRleHQoU3Ry
aW5nKiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIG93
bmVyTm9kZSA9IG1fcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpOwotICAgIGlmICghb3duZXJO
b2RlIHx8ICFpczxFbGVtZW50Pihvd25lck5vZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4ob3du
ZXJOb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEVsZW1lbnQmIG93bmVyRWxlbWVu
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpvd25lck5vZGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRleCBhOTdmZDg0YTU0ZWU4MDViNmFkZTFmMDYyZjRjNDk5
ZWUyZTA3NjM2Li40MjM0M2IyY2M1YjcxYzRlMzUyYzgwNjQ4M2Y1Njg1ZjYzZDNhMjhhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKQEAgLTE0NCw3ICsxNDQsNyBA
QCBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKEhUTUxG
b3JtRWxlbWVudCogZm9ybSwgY29uc3QgQQogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIHN1
Ym1pdEJ1dHRvbiA9IDA7CiAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LT50YXJnZXQoKSkgewogICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOyBub2RlOyBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgICAgICBzdWJtaXRCdXR0b24gPSBkb3du
Y2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2RlKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4
IDg5NDZjZmVlNzg2ZTZlMWZiYjZkY2I5MDIzMDQyY2QzNmZiMWUxNTMuLjI0ZGQyOGFlNGEwMzFm
YzM1N2JlNDMzYjQzZWNlNmUyMTYzMzhkNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcApAQCAtMTAzMyw3ICsxMDMzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c2V0T3BlbmVy
KEZyYW1lKiBvcGVuZXIpCiB2b2lkIEZyYW1lTG9hZGVyOjpoYW5kbGVGYWxsYmFja0NvbnRlbnQo
KQogewogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBtX2ZyYW1lLm93bmVyRWxl
bWVudCgpOwotICAgIGlmICghb3duZXIgfHwgIWlzPEhUTUxPYmplY3RFbGVtZW50Pihvd25lcikp
CisgICAgaWYgKCFpczxIVE1MT2JqZWN0RWxlbWVudD4ob3duZXIpKQogICAgICAgICByZXR1cm47
CiAgICAgZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KCpvd25lcikucmVuZGVyRmFsbGJhY2tD
b250ZW50KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVM
b2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAppbmRl
eCA3M2JjNTJiODAyOWVjOTE5YTJhNjJhYjllZDA1OGU1OWI3OWZkNzc4Li43ZWU1NDhmZDNjOWQ1
M2YxM2YwNGIzM2IyNTAzMjE3YTY0MDFjODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJm
cmFtZUxvYWRlci5jcHAKQEAgLTM5Myw3ICszOTMsNyBAQCBib29sIFN1YmZyYW1lTG9hZGVyOjps
b2FkUGx1Z2luKEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQsIGNvbnN0IFVS
TAogICAgIHBsdWdpbkVsZW1lbnQuc3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKHVybCk7
CiAKICAgICBJbnRTaXplIGNvbnRlbnRTaXplID0gcm91bmRlZEludFNpemUoTGF5b3V0U2l6ZShy
ZW5kZXJlci0+Y29udGVudFdpZHRoKCksIHJlbmRlcmVyLT5jb250ZW50SGVpZ2h0KCkpKTsKLSAg
ICBib29sIGxvYWRNYW51YWxseSA9IGlzPFBsdWdpbkRvY3VtZW50Pihkb2N1bWVudCgpKSAmJiAh
bV9jb250YWluc1BsdWdpbnMgJiYgZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KCpkb2N1bWVudCgp
KS5zaG91bGRMb2FkUGx1Z2luTWFudWFsbHkoKTsKKyAgICBib29sIGxvYWRNYW51YWxseSA9IGlz
PFBsdWdpbkRvY3VtZW50PigqZG9jdW1lbnQoKSkgJiYgIW1fY29udGFpbnNQbHVnaW5zICYmIGRv
d25jYXN0PFBsdWdpbkRvY3VtZW50PigqZG9jdW1lbnQoKSkuc2hvdWxkTG9hZFBsdWdpbk1hbnVh
bGx5KCk7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gT24gaU9TLCB3ZSBvbmx5IHRlbGwg
dGhlIHBsdWdpbiB0byBiZSBpbiBmdWxsIHBhZ2UgbW9kZSBpZiB0aGUgY29udGFpbmluZyBwbHVn
aW4gZG9jdW1lbnQgaXMgdGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcAppbmRleCBkYTY1MGM0ZDBjNjJiYTljOTUwNzhkZDdm
OTNkZDgwN2JhMGRiOWE2Li5hODUwNTUyNzFjZWI5MTYyZmUyMDM0NGI2OGIwMWNlM2VjOTg0MDc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuY3BwCkBAIC01Niw3
ICs1Niw3IEBAIFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gVGhyZWFkYWJsZUxvYWRlcjo6
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvCiAgICAgQVNTRVJUKGNsaWVudCk7CiAg
ICAgQVNTRVJUKGNvbnRleHQpOwogCi0gICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPihjb250
ZXh0KSkKKyAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KSkKICAgICAgICAg
cmV0dXJuIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShkb3duY2FzdDxXb3JrZXJHbG9i
YWxTY29wZT4oY29udGV4dCksIGNsaWVudCwgV29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUoKSwg
cmVxdWVzdCwgb3B0aW9ucyk7CiAKICAgICByZXR1cm4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjpjcmVhdGUoZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KSwgKmNsaWVudCwgcmVxdWVzdCwg
b3B0aW9ucyk7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiB7CiAg
ICAgQVNTRVJUKGNvbnRleHQpOwogCi0gICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPihjb250
ZXh0KSkKKyAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KSkKICAgICAgICAg
V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShkb3duY2Fz
dDxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCksIHJlcXVlc3QsIGNsaWVudCwgb3B0aW9ucyk7
CiAgICAgZWxzZQogICAgICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KSwgcmVxdWVzdCwgY2xp
ZW50LCBvcHRpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9N
ZW1vcnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
Y3BwCmluZGV4IDJlODc4MDk1ZjI3MWIxYzAyZTM5YTQ2MDE5NTJhN2Y1ZmIxYTEyZGMuLmNjOTRi
ZTk2ZDVmNjU4OGRjNDNkNThhMjFjYjFiNDIyOTA4Y2RjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcApAQCAtNzUyLDcgKzc1Miw4IEBAIHZvaWQgTWVt
b3J5Q2FjaGU6OnJlbW92ZVVybEZyb21DYWNoZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpCiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tQ2Fj
aGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChpczxXb3JrZXJHbG9i
YWxTY29wZT4oY29udGV4dCkpIHsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgaWYgKGlzPFdv
cmtlckdsb2JhbFNjb3BlPigqY29udGV4dCkpIHsKICAgICAgICAgZG93bmNhc3Q8V29ya2VyR2xv
YmFsU2NvcGU+KCpjb250ZXh0KS50aHJlYWQoKS53b3JrZXJMb2FkZXJQcm94eSgpLnBvc3RUYXNr
VG9Mb2FkZXIoQ3Jvc3NUaHJlYWRUYXNrKCZjcm9zc1RocmVhZFJlbW92ZVJlcXVlc3RGcm9tQ2Fj
aGUsIHJlcXVlc3QsIHNlc3Npb25JRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzY4
LDcgKzc2OSw4IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tQ2FjaGVJbXBs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBSZXNvCiAKIHZvaWQgTWVtb3J5Q2FjaGU6
OnJlbW92ZVJlcXVlc3RGcm9tU2Vzc2lvbkNhY2hlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgaWYgKGlzPFdv
cmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSkgeworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBp
ZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KSkgewogICAgICAgICBkb3duY2FzdDxX
b3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQpLnRocmVhZCgpLndvcmtlckxvYWRlclByb3h5KCku
cG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVhZFRhc2soJmNyb3NzVGhyZWFkUmVtb3ZlUmVxdWVz
dEZyb21TZXNzaW9uQ2FjaGVzLCByZXF1ZXN0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAKaW5kZXggOTY3YmE1NTBlOThmNGEz
NTc0YjQ0NDAzN2ZkN2FlYzdiYzM2ZGMzZC4uMDNhMTkwNjgwZjM3YWZmODAzOGNmMDEzMzU2YzIz
ZDI4NDA4MjNkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcApAQCAt
Mjk0LDcgKzI5NCw3IEBAIHZvaWQgTWF0aE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpCiB7CiAgICAgaWYgKGlzU2Vt
YW50aWNBbm5vdGF0aW9uKCkgJiYgKG5hbWUgPT0gTWF0aE1MTmFtZXM6OnNyY0F0dHIgfHwgbmFt
ZSA9PSBNYXRoTUxOYW1lczo6ZW5jb2RpbmdBdHRyKSkgewogICAgICAgICBFbGVtZW50KiBwYXJl
bnQgPSBwYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYgaXM8TWF0aE1MRWxl
bWVudD4ocGFyZW50KSAmJiBwYXJlbnQtPmhhc1RhZ05hbWUoc2VtYW50aWNzVGFnKSkKKyAgICAg
ICAgaWYgKGlzPE1hdGhNTEVsZW1lbnQ+KHBhcmVudCkgJiYgcGFyZW50LT5oYXNUYWdOYW1lKHNl
bWFudGljc1RhZykpCiAgICAgICAgICAgICBkb3duY2FzdDxNYXRoTUxFbGVtZW50PigqcGFyZW50
KS51cGRhdGVTZWxlY3RlZENoaWxkKCk7CiAgICAgfQogICAgIFN0eWxlZEVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCByZWFzb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFNlbGVjdEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvbWF0aG1sL01hdGhNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4IDI0N2Y5YzIzMDMz
NzY4YmFlZjZhMThjODE4OGRiODA3MDBmZDg5NDAuLjVmZmE4NWNiYWM4Njc1ZDZkMzUxNmZkM2Ni
M2M0M2VhYWQ4NmU5OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxT
ZWxlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MU2VsZWN0
RWxlbWVudC5jcHAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBFbGVtZW50KiBNYXRoTUxTZWxlY3RFbGVt
ZW50OjpnZXRTZWxlY3RlZFNlbWFudGljc0NoaWxkKCkKICAgICBpZiAoIWNoaWxkKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghaXM8TWF0aE1MRWxlbWVudD4oY2hpbGQpIHx8
ICFkb3duY2FzdDxNYXRoTUxFbGVtZW50PigqY2hpbGQpLmlzUHJlc2VudGF0aW9uTWF0aE1MKCkp
IHsKKyAgICBpZiAoIWlzPE1hdGhNTEVsZW1lbnQ+KCpjaGlsZCkgfHwgIWRvd25jYXN0PE1hdGhN
TEVsZW1lbnQ+KCpjaGlsZCkuaXNQcmVzZW50YXRpb25NYXRoTUwoKSkgewogICAgICAgICAvLyBU
aGUgZmlyc3QgY2hpbGQgaXMgbm90IGEgcHJlc2VudGF0aW9uIE1hdGhNTCBlbGVtZW50LiBIZW5j
ZSB3ZSBtb3ZlIHRvIHRoZSBzZWNvbmQgY2hpbGQgYW5kIHN0YXJ0IHNlYXJjaGluZyBhbiBhbm5v
dGF0aW9uIGNoaWxkIHRoYXQgY291bGQgYmUgZGlzcGxheWVkLgogICAgICAgICBjaGlsZCA9IGNo
aWxkLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKICAgICB9IGVsc2UgaWYgKCFkb3duY2FzdDxNYXRo
TUxFbGVtZW50PigqY2hpbGQpLmlzU2VtYW50aWNBbm5vdGF0aW9uKCkpIHsKQEAgLTE2Nyw3ICsx
NjcsNyBAQCBFbGVtZW50KiBNYXRoTUxTZWxlY3RFbGVtZW50OjpnZXRTZWxlY3RlZFNlbWFudGlj
c0NoaWxkKCkKICAgICAvLyBPdGhlcndpc2UsIHRoZSBmaXJzdCBjaGlsZCBpcyBhbiA8YW5ub3Rh
dGlvbj4gb3IgPGFubm90YXRpb24teG1sPiBlbGVtZW50LiBUaGlzIGlzIGludmFsaWQsIGJ1dCBz
b21lIHBlb3BsZSB1c2UgdGhpcyBzeW50YXggc28gd2UgdGFrZSBjYXJlIG9mIHRoaXMgY2FzZSB0
b28gYW5kIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSB0aGlzIGZpcnN0IGNoaWxkLgogCiAgICAgZm9y
ICggOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKLSAgICAg
ICAgaWYgKCFpczxNYXRoTUxFbGVtZW50PihjaGlsZCkpCisgICAgICAgIGlmICghaXM8TWF0aE1M
RWxlbWVudD4oKmNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChj
aGlsZC0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6YW5ub3RhdGlvblRhZykpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmNwcAppbmRleCBiYTNiNzc5YTNiMmY1N2ZkYTI2ZDZmZjBiMWYyNjMzOWU1OTRhZDVl
Li45ZmEyYjJlYjc0NTMwMzY4YzA1MGRiZjBmNjEwYTcwN2ZjZTg4ZGQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwCkBAIC00MDgsNyArNDA4LDcgQEAgdm9pZCBDaHJvbWU6OnNldFRvb2xUaXAoY29u
c3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogICAgIGlmICh0b29sVGlwLmlzRW1wdHkoKSAmJiBt
X3BhZ2Uuc2V0dGluZ3MoKS5zaG93c1VSTHNJblRvb2xUaXBzKCkpIHsKICAgICAgICAgaWYgKEVs
ZW1lbnQqIGVsZW1lbnQgPSByZXN1bHQuaW5uZXJOb25TaGFyZWRFbGVtZW50KCkpIHsKICAgICAg
ICAgICAgIC8vIEdldCB0b29sdGlwIHJlcHJlc2VudGluZyBmb3JtIGFjdGlvbiwgaWYgcmVsZXZh
bnQKLSAgICAgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkgeworICAg
ICAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAg
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dC5pc1N1Ym1pdEJ1dHRvbigp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBpbnB1
dC5mb3JtKCkpIHsKQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIENocm9tZTo6c2V0VG9vbFRpcChj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiAgICAgLy8gTGFzdGx5LCBmb3IgPGlucHV0IHR5
cGU9ImZpbGUiPiB0aGF0IGFsbG93IG11bHRpcGxlIGZpbGVzLCB3ZSdsbCBjb25zaWRlciBhIHRv
b2x0aXAgZm9yIHRoZSBzZWxlY3RlZCBmaWxlbmFtZXMKICAgICBpZiAodG9vbFRpcC5pc0VtcHR5
KCkpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZXN1bHQuaW5uZXJOb25TaGFy
ZWRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihlbGVt
ZW50KSkgeworICAgICAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSkg
ewogICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
ZWxlbWVudCkuZGVmYXVsdFRvb2xUaXAoKTsKIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgb2J0YWluIHRleHQgZGlyZWN0aW9uIG9mIHRvb2x0aXAgZnJvbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDc2ZTg4MWNlMjhl
YmU3ZWM3MmQ3YzIyMGUyZDAxNGQ3NzE4ZjU4ZmYuLjE5NGY0NGQ2OGExZmI2MzVkMzAxMTMzZDdi
YjQzYmZhYjU3OTc5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29u
dHJvbGxlci5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q29udGV4dE1l
bnU+IENvbnRleHRNZW51Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVDb250ZXh0TWVudShFdmVudAog
ewogICAgIEFTU0VSVChldmVudCk7CiAgICAgCi0gICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVu
dCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50PigqZXZlbnQpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50
PigqZXZlbnQpOwpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVy
Ojpwb3B1bGF0ZSgpCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAjaWYgUExBVEZP
Uk0oR1RLKQotICAgIGlmICghbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pc0NvbnRlbnRFZGl0
YWJsZSgpICYmIGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghbV9j
b250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIGlzPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgRnJh
bWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01UaW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVy
LmNwcAppbmRleCBhZWM5MDE4NTZjOWFkYTY2YTU4YjBkNGRmMjljYzA4NzE5NTRhM2MyLi4zNGI1
YzM1ZjkxNTkwMTliMjE3M2MxNWJiNWEwMjYwYjVlNTRmMDg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRp
bWVyLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIGludCBET01UaW1lcjo6aW5zdGFsbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkCiAgICAg
Ly8gaXMgZGVzdHJveWVkLCBvciBpZiBleHBsaWNpdGx5IGNhbmNlbGxlZCBieSByZW1vdmVCeUlk
LiAKICAgICBET01UaW1lciogdGltZXIgPSBuZXcgRE9NVGltZXIoY29udGV4dCwgV1RGOjptb3Zl
KGFjdGlvbiksIHRpbWVvdXQsIHNpbmdsZVNob3QpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICBp
ZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CisgICAgaWYgKGlzPERvY3VtZW50PigqY29udGV4
dCkpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKICAgICAgICAgYm9vbCBkaWREZWZlclRpbWVvdXQgPSBkb2N1bWVudC5mcmFtZSgp
ICYmIGRvY3VtZW50LmZyYW1lKCktPnRpbWVyc1BhdXNlZCgpOwogICAgICAgICBpZiAoIWRpZERl
ZmVyVGltZW91dCAmJiB0aW1lb3V0IDw9IDEwMCAmJiBzaW5nbGVTaG90KSB7CkBAIC0xNzMsNyAr
MTczLDcgQEAgdm9pZCBET01UaW1lcjo6ZmlyZWQoKQogCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG51bGxwdHI7Ci0gICAgaWYgKGlzPERvY3VtZW50Pihjb250
ZXh0KSkgeworICAgIGlmIChpczxEb2N1bWVudD4oKmNvbnRleHQpKSB7CiAgICAgICAgIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwogICAgICAgICBBU1NFUlQoIWRvY3Vt
ZW50LT5mcmFtZSgpLT50aW1lcnNQYXVzZWQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAppbmRleCA0YTc0MzBiMDVkYzJiYWU0ZjU4MGVjNmU1NjBjMTRhNjdj
NjM4NmY2Li5mYjRlM2U1NzhlZDQ0MWU3YmEwODAwNmI4YjQ4YmFhOWQ0ZmQ3MWFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMjkwLDcgKzI5MCw3IEBAIHN0YXRp
YyBFbGVtZW50KiBlbGVtZW50VW5kZXJNb3VzZShEb2N1bWVudCogZG9jdW1lbnRVbmRlck1vdXNl
LCBjb25zdCBJbnRQb2ludCYKICAgICBkb2N1bWVudFVuZGVyTW91c2UtPnJlbmRlclZpZXcoKS0+
aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCByZXN1bHQpOwogCiAgICAgTm9kZSogbm9kZSA9IHJl
c3VsdC5pbm5lck5vZGUoKTsKLSAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4obm9kZSkp
CisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgbm9kZSA9
IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpZiAobm9kZSkKICAgICAgICAgbm9kZSA9IG5vZGUt
PmRlcHJlY2F0ZWRTaGFkb3dBbmNlc3Rvck5vZGUoKTsKQEAgLTM5Nyw3ICszOTcsNyBAQCBEcmFn
T3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKERyYWdEYXRhJiBkcmFn
RGF0YSkKIAogICAgIGJvb2wgcGx1Z2luRG9jdW1lbnRBY2NlcHRzRHJhZ3MgPSBmYWxzZTsKIAot
ICAgIGlmIChkb2MgJiYgaXM8UGx1Z2luRG9jdW1lbnQ+KGRvYykpIHsKKyAgICBpZiAoaXM8UGx1
Z2luRG9jdW1lbnQ+KGRvYykpIHsKICAgICAgICAgY29uc3QgV2lkZ2V0KiB3aWRnZXQgPSBkb3du
Y2FzdDxQbHVnaW5Eb2N1bWVudD4oKmRvYykucGx1Z2luV2lkZ2V0KCk7CiAgICAgICAgIGNvbnN0
IFBsdWdpblZpZXdCYXNlKiBwbHVnaW5WaWV3ID0gKHdpZGdldCAmJiB3aWRnZXQtPmlzUGx1Z2lu
Vmlld0Jhc2UoKSkgPyB0b1BsdWdpblZpZXdCYXNlKHdpZGdldCkgOiBudWxscHRyOwogCkBAIC01
NTIsNyArNTUyLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y2FuUHJvY2Vzc0RyYWcoRHJhZ0Rh
dGEmIGRyYWdEYXRhKQogICAgIGlmIChkcmFnRGF0YS5jb250YWluc0ZpbGVzKCkgJiYgYXNGaWxl
SW5wdXQocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBpZiAoaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KHJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKSkpIHsKKyAgICBpZiAoaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KCpyZXN1bHQuaW5uZXJOb25T
aGFyZWROb2RlKCkpKSB7CiAgICAgICAgIGlmICghZG93bmNhc3Q8SFRNTFBsdWdJbkVsZW1lbnQ+
KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSktPmNhblByb2Nlc3NEcmFnKCkgJiYgIXJlc3Vs
dC5pbm5lck5vblNoYXJlZE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUo
KS0+aGFzRWRpdGFibGVTdHlsZSgpKQpAQCAtNjM5LDEzICs2MzksMTMgQEAgRWxlbWVudCogRHJh
Z0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBF
bGVtZW50KiBzdGEKICAgICAgICAgfQogICAgICAgICBpZiAoZHJhZ01vZGUgPT0gRFJBR19BVVRP
KSB7CiAgICAgICAgICAgICBpZiAoKG1fZHJhZ1NvdXJjZUFjdGlvbiAmIERyYWdTb3VyY2VBY3Rp
b25JbWFnZSkKLSAgICAgICAgICAgICAgICAmJiBpczxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50
KQorICAgICAgICAgICAgICAgICYmIGlzPEhUTUxJbWFnZUVsZW1lbnQ+KCplbGVtZW50KQogICAg
ICAgICAgICAgICAgICYmIHNvdXJjZUZyYW1lLT5zZXR0aW5ncygpLmxvYWRzSW1hZ2VzQXV0b21h
dGljYWxseSgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGUudHlwZSA9IHN0YXRpY19jYXN0PERy
YWdTb3VyY2VBY3Rpb24+KHN0YXRlLnR5cGUgfCBEcmFnU291cmNlQWN0aW9uSW1hZ2UpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKChtX2RyYWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uTGluaykKLSAgICAgICAg
ICAgICAgICAmJiBpczxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkKKyAgICAgICAgICAgICAg
ICAmJiBpczxIVE1MQW5jaG9yRWxlbWVudD4oKmVsZW1lbnQpCiAgICAgICAgICAgICAgICAgJiYg
ZG93bmNhc3Q8SFRNTEFuY2hvckVsZW1lbnQ+KCplbGVtZW50KS5pc0xpdmVMaW5rKCkpIHsKICAg
ICAgICAgICAgICAgICBzdGF0ZS50eXBlID0gc3RhdGljX2Nhc3Q8RHJhZ1NvdXJjZUFjdGlvbj4o
c3RhdGUudHlwZSB8IERyYWdTb3VyY2VBY3Rpb25MaW5rKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAzOGNmYTcy
OWViYTNlNWNhZjUyYjg1ZjA0ZGVlY2VmYzc4N2U5NWJmLi5mZTBkZDJhMWFmY2ExNzRlMzhlY2Ex
NzYzZjU5MTAxODhmNmRiNmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBA
IC03NTksNyArNzU5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmUKICAgICBpZiAoZXZlbnQu
aXNPdmVyV2lkZ2V0KCkgJiYgcGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoZXZlbnQp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpczxTVkdEb2N1bWVudD4obV9mcmFt
ZS5kb2N1bWVudCgpKSAmJiBkb3duY2FzdDxTVkdEb2N1bWVudD4oKm1fZnJhbWUuZG9jdW1lbnQo
KSkuem9vbUFuZFBhbkVuYWJsZWQoKSkgeworICAgIGlmIChpczxTVkdEb2N1bWVudD4oKm1fZnJh
bWUuZG9jdW1lbnQoKSkgJiYgZG93bmNhc3Q8U1ZHRG9jdW1lbnQ+KCptX2ZyYW1lLmRvY3VtZW50
KCkpLnpvb21BbmRQYW5FbmFibGVkKCkpIHsKICAgICAgICAgaWYgKGV2ZW50LmV2ZW50KCkuc2hp
ZnRLZXkoKSAmJiBzaW5nbGVDbGljaykgewogICAgICAgICAgICAgbV9zdmdQYW4gPSB0cnVlOwog
ICAgICAgICAgICAgZG93bmNhc3Q8U1ZHRG9jdW1lbnQ+KCptX2ZyYW1lLmRvY3VtZW50KCkpLnN0
YXJ0UGFuKG1fZnJhbWUudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LmV2ZW50KCkucG9z
aXRpb24oKSkpOwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAgRnJhbWUqIEV2ZW50SGFuZGxlcjo6c3Vi
ZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCiAjaWYgRU5BQkxFKENVUlNPUl9TVVBQT1JU
KQogc3RhdGljIGJvb2wgaXNTdWJtaXRJbWFnZShOb2RlKiBub2RlKQogewotICAgIHJldHVybiBu
b2RlICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCpub2RlKS5pc0ltYWdlQnV0dG9uKCk7CisgICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKS5pc0ltYWdl
QnV0dG9uKCk7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbm9kZSdzIGVkaXRhYmxlIGJs
b2NrIGlzIG5vdCBjdXJyZW50IGZvY3VzZWQgZm9yIGVkaXRpbmcKQEAgLTE3NjAsNyArMTc2MCw3
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybU1vdXNlCiAgICAgICAgIC8vIElmIGEgbW91c2UgZXZlbnQg
aGFuZGxlciBjaGFuZ2VzIHRoZSBpbnB1dCBlbGVtZW50IHR5cGUgdG8gb25lIHRoYXQgaGFzIGEg
d2lkZ2V0IGFzc29jaWF0ZWQsCiAgICAgICAgIC8vIHdlJ2QgbGlrZSB0byBFdmVudEhhbmRsZXI6
OmhhbmRsZU1vdXNlUHJlc3NFdmVudCB0byBwYXNzIHRoZSBldmVudCB0byB0aGUgd2lkZ2V0IGFu
ZCB0aHVzIHRoZQogICAgICAgICAvLyBldmVudCB0YXJnZXQgbm9kZSBjYW4ndCBzdGlsbCBiZSB0
aGUgc2hhZG93IG5vZGUuCi0gICAgICAgIGlmIChpczxTaGFkb3dSb290Pihtb3VzZUV2ZW50LnRh
cmdldE5vZGUoKSkgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oZG93bmNhc3Q8U2hhZG93Um9vdD4o
Km1vdXNlRXZlbnQudGFyZ2V0Tm9kZSgpKS5ob3N0RWxlbWVudCgpKSkKKyAgICAgICAgaWYgKGlz
PFNoYWRvd1Jvb3Q+KCptb3VzZUV2ZW50LnRhcmdldE5vZGUoKSkgJiYgaXM8SFRNTElucHV0RWxl
bWVudD4oKmRvd25jYXN0PFNoYWRvd1Jvb3Q+KCptb3VzZUV2ZW50LnRhcmdldE5vZGUoKSkuaG9z
dEVsZW1lbnQoKSkpCiAgICAgICAgICAgICBtb3VzZUV2ZW50ID0gbV9mcmFtZS5kb2N1bWVudCgp
LT5wcmVwYXJlTW91c2VFdmVudChIaXRUZXN0UmVxdWVzdCgpLCBkb2N1bWVudFBvaW50LCBwbGF0
Zm9ybU1vdXNlRXZlbnQpOwogCiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmll
dygpOwpAQCAtMjE0MSw3ICsyMTQxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRHJh
Z0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFbGVtZW50JiBkcmEKIAogc3Rh
dGljIGJvb2wgdGFyZ2V0SXNGcmFtZShOb2RlKiB0YXJnZXQsIEZyYW1lKiYgZnJhbWUpCiB7Ci0g
ICAgaWYgKCF0YXJnZXQgfHwgIWlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPih0YXJnZXQpKQorICAg
IGlmICghaXM8SFRNTEZyYW1lRWxlbWVudEJhc2U+KHRhcmdldCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGZyYW1lID0gZG93bmNhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2U+KCp0YXJn
ZXQpLmNvbnRlbnRGcmFtZSgpOwpAQCAtMjE4Niw3ICsyMTg2LDggQEAgc3RhdGljIGJvb2wgaGFz
RHJvcFpvbmVUeXBlKERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyLCBjb25zdCBTdHJpbmcmIGtl
eXdvcmQpCiAKIHN0YXRpYyBib29sIGZpbmREcm9wWm9uZShOb2RlKiB0YXJnZXQsIERhdGFUcmFu
c2ZlciogZGF0YVRyYW5zZmVyKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50
Pih0YXJnZXQpID8gZG93bmNhc3Q8RWxlbWVudD4odGFyZ2V0KSA6IHRhcmdldC0+cGFyZW50RWxl
bWVudCgpOworICAgIEFTU0VSVCh0YXJnZXQpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxF
bGVtZW50PigqdGFyZ2V0KSA/IGRvd25jYXN0PEVsZW1lbnQ+KHRhcmdldCkgOiB0YXJnZXQtPnBh
cmVudEVsZW1lbnQoKTsKICAgICBmb3IgKDsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKSkgewogICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKICAgICAgICAg
U3RyaW5nIGRyb3Bab25lU3RyID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZSh3ZWJraXRkcm9w
em9uZUF0dHIpOwpAQCAtMjIzMyw3ICsyMjM0LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnVwZGF0
ZURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIERhdGFUcmFuc2YK
ICAgICBSZWZQdHI8RWxlbWVudD4gbmV3VGFyZ2V0OwogICAgIGlmIChOb2RlKiB0YXJnZXROb2Rl
ID0gbW91c2VFdmVudC50YXJnZXROb2RlKCkpIHsKICAgICAgICAgLy8gRHJhZyBldmVudHMgc2hv
dWxkIG5ldmVyIGdvIHRvIG5vbi1lbGVtZW50IG5vZGVzIChmb2xsb3dpbmcgSUUsIGFuZCBwcm9w
ZXIgbW91c2VvdmVyL291dCBkaXNwYXRjaCkKLSAgICAgICAgaWYgKCFpczxFbGVtZW50Pih0YXJn
ZXROb2RlKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50PigqdGFyZ2V0Tm9kZSkpCiAgICAgICAg
ICAgICBuZXdUYXJnZXQgPSB0YXJnZXROb2RlLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5ld1RhcmdldCA9IGRvd25jYXN0PEVsZW1lbnQ+
KHRhcmdldE5vZGUpOwpAQCAtMjM5NCw3ICsyMzk1LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVw
ZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IFBsYXRmb3Jt
TW8KICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IG1fY2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50
LmdldCgpOwogICAgIGVsc2UgaWYgKHRhcmdldE5vZGUpIHsKICAgICAgICAgLy8gSWYgdGhlIHRh
cmdldCBub2RlIGlzIGEgbm9uLWVsZW1lbnQsIGRpc3BhdGNoIG9uIHRoZSBwYXJlbnQuIDxyZGFy
Oi8vcHJvYmxlbS80MTk2NjQ2PgotICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KHRhcmdldE5vZGUp
KQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCp0YXJnZXROb2RlKSkKICAgICAgICAgICAgIHRh
cmdldEVsZW1lbnQgPSB0YXJnZXROb2RlLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
Pih0YXJnZXROb2RlKTsKQEAgLTM1MjMsNyArMzUyNCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB1bmRlcmx5aW5n
RXZlCiB7CiAgICAgLy8gUGxhdGZvcm1zIHNob3VsZCBkaWZmZXJlbnRpYXRlIHJlYWwgY29tbWFu
ZHMgbGlrZSBzZWxlY3RBbGwgZnJvbSB0ZXh0IGlucHV0IGluIGRpc2d1aXNlIChsaWtlIGluc2Vy
dE5ld2xpbmUpLAogICAgIC8vIGFuZCBhdm9pZCBkaXNwYXRjaGluZyB0ZXh0IGlucHV0IGV2ZW50
cyBmcm9tIGtleWRvd24gZGVmYXVsdCBoYW5kbGVycy4KLSAgICBBU1NFUlQoIXVuZGVybHlpbmdF
dmVudCB8fCAhaXM8S2V5Ym9hcmRFdmVudD4odW5kZXJseWluZ0V2ZW50KSB8fCBkb3duY2FzdDxL
ZXlib2FyZEV2ZW50PigqdW5kZXJseWluZ0V2ZW50KS50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtl
eXByZXNzRXZlbnQpOworICAgIEFTU0VSVCghaXM8S2V5Ym9hcmRFdmVudD4odW5kZXJseWluZ0V2
ZW50KSB8fCBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqdW5kZXJseWluZ0V2ZW50KS50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOwogCiAgICAgRXZlbnRUYXJnZXQqIHRhcmdl
dDsKICAgICBpZiAodW5kZXJseWluZ0V2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCmluZGV4IDEzZTUxYzJjN2IzMzI0MDY1ZTkzMTI4OGQxMDIxYTAxMDdmZDdhMjcu
LmNhNDMyMDhkNmRjYzUyYWVmOTEwYzE2MTgzYjU3MjkzOTc1NDk5YTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgQ29udGFpbmVyTm9k
ZSogRm9jdXNOYXZpZ2F0aW9uU2NvcGU6OnJvb3ROb2RlKCkgY29uc3QKIEVsZW1lbnQqIEZvY3Vz
TmF2aWdhdGlvblNjb3BlOjpvd25lcigpIGNvbnN0CiB7CiAgICAgQ29udGFpbmVyTm9kZSogcm9v
dCA9IHJvb3ROb2RlKCk7Ci0gICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KHJvb3QpKQorICAgIGlmIChp
czxTaGFkb3dSb290Pigqcm9vdCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxTaGFkb3dSb290
Pigqcm9vdCkuaG9zdEVsZW1lbnQoKTsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gcm9vdC0+ZG9j
dW1lbnQoKS5mcmFtZSgpKQogICAgICAgICByZXR1cm4gZnJhbWUtPm93bmVyRWxlbWVudCgpOwpA
QCAtMjI4LDcgKzIyOCw3IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJs
ZUVsZW1lbnREZXNjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50KEZvCiAgICAgLy8gVGhlIG5v
ZGUgd2UgZm91bmQgbWlnaHQgYmUgYSBIVE1MRnJhbWVPd25lckVsZW1lbnQsIHNvIGRlc2NlbmQg
ZG93biB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGVpdGhlcjoKICAgICAvLyAxKSBhIGZvY3VzYWJs
ZSBub2RlLCBvcgogICAgIC8vIDIpIHRoZSBkZWVwZXN0LW5lc3RlZCBIVE1MRnJhbWVPd25lckVs
ZW1lbnQuCi0gICAgd2hpbGUgKGVsZW1lbnQgJiYgaXM8SFRNTEZyYW1lT3duZXJFbGVtZW50Pihl
bGVtZW50KSkgeworICAgIHdoaWxlIChpczxIVE1MRnJhbWVPd25lckVsZW1lbnQ+KGVsZW1lbnQp
KSB7CiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCYgb3duZXIgPSBkb3duY2FzdDxIVE1M
RnJhbWVPd25lckVsZW1lbnQ+KCplbGVtZW50KTsKICAgICAgICAgaWYgKCFvd25lci5jb250ZW50
RnJhbWUoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzUwLDcgKzM1MCw3IEBAIGJvb2wgRm9j
dXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBLZXliCiAKIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJs
ZUVsZW1lbnRBY3Jvc3NGb2N1c1Njb3BlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9jdXNO
YXZpZ2F0aW9uU2NvcGUgc2NvcGUsIE5vZGUqIGN1cnJlbnROb2RlLCBLZXlib2FyZEV2ZW50KiBl
dmVudCkKIHsKLSAgICBBU1NFUlQoIWN1cnJlbnROb2RlIHx8ICFpczxFbGVtZW50PihjdXJyZW50
Tm9kZSkgfHwgIWlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdCgqZG93bmNhc3Q8RWxlbWVudD4oY3Vy
cmVudE5vZGUpLCAqZXZlbnQpKTsKKyAgICBBU1NFUlQoIWlzPEVsZW1lbnQ+KGN1cnJlbnROb2Rl
KSB8fCAhaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KCpkb3duY2FzdDxFbGVtZW50PihjdXJyZW50
Tm9kZSksICpldmVudCkpOwogICAgIEVsZW1lbnQqIGZvdW5kOwogICAgIGlmIChjdXJyZW50Tm9k
ZSAmJiBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkICYmIGlzRm9jdXNhYmxlU2hh
ZG93SG9zdCgqY3VycmVudE5vZGUsICpldmVudCkpIHsKICAgICAgICAgRWxlbWVudCogZm91bmRJ
bklubmVyRm9jdXNTY29wZSA9IGZpbmRGb2N1c2FibGVFbGVtZW50UmVjdXJzaXZlbHkoZGlyZWN0
aW9uLCBGb2N1c05hdmlnYXRpb25TY29wZTo6Zm9jdXNOYXZpZ2F0aW9uU2NvcGVPd25lZEJ5U2hh
ZG93SG9zdChjdXJyZW50Tm9kZSksIDAsIGV2ZW50KTsKQEAgLTQxMCw3ICs0MTAsNyBAQCBFbGVt
ZW50KiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRFbGVtZW50V2l0aEV4YWN0VGFiSW5kZXgoTm9kZSog
c3RhcnQsIGludCB0YWJJbmRleAogICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNpdmUgb2Ygc3RhcnQK
ICAgICB1c2luZyBuYW1lc3BhY2UgTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlv
bkZvcndhcmQgPyBuZXh0SW5TY29wZShub2RlKSA6IHByZXZpb3VzSW5TY29wZShub2RlKSkgewot
ICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+
KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBFbGVtZW50JiBlbGVtZW50
ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAgICAgICBpZiAoc2hvdWxkVmlzaXQoZWxl
bWVudCwgKmV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KGVsZW1lbnQsICpldmVudCkgPT0gdGFi
SW5kZXgpCkBAIC00MjUsNyArNDI1LDcgQEAgc3RhdGljIEVsZW1lbnQqIG5leHRFbGVtZW50V2l0
aEdyZWF0ZXJUYWJJbmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXlib2EKICAgICBp
bnQgd2lubmluZ1RhYkluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpICsg
MTsKICAgICBFbGVtZW50KiB3aW5uZXIgPSBudWxscHRyOwogICAgIGZvciAoTm9kZSogbm9kZSA9
IHN0YXJ0OyBub2RlOyBub2RlID0gTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6bmV4dEluU2NvcGUo
bm9kZSkpIHsKLSAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKCFp
czxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRWxlbWVu
dCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgaWYgKHNob3Vs
ZFZpc2l0KGVsZW1lbnQsIGV2ZW50KSAmJiBlbGVtZW50LnRhYkluZGV4KCkgPiB0YWJJbmRleCAm
JiBlbGVtZW50LnRhYkluZGV4KCkgPCB3aW5uaW5nVGFiSW5kZXgpIHsKQEAgLTQ0Myw3ICs0NDMs
NyBAQCBzdGF0aWMgRWxlbWVudCogcHJldmlvdXNFbGVtZW50V2l0aExvd2VyVGFiSW5kZXgoTm9k
ZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5YgogICAgIGludCB3aW5uaW5nVGFiSW5kZXggPSAw
OwogICAgIEVsZW1lbnQqIHdpbm5lciA9IG51bGxwdHI7CiAgICAgZm9yIChOb2RlKiBub2RlID0g
c3RhcnQ7IG5vZGU7IG5vZGUgPSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpwcmV2aW91c0luU2Nv
cGUobm9kZSkpIHsKLSAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYg
KCFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRWxl
bWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgaW50IGN1
cnJlbnRUYWJJbmRleCA9IGFkanVzdGVkVGFiSW5kZXgoZWxlbWVudCwgZXZlbnQpOwpAQCAtNDY0
LDcgKzQ2NCw3IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6bmV4dEZvY3VzYWJsZUVsZW1l
bnQoRm9jdXNOYXZpZ2F0aW9uU2NvcGUgc2NvcGUsIE5vZGUqCiAgICAgICAgIC8vIElmIGEgbm9k
ZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBub3JtYWwgdGFiYmluZyBjeWNsZSwgdGhlIG5leHQgZm9j
dXNhYmxlIG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0cmVlIG9yZGVyCiAgICAgICAgIGlmICh0YWJJ
bmRleCA8IDApIHsKICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IG5leHRJblNjb3BlKHN0
YXJ0KTsgbm9kZTsgbm9kZSA9IG5leHRJblNjb3BlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+
KCpub2RlKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAg
ICAgICBpZiAoc2hvdWxkVmlzaXQoZWxlbWVudCwgKmV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4
KGVsZW1lbnQsICpldmVudCkgPj0gMCkKQEAgLTUxNiw3ICs1MTYsNyBAQCBFbGVtZW50KiBGb2N1
c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNhYmxlRWxlbWVudChGb2N1c05hdmlnYXRpb25TY29w
ZSBzY29wZSwgTgogICAgIC8vIEhvd2V2ZXIsIGlmIGEgbm9kZSBpcyBleGNsdWRlZCBmcm9tIHRo
ZSBub3JtYWwgdGFiYmluZyBjeWNsZSwgdGhlIHByZXZpb3VzIGZvY3VzYWJsZSBub2RlIGlzIGRl
dGVybWluZWQgYnkgdHJlZSBvcmRlcgogICAgIGlmIChzdGFydGluZ1RhYkluZGV4IDwgMCkgewog
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydGluZ05vZGU7IG5vZGU7IG5vZGUgPSBwcmV2
aW91c0luU2NvcGUobm9kZSkpIHsKLSAgICAgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkp
CisgICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
Pigqbm9kZSk7CiAgICAgICAgICAgICBpZiAoc2hvdWxkVmlzaXQoZWxlbWVudCwgKmV2ZW50KSAm
JiBhZGp1c3RlZFRhYkluZGV4KGVsZW1lbnQsICpldmVudCkgPj0gMCkKQEAgLTU3NSw3ICs1NzUs
NyBAQCBzdGF0aWMgdm9pZCBjbGVhclNlbGVjdGlvbklmTmVlZGVkKEZyYW1lKiBvbGRGb2N1c2Vk
RnJhbWUsIEZyYW1lKiBuZXdGb2N1c2VkRnJhbQogICAgICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yTm9kZSA9IHJvb3QtPmRlcHJlY2F0
ZWRTaGFkb3dBbmNlc3Rvck5vZGUoKSkgewotICAgICAgICAgICAgICAgIGlmICghaXM8SFRNTElu
cHV0RWxlbWVudD4oc2hhZG93QW5jZXN0b3JOb2RlKSAmJiAhaXM8SFRNTFRleHRBcmVhRWxlbWVu
dD4oc2hhZG93QW5jZXN0b3JOb2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEhUTUxJbnB1
dEVsZW1lbnQ+KCpzaGFkb3dBbmNlc3Rvck5vZGUpICYmICFpczxIVE1MVGV4dEFyZWFFbGVtZW50
Pigqc2hhZG93QW5jZXN0b3JOb2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC04NzYsNyArODc2LDcgQEAgYm9vbCBGb2N1c0NvbnRy
b2xsZXI6OmFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9u
LCBLZXlib2EKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGZvY3VzZWREb2N1bWVudC0+
Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBOb2RlKiBjb250YWluZXIgPSBmb2N1c2VkRG9jdW1lbnQ7
CiAKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRhaW5lcikpCisgICAgaWYgKGlzPERvY3VtZW50
PigqY29udGFpbmVyKSkKICAgICAgICAgZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250YWluZXIpLnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgLy8gRmlndXJlIG91
dCB0aGUgc3RhcnRpbmcgcmVjdC4KQEAgLTg4NSw3ICs4ODUsNyBAQCBib29sIEZvY3VzQ29udHJv
bGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24s
IEtleWJvYQogICAgICAgICBpZiAoIWhhc09mZnNjcmVlblJlY3QoZm9jdXNlZEVsZW1lbnQpKSB7
CiAgICAgICAgICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlRW5jbG9zaW5nQm94T3JQYXJlbnRG
cmFtZUZvck5vZGVJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGZvY3VzZWRFbGVtZW50KTsKICAgICAg
ICAgICAgIHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGZvY3Vz
ZWRFbGVtZW50LCB0cnVlIC8qIGlnbm9yZSBib3JkZXIgKi8pOwotICAgICAgICB9IGVsc2UgaWYg
KGlzPEhUTUxBcmVhRWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CisgICAgICAgIH0gZWxzZSBp
ZiAoaXM8SFRNTEFyZWFFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBI
VE1MQXJlYUVsZW1lbnQmIGFyZWEgPSBkb3duY2FzdDxIVE1MQXJlYUVsZW1lbnQ+KCpmb2N1c2Vk
RWxlbWVudCk7CiAgICAgICAgICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlRW5jbG9zaW5nQm94
T3JQYXJlbnRGcmFtZUZvck5vZGVJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGFyZWEuaW1hZ2VFbGVt
ZW50KCkpOwogICAgICAgICAgICAgc3RhcnRpbmdSZWN0ID0gdmlydHVhbFJlY3RGb3JBcmVhRWxl
bWVudEFuZERpcmVjdGlvbigmYXJlYSwgZGlyZWN0aW9uKTsKQEAgLTkwMCw3ICs5MDAsNyBAQCBi
b29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVj
dGlvbiBkaXJlY3Rpb24sIEtleWJvYQogICAgICAgICBjb25zdW1lZCA9IGFkdmFuY2VGb2N1c0Rp
cmVjdGlvbmFsbHlJbkNvbnRhaW5lcihjb250YWluZXIsIHN0YXJ0aW5nUmVjdCwgZGlyZWN0aW9u
LCBldmVudCk7CiAgICAgICAgIHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3Jk
aW5hdGVzKGNvbnRhaW5lciwgdHJ1ZSAvKiBpZ25vcmUgYm9yZGVyICovKTsKICAgICAgICAgY29u
dGFpbmVyID0gc2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJl
Y3Rpb24oZGlyZWN0aW9uLCBjb250YWluZXIpOwotICAgICAgICBpZiAoY29udGFpbmVyICYmIGlz
PERvY3VtZW50Pihjb250YWluZXIpKQorICAgICAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRhaW5l
cikpCiAgICAgICAgICAgICBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRhaW5lcikudXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgfSB3aGlsZSAoIWNvbnN1bWVkICYm
IGNvbnRhaW5lcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggYTljZDNiYTg4NmNlNTNmNGEy
ZjdiNGNmMThiZmNhYjgyMzY5NzlkZS4uMmVmZmUxZDBkNDNhNjM5MjFmOGFhZjNmNDBjYTFiZWY0
Mjg4MTNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTM5MCwxMiArMzkwLDEyIEBAIFN0cmlu
ZyBGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChjb25zdCBWZWN0b3I8U3RyaW5n
PiYgbGFiZWxzLCBFbGVtZW50CiAgICAgTm9kZSogbjsKICAgICBmb3IgKG4gPSBOb2RlVHJhdmVy
c2FsOjpwcmV2aW91cyhlbGVtZW50KTsgbiAmJiBsZW5ndGhTZWFyY2hlZCA8IGNoYXJzU2VhcmNo
ZWRUaHJlc2hvbGQ7IG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhuKSkgewogICAgICAgICAv
LyBXZSBoaXQgYW5vdGhlciBmb3JtIGVsZW1lbnQgb3IgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIC0g
YmFpbCBvdXQKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtRWxlbWVudD4obikgfHwgaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4obikpCisgICAgICAgIGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KCpu
KSB8fCBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbikpCiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBpZiAobi0+aGFzVGFnTmFtZSh0ZFRhZykgJiYgIXN0YXJ0aW5nVGFibGVDZWxs
KQogICAgICAgICAgICAgc3RhcnRpbmdUYWJsZUNlbGwgPSBkb3duY2FzdDxIVE1MVGFibGVDZWxs
RWxlbWVudD4obik7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEhUTUxUYWJsZVJvd0VsZW1lbnQ+KG4p
ICYmIHN0YXJ0aW5nVGFibGVDZWxsKSB7CisgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxUYWJsZVJv
d0VsZW1lbnQ+KCpuKSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgewogICAgICAgICAgICAgU3RyaW5n
IHJlc3VsdCA9IHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChyZWdFeHAsIHN0YXJ0aW5nVGFibGVD
ZWxsLCByZXN1bHREaXN0YW5jZSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0SXNJbkNlbGxBYm92ZSkKQEAgLTk2OCw3ICs5
NjgsNyBAQCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Va
b29tRmFjdG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogCiAgICAgLy8gUmVzcGVjdCBTVkdzIHpv
b21BbmRQYW49ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBzdGFuZGFsb25lIFNWRyBkb2N1bWVudHMu
CiAgICAgLy8gRklYTUU6IEhvdyB0byBoYW5kbGUgY29tcG91bmQgZG9jdW1lbnRzICsgem9vbUFu
ZFBhbj0iZGlzYWJsZWQiPyBOZWVkcyBTVkcgV0cgY2xhcmlmaWNhdGlvbi4KLSAgICBpZiAoaXM8
U1ZHRG9jdW1lbnQ+KGRvY3VtZW50KSAmJiAhZG93bmNhc3Q8U1ZHRG9jdW1lbnQ+KCpkb2N1bWVu
dCkuem9vbUFuZFBhbkVuYWJsZWQoKSkKKyAgICBpZiAoaXM8U1ZHRG9jdW1lbnQ+KCpkb2N1bWVu
dCkgJiYgIWRvd25jYXN0PFNWR0RvY3VtZW50PigqZG9jdW1lbnQpLnpvb21BbmRQYW5FbmFibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3BhZ2Vab29tRmFjdG9yICE9IHBhZ2Va
b29tRmFjdG9yKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYmNiNTA0NGIxNTY4
NGUyNDI3OTlkNzg5ZTJhZWM0M2NhYzY1MjFlYy4uNzhlMjc1ZWMwMWQyNzk3MTc2NWQzMzQ4NWQz
YjkzOTdhZjljZDM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMzIyLDcgKzMy
Miw3IEBAIHZvaWQgRnJhbWVWaWV3Ojppbml0KCkKIAogICAgIC8vIFByb3BhZ2F0ZSB0aGUgbWFy
Z2lud2lkdGgvaGVpZ2h0IGFuZCBzY3JvbGxpbmcgbW9kZXMgdG8gdGhlIHZpZXcuCiAgICAgRWxl
bWVudCogb3duZXJFbGVtZW50ID0gZnJhbWUoKS5vd25lckVsZW1lbnQoKTsKLSAgICBpZiAob3du
ZXJFbGVtZW50ICYmIGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1lbnQpKSB7Cisg
ICAgaWYgKGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1lbnQpKSB7CiAgICAgICAg
IEhUTUxGcmFtZUVsZW1lbnRCYXNlJiBmcmFtZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRnJhbWVF
bGVtZW50QmFzZT4oKm93bmVyRWxlbWVudCk7CiAgICAgICAgIGlmIChmcmFtZUVsZW1lbnQuc2Ny
b2xsaW5nTW9kZSgpID09IFNjcm9sbGJhckFsd2F5c09mZikKICAgICAgICAgICAgIHNldENhbkhh
dmVTY3JvbGxiYXJzKGZhbHNlKTsKQEAgLTE5NjAsNyArMTk2MCw3IEBAIGJvb2wgRnJhbWVWaWV3
OjpzY3JvbGxUb0FuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgLy8gU2V0dGluZyB0byBu
dWxsIHdpbGwgY2xlYXIgdGhlIGN1cnJlbnQgdGFyZ2V0LgogICAgIGZyYW1lKCkuZG9jdW1lbnQo
KS0+c2V0Q1NTVGFyZ2V0KGFuY2hvckVsZW1lbnQpOwogCi0gICAgaWYgKGlzPFNWR0RvY3VtZW50
PihmcmFtZSgpLmRvY3VtZW50KCkpKSB7CisgICAgaWYgKGlzPFNWR0RvY3VtZW50PigqZnJhbWUo
KS5kb2N1bWVudCgpKSkgewogICAgICAgICBpZiAoU1ZHU1ZHRWxlbWVudCogc3ZnID0gZG93bmNh
c3Q8U1ZHRG9jdW1lbnQ+KCpmcmFtZSgpLmRvY3VtZW50KCkpLnJvb3RFbGVtZW50KCkpIHsKICAg
ICAgICAgICAgIHN2Zy0+c2V0dXBJbml0aWFsVmlldyhuYW1lLCBhbmNob3JFbGVtZW50KTsKICAg
ICAgICAgICAgIGlmICghYW5jaG9yRWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFs
aXplci5jcHAKaW5kZXggNTRjYTk2Nzk4MGRiN2M1NjMxNGQ0ZGFiYzQxYmFmYmY5ZmIyNDk5Yy4u
OGQ0NzU4YTZlNzQxNDNiZmU0MjVmYWMzYWJlYWNjYzIzYTBkZjg2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIFBhZ2VTZXJp
YWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtZSogZnJhbWUpCiAKICAgICBmb3IgKFZlY3RvcjxO
b2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBub2Rlcy5iZWdpbigpOyBpdGVyICE9IG5vZGVzLmVuZCgp
OyArK2l0ZXIpIHsKICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOwotICAgICAgICBpZiAoIWlz
PEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50Pigqbm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
CmluZGV4IDI4ZDlkM2Q1MDI3YmM5NmRiN2E5M2I1ZDgxYzlhM2JjOWYyZDFjNGEuLmIxNzc5Njhm
N2IyMTgzMjQ3ZThkM2NkNzEyODliNjAzYmFiNDdiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC02MywxMCArNjMsOSBAQCBGb2N1c0NhbmRpZGF0ZTo6
Rm9jdXNDYW5kaWRhdGUoTm9kZSogbm9kZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAg
ICwgaXNPZmZzY3JlZW4odHJ1ZSkKICAgICAsIGlzT2Zmc2NyZWVuQWZ0ZXJTY3JvbGxpbmcodHJ1
ZSkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVudE5vZGUo
KSk7CisgICAgQVNTRVJUKGlzPEVsZW1lbnQ+KG5vZGUpKTsKIAotICAgIGlmIChpczxIVE1MQXJl
YUVsZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxBcmVhRWxlbWVudD4oKm5vZGUpKSB7
CiAgICAgICAgIEhUTUxBcmVhRWxlbWVudCYgYXJlYSA9IGRvd25jYXN0PEhUTUxBcmVhRWxlbWVu
dD4oKm5vZGUpOwogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9IGFyZWEuaW1hZ2VF
bGVtZW50KCk7CiAgICAgICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5yZW5kZXJlcigpKQpAQCAt
MzY2LDcgKzM2NSw3IEBAIGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiBib29sIHNjcm9sbEluRGlyZWN0aW9uKE5vZGUqIGNvbnRh
aW5lciwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIEFTU0VSVChjb250YWluZXIp
OwotICAgIGlmIChpczxEb2N1bWVudD4oY29udGFpbmVyKSkKKyAgICBpZiAoaXM8RG9jdW1lbnQ+
KCpjb250YWluZXIpKQogICAgICAgICByZXR1cm4gc2Nyb2xsSW5EaXJlY3Rpb24oZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250YWluZXIpLmZyYW1lKCksIGRpcmVjdGlvbik7CiAKICAgICBpZiAoIWNv
bnRhaW5lci0+cmVuZGVyQm94KCkpCkBAIC00MzUsMTEgKzQzNCwxMSBAQCBOb2RlKiBzY3JvbGxh
YmxlRW5jbG9zaW5nQm94T3JQYXJlbnRGcmFtZUZvck5vZGVJbkRpcmVjdGlvbihGb2N1c0RpcmVj
dGlvbiBkaXJlYwogICAgIEFTU0VSVChub2RlKTsKICAgICBOb2RlKiBwYXJlbnQgPSBub2RlOwog
ICAgIGRvIHsKLSAgICAgICAgaWYgKGlzPERvY3VtZW50PihwYXJlbnQpKQorICAgICAgICBpZiAo
aXM8RG9jdW1lbnQ+KCpwYXJlbnQpKQogICAgICAgICAgICAgcGFyZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpwYXJlbnQpLmRvY3VtZW50KCkuZnJhbWUoKS0+b3duZXJFbGVtZW50KCk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOwotICAg
IH0gd2hpbGUgKHBhcmVudCAmJiAhY2FuU2Nyb2xsSW5EaXJlY3Rpb24ocGFyZW50LCBkaXJlY3Rp
b24pICYmICFpczxEb2N1bWVudD4ocGFyZW50KSk7CisgICAgfSB3aGlsZSAocGFyZW50ICYmICFj
YW5TY3JvbGxJbkRpcmVjdGlvbihwYXJlbnQsIGRpcmVjdGlvbikgJiYgIWlzPERvY3VtZW50Pigq
cGFyZW50KSk7CiAKICAgICByZXR1cm4gcGFyZW50OwogfQpAQCAtNDQ4LDEwICs0NDcsMTAgQEAg
Ym9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihjb25zdCBOb2RlKiBjb250YWluZXIsIEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBBU1NFUlQoY29udGFpbmVyKTsKIAotICAgIGlmIChp
czxIVE1MU2VsZWN0RWxlbWVudD4oY29udGFpbmVyKSkKKyAgICBpZiAoaXM8SFRNTFNlbGVjdEVs
ZW1lbnQ+KCpjb250YWluZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXM8
RG9jdW1lbnQ+KGNvbnRhaW5lcikpCisgICAgaWYgKGlzPERvY3VtZW50PigqY29udGFpbmVyKSkK
ICAgICAgICAgcmV0dXJuIGNhblNjcm9sbEluRGlyZWN0aW9uKGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGFpbmVyKS5mcmFtZSgpLCBkaXJlY3Rpb24pOwogCiAgICAgaWYgKCFpc1Njcm9sbGFibGVO
b2RlKGNvbnRhaW5lcikpCkBAIC01MjAsNyArNTE5LDcgQEAgTGF5b3V0UmVjdCBub2RlUmVjdElu
QWJzb2x1dGVDb29yZGluYXRlcyhOb2RlKiBub2RlLCBib29sIGlnbm9yZUJvcmRlcikKIHsKICAg
ICBBU1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpICYmICFub2RlLT5kb2N1bWVudCgpLnZp
ZXcoKS0+bmVlZHNMYXlvdXQoKSk7CiAKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KG5vZGUpKQorICAg
IGlmIChpczxEb2N1bWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4gZnJhbWVSZWN0SW5BYnNv
bHV0ZUNvb3JkaW5hdGVzKGRvd25jYXN0PERvY3VtZW50Pigqbm9kZSkuZnJhbWUoKSk7CiAgICAg
TGF5b3V0UmVjdCByZWN0ID0gcmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyhub2RlLT5kb2N1bWVu
dCgpLmZyYW1lKCksIG5vZGUtPmJvdW5kaW5nQm94KCkpOwogCkBAIC02MDcsNyArNjA2LDcgQEAg
Ym9vbCBhcmVFbGVtZW50c09uU2FtZUxpbmUoY29uc3QgRm9jdXNDYW5kaWRhdGUmIGZpcnN0Q2Fu
ZGlkYXRlLCBjb25zdCBGb2N1c0NhbmQKICAgICBpZiAoIWZpcnN0Q2FuZGlkYXRlLnJlY3QuaW50
ZXJzZWN0cyhzZWNvbmRDYW5kaWRhdGUucmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChpczxIVE1MQXJlYUVsZW1lbnQ+KGZpcnN0Q2FuZGlkYXRlLmZvY3VzYWJsZU5vZGUp
IHx8IGlzPEhUTUxBcmVhRWxlbWVudD4oc2Vjb25kQ2FuZGlkYXRlLmZvY3VzYWJsZU5vZGUpKQor
ICAgIGlmIChpczxIVE1MQXJlYUVsZW1lbnQ+KCpmaXJzdENhbmRpZGF0ZS5mb2N1c2FibGVOb2Rl
KSB8fCBpczxIVE1MQXJlYUVsZW1lbnQ+KCpzZWNvbmRDYW5kaWRhdGUuZm9jdXNhYmxlTm9kZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghZmlyc3RDYW5kaWRhdGUudmlzaWJs
ZU5vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVySW5saW5lKCkgfHwgIXNlY29uZENhbmRpZGF0ZS52
aXNpYmxlTm9kZS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9p
b3MvRnJhbWVJT1MubW0KaW5kZXggOWM4OTQ0M2RmMGVkOTE1M2JhMDgzZWE3ZDgxOWJlMWQwY2Nh
MjU3Zi4uZGQ5NDNlYjQ0MGQ0MTYyOGM2NTU3ZTI5MzMxYjQyYjVhMzI1MzExNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTM1MSw3ICszNTEsNyBAQCBzdGF0aWMgTm9kZSog
YW5jZXN0b3JSZXNwb25kaW5nVG9DbGlja0V2ZW50cyhjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRU
ZXN0UmVzdWx0LAogICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGludGVyZXN0ZWQgYWJvdXQgdGhl
IGZyYW1lLCB1c2UgaXQuCiAgICAgICAgICAgICBpZiAobm9kZUJvdW5kcykgewogICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBjaGVjayB0byBzZWUgd2hldGhlciB0aGlzIG5vZGUgaXMgYW4g
YXJlYSBlbGVtZW50LiAgVGhlIG9ubHkgd2F5IHRoaXMgY2FuIGhhcHBlbiBpcyBpZiB0aGlzIGlz
IHRoZSBmaXJzdCBjaGVjay4KLSAgICAgICAgICAgICAgICBpZiAobm9kZSA9PSBoaXRUZXN0UmVz
dWx0LmlubmVyTm9kZSgpICYmIG5vZGUgIT0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKSAmJiBpczxIVE1MQXJlYUVsZW1lbnQ+KG5vZGUpKQorICAgICAgICAgICAgICAgIGlmIChu
b2RlID09IGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSAhPSBoaXRUZXN0UmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpICYmIGlzPEhUTUxBcmVhRWxlbWVudD4oKm5vZGUpKQogICAg
ICAgICAgICAgICAgICAgICAqbm9kZUJvdW5kcyA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PEhU
TUxBcmVhRWxlbWVudD4oKm5vZGUpLmNvbXB1dGVSZWN0KGhpdFRlc3RSZXN1bHQuaW5uZXJOb25T
aGFyZWROb2RlKCktPnJlbmRlcmVyKCkpKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2Rl
ICYmIG5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAgICpub2RlQm91bmRzID0g
bm9kZS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IDVmZDNiYjU0MGYw
MzVmNjcyNjE1MTEyMTQ4ODgzYzQyZjE0YzBhYzYuLmNjNmE0YjU0NTk4NDNkZjA3NjRiYjRhMDlk
OTFlOTg4NGUyZDk0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kS2V5VmFs
dWVQYWlySXRlbXMoY29uc3QgRm9ybURhdGFMaXN0JiBsaXN0LCBjb25zdCBUZXh0RW5jb2QKICAg
ICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHR5cGUgaXMgYmxvYiwgdGhlbiB3ZSBhbHNvIG5l
ZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkp
IHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8
RmlsZT4odmFsdWUuYmxvYigpKSkgeworICAgICAgICAgICAgICAgIGlmIChpczxGaWxlPigqdmFs
dWUuYmxvYigpKSkgewogICAgICAgICAgICAgICAgICAgICBGaWxlJiBmaWxlID0gZG93bmNhc3Q8
RmlsZT4oKnZhbHVlLmJsb2IoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBmaWxlLm5h
bWUoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5
IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUg
Zm9yIHRoZSB1cGxvYWQuCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5k
S2V5VmFsdWVQYWlySXRlbXMoY29uc3QgRm9ybURhdGFMaXN0JiBsaXN0LCBjb25zdCBUZXh0RW5j
b2QKICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5CiAgICAgICAgICAgICBhcHBlbmREYXRhKGhl
YWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2Io
KSkgewotICAgICAgICAgICAgICAgIGlmIChpczxGaWxlPih2YWx1ZS5ibG9iKCkpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGlzPEZpbGU+KCp2YWx1ZS5ibG9iKCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEZpbGUmIGZpbGUgPSBkb3duY2FzdDxGaWxlPigqdmFsdWUuYmxvYigpKTsKICAgICAg
ICAgICAgICAgICAgICAgLy8gRG8gbm90IGFkZCB0aGUgZmlsZSBpZiB0aGUgcGF0aCBpcyBlbXB0
eS4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlLnBhdGgoKS5pc0VtcHR5KCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggNzIxYmQ1OGIwZWQ2
ODZlZjA0ZmYyNzI2MTExZDhhM2QyODNmYjk0OS4uZmY4NGY2NzEyNDIwNTE2ZDViMWRmODZlOWQ5
ZmNiMzEzMTVjNzIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcApAQCAtMTMxLDE0ICsxMzEsMTQgQEAgdm9pZCBIaXRUZXN0UmVzdWx0OjpzZXRUb05vblNo
YWRvd0FuY2VzdG9yKCkKIAogdm9pZCBIaXRUZXN0UmVzdWx0OjpzZXRJbm5lck5vZGUoTm9kZSog
bm9kZSkKIHsKLSAgICBpZiAobm9kZSAmJiBpczxQc2V1ZG9FbGVtZW50Pihub2RlKSkKKyAgICBp
ZiAoaXM8UHNldWRvRWxlbWVudD4obm9kZSkpCiAgICAgICAgIG5vZGUgPSBkb3duY2FzdDxQc2V1
ZG9FbGVtZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKTsKICAgICBtX2lubmVyTm9kZSA9IG5vZGU7
CiB9CiAgICAgCiB2b2lkIEhpdFRlc3RSZXN1bHQ6OnNldElubmVyTm9uU2hhcmVkTm9kZShOb2Rl
KiBub2RlKQogewotICAgIGlmIChub2RlICYmIGlzPFBzZXVkb0VsZW1lbnQ+KG5vZGUpKQorICAg
IGlmIChpczxQc2V1ZG9FbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9IGRvd25jYXN0PFBz
ZXVkb0VsZW1lbnQ+KCpub2RlKS5ob3N0RWxlbWVudCgpOwogICAgIG1faW5uZXJOb25TaGFyZWRO
b2RlID0gbm9kZTsKIH0KQEAgLTIyMyw3ICsyMjMsNyBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6
dGl0bGUoVGV4dERpcmVjdGlvbiYgZGlyKSBjb25zdAogICAgIC8vIEZpbmQgdGhlIHRpdGxlIGlu
IHRoZSBuZWFyZXN0IGVuY2xvc2luZyBET00gbm9kZS4KICAgICAvLyBGb3IgPGFyZWE+IHRhZ3Mg
aW4gaW1hZ2UgbWFwcywgd2FsayB0aGUgdHJlZSBmb3IgdGhlIDxhcmVhPiwgbm90IHRoZSA8aW1n
PiB1c2luZyBpdC4KICAgICBmb3IgKE5vZGUqIHRpdGxlTm9kZSA9IG1faW5uZXJOb2RlLmdldCgp
OyB0aXRsZU5vZGU7IHRpdGxlTm9kZSA9IHRpdGxlTm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAg
ICAgIGlmIChpczxFbGVtZW50Pih0aXRsZU5vZGUpKSB7CisgICAgICAgIGlmIChpczxFbGVtZW50
PigqdGl0bGVOb2RlKSkgewogICAgICAgICAgICAgRWxlbWVudCYgdGl0bGVFbGVtZW50ID0gZG93
bmNhc3Q8RWxlbWVudD4oKnRpdGxlTm9kZSk7CiAgICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSB0
aXRsZUVsZW1lbnQudGl0bGUoKTsKICAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKSB7
CkBAIC0yMzksNyArMjM5LDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJl
Y3Rpb24mIGRpcikgY29uc3QKIFN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRydW5j
YXRlZChUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlKiB0cnVuY2F0
ZWROb2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7IHRydW5jYXRlZE5vZGU7IHRydW5jYXRlZE5vZGUg
PSB0cnVuY2F0ZWROb2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCFpczxFbGVtZW50
Pih0cnVuY2F0ZWROb2RlKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50PigqdHJ1bmNhdGVkTm9k
ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9
IGRvd25jYXN0PEVsZW1lbnQ+KCp0cnVuY2F0ZWROb2RlKS5yZW5kZXJlcigpKSB7CkBAIC0zNjMs
NyArMzYzLDcgQEAgYm9vbCBIaXRUZXN0UmVzdWx0OjptZWRpYVN1cHBvcnRzRnVsbHNjcmVlbigp
IGNvbnN0CiB7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWx0KG1lZGlhRWxlbWVudCgpKTsKLSAgICByZXR1cm4gKG1lZGlhRWx0ICYmIGlzPEhUTUxWaWRl
b0VsZW1lbnQ+KG1lZGlhRWx0KSAmJiBtZWRpYUVsdC0+c3VwcG9ydHNGdWxsc2NyZWVuKCkpOwor
ICAgIHJldHVybiBpczxIVE1MVmlkZW9FbGVtZW50PihtZWRpYUVsdCkgJiYgbWVkaWFFbHQtPnN1
cHBvcnRzRnVsbHNjcmVlbigpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAg
LTQyNSw3ICs0MjUsNyBAQCB2b2lkIEhpdFRlc3RSZXN1bHQ6OmVudGVyRnVsbHNjcmVlbkZvclZp
ZGVvKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50KHRoaXMtPm1lZGlhRWxlbWVudCgpKTsKLSAgICBpZiAobWVkaWFFbGVtZW50
ICYmIGlzPEhUTUxWaWRlb0VsZW1lbnQ+KG1lZGlhRWxlbWVudCkpIHsKKyAgICBpZiAoaXM8SFRN
TFZpZGVvRWxlbWVudD4obWVkaWFFbGVtZW50KSkgewogICAgICAgICBIVE1MVmlkZW9FbGVtZW50
JiB2aWRlb0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PigqbWVkaWFFbGVtZW50
KTsKICAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQuaXNGdWxsc2NyZWVuKCkgJiYgbWVkaWFFbGVt
ZW50LT5zdXBwb3J0c0Z1bGxzY3JlZW4oKSkgewogICAgICAgICAgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwpAQCAtNDgz
LDcgKzQ4Myw3IEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6bWVkaWFJc1ZpZGVvKCkgY29uc3QKIHsK
ICNpZiBFTkFCTEUoVklERU8pCiAgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWx0ID0g
bWVkaWFFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBpczxIVE1MVmlkZW9FbGVtZW50PihtZWRp
YUVsdCk7CisgICAgICAgIHJldHVybiBpczxIVE1MVmlkZW9FbGVtZW50PigqbWVkaWFFbHQpOwog
I2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNjc2LDcgKzY3Niw3IEBAIEVsZW1lbnQq
IEhpdFRlc3RSZXN1bHQ6OmlubmVyRWxlbWVudCgpIGNvbnN0CiAgICAgTm9kZSogbm9kZSA9IG1f
aW5uZXJOb2RlLmdldCgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkp
CiAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICByZXR1cm4gbm9k
ZS0+cGFyZW50RWxlbWVudCgpOwogfQpAQCAtNjg2LDcgKzY4Niw3IEBAIEVsZW1lbnQqIEhpdFRl
c3RSZXN1bHQ6OmlubmVyTm9uU2hhcmVkRWxlbWVudCgpIGNvbnN0CiAgICAgTm9kZSogbm9kZSA9
IG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmIChpczxFbGVt
ZW50Pigqbm9kZSkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAg
ICByZXR1cm4gbm9kZS0+cGFyZW50RWxlbWVudCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCAzZmI4NGQ4MjFmYzM2MDZhODQzODJjMmNl
MjMzNmY5MzY5ZjRkYTY0Li5jNzM3NzE0MDc3MmU3ODRjZWU5M2RiYzM0NGUxZTFhZTZhNWFjYmI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAt
MzU2Nyw3ICszNTY3LDcgQEAgaW5saW5lIHN0YXRpYyBib29sIHJlc2l6ZVRleHRQZXJtaXR0ZWQo
UmVuZGVyT2JqZWN0KiByZW5kZXIpCiAgICAgYXV0byByZW5kZXJlciA9IHJlbmRlci0+cGFyZW50
KCk7CiAgICAgd2hpbGUgKHJlbmRlcmVyKSB7CiAgICAgICAgIC8vIEdldCB0aGUgZmlyc3Qgbm9u
LXNoYWRvdyBIVE1MRWxlbWVudCBhbmQgc2VlIGlmIGl0J3MgYW4gaW5wdXQuCi0gICAgICAgIGlm
IChyZW5kZXJlci0+ZWxlbWVudCgpICYmIGlzPEhUTUxFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVu
dCgpKSAmJiAhcmVuZGVyZXItPmVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUoKSkgeworICAgICAg
ICBpZiAoaXM8SFRNTEVsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpICYmICFyZW5kZXJlci0+
ZWxlbWVudCgpLT5pc0luU2hhZG93VHJlZSgpKSB7CiAgICAgICAgICAgICBjb25zdCBIVE1MRWxl
bWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PigqcmVuZGVyZXItPmVsZW1lbnQo
KSk7CiAgICAgICAgICAgICByZXR1cm4gIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpICYm
ICFpczxIVE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAxM2ExYTRkNzdhZjdlZTVlNzhlMDk5Mjlh
M2Y3OWE0MzJiY2VmOWZhLi5lMWRlNDIwNzZmMTNjMzRiNzg4NjA5NDVlNmE4MjFmYzFhNWY4Y2Vi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMjQ3OCw3ICsyNDc4
LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnNpemVzTG9naWNhbFdpZHRoVG9GaXRDb250ZW50KFNpemVU
eXBlIHdpZHRoVHlwZSkgY29uc3QKICAgICAvLyBzdHJldGNoaW5nIGNvbHVtbiBmbGV4Ym94Lgog
ICAgIC8vIEZJWE1FOiBUaGluayBhYm91dCBibG9jay1mbG93IGhlcmUuCiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NDczCi0gICAgaWYgKGxvZ2ljYWxX
aWR0aC50eXBlKCkgPT0gQXV0byAmJiAhaXNTdHJldGNoaW5nQ29sdW1uRmxleEl0ZW0oKnRoaXMp
ICYmIGVsZW1lbnQoKSAmJiAoaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCgpKSB8fCBpczxI
VE1MU2VsZWN0RWxlbWVudD4oZWxlbWVudCgpKSB8fCBpczxIVE1MQnV0dG9uRWxlbWVudD4oZWxl
bWVudCgpKSB8fCBpczxIVE1MVGV4dEFyZWFFbGVtZW50PihlbGVtZW50KCkpIHx8IGlzPEhUTUxM
ZWdlbmRFbGVtZW50PihlbGVtZW50KCkpKSkKKyAgICBpZiAobG9naWNhbFdpZHRoLnR5cGUoKSA9
PSBBdXRvICYmICFpc1N0cmV0Y2hpbmdDb2x1bW5GbGV4SXRlbSgqdGhpcykgJiYgZWxlbWVudCgp
ICYmIChpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCgpKSB8fCBpczxIVE1MU2VsZWN0RWxl
bWVudD4oKmVsZW1lbnQoKSkgfHwgaXM8SFRNTEJ1dHRvbkVsZW1lbnQ+KCplbGVtZW50KCkpIHx8
IGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCplbGVtZW50KCkpIHx8IGlzPEhUTUxMZWdlbmRFbGVt
ZW50PigqZWxlbWVudCgpKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gY29udGFpbmluZ0Jsb2NrKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAK
aW5kZXggZTM2YWFlY2YwNzJiYWJhMWJmNzkxOTJmYjFmN2Q5NDA5OGNmODgyMS4uYWUwMjBkZTlj
YzU3YzViNmZlZGQ5YTZmZGQ3YjMzNzBjM2FlNmNmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRpYyBib29sIHBs
YW5Db3VudGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGlk
ZW50aWZpZXIsCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICAgICAg
aWYgKGlzPEhUTUxPTGlzdEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAoaXM8
SFRNTE9MaXN0RWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgdmFsdWUgPSBk
b3duY2FzdDxIVE1MT0xpc3RFbGVtZW50PigqZWxlbWVudCkuc3RhcnQoKTsKICAgICAgICAgICAg
ICAgICBpc1Jlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAppbmRleCBj
OTU2NmRmN2U5MTY0ZTQzMmViYmE4ODA4OTk2OWVhZDI3Mzg4OTdhLi5hZTU4ODBhNWI1MmI1ODQ5
NTBmMDdhNzQ5N2ZiZjcwNWFkOWZmNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCkBAIC0xNDQsOSArMTQ0LDkgQEAgYm9vbCBSZW5k
ZXJEZXRhaWxzTWFya2VyOjppc09wZW4oKSBjb25zdAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHBhcmVudCgpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50
KCkpIHsKICAgICAgICAgaWYgKCFyZW5kZXJlci0+bm9kZSgpKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmIChpczxIVE1MRGV0YWlsc0VsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkp
KQorICAgICAgICBpZiAoaXM8SFRNTERldGFpbHNFbGVtZW50PigqcmVuZGVyZXItPm5vZGUoKSkp
CiAgICAgICAgICAgICByZXR1cm4gIWRvd25jYXN0PEhUTUxEZXRhaWxzRWxlbWVudD4oKnJlbmRl
cmVyLT5ub2RlKCkpLmdldEF0dHJpYnV0ZShvcGVuQXR0cikuaXNOdWxsKCk7Ci0gICAgICAgIGlm
IChpczxIVE1MSW5wdXRFbGVtZW50PihyZW5kZXJlci0+bm9kZSgpKSkKKyAgICAgICAgaWYgKGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KCpyZW5kZXJlci0+bm9kZSgpKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bWJlZGRlZE9iamVjdC5jcHAKaW5kZXggYjQ2NGNjNzMzMDRjMTY4YzM1OTgxMTQzYmIyZThkYTRj
YjZmOTY1MC4uM2JiNzI0MzI1MjMwNjMyYzVmNGUyNTQxNTI1NGJhZjM1ZGYxZTMwOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBA
IC02MDAsNyArNjAwLDcgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aGFuZGxlVW5hdmFp
bGFibGVQbHVnaW5JbmRpY2F0b3JFdmVudChFdmVudCogZXZlbnQpCiAgICAgaWYgKCFzaG91bGRV
bmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihkb2N1bWVudCgpLCBtX3BsdWdpblVuYXZh
aWxhYmlsaXR5UmVhc29uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFpczxNb3VzZUV2
ZW50PihldmVudCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50PigqZXZlbnQpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVu
dD4oKmV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwCmluZGV4IGE1YzJiMDZlMDcyYjQ1MDNjYTNhYzRmYjdhYjE0ODhm
M2E3MTQ0OTEuLjRiM2NiOGIxNmZlNDUwZmU3YzZhYWZmN2U1YzY4NmZjMWRiYTUyYjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcApAQCAtMjU1LDcgKzI1NSw3IEBAIEhUTUxJbnB1dEVsZW1lbnQqIFJlbmRlckZpbGVVcGxv
YWRDb250cm9sOjp1cGxvYWRCdXR0b24oKSBjb25zdAogewogICAgIEFTU0VSVChpbnB1dEVsZW1l
bnQoKS5zaGFkb3dSb290KCkpOwogICAgIE5vZGUqIGJ1dHRvbk5vZGUgPSBpbnB1dEVsZW1lbnQo
KS5zaGFkb3dSb290KCktPmZpcnN0Q2hpbGQoKTsKLSAgICByZXR1cm4gYnV0dG9uTm9kZSAmJiBp
czxIVE1MSW5wdXRFbGVtZW50PihidXR0b25Ob2RlKSA/IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KGJ1dHRvbk5vZGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaXM8SFRNTElucHV0RWxlbWVu
dD4oYnV0dG9uTm9kZSkgPyBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihidXR0b25Ob2RlKSA6
IG51bGxwdHI7CiB9CiAKIFN0cmluZyBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YnV0dG9uVmFs
dWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKaW5kZXggN2ZjMzMz
MGFiZjM1ZjA2NmQ2MzRmNmNmYTllZGUzODBjMjFjNTc0YS4uNmIwYmRhZWRmNDAxOTBmMTM0MzI1
ZmJmMmQ3ODRkODY5ZDFhMDg0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRBcmVhRWxl
bWVudEZvY3VzUmluZyhQYWludEluZm8mIHBhaW50SW5mbykKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCk7
Ci0gICAgaWYgKCFmb2N1c2VkRWxlbWVudCB8fCAhaXM8SFRNTEFyZWFFbGVtZW50Pihmb2N1c2Vk
RWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MQXJlYUVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgSFRNTEFyZWFFbGVtZW50JiBhcmVhRWxlbWVudCA9IGRv
d25jYXN0PEhUTUxBcmVhRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KTsKQEAgLTU2MCw3ICs1NjAs
NyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludEludG9SZWN0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGlmICghaW1nIHx8IGltZy0+aXNOdWxs
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVu
dCA9IChlbGVtZW50KCkgJiYgaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSkgPyBkb3du
Y2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICBIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBpczxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkp
ID8gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSA6IG51bGxwdHI7CiAgICAg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVsZW1lbnQgPyBpbWFn
ZUVsZW1lbnQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVTb3VyY2VPdmVyOwogICAg
IEltYWdlKiBpbWFnZSA9IGltYWdlUmVzb3VyY2UoKS5pbWFnZSgpLmdldCgpOwogICAgIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxpbmcgPSBzaG91bGRQYWludEF0TG93UXVhbGl0eShjb250ZXh0LCBp
bWFnZSwgaW1hZ2UsIExheW91dFNpemUocmVjdC5zaXplKCkpKTsKQEAgLTYyMiw3ICs2MjIsNyBA
QCBMYXlvdXRVbml0IFJlbmRlckltYWdlOjptaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdAog
CiBIVE1MTWFwRWxlbWVudCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkgY29uc3QKIHsKLSAgICBI
VE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9IGVsZW1lbnQoKSAmJiBpczxIVE1MSW1hZ2VFbGVtZW50
PihlbGVtZW50KCkpID8gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSA6IG51
bGxwdHI7CisgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UgPSBpczxIVE1MSW1hZ2VFbGVtZW50
PihlbGVtZW50KCkpID8gZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSA6IG51
bGxwdHI7CiAgICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPnRyZWVTY29wZSgpLmdldEltYWdlTWFw
KGltYWdlLT5mYXN0R2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpKSA6IG51bGxwdHI7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGQ5ZDU5MzNhZjJjNjMy
Y2IyOWZkMWYwNGRkODU4NzAwYWMxY2U1ZTkuLmE1N2RjNTlkZjk4ZTZlY2I4ODZjMjY3YzkzMTc1
YWY2ZDk5Y2MyMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApA
QCAtMjM4MCw3ICsyMzgwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJs
ZShjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBTY3JvbGxBbGlnbm0KICAgICAgICAgaWYg
KG93bmVyRWxlbWVudCAmJiBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAg
IEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlID0gbnVsbHB0cjsKIAotICAg
ICAgICAgICAgaWYgKGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1lbnQpKQorICAg
ICAgICAgICAgaWYgKGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPigqb3duZXJFbGVtZW50KSkKICAg
ICAgICAgICAgICAgICBmcmFtZUVsZW1lbnRCYXNlID0gZG93bmNhc3Q8SFRNTEZyYW1lRWxlbWVu
dEJhc2U+KG93bmVyRWxlbWVudCk7CiAKICAgICAgICAgICAgIGlmIChmcmFtZUVsZW1lbnRBbmRW
aWV3UGVybWl0U2Nyb2xsKGZyYW1lRWxlbWVudEJhc2UsICZmcmFtZVZpZXcpKSB7CkBAIC0yNTc0
LDcgKzI1NzQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogCiAgICAgRVJlc2l6ZSByZXNp
emUgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNpemUoKTsKICAgICBpZiAocmVzaXplICE9IFJFU0la
RV9WRVJUSUNBTCAmJiBkaWZmZXJlbmNlLndpZHRoKCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQg
bWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgcmVuZGVyZXItPm1h
cmdpbkxlZnQoKSAvIHpvb21GYWN0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAg
ICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0b3IsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwpAQCAtMjU4NSw3ICsyNTg1LDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRT
aXplJiBvbGRPZmYKICAgICB9CiAKICAgICBpZiAocmVzaXplICE9IFJFU0laRV9IT1JJWk9OVEFM
ICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBm
cm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NTQ3PikuCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkg
LyB6b29tRmFjdG9yLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICAgICAgICAgIHN0
eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0
b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3IsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpOwpAQCAtMzA4OSw3ICszMDg5LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCiB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVTbmFwT2Zmc2V0cygpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9u
ZCBIVE1MRWxlbWVudHMuCi0gICAgaWYgKCFlbmNsb3NpbmdFbGVtZW50KCkgfHwgIWVuY2xvc2lu
Z0VsZW1lbnQoKS0+cmVuZGVyQm94KCkgfHwgIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVt
ZW50KCkpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1lbnQoKSkgfHwg
IWVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFJlbmRlckJveCogYm94ID0gZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggMjEz
Y2M5MGZjZWFiNjlhYmI5ZTNjNTVmN2U0NTA2MWRkMjA2MTk1NS4uZTNjY2JjN2U0NTY5NTRkMzJh
Y2QxZjljOWJjN2U4YmVhOTU0OGQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE2ODEsNyArMTY4MSw3IEBAIHN0YXRpYyBib29s
IGlzUmVzdGFydGVkUGx1Z2luKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihyZW5k
ZXJlci0+bm9kZSgpKTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWlzPEhUTUxQbHVnSW5FbGVtZW50
PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxQbHVnSW5FbGVtZW50PihlbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQbHVnSW5FbGVt
ZW50PigqZWxlbWVudCkuaXNSZXN0YXJ0ZWRQbHVnaW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCBkMmFkNzQzZDdlODVmMTMwZGYwM2FlY2FmYjFl
Y2E1NjM0Y2JiODFhLi45YjIwZTA0Y2Y2ZjIzZjViYjAzMjY5NjQ4MjA3NDEzMWM4MGFjMWIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCkBAIC0xMTYsOSAr
MTE2LDkgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAg
ICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKICAgICAgICAgICAgIFN0
cmluZyB0ZXh0OwogICAgICAgICAgICAgRm9udCBpdGVtRm9udCA9IHN0eWxlKCkuZm9udCgpOwot
ICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAg
ICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgICAg
IHRleHQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnRleHRJbmRlbnRl
ZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxPcHRH
cm91cEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MT3B0
R3JvdXBFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNh
c3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7CiAgICAg
ICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24o
KTsKICAgICAgICAgICAgICAgICBkLnNldFdlaWdodChkLmJvbGRlcldlaWdodCgpKTsKQEAgLTMz
MCw3ICszMzAsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JgogICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50KCkubGlzdEl0ZW1zKCk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgSFRNTEVsZW1lbnQq
IGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVu
dD4oZWxlbWVudCkgJiYgIWVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKSB7CisgICAg
ICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmICFlbGVtZW50LT5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSkgewogICAgICAgICAgICAgc2VsZWN0RWxlbWVudCgpLnNldEFj
dGl2ZVNlbGVjdGlvbkVuZEluZGV4KGkpOwogICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHNuYXBw
ZWRJbnRSZWN0KGl0ZW1Cb3VuZGluZ0JveFJlY3QoYWRkaXRpb25hbE9mZnNldCwgaSkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTM4NSwxMCArMzg1LDEwIEBAIHZvaWQgUmVuZGVyTGlzdEJv
eDo6cGFpbnRJdGVtRm9yZWdyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpdGVtVGV4dDsKLSAgICBib29s
IGlzT3B0aW9uRWxlbWVudCA9IGlzPEhUTUxPcHRpb25FbGVtZW50PihsaXN0SXRlbUVsZW1lbnQp
OworICAgIGJvb2wgaXNPcHRpb25FbGVtZW50ID0gaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0
SXRlbUVsZW1lbnQpOwogICAgIGlmIChpc09wdGlvbkVsZW1lbnQpCiAgICAgICAgIGl0ZW1UZXh0
ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpLnRleHRJbmRl
bnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKLSAgICBlbHNlIGlmIChpczxIVE1MT3B0R3JvdXBF
bGVtZW50PihsaXN0SXRlbUVsZW1lbnQpKQorICAgIGVsc2UgaWYgKGlzPEhUTUxPcHRHcm91cEVs
ZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpKQogICAgICAgICBpdGVtVGV4dCA9IGRvd25jYXN0PEhU
TUxPcHRHcm91cEVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7CiAg
ICAgYXBwbHlUZXh0VHJhbnNmb3JtKHN0eWxlKCksIGl0ZW1UZXh0LCAnICcpOwogCkBAIC00MDks
NyArNDA5LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYKICAgICBMYXlvdXRSZWN0IHIgPSBp
dGVtQm91bmRpbmdCb3hSZWN0KHBhaW50T2Zmc2V0LCBsaXN0SW5kZXgpOwogICAgIHIubW92ZShp
dGVtT2Zmc2V0Rm9yQWxpZ25tZW50KHRleHRSdW4sIGl0ZW1TdHlsZSwgaXRlbUZvbnQsIHIpKTsK
IAotICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PihsaXN0SXRlbUVsZW1lbnQpKSB7Cisg
ICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpKSB7CiAgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAgICAg
ICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2VpZ2h0KCkpOwogICAgICAgICBpdGVtRm9udCA9IEZv
bnQoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsK
QEAgLTQyNiw3ICs0MjYsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUJhY2tncm91
bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogICAgIEhUTUxFbGVt
ZW50KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKIAogICAgIENvbG9y
IGJhY2tDb2xvcjsKLSAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGxpc3RJdGVtRWxlbWVu
dCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpLnNlbGVj
dGVkKCkpIHsKKyAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQp
ICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1FbGVtZW50KS5zZWxlY3Rl
ZCgpKSB7CiAgICAgICAgIGlmIChmcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2
ZSgpICYmIGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSA9PSAmc2VsZWN0RWxlbWVudCgpKQog
ICAgICAgICAgICAgYmFja0NvbG9yID0gdGhlbWUoKS5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCk7CiAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNYXJxdWVlLmNwcAppbmRleCBmNGFmNzBlYzQwODcyNDFhNTRjMDkxZjNkZWNiY2RiYWM4
N2NlMjJmLi42NTAxZmUyYTYyNjY5MDgyNWMzYmE4NTMzZmVlZmE5MDFhYjM5NWUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC03Myw3ICs3Myw3IEBA
IGludCBSZW5kZXJNYXJxdWVlOjptYXJxdWVlU3BlZWQoKSBjb25zdAogewogICAgIGludCByZXN1
bHQgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZVNwZWVkKCk7CiAgICAgRWxl
bWVudCogZWxlbWVudCA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGlmIChl
bGVtZW50ICYmIGlzPEhUTUxNYXJxdWVlRWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKGlzPEhU
TUxNYXJxdWVlRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJl
c3VsdCwgZG93bmNhc3Q8SFRNTE1hcnF1ZWVFbGVtZW50PigqZWxlbWVudCkubWluaW11bURlbGF5
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lbnVMaXN0LmNwcAppbmRleCA3Y2EzNTJkYzdmMjg1YjgwMzNjNDc0NDVkZDBjZDRmNmNi
MTI3ZjBhLi4xZTBjZjUxMjQ5YjdjMTUzNTQ4NTIxMGU2ZWQ4ODZmYjViOTc5ZjA0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKQEAgLTY0LDcgKzY0LDcg
QEAgc3RhdGljIHNpemVfdCBzZWxlY3RlZE9wdGlvbkNvdW50KGNvbnN0IFJlbmRlck1lbnVMaXN0
JiByZW5kZXJNZW51TGlzdCkKIAogICAgIHNpemVfdCBjb3VudCA9IDA7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxP
cHRpb25FbGVtZW50PihsaXN0SXRlbXNbaV0pICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50
PigqbGlzdEl0ZW1zW2ldKS5zZWxlY3RlZCgpKQorICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpsaXN0SXRlbXNbaV0pICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbGlz
dEl0ZW1zW2ldKS5zZWxlY3RlZCgpKQogICAgICAgICAgICAgKytjb3VudDsKICAgICB9CiAgICAg
cmV0dXJuIGNvdW50OwpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVw
ZGF0ZU9wdGlvbnNXaWR0aCgpCiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKLSAgICAgICAg
aWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgIGlmICghaXM8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIFN0cmluZyB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50
ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CkBAIC0yNzAsNyArMjcwLDcgQEAgdm9p
ZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRpb24oaW50IG9wdGlvbkluZGV4KQogICAg
IFN0cmluZyB0ZXh0ID0gZW1wdHlTdHJpbmcoKTsKICAgICBpZiAoaSA+PSAwICYmIGkgPCBzaXpl
KSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIGlm
IChpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxP
cHRpb25FbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgIHRleHQgPSBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFi
ZWwoKTsKICAgICAgICAgICAgIG1fb3B0aW9uU3R5bGUgPSBlbGVtZW50LT5jb21wdXRlZFN0eWxl
KCk7CiAgICAgICAgIH0KQEAgLTQ1MCw5ICs0NTAsOSBAQCBTdHJpbmcgUmVuZGVyTWVudUxpc3Q6
Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIAogICAgIFN0cmluZyBpdGVtU3Ry
aW5nOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKLSAgICBp
ZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYgKGlzPEhUTUxPcHRH
cm91cEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgaXRlbVN0cmluZyA9IGRvd25jYXN0PEhU
TUxPcHRHcm91cEVsZW1lbnQ+KCplbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwotICAgIGVsc2Ug
aWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkKKyAgICBlbHNlIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICBpdGVtU3RyaW5nID0gZG93bmNhc3Q8
SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExh
YmVsKCk7CiAKICAgICBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgaXRlbVN0cmluZywgJyAn
KTsKQEAgLTQ5MiwxMiArNDkyLDEyIEBAIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0VuYWJs
ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAgIGlmIChsaXN0SW5kZXggPj0gbGlzdEl0
ZW1zLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxFbGVtZW50KiBlbGVt
ZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVu
dD4oZWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIGdyb3VwRW5hYmxlZCA9IHRydWU7CiAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkp
IHsKLSAgICAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KHBhcmVudEVsZW1lbnQpKQor
ICAgICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKnBhcmVudEVsZW1lbnQpKQogICAg
ICAgICAgICAgZ3JvdXBFbmFibGVkID0gIXBhcmVudEVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpOwogICAgIH0KICAgICBpZiAoIWdyb3VwRW5hYmxlZCkKQEAgLTY0NSw3ICs2NDUsNyBA
QCBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdAogYm9vbCBSZW5kZXJNZW51TGlzdDo6aXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdElu
ZGV4KSBjb25zdAogewogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMg
PSBzZWxlY3RFbGVtZW50KCkubGlzdEl0ZW1zKCk7Ci0gICAgcmV0dXJuIGxpc3RJbmRleCA8IGxp
c3RJdGVtcy5zaXplKCkgJiYgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4obGlzdEl0ZW1zW2xpc3RJ
bmRleF0pOworICAgIHJldHVybiBsaXN0SW5kZXggPCBsaXN0SXRlbXMuc2l6ZSgpICYmIGlzPEhU
TUxPcHRHcm91cEVsZW1lbnQ+KCpsaXN0SXRlbXNbbGlzdEluZGV4XSk7CiB9CiAKIGJvb2wgUmVu
ZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKQEAg
LTY1NCw3ICs2NTQsNyBAQCBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZWxlY3RlZCh1bnNp
Z25lZCBsaXN0SW5kZXgpIGNvbnN0CiAgICAgaWYgKGxpc3RJbmRleCA+PSBsaXN0SXRlbXMuc2l6
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBs
aXN0SXRlbXNbbGlzdEluZGV4XTsKLSAgICByZXR1cm4gaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVs
ZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQo
KTsKKyAgICByZXR1cm4gaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CiB9CiAKIHZvaWQgUmVu
ZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAppbmRleCA5OTA1OTZkOWUxMDUzMzBhNmYz
ZDQwNTdkYjlmNzZhZmM2OWVjODlkLi5kM2M0MjkxNTM1ZDBiNmQyMjczNGFhM2I0NzhiYzUxNzNi
ZjU5MWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAKQEAgLTQz
LDcgKzQzLDcgQEAgSFRNTE1ldGVyRWxlbWVudCogUmVuZGVyTWV0ZXI6Om1ldGVyRWxlbWVudCgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAKLSAgICBpZiAoaXM8SFRNTE1ldGVy
RWxlbWVudD4oZWxlbWVudCgpKSkKKyAgICBpZiAoaXM8SFRNTE1ldGVyRWxlbWVudD4oKmVsZW1l
bnQoKSkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MTWV0ZXJFbGVtZW50PihlbGVtZW50
KCkpOwogCiAgICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggODFk
YzlmZWZiNzlmNmNmNjgzMDVjZmE5Njk2MzZlYmJiMmU2ZTUzMC4uODZmYTUzOWYxYjEzNWFkZmIx
YzQyZWNjN2FmMmI5YzMxNWUzZTljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTU0NSwxMCArNTQ1LDEwIEBAIGJvb2wg
UmVuZGVyTmFtZWRGbG93VGhyZWFkOjppc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3Qm
IGNoaWxkLCBjb25zdCBSZW5kCiAgICAgaWYgKCFjaGlsZC5ub2RlKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgQVNTRVJUKGlzPEVsZW1lbnQ+KGNoaWxkLm5vZGUoKSkpOworICAgIEFT
U0VSVChpczxFbGVtZW50PigqY2hpbGQubm9kZSgpKSk7CiAKICAgICBOb2RlKiBvcmlnaW5hbFBh
cmVudCA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnBhcmVudChjaGlsZC5ub2RlKCkpOwotICAg
IGlmICghb3JpZ2luYWxQYXJlbnQgfHwgIWlzPEVsZW1lbnQ+KG9yaWdpbmFsUGFyZW50KSB8fCAh
b3JpZ2luYWxQYXJlbnQtPnJlbmRlcmVyKCkpCisgICAgaWYgKCFpczxFbGVtZW50PihvcmlnaW5h
bFBhcmVudCkgfHwgIW9yaWdpbmFsUGFyZW50LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pigqb3JpZ2luYWxQYXJlbnQpLnJl
bmRlcmVyKCktPmlzQ2hpbGRBbGxvd2VkKGNoaWxkLCBzdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDI0ZWY0OTY4NDQyOGFjMWMyNmI3NjFmMDg4
OTdiOWZkNTgyNjUyOTAuLmNjNjQyNWZiNmM1ZWMzMTIzYmY5ODI5ZTc2Y2IyZTQxNTkzZDg5M2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xMDM0LDcg
KzEwMzQsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50TwogICAgIGlmICh1cmxSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0g
ICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0xpbmsoKSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisg
ICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSB8fCAhbm9kZS0+aXNMaW5rKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGhyZWYgPSBkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSkuZ2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKICAgICBpZiAoaHJlZi5pc051bGwoKSkKQEAg
LTE5MTgsNyArMTkxOCw3IEBAIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBSZW5kZXJPYmpl
Y3Q6OnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgY29uc3QKICNlbmRpZgogICAgIC8v
IFJlc3BlY3QgdGhlIGltYWdlJ3Mgb3JpZW50YXRpb24gaWYgaXQncyBiZWluZyB1c2VkIGFzIGEg
ZnVsbC1wYWdlIGltYWdlIG9yIGl0J3MKICAgICAvLyBhbiA8aW1nPiBhbmQgdGhlIHNldHRpbmcg
dG8gcmVzcGVjdCBpdCBldmVyeXdoZXJlIGlzIHNldC4KLSAgICByZXR1cm4gKGZyYW1lKCkuc2V0
dGluZ3MoKS5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpICYmIG5vZGUoKSAmJiBpczxI
VE1MSW1hZ2VFbGVtZW50Pihub2RlKCkpKSA/IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uIDogRG9O
b3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbjsKKyAgICByZXR1cm4gKGZyYW1lKCkuc2V0dGluZ3Mo
KS5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpICYmIGlzPEhUTUxJbWFnZUVsZW1lbnQ+
KG5vZGUoKSkpID8gUmVzcGVjdEltYWdlT3JpZW50YXRpb24gOiBEb05vdFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6aGFzT3V0bGluZUFubm90YXRpb24o
KSBjb25zdApAQCAtMjE0MSw3ICsyMTQxLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnVwZGF0ZURy
YWdTdGF0ZShib29sIGRyYWdPbikKIHsKICAgICBib29sIHZhbHVlQ2hhbmdlZCA9IChkcmFnT24g
IT0gaXNEcmFnZ2luZygpKTsKICAgICBzZXRJc0RyYWdnaW5nKGRyYWdPbik7Ci0gICAgaWYgKHZh
bHVlQ2hhbmdlZCAmJiBub2RlKCkgJiYgKHN0eWxlKCkuYWZmZWN0ZWRCeURyYWcoKSB8fCAoaXM8
RWxlbWVudD4obm9kZSgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSgpKS5jaGlsZHJlbkFm
ZmVjdGVkQnlEcmFnKCkpKSkKKyAgICBpZiAodmFsdWVDaGFuZ2VkICYmIG5vZGUoKSAmJiAoc3R5
bGUoKS5hZmZlY3RlZEJ5RHJhZygpIHx8IChpczxFbGVtZW50Pigqbm9kZSgpKSAmJiBkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSgpKS5jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKCkpKSkKICAgICAgICAg
bm9kZSgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnIgPSBmaXJzdENoaWxkU2xvdygpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkK
ICAgICAgICAgY3Vyci0+dXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CkBAIC0yMjM0LDcgKzIyMzQs
NyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJPYmplY3Q6OmdldFVuY2FjaGVkUHNl
dWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZQogCiAgICAgLy8gRklYTUU6IFRoaXMgImZpbmQg
bmVhcmVzdCBlbGVtZW50IHBhcmVudCIgc2hvdWxkIGJlIGEgaGVscGVyIGZ1bmN0aW9uLgogICAg
IE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1l
bnQ+KG5vZGUpKQorICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAg
ICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTIyOTgsNyArMjI5OCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpn
ZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhpbnQgZGVjb3JhdGlvbnMsIENvbG9yJiB1bmRlcmxpbmUs
IENvCiAgICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKGN1cnIgJiYg
Y3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpICYmIHRvUmVuZGVyQmxvY2soY3VyciktPmNvbnRpbnVh
dGlvbigpKQogICAgICAgICAgICAgY3VyciA9IHRvUmVuZGVyQmxvY2soY3VyciktPmNvbnRpbnVh
dGlvbigpOwotICAgIH0gd2hpbGUgKGN1cnIgJiYgZGVjb3JhdGlvbnMgJiYgKCFxdWlya3NNb2Rl
IHx8ICFjdXJyLT5ub2RlKCkgfHwgKCFpczxIVE1MQW5jaG9yRWxlbWVudD4oY3Vyci0+bm9kZSgp
KSAmJiAhY3Vyci0+bm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOworICAgIH0gd2hpbGUg
KGN1cnIgJiYgZGVjb3JhdGlvbnMgJiYgKCFxdWlya3NNb2RlIHx8ICFjdXJyLT5ub2RlKCkgfHwg
KCFpczxIVE1MQW5jaG9yRWxlbWVudD4oKmN1cnItPm5vZGUoKSkgJiYgIWN1cnItPm5vZGUoKS0+
aGFzVGFnTmFtZShmb250VGFnKSkpKTsKIAogICAgIC8vIElmIHdlIGJhaWxlZCBvdXQsIHVzZSB0
aGUgZWxlbWVudCB3ZSBiYWlsZWQgb3V0IGF0ICh0eXBpY2FsbHkgYSA8Zm9udD4gb3IgPGE+IGVs
ZW1lbnQpLgogICAgIGlmIChkZWNvcmF0aW9ucyAmJiBjdXJyKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAppbmRleCA2YjhjZDQyZGFlZTNlYzRlMDI1YWZh
NjM2NDI3YWY2YmRmZGU4MGNlLi4zMzZiMTE2NzJkMDNiNWYwNmI3NDUzYTgzMzBiY2IzMjY5Njc4
Y2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKQEAg
LTExMCw3ICsxMTAsNyBAQCBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBSZW5kZXJQcm9ncmVzczo6cHJv
Z3Jlc3NFbGVtZW50KCkgY29uc3QKICAgICBpZiAoIWVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBpZiAoaXM8SFRNTFByb2dyZXNzRWxlbWVudD4oZWxlbWVudCgpKSkK
KyAgICBpZiAoaXM8SFRNTFByb2dyZXNzRWxlbWVudD4oKmVsZW1lbnQoKSkpCiAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50PihlbGVtZW50KCkpOwogCiAgICAgQVNT
RVJUKGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3BwCmluZGV4IDg3MGE1NDE0MDRkMWM1
ZTBiMjg5MWZkZDIzMmZlYmVjNGQ0NTg1YTAuLjU2OTcyMTI3MTUzMWVhZmMxMTFmMTk3MDYwYjk2
MTgwMDBjOWU3NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNuYXBzaG90dGVkUGx1Z0luLmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIEN1cnNvckRpcmVjdGl2
ZSBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6Z2V0Q3Vyc29yKGNvbnN0IExheW91dFBvaW50JiBw
b2ludCwgQ3VyCiAKIHZvaWQgUmVuZGVyU25hcHNob3R0ZWRQbHVnSW46OmhhbmRsZUV2ZW50KEV2
ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkKKyAgICBpZiAo
IWlzPE1vdXNlRXZlbnQ+KCpldmVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE1vdXNlRXZl
bnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggNTk3MTc3YWFkMWY3ODI4OWU4MjA4
NTk5N2E3ZDMyYjM5ZWI5NjE1YS4uZDExZWU2Yzg4ZTk4NjdjM2Y0ZWZjODU4N2ZiMGE3OTdmY2Vl
N2VlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0zNTAs
NyArMzUwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6Y29udmVydFN0eWxlTG9naWNhbFdp
ZHRoVG9Db21wdXRlZFdpZHRoKGNvbnN0IExlbmd0aCYgc3QKIAogICAgIC8vIEhUTUwgdGFibGVz
JyB3aWR0aCBzdHlsZXMgYWxyZWFkeSBpbmNsdWRlIGJvcmRlcnMgYW5kIHBhZGRpbmdzLCBidXQg
Q1NTIHRhYmxlcycgd2lkdGggc3R5bGVzIGRvIG5vdC4KICAgICBMYXlvdXRVbml0IGJvcmRlcnMg
PSAwOwotICAgIGJvb2wgaXNDU1NUYWJsZSA9ICFlbGVtZW50KCkgfHwgIWlzPEhUTUxUYWJsZUVs
ZW1lbnQ+KGVsZW1lbnQoKSk7CisgICAgYm9vbCBpc0NTU1RhYmxlID0gIWlzPEhUTUxUYWJsZUVs
ZW1lbnQ+KGVsZW1lbnQoKSk7CiAgICAgaWYgKGlzQ1NTVGFibGUgJiYgc3R5bGVMb2dpY2FsV2lk
dGguaXNTcGVjaWZpZWQoKSAmJiBzdHlsZUxvZ2ljYWxXaWR0aC5pc1Bvc2l0aXZlKCkgJiYgc3R5
bGUoKS5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkKICAgICAgICAgYm9yZGVycyA9IGJvcmRl
clN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQo
KSA6IHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpKTsKIApAQCAtMzY0LDcgKzM2NCw3IEBA
IExheW91dFVuaXQgUmVuZGVyVGFibGU6OmNvbnZlcnRTdHlsZUxvZ2ljYWxIZWlnaHRUb0NvbXB1
dGVkSGVpZ2h0KGNvbnN0IExlbmd0aCYKICAgICAgICAgLy8gSFRNTCB0YWJsZXMgc2l6ZSBhcyB0
aG91Z2ggQ1NTIGhlaWdodCBpbmNsdWRlcyBib3JkZXIvcGFkZGluZywgQ1NTIHRhYmxlcyBkbyBu
b3QuCiAgICAgICAgIExheW91dFVuaXQgYm9yZGVycyA9IExheW91dFVuaXQoKTsKICAgICAgICAg
Ly8gRklYTUU6IFdlIGNhbm5vdCBhcHBseSBib3gtc2l6aW5nOiBjb250ZW50LWJveCBvbiA8dGFi
bGU+IHdoaWNoIG90aGVyIGJyb3dzZXJzIGFsbG93LgotICAgICAgICBpZiAoKGVsZW1lbnQoKSAm
JiBpczxIVE1MVGFibGVFbGVtZW50PihlbGVtZW50KCkpKSB8fCBzdHlsZSgpLmJveFNpemluZygp
ID09IEJPUkRFUl9CT1gpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KGVsZW1l
bnQoKSkgfHwgc3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCT1JERVJfQk9YKSB7CiAgICAgICAgICAg
ICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChj
b2xsYXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQoKSA6IHBhZGRpbmdCZWZvcmUoKSk7CiAgICAg
ICAgICAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdBZnRlciA9IGJvcmRlckFmdGVyKCkg
KyAoY29sbGFwc2VCb3JkZXJzKCkgPyBMYXlvdXRVbml0KCkgOiBwYWRkaW5nQWZ0ZXIoKSk7CiAg
ICAgICAgICAgICBib3JkZXJzID0gYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSArIGJvcmRlckFuZFBh
ZGRpbmdBZnRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5j
cHAKaW5kZXggNDIxNWI4ZjRiMTJlMGI1OGJhMDViNWFiMTU3YzQwYTk5ZjlkYjk3Yi4uOTJhZWU5
MGEzMDEwNWUyNTMzMTAxOGRlMDcwYzkyYTVhMmEyM2Q0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZUNlbGw6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpCiB1bnNpZ25lZCBSZW5kZXJUYWJs
ZUNlbGw6OnBhcnNlQ29sU3BhbkZyb21ET00oKSBjb25zdAogewogICAgIEFTU0VSVChlbGVtZW50
KCkpOwotICAgIGlmIChpczxIVE1MVGFibGVDZWxsRWxlbWVudD4oZWxlbWVudCgpKSkKKyAgICBp
ZiAoaXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KCplbGVtZW50KCkpKQogICAgICAgICByZXR1cm4g
c3RkOjptaW48dW5zaWduZWQ+KGRvd25jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50PigqZWxlbWVu
dCgpKS5jb2xTcGFuKCksIG1heENvbHVtbkluZGV4KTsKICNpZiBFTkFCTEUoTUFUSE1MKQogICAg
IGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om10ZFRhZykpCkBAIC0xMDAs
NyArMTAwLDcgQEAgdW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpwYXJzZUNvbFNwYW5Gcm9tRE9N
KCkgY29uc3QKIHVuc2lnbmVkIFJlbmRlclRhYmxlQ2VsbDo6cGFyc2VSb3dTcGFuRnJvbURPTSgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKGlzPEhUTUxUYWJsZUNl
bGxFbGVtZW50PihlbGVtZW50KCkpKQorICAgIGlmIChpczxIVE1MVGFibGVDZWxsRWxlbWVudD4o
KmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4oZG93bmNhc3Q8
SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KCplbGVtZW50KCkpLnJvd1NwYW4oKSwgbWF4Um93SW5kZXgp
OwogI2lmIEVOQUJMRShNQVRITUwpCiAgICAgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShNYXRo
TUxOYW1lczo6bXRkVGFnKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
CmluZGV4IDk3NDdiNGEyMTZjODViMjI3MDg4ZGNkOTNhYjg3YjU3ZjhjYThjMzUuLjEyOGFmYWY4
MjMxMjQ0OTRmOGQyMzg1ZDZhZmFkYTdkMmFkMWI2YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcApAQCAtODA1LDcgKzgwNSw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6
OmlzSW5kZXRlcm1pbmF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiBib29sIFJlbmRl
clRoZW1lOjppc0VuYWJsZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsK
ICAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIubm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8
RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgcmV0dXJuICFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNEaXNhYmxl
ZEZvcm1Db250cm9sKCk7CiB9CkBAIC04MTMsNyArODEzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6
aXNFbmFibGVkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiBib29sIFJlbmRl
clRoZW1lOjppc0ZvY3VzZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsK
ICAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIubm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8
RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogZm9jdXNEZWxlZ2F0ZSA9IGRvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKS5mb2N1c0RlbGVnYXRlKCk7CkBAIC04MjQsNyArODI0LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZTo6aXNGb2N1c2VkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiAK
IGJvb2wgUmVuZGVyVGhlbWU6OmlzUHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
KSBjb25zdAogewotICAgIGlmICghcmVuZGVyZXIubm9kZSgpIHx8ICFpczxFbGVtZW50PihyZW5k
ZXJlci5ub2RlKCkpKQorICAgIGlmICghaXM8RWxlbWVudD4ocmVuZGVyZXIubm9kZSgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PigqcmVuZGVy
ZXIubm9kZSgpKS5hY3RpdmUoKTsKIH0KQEAgLTgzMiw3ICs4MzIsNyBAQCBib29sIFJlbmRlclRo
ZW1lOjppc1ByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIGJvb2wg
UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJlcikgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIubm9kZSgpOwot
ICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgaWYgKCFpczxFbGVtZW50
Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBk
b3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CiAgICAgaWYgKCFlbGVtZW50LmFjdGl2ZSgpIHx8ICFl
bGVtZW50LmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKQEAgLTg0Myw3ICs4NDMsNyBAQCBib29sIFJl
bmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyZXIpIGNvbnN0CiBib29sIFJlbmRlclRoZW1lOjppc1JlYWRPbmx5Q29udHJvbChjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSByZW5k
ZXJlci5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Pihub2RlKSkKKyAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5vZGUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSku
bWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKCk7CiB9CkBAIC04NTEsNyArODUxLDcgQEAgYm9v
bCBSZW5kZXJUaGVtZTo6aXNSZWFkT25seUNvbnRyb2woY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJlcikgY29uc3QKIGJvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2RlKCk7
Ci0gICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVsZW1l
bnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSkuaXNTcGluQnV0dG9uRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZG93bmNh
c3Q8RWxlbWVudD4oKm5vZGUpLmhvdmVyZWQoKTsKQEAgLTg2Miw3ICs4NjIsNyBAQCBib29sIFJl
bmRlclRoZW1lOjppc0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QK
IGJvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQoY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIubm9k
ZSgpOwotICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkgfHwgIWRvd25jYXN0PEVs
ZW1lbnQ+KCpub2RlKS5pc1NwaW5CdXR0b25FbGVtZW50KCkpCisgICAgaWYgKCFpczxFbGVtZW50
Pihub2RlKSB8fCAhZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzU3BpbkJ1dHRvbkVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFNwaW5CdXR0b25FbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPihub2RlKTsKICAgICByZXR1cm4gZWxl
bWVudC0+dXBEb3duU3RhdGUoKSA9PSBTcGluQnV0dG9uRWxlbWVudDo6VXA7CkBAIC0xMDM1LDcg
KzEwMzUsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgIHBhaW50SW5mby5j
b250ZXh0LT5zZXRGaWxsQ29sb3Ioby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgTm9kZSogbm9kZSA9IG9wdGlvbnMtPml0ZW0oaSk7IGkrKykgewotICAgICAgICBBU1NF
UlQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KG5vZGUpKTsKKyAgICAgICAgQVNTRVJUKGlzPEhUTUxP
cHRpb25FbGVtZW50Pigqbm9kZSkpOwogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9u
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIFN0
cmluZyB2YWx1ZSA9IG9wdGlvbkVsZW1lbnQudmFsdWUoKTsKICAgICAgICAgaWYgKCFpbnB1dC0+
aXNWYWxpZFZhbHVlKHZhbHVlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVHdGsuY3BwCmluZGV4IDQ4Mzg4ZWJjMzBkMDVlZDc5NjExZWFlMDk5OTZhN2FiOTA4ZmRhZTAu
Ljc3MjYyOGQzY2E1OTBhNjk3NmYyZTU0NzI5NjM0NWUwZTgzOWVkM2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMjYxLDcgKzI2MSw3IEBAIHN0
YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KGNv
bnN0IFJlbmRlck9iamVjdCYgbykKICAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+
c2hhZG93SG9zdCgpIDogbnVsbHB0cjsKICAgICBpZiAoIW1lZGlhTm9kZSkKICAgICAgICAgbWVk
aWFOb2RlID0gbm9kZTsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAhaXM8SFRNTE1lZGlhRWxlbWVu
dD4obWVkaWFOb2RlKSkKKyAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1lbnQ+KG1lZGlhTm9kZSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxNZWRp
YUVsZW1lbnQ+KG1lZGlhTm9kZSk7CkBAIC0zMTYsNyArMzE2LDcgQEAgc3RhdGljIGJvb2wgbm9k
ZUhhc1BzZXVkbyhOb2RlKiBub2RlLCBjb25zdCBjaGFyKiBwc2V1ZG8pCiAKIHN0YXRpYyBib29s
IG5vZGVIYXNDbGFzcyhOb2RlKiBub2RlLCBjb25zdCBjaGFyKiBjbGFzc05hbWUpCiB7Ci0gICAg
aWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KCpub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQppbmRleCA5MjAwMjZjZDhjNmY4OTgwZjU2ODk1OTY4MTExNjQ4Njg1NzY4ZDA2Li4zMzU1NTQ2
ZWU2NzY1NWIzZGUwZThmYjdiNWFkYWJjNzk3YjNlOWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC03MjksNyArNzI5LDcgQEAgdm9pZCBSZW5kZXJU
aGVtZU1hYzo6dXBkYXRlRm9jdXNlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvKQogdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlUHJlc3NlZFN0YXRlKE5TQ2VsbCog
Y2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogewogICAgIGJvb2wgb2xkUHJlc3NlZCA9IFtj
ZWxsIGlzSGlnaGxpZ2h0ZWRdOwotICAgIGJvb2wgcHJlc3NlZCA9IG8ubm9kZSgpICYmIGlzPEVs
ZW1lbnQ+KG8ubm9kZSgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqby5ub2RlKCkpLmFjdGl2ZSgp
OworICAgIGJvb2wgcHJlc3NlZCA9IGlzPEVsZW1lbnQ+KG8ubm9kZSgpKSAmJiBkb3duY2FzdDxF
bGVtZW50Pigqby5ub2RlKCkpLmFjdGl2ZSgpOwogICAgIGlmIChwcmVzc2VkICE9IG9sZFByZXNz
ZWQpCiAgICAgICAgIFtjZWxsIHNldEhpZ2hsaWdodGVkOnByZXNzZWRdOwogfQpAQCAtMTUzMSw3
ICsxNTMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGEKIAogICAgIC8vIFVwZGF0ZSB0aGUg
dmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2xp
ZGVyVGh1bWJDZWxsLCBvKTsKLSAgICAgICAgRWxlbWVudCogZm9jdXNEZWxlZ2F0ZSA9IChvLm5v
ZGUoKSAmJiBpczxFbGVtZW50PihvLm5vZGUoKSkpID8gZG93bmNhc3Q8RWxlbWVudD4oby5ub2Rl
KCkpLT5mb2N1c0RlbGVnYXRlKCkgOiBudWxscHRyOworICAgICAgICBFbGVtZW50KiBmb2N1c0Rl
bGVnYXRlID0gaXM8RWxlbWVudD4oby5ub2RlKCkpID8gZG93bmNhc3Q8RWxlbWVudD4oKm8ubm9k
ZSgpKS5mb2N1c0RlbGVnYXRlKCkgOiBudWxscHRyOwogICAgIGlmIChmb2N1c0RlbGVnYXRlKQog
ICAgICAgICB1cGRhdGVGb2N1c2VkU3RhdGUoc2xpZGVyVGh1bWJDZWxsLCAqZm9jdXNEZWxlZ2F0
ZS0+cmVuZGVyZXIoKSk7CiAKQEAgLTE2ODMsNyArMTY4Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBj
b25zdCBQCiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7
CiAKLSAgICBpZiAoIWlucHV0LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiAoaXM8SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ+KGlucHV0KSAmJiAhZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ+KCppbnB1dCkuaXNSZWFkT25seSgpKSkKKyAgICBpZiAoIWlucHV0LT5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSAmJiAoaXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpp
bnB1dCkgJiYgIWRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqaW5wdXQpLmlz
UmVhZE9ubHkoKSkpCiAgICAgICAgIHVwZGF0ZVByZXNzZWRTdGF0ZShbc2VhcmNoIGNhbmNlbEJ1
dHRvbkNlbGxdLCBvKTsKICAgICBlbHNlIGlmIChbW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSBp
c0hpZ2hsaWdodGVkXSkKICAgICAgICAgW1tzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0gc2V0SGln
aGxpZ2h0ZWQ6Tk9dOwpAQCAtMTg1MSwxMiArMTg1MSwxMiBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0CiAgICAgLy8gZnJvbSBvdXIgbm9kZS4gQXNzdW1pbmcgdGhpcyBub2RlIGlzIHRoZSBwbHVn
aW4gb3ZlcmxheSBlbGVtZW50LCB3ZSBzaG91bGQgZ2V0IHRvIHRoZQogICAgIC8vIHBsdWdpbiBp
dHNlbGYgYnkgYXNraW5nIGZvciB0aGUgc2hhZG93IHJvb3QgcGFyZW50LCBhbmQgdGhlbiBpdHMg
cGFyZW50LgogCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4ocmVuZGVyQmxvY2suZWxlbWVudCgp
KSkKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PigqcmVuZGVyQmxvY2suZWxlbWVudCgpKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBIVE1MRWxlbWVudCYgcGx1Z0luT3ZlcmxheSA9IGRv
d25jYXN0PEhUTUxFbGVtZW50PigqcmVuZGVyQmxvY2suZWxlbWVudCgpKTsKICAgICBFbGVtZW50
KiBwYXJlbnQgPSBwbHVnSW5PdmVybGF5LnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKTsKLSAg
ICB3aGlsZSAocGFyZW50ICYmICFpczxIVE1MUGx1Z0luRWxlbWVudD4ocGFyZW50KSkKKyAgICB3
aGlsZSAocGFyZW50ICYmICFpczxIVE1MUGx1Z0luRWxlbWVudD4oKnBhcmVudCkpCiAgICAgICAg
IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwogCiAgICAgaWYg
KCFwYXJlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAKaW5kZXggZDQ1YmM1YmQ0ZjA4MjI5N2Y3ZTc3YTc3ZGJjNDUzMWY3NmU5ZWU4Mi4uZDMzYTkz
NDdiNzI2ZjgwN2Y4YjUzMjIxNzYxNzc0NDgzZDBlMTM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRp
YyBTdHJpbmcgZ2V0VGFnTmFtZShOb2RlKiBuKQogCiBzdGF0aWMgYm9vbCBpc0VtcHR5T3JVbnN0
eWxlZEFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlIHx8
ICFpczxIVE1MU3BhbkVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8SFRNTFNwYW5FbGVtZW50
Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgSFRNTEVsZW1lbnQm
IGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU3BhbkVsZW1lbnQ+KCpub2RlKTsKQEAgLTM5Myw3ICsz
OTMsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sCiAgICAgfQogICAgIAogICAgIGlmIChiZWhh
dmlvciAmIFJlbmRlckFzVGV4dFNob3dJREFuZENsYXNzKSB7Ci0gICAgICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gby5ub2RlKCkgJiYgaXM8RWxlbWVudD4oby5ub2RlKCkpID8gZG93bmNhc3Q8
RWxlbWVudD4oby5ub2RlKCkpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IGlzPEVsZW1lbnQ+KG8ubm9kZSgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG8ubm9kZSgp
KSA6IG51bGxwdHIpIHsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQogICAgICAg
ICAgICAgICAgIHRzIDw8ICIgaWQ9XCIiICsgZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSArICJc
IiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAppbmRleCBk
MzkyZDg4NzBmZTA3YWNhODJjYTcwYjU1MGRhYmFkZDE5NTczOGZmLi5mNjA1OWZlMDkxMThlNzA1
OTY4NGFkNmQ5ZGIwMzA2NTk4NjdhMDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuY3BwCkBAIC0yNzcsNyArMjc3LDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuIHJlbmRlcmVyLT5pc0Zsb2F0aW5nKCkgfHwgcmVuZGVyZXItPmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpOwogICAgIC8vIEF2b2lkIGNyZWF0aW5nIGNvbnRhaW5lcnMgZm9yIHRleHQg
d2l0aGluIHRleHQgY29udHJvbHMsIGJ1dHRvbnMsIG9yIDxzZWxlY3Q+IGJ1dHRvbnMuCiAgICAg
Tm9kZSogcGFyZW50Tm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKSA/IHJlbmRlcmVyLT5wYXJlbnQo
KS0+Z2VuZXJhdGluZ05vZGUoKSA6IG51bGxwdHI7Ci0gICAgaWYgKHBhcmVudE5vZGUgJiYgaXM8
RWxlbWVudD4ocGFyZW50Tm9kZSkgJiYgZm9ybUlucHV0VGFncygpLmNvbnRhaW5zKGRvd25jYXN0
PEVsZW1lbnQ+KCpwYXJlbnROb2RlKS50YWdRTmFtZSgpKSkKKyAgICBpZiAoaXM8RWxlbWVudD4o
cGFyZW50Tm9kZSkgJiYgZm9ybUlucHV0VGFncygpLmNvbnRhaW5zKGRvd25jYXN0PEVsZW1lbnQ+
KCpwYXJlbnROb2RlKS50YWdRTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIHRydWU7CkBAIC0zODgsNyArMzg4LDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjb250
YWluZXJDb250YWluc09uZU9mVGFncyhjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb24K
ICAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29udGFpbmVyOwogICAgIHdoaWxl
IChyZW5kZXJlcikgewogICAgICAgICBjb25zdCBOb2RlKiByZW5kZXJlck5vZGUgPSByZW5kZXJl
ci0+bm9kZSgpOwotICAgICAgICBpZiAocmVuZGVyZXJOb2RlICYmIGlzPEVsZW1lbnQ+KHJlbmRl
cmVyTm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KHJlbmRlcmVyTm9kZSkpIHsKICAg
ICAgICAgICAgIGlmICh0YWdzLmNvbnRhaW5zKGRvd25jYXN0PEVsZW1lbnQ+KCpyZW5kZXJlck5v
ZGUpLnRhZ1FOYW1lKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwCmluZGV4IDI0YzE5MGQyOTgxODg3ZWI1M2VkYWVkNzJhZTczMTRmZmUzYmExMWIu
LjNlOWE1NDI5ZmZiOWNiMmEzOTUzMDYwOTBkMmEwOTkwNTRmNTAyNzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCkBA
IC01NSw3ICs1NSw3IEBAIFJlbmRlck1hdGhNTEJsb2NrOjpSZW5kZXJNYXRoTUxCbG9jayhEb2N1
bWVudCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0CiAKIGJvb2wgUmVuZGVyTWF0
aE1MQmxvY2s6OmlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYgY2hpbGQsIGNvbnN0
IFJlbmRlclN0eWxlJikgY29uc3QKIHsKLSAgICByZXR1cm4gY2hpbGQubm9kZSgpICYmIGlzPEVs
ZW1lbnQ+KCpjaGlsZC5ub2RlKCkpOworICAgIHJldHVybiBpczxFbGVtZW50PihjaGlsZC5ub2Rl
KCkpOwogfQogCiBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MQmxvY2s+IFJlbmRlck1hdGhNTEJsb2Nr
OjpjcmVhdGVBbm9ueW1vdXNNYXRoTUxCbG9jaygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAKaW5kZXggZTExNDY0ZmVl
MjA1OTY5YjZjZDhhNzc0MTUzNmM3NTQ1MjJhMDI1My4uODgzYTIyZGJiZWI5ZjJlZDllNmE2OWM0
NmU2ODc0OGRlM2RkYjI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcApAQCAtNjcsOCArNjcsOCBAQCB2b2lkIFJl
bmRlclNWR0dyYWRpZW50U3RvcDo6bGF5b3V0KCkKIAogU1ZHR3JhZGllbnRFbGVtZW50KiBSZW5k
ZXJTVkdHcmFkaWVudFN0b3A6OmdyYWRpZW50RWxlbWVudCgpCiB7Ci0gICAgaWYgKGVsZW1lbnQo
KS5wYXJlbnRFbGVtZW50KCkgJiYgaXM8U1ZHR3JhZGllbnRFbGVtZW50PigqZWxlbWVudCgpLnBh
cmVudEVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiAmZG93bmNhc3Q8U1ZHR3JhZGllbnRFbGVt
ZW50PigqZWxlbWVudCgpLnBhcmVudEVsZW1lbnQoKSk7CisgICAgaWYgKGlzPFNWR0dyYWRpZW50
RWxlbWVudD4oZWxlbWVudCgpLnBhcmVudEVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxTVkdHcmFkaWVudEVsZW1lbnQ+KGVsZW1lbnQoKS5wYXJlbnRFbGVtZW50KCkpOwogICAg
IHJldHVybiBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAppbmRl
eCA5MGJhOGEwNjYzYmIwMWJhZTUyM2E4YTk4MzFiY2U4ZDRjNTU0NDVhLi5mMzZhOTIwZTFjNmJj
NjA1NzM4ZTM4NGFjZGZmNDMzMWE2NjgzM2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5l
ci5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFp
bmVyOjpjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpCiAgICAgICAgIHVzZUVsZW1lbnQgPSAmZG93
bmNhc3Q8U1ZHVXNlRWxlbWVudD4oZWxlbWVudCk7CiAgICAgZWxzZSBpZiAoZWxlbWVudC5pc0lu
U2hhZG93VHJlZSgpICYmIGlzPFNWR0dFbGVtZW50PihlbGVtZW50KSkgewogICAgICAgICBTVkdF
bGVtZW50KiBjb3JyZXNwb25kaW5nRWxlbWVudCA9IGVsZW1lbnQuY29ycmVzcG9uZGluZ0VsZW1l
bnQoKTsKLSAgICAgICAgaWYgKGNvcnJlc3BvbmRpbmdFbGVtZW50ICYmIGlzPFNWR1VzZUVsZW1l
bnQ+KGNvcnJlc3BvbmRpbmdFbGVtZW50KSkKKyAgICAgICAgaWYgKGlzPFNWR1VzZUVsZW1lbnQ+
KGNvcnJlc3BvbmRpbmdFbGVtZW50KSkKICAgICAgICAgICAgIHVzZUVsZW1lbnQgPSBkb3duY2Fz
dDxTVkdVc2VFbGVtZW50Pihjb3JyZXNwb25kaW5nRWxlbWVudCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApp
bmRleCA5ZjUxMjYxMDk5MTVlMTIxOWJlZjg5YzljYmIyZmM4N2QwYTc2OGUxLi5lYjZiODliNWUw
YWQ0ZmZiODNlMWJmZjE4N2MxY2I2NzlmOGZkN2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTEwNSw3ICsxMDUs
NyBAQCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFBhaQogICAgIGJvb2wgaXNvbGF0ZU1hc2tGb3JCbGVu
ZGluZyA9IGZhbHNlOwogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKLSAgICBpZiAoc3Zn
U3R5bGUuaGFzTWFza2VyKCkgJiYgaXM8U1ZHR3JhcGhpY3NFbGVtZW50Pihkb3duY2FzdDxTVkdF
bGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKSkgeworICAgIGlmIChzdmdTdHlsZS5oYXNNYXNr
ZXIoKSAmJiBpczxTVkdHcmFwaGljc0VsZW1lbnQ+KGRvd25jYXN0PFNWR0VsZW1lbnQ+KCpyZW5k
ZXJlci5lbGVtZW50KCkpKSkgewogICAgICAgICBTVkdHcmFwaGljc0VsZW1lbnQmIGdyYXBoaWNz
RWxlbWVudCA9IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKnJlbmRlcmVyLmVsZW1lbnQo
KSk7CiAgICAgICAgIGlzb2xhdGVNYXNrRm9yQmxlbmRpbmcgPSBncmFwaGljc0VsZW1lbnQuc2hv
dWxkSXNvbGF0ZUJsZW5kaW5nKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJl
c29sdmVUcmVlLmNwcAppbmRleCAyMmU4ZTFhZDZjYjI4Zjc2ZDJkMTVmYzQ2ZDUxM2E3YzA0YTU3
NWYzLi5jMjRjMjE2Y2RhOTNiMDEwNDE0ZDYyZWNiZTkzMTI2Y2NmNjNjYmE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcApAQCAtMzU5LDEzICszNTksMTMgQEAg
c3RhdGljIHZvaWQgaW52YWxpZGF0ZVdoaXRlc3BhY2VPbmx5VGV4dFNpYmxpbmdzQWZ0ZXJBdHRh
Y2hJZk5lZWRlZChOb2RlJiBjdXJyZW4KICAgICBmb3IgKE5vZGUqIHNpYmxpbmcgPSBjdXJyZW50
Lm5leHRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgIGlmIChzaWJsaW5nLT5uZWVkc1N0eWxlUmVjYWxjKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChzaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKGlzPEVsZW1lbnQ+KCpzaWJsaW5nKSkgewogICAgICAgICAgICAgLy8gVGV4dCByZW5k
ZXJlcnMgYmV5b25kIHJlbmRlcmVkIGVsZW1lbnRzIGNhbid0IGJlIGFmZmVjdGVkLgogICAgICAg
ICAgICAgaWYgKCFzaWJsaW5nLT5yZW5kZXJlcigpIHx8IGlzUmVuZGVyZXJSZXBhcmVudGVkKHNp
YmxpbmctPnJlbmRlcmVyKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICghaXM8VGV4dD4oc2libGluZykpCisg
ICAgICAgIGlmICghaXM8VGV4dD4oKnNpYmxpbmcpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIFRleHQmIHRleHRTaWJsaW5nID0gZG93bmNhc3Q8VGV4dD4oKnNpYmxpbmcpOwogICAg
ICAgICBpZiAoIXRleHRTaWJsaW5nLmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKQEAgLTQ3OCwx
MSArNDc4LDExIEBAIHN0YXRpYyB2b2lkIGF0dGFjaENoaWxkcmVuKENvbnRhaW5lck5vZGUmIGN1
cnJlbnQsIFJlbmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSwKICAgICAgICAgICAgIHJlbmRlclRy
ZWVQb3NpdGlvbi5pbnZhbGlkYXRlTmV4dFNpYmxpbmcoKmNoaWxkLT5yZW5kZXJlcigpKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpczxUZXh0PihjaGls
ZCkpIHsKKyAgICAgICAgaWYgKGlzPFRleHQ+KCpjaGlsZCkpIHsKICAgICAgICAgICAgIGF0dGFj
aFRleHRSZW5kZXJlcihkb3duY2FzdDxUZXh0PigqY2hpbGQpLCByZW5kZXJUcmVlUG9zaXRpb24p
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzPEVsZW1l
bnQ+KGNoaWxkKSkKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjaGlsZCkpCiAgICAgICAgICAg
ICBhdHRhY2hSZW5kZXJUcmVlKGRvd25jYXN0PEVsZW1lbnQ+KCpjaGlsZCksIGluaGVyaXRlZFN0
eWxlLCByZW5kZXJUcmVlUG9zaXRpb24sIG51bGxwdHIpOwogICAgIH0KIH0KQEAgLTQ5NSwxMyAr
NDk1LDEzIEBAIHN0YXRpYyB2b2lkIGF0dGFjaERpc3RyaWJ1dGVkQ2hpbGRyZW4oSW5zZXJ0aW9u
UG9pbnQmIGluc2VydGlvblBvaW50LCBSZW5kZXJTdHlsCiAgICAgZm9yIChOb2RlKiBjdXJyZW50
ID0gaW5zZXJ0aW9uUG9pbnQuZmlyc3REaXN0cmlidXRlZCgpOyBjdXJyZW50OyBjdXJyZW50ID0g
aW5zZXJ0aW9uUG9pbnQubmV4dERpc3RyaWJ1dGVkVG8oY3VycmVudCkpIHsKICAgICAgICAgaWYg
KGN1cnJlbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZW5kZXJUcmVlUG9zaXRpb24uaW52
YWxpZGF0ZU5leHRTaWJsaW5nKCpjdXJyZW50LT5yZW5kZXJlcigpKTsKLSAgICAgICAgaWYgKGlz
PFRleHQ+KGN1cnJlbnQpKSB7CisgICAgICAgIGlmIChpczxUZXh0PigqY3VycmVudCkpIHsKICAg
ICAgICAgICAgIGlmIChjdXJyZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKGRvd25jYXN0PFRleHQ+KCpjdXJy
ZW50KSwgcmVuZGVyVHJlZVBvc2l0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChpczxFbGVtZW50PihjdXJyZW50KSkgeworICAgICAgICBpZiAoaXM8
RWxlbWVudD4oKmN1cnJlbnQpKSB7CiAgICAgICAgICAgICBFbGVtZW50JiBjdXJyZW50RWxlbWVu
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChjdXJyZW50
RWxlbWVudC5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIGRldGFjaFJlbmRlclRyZWUoY3Vy
cmVudEVsZW1lbnQpOwpAQCAtNjUxLDExICs2NTEsMTEgQEAgc3RhdGljIHZvaWQgYXR0YWNoUmVu
ZGVyVHJlZShFbGVtZW50JiBjdXJyZW50LCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUsIFJl
bmQKIHN0YXRpYyB2b2lkIGRldGFjaERpc3RyaWJ1dGVkQ2hpbGRyZW4oSW5zZXJ0aW9uUG9pbnQm
IGluc2VydGlvblBvaW50KQogewogICAgIGZvciAoTm9kZSogY3VycmVudCA9IGluc2VydGlvblBv
aW50LmZpcnN0RGlzdHJpYnV0ZWQoKTsgY3VycmVudDsgY3VycmVudCA9IGluc2VydGlvblBvaW50
Lm5leHREaXN0cmlidXRlZFRvKGN1cnJlbnQpKSB7Ci0gICAgICAgIGlmIChpczxUZXh0PihjdXJy
ZW50KSkgeworICAgICAgICBpZiAoaXM8VGV4dD4oKmN1cnJlbnQpKSB7CiAgICAgICAgICAgICBk
ZXRhY2hUZXh0UmVuZGVyZXIoZG93bmNhc3Q8VGV4dD4oKmN1cnJlbnQpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpczxFbGVtZW50PihjdXJyZW50KSkK
KyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjdXJyZW50KSkKICAgICAgICAgICAgIGRldGFjaFJl
bmRlclRyZWUoZG93bmNhc3Q8RWxlbWVudD4oKmN1cnJlbnQpKTsKICAgICB9CiB9CkBAIC02NjYs
MTEgKzY2NiwxMSBAQCBzdGF0aWMgdm9pZCBkZXRhY2hDaGlsZHJlbihDb250YWluZXJOb2RlJiBj
dXJyZW50LCBEZXRhY2hUeXBlIGRldGFjaFR5cGUpCiAgICAgICAgIGRldGFjaERpc3RyaWJ1dGVk
Q2hpbGRyZW4oZG93bmNhc3Q8SW5zZXJ0aW9uUG9pbnQ+KGN1cnJlbnQpKTsKIAogICAgIGZvciAo
Tm9kZSogY2hpbGQgPSBjdXJyZW50LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPFRleHQ+KGNoaWxkKSkgeworICAgICAg
ICBpZiAoaXM8VGV4dD4oKmNoaWxkKSkgewogICAgICAgICAgICAgU3R5bGU6OmRldGFjaFRleHRS
ZW5kZXJlcihkb3duY2FzdDxUZXh0PigqY2hpbGQpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChpczxFbGVtZW50PihjaGlsZCkpCisgICAgICAgIGlmIChp
czxFbGVtZW50PigqY2hpbGQpKQogICAgICAgICAgICAgZGV0YWNoUmVuZGVyVHJlZShkb3duY2Fz
dDxFbGVtZW50PigqY2hpbGQpLCBkZXRhY2hUeXBlKTsKICAgICB9CiAgICAgY3VycmVudC5jbGVh
ckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwpAQCAtODE1LDExICs4MTUsMTEgQEAgc3RhdGljIHZv
aWQgcmVzb2x2ZVNoYWRvd1RyZWUoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgRWxlbWVudCYgaG9z
dCwgU3R5bGU6OkNoYW4KICAgICBmb3IgKE5vZGUqIGNoaWxkID0gc2hhZG93Um9vdC5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlm
IChjaGlsZC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlclRyZWVQb3NpdGlvbi5pbnZh
bGlkYXRlTmV4dFNpYmxpbmcoKmNoaWxkLT5yZW5kZXJlcigpKTsKLSAgICAgICAgaWYgKGlzPFRl
eHQ+KGNoaWxkKSAmJiBjaGlsZC0+bmVlZHNTdHlsZVJlY2FsYygpKSB7CisgICAgICAgIGlmIChp
czxUZXh0PigqY2hpbGQpICYmIGNoaWxkLT5uZWVkc1N0eWxlUmVjYWxjKCkpIHsKICAgICAgICAg
ICAgIHJlc29sdmVUZXh0Tm9kZShkb3duY2FzdDxUZXh0PigqY2hpbGQpLCByZW5kZXJUcmVlUG9z
aXRpb24pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlz
PEVsZW1lbnQ+KGNoaWxkKSkKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjaGlsZCkpCiAgICAg
ICAgICAgICByZXNvbHZlVHJlZShkb3duY2FzdDxFbGVtZW50PigqY2hpbGQpLCBob3N0LnJlbmRl
cmVyKCktPnN0eWxlKCksIHJlbmRlclRyZWVQb3NpdGlvbiwgY2hhbmdlKTsKICAgICB9CiAKQEAg
LTkzOSwxMSArOTM5LDExIEBAIHZvaWQgcmVzb2x2ZVRyZWUoRWxlbWVudCYgY3VycmVudCwgUmVu
ZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlLCBSZW5kZXJUcmVlUG9zaXRpCiAgICAgICAgIGZvciAo
Tm9kZSogY2hpbGQgPSBjdXJyZW50LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNoaWxkUmVu
ZGVyZXIgPSBjaGlsZC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICBjaGlsZFJlbmRlclRy
ZWVQb3NpdGlvbi5pbnZhbGlkYXRlTmV4dFNpYmxpbmcoKmNoaWxkUmVuZGVyZXIpOwotICAgICAg
ICAgICAgaWYgKGlzPFRleHQ+KGNoaWxkKSAmJiBjaGlsZC0+bmVlZHNTdHlsZVJlY2FsYygpKSB7
CisgICAgICAgICAgICBpZiAoaXM8VGV4dD4oKmNoaWxkKSAmJiBjaGlsZC0+bmVlZHNTdHlsZVJl
Y2FsYygpKSB7CiAgICAgICAgICAgICAgICAgcmVzb2x2ZVRleHROb2RlKGRvd25jYXN0PFRleHQ+
KCpjaGlsZCksIGNoaWxkUmVuZGVyVHJlZVBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghaXM8RWxlbWVudD4oY2hpbGQp
KQorICAgICAgICAgICAgaWYgKCFpczxFbGVtZW50PigqY2hpbGQpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgICAgICBFbGVtZW50JiBjaGlsZEVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50PigqY2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKaW5kZXggNGVj
ZjUyYmZiYjQyMmZjOGQzMDZkNWNhZTI3YjZkOWZjOTA0NzMwOC4uNTUxMDZjZTZhNmUwNjk2OGJl
ZDg5N2E0ZjI2MjhmMzUxMjI5Y2IwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCkBA
IC0xNjAsNyArMTYwLDcgQEAgdm9pZCBTVkdBRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCiAKICAgICAgICAgICAgIGlmICh1cmxbMF0gPT0gJyMnKSB7CiAgICAgICAg
ICAgICAgICAgRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRyZWVTY29wZSgpLmdldEVsZW1lbnRC
eUlkKHVybC5zdWJzdHJpbmdTaGFyaW5nSW1wbCgxKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRh
cmdldEVsZW1lbnQgJiYgaXM8U1ZHU01JTEVsZW1lbnQ+KCp0YXJnZXRFbGVtZW50KSkgeworICAg
ICAgICAgICAgICAgIGlmIChpczxTVkdTTUlMRWxlbWVudD4odGFyZ2V0RWxlbWVudCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8U1ZHU01JTEVsZW1lbnQ+KCp0YXJnZXRFbGVtZW50
KS5iZWdpbkJ5TGlua0FjdGl2YXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAKaW5kZXggYTZmMDdiODE2MDUwZTBlNDBh
YmZmYzVmMGMzYmVmNDJmN2RiMjRlMC4uNGFkMDYzZGU4ZWUyYTY3MTlkZDk1MWQzYmE1YmU3YzZi
NzczZmQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAKQEAg
LTk0LDEyICs5NCwxMiBAQCBib29sIFNWR0FsdEdseXBoRWxlbWVudDo6aGFzVmFsaWRHbHlwaEVs
ZW1lbnRzKFZlY3RvcjxTdHJpbmc+JiBnbHlwaE5hbWVzKSBjb25zdAogICAgIGlmICghZWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzPFNWR0dseXBoRWxlbWVudD4o
ZWxlbWVudCkpIHsKKyAgICBpZiAoaXM8U1ZHR2x5cGhFbGVtZW50PigqZWxlbWVudCkpIHsKICAg
ICAgICAgZ2x5cGhOYW1lcy5hcHBlbmQodGFyZ2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgaWYgKGlzPFNWR0FsdEdseXBoRGVmRWxlbWVudD4oZWxlbWVudCkKKyAgICBp
ZiAoaXM8U1ZHQWx0R2x5cGhEZWZFbGVtZW50PigqZWxlbWVudCkKICAgICAgICAgJiYgZG93bmNh
c3Q8U1ZHQWx0R2x5cGhEZWZFbGVtZW50PigqZWxlbWVudCkuaGFzVmFsaWRHbHlwaEVsZW1lbnRz
KGdseXBoTmFtZXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKaW5kZXggODU1YTIzODZkYTMwZmM0Mjc5
Nzg4M2FkMzExNTY4ZDk2MDc2OWE4My4uYzU1OTQzYWUxNGE4NDNmOTFiMTYyM2JjODM0N2JkZTlm
YWY2MjBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuY3BwCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhh
c1ZhbGlkQXR0cmlidXRlVHlwZSgpCiAgICAgaWYgKHRhcmdldEVsZW1lbnQtPmhhc1RhZ05hbWUo
Z1RhZykKICAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFtZShkZWZzVGFnKQogICAg
ICAgICB8fCB0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKHVzZVRhZykKLSAgICAgICAgfHwgaXM8
U1ZHSW1hZ2VFbGVtZW50Pih0YXJnZXRFbGVtZW50KQorICAgICAgICB8fCBpczxTVkdJbWFnZUVs
ZW1lbnQ+KCp0YXJnZXRFbGVtZW50KQogICAgICAgICB8fCB0YXJnZXRFbGVtZW50LT5oYXNUYWdO
YW1lKHN3aXRjaFRhZykKICAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFtZShwYXRo
VGFnKQogICAgICAgICB8fCB0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKHJlY3RUYWcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0RvY3VtZW50LmNwcAppbmRleCAxNDEzZGY0Yzk3OWVhMTY2MzNiNWJmOGFjY2Qw
OGUyMzEzMTgzYTQxLi4zYjkwZDNjODgzODNmNDY3MDQyMDUxYjExNzZkOGNmYTg3M2E2NzJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgU1ZHRG9jdW1l
bnQ6OlNWR0RvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCiBTVkdTVkdFbGVt
ZW50KiBTVkdEb2N1bWVudDo6cm9vdEVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBkb2N1bWVudEVsZW1lbnQoKTsKLSAgICBpZiAoZWxlbWVudCAmJiBpczxTVkdTVkdF
bGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4oZWxlbWVudCkpCiAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdTVkdFbGVtZW50PihlbGVtZW50KTsKIAogICAgIHJl
dHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDUyM2E3NTZjMTQ2
MDBjYzY0ZmFiOWFlYjBkMTdkNWM0OGQ2YjJkMDIuLmI5Mzk5ZjMxMWYwNzA0NjIwMTkxMzlhMzVk
ZWE1YjQzYjNlN2YwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTMyMCw3ICsz
MjAsNyBAQCBTVkdFbGVtZW50UmFyZURhdGEmIFNWR0VsZW1lbnQ6OmVuc3VyZVNWR1JhcmVEYXRh
KCkKIAogYm9vbCBTVkdFbGVtZW50Ojppc091dGVybW9zdFNWR1NWR0VsZW1lbnQoKSBjb25zdAog
ewotICAgIGlmICghaXM8U1ZHU1ZHRWxlbWVudD4odGhpcykpCisgICAgaWYgKCFpczxTVkdTVkdF
bGVtZW50PigqdGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIHdlJ3Jl
IGxpdmluZyBpbiBhIHNoYWRvdyB0cmVlLCB3ZSdyZSBhIDxzdmc+IGVsZW1lbnQgdGhhdCBnb3Qg
Y3JlYXRlZCBhcyByZXBsYWNlbWVudApAQCAtMzk2LDcgKzM5Niw3IEBAIFNWR1NWR0VsZW1lbnQq
IFNWR0VsZW1lbnQ6Om93bmVyU1ZHRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgQ29udGFpbmVyTm9k
ZSogbm9kZSA9IHBhcmVudE9yU2hhZG93SG9zdE5vZGUoKTsKICAgICB3aGlsZSAobm9kZSkgewot
ICAgICAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4obm9kZSkpCisgICAgICAgIGlmIChpczxTVkdT
VkdFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU1ZHRWxl
bWVudD4obm9kZSk7CiAKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE9yU2hhZG93SG9zdE5v
ZGUoKTsKQEAgLTQxMSw3ICs0MTEsNyBAQCBTVkdFbGVtZW50KiBTVkdFbGVtZW50Ojp2aWV3cG9y
dEVsZW1lbnQoKSBjb25zdAogICAgIC8vIHRvIGRldGVybWluZSB0aGUgIm92ZXJmbG93IiBwcm9w
ZXJ0eS4gPHVzZT4gb24gPHN5bWJvbD4gd291bGRuJ3Qgd29yayBvdGhlcndoaXNlLgogICAgIENv
bnRhaW5lck5vZGUqIG5vZGUgPSBwYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CiAgICAgd2hpbGUg
KG5vZGUpIHsKLSAgICAgICAgaWYgKGlzPFNWR1NWR0VsZW1lbnQ+KG5vZGUpIHx8IGlzPFNWR0lt
YWdlRWxlbWVudD4obm9kZSkgfHwgbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ltYm9sVGFn
KSkKKyAgICAgICAgaWYgKGlzPFNWR1NWR0VsZW1lbnQ+KCpub2RlKSB8fCBpczxTVkdJbWFnZUVs
ZW1lbnQ+KCpub2RlKSB8fCBub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzeW1ib2xUYWcpKQog
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR0VsZW1lbnQ+KG5vZGUpOwogCiAgICAgICAg
IG5vZGUgPSBub2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnREYXRhLmNwcAppbmRleCA1MDkzYjJlZDFiN2VhNjIzOGY3NjY2ZDhhODk4MGQ3NDc5YTAzZGJk
Li4yNzJjZTk0MmI4N2QyMWIwYTdiNDA0OGMxOWM0NTJiNjdmODQ3Y2UxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RGF0YS5jcHAKQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIFNWR0ZvbnREYXRhOjph
cHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaERhdGEm
IGdseQogICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50UmVuZGVyZXJFbGVtZW50ID0gcGFyZW50
UmVuZGVyZXItPmVsZW1lbnQoKSkgewogICAgICAgICAgICAgbGFuZ3VhZ2UgPSBwYXJlbnRSZW5k
ZXJlckVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOwogCi0gICAgICAg
ICAgICBpZiAoaXM8U1ZHQWx0R2x5cGhFbGVtZW50PihwYXJlbnRSZW5kZXJlckVsZW1lbnQpKSB7
CisgICAgICAgICAgICBpZiAoaXM8U1ZHQWx0R2x5cGhFbGVtZW50PigqcGFyZW50UmVuZGVyZXJF
bGVtZW50KSkgewogICAgICAgICAgICAgICAgIFNWR0FsdEdseXBoRWxlbWVudCYgYWx0R2x5cGgg
PSBkb3duY2FzdDxTVkdBbHRHbHlwaEVsZW1lbnQ+KCpwYXJlbnRSZW5kZXJlckVsZW1lbnQpOwog
ICAgICAgICAgICAgICAgIGlmICghYWx0R2x5cGguaGFzVmFsaWRHbHlwaEVsZW1lbnRzKGFsdEds
eXBoTmFtZXMpKQogICAgICAgICAgICAgICAgICAgICBhbHRHbHlwaE5hbWVzLmNsZWFyKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCmluZGV4IDJkZmM3NmU1YjIy
ZTBjN2FjNjQ0YTE5MjBhZmViYzcyMmY2YTkzYmEuLjA2ZGQyNDgwNGIyNDdlNWQ5MzZmNTU0MWQ4
MGJkY2I1NjY2MDUzMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFj
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
Y3BwCkBAIC0yMTYsNyArMjE2LDcgQEAgU3RyaW5nIFNWR0ZvbnRGYWNlRWxlbWVudDo6Zm9udEZh
bWlseSgpIGNvbnN0CiBTVkdGb250RWxlbWVudCogU1ZHRm9udEZhY2VFbGVtZW50Ojphc3NvY2lh
dGVkRm9udEVsZW1lbnQoKSBjb25zdAogewogICAgIEFTU0VSVChwYXJlbnROb2RlKCkgPT0gbV9m
b250RWxlbWVudCk7Ci0gICAgQVNTRVJUKCFwYXJlbnROb2RlKCkgfHwgaXM8U1ZHRm9udEVsZW1l
bnQ+KHBhcmVudE5vZGUoKSkpOworICAgIEFTU0VSVCghcGFyZW50Tm9kZSgpIHx8IGlzPFNWR0Zv
bnRFbGVtZW50PigqcGFyZW50Tm9kZSgpKSk7CiAgICAgcmV0dXJuIG1fZm9udEVsZW1lbnQ7CiB9
CiAKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZv
bnRGYWNlKCkKICAgICAvLyB3ZSBjdXJyZW50bHkgaWdub3JlIGFsbCBidXQgdGhlIGZpcnN0IHNy
YyBlbGVtZW50LCBhbHRlcm5hdGl2ZWx5IHdlIGNvdWxkIGNvbmNhdCB0aGVtCiAgICAgYXV0byBz
cmNFbGVtZW50ID0gY2hpbGRyZW5PZlR5cGU8U1ZHRm9udEZhY2VTcmNFbGVtZW50PigqdGhpcyku
Zmlyc3QoKTsKIAotICAgIGJvb2wgZGVzY3JpYmVzUGFyZW50Rm9udCA9IGlzPFNWR0ZvbnRFbGVt
ZW50PihwYXJlbnROb2RlKCkpOworICAgIGJvb2wgZGVzY3JpYmVzUGFyZW50Rm9udCA9IGlzPFNW
R0ZvbnRFbGVtZW50PigqcGFyZW50Tm9kZSgpKTsKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBs
aXN0OwogCiAgICAgaWYgKGRlc2NyaWJlc1BhcmVudEZvbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZVNyY0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHAKaW5kZXggMmY4MDZiYmJiMjZkZGM4NjRhNWYx
ZjMwYjlhYmRkYWJjOGY1ZGU3OC4uNmFjMWQ3YmY4YTBhY2Y3Y2JhMWYwODc5MTRmNGI5MDE1NWVj
ZTU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlU3JjRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHAK
QEAgLTYzLDcgKzYzLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IFNWR0ZvbnRGYWNlU3Jj
RWxlbWVudDo6c3JjVmFsdWUoKSBjb25zdAogdm9pZCBTVkdGb250RmFjZVNyY0VsZW1lbnQ6OmNo
aWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQogewogICAgIFNWR0VsZW1l
bnQ6OmNoaWxkcmVuQ2hhbmdlZChjaGFuZ2UpOwotICAgIGlmIChwYXJlbnROb2RlKCkgJiYgaXM8
U1ZHRm9udEZhY2VFbGVtZW50PihwYXJlbnROb2RlKCkpKQorICAgIGlmIChpczxTVkdGb250RmFj
ZUVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpCiAgICAgICAgIGRvd25jYXN0PFNWR0ZvbnRGYWNlRWxl
bWVudD4oKnBhcmVudE5vZGUoKSkucmVidWlsZEZvbnRGYWNlKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKaW5kZXggZDkxYTQ3YmFmOWEzNTQzMmY1ZjExY2FjYzVk
M2FhOWQzMGE3OWZhNi4uZmExMjI1MDBlNzA2ZjZlMjViOTYwYWZmYTQyNTM4NzNkNGE1YjMzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAg
UGFzc1JlZlB0cjxTVkdHbHlwaEVsZW1lbnQ+IFNWR0dseXBoRWxlbWVudDo6Y3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUKIHZvaWQgU1ZHR2x5cGhFbGVtZW50OjppbnZhbGlkYXRl
R2x5cGhDYWNoZSgpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogZm9udE5vZGUgPSBwYXJlbnROb2Rl
KCk7Ci0gICAgaWYgKGZvbnROb2RlICYmIGlzPFNWR0ZvbnRFbGVtZW50Pihmb250Tm9kZSkpCisg
ICAgaWYgKGlzPFNWR0ZvbnRFbGVtZW50Pihmb250Tm9kZSkpCiAgICAgICAgIGRvd25jYXN0PFNW
R0ZvbnRFbGVtZW50PigqZm9udE5vZGUpLmludmFsaWRhdGVHbHlwaENhY2hlKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKaW5kZXggNDcyYTYzMzkwZTk5MWMwYTg1
ZDQxMzg2NjZjYTU5ZWEwMGMyYjlmOC4uYmZkOTMxOWNhYTkxYzljN2NiNjUwOThjOWNlYjcyZjg4
NTc2OWI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKQEAgLTQ0LDcg
KzQ0LDcgQEAgUGFzc1JlZlB0cjxTVkdIS2VybkVsZW1lbnQ+IFNWR0hLZXJuRWxlbWVudDo6Y3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUKIE5vZGU6Okluc2VydGlvbk5vdGlmaWNh
dGlvblJlcXVlc3QgU1ZHSEtlcm5FbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYg
cm9vdFBhcmVudCkKIHsKICAgICBDb250YWluZXJOb2RlKiBmb250Tm9kZSA9IHBhcmVudE5vZGUo
KTsKLSAgICBpZiAoZm9udE5vZGUgJiYgaXM8U1ZHRm9udEVsZW1lbnQ+KGZvbnROb2RlKSkKKyAg
ICBpZiAoaXM8U1ZHRm9udEVsZW1lbnQ+KGZvbnROb2RlKSkKICAgICAgICAgZG93bmNhc3Q8U1ZH
Rm9udEVsZW1lbnQ+KCpmb250Tm9kZSkuaW52YWxpZGF0ZUdseXBoQ2FjaGUoKTsKIAogICAgIHJl
dHVybiBTVkdFbGVtZW50OjppbnNlcnRlZEludG8ocm9vdFBhcmVudCk7CkBAIC01Myw3ICs1Myw3
IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHSEtlcm5FbGVtZW50Ojpp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYKIHZvaWQgU1ZHSEtlcm5FbGVtZW50OjpyZW1vdmVk
RnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQogewogICAgIENvbnRhaW5lck5vZGUqIGZv
bnROb2RlID0gcGFyZW50Tm9kZSgpOwotICAgIGlmIChmb250Tm9kZSAmJiBpczxTVkdGb250RWxl
bWVudD4oZm9udE5vZGUpKQorICAgIGlmIChpczxTVkdGb250RWxlbWVudD4oZm9udE5vZGUpKQog
ICAgICAgICBkb3duY2FzdDxTVkdGb250RWxlbWVudD4oKmZvbnROb2RlKS5pbnZhbGlkYXRlR2x5
cGhDYWNoZSgpOwogCiAgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKaW5kZXggYzA1YTczZTllMDJjNmUx
NjEyZWI4ZjQ4N2U2YzhkMjkxOTk3N2I1YS4uYjlhNjkwMTMzNzkxNmQzNmQ1MTA2ZDM4MGM3NmRj
NGIxNDU5Njc1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcApAQCAt
MzE4LDcgKzMxOCw3IEBAIGJvb2wgU1ZHTGVuZ3RoQ29udGV4dDo6ZGV0ZXJtaW5lVmlld3BvcnQo
RmxvYXRTaXplJiB2aWV3cG9ydFNpemUpIGNvbnN0CiAKICAgICAvLyBUYWtlIHNpemUgZnJvbSBu
ZWFyZXN0IHZpZXdwb3J0IGVsZW1lbnQuCiAgICAgU1ZHRWxlbWVudCogdmlld3BvcnRFbGVtZW50
ID0gbV9jb250ZXh0LT52aWV3cG9ydEVsZW1lbnQoKTsKLSAgICBpZiAoIXZpZXdwb3J0RWxlbWVu
dCB8fCAhaXM8U1ZHU1ZHRWxlbWVudD4odmlld3BvcnRFbGVtZW50KSkKKyAgICBpZiAoIWlzPFNW
R1NWR0VsZW1lbnQ+KHZpZXdwb3J0RWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGNvbnN0IFNWR1NWR0VsZW1lbnQmIHN2ZyA9IGRvd25jYXN0PFNWR1NWR0VsZW1lbnQ+KCp2
aWV3cG9ydEVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVh
ckdyYWRpZW50RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmNwcAppbmRleCBkYzRmMmIyMzIyYzE3ODRjZWIyYzc5MDdlZTc0NDRkZTI3YzI5
MDhiLi5lNzI1YmQ5YTk0Yzg2M2NkMGY3YmZmNTIxNWYzMDE5ODI0YzYzMGI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcApAQCAtMTczLDcg
KzE3Myw3IEBAIGJvb2wgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3JhZGllbnRB
dHRyaWJ1dGVzKExpbmVhckdyYWRpZW50QXR0cmlidXRlCiAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICAgLy8gUmVzcGVjdCB4bGluazpocmVmLCB0YWtlIGF0dHJpYnV0ZXMgZnJvbSByZWZlcmVu
Y2VkIGVsZW1lbnQKICAgICAgICAgTm9kZSogcmVmTm9kZSA9IFNWR1VSSVJlZmVyZW5jZTo6dGFy
Z2V0RWxlbWVudEZyb21JUklTdHJpbmcoY3VycmVudC0+aHJlZigpLCBkb2N1bWVudCgpKTsKLSAg
ICAgICAgaWYgKHJlZk5vZGUgJiYgaXM8U1ZHR3JhZGllbnRFbGVtZW50PigqcmVmTm9kZSkpIHsK
KyAgICAgICAgaWYgKGlzPFNWR0dyYWRpZW50RWxlbWVudD4ocmVmTm9kZSkpIHsKICAgICAgICAg
ICAgIGN1cnJlbnQgPSBkb3duY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQ+KHJlZk5vZGUpOwogCiAg
ICAgICAgICAgICAvLyBDeWNsZSBkZXRlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdMb2NhdGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5j
cHAKaW5kZXggZmZjNGI2Y2E2MmZiNWQ3NmUyZmJjYmNjMjZjY2I4ZGE1MDY3NTMxNi4uOWYyYTU1
NGEzNjI0ZTkwMjU0NmYyOWQwY2JiMWU5NjJlMmU0ODNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xv
Y2F0YWJsZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAgc3RhdGljIGJvb2wgaXNWaWV3cG9ydEVsZW1l
bnQoTm9kZSogbm9kZSkKICAgICByZXR1cm4gKG5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2
Z1RhZykKICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ltYm9sVGFnKQog
ICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWduT2JqZWN0VGFnKQot
ICAgICAgICB8fCBpczxTVkdJbWFnZUVsZW1lbnQ+KG5vZGUpKTsKKyAgICAgICAgfHwgaXM8U1ZH
SW1hZ2VFbGVtZW50Pigqbm9kZSkpOwogfQogCiBTVkdFbGVtZW50KiBTVkdMb2NhdGFibGU6Om5l
YXJlc3RWaWV3cG9ydEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCkKQEAgLTEwMSw3
ICsxMDEsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxlOjpnZXRUcmFuc2Zvcm1Ub0Vs
ZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0LCBFeGNlcHRpbwogewogICAgIEFmZmluZVRyYW5zZm9y
bSBjdG0gPSBnZXRDVE0oc3R5bGVVcGRhdGVTdHJhdGVneSk7CiAKLSAgICBpZiAodGFyZ2V0ICYm
IGlzPFNWR0dyYXBoaWNzRWxlbWVudD4odGFyZ2V0KSkgeworICAgIGlmIChpczxTVkdHcmFwaGlj
c0VsZW1lbnQ+KHRhcmdldCkpIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRhcmdldENUTSA9
IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKnRhcmdldCkuZ2V0Q1RNKHN0eWxlVXBkYXRl
U3RyYXRlZ3kpOwogICAgICAgICBpZiAoIXRhcmdldENUTS5pc0ludmVydGlibGUoKSkgewogICAg
ICAgICAgICAgZWMgPSBTVkdFeGNlcHRpb246OlNWR19NQVRSSVhfTk9UX0lOVkVSVEFCTEU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCmluZGV4IGI1ZjhhNzI4YTQ0YjBiNGQ1
M2Y5Y2QxOTg4MzdiMjY2Mzc5OTE0NDYuLjdjYTViMGU3OTgxNGYzMDY3NWM1NDQ3YjI4M2U5Y2Y2
ODUyODYxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCkBAIC0xNTYs
NyArMTU2LDcgQEAgdm9pZCBTVkdNUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiBTVkdQYXRoRWxlbWVudCogU1ZHTVBhdGhFbGVt
ZW50OjpwYXRoRWxlbWVudCgpCiB7CiAgICAgRWxlbWVudCogdGFyZ2V0ID0gdGFyZ2V0RWxlbWVu
dEZyb21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVudCgpKTsKLSAgICBpZiAodGFyZ2V0ICYmIGlz
PFNWR1BhdGhFbGVtZW50Pih0YXJnZXQpKQorICAgIGlmIChpczxTVkdQYXRoRWxlbWVudD4odGFy
Z2V0KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR1BhdGhFbGVtZW50Pih0YXJnZXQpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgU1ZHTVBhdGhF
bGVtZW50Ojp0YXJnZXRQYXRoQ2hhbmdlZCgpCiAKIHZvaWQgU1ZHTVBhdGhFbGVtZW50Ojpub3Rp
ZnlQYXJlbnRPZlBhdGhDaGFuZ2UoQ29udGFpbmVyTm9kZSogcGFyZW50KQogewotICAgIGlmIChw
YXJlbnQgJiYgaXM8U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ+KHBhcmVudCkpCisgICAgaWYgKGlz
PFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50PihwYXJlbnQpKQogICAgICAgICBkb3duY2FzdDxTVkdB
bmltYXRlTW90aW9uRWxlbWVudD4oKnBhcmVudCkudXBkYXRlQW5pbWF0aW9uUGF0aCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCAxMmM0YTM4NWE5NDBhZjNh
NmRiYzNlMmEzY2RhZTQwZTFiYTFiZjdiLi4wNTVmZTAzNzE5Y2Q3YWI4MTVhOTYzOGM2ZmRjMTM0
NGVmNjY2ZGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAgLTI4Niw3
ICsyODYsNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjppbnZhbGlkYXRlTVBhdGhEZXBlbmRlbmNp
ZXMoKQogICAgIC8vIG1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbiBz
byB3ZSB1cGRhdGUgYW55IG1wYXRoIGRlcGVuZGVuY2llcyBtYW51YWxseS4KICAgICBpZiAoSGFz
aFNldDxTVkdFbGVtZW50Kj4qIGRlcGVuZGVuY2llcyA9IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldCh0aGlzKSkgewogICAgICAg
ICBmb3IgKGF1dG8qIGVsZW1lbnQgOiAqZGVwZW5kZW5jaWVzKSB7Ci0gICAgICAgICAgICBpZiAo
aXM8U1ZHTVBhdGhFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgICAgIGlmIChpczxTVkdNUGF0
aEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxTVkdNUGF0aEVs
ZW1lbnQ+KCplbGVtZW50KS50YXJnZXRQYXRoQ2hhbmdlZCgpOwogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKaW5kZXggOWJkNGU4NWNlYjVi
ODM4ZjA3YTE0NmZhMzVhNmYxNGZjNGNmNmFlMC4uOWIzYzdhZjYxZDdlZjg5Zjc1OTA1Y2I1Y2Yz
OWI2MjY1NDQ2NWFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3Bw
CkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6Y29sbGVjdFBhdHRl
cm5BdHRyaWJ1dGVzKFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQogCiAgICAgICAgIC8v
IFJlc3BlY3QgeGxpbms6aHJlZiwgdGFrZSBhdHRyaWJ1dGVzIGZyb20gcmVmZXJlbmNlZCBlbGVt
ZW50CiAgICAgICAgIEVsZW1lbnQqIHJlZkVsZW1lbnQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdl
dEVsZW1lbnRGcm9tSVJJU3RyaW5nKGN1cnJlbnQtPmhyZWYoKSwgZG9jdW1lbnQoKSk7Ci0gICAg
ICAgIGlmIChyZWZFbGVtZW50ICYmIGlzPFNWR1BhdHRlcm5FbGVtZW50PihyZWZFbGVtZW50KSkg
eworICAgICAgICBpZiAoaXM8U1ZHUGF0dGVybkVsZW1lbnQ+KHJlZkVsZW1lbnQpKSB7CiAgICAg
ICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8U1ZHUGF0dGVybkVsZW1lbnQ+KHJlZkVsZW1lbnQp
OwogCiAgICAgICAgICAgICAvLyBDeWNsZSBkZXRlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKaW5kZXggYjFmNTk2Zjg3Y2M2YjU1OGVk
MTczMDc2MzA1NDRlNWUxZmJhZTk4Ni4uODIxMTdmMTY4OTFhMGMwYWNmZGE0MGYzMzg3MDUwNjk0
M2MxMTVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxl
bWVudC5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBib29sIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dDo6Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZQogICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgIC8vIFJlc3BlY3QgeGxpbms6aHJlZiwgdGFrZSBhdHRy
aWJ1dGVzIGZyb20gcmVmZXJlbmNlZCBlbGVtZW50CiAgICAgICAgIE5vZGUqIHJlZk5vZGUgPSBT
VkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGN1cnJlbnQtPmhyZWYo
KSwgZG9jdW1lbnQoKSk7Ci0gICAgICAgIGlmIChyZWZOb2RlICYmIGlzPFNWR0dyYWRpZW50RWxl
bWVudD4oKnJlZk5vZGUpKSB7CisgICAgICAgIGlmIChpczxTVkdHcmFkaWVudEVsZW1lbnQ+KHJl
Zk5vZGUpKSB7CiAgICAgICAgICAgICBjdXJyZW50ID0gZG93bmNhc3Q8U1ZHR3JhZGllbnRFbGVt
ZW50PihyZWZOb2RlKTsKIAogICAgICAgICAgICAgLy8gQ3ljbGUgZGV0ZWN0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKaW5kZXggYzE0Y2MzYjU2ZmEyNDlmNDQ4YTE0ZTI5ODE5
N2UzMDBhYjJhNGM3MS4uZjQxYTM0NGM1NzI2Zjc4MWQzMWY2NTFhOWE2MjgyMjFhM2MzMjFiNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcApAQCAtNjYxLDEwICs2NjEsMTAgQEAg
dm9pZCBTVkdTVkdFbGVtZW50OjpzZXR1cEluaXRpYWxWaWV3KGNvbnN0IFN0cmluZyYgZnJhZ21l
bnRJZGVudGlmaWVyLCBFbGVtZW50KgogICAgIC8vIG9yIE15RHJhd2luZy5zdmcjeHBvaW50ZXIo
aWQoJ015VmlldycpKSkgdGhlbiB0aGUgY2xvc2VzdCBhbmNlc3RvciDigJhzdmfigJkgZWxlbWVu
dCBpcyBkaXNwbGF5ZWQgaW4gdGhlIHZpZXdwb3J0LgogICAgIC8vIEFueSB2aWV3IHNwZWNpZmlj
YXRpb24gYXR0cmlidXRlcyBpbmNsdWRlZCBvbiB0aGUgZ2l2ZW4g4oCYdmlld+KAmSBlbGVtZW50
IG92ZXJyaWRlIHRoZSBjb3JyZXNwb25kaW5nIHZpZXcgc3BlY2lmaWNhdGlvbgogICAgIC8vIGF0
dHJpYnV0ZXMgb24gdGhlIGNsb3Nlc3QgYW5jZXN0b3Ig4oCYc3Zn4oCZIGVsZW1lbnQuCi0gICAg
aWYgKGFuY2hvck5vZGUgJiYgaXM8U1ZHVmlld0VsZW1lbnQ+KGFuY2hvck5vZGUpKSB7CisgICAg
aWYgKGlzPFNWR1ZpZXdFbGVtZW50PihhbmNob3JOb2RlKSkgewogICAgICAgICBTVkdWaWV3RWxl
bWVudCYgdmlld0VsZW1lbnQgPSBkb3duY2FzdDxTVkdWaWV3RWxlbWVudD4oKmFuY2hvck5vZGUp
OwogICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gU1ZHTG9jYXRhYmxlOjpuZWFyZXN0Vmll
d3BvcnRFbGVtZW50KCZ2aWV3RWxlbWVudCk7Ci0gICAgICAgIGlmIChpczxTVkdTVkdFbGVtZW50
PihlbGVtZW50KSkgeworICAgICAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4oKmVsZW1lbnQpKSB7
CiAgICAgICAgICAgICBTVkdTVkdFbGVtZW50JiBzdmcgPSBkb3duY2FzdDxTVkdTVkdFbGVtZW50
PigqZWxlbWVudCk7CiAgICAgICAgICAgICBzdmcuaW5oZXJpdFZpZXdBdHRyaWJ1dGVzKCZ2aWV3
RWxlbWVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVu
dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5j
cHAKaW5kZXggNzE3NDg4YTU0NDcyZWFhYTM3ZjJjNmZmZDhkNjY2ODM3Njc1MzViNi4uMmM2NGEw
ZWQ5ZDg4NTQyZWJhYmM2NmU4YTE2NDg0N2VkZWY1YTQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKQEAgLTI5Niw3ICsyOTYsNyBAQCBTVkdUZXh0
Q29udGVudEVsZW1lbnQqIFNWR1RleHRDb250ZW50RWxlbWVudDo6ZWxlbWVudEZyb21SZW5kZXJl
cihSZW5kZXJPYmplY3QqCiAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PFNWR0Vs
ZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpOwogICAgIEFTU0VSVChlbGVtZW50KTsKIAotICAgIGlm
ICghaXM8U1ZHVGV4dENvbnRlbnRFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPFNWR1Rl
eHRDb250ZW50RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIHJldHVybiBkb3duY2FzdDxTVkdUZXh0Q29udGVudEVsZW1lbnQ+KGVsZW1lbnQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCmluZGV4IDY2N2NkZmMyMTQ4MWNjNTdmOTVkNzU1
ZjA4OTNlYzYyZGE1Y2I2NTguLmVlZmM3NzE1NTY5MzE3ZjcyNTRkNjFlOWVmMWNjYmUxMjRiZTk0
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTI4Miw3ICsyODIsNyBA
QCBzdGF0aWMgdm9pZCBkdW1wSW5zdGFuY2VUcmVlKHVuc2lnbmVkIGludCYgZGVwdGgsIFN0cmlu
ZyYgdGV4dCwgU1ZHRWxlbWVudEluc3RhbgogICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSB0YXJn
ZXRJbnN0YW5jZS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKTsKICAgICBBU1NFUlQoZWxlbWVudCk7
CiAKLSAgICBpZiAoaXM8U1ZHVXNlRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICBpZiAoaXM8U1ZH
VXNlRWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChkb3duY2FzdDxTVkdVc2VFbGVt
ZW50PigqZWxlbWVudCkuY2FjaGVkRG9jdW1lbnRJc1N0aWxsTG9hZGluZygpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTU0NCw5ICs1NDQsNiBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6
OnRvQ2xpcFBhdGgoUGF0aCYgcGF0aCkKICAgICBBU1NFUlQocGF0aC5pc0VtcHR5KCkpOwogCiAg
ICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IG1fdGFyZ2V0RWxlbWVudEluc3RhbmNlID8gbV90YXJn
ZXRFbGVtZW50SW5zdGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCkgOiBudWxscHRyOwotICAgIGlm
ICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKGlzPFNWR0dyYXBoaWNzRWxl
bWVudD4oZWxlbWVudCkpIHsKICAgICAgICAgaWYgKCFpc0RpcmVjdFJlZmVyZW5jZSgqZWxlbWVu
dCkpIHsKICAgICAgICAgICAgIC8vIFNwZWM6IEluZGlyZWN0IHJlZmVyZW5jZXMgYXJlIGFuIGVy
cm9yICgxNC4zLjUpCkBAIC03MTAsNyArNzA3LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpleHBh
bmRVc2VFbGVtZW50c0luU2hhZG93VHJlZShOb2RlKiBlbGVtZW50KQogICAgIC8vIGNvbnRhaW5z
IDx1c2U+IHRhZ3MsIHdlJ2QgbWlzcyB0aGVtLiBTbyBvbmNlIHdlJ3JlIGRvbmUgd2l0aCBzZXR0
aW4nIHVwIHRoZQogICAgIC8vIGFjdHVhbCBzaGFkb3cgdHJlZSAoYWZ0ZXIgdGhlIHNwZWNpYWwg
Y2FzZSBtb2RpZmljYXRpb24gZm9yIHN2Zy9zeW1ib2wpIHdlIGhhdmUKICAgICAvLyB0byB3YWxr
IGl0IGNvbXBsZXRlbHkgYW5kIGV4cGFuZCBhbGwgPHVzZT4gZWxlbWVudHMuCi0gICAgaWYgKGlz
PFNWR1VzZUVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgaWYgKGlzPFNWR1VzZUVsZW1lbnQ+KCpl
bGVtZW50KSkgewogICAgICAgICBTVkdVc2VFbGVtZW50JiB1c2UgPSBkb3duY2FzdDxTVkdVc2VF
bGVtZW50PigqZWxlbWVudCk7CiAgICAgICAgIEFTU0VSVCghdXNlLmNhY2hlZERvY3VtZW50SXNT
dGlsbExvYWRpbmcoKSk7CiAKQEAgLTc2Miw3ICs3NTksNyBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6
OmV4cGFuZFVzZUVsZW1lbnRzSW5TaGFkb3dUcmVlKE5vZGUqIGVsZW1lbnQpCiAKIHZvaWQgU1ZH
VXNlRWxlbWVudDo6ZXhwYW5kU3ltYm9sRWxlbWVudHNJblNoYWRvd1RyZWUoTm9kZSogbm9kZSkK
IHsKLSAgICBpZiAoaXM8U1ZHU3ltYm9sRWxlbWVudD4obm9kZSkpIHsKKyAgICBpZiAoaXM8U1ZH
U3ltYm9sRWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgIC8vIFNwZWM6IFRoZSByZWZlcmVuY2Vk
ICdzeW1ib2wnIGFuZCBpdHMgY29udGVudHMgYXJlIGRlZXAtY2xvbmVkIGludG8gdGhlIGdlbmVy
YXRlZCB0cmVlLAogICAgICAgICAvLyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgJ3N5bWJv
bCcgaXMgcmVwbGFjZWQgYnkgYW4gJ3N2ZycuIFRoaXMgZ2VuZXJhdGVkICdzdmcnIHdpbGwKICAg
ICAgICAgLy8gYWx3YXlzIGhhdmUgZXhwbGljaXQgdmFsdWVzIGZvciBhdHRyaWJ1dGVzIHdpZHRo
IGFuZCBoZWlnaHQuIElmIGF0dHJpYnV0ZXMgd2lkdGggYW5kL29yCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWS2VybkVsZW1lbnQuY3BwCmluZGV4IDgxOWFiMWUwOTRjODc0YTBkNGM5MTVkMTg5MjE0Yzlk
N2ZiMGZlN2MuLmI4NGMzZTc5ZTM0Mzc5ZDUyNmRlOTU2MTZlMTA1MTIxOTVkY2M2MWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIE5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHVktlcm5FbGVtZW50OjppbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kZSYKIHsKICAgICBpZiAocm9vdFBhcmVudC5pbkRvY3VtZW50KCkpIHsK
ICAgICAgICAgQ29udGFpbmVyTm9kZSogZm9udE5vZGUgPSBwYXJlbnROb2RlKCk7Ci0gICAgICAg
IGlmIChmb250Tm9kZSAmJiBpczxTVkdGb250RWxlbWVudD4oZm9udE5vZGUpKQorICAgICAgICBp
ZiAoaXM8U1ZHRm9udEVsZW1lbnQ+KGZvbnROb2RlKSkKICAgICAgICAgICAgIGRvd25jYXN0PFNW
R0ZvbnRFbGVtZW50PigqZm9udE5vZGUpLmludmFsaWRhdGVHbHlwaENhY2hlKCk7CiAgICAgfQog
CkBAIC01NCw3ICs1NCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZH
Vktlcm5FbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYKIHZvaWQgU1ZHVktlcm5F
bGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQogewogICAgIENv
bnRhaW5lck5vZGUqIGZvbnROb2RlID0gcGFyZW50Tm9kZSgpOwotICAgIGlmIChmb250Tm9kZSAm
JiBpczxTVkdGb250RWxlbWVudD4oZm9udE5vZGUpKQorICAgIGlmIChpczxTVkdGb250RWxlbWVu
dD4oZm9udE5vZGUpKQogICAgICAgICBkb3duY2FzdDxTVkdGb250RWxlbWVudD4oKmZvbnROb2Rl
KS5pbnZhbGlkYXRlR2x5cGhDYWNoZSgpOwogCiAgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20o
cm9vdFBhcmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVs
ZW1lbnQuY3BwCmluZGV4IGQ1NDVlOWRkZWExMjViYTM3ZGM4YWNkMGQ1ZTgzODk2MWNkZjhiNzgu
LmMyOTkyMmRlOTQ0ODhkNzBhOTQyNGMwMzUxYjhlN2Y5OTg4YzYxOGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCkBAIC0xNjUsMTAgKzE2
NSwxMCBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAgICAg
U3RyaW5nIGhyZWYgPSBnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOwogICAgIEVs
ZW1lbnQqIHRhcmdldDsKICAgICBpZiAoaHJlZi5pc0VtcHR5KCkpCi0gICAgICAgIHRhcmdldCA9
IHBhcmVudE5vZGUoKSAmJiBpczxFbGVtZW50PihwYXJlbnROb2RlKCkpID8gZG93bmNhc3Q8RWxl
bWVudD4ocGFyZW50Tm9kZSgpKSA6IG51bGxwdHI7CisgICAgICAgIHRhcmdldCA9IGlzPEVsZW1l
bnQ+KHBhcmVudE5vZGUoKSkgPyBkb3duY2FzdDxFbGVtZW50PihwYXJlbnROb2RlKCkpIDogbnVs
bHB0cjsKICAgICBlbHNlCiAgICAgICAgIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0
RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZiwgZG9jdW1lbnQoKSwgJmlkKTsKLSAgICBTVkdFbGVt
ZW50KiBzdmdUYXJnZXQgPSB0YXJnZXQgJiYgaXM8U1ZHRWxlbWVudD4odGFyZ2V0KSA/IGRvd25j
YXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkgOiBudWxscHRyOworICAgIFNWR0VsZW1lbnQqIHN2Z1Rh
cmdldCA9IGlzPFNWR0VsZW1lbnQ+KHRhcmdldCkgPyBkb3duY2FzdDxTVkdFbGVtZW50Pih0YXJn
ZXQpIDogbnVsbHB0cjsKIAogICAgIGlmIChzdmdUYXJnZXQgJiYgIXN2Z1RhcmdldC0+aW5Eb2N1
bWVudCgpKQogICAgICAgICBzdmdUYXJnZXQgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCmluZGV4IDllMWI3Yzg4M2FiZDEwZWE2ZWY2
NGYwNTNkYjQ3MzliMTA1YzM2ZWYuLjk4ZTUwZjYyMzIyYzlhZDU5MTkwYWExZmUyNjBhYmNmZWFh
OTkxOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5j
cHAKQEAgLTkyLDcgKzkyLDcgQEAgSW1hZ2UqIFNWR0ltYWdlQ2FjaGU6OmltYWdlRm9yUmVuZGVy
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBSZWZQdHI8U1ZHSW1hZ2VGb3JD
b250YWluZXI+IGltYWdlRm9yQ29udGFpbmVyID0gaXQtPnZhbHVlOwogICAgIAogICAgIE5vZGUq
IG5vZGUgPSByZW5kZXJlci0+bm9kZSgpOwotICAgIGlmIChub2RlICYmIGlzPEhUTUxJbWFnZUVs
ZW1lbnQ+KG5vZGUpKSB7CisgICAgaWYgKGlzPEhUTUxJbWFnZUVsZW1lbnQ+KG5vZGUpKSB7CiAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsU3RyaW5nID0gZG93bmNhc3Q8SFRNTEltYWdl
RWxlbWVudD4oKm5vZGUpLmltYWdlU291cmNlVVJMKCk7CiAgICAgICAgIFVSTCB1cmwgPSBub2Rl
LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHVybFN0cmluZyk7CiAgICAgICAgIGltYWdlRm9yQ29u
dGFpbmVyLT5zZXRVUkwodXJsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCA0NDE1NzUwMjZkNDBlMTc2YTM2ZDU3NzM2ZDY3ZTg3MTUyZGVjZWFkLi42NTQ5NTUwYmViMjMy
OWM0MjQzM2ExZTE3ZTU4NTE3YzAyNGI5ZjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC01ODEsNyArNTgxLDcgQEAgTm9kZSogSW50ZXJuYWxzOjpzaGFkb3dSb290KEVs
ZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiBTdHJpbmcgSW50ZXJuYWxzOjpzaGFk
b3dSb290VHlwZShjb25zdCBOb2RlKiByb290LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsK
LSAgICBpZiAoIXJvb3QgfHwgIWlzPFNoYWRvd1Jvb3Q+KHJvb3QpKSB7CisgICAgaWYgKCFpczxT
aGFkb3dSb290Pihyb290KSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTYyMyw3ICs2MjMsNyBAQCB2b2lkIElu
dGVybmFsczo6c2V0U2hhZG93UHNldWRvSWQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5n
JiBpZCwgRXhjZXB0aW9uQwogCiBTdHJpbmcgSW50ZXJuYWxzOjp2aXNpYmxlUGxhY2Vob2xkZXIo
RWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoZWxlbWVudCAmJiBpczxIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50PihlbGVtZW50KSkgewogICAgICAgICBjb25zdCBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCYgdGV4dEZvcm1Db250cm9sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50PigqZWxlbWVudCk7CiAgICAgICAgIGlmICghdGV4dEZvcm1Db250cm9sRWxl
bWVudC5pc1BsYWNlaG9sZGVyVmlzaWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwpAQCAtNjM3LDcgKzYzNyw3IEBAIFN0cmluZyBJbnRlcm5hbHM6OnZpc2libGVQbGFjZWhvbGRl
cihFbGVtZW50KiBlbGVtZW50KQogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQogdm9pZCBJ
bnRlcm5hbHM6OnNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoRWxlbWVudCogZWxlbWVudCwgY29u
c3QgU3RyaW5nJiBjb2xvclZhbHVlKQogewotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4o
ZWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50
LT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQpAQCAtOTEyLDcgKzkx
Miw3IEBAIGJvb2wgSW50ZXJuYWxzOjp3YXNMYXN0Q2hhbmdlVXNlckVkaXQoRWxlbWVudCogdGV4
dEZpZWxkLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50ID0gdGV4dEZpZWxkLT50b0lucHV0RWxlbWVudCgpKQogICAgICAgICByZXR1cm4g
aW5wdXRFbGVtZW50LT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIAotICAgIGlmIChpczxIVE1M
VGV4dEFyZWFFbGVtZW50Pih0ZXh0RmllbGQpKQorICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVt
ZW50PigqdGV4dEZpZWxkKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVs
ZW1lbnQ+KCp0ZXh0RmllbGQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogCiAgICAgZWMgPSBJ
TlZBTElEX05PREVfVFlQRV9FUlI7CkBAIC0xOTE2LDkgKzE5MTYsOSBAQCB2b2lkIEludGVybmFs
czo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5kUnVuUG9zdExheW91dFRh
c2tzKE5vZGUqCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50OwogICAgIGlmICghbm9kZSkKICAgICAg
ICAgZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKLSAgICBlbHNlIGlmIChpczxEb2N1bWVu
dD4obm9kZSkpCisgICAgZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KCpub2RlKSkKICAgICAgICAgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4obm9kZSk7Ci0gICAgZWxzZSBpZiAoaXM8SFRNTElG
cmFtZUVsZW1lbnQ+KG5vZGUpKQorICAgIGVsc2UgaWYgKGlzPEhUTUxJRnJhbWVFbGVtZW50Pigq
bm9kZSkpCiAgICAgICAgIGRvY3VtZW50ID0gZG93bmNhc3Q8SFRNTElGcmFtZUVsZW1lbnQ+KCpu
b2RlKS5jb250ZW50RG9jdW1lbnQoKTsKICAgICBlbHNlIHsKICAgICAgICAgZWMgPSBUeXBlRXJy
b3I7CkBAIC0yMDgzLDcgKzIwODMsNyBAQCB2b2lkIEludGVybmFsczo6c2ltdWxhdGVBdWRpb0lu
dGVycnVwdGlvbihOb2RlKiBub2RlKQogCiBib29sIEludGVybmFsczo6aXNTZWxlY3RQb3B1cFZp
c2libGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIWlzPEhUTUxTZWxlY3RFbGVtZW50Pihub2Rl
KSkKKyAgICBpZiAoIWlzPEhUTUxTZWxlY3RFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3QgPSBkb3duY2FzdDxIVE1M
U2VsZWN0RWxlbWVudD4oKm5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9X
ZWJDb3JlVGVzdFN1cHBvcnQuY3BwCmluZGV4IGFlYThlNGE5MGQ0MTFlZWM4NzdiMGQ0OWUzOWY5
NzBmMzI0MjIyZjEuLmFhZmQxMmFkMTVjNjE5MTgyNmIyMDMzZmFjY2FiZWI1MWIyYTc3ZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAK
QEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBpbmplY3RJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVm
IGNvbnRleHQpCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
Q29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlm
IChpczxEb2N1bWVudD4oc2NyaXB0Q29udGV4dCkpCisgICAgaWYgKGlzPERvY3VtZW50Pigqc2Ny
aXB0Q29udGV4dCkpCiAgICAgICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IElkZW50aWZpZXIoZXhlYywgSW50ZXJuYWxzOjppbnRlcm5hbHNJZCksIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBJbnRlcm5hbHM6OmNyZWF0ZShkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0Q29u
dGV4dCkpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDRk
NTM0ZWU5YThmNWZjMzI1OThiNDhkYWU1OWI1ZjAwYWM2MjI1N2UuLjgzMDMxYjhkYmEyNTRlMTc3
Zjg3MWZjYzhlMzU4MjE3MWNlOTY2OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcApAQCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3Qg
U3RyaW5nJiBtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5jLCBFeGNlCiAKICAgICAv
LyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGNoZWNrIHRoZSBpc29sYXRlZCB3b3JsZCdzIENvbnRl
bnQgU2VjdXJpdHkgUG9saWN5IG9uY2Ugd2Via2l0Lm9yZy9iLzEwNDUyMCBpcyBzb2x2ZWQuCiAg
ICAgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxz
ZTsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpIHsKKyAg
ICBpZiAoaXM8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKSB7CiAgICAgICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKICAgICAgICAgaWYgKGRvY3VtZW50LmZyYW1lKCkpCiAgICAgICAgICAgICBz
aG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBkb2N1bWVudC5mcmFt
ZSgpLT5zY3JpcHQoKS5zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3ko
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4IDFmZjgzODQwNDBiNTRm
OWUyZDgwMzA3Y2IzZDdjN2MxMzRkNzA0MTcuLjIxNmEzMWU3ZGFlNDcyYTBiMjNkYTZlYzU2M2E4
NjE1MDcwNDM3YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9u
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcApAQCAtMzYy
LDcgKzM2Miw3IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGV4cGFuZGVkTmFtZUxvY2FsUGFydChO
b2RlKiBub2RlKQogewogICAgIC8vIFRoZSBsb2NhbCBwYXJ0IG9mIGFuIFhQYXRoIGV4cGFuZGVk
LW5hbWUgbWF0Y2hlcyBET00gbG9jYWwgbmFtZSBmb3IgbW9zdCBub2RlIHR5cGVzLCBleGNlcHQg
Zm9yIG5hbWVzcGFjZSBub2RlcyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlcy4KICAg
ICBBU1NFUlQobm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERSk7
IC8vIE5vdCBzdXBwb3J0ZWQgeWV0LgotICAgIGlmIChpczxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+
KG5vZGUpKQorICAgIGlmIChpczxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KCpub2RlKSkKICAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKm5vZGUpLnRhcmdldCgp
OwogICAgIHJldHVybiBub2RlLT5sb2NhbE5hbWUoKS5zdHJpbmcoKTsKIH0KQEAgLTU4Myw3ICs1
ODMsNyBAQCBWYWx1ZSBGdW5MYW5nOjpldmFsdWF0ZSgpIGNvbnN0CiAgICAgY29uc3QgQXR0cmli
dXRlKiBsYW5ndWFnZUF0dHJpYnV0ZSA9IG51bGxwdHI7CiAgICAgTm9kZSogbm9kZSA9IGV2YWx1
YXRpb25Db250ZXh0KCkubm9kZS5nZXQoKTsKICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBp
ZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkg
ewogICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KTsKICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKICAgICAgICAgICAg
ICAgICBsYW5ndWFnZUF0dHJpYnV0ZSA9IGVsZW1lbnQuZmluZEF0dHJpYnV0ZUJ5TmFtZShYTUxO
YW1lczo6bGFuZ0F0dHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9k
ZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcAppbmRleCBiODYx
NjgxMjY4MGFmYjkyZTEyZmMzM2NhMGQ4OTYwYmIwOWVmOWQ1Li4wMzMyZmRlY2Y3YTUzOWFiYzk0
N2ZjMzA0ODEwYzQ3NWEzYjY3NjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBh
dGhOb2RlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcApA
QCAtOTUsNyArOTUsNyBAQCBzdGF0aWMgdm9pZCBzb3J0QmxvY2sodW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8sIFZlY3RvcjxWZWN0b3I8Tm9kZSo+PiYgcGFyZW50TQogICAgICAgICAvLyBGSVhN
RTogbmFtZXNwYWNlIG5vZGVzIGFyZSBub3QgaW1wbGVtZW50ZWQuCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHNvcnRlZEVuZDsgaSA8IHRvOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBwYXJlbnRNYXRyaXhbaV1bMF07Ci0gICAgICAgICAgICBpZiAoaXM8QXR0cj4obm9kZSkg
JiYgZG93bmNhc3Q8QXR0cj4oKm5vZGUpLm93bmVyRWxlbWVudCgpID09IGNvbW1vbkFuY2VzdG9y
KQorICAgICAgICAgICAgaWYgKGlzPEF0dHI+KCpub2RlKSAmJiBkb3duY2FzdDxBdHRyPigqbm9k
ZSkub3duZXJFbGVtZW50KCkgPT0gY29tbW9uQW5jZXN0b3IpCiAgICAgICAgICAgICAgICAgcGFy
ZW50TWF0cml4W2ldLnN3YXAocGFyZW50TWF0cml4W3NvcnRlZEVuZCsrXSk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHNvcnRlZEVuZCAhPSBmcm9tKSB7CkBAIC0xNTcsNyArMTU3LDcgQEAgdm9p
ZCBOb2RlU2V0Ojpzb3J0KCkgY29uc3QKICAgICAgICAgVmVjdG9yPE5vZGUqPiYgcGFyZW50c1Zl
Y3RvciA9IHBhcmVudE1hdHJpeFtpXTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZXNbaV0u
Z2V0KCk7CiAgICAgICAgIHBhcmVudHNWZWN0b3IuYXBwZW5kKG5vZGUpOwotICAgICAgICBpZiAo
aXM8QXR0cj4obm9kZSkpIHsKKyAgICAgICAgaWYgKGlzPEF0dHI+KCpub2RlKSkgewogICAgICAg
ICAgICAgbm9kZSA9IGRvd25jYXN0PEF0dHI+KCpub2RlKS5vd25lckVsZW1lbnQoKTsKICAgICAg
ICAgICAgIHBhcmVudHNWZWN0b3IuYXBwZW5kKG5vZGUpOwogICAgICAgICAgICAgY29udGFpbnNB
dHRyaWJ1dGVOb2RlcyA9IHRydWU7CkBAIC0xNzksNyArMTc5LDcgQEAgdm9pZCBOb2RlU2V0Ojpz
b3J0KCkgY29uc3QKIAogc3RhdGljIE5vZGUqIGZpbmRSb290Tm9kZShOb2RlKiBub2RlKQogewot
ICAgIGlmIChpczxBdHRyPihub2RlKSkKKyAgICBpZiAoaXM8QXR0cj4oKm5vZGUpKQogICAgICAg
ICBub2RlID0gZG93bmNhc3Q8QXR0cj4oKm5vZGUpLm93bmVyRWxlbWVudCgpOwogICAgIGlmIChu
b2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIG5vZGUgPSAmbm9kZS0+ZG9jdW1lbnQoKTsKQEAg
LTIxMSw3ICsyMTEsNyBAQCB2b2lkIE5vZGVTZXQ6OnRyYXZlcnNhbFNvcnQoKSBjb25zdAogICAg
ICAgICBpZiAobm9kZXMuY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICBzb3J0ZWROb2Rlcy5h
cHBlbmQobm9kZSk7CiAKLSAgICAgICAgaWYgKCFjb250YWluc0F0dHJpYnV0ZU5vZGVzIHx8ICFp
czxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgaWYgKCFjb250YWluc0F0dHJpYnV0ZU5vZGVzIHx8
ICFpczxFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBF
bGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCmlu
ZGV4IDk2ZGFjZjdjN2UxZGE1NGVhZGIzZjllZTBmMjJkOTMyOTM5NWJlM2UuLmFmMTBjNmM1NWY1
OTIzNmFiODk5OTgwMTFhMjU5N2RlNjVlNzNhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKQEAgLTYyMiw3ICs2
MjIsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFn
bWVudCYgZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudAogICAgICAgICBlbGVtU3RhY2suYXBwZW5k
KHBhcmVudEVsZW1lbnQpOwogCiAgICAgICAgIENvbnRhaW5lck5vZGUqIG5vZGUgPSBwYXJlbnRF
bGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4o
bm9kZSkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgcGFyZW50RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudElPUy5tbQppbmRleCAxODVjNjYzMWNlYTFjZTFhNTUxMGViY2FkYjQ3MjU2NTFlNTlj
NGQ4Li44ZDA1YjM0ZWEyOTM5Mzg4MjY2MzE3YzViOGQ1ZDY1MjlhNWRhMDFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnRJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50SU9T
Lm1tCkBAIC0zMDksOCArMzA5LDYgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OndlYkFwcE9y
aWVudGF0aW9uc1VwZGF0ZWQoKQogCiB2b2lkIFdlYkNocm9tZUNsaWVudElPUzo6Zm9jdXNlZEVs
ZW1lbnRDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50KQotICAg
ICAgICByZXR1cm47CiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggZTFkYzEwZGZjNDI1NDRiZGE2YjZhODg3YTZkMzY2
ZDMzMTJlYjZlOS4uMTZjMTQ2MzI1NTA5NTMzYjk2OTE5MWZkMmVhZjU3N2Y2ZmZkNzUyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbQpAQCAtMjE4LDggKzIxOCw2IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp0YWtlRm9jdXMo
Rm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6Zm9jdXNl
ZEVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50KQot
ICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggODg0MDU0OTAzNDI3MWI2MDlhYWI2NTFiN2Ey
OTcyNDAzNGFjNzZjYy4uMThmNGUxMmE0ODg3ZTM3MzMxM2E0YzU5ZDFjODk4N2M5NjJhODlmYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQpAQCAtNzA1LDcgKzcwNSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVJ
bnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAKIHZvaWQgV2ViRWRpdG9y
Q2xpZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKIHsKLSAg
ICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTElu
cHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBET01IVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
ZWxlbWVudCkpOwpAQCAtNzE1LDcgKzcxNSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0
RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKIAogdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBp
ZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTElucHV0
RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBET01IVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxl
bWVudCkpOwpAQCAtNzI1LDcgKzcyNSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0Rmll
bGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50
Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAo
IWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTElucHV0RWxl
bWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICNpZiAhUExBVEZPUk0oSU9TKQpA
QCAtNzYzLDcgKzc2Myw3IEBAIHN0YXRpYyBTRUwgc2VsZWN0b3JGb3JLZXlFdmVudChLZXlib2Fy
ZEV2ZW50KiBldmVudCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmRvVGV4dEZpZWxkQ29tbWFu
ZEZyb21FdmVudChFbGVtZW50KiBlbGVtZW50LCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAg
ICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8SFRNTElu
cHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICBET01IVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBraXQoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oZWxlbWVudCkpOwpAQCAtNzc1LDcgKzc3NSw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpk
b1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZWxlbWVudCwgS2V5Ym9hcmRFdmVu
CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVs
ZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50
KSkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgRE9NSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0ga2l0KGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKTsKQEAgLTc4Niw3ICs3ODYsNyBAQCB2b2lk
IFdlYkVkaXRvckNsaWVudDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBl
bGVtZW50KQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEo
RWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KGVs
ZW1lbnQpKQorICAgIGlmICghaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKmVsZW1lbnQpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBET01IVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYUVsZW1l
bnQgPSBraXQoZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oZWxlbWVudCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0g
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQppbmRl
eCA4NGQzNTMxNzNiZTllZGYwYzczODJiZDJkNGNiNmFmOWJkYWY5OTQ0Li42ZTQwYWU1MDUzNjA2
YjBhM2YyZjFhMmVkN2UzZjM5ZTJhODFmZTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQpAQCAtMzA1LDcgKzMwNSw3IEBAIC0g
KERPTUVsZW1lbnQgKillbGVtZW50V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBpbkZvcm06KERP
TUVsZW1lbnQgKilmb3JtCiBzdGF0aWMgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50RnJv
bURPTUVsZW1lbnQoRE9NRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBFbGVtZW50KiBub2RlID0g
Y29yZShlbGVtZW50KTsKLSAgICByZXR1cm4gbm9kZSAmJiBpczxIVE1MSW5wdXRFbGVtZW50Pihu
b2RlKSA/IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpIDogbnVsbHB0cjsKKyAgICBy
ZXR1cm4gaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkgPyBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Pihub2RlKSA6IG51bGxwdHI7CiB9CiAKIC0gKEJPT0wpZWxlbWVudERvZXNBdXRvQ29tcGxl
dGU6KERPTUVsZW1lbnQgKillbGVtZW50CkBAIC00NDcsNyArNDQ3LDcgQEAgc3RhdGljIE5TU3Ry
aW5nKiBzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KEZyYW1lKiBmcmFtZSwgTlNBcnJheSog
bGFiZWxzLCBFbGUKICAgICBmb3IgKG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhlbGVtZW50
KTsKICAgICAgICAgbiAmJiBsZW5ndGhTZWFyY2hlZCA8IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQ7
CiAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhuKSkgewotICAgICAgICBpZiAo
aXM8SFRNTEZvcm1FbGVtZW50PihuKSB8fCBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihuKSkg
eworICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50PigqbikgfHwgaXM8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4oKm4pKSB7CiAgICAgICAgICAgICAvLyBXZSBoaXQgYW5vdGhlciBmb3JtIGVs
ZW1lbnQgb3IgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIC0gYmFpbCBvdXQKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlJlbmRlckxheWVyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJSZW5kZXJMYXll
ci5tbQppbmRleCA4NGZiMzc2MDBiMzNhZDc2YWY3MTY3YzkzYjRhYzJiNWQ4OWViYTg1Li44Nzhm
MzQ5MTliZGI0ZjRjMDVjZGRhY2MwYjRkZjU5ZGJkZWFlODgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlckxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUmVuZGVyTGF5ZXIubW0KQEAgLTUyLDcgKzUyLDcgQEAgKyAoTlNTdHJp
bmcgKiluYW1lRm9yTGF5ZXI6KFJlbmRlckxheWVyKilsYXllcgogICAgIGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKICAgICBOU1N0cmluZyAqbmFtZSA9
IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpyZW5kZXJlci5yZW5kZXJOYW1lKCldOwog
Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5ub2RlKCkgJiYgaXM8RWxlbWVu
dD4ocmVuZGVyZXIubm9kZSgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KHJlbmRlcmVyLm5vZGUoKSkg
OiBudWxscHRyKSB7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50PihyZW5k
ZXJlci5ub2RlKCkpID8gZG93bmNhc3Q8RWxlbWVudD4ocmVuZGVyZXIubm9kZSgpKSA6IG51bGxw
dHIpIHsKICAgICAgICAgbmFtZSA9IFtuYW1lIHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0OkAiICVA
IiwgKE5TU3RyaW5nICopZWxlbWVudC0+dGFnTmFtZSgpXTsKICAgICAgICAgaWYgKGVsZW1lbnQt
Pmhhc0lEKCkpCiAgICAgICAgICAgICBuYW1lID0gW25hbWUgc3RyaW5nQnlBcHBlbmRpbmdGb3Jt
YXQ6QCIgaWQ9XCIlQFwiIiwgKE5TU3RyaW5nICopZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKV07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAKaW5kZXggOWM1MGJjZDg0MTRkMmI0MmM2
MjExZDdjMzBlNDlhY2RlODYzMGU0MS4uZWMyYjkyM2RlM2FhNzM5ODUyZDRkNTQ1NmIyYjg3MGU5
MjcxOTc5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcApAQCAtMTQ5NSwyNyAr
MTQ5NSwyNyBAQCBET01FbGVtZW50Ojp+RE9NRWxlbWVudCgpCiBJRE9NRWxlbWVudCogRE9NRWxl
bWVudDo6Y3JlYXRlSW5zdGFuY2UoV2ViQ29yZTo6RWxlbWVudCogZSkKIHsKICAgICBpZiAoIWUp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEhSRVNV
TFQgaHI7CiAgICAgSURPTUVsZW1lbnQqIGRvbUVsZW1lbnQgPSAwOwogCi0gICAgaWYgKGlzPFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudD4oZSkpIHsKKyAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50PigqZSkpIHsKICAgICAgICAgRE9NSFRNTEZvcm1FbGVtZW50KiBuZXdFbGVtZW50
ID0gbmV3IERPTUhUTUxGb3JtRWxlbWVudChlKTsKICAgICAgICAgaHIgPSBuZXdFbGVtZW50LT5R
dWVyeUludGVyZmFjZShJSURfSURPTUVsZW1lbnQsICh2b2lkKiopJmRvbUVsZW1lbnQpOwogICAg
IH0gZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7CiAgICAgICAgIERPTUhUTUxJ
RnJhbWVFbGVtZW50KiBuZXdFbGVtZW50ID0gbmV3IERPTUhUTUxJRnJhbWVFbGVtZW50KGUpOwog
ICAgICAgICBociA9IG5ld0VsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NRWxlbWVudCwg
KHZvaWQqKikmZG9tRWxlbWVudCk7Ci0gICAgfSBlbHNlIGlmIChpczxXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50PihlKSkgeworICAgIH0gZWxzZSBpZiAoaXM8V2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudD4oKmUpKSB7CiAgICAgICAgIERPTUhUTUxJbnB1dEVsZW1lbnQqIG5ld0VsZW1lbnQgPSBu
ZXcgRE9NSFRNTElucHV0RWxlbWVudChlKTsKICAgICAgICAgaHIgPSBuZXdFbGVtZW50LT5RdWVy
eUludGVyZmFjZShJSURfSURPTUVsZW1lbnQsICh2b2lkKiopJmRvbUVsZW1lbnQpOwotICAgIH0g
ZWxzZSBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGUpKSB7CisgICAgfSBlbHNl
IGlmIChpczxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4oKmUpKSB7CiAgICAgICAgIERPTUhU
TUxPcHRpb25FbGVtZW50KiBuZXdFbGVtZW50ID0gbmV3IERPTUhUTUxPcHRpb25FbGVtZW50KGUp
OwogICAgICAgICBociA9IG5ld0VsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NRWxlbWVu
dCwgKHZvaWQqKikmZG9tRWxlbWVudCk7CiAgICAgfSBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKHNl
bGVjdFRhZykpIHsKICAgICAgICAgRE9NSFRNTFNlbGVjdEVsZW1lbnQqIG5ld0VsZW1lbnQgPSBu
ZXcgRE9NSFRNTFNlbGVjdEVsZW1lbnQoZSk7CiAgICAgICAgIGhyID0gbmV3RWxlbWVudC0+UXVl
cnlJbnRlcmZhY2UoSUlEX0lET01FbGVtZW50LCAodm9pZCoqKSZkb21FbGVtZW50KTsKLSAgICB9
IGVsc2UgaWYgKGlzPFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ+KGUpKSB7CisgICAgfSBl
bHNlIGlmIChpczxXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50PigqZSkpIHsKICAgICAgICAg
RE9NSFRNTFRleHRBcmVhRWxlbWVudCogbmV3RWxlbWVudCA9IG5ldyBET01IVE1MVGV4dEFyZWFF
bGVtZW50KGUpOwogICAgICAgICBociA9IG5ld0VsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9J
RE9NRWxlbWVudCwgKHZvaWQqKikmZG9tRWxlbWVudCk7CiAgICAgfSBlbHNlIGlmIChlLT5pc0hU
TUxFbGVtZW50KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFz
c2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcAppbmRleCAwMDVl
NmNlMmYxYmVhZTJmM2U4MmJiYzA1NDYxNTU1MTgwM2IxZjA5Li42NzkxM2VmYmNjYjg1Zjg5MzJl
Yjc0ZTdjMWE5YWEyZTc4MzQ1ZDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01I
VE1MQ2xhc3Nlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3Bw
CkBAIC0yNTgsNyArMjU4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRG9j
dW1lbnQ6OmJvZHkoCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSURPTUhUTUxFbGVtZW50
KiogYm9keUVsZW1lbnQpCiB7CiAgICAgKmJvZHlFbGVtZW50ID0gbnVsbHB0cjsKLSAgICBpZiAo
IW1fZG9jdW1lbnQgfHwgIWlzPEhUTUxEb2N1bWVudD4obV9kb2N1bWVudCkpCisgICAgaWYgKCFp
czxIVE1MRG9jdW1lbnQ+KG1fZG9jdW1lbnQpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCiAg
ICAgSFRNTERvY3VtZW50JiBodG1sRG9jID0gZG93bmNhc3Q8SFRNTERvY3VtZW50PigqbV9kb2N1
bWVudCk7CkBAIC0zMDEsNyArMzAxLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01I
VE1MRG9jdW1lbnQ6OmZvcm1zKAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElET01IVE1M
Q29sbGVjdGlvbioqIGNvbGxlY3Rpb24pCiB7CiAgICAgKmNvbGxlY3Rpb24gPSBudWxscHRyOwot
ICAgIGlmICghbV9kb2N1bWVudCB8fCAhaXM8SFRNTERvY3VtZW50PihtX2RvY3VtZW50KSkKKyAg
ICBpZiAoIWlzPEhUTUxEb2N1bWVudD4obV9kb2N1bWVudCkpCiAgICAgICAgIHJldHVybiBFX0ZB
SUw7CiAKICAgICBIVE1MRG9jdW1lbnQmIGh0bWxEb2MgPSBkb3duY2FzdDxIVE1MRG9jdW1lbnQ+
KCptX2RvY3VtZW50KTsKQEAgLTM5NSw3ICszOTUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIERPTUhUTUxFbGVtZW50OjppZE5hbWUoCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CiAKLSAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzPEhUTUxFbGVtZW50
PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOwog
ICAgIFN0cmluZyBpZFN0cmluZyA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihtX2VsZW1lbnQpLT5n
ZXRBdHRyaWJ1dGUoaWRBdHRyKTsKICAgICAqcmVzdWx0ID0gQlN0cmluZyhpZFN0cmluZykucmVs
ZWFzZSgpOwogICAgIHJldHVybiBTX09LOwpAQCAtNDgxLDcgKzQ4MSw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEVsZW1lbnQ6OnNldElubmVySFRNTCgKIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEVsZW1lbnQ6OmlubmVyVGV4dCggCiAgICAgICAgIC8qIFty
ZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0KQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYg
aXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxIVE1MRWxlbWVudD4o
bV9lbGVtZW50KSk7CiAgICAgV1RGOjpTdHJpbmcgaW5uZXJUZXh0U3RyaW5nID0gZG93bmNhc3Q8
SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCktPmlubmVyVGV4dCgpOwogICAgICpyZXN1bHQgPSBCU3Ry
aW5nKGlubmVyVGV4dFN0cmluZykucmVsZWFzZSgpOwogICAgIHJldHVybiBTX09LOwpAQCAtNDkw
LDcgKzQ5MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEVsZW1lbnQ6Omlu
bmVyVGV4dCgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTEVsZW1lbnQ6OnNldElu
bmVyVGV4dCggCiAgICAgICAgIC8qIFtpbl0gKi8gQlNUUiB0ZXh0KQogewotICAgIEFTU0VSVCht
X2VsZW1lbnQgJiYgaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxI
VE1MRWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTEVsZW1lbnQqIGh0bWxFbGUgPSBkb3du
Y2FzdDxIVE1MRWxlbWVudD4obV9lbGVtZW50KTsKICAgICBXVEY6OlN0cmluZyB0ZXh0U3RyaW5n
KHRleHQsIFN5c1N0cmluZ0xlbih0ZXh0KSk7CiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CkBAIC01NTksNyArNTU5LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01I
VE1MRm9ybUVsZW1lbnQ6OnNldEFjY2VwdENoYXJzZXQoCiBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIERPTUhUTUxGb3JtRWxlbWVudDo6YWN0aW9uKCAKICAgICAgICAgLyogW3JldHZhbF1bb3V0
XSAqLyBCU1RSKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MRm9y
bUVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxIVE1MRm9ybUVsZW1lbnQ+KG1f
ZWxlbWVudCkpOwogICAgIFdURjo6U3RyaW5nIGFjdGlvblN0cmluZyA9IGRvd25jYXN0PEhUTUxG
b3JtRWxlbWVudD4oKm1fZWxlbWVudCkuYWN0aW9uKCk7CiAgICAgKnJlc3VsdCA9IEJTdHJpbmco
YWN0aW9uU3RyaW5nKS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIFNfT0s7CkBAIC01ODksNyArNTg5
LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MRm9ybUVsZW1lbnQ6OnNldEVu
Y3R5cGUoCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxGb3JtRWxlbWVudDo6bWV0
aG9kKCAKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiByZXN1bHQpCiB7Ci0gICAg
QVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MRm9ybUVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAg
IEFTU0VSVChpczxIVE1MRm9ybUVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIFdURjo6U3RyaW5n
IG1ldGhvZFN0cmluZyA9IGRvd25jYXN0PEhUTUxGb3JtRWxlbWVudD4oKm1fZWxlbWVudCkubWV0
aG9kKCk7CiAgICAgKnJlc3VsdCA9IEJTdHJpbmcobWV0aG9kU3RyaW5nKS5yZWxlYXNlKCk7CiAg
ICAgcmV0dXJuIFNfT0s7CkBAIC04NTgsNyArODU4LDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01IVE1MT3B0aW9uRWxlbWVudDo6dGV4dCgKIAogICAgICpyZXN1bHQgPSAwOwogCi0g
ICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgQVNTRVJUKGlzPEhUTUxPcHRpb25FbGVtZW50Piht
X2VsZW1lbnQpKTsKICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uRWxlbWVudCA9IGRvd25j
YXN0PEhUTUxPcHRpb25FbGVtZW50PigqbV9lbGVtZW50KTsKIApAQCAtODk1LDcgKzg5NCw2IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTE9wdGlvbkVsZW1lbnQ6OmxhYmVsKAog
CiAgICAgKnJlc3VsdCA9IDA7CiAKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQo
aXM8SFRNTE9wdGlvbkVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxPcHRpb25FbGVtZW50
JiBvcHRpb25FbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCptX2VsZW1lbnQp
OwogCkBAIC05OTIsNyArOTkwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1M
SW5wdXRFbGVtZW50Ojpmb3JtKAogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwogICAgICpyZXN1bHQgPSBudWxscHRyOwotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYg
aXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1
dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIENPTVB0cjxJ
RE9NRWxlbWVudD4gZG9tRWxlbWVudDsKICAgICBkb21FbGVtZW50LmFkb3B0UmVmKERPTUhUTUxF
bGVtZW50OjpjcmVhdGVJbnN0YW5jZShpbnB1dEVsZW1lbnQuZm9ybSgpKSk7CkBAIC0xMDc0LDcg
KzEwNzIsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6
OnNldENoZWNrZWQoCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1l
bnQ6OmRpc2FibGVkKCAKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQp
CiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1l
bnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAg
SFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKm1fZWxlbWVudCk7CiAgICAgKnJlc3VsdCA9IGlucHV0RWxlbWVudC5pc0Rpc2FibGVkRm9y
bUNvbnRyb2woKSA/IFRSVUUgOiBGQUxTRTsKICAgICByZXR1cm4gU19PSzsKQEAgLTExMTgsNyAr
MTExNiw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6
c2V0TmFtZSgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6
cmVhZE9ubHkoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkKIHsK
LSAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkp
OworICAgIEFTU0VSVChpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1M
SW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
bV9lbGVtZW50KTsKICAgICAqcmVzdWx0ID0gaW5wdXRFbGVtZW50LmlzUmVhZE9ubHkoKSA/IFRS
VUUgOiBGQUxTRTsKICAgICByZXR1cm4gU19PSzsKQEAgLTExODMsNyArMTE4MSw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6dHlwZSgKIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VHlwZSggCiAgICAgICAg
IC8qIFtpbl0gKi8gQlNUUiB0eXBlKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRN
TElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIFdURjo6U3RyaW5nIHR5
cGVTdHJpbmcodHlwZSwgU3lzU3RyaW5nTGVuKHR5cGUpKTsKICAgICBpbnB1dEVsZW1lbnQuc2V0
VHlwZSh0eXBlU3RyaW5nKTsKQEAgLTEyMDcsNyArMTIwNSw3IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VXNlTWFwKAogSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZSggCiAgICAgICAgIC8qIFtyZXR2
YWxdW291dF0gKi8gQlNUUiogcmVzdWx0KQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8
SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIFdURjo6U3RyaW5n
IHZhbHVlU3RyaW5nID0gaW5wdXRFbGVtZW50LnZhbHVlKCk7CiAgICAgKnJlc3VsdCA9IEJTdHJp
bmcodmFsdWVTdHJpbmcpLnJlbGVhc2UoKTsKQEAgLTEyMTksNyArMTIxNyw3IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6dmFsdWUoCiBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKCAKICAgICAgICAg
LyogW2luXSAqLyBCU1RSIHZhbHVlKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRN
TElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIGlucHV0RWxlbWVudC5z
ZXRWYWx1ZShTdHJpbmcoKFVDaGFyKikgdmFsdWUsIFN5c1N0cmluZ0xlbih2YWx1ZSkpKTsKICAg
ICByZXR1cm4gU19PSzsKQEAgLTEyMjgsNyArMTIyNiw2IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoCiBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcigKICAgICAgICAgLyog
W2luXSAqLyBCU1RSIHZhbHVlKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VS
VChpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsK
ICAgICBpbnB1dEVsZW1lbnQuc2V0VmFsdWVGb3JVc2VyKFN0cmluZyhzdGF0aWNfY2FzdDxVQ2hh
cio+KHZhbHVlKSwgU3lzU3RyaW5nTGVuKHZhbHVlKSkpOwpAQCAtMTIzNyw3ICsxMjM0LDcgQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZv
clVzZXIoCiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6
c2VsZWN0KCB2b2lkKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRNTElucHV0RWxl
bWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxl
bWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIGlucHV0RWxlbWVudC5zZWxlY3QoKTsK
ICAgICByZXR1cm4gU19PSzsKQEAgLTEyNTIsNyArMTI0OSw3IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6Y2xpY2soIHZvaWQpCiBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0YXJ0KCAKICAg
ICAvKiBbaW5dICovIGxvbmcgc3RhcnQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxI
VE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxl
bWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgaW5wdXRFbGVtZW50
LnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKICAgICByZXR1cm4gU19PSzsKQEAgLTEyNjEsNyAr
MTI1OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6
c2V0U2VsZWN0aW9uU3RhcnQoCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1
dEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCAKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIGxvbmcg
KnN0YXJ0KQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4o
bV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkp
OwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgICpzdGFydCA9IGlucHV0RWxlbWVudC5zZWxlY3Rp
b25TdGFydCgpOwogICAgIHJldHVybiBTX09LOwpAQCAtMTI3MCw3ICsxMjY3LDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydCgK
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0
aW9uRW5kKCAKICAgICAvKiBbaW5dICovIGxvbmcgZW5kKQogewotICAgIEFTU0VSVChtX2VsZW1l
bnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhU
TUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgIGlu
cHV0RWxlbWVudC5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKICAgICByZXR1cm4gU19PSzsKQEAgLTEy
NzksNyArMTI3Niw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxl
bWVudDo6c2V0U2VsZWN0aW9uRW5kKAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1M
SW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQoIAogICAgIC8qIFtyZXR2YWxdW291dF0gKi8gbG9u
ZyAqZW5kKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4o
bV9lbGVtZW50KSk7CisgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkp
OwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCptX2VsZW1lbnQpOwogICAgICplbmQgPSBpbnB1dEVsZW1lbnQuc2VsZWN0aW9u
RW5kKCk7CiAgICAgcmV0dXJuIFNfT0s7CkBAIC0xMjkwLDcgKzEyODcsNiBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCgKIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6aXNUZXh0RmllbGQoCiAg
ICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKG1fZWxl
bWVudCk7CiAgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAg
IEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KCptX2VsZW1lbnQpOwogICAgICpyZXN1bHQgPSBpbnB1dEVsZW1lbnQuaXNUZXh0RmllbGQo
KSA/IFRSVUUgOiBGQUxTRTsKQEAgLTEzMDAsNyArMTI5Niw2IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6aXNUZXh0RmllbGQoCiBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnJlY3RPblNjcmVlbiggCiAgICAgLyog
W3JldHZhbF1bb3V0XSAqLyBMUFJFQ1QgcmVjdCkKIHsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsK
ICAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgcmVjdC0+
bGVmdCA9IHJlY3QtPnRvcCA9IHJlY3QtPnJpZ2h0ID0gcmVjdC0+Ym90dG9tID0gMDsKICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9lbGVtZW50LT5yZW5kZXJlcigpOwpAQCAtMTMyNiw3
ICsxMzIxLDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbGVtZW50
OjpyZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2UoCiAgICAgaWYgKCFyZXBsYWNlbWVudFN0cmluZykK
ICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAg
IEFTU0VSVChpczxIVE1MSW5wdXRFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MSW5wdXRF
bGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVt
ZW50KTsKIApAQCAtMTM0Myw3ICsxMzM3LDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBE
T01IVE1MSW5wdXRFbGVtZW50OjpzZWxlY3RlZFJhbmdlKAogICAgIC8qIFtvdXRdICovIGludCog
c3RhcnQsCiAgICAgLyogW291dF0gKi8gaW50KiBlbmQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVu
dCk7CiAgICAgQVNTRVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEhU
TUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCptX2VsZW1lbnQpOwogICAgICpzdGFydCA9IGlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydCgp
OwpAQCAtMTM1NCw3ICsxMzQ3LDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1M
SW5wdXRFbGVtZW50OjpzZWxlY3RlZFJhbmdlKAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBE
T01IVE1MSW5wdXRFbGVtZW50OjpzZXRBdXRvZmlsbGVkKCAKICAgICAvKiBbaW5dICovIEJPT0wg
ZmlsbGVkKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIEFTU0VSVChpczxIVE1MSW5w
dXRFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVtZW50KTsKICAgICBpbnB1dEVs
ZW1lbnQuc2V0QXV0b2ZpbGxlZCghIWZpbGxlZCk7CkBAIC0xMzY0LDcgKzEzNTYsNiBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OnNldEF1dG9maWxsZWQo
CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2Zp
bGxlZCgKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkKIHsKLSAgICBBU1NF
UlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50
KSk7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKm1fZWxlbWVudCk7CiAgICAgKnJlc3VsdCA9IGlucHV0RWxlbWVudC5pc0F1
dG9maWxsZWQoKSA/IFRSVUUgOiBGQUxTRTsKQEAgLTEzODAsNyArMTM3MSw3IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWxlbWVudDo6aXNVc2VyRWRpdGVkKAogICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwogCiAgICAgKnJlc3VsdCA9IEZBTFNFOwotICAgIEFTU0VS
VChtX2VsZW1lbnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4obV9lbGVtZW50KSk7CisgICAgQVNT
RVJUKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZWxlbWVudCkpOwogICAgIEJPT0wgdGV4dEZpZWxk
ID0gRkFMU0U7CiAgICAgaWYgKEZBSUxFRChpc1RleHRGaWVsZCgmdGV4dEZpZWxkKSkgfHwgIXRl
eHRGaWVsZCkKICAgICAgICAgcmV0dXJuIFNfT0s7CkBAIC0xNDI2LDggKzE0MTcsOCBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6OmZvcm0oCiB7CiAg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKnJlc3VsdCA9
IDA7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MVGV4dEFyZWFFbGVtZW50PihtX2Vs
ZW1lbnQpKTsKKyAgICAqcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBBU1NFUlQoaXM8SFRNTFRleHRB
cmVhRWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgdGV4dGFy
ZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm1fZWxlbWVudCk7CiAg
ICAgQ09NUHRyPElET01FbGVtZW50PiBkb21FbGVtZW50OwogICAgIGRvbUVsZW1lbnQuYWRvcHRS
ZWYoRE9NSFRNTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKHRleHRhcmVhRWxlbWVudC5mb3JtKCkp
KTsKQEAgLTE1NDQsNyArMTUzNSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRN
TFRleHRBcmVhRWxlbWVudDo6dHlwZSgKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRN
TFRleHRBcmVhRWxlbWVudDo6dmFsdWUoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJT
VFIqIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQobV9lbGVtZW50ICYmIGlzPEhUTUxUZXh0QXJlYUVs
ZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxIVE1MVGV4dEFyZWFFbGVtZW50Piht
X2VsZW1lbnQpKTsKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0YXJlYUVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9lbGVtZW50KTsKICAgICBXVEY6OlN0cmlu
ZyB2YWx1ZVN0cmluZyA9IHRleHRhcmVhRWxlbWVudC52YWx1ZSgpOwogICAgICpyZXN1bHQgPSBC
U3RyaW5nKHZhbHVlU3RyaW5nKS5yZWxlYXNlKCk7CkBAIC0xNTU2LDcgKzE1NDcsNyBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6OnZhbHVlKAogSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZSgg
CiAgICAgICAgIC8qIFtpbl0gKi8gQlNUUiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQobV9lbGVtZW50
ICYmIGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG1fZWxlbWVudCkpOworICAgIEFTU0VSVChpczxI
VE1MVGV4dEFyZWFFbGVtZW50PihtX2VsZW1lbnQpKTsKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50
JiB0ZXh0YXJlYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9lbGVt
ZW50KTsKICAgICB0ZXh0YXJlYUVsZW1lbnQuc2V0VmFsdWUoU3RyaW5nKChVQ2hhciopIHZhbHVl
LCBTeXNTdHJpbmdMZW4odmFsdWUpKSk7CiAgICAgcmV0dXJuIFNfT0s7CkBAIC0xNTY0LDcgKzE1
NTUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ6
OnNldFZhbHVlKAogICAgIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MVGV4dEFy
ZWFFbGVtZW50OjpzZWxlY3QoIHZvaWQpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxI
VE1MVGV4dEFyZWFFbGVtZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTFRleHRB
cmVhRWxlbWVudD4obV9lbGVtZW50KSk7CiAgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgdGV4dGFy
ZWFFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKm1fZWxlbWVudCk7CiAg
ICAgdGV4dGFyZWFFbGVtZW50LnNlbGVjdCgpOwogICAgIHJldHVybiBTX09LOwpAQCAtMTU3OSw3
ICsxNTcwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MVGV4dEFyZWFFbGVt
ZW50Ojppc1VzZXJFZGl0ZWQoCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKICAgICAqcmVz
dWx0ID0gRkFMU0U7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCAmJiBpczxIVE1MVGV4dEFyZWFFbGVt
ZW50PihtX2VsZW1lbnQpKTsKKyAgICBBU1NFUlQoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4obV9l
bGVtZW50KSk7CiAgICAgaWYgKGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2VsZW1l
bnQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpKQogICAgICAgICAqcmVzdWx0ID0gVFJVRTsKICAg
ICByZXR1cm4gU19PSzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNw
cCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAppbmRleCBmZjFiZmFiMWMwYmRiODM0
M2U5NDAzZTYyYzEyZDNkYzU1ODFlNTQ3Li42OGVkNzA1YjU1YzFiNTk1MThhMTc4MWU2NDc4ZjIw
ZjYyNzRkY2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCkBAIC0yMDIsNyArMjAyLDcgQEAgc3Rh
dGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChJRE9NRWxlbWVu
dCAqZWxlbWVudCkKICAgICAgICAgRWxlbWVudCogZWxlOwogICAgICAgICBociA9IGVsZVByaXYt
PmNvcmVFbGVtZW50KCh2b2lkKiopJmVsZSk7CiAgICAgICAgIGVsZVByaXYtPlJlbGVhc2UoKTsK
LSAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgZWxlICYmIGlzPEhUTUxGb3JtRWxlbWVudD4o
ZWxlKSkKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgaXM8SFRNTEZvcm1FbGVtZW50Pihl
bGUpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtRWxlbWVudD4oZWxlKTsK
ICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KElET01FbGVtZW50KiBl
bGVtZW50KQogICAgICAgICBFbGVtZW50KiBlbGU7CiAgICAgICAgIGhyID0gZWxlUHJpdi0+Y29y
ZUVsZW1lbnQoKHZvaWQqKikmZWxlKTsKICAgICAgICAgZWxlUHJpdi0+UmVsZWFzZSgpOwotICAg
ICAgICBpZiAoU1VDQ0VFREVEKGhyKSAmJiBlbGUgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oZWxl
KSkKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oZWxl
KSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGUpOwog
ICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTExMDEsNyArMTEwMSw3IEBAIEhSRVNVTFQg
V2ViRnJhbWU6OmVsZW1lbnRXaXRoTmFtZShCU1RSIG5hbWUsIElET01FbGVtZW50KiBmb3JtLCBJ
RE9NRWxlbWVudCoqIGVsCiAgICAgICAgIGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CiAgICAg
ICAgIEF0b21pY1N0cmluZyB0YXJnZXROYW1lKChVQ2hhciopbmFtZSwgU3lzU3RyaW5nTGVuKG5h
bWUpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5zaXpl
KCk7IGkrKykgewotICAgICAgICAgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihl
bGVtZW50c1tpXSkpCisgICAgICAgICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KCplbGVtZW50c1tpXSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50JiBlbHQgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PigqZWxlbWVudHNbaV0pOwogICAgICAgICAgICAgLy8gU2tpcCBvcHRpb24gZWxlbWVudHMs
IG90aGVyIGR1ZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5kZXJP
YmplY3QuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKaW5k
ZXggMTk2MDNjNWMwMTNhMzk3ZmE4MjkyMGZkNGQzOWYzNzQzN2Q2NTE0Ny4uMWJlZjI2NDg5ZDQ4
NjkwYzZkOGU1OWRlZTU2N2FkYmUxZjM1MzcwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YlJlbmRlck9iamVjdC5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgV2ViUmVuZGVyT2JqZWN0OjpXZWJS
ZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgYm9vbCBzaG91bGRJbmNsdWRlRGVz
Y2UKICAgICBtX25hbWUgPSByZW5kZXJlci0+cmVuZGVyTmFtZSgpOwogCiAgICAgaWYgKE5vZGUq
IG5vZGUgPSByZW5kZXJlci0+bm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50Pihub2Rl
KSkgeworICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBFbGVt
ZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAgICAgICAgICAgbV9l
bGVtZW50VGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZSgpOwogICAgICAgICAgICAgbV9lbGVtZW50
SUQgPSBlbGVtZW50LmdldElkQXR0cmlidXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggZjQ0NDczNGY4M2MxNzJhMzhmYzJiNTE0MGNlMzhl
MDY0ZWM2ZWI0Mi4uYTRhNTMwNjdlZjdlYjU0ZTQxODY2NDZkMDNhNTllNDE2ZjBkNjdhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcApAQCAtMTE0LDcg
KzExNCw3IEBAIEJ1bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGUgSW5qZWN0ZWRCdW5kbGVIaXRU
ZXN0UmVzdWx0OjptZWRpYVR5cGUoKSBjb25zdAogICAgIHJldHVybiBCdW5kbGVIaXRUZXN0UmVz
dWx0TWVkaWFUeXBlTm9uZTsKICNlbHNlCiAgICAgV2ViQ29yZTo6Tm9kZSogbm9kZSA9IG1faGl0
VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+KG5v
ZGUpKQorICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4gQnVuZGxl
SGl0VGVzdFJlc3VsdE1lZGlhVHlwZU5vbmU7CiAgICAgCiAgICAgaWYgKCFkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSkuaXNNZWRpYUVsZW1lbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBlNDkzMjkyN2QzZmQzMmMxNjZjOTgy
NTRhYWM2MzI2Y2FmMTAyMmUyLi4zNjk2OGYwZDkxZTc0NGNlOTRiMDY0OTY4YTVlYzViMmFmYjU5
YmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCkBAIC04OTIsNyArODkyLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVFdmVudChF
dmVudCogZXZlbnQpCiAKICAgICBjb25zdCBXZWJFdmVudCogY3VycmVudEV2ZW50ID0gV2ViUGFn
ZTo6Y3VycmVudEV2ZW50KCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkV2ZW50PiBzaW11bGF0
ZWRXZWJFdmVudDsKLSAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1v
dXNlRXZlbnQ+KCpldmVudCkuaXNTaW11bGF0ZWQoKSkgeworICAgIGlmIChpczxNb3VzZUV2ZW50
PigqZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuaXNTaW11bGF0ZWQoKSkg
ewogICAgICAgICBzaW11bGF0ZWRXZWJFdmVudCA9IGNyZWF0ZVdlYkV2ZW50KGRvd25jYXN0PE1v
dXNlRXZlbnQ+KGV2ZW50KSk7CiAgICAgICAgIGN1cnJlbnRFdmVudCA9IHNpbXVsYXRlZFdlYkV2
ZW50LmdldCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCBjZGVjYmRhNGY5
YzRjYzFiYjA0NjY1ZGQwOWRkMGQ0MTZkZTdhZjJjLi44MDA2NDViZjBmMGE4OWNlNTE1ZjM1MDcz
MjYxOTVlNzkwZmJhMGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0xNzYsOCArMTc2
LDYgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbiBkaXJl
Y3Rpb24pCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb2N1c2VkRWxlbWVudENoYW5nZWQoRWxl
bWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKICAg
ICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCA0YjUyOWE5N2U4MDhhZWI0M2EyM2VlZjY1Y2Vl
YWUxYjA0ZjQ3ZTU2Li4xN2ZjM2E1MmIzOGZjMzBiMzI2YTEwMDAwMDExZmQ5N2NmZWUwNzIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50KikKIAogdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlbGVt
ZW50KQogewotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCisgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LT5k
b2N1bWVudCgpLmZyYW1lKCkpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKIAogdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkK
IHsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmICghaXM8
SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJG
cmFtZSogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZWxlbWVudC0+ZG9jdW1l
bnQoKS5mcmFtZSgpKTsKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogCiB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0g
ICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxJ
bnB1dEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBpbml0
aWF0ZWRCeVVzZXJUeXBpbmcgPSBVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2lu
Z1VzZXJUeXBpbmdHZXN0dXJlKCkgJiYgVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3I6OmZvY3Vz
ZWRFbGVtZW50QXRHZXN0dXJlU3RhcnQoKSA9PSBlbGVtZW50OwpAQCAtMzMwLDcgKzMzMCw3IEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCog
ZWxlbWVudCkKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVh
KEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MVGV4dEFyZWFFbGVtZW50Pihl
bGVtZW50KSkKKyAgICBpZiAoIWlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCplbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21D
b3JlRnJhbWUoKmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CkBAIC0zOTMsNyArMzkzLDcg
QEAgc3RhdGljIEFQSTo6SW5qZWN0ZWRCdW5kbGU6OkZvcm1DbGllbnQ6OklucHV0RmllbGRBY3Rp
b24gdG9JbnB1dEZpZWxkQWN0aW9uKFdLSW4KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmRvVGV4
dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiBlbGVtZW50LCBLZXlib2FyZEV2ZW50KiBl
dmVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlm
ICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBXS0lucHV0RmllbGRBY3Rpb25UeXBlIGFjdGlvblR5cGUgPSBzdGF0aWNfY2FzdDxX
S0lucHV0RmllbGRBY3Rpb25UeXBlPigwKTsKQEAgLTQwOCw3ICs0MDgsNyBAQCBib29sIFdlYkVk
aXRvckNsaWVudDo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqIGVsZW1lbnQs
IEtleWJvYXJkRXZlbgogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dFdpbGxCZURlbGV0ZWRJ
blRleHRGaWVsZChFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghaXM8SFRNTElucHV0RWxl
bWVudD4oZWxlbWVudCkpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpm
cm9tQ29yZUZyYW1lKCplbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggZDlhZGNjNjE2OTNl
M2U1OWI3Mzc0MWY5OTQ5NDNkYzI0ZWYxYTZlMy4uNTRlMGI3ZGZmMjg3ZTc4YWM0NDNlZjgwODdl
ZmQ0Mjk5N2NiMWFjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCkBAIC02MTMsOSArNjEzLDkgQEAgYm9vbCBXZWJGcmFtZTo6Y29udGFpbnNB
bnlGb3JtRWxlbWVudHMoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50
Tm9kZSgpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50Pihub2RlKSkKKyAgICAgICAg
aWYgKGlzPEhUTUxGb3JtRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTYzMSw5ICs2MzEsOSBAQCBib29sIFdlYkZy
YW1lOjpjb250YWluc0FueUZvcm1Db250cm9scygpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsg
bm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKCFu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihu
b2RlKSB8fCBpczxIVE1MU2VsZWN0RWxlbWVudD4obm9kZSkgfHwgaXM8SFRNTFRleHRBcmVhRWxl
bWVudD4obm9kZSkpCisgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkgfHwg
aXM8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKSB8fCBpczxIVE1MVGV4dEFyZWFFbGVtZW50Pigq
bm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4
IDZlYTc2YWNmMzNjNzExNDIzMzc2NWYyZmZlNmFkOTVmNTQ3MDAyMjQuLjM2ZmI4ZmMyZDI4ZWI4
Mzg3Zjc0MmUxYTA5Zjk4MjJjZjY0OGFhZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM3MDAsOSArMzcwMCw2IEBAIHZvaWQgV2ViUGFn
ZTo6c3RvcFNwZWFraW5nKCkKIFJldGFpblB0cjxQREZEb2N1bWVudD4gV2ViUGFnZTo6cGRmRG9j
dW1lbnRGb3JQcmludGluZ0ZyYW1lKEZyYW1lKiBjb3JlRnJhbWUpCiB7CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgaWYgKCFpczxQbHVnaW5Eb2N1bWVudD4oZG9j
dW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDYyMiw3ICs0NjE5LDcgQEAg
dm9pZCBXZWJQYWdlOjpkZXRlcm1pbmVQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW4oKQogICAgICAg
ICAgICAgaW5mbGF0ZWRQbHVnaW5SZWN0LmluZmxhdGVZKHlPZmZzZXQpOwogCiAgICAgICAgICAg
ICBpZiAoZWxlbWVudCAhPSAmcGx1Z0luSW1hZ2VFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCEoaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCkKKyAgICAgICAgICAgICAgICBpZiAo
IShpczxIVE1MSW1hZ2VFbGVtZW50PigqZWxlbWVudCkKICAgICAgICAgICAgICAgICAgICAgJiYg
aW5mbGF0ZWRQbHVnaW5SZWN0LmNvbnRhaW5zKGVsZW1lbnRSZWN0UmVsYXRpdmVUb1RvcERvY3Vt
ZW50KQogICAgICAgICAgICAgICAgICAgICAmJiBlbGVtZW50UmVjdFJlbGF0aXZlVG9Ub3BEb2N1
bWVudC53aWR0aCgpID4gcGx1Z2luUmVuZGVyQm94LndpZHRoKCkgKiBtaW5pbXVtT3ZlcmxhcHBp
bmdJbWFnZVRvUGx1Z2luRGltZW5zaW9uU2NhbGUKICAgICAgICAgICAgICAgICAgICAgJiYgZWxl
bWVudFJlY3RSZWxhdGl2ZVRvVG9wRG9jdW1lbnQuaGVpZ2h0KCkgPiBwbHVnaW5SZW5kZXJCb3gu
aGVpZ2h0KCkgKiBtaW5pbXVtT3ZlcmxhcHBpbmdJbWFnZVRvUGx1Z2luRGltZW5zaW9uU2NhbGUp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tCmluZGV4IDdkMjljMDM2ZDcwZDdiMDEyMjY5ZjdlNmY5MzNkOGFjYmE1YzgxZDguLmM2
NjdjZjdmOGQ0ODkzOTA1MWE2ODhiZTcwYzY5NTg4ZDg1ZWIzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTYwNCwx
NSArNjA0LDEzIEBAIHZvaWQgV2ViUGFnZTo6aW5zcGVjdG9yTm9kZVNlYXJjaEVuZGVkQXRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIAogdm9pZCBXZWJQYWdlOjpibHVyQXNz
aXN0ZWROb2RlKCkKIHsKLSAgICBpZiAobV9hc3Npc3RlZE5vZGUgJiYgaXM8RWxlbWVudD4oKm1f
YXNzaXN0ZWROb2RlKSkKKyAgICBpZiAoaXM8RWxlbWVudD4obV9hc3Npc3RlZE5vZGUpKQogICAg
ICAgICBkb3duY2FzdDxFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpLmJsdXIoKTsKIH0KIAogdm9p
ZCBXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewot
ICAgIGlmICghbV9hc3Npc3RlZE5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaXM8SFRN
TElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKSkgeworICAgIGlmIChpczxIVE1MSW5wdXRF
bGVtZW50PihtX2Fzc2lzdGVkTm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgZWxl
bWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSk7CiAgICAg
ICAgIGVsZW1lbnQuc2V0VmFsdWUodmFsdWUsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7
CiAgICAgfQpAQCAtNjIxLDkgKzYxOSw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0ZWROb2Rl
VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogdm9pZCBXZWJQYWdlOjpzZXRBc3Npc3RlZE5v
ZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBpZiAoIW1fYXNzaXN0ZWROb2Rl
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lz
dGVkTm9kZSkpIHsKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obV9hc3Npc3RlZE5vZGUp
KSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpOwogICAgICAgICBlbGVtZW50LnNldFZhbHVlQXNO
dW1iZXIodmFsdWUsIEFTU0VSVF9OT19FWENFUFRJT04sIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VF
dmVudCk7CiAgICAgfQpAQCAtNjMxLDcgKzYyNyw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0
ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUgdmFsdWUpCiAKIHZvaWQgV2ViUGFnZTo6c2V0QXNz
aXN0ZWROb2RlU2VsZWN0ZWRJbmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGxl
U2VsZWN0aW9uKQogewotICAgIGlmICghbV9hc3Npc3RlZE5vZGUgfHwgIWlzPEhUTUxTZWxlY3RF
bGVtZW50PigqbV9hc3Npc3RlZE5vZGUpKQorICAgIGlmICghaXM8SFRNTFNlbGVjdEVsZW1lbnQ+
KG1fYXNzaXN0ZWROb2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIEhUTUxTZWxlY3RFbGVtZW50
JiBzZWxlY3QgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsK
ICAgICBzZWxlY3Qub3B0aW9uU2VsZWN0ZWRCeVVzZXIoaW5kZXgsIHRydWUsIGFsbG93TXVsdGlw
bGVTZWxlY3Rpb24pOwpAQCAtMTg4OCw3ICsxODg0LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQb3Np
dGlvbkluZm9ybWF0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwgSW50ZXJhY3Rpb25JbmZvcm1h
dGkKICAgICBpZiAoaGl0Tm9kZSkgewogICAgICAgICBpbmZvLmNsaWNrYWJsZUVsZW1lbnROYW1l
ID0gaGl0Tm9kZS0+bm9kZU5hbWUoKTsKIAotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gaXM8
RWxlbWVudD4oaGl0Tm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihoaXROb2RlKSA6IG51bGxwdHI7
CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50PigqaGl0Tm9kZSkgPyBkb3du
Y2FzdDxFbGVtZW50PihoaXROb2RlKSA6IG51bGxwdHI7CiAgICAgICAgIGlmIChlbGVtZW50KSB7
CiAgICAgICAgICAgICBFbGVtZW50KiBsaW5rRWxlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAg
ICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5pc1JlbmRl
ckltYWdlKCkpIHsKQEAgLTE5NTIsNyArMTk0OCw3IEBAIHZvaWQgV2ViUGFnZTo6c3RvcEludGVy
YWN0aW9uKCkKIAogdm9pZCBXZWJQYWdlOjpwZXJmb3JtQWN0aW9uT25FbGVtZW50KHVpbnQzMl90
IGFjdGlvbikKIHsKLSAgICBpZiAoIW1faW50ZXJhY3Rpb25Ob2RlIHx8ICFpczxIVE1MRWxlbWVu
dD4obV9pbnRlcmFjdGlvbk5vZGUuZ2V0KCkpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG1f
aW50ZXJhY3Rpb25Ob2RlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSFRNTEVsZW1l
bnQqIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4obV9pbnRlcmFjdGlvbk5vZGUuZ2V0
KCkpOwpAQCAtMTk5MCwxMSArMTk4NiwxMSBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1BY3Rpb25P
bkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNBc3Npc3Rh
YmxlTm9kZShOb2RlKiBub2RlKQogewotICAgIGlmIChpczxIVE1MU2VsZWN0RWxlbWVudD4obm9k
ZSkpCisgICAgaWYgKGlzPEhUTUxTZWxlY3RFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50Pihub2RlKSkKKyAgICBpZiAo
aXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4gIWRvd25jYXN0
PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCpub2RlKS5pc1JlYWRPbmx5Tm9kZSgpOwotICAgIGlmIChp
czxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkgeworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50
Pigqbm9kZSkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgcmV0dXJuICFlbGVtZW50LmlzUmVh
ZE9ubHlOb2RlKCkgJiYgKGVsZW1lbnQuaXNUZXh0RmllbGQoKSB8fCBlbGVtZW50LmlzRGF0ZUZp
ZWxkKCkgfHwgZWxlbWVudC5pc0RhdGVUaW1lTG9jYWxGaWVsZCgpIHx8IGVsZW1lbnQuaXNNb250
aEZpZWxkKCkgfHwgZWxlbWVudC5pc1RpbWVGaWVsZCgpKTsKICAgICB9CkBAIC0yMDc3LDEwICsy
MDczLDEwIEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgICAgICAvLyBJZiBhIHNlbGVjdCBk
b2VzIG5vdCBoYXZlIGdyb3VwcywgYWxsIHRoZSBvcHRpb24gZWxlbWVudHMgaGF2ZSBncm91cCBJ
RCAwLgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAg
ICAgICAgIEhUTUxFbGVtZW50KiBpdGVtID0gaXRlbXNbaV07Ci0gICAgICAgICAgICBpZiAoaXM8
SFRNTE9wdGlvbkVsZW1lbnQ+KGl0ZW0pKSB7CisgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KCppdGVtKSkgewogICAgICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBv
cHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW0pOwogICAgICAgICAgICAg
ICAgIGluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMuYXBwZW5kKE9wdGlvbkl0ZW0ob3B0aW9uLnRl
eHQoKSwgZmFsc2UsIHBhcmVudEdyb3VwSUQsIG9wdGlvbi5zZWxlY3RlZCgpLCBvcHRpb24uZmFz
dEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cikpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oaXRlbSkpIHsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKml0ZW0pKSB7CiAgICAg
ICAgICAgICAgICAgSFRNTE9wdEdyb3VwRWxlbWVudCYgZ3JvdXAgPSBkb3duY2FzdDxIVE1MT3B0
R3JvdXBFbGVtZW50PigqaXRlbSk7CiAgICAgICAgICAgICAgICAgcGFyZW50R3JvdXBJRCsrOwog
ICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMuYXBwZW5kKE9wdGlvbkl0
ZW0oZ3JvdXAuZ3JvdXBMYWJlbFRleHQoKSwgdHJ1ZSwgMCwgZmFsc2UsIGdyb3VwLmZhc3RIYXNB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>