<?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>193303</bug_id>
          
          <creation_ts>2019-01-09 14:55:24 -0800</creation_ts>
          <short_desc>Remove the UIProcess components of the ResourceLoadStatistics code</short_desc>
          <delta_ts>2019-01-28 11:34:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>193297</dependson>
    
    <dependson>193556</dependson>
    
    <dependson>193659</dependson>
          <blocked>193199</blocked>
    
    <blocked>193705</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1493117</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-01-09 14:55:24 -0800</bug_when>
    <thetext>Once Bug 193297 is landed, we should remove the old UIProcess code that used to do the same work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493118</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-09 14:55:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/47160073&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498688</commentid>
    <comment_count>2</comment_count>
      <attachid>360229</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-01-25 23:09:25 -0800</bug_when>
    <thetext>Created attachment 360229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499042</commentid>
    <comment_count>3</comment_count>
      <attachid>360229</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-01-28 08:52:44 -0800</bug_when>
    <thetext>Comment on attachment 360229
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=360229&amp;action=review

r=me

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:2
&gt; + * Copyright (C) 2017-2019Ã Apple Inc. All rights reserved.

Bad character.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499051</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-01-28 09:29:51 -0800</bug_when>
    <thetext>Committed r240586: &lt;https://trac.webkit.org/changeset/240586&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499052</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-01-28 09:30:03 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; Comment on attachment 360229 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=360229&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:2
&gt; &gt; + * Copyright (C) 2017-2019Ã Apple Inc. All rights reserved.
&gt; 
&gt; Bad character.

Fixed while landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499107</commentid>
    <comment_count>6</comment_count>
      <attachid>360229</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-01-28 11:29:13 -0800</bug_when>
    <thetext>Comment on attachment 360229
Patch

This is the most beautiful patch I&apos;ve seen in a while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499112</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-01-28 11:34:03 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #6)
&gt; Comment on attachment 360229 [details]
&gt; Patch
&gt; 
&gt; This is the most beautiful patch I&apos;ve seen in a while.

lol. I notice I did manage to get an accidental whitespace change in. :-(</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360229</attachid>
            <date>2019-01-25 23:09:25 -0800</date>
            <delta_ts>2019-01-28 08:52:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193303-20190125230924.patch</filename>
            <type>text/plain</type>
            <size>85233</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDJlMGU4ZDI0YTU4Njk0ZjFi
NmNmMjIyMTNhNzZlOWNlMzNkMDU2ZmIuLjEzMzFhZjFmNTA3MjNiMzEzMGMxMzMxZGQ0ODI5Mjg3
N2ZlYjUwMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTktMDEtMjUgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBVSVByb2Nl
c3MgY29tcG9uZW50cyBvZiB0aGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBjb2RlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTMzMDMKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzQ3MTYwMDczPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGNv
ZGUgaXMgcnVubmluZyBpbiB0aGUgTmV0d29ya1Byb2Nlc3MsIHdlIGNhbiBnZXQgcmlkCisgICAg
ICAgIG9mIHRoZSBVSVByb2Nlc3MgY29waWVzIG9mIHRoZXNlIHJvdXRpbmVzLgorCisgICAgICAg
IFRlc3RlZCBieSBleGlzdGluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGFuZCBTdG9yYWdlQWNj
ZXNzIHRlc3RzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2Fw
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Y2FsbEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbGxHcmFudFN0b3Jh
Z2VBY2Nlc3NIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRDYWNoZU1heEFnZUNhcCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2FsbFVwZGF0ZVByZXZh
bGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbGxSZW1vdmVEb21haW5zSGFuZGxlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVz
dGluZ0V2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpub3RpZnlSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJvY2Vzc2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkZWxldGVXZWJzaXRlRGF0YUZv
clRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3Jlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dG9wUHJp
dmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNlbmREaWFnbm9zdGljTWVzc2FnZVdp
dGhWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZCBjb25zdCk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3Jlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6dG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZl
dGNoRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0
UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxl
bnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFy
YW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHNQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFz
dFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJh
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhl
cmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6d2ViUHJvY2Vzc1dpbGxP
cGVuQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OndlYlBy
b2Nlc3NEaWRDbG9zZUNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dp
dGhXZWJzaXRlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlUHJldmFs
ZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzRm9y
RnJhbWVIYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUHJldmFsZW50RG9t
YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3Jh
bmRmYXRoZXJlZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuaDoKKwogMjAxOS0wMS0yNSAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIFdlYktpdEFkZGl0aW9ucy54Y2NvbmZpZyB3aXRo
IGNvcnJlY3Qgb3JkZXIgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKaW5kZXggOGY5MjdlYjlkY2M0
ZmFkMGIxNzU4OWE4YTIwZmFjMjcyYmExZDA3YS4uYjE4OGQ0MjI5ODVlOTU5NTM5ODE3YTUwNjBl
ZjQ4ODEzNmU1YmM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTnDnyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5Nyw4ICs4OTcsNiBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25kcyA9IG1fcGFyYW1l
dGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWVdICgpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHdlYnNpdGVEYXRhU3RvcmUgPSBzdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpKQotICAgICAgICAg
ICAgd2Vic2l0ZURhdGFTdG9yZS0+c2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoc2Vjb25k
cywgW10geyB9KTsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gc3RvcmUtPm5l
dHdvcmtTZXNzaW9uKCkpCiAgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+bmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKCkuc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoc2Vjb25kcyk7CiAgICAg
fSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCmlu
ZGV4IGIyYTM4ODdiMmM3M2JkNzliMTc1NzYwYjJlYjg2ZTZiZGJmNzhkMjUuLjMzZjVmMGQwMDI4
NzAyZDIxNWM2NDUwZDdmNzc4YjAzMzNjNmFiOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAi
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFG
ZXRjaE9wdGlvbi5oIgotI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFn
bm9zdGljTG9nZ2luZ0tleXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oPgpAQCAtMTM4LDIxICsxMzcsNiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbAogICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKLVdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYnNpdGVEYXRhU3RvcmUmIHdlYnNp
dGVEYXRhU3RvcmUpCi0gICAgOiBtX3dlYnNpdGVEYXRhU3RvcmUobWFrZVdlYWtQdHIod2Vic2l0
ZURhdGFTdG9yZSkpCi0gICAgLCBtX3N0YXRpc3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgi
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIsIFdvcmtR
dWV1ZTo6VHlwZTo6U2VyaWFsLCBXb3JrUXVldWU6OlFPUzo6VXRpbGl0eSkpCi0gICAgLCBtX2Rh
aWx5VGFza3NUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKQotewotICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSA9IHdlYnNpdGVEYXRhU3RvcmUucmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgbV9tZW1vcnlTdG9yZSA9IHN0
ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqdGhpcywg
bV9zdGF0aXN0aWNzUXVldWUpOwotICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlID0gc3RkOjpt
YWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+KCptX21l
bW9yeVN0b3JlLCBtX3N0YXRpc3RpY3NRdWV1ZSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeSk7Ci0gICAgfSk7Ci0KLSAgICBtX2RhaWx5VGFza3NUaW1lci5zdGFydFJlcGVhdGluZygy
NF9oKTsKLX0KLQogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUoTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtTZXNzaW9uLCBjb25zdCBT
dHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCiAgICAgOiBtX25ldHdvcmtT
ZXNzaW9uKG1ha2VXZWFrUHRyKG5ldHdvcmtTZXNzaW9uKSkKICAgICAsIG1fc3RhdGlzdGljc1F1
ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJv
Y2VzcyBEYXRhIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9T
OjpVdGlsaXR5KSkKQEAgLTIyMywxMyArMjA3LDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWwK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBy
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4odXJsKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgU3RyaW5nJiBwcmlt
YXJ5RG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTMwOCwxMSArMjg1LDYgQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbGxIYXNTdG9yYWdlQWNjZXNz
Rm9yRnJhbWVIYW5kbGVyKGNvbnN0IFMKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmUtPmhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIocmVzb3VyY2VEb21haW4sIGZp
cnN0UGFydHlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKG1fbmV0d29ya1Nlc3Npb24pIHsKICAgICAg
ICAgY2FsbGJhY2sobV9uZXR3b3JrU2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuaGFz
U3RvcmFnZUFjY2VzcyhyZXNvdXJjZURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbiwgZnJhbWVJRCwg
cGFnZUlEKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQwMywxMSArMzc1LDYgQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbGxHcmFudFN0b3JhZ2VBY2Nlc3NIYW5kbGVy
KGNvbnN0IFN0cmluZyYKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAg
aWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmdy
YW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVBy
aW1hcnlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgY2FsbGJhY2soZ3JhbnRTdG9yYWdlQWNjZXNzKHN1YkZy
YW1lUHJpbWFyeURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQp
KTsKIH0KIApAQCAtNDI2LDExICszOTMsNiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2bwogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0
b3JlKSB7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vz
c0hhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgaWYgKG1fbmV0d29ya1Nlc3Npb24pCiAgICAgICAgIG1fbmV0d29ya1Nlc3Np
b24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoKTsKIApA
QCAtNTM2LDE4ICs0OTgsNiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBTdHJpbmcmIHNvdXJjZQogICAgIH0pOwogfQog
Ci12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVyYWN0aW9u
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICh1cmwu
cHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9nVXNlckludGVyYWN0
aW9uKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4odXJsKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJp
bWFyeURvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC01NTksMTggKzUwOSw2IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24o
Y29uc3QgU3RyaW5nJiB0YXJnZXRQcmltCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgp
IHx8IHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNsZWFyVXNlckludGVyYWN0aW9uKFdlYkNvcmU6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4odXJsKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiB0YXJnZXRQcmltYXJ5RG9tYWluLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTU4MiwxOCArNTIwLDYgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0UHIKICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJs
LmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBoYXNIYWRVc2VySW50ZXJhY3Rpb24oV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih1cmwpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpo
YXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIHBvc3RU
YXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gcHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKQEAgLTYwNCwxOCArNTMwLDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnkKICAgICB9KTsK
IH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKGNv
bnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
ZXRMYXN0U2VlbihXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWlu
KHVybCksIHNlY29uZHMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFN0cmluZyYg
cmVzb3VyY2VEb21haW4sIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CkBAIC02MjcsMTggKzU0MSw2IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRMYXN0U2Vlbihjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBTCiAgICAgfSk7CiB9
CiAgICAgCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
aWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQcmV2
YWxlbnRSZXNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9t
YWluKHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmlu
ZyYgcmVzb3VyY2VEb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtNjUwLDE4ICs1
NTIsNiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgU3RyaW5nJiByZXNvdXJjZQogICAgIH0pOwogfQogCi12b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICh1cmwucHJvdG9j
b2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0VmVyeVByZXZhbGVudFJlc291
cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4odXJsKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJp
bWFyeURvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC02ODUsMTggKzU3NSw2IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyhDb21wbGV0aW9uSGFuZGxlCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJv
dXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlzUHJldmFsZW50UmVzb3VyY2UoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih1cmwpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtNzA5LDE4ICs1ODcsNiBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBT
dHJpbmcmIHByaW1hcnlEbwogICAgIH0pOwogfQogICAgIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJsLnByb3RvY29sSXNBYm91
dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2Up
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlzVmVyeVByZXZhbGVudFJlc291
cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4odXJsKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmlt
YXJ5RG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC03MzMsMTMgKzU5OSw2
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29u
c3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiB0b3BGcmFtZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4oc3VicmVzb3VyY2UpLCBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHRvcEZyYW1lKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN0cmlu
ZyYgc3VicmVzb3VyY2UsIGNvbnN0IFN0cmluZyYgdG9wRnJhbWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKQEAgLTc1MiwxMyArNjExLDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdHJpbmcK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lLCBjb25zdCBVUkwmIHRv
cEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaXNSZWdpc3RlcmVk
QXNTdWJGcmFtZVVuZGVyKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlE
b21haW4oc3ViRnJhbWUpLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5
RG9tYWluKHRvcEZyYW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVu
ZGVyKGNvbnN0IFN0cmluZyYgc3ViRnJhbWUsIGNvbnN0IFN0cmluZyYgdG9wRnJhbWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTc3MSwxMyArNjIzLDYgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25z
dCBTdHJpbmcmIHMKICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIGhvc3RSZWRpcmVj
dGVkRnJvbSwgY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKFdlYkNvcmU6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4oaG9zdFJlZGlyZWN0ZWRGcm9tKSwg
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbihob3N0UmVkaXJl
Y3RlZFRvKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0
IFN0cmluZyYgaG9zdFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBTdHJpbmcmIGhvc3RSZWRpcmVjdGVk
VG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTc5MCwxOCArNjM1LDYgQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3Rp
bmdUbyhjb25zdCBTdHJpbmcmIGgKICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8
fCB1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBjbGVhclByZXZhbGVudFJlc291cmNlKFdlYkNvcmU6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4odXJsKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTgxMywxNiArNjQ2LDYgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5n
JiByZXNvdXIKICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgdmFsdWUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRHcmFuZGZhdGhlcmVkKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4odXJsKSwgdmFsdWUsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGJvb2wg
dmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtODM0LDE4ICs2NTcsNiBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBT
dHJpbmcmIGRvbWFpbiwgYm9vbAogICAgIH0pOwogfQogICAgIAotdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkg
fHwgdXJsLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpc0dyYW5kZmF0aGVyZWQoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih1cmwpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpp
c0dyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CkBAIC04NTgsMTggKzY2OSw2IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9t
YWluCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJmcmFtZSwgY29uc3Qg
VVJMJiB0b3BGcmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoc3ViZnJh
bWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgc3ViZnJhbWUuaXNFbXB0eSgpIHx8IHRvcEZyYW1lLnBy
b3RvY29sSXNBYm91dCgpIHx8IHRvcEZyYW1lLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1h
cnlEb21haW4oc3ViZnJhbWUpLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmlt
YXJ5RG9tYWluKHRvcEZyYW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luKGNvbnN0IFN0cmluZyYgc3ViZnJhbWUsIGNvbnN0IFN0cmluZyYgdG9wRnJhbWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtODgxLDE4ICs2ODAsNiBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
KGNvbnN0IFN0cmluZwogICAgIH0pOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2UsIGNvbnN0IFVSTCYgdG9wRnJhbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgaWYgKHN1YnJlc291cmNlLnByb3RvY29sSXNBYm91dCgpIHx8IHN1YnJlc291cmNlLmlz
RW1wdHkoKSB8fCB0b3BGcmFtZS5wcm90b2NvbElzQWJvdXQoKSB8fCB0b3BGcmFtZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHN1YnJlc291cmNlKSwgV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih0b3BGcmFtZSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdHJpbmcmIHN1
YnJlc291cmNlLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKQEAgLTkwNCwxOCArNjkxLDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdHIKICAgICB9KTsK
IH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3RO
YW1lUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzdWJy
ZXNvdXJjZS5wcm90b2NvbElzQWJvdXQoKSB8fCBzdWJyZXNvdXJjZS5pc0VtcHR5KCkgfHwgaG9z
dE5hbWVSZWRpcmVjdGVkVG8ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVk
VG8uaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSksIFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRp
cmVjdGVkVG8pLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8o
Y29uc3QgU3RyaW5nJiBzdWJyZXNvdXJjZSwgY29uc3QgU3RyaW5nJiBob3N0TmFtZVJlZGlyZWN0
ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC05MjcsMTggKzcwMiw2IEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8oY29uc3QgU3RyaW5nCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwm
IHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHN1YnJlc291cmNlLnByb3RvY29sSXNBYm91dCgp
IHx8IHN1YnJlc291cmNlLmlzRW1wdHkoKSB8fCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tLnByb3Rv
Y29sSXNBYm91dCgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZEZyb20uaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOjpwcmltYXJ5RG9tYWluKHN1YnJlc291cmNlKSwgV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljczo6cHJpbWFyeURvbWFpbihob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiBz
dWJyZXNvdXJjZSwgY29uc3QgU3RyaW5nJiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKQEAgLTk1MCwxOCArNzEzLDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFN0cmkKICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lSG9zdE5hbWUs
IGNvbnN0IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKHRvcEZyYW1lSG9zdE5hbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJh
bWVIb3N0TmFtZS5pc0VtcHR5KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkVG8ucHJvdG9jb2xJc0Fi
b3V0KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkVG8uaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0VG8oV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFy
eURvbWFpbih0b3BGcmFtZUhvc3ROYW1lKSwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
czo6cHJpbWFyeURvbWFpbihob3N0TmFtZVJlZGlyZWN0ZWRUbyksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLX0KLQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHRvcEZyYW1lSG9zdE5hbWUs
IGNvbnN0IFN0cmluZyYgaG9zdE5hbWVSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwpAQCAtOTczLDE4ICs3MjQsNiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgdAogICAgIH0p
OwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZUhvc3ROYW1lLCBjb25zdCBVUkwm
IGhvc3ROYW1lUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
aWYgKHRvcEZyYW1lSG9zdE5hbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJhbWVIb3N0TmFt
ZS5pc0VtcHR5KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5wcm90b2NvbElzQWJvdXQoKSB8
fCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20oV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURv
bWFpbih0b3BGcmFtZUhvc3ROYW1lKSwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6
cHJpbWFyeURvbWFpbihob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiB0b3BGcmFtZUhvc3ROYW1l
LCBjb25zdCBTdHJpbmcmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwpAQCAtMTExNywxMSArODU2LDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGkKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7
CiAgICAgCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUtPnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKHNlY29uZHMs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQog
ICAgIGlmIChtX25ldHdvcmtTZXNzaW9uKQogICAgICAgICBtX25ldHdvcmtTZXNzaW9uLT5uZXR3
b3JrU3RvcmFnZVNlc3Npb24oKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhzZWNvbmRzKTsKIApAQCAtMTEzMiwxMSArODY2LDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNG
b3IKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKG1fd2Vic2l0
ZURhdGFTdG9yZSkgewotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnVwZGF0ZVByZXZhbGVu
dERvbWFpbnNUb0Jsb2NrQ29va2llc0Zvcihkb21haW5zVG9CbG9jaywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKG1fbmV0d29y
a1Nlc3Npb24pCiAgICAgICAgIG1fbmV0d29ya1Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lv
bigpLnNldFByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0Zvcihkb21haW5zVG9CbG9jayk7
CiAKQEAgLTExNTMsOCArODgyLDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNhbGxSZW1vdmVEb21haW5zSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW4KIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5yZW1vdmVQcmV2YWxlbnREb21haW5zKGRvbWFp
bnMpOwogICAgIHJlbW92ZVByZXZhbGVudERvbWFpbnMoZG9tYWlucyk7CiB9CiAgICAgCkBAIC0x
MTk3LDExICs5MjQsNiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9n
VGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbV93
ZWJzaXRlRGF0YVN0b3JlLT5sb2dUZXN0aW5nRXZlbnQoZXZlbnQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgaWYgKG1fbmV0d29ya1Nlc3Npb24pCiAgICAgICAgIG1fbmV0d29ya1Nl
c3Npb24tPm5ldHdvcmtQcm9jZXNzKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TG9nVGVzdGluZ0V2ZW50KG1fbmV0d29ya1Nl
c3Npb24tPnNlc3Npb25JRCgpLCBldmVudCksIDApOwogfQpAQCAtMTIxMCw5ICs5MzIsNiBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bm90aWZ5UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Byb2Nlc3NlZCgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICAKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBXZWJQcm9jZXNzUHJveHk6
Om5vdGlmeVBhZ2VTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzZWQoKTsKLQogICAgIGlm
IChtX25ldHdvcmtTZXNzaW9uKQogICAgICAgICBtX25ldHdvcmtTZXNzaW9uLT5ub3RpZnlSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUHJvY2Vzc2VkKCk7CiB9CkBAIC0xMjIxLDExICs5NDAsNiBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JU
b3BQcml2YXRlbHlDb250cm9sbGVkRAogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBXZWJQcm9jZXNz
UHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJ
bkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKGRhdGFUeXBlcywgV1RGTW92ZSh0b3BQcml2YXRlbHlD
b250cm9sbGVkRG9tYWlucyksIHNob3VsZE5vdGlmeVBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGlmIChtX25ldHdvcmtTZXNz
aW9uKSB7CiAgICAgICAgIG1fbmV0d29ya1Nlc3Npb24tPmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKGRhdGFU
eXBlcywgV1RGTW92ZSh0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucyksIHNob3VsZE5vdGlm
eVBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MTIzOCwxMSArOTUyLDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRv
cFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXQKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsK
LSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dp
dGhXZWJzaXRlRGF0YShkYXRhVHlwZXMsIHNob3VsZE5vdGlmeVBhZ2UsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGlmIChtX25ldHdv
cmtTZXNzaW9uKSB7CiAgICAgICAgIG1fbmV0d29ya1Nlc3Npb24tPnRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKGRhdGFUeXBlcywgc2hvdWxkTm90aWZ5UGFnZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICByZXR1cm47CkBAIC0xMjUzLDI1
ICs5NjIsMTIgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRvcFByaXZh
dGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXQKIAogdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNlbmREaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIHZhbHVl
LCB1bnNpZ25lZCBzaWdEaWdpdHMsIFdlYkNvcmU6OlNob3VsZFNhbXBsZSBzaG91bGRTYW1wbGUp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAoYXV0
byogd2ViUGFnZVByb3h5ID0gV2ViUGFnZVByb3h5Ojpub25FcGhlbWVyYWxXZWJQYWdlUHJveHko
KSkKLSAgICAgICAgICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFs
dWUobWVzc2FnZSwgZGVzY3JpcHRpb24sIHZhbHVlLCBzaWdEaWdpdHMsIHNob3VsZFNhbXBsZSk7
Ci0gICAgfQotCiAgICAgaWYgKG1fbmV0d29ya1Nlc3Npb24pCiAgICAgICAgIGNvbnN0X2Nhc3Q8
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKj4odGhpcyktPm5ldHdvcmtTZXNzaW9uKCkt
PmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKG1lc3NhZ2UsIGRlc2NyaXB0aW9uLCB2YWx1
ZSwgc2lnRGlnaXRzLCBzaG91bGRTYW1wbGUpOwogfQogCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZCh1bnNp
Z25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlcywgdW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNv
dXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3AzU3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2lucykgY29uc3QKIHsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAg
ICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtZXNzYWdlQm9keTsKLSAgICAgICAgbWVzc2Fn
ZUJvZHkuc2V0KCJUb3RhbFByZXZhbGVudFJlc291cmNlcyJfcywgQVBJOjpVSW50NjQ6OmNyZWF0
ZSh0b3RhbFByZXZhbGVudFJlc291cmNlcykpOwotICAgICAgICBtZXNzYWdlQm9keS5zZXQoIlRv
dGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiJfcywgQVBJOjpVSW50NjQ6
OmNyZWF0ZSh0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pKTsKLSAg
ICAgICAgbWVzc2FnZUJvZHkuc2V0KCJUb3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyJf
cywgQVBJOjpVSW50NjQ6OmNyZWF0ZSh0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucykp
OwotICAgICAgICBXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1ldHJ5
RmluaXNoZWQoQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUobWVzc2FnZUJvZHkpLnB0cigpKTsKLSAg
ICB9Ci0KICAgICBpZiAobV9uZXR3b3JrU2Vzc2lvbikKICAgICAgICAgY29uc3RfY2FzdDxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUqPih0aGlzKS0+bmV0d29ya1Nlc3Npb24oKS0+bm90
aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZCh0b3RhbFByZXZhbGVudFJlc291cmNl
cywgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB0b3AzU3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2lucyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmgKaW5kZXggM2IyZDA5ZmQ0NzFkNWI2N2JlZTVkZDA5MDM1OGQ5NGYz
YjRhZTAxNi4uZGZkMDY1YWQ1OWExZjhhNzBlMTMzMDY2YjYxNmQxZjlmMjBmN2QzZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApAQCAtNTUsMTYgKzU1
LDEwIEBAIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKIGNsYXNzIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTsKIGNsYXNzIFdlYkZyYW1lUHJv
eHk7CiBjbGFzcyBXZWJQcm9jZXNzUHJveHk7Ci1jbGFzcyBXZWJzaXRlRGF0YVN0b3JlOwogZW51
bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29sOwogCiBjbGFzcyBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLCBXVEY6OkRlc3RydWN0aW9uVGhy
ZWFkOjpNYWluPiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gY3JlYXRlKFdlYnNpdGVE
YXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkp
OwotICAgIH0KLQogICAgIHN0YXRpYyBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
PiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUobmV0d29ya1Nlc3Npb24s
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpKTsKQEAgLTg5LDU4ICs4MywzOCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5
JiwgY29uc3QgVVJMJiBwYWdlVVJMLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBVUkwmIHJlZGlyZWN0VVJMKTsKICAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25z
dCBTdHJpbmcmIHRhcmdldFByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgbWFpbkZyYW1lUHJp
bWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJp
bmcmIHRhcmdldEhvc3QsIGNvbnN0IFN0cmluZyYgbWFpbkZyYW1lSG9zdCwgYm9vbCBpc1JlZGly
ZWN0LCBib29sIGlzTWFpbkZyYW1lKTsKLSAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25z
dCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgbG9nVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURvbWFpbiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgU3Ry
aW5nJiB0YXJnZXRQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIG1haW5GcmFtZVByaW1hcnlE
b21haW4sIFdhbGxUaW1lIGxhc3RTZWVuLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
ICAgIHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFy
eURvbWFpbiwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVQcmltYXJ5RG9tYWluLCBXYWxsVGltZSBs
YXN0U2VlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGxvZ1N1YnJl
c291cmNlUmVkaXJlY3QoY29uc3QgU3RyaW5nJiBzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBT
dHJpbmcmIHRhcmdldFByaW1hcnlEb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
Ci0gICAgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgU3Ry
aW5nJiB0YXJnZXRQcmltYXJ5RG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
ICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
c0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFZl
Y3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMsIGJvb2wgc2hvdWxk
Tm90aWZ5UGFnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoU2V0PFN0cmluZz4m
KT4mJik7CiAgICAgdm9pZCB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRl
RGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgYm9vbCBzaG91bGROb3RpZnlQYWdlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hTZXQ8U3RyaW5nPiYmKT4mJik7CiAgICAgYm9vbCBn
cmFudFN0b3JhZ2VBY2Nlc3MoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3Ry
aW5nJiBmaXJzdFBhcnR5RG9tYWluLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgdWludDY0
X3QgcGFnZUlEKTsKLSAgICB2b2lkIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIGhhc0hhZFVzZXJJbnRl
cmFjdGlvbihjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3RyaW5nJiBz
dWJGcmFtZUhvc3QsIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVIb3N0LCBPcHRpb25hbDx1aW50NjRf
dD4gZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNhbGxiYWNrKTsKICAgICBib29sIGhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZShjb25zdCBT
dHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCk7CiAgICAgdm9pZCByZXF1ZXN0U3RvcmFn
ZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0
UGFydHlEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQs
IGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNz
U3RhdHVzKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0VXBkYXRlKCk7Ci0gICAgdm9pZCBzZXRMYXN0
U2Vlbihjb25zdCBVUkwmLCBTZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
ICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgU2Vjb25k
cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldFByZXZhbGVudFJl
c291cmNlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBz
ZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGR1bXBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJik7Ci0gICAgdm9pZCBpc1By
ZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYpOwogICAgIHZvaWQgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIGlzVmVyeVByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZv
aWQgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiB0b3BGcmFtZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIoY29uc3QgU3RyaW5nJiBzdWJyZXNvdXJjZSwgY29uc3QgU3RyaW5nJiB0b3BGcmFt
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBpc1JlZ2lzdGVy
ZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZSwgY29uc3QgVVJMJiB0b3BGcmFt
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBpc1JlZ2lzdGVy
ZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3RyaW5nJiBzdWJGcmFtZSwgY29uc3QgU3RyaW5nJiB0
b3BGcmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBpc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZEZyb20sIGNv
bnN0IFVSTCYgaG9zdFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
Jik7CiAgICAgdm9pZCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgU3RyaW5nJiBo
b3N0UmVkaXJlY3RlZEZyb20sIGNvbnN0IFN0cmluZyYgaG9zdFJlZGlyZWN0ZWRUbywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBjbGVhclByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBj
bGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7Ci0gICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYsIGJvb2wsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNv
bnN0IFN0cmluZyYsIGJvb2wsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9p
ZCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJik7CiAgICAgdm9pZCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCByZW1vdmVQcmV2YWxlbnREb21haW5z
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jayk7CiAgICAgdm9pZCBzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7Ci0gICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29u
c3QgVVJMJiBzdWJmcmFtZSwgY29uc3QgVVJMJiB0b3BGcmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKICAgICB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihjb25z
dCBTdHJpbmcmIHN1YmZyYW1lLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3Jp
Z2luKGNvbnN0IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgdG9wRnJhbWUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVPcmlnaW4oY29uc3QgU3RyaW5nJiBzdWJyZXNvdXJjZSwgY29uc3QgU3RyaW5nJiB0b3BGcmFt
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3RO
YW1lUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQg
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgc3VicmVzb3VyY2Us
IGNvbnN0IFN0cmluZyYgaG9zdE5hbWVSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25z
dCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHN1YnJlc291cmNlLCBjb25zdCBTdHJpbmcmIGhv
c3ROYW1lUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAg
dm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZUhvc3RO
YW1lLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0
cmluZyYgdG9wRnJhbWVIb3N0TmFtZSwgY29uc3QgU3RyaW5nJiBob3N0TmFtZVJlZGlyZWN0ZWRU
bywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVIb3N0TmFtZSwgY29uc3QgVVJMJiBo
b3N0TmFtZVJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiB0b3BGcmFt
ZUhvc3ROYW1lLCBjb25zdCBTdHJpbmcmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBk
YXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzY2hlZHVsZUNvb2tp
ZUJsb2NraW5nVXBkYXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1Rv
QmxvY2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC0xNjAsNyArMTM0LDYgQEAg
cHVibGljOgogICAgIHZvaWQgcmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUoYm9vbCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lk
IHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogCiAgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJik7CkBAIC0x
NzQsMTQgKzE0NywxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG5vdGlmeVJlc291cmNlTG9hZFN0
YXRpc3RpY3NQcm9jZXNzZWQoKTsKIAotICAgIFdlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRh
U3RvcmUoKSB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0KICAgICBOZXR3b3Jr
U2Vzc2lvbiogbmV0d29ya1Nlc3Npb24oKSB7IHJldHVybiBtX25ldHdvcmtTZXNzaW9uLmdldCgp
OyB9CiAKICAgICB2b2lkIHNlbmREaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIHZhbHVlLCB1
bnNpZ25lZCBzaWdEaWdpdHMsIFdlYkNvcmU6OlNob3VsZFNhbXBsZSkgY29uc3Q7CiAgICAgdm9p
ZCBub3RpZnlQYWdlU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkKHVuc2lnbmVkIHRvdGFsUHJl
dmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2Vy
SW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKSBj
b25zdDsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIGV4cGxpY2l0IFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZShOZXR3b3JrU2Vzc2lvbiYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9p
ZCBwb3N0VGFzayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7CkBAIC0yMDAsNyArMTcxLDYgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgZmx1c2hBbmREZXN0cm95UGVyc2lzdGVudFN0b3JlKCk7CiAK
LSAgICBXZWFrUHRyPFdlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKICAgICBX
ZWFrUHRyPE5ldHdvcmtTZXNzaW9uPiBtX25ldHdvcmtTZXNzaW9uOwogICAgIFJlZjxXb3JrUXVl
dWU+IG1fc3RhdGlzdGljc1F1ZXVlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU+IG1fbWVtb3J5U3RvcmU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBkOTNmNjA1MzIyNjZlNjBiNDAyMzc1MzI0
NTE2NjM1YTUyZWE1MGZkLi4wNTBmN2MzOWYyNDkyYWE4MTg0YjQzMTdmNDdlYjkzYzM4ZDVmMWRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTI4
NSwxMzQgKzI4NSw2IEBAIFdlYlBhZ2VQcm94eSogV2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHVp
bnQ2NF90IHBhZ2VJRCkKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
Ci12b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlD
b250cm9sbGVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBWZWN0b3I8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zLCBib29sIHNob3VsZE5vdGlmeVBhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQgKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IC8vIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgc28gd2Ug
Z2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZS4KLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkT3JDaGVja0Rpc2FibGVkKCkpOwotICAgIAotICAgIHN0cnVjdCBDYWxsYmFja0FnZ3JlZ2F0
b3IgOiBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsKLSAgICAgICAg
ZXhwbGljaXQgQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzaFNl
dDxTdHJpbmc+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIDogY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCi0gICAgICAgIHsKLSAgICAgICAg
fQotICAgICAgICB2b2lkIGFkZERvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgZG9tYWlucykKLSAgICAgICAgewotICAgICAgICAgICAgZG9tYWluc1dp
dGhEZWxldGVkV2Vic2l0ZURhdGEuYWRkKGRvbWFpbnMuYmVnaW4oKSwgZG9tYWlucy5lbmQoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgYWRkUGVuZGluZ0NhbGxiYWNrKCkK
LSAgICAgICAgewotICAgICAgICAgICAgKytwZW5kaW5nQ2FsbGJhY2tzOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICB2b2lkIHJlbW92ZVBlbmRpbmdDYWxsYmFjaygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChwZW5kaW5nQ2FsbGJhY2tzKTsKLSAgICAgICAgICAgIC0tcGVu
ZGluZ0NhbGxiYWNrczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FsbElmTmVlZGVkKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgY2FsbElmTmVlZGVkKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCFwZW5kaW5nQ2FsbGJhY2tzKQotICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgcGVuZGluZ0NhbGxiYWNrcyA9IDA7Ci0g
ICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzaFNldDxTdHJpbmc+KT4gY29tcGxldGlv
bkhhbmRsZXI7Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkb21haW5zV2l0aERlbGV0ZWRXZWJz
aXRlRGF0YTsKLSAgICB9OwotICAgIAotICAgIFJlZlB0cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNh
bGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBDYWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKLSAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9w
dGlvbj4gZmV0Y2hPcHRpb25zID0gV2Vic2l0ZURhdGFGZXRjaE9wdGlvbjo6RG9Ob3RDcmVhdGVQ
cm9jZXNzZXM7Ci0KLSAgICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklEPiB2aXNpdGVkU2Vzc2lvbklE
czsKLSAgICBmb3IgKGF1dG8mIHBhZ2UgOiBnbG9iYWxQYWdlTWFwKCkpIHsKLSAgICAgICAgYXV0
byYgZGF0YVN0b3JlID0gcGFnZS52YWx1ZS0+d2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICBp
ZiAoIWRhdGFTdG9yZS5pc1BlcnNpc3RlbnQoKSB8fCB2aXNpdGVkU2Vzc2lvbklEcy5jb250YWlu
cyhkYXRhU3RvcmUuc2Vzc2lvbklEKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IHZpc2l0ZWRTZXNzaW9uSURzLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCkpOwotICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICBkYXRhU3Rv
cmUucmVtb3ZlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zKGRhdGFUeXBlcywg
ZmV0Y2hPcHRpb25zLCB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucywgW2NhbGxiYWNrQWdn
cmVnYXRvciwgc2hvdWxkTm90aWZ5UGFnZSwgcGFnZV0oSGFzaFNldDxTdHJpbmc+JiYgZG9tYWlu
c1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIC8vIFdoZW4gY29tcGxldGlu
ZyB0aGUgdGFzaywgd2Ugc2hvdWxkIGJlIGdldHRpbmcgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVh
ZC4KLSAgICAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWRPckNoZWNrRGlzYWJsZWQoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzaG91bGROb3RpZnlQYWdlKQotICAgICAgICAg
ICAgICAgIHBhZ2UudmFsdWUtPnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZSgiV2Vic2l0ZURh
dGFEZWxldGlvbkZvclRvcFByaXZhdGVseU93bmVkRG9tYWluc0ZpbmlzaGVkIiwgbnVsbHB0cik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkRG9tYWlu
c1dpdGhEZWxldGVkV2Vic2l0ZURhdGEoV1RGTW92ZShkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRl
RGF0YSkpOwotICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2Fs
bGJhY2soKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCi12b2lkIFdlYlByb2Nlc3NQcm94eTo6
dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBib29sIHNob3VsZE5vdGlmeVBhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSGFzaFNldDxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQg
c28gd2UgZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZS4KLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkT3JDaGVja0Rpc2FibGVkKCkpOwotICAgIAotICAgIHN0cnVjdCBDYWxsYmFja0Fn
Z3JlZ2F0b3IgOiBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxsYmFja0FnZ3JlZ2F0b3I+IHsKLSAg
ICAgICAgZXhwbGljaXQgQ2FsbGJhY2tBZ2dyZWdhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SGFzaFNldDxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICAgICAgOiBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFkZERvbWFpbnNXaXRoRGVsZXRlZFdl
YnNpdGVEYXRhKEhhc2hTZXQ8U3RyaW5nPiYmIGRvbWFpbnMpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhLmFkZChkb21haW5zLmJlZ2luKCksIGRv
bWFpbnMuZW5kKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFkZFBlbmRp
bmdDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgICsrcGVuZGluZ0NhbGxiYWNrczsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCByZW1vdmVQZW5kaW5nQ2FsbGJhY2so
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocGVuZGluZ0NhbGxiYWNrcyk7Ci0gICAg
ICAgICAgICAtLXBlbmRpbmdDYWxsYmFja3M7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
bGxJZk5lZWRlZCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGNhbGxJZk5l
ZWRlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghcGVuZGluZ0NhbGxiYWNrcykKLSAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRvbWFpbnNXaXRoRGVsZXRl
ZFdlYnNpdGVEYXRhKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHBl
bmRpbmdDYWxsYmFja3MgPSAwOwotICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hT
ZXQ8U3RyaW5nPiYmKT4gY29tcGxldGlvbkhhbmRsZXI7Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5n
PiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YTsKLSAgICB9OwotICAgIAotICAgIFJlZlB0
cjxDYWxsYmFja0FnZ3JlZ2F0b3I+IGNhbGxiYWNrQWdncmVnYXRvciA9IGFkb3B0UmVmKG5ldyBD
YWxsYmFja0FnZ3JlZ2F0b3IoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKLSAgICAKLSAg
ICBIYXNoU2V0PFBBTDo6U2Vzc2lvbklEPiB2aXNpdGVkU2Vzc2lvbklEczsKLSAgICBmb3IgKGF1
dG8mIHBhZ2UgOiBnbG9iYWxQYWdlTWFwKCkudmFsdWVzKCkpIHsKLSAgICAgICAgYXV0byYgZGF0
YVN0b3JlID0gcGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICBpZiAoIWRhdGFTdG9y
ZS5pc1BlcnNpc3RlbnQoKSB8fCB2aXNpdGVkU2Vzc2lvbklEcy5jb250YWlucyhkYXRhU3RvcmUu
c2Vzc2lvbklEKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHZpc2l0ZWRTZXNz
aW9uSURzLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCkpOwotICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICBkYXRhU3RvcmUudG9wUHJpdmF0
ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEoZGF0YVR5cGVzLCB7IH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3IsIHNob3VsZE5vdGlmeVBhZ2UsIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKV0o
SGFzaFNldDxTdHJpbmc+JiYgZG9tYWluc1dpdGhEYXRhUmVjb3JkcykgewotICAgICAgICAgICAg
Ly8gV2hlbiBjb21wbGV0aW5nIHRoZSB0YXNrLCB3ZSBzaG91bGQgYmUgZ2V0dGluZyBjYWxsZWQg
b24gdGhlIG1haW4gdGhyZWFkLgotICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZE9yQ2hl
Y2tEaXNhYmxlZCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNob3VsZE5vdGlm
eVBhZ2UpCi0gICAgICAgICAgICAgICAgcGFnZS0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KCJXZWJzaXRlRGF0YVNjYW5Gb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc0ZpbmlzaGVk
IiwgbnVsbHB0cik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkRG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEoV1RGTW92ZShkb21haW5zV2l0aERh
dGFSZWNvcmRzKSk7Ci0gICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRp
bmdDYWxsYmFjaygpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogSXQncyBi
aXphcnJlIHRoYXQgdGhpcyBjYWxsIGlzIG9uIFdlYlByb2Nlc3NQcm94eSBhbmQgdGhhdCBpdCBk
b2Vzbid0IHdvcmsgaWYgdGhlcmUgYXJlIG5vIHZpc2l0ZWQgcGFnZXMuCi0gICAgLy8gVGhpcyBz
aG91bGQgYWN0dWFsbHkgYmUgYSBmdW5jdGlvbiBvZiBXZWJzaXRlRGF0YVN0b3JlIGFuZCBpdCBz
aG91bGQgd29yayBldmVuIGlmIHRoZXJlIGFyZSBubyBXZWJWaWV3cyBpbnN0YW5jZXMuCi0gICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5jYWxsSWZOZWVkZWQoKTsKLX0KLSAgICAKIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCkK
IHsKICAgICBmb3IgKGF1dG8mIHBhZ2UgOiBnbG9iYWxQYWdlTWFwKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCmluZGV4IDU3NWFiNGRkYmY1NjgzNmUwMzc0NTVm
N2Q3NzRmYzI4Mzk4YWRlZTIuLjgzNTY4NmM2MzAxM2NiY2Q5ZDAzMzU3YjAxNzU3ZjgxYzQwZWJk
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCkBAIC0xNzMs
OSArMTczLDYgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5z
KFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBzdGF0aWMg
dm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5B
bGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgVmVjdG9y
PFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucywgYm9vbCBzaG91bGROb3Rp
ZnlQYWdlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoY29uc3QgSGFzaFNldDxTdHJpbmc+Jik+
JiYpOwotICAgIHN0YXRpYyB2b2lkIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdl
YnNpdGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgYm9vbCBzaG91
bGROb3RpZnlQYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hTZXQ8U3RyaW5nPiYmKT4m
Jik7Ci0KICAgICBzdGF0aWMgdm9pZCBub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2VkKCk7CiAgICAgc3RhdGljIHZvaWQgbm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0
cnlGaW5pc2hlZChBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmlu
ZGV4IDgyYmUxMTU0NWEzNjhiZWMwOWI0ZjAyMGFjMWI5MzEyZWQ2Y2FkOGQuLjlhNTcwZjdlNGY1
NmEwZjk1N2NjNDBlYWU5OTk4NmE0OGQ1MWE0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0xMzIs
MTAgKzEzMiw2IEBAIFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAg
IHBsYXRmb3JtRGVzdHJveSgpOwogCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKLSAgICB1bnJlZ2lzdGVyV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQXNNZXNzYWdl
UmVjZWl2ZXIoKTsKLSNlbmRpZgotCiAgICAgaWYgKG1fc2Vzc2lvbklELmlzVmFsaWQoKSAmJiBt
X3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7CiAgICAg
ICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhp
cyk7CiAgICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsK
QEAgLTYzOSwyMCArNjM1LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFGb3JU
b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucyhPcHRpb25TZXQ8V2Vic2kKICAgICAgICAgfSk7
CiAgICAgfSk7CiB9Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9u
cywgRnVuY3Rpb248dm9pZChIYXNoU2V0PFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgZmV0Y2hEYXRhKGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXShhdXRvJiYgZXhpc3RpbmdEYXRhUmVjb3JkcykgewotICAgICAgICBIYXNoU2V0
PFN0cmluZz4gZG9tYWluc1dpdGhEYXRhUmVjb3JkczsKLSAgICAgICAgZm9yIChhdXRvJiYgZGF0
YVJlY29yZCA6IGV4aXN0aW5nRGF0YVJlY29yZHMpIHsKLSAgICAgICAgICAgIFN0cmluZyBkb21h
aW4gPSBkYXRhUmVjb3JkLnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oKTsKLSAgICAgICAg
ICAgIGlmIChkb21haW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgZG9tYWluc1dpdGhEYXRhUmVjb3Jkcy5hZGQoV1RGTW92ZShkb21haW4pKTsKLSAg
ICAgICAgfQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRvbWFpbnNXaXRoRGF0
YVJlY29yZHMpKTsKLSAgICB9KTsKLX0KICNlbmRpZgogCiBzdGF0aWMgUHJvY2Vzc0FjY2Vzc1R5
cGUgY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgYm9vbCBpc05vblBlcnNpc3RlbnRTdG9yZSkK
QEAgLTkzOSwxOSArOTIxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKIAogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKSB7Ci0gICAgICAgIGF1dG8g
ZGVsZXRlZFR5cGVzUmF3ID0gZGF0YVR5cGVzLnRvUmF3KCk7Ci0gICAgICAgIGF1dG8gbW9uaXRv
cmVkVHlwZXNSYXcgPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERh
dGFUeXBlcygpLnRvUmF3KCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBhcmUgZGVsZXRp
bmcgYWxsIG9mIHRoZSBkYXRhIHR5cGVzIHRoYXQgdGhlIHJlc291cmNlIGxvYWQgc3RhdGlzdGlj
cyBzdG9yZSBtb25pdG9ycwotICAgICAgICAvLyB3ZSBkbyBub3QgbmVlZCB0byByZS1ncmFuZGZh
dGhlciBvbGQgZGF0YS4KLSAgICAgICAgYXV0byBzaG91bGRHcmFuZGZhdGhlciA9ICgobW9uaXRv
cmVkVHlwZXNSYXcgJiBkZWxldGVkVHlwZXNSYXcpID09IG1vbml0b3JlZFR5cGVzUmF3KSA/IFNo
b3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6Tm8gOiBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3Rp
Y3M6OlllczsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mp
IHsKLSAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7
Ci0gICAgICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNjaGVkdWxlQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnQobW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJl
bW92ZVBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgeworICAgICAg
ICBpZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgewogICAg
ICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewogICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRp
bmdDYWxsYmFjaygpOwpAQCAtMTI0Myw1MiArMTIxMywxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25z
dCBWZQogICAgIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKLSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMzM0OTEyMjI+OyBzY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50IGRvZXMgbm90IGhhdmUgYSBjb21wbGV0aW9uIGhhbmRsZXIs
Ci0gICAgLy8gc28gdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhpcyByZW1vdmVEYXRhKCkg
Y2FsbCBjYW4gYmUgY2FsbGVkIHByZW1hdHVyZWx5LgotICAgIGlmIChkYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSAmJiBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgYXV0byBkZWxldGVkVHlwZXNSYXcgPSBkYXRhVHlw
ZXMudG9SYXcoKTsKLSAgICAgICAgYXV0byBtb25pdG9yZWRUeXBlc1JhdyA9IFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCkudG9SYXcoKTsKLQotICAg
ICAgICAvLyBJZiB3ZSBhcmUgZGVsZXRpbmcgYWxsIG9mIHRoZSBkYXRhIHR5cGVzIHRoYXQgdGhl
IHJlc291cmNlIGxvYWQgc3RhdGlzdGljcyBzdG9yZSBtb25pdG9ycwotICAgICAgICAvLyB3ZSBk
byBub3QgbmVlZCB0byByZS1ncmFuZGZhdGhlciBvbGQgZGF0YS4KLSAgICAgICAgYXV0byBzaG91
bGRHcmFuZGZhdGhlciA9ICgobW9uaXRvcmVkVHlwZXNSYXcgJiBkZWxldGVkVHlwZXNSYXcpID09
IG1vbml0b3JlZFR5cGVzUmF3KSA/IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6Tm8gOiBT
aG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllczsKLQotICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoc2hvdWxkR3JhbmRmYXRo
ZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgIGNsZWFyUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0luV2ViUHJvY2Vzc2VzKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Ci0g
ICAgICAgIH0pOwotICAgIH0KLSNlbmRpZgotCiAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0
IHdlIGRvbid0IGhhdmUgYW55IHBlbmRpbmcgY2FsbGJhY2tzLiBJZiBzbywgd2Ugd2FudCB0byBk
aXNwYXRjaCB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHJpZ2h0IGF3YXkuCiAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5jYWxsSWZOZWVkZWQoKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGFGb3JUb3BQcml2
YXRlbHlDb250cm9sbGVkRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlw
ZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucywgRnVuY3Rpb248
dm9pZChIYXNoU2V0PFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgZmV0
Y2hEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMoZGF0YVR5cGVzLCBmZXRjaE9w
dGlvbnMsIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zLCBbZGF0YVR5cGVzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCB0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldKFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4mJiB3ZWJzaXRl
RGF0YVJlY29yZHMsIEhhc2hTZXQ8U3RyaW5nPiYmIGRvbWFpbnNXaXRoRGF0YVJlY29yZHMpIG11
dGFibGUgewotICAgICAgICB0aGlzLT5yZW1vdmVEYXRhKGRhdGFUeXBlcywgd2Vic2l0ZURhdGFS
ZWNvcmRzLCBbZG9tYWluc1dpdGhEYXRhUmVjb3JkcyA9IFdURk1vdmUoZG9tYWluc1dpdGhEYXRh
UmVjb3JkcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRvbWFp
bnNXaXRoRGF0YVJlY29yZHMpKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRy
eUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGlmIChtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zZXRNYXhT
dGF0aXN0aWNzRW50cmllcyhtYXhpbXVtRW50cnlDb3VudCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCiAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQpAQCAtMTI5OSwxMSArMTIzMiw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVF
bnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBpZiAobV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKSB7Ci0gICAgICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+c2V0UHJ1bmVF
bnRyaWVzRG93blRvKHBydW5lVGFyZ2V0Q291bnQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCiAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CkBAIC0x
MzE1LDQyICsxMjQzLDE2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJp
bmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8CiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mp
IHsKLSAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zZXRHcmFuZGZhdGhlcmluZ1Rp
bWUoc2Vjb25kcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCiAgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQs
IHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dy
ZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRD
YWNoZU1heEFnZUNhcChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0gICAgCi0gICAgaWYgKG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcykgewotICAgICAgICBzZXRDYWNoZU1heEFnZUNhcChzZWNvbmRzLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0Q2FjaGVNYXhBZ2VDYXAobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKLX0K
LQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAg
IGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgbV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLT5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25k
cywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCiAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQpAQCAtMTM2MSwxMSArMTI2Myw2IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBTCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAg
IGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgbV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgICAgIHByb2Nlc3Mt
PmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CkBAIC0xMzg0LDExICsxMjgxLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MpIHsKLSAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5pc1ByZXZhbGVudFJl
c291cmNlKHVybCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKICAgICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4odXJsKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAtMTQwNywxMSArMTI5OSw2IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYg
KG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MtPnNldFByZXZhbGVudFJlc291cmNlKHVybCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKQEAg
LTE0MjgsMTEgKzEzMTUsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aQogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAg
ICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZSh1cmwsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKICAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKQEAgLTE0NTAsMTEgKzEz
MzIsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcgogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSh1cmwsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAg
ICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4odXJsKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwpAQCAtMTQ3MywxMSArMTM1MCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fcmVzb3VyY2VM
b2FkU3RhdGlzdGljcykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNldFZl
cnlQcmV2YWxlbnRSZXNvdXJjZSh1cmwsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAKICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKQEAg
LTE0OTAsMTEgKzEzNjIsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlz
dGljcykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCkBAIC0xNTEwLDExICsxMzc3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJmcmFtZSwgY29uc3QK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MpIHsKLSAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zZXRTdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW4oc3ViZnJhbWUsIHRvcEZyYW1lLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCiAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7CkBAIC0xNTI3LDExICsxMzg5LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jl
Z2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZSwgY29uc3QgVVIKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPmlzUmVnaXN0
ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZSwgdG9wRnJhbWUsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgcHJvY2Vz
cy0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHN1YkZyYW1lKSwgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih0b3BGcmFtZSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKQEAgLTE1NTAsMTEgKzE0MDcsNiBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBVUkwmIHN1YnJl
c291cmNlLAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNldFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihzdWJyZXNvdXJjZSwgdG9wRnJhbWUsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIAogICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewpAQCAtMTU2NywxMSArMTQxOSw2IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVzb3Vy
Y2UsIGNvCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBpZiAo
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKHN1YnJlc291cmNlLCB0b3BGcmFt
ZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAg
ICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbihzdWJy
ZXNvdXJjZSksIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4o
dG9wRnJhbWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC0xNTkwLDExICsxNDM3
LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oc3VicmVzb3VyY2Us
IGhvc3ROYW1lUmVkaXJlY3RlZFRvLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCiAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CkBAIC0x
NjEyLDExICsxNDU0LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlLAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICBt
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
KHN1YnJlc291cmNlLCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgCiAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7CkBAIC0xNjM0LDExICsxNDcxLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZUhvc3ROYW1lLAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RUbyh0b3BGcmFtZUhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRUbywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAogICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewpAQCAtMTY1NiwxMSArMTQ4OCw2IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BG
cmFtZUhvc3ROYW1lCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20odG9wRnJhbWVIb3N0TmFtZSwgaG9zdE5hbWVSZWRp
cmVjdGVkRnJvbSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAogICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewpAQCAtMTY3MywxMSArMTUw
MCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KGNvbnN0IFVSTCYgaG9zdFJlZGlyZWN0ZWRGcm9tCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICAKLSAgICBpZiAobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAg
ICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KGhvc3RSZWRpcmVjdGVkRnJvbSwgaG9zdFJlZGlyZWN0ZWRUbywgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgICAgIHByb2Nlc3MtPmlz
UmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbihob3N0UmVkaXJlY3RlZEZyb20pLCBXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKGhvc3RSZWRpcmVjdGVkVG8p
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC0xNjk2LDExICsxNTE4LDYgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICht
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLT5jbGVhclByZXZhbGVudFJlc291cmNlKHVybCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKICAgICBjb25zdCBhdXRvJiBwcmltYXJ5RG9tYWluID0gV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih1cmwpOwpAQCAtMTcxNCwxMSArMTUzMSw2IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKIAotICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCiAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7CkBAIC0xNzMxLDExICsxNTQzLDYgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAgICAgCi0gICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICBt
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnN1Ym1pdFRlbGVtZXRyeShbXSB7IH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAogICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewogICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQogICAgICAgICAgICAgcHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1f
c2Vzc2lvbklELCBbXSB7IH0pOwpAQCAtMTc0NiwxMSArMTU1Myw2IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2Rp
ZmllZFNpbmNlCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBp
ZiAobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgIG1fcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtb2RpZmllZFNpbmNl
LCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCiAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CkBAIC0xNzYzLDEx
ICsxNTY1LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50KFNob3VsZEdyYW5kZmF0aGVyU3RhdGkKIHsKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogICAgIAotICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsK
LSAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50KHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAogICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewpAQCAt
MTc3OCwxMSArMTU3NSw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpCiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNjaGVkdWxl
Q29va2llQmxvY2tpbmdVcGRhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKICAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKQEAgLTE3OTUsMTEgKzE1
ODcsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFS
ZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZAogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCi0gICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAg
ICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFS
ZWNvcmRzUHJvY2Vzc2luZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCiAg
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CkBAIC0xODA4LDI2
ICsxNTk1LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmRE
YXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAgICB9CiB9CiAKLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1cGRh
dGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3IoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvcihtX3Nlc3Npb25JRCwgZG9t
YWluc1RvQmxvY2ssIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tB
Z2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhPcHRpb25hbDxTZWNv
bmRzPiBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCi17Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAodXJsLnByb3Rv
Y29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKQEAgLTE4MzUsMTEgKzE2MDIsNiBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRz
IHNlY29uZHMsIENvbXBsZXRpb25IYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MtPnNldExhc3RTZWVuKHVybCwgc2Vjb25kcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKICAgICBjb25zdCBhdXRvJiBwcmltYXJ5RG9tYWluID0gV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih1cmwpOwpAQCAtMTg1MSwxMSArMTYxMyw2IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29u
ZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNl
dE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCiAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQpAQCAtMTg2NCwyOSArMTYyMSwxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSwgQ29tcAog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0Nh
cHR1cmVkKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBpZiAobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAg
IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2Fz
Q2FwdHVyZWQodmFsdWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKICAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nl
c3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRy
eVdhc0NhcHR1cmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogfQogCi12b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoY29uc3Qg
U3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1
aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCBoYXNBY2Nlc3MpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGF1dG8qIHdlYlBh
Z2UgPSBXZWJQcm9jZXNzUHJveHk6OndlYlBhZ2UocGFnZUlEKTsKLSAgICBpZiAoIXdlYlBhZ2Up
IHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSB3ZWJQYWdlLT5wcm9jZXNzKCkucHJv
Y2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG5ldHdvcmtQcm9jZXNzLmhh
c1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZShtX3Nlc3Npb25JRCwgcmVzb3VyY2VEb21haW4sIGZpcnN0
UGFydHlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVz
KHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
IGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8qIHdlYlBhZ2UgPSBX
ZWJQcm9jZXNzUHJveHk6OndlYlBhZ2UocGFnZUlEKTsKQEAgLTE4OTksMzQgKzE2MzksNiBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKHVpbnQ2NF90
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbgogICAgIG5ldHdvcmtQcm9jZXNzLmdldEFsbFN0b3JhZ2VB
Y2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihjb25z
dCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4s
IE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCB3YXNHcmFudGVkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAg
ICBhdXRvKiB3ZWJQYWdlID0gV2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHBhZ2VJRCk7Ci0gICAg
aWYgKCF3ZWJQYWdlKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gd2ViUGFnZS0+
cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBuZXR3
b3JrUHJvY2Vzcy5ncmFudFN0b3JhZ2VBY2Nlc3MobV9zZXNzaW9uSUQsIHJlc291cmNlRG9tYWlu
LCBmaXJzdFBhcnR5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIGZhbHNlLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlQWxsU3Rv
cmFnZUFjY2Vzc0hhbmRsZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQotewotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MobV9zZXNzaW9uSUQsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlS
ZWYoKV0geyB9KTsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUHJl
dmFsZW50RG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKLXsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlbW92
ZVByZXZhbGVudERvbWFpbnMobV9zZXNzaW9uSUQsIGRvbWFpbnMpKTsKLX0KLQogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3Ry
aW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
aWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CkBAIC0xOTM0LDExICsxNjQ2
LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1
YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLT5oYXNTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVIb3N0KSwgV1RG
TW92ZSh0b3BGcmFtZUhvc3QpLCBmcmFtZUlELCBwYWdlSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGF1dG8qIHdlYlBhZ2UgPSBX
ZWJQcm9jZXNzUHJveHk6OndlYlBhZ2UocGFnZUlEKTsKICAgICBpZiAoIXdlYlBhZ2UpIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwpAQCAtMTk1NiwxMSArMTY2Myw2IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3RyaW5nJiYgc3ViRnJh
bWVIb3N0LCBTdHJpbmcmJiB0b3BGCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MtPnJlcXVlc3RTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVIb3N0KSwgV1RG
TW92ZSh0b3BGcmFtZUhvc3QpLCBmcmFtZUlELCBwYWdlSUQsIHByb21wdEVuYWJsZWQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGF1
dG8qIHdlYlBhZ2UgPSBXZWJQcm9jZXNzUHJveHk6OndlYlBhZ2UocGFnZUlEKTsKICAgICBpZiAo
IXdlYlBhZ2UpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1
czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CkBAIC0xOTc4LDExICsxNjgwLDYgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MoU3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBT
dHJpbmcmJiB0b3BGcmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy0+Z3JhbnRTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVIb3N0KSwgV1RGTW92ZSh0b3BG
cmFtZUhvc3QpLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0byogd2Vi
UGFnZSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShwYWdlSUQpOwogICAgIGlmICghd2ViUGFn
ZSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CkBAIC0xOTk1LDExICsxNjky
LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MoU3RyaW5nJiYg
c3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmEKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zZXRU
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKHNlY29uZHMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAogICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkK
QEAgLTIwMTUsMTEgKzE3MDcsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRl
cmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsK
LSAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5sb2dVc2VySW50ZXJhY3Rpb24odXJs
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAogICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewpAQCAtMjAzNywxMSArMTcyNCw2IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fcmVz
b3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mt
Pmhhc0hhZFVzZXJJbnRlcmFjdGlvbih1cmwsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICAgICAgcHJvY2Vzcy0+aGFzSGFkVXNl
ckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
OjpwcmltYXJ5RG9tYWluKHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTIw
NjAsMTEgKzE3NDIsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAg
ICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbih1cmwsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAogICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewpAQCAtMjA3MywyOSArMTc1MCw2IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvCiAgICAgfQogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRm
YXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IAotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgewotICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MtPmlzR3JhbmRmYXRoZXJlZCh1cmwsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vz
cy0+aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOjpwcmltYXJ5RG9tYWluKHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC0yMTA1LDExICsxNzU5LDYgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3Jh
bmRmYXRoZXJlZCwgQ28KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy0+c2V0R3JhbmRmYXRoZXJlZCh1cmwsIGlzR3JhbmRmYXRoZXJlZCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAogICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewpAQCAtMjE2MiwxMSArMTgxMSw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6d2ViUHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nl
c3NQCiB7CiAgICAgaWYgKG1fc3RvcmFnZU1hbmFnZXIpCiAgICAgICAgIG1fc3RvcmFnZU1hbmFn
ZXItPnByb2Nlc3NXaWxsT3BlbkNvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBjb25uZWN0aW9u
KTsKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgaWYgKG1fcmVz
b3VyY2VMb2FkU3RhdGlzdGljcykKLSAgICAgICAgd2ViUHJvY2Vzc1Byb3h5LmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksICptX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotI2VuZGlmCiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6d2ViUGFnZVdpbGxPcGVuQ29ubmVjdGlvbihXZWJQYWdl
UHJveHkmIHdlYlBhZ2VQcm94eSwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMjE4
MywxMSArMTgyNyw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6d2ViUGFnZURpZENsb3NlQ29u
bmVjdGlvbihXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSwgSVBDCiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6d2ViUHJvY2Vzc0RpZENsb3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdl
YlByb2Nlc3NQcm94eSwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQogewotI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlz
dGljcykKLSAgICAgICAgd2ViUHJvY2Vzc1Byb3h5LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpOwotI2VuZGlmCi0KICAgICBpZiAobV9zdG9yYWdlTWFuYWdlcikKICAgICAgICAgbV9zdG9y
YWdlTWFuYWdlci0+cHJvY2Vzc0RpZENsb3NlQ29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIGNv
bm5lY3Rpb24pOwogfQpAQCAtMjM0NCwxMSArMTk4Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBs
ZXRpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBlbmFibGVkOwotICAgIGlmIChtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGVuYWJsZWQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKKwogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAogICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKQEAgLTIzNjAsMjUgKzE5OTUsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBDb21wbGV0
aQogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLXZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6dW5yZWdpc3RlcldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUFzTWVz
c2FnZVJlY2VpdmVyKCkKLXsKLSAgICBpZiAoIW1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvKiB3ZWJQcm9jZXNzUHJveHkgOiBwcm9jZXNz
ZXMoKSkKLSAgICAgICAgd2ViUHJvY2Vzc1Byb3h5LT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZUFzTWVzc2FnZVJlY2VpdmVyKCkKLXsKLSAgICBBU1NFUlQobV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICBpZiAoIW1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvKiB3ZWJQcm9jZXNzUHJveHkgOiBwcm9j
ZXNzZXMoKSkKLSAgICAgICAgd2ViUHJvY2Vzc1Byb3h5LT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCAqbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjplbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQW5kU2V0VGVzdGluZ0NhbGxiYWNrKEZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQogewogICAgIEFTU0VSVCgh
bV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7CkBAIC0yNDgxLDEwICsyMDk3LDYgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKE1v
Y2tXZWJBdXRoZW50aWNhdGkKIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3
b3JrUHJvY2VzcygpCiB7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICBpZiAobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKQotICAgICAgICBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0jZW5kaWYKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oCmluZGV4IGU1MjhmNmRkMzZjODcxNjQzZDdmMmFiMDFmM2YyMzEwNWUyY2YxNzIuLmEy
YzU5MjczZjJlNzRhMDE0YTU3YTBlZGRlMzgxMTc3NDA0MWNiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAg
LTExOCwzNiArMTE4LDI1IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCiAgICAgdm9pZCBmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9t
YWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0
Y2hPcHRpb24+LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERv
bWFpbnMsIEZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYmLCBIYXNoU2V0
PFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIHZvaWQgdG9wUHJpdmF0ZWx5
Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRp
b25zLCBGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cik7Ci0gICAgdm9pZCByZW1vdmVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0
aW9uPiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5z
LCBGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7
CiAKICAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0
IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBkZWxldGVXZWJz
aXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0
YVN0b3JlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgVmVjdG9yPFN0cmluZz4mJiB0b3BQ
cml2YXRlbHlDb250cm9sbGVkRG9tYWlucywgYm9vbCBzaG91bGROb3RpZnlQYWdlcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoU2V0PFN0cmluZz4mKT4mJik7CiAgICAgdm9pZCBk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0
cmluZyYpPiYmKTsKICAgICB2b2lkIGxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwotICAgIHZvaWQgdXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVz
Rm9yKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKE9w
dGlvbmFsPFNlY29uZHM+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQg
aGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihjb25zdCBTdHJpbmcmIHJlc291cmNlRG9t
YWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGhhc0FjY2Vzcyk+JiYp
OwogICAgIHZvaWQgZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXModWludDY0X3QgcGFnZUlELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYpOwotICAg
IHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihjb25zdCBTdHJpbmcmIHJlc291cmNlRG9t
YWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBm
cmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCB3YXNH
cmFudGVkKT4mJik7CiAgICAgdm9pZCBoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBpc0dyYW5kZmF0aGVy
ZWQoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9p
ZCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYpOwogICAgIHZvaWQgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFVS
TCYgaG9zdFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIGhvc3RSZWRpcmVjdGVkVG8sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgaXNSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgdG9wRnJhbWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgaXNSZWdpc3RlcmVk
QXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWUsIGNvbnN0IFVSTCYgdG9wRnJhbWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgaXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7
Ci0gICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzSGFuZGxlcihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwotICAgIHZvaWQgcmVtb3ZlUHJldmFsZW50RG9tYWlucyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZG9tYWlucyk7CiAgICAgdm9pZCByZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRW
YWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHNjaGVkdWxlQ29v
a2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lk
IHNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5j
ZSwgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogICAgIHZvaWQgc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3MsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAg
dm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHN1Ym1pdFRlbGVtZXRyeSgpOwotICAgIHZv
aWQgc2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKICAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiwgYm9vbCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNv
bmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2V0TGFzdFNlZW4o
Y29uc3QgVVJMJiwgU2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTI1
NSwxMSArMjQ0LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogICAg
IHN0YXRpYyB2b2lkIHBsYXRmb3JtUmVtb3ZlUmVjZW50U2VhcmNoZXMoV2FsbFRpbWUpOwogCi0j
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICB2b2lkIHJlZ2lzdGVyV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQXNNZXNzYWdlUmVjZWl2ZXIoKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVBc01lc3NhZ2VSZWNlaXZl
cigpOwotI2VuZGlmCi0KICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nl
c3NQb29scyhzaXplX3QgY291bnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
LCBib29sIGVuc3VyZUFQb29sRXhpc3RzID0gdHJ1ZSkgY29uc3Q7CiAKICNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkK
</data>
<flag name="review"
          id="376953"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="377054"
          type_id="3"
          status="-"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>