<?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>204435</bug_id>
          
          <creation_ts>2019-11-20 17:54:22 -0800</creation_ts>
          <short_desc>GetByStatus should not say it took the slow path for multiple identifiers and should have a way to indicate if the StructureStubInfo it saw took the slow path</short_desc>
          <delta_ts>2019-11-21 21:43:21 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1592244</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-11-20 17:54:22 -0800</bug_when>
    <thetext>I forgot to upload my microbenchmarks in the actual patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592562</commentid>
    <comment_count>1</comment_count>
      <attachid>384097</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-11-21 15:31:25 -0800</bug_when>
    <thetext>Created attachment 384097
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592566</commentid>
    <comment_count>2</comment_count>
      <attachid>384097</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-21 15:44:46 -0800</bug_when>
    <thetext>Comment on attachment 384097
patch

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

r=me.

&gt; Source/JavaScriptCore/ChangeLog:24
&gt; +        between a GetByStatus saying &quot;we&apos;re a slow path&quot; and if we actually observed the StructureStubInfo
&gt; +        go to the slow path. In the DFG/FTL, we only forgo emitting a get by val IC when observing a

Maybe it&apos;s just me, but I found this a bit confusing throughout the patch. It&apos;s kinda weird that we say it&apos;s a slow path if the slow path wasn&apos;t taken, but I&apos;m not sure what would be a better alternative, so I&apos;ll leave it to you to decide whether it makes sense or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592612</commentid>
    <comment_count>3</comment_count>
      <attachid>384111</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-11-21 17:52:05 -0800</bug_when>
    <thetext>Created attachment 384111
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592615</commentid>
    <comment_count>4</comment_count>
      <attachid>384113</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-11-21 17:55:48 -0800</bug_when>
    <thetext>Created attachment 384113
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592656</commentid>
    <comment_count>5</comment_count>
      <attachid>384113</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-21 21:42:04 -0800</bug_when>
    <thetext>Comment on attachment 384113
patch for landing

Clearing flags on attachment: 384113

Committed r252763: &lt;https://trac.webkit.org/changeset/252763&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592657</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-21 21:42:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592658</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-21 21:43:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/57419422&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384097</attachid>
            <date>2019-11-21 15:31:25 -0800</date>
            <delta_ts>2019-11-21 17:52:05 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>35158</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTI3NTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU0IEBACisyMDE5LTExLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEdldEJ5U3RhdHVzIHNob3VsZCBub3Qgc2F5IGl0IHRvb2sgdGhlIHNs
b3cgcGF0aCBmb3IgbXVsdGlwbGUgaWRlbnRpZmllcnMgYW5kIHNob3VsZCBoYXZlIGEgd2F5IHRv
IGluZGljYXRlIGlmIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBpdCBzYXcgdG9vayB0aGUgc2xvdyBw
YXRoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTEuanM6IEFkZGVkLgorICAg
ICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3QxLmZvbyk6CisgICAgICAgICh0ZXN0MSk6Cisg
ICAgICAgICogbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMi5qczog
QWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDIuZm9vKToKKyAgICAgICAg
KHRlc3QyKToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhp
Yy1pYy0zLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0My5mb28p
OgorICAgICAgICAodGVzdDMuYXJncyk6CisgICAgICAgICh0ZXN0Myk6CisgICAgICAgICogbWlj
cm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNC5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDQuZm9vKToKKyAgICAgICAgKHRlc3Q0LmNhcHR1
cmUpOgorICAgICAgICAodGVzdDQuYXJncyk6CisgICAgICAgICh0ZXN0NCk6CisgICAgICAgICog
bWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNS5qczogQWRkZWQuCisg
ICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDUuZm9vKToKKyAgICAgICAgKHRlc3Q1LmNh
cHR1cmUpOgorICAgICAgICAodGVzdDUuYXJncyk6CisgICAgICAgICh0ZXN0NSk6CisgICAgICAg
ICogbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNi5qczogQWRkZWQu
CisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDYuZm9vKToKKyAgICAgICAgKHRlc3Q2
LmNhcHR1cmUpOgorICAgICAgICAodGVzdDYuYXJncyk6CisgICAgICAgICh0ZXN0Nik6CisgICAg
ICAgICogbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNy5qczogQWRk
ZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDcuZm9vKToKKyAgICAgICAgKHRl
c3Q3KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1p
Yy04LmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0Ny5mb28pOgor
ICAgICAgICAodGVzdDcpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBv
bHltb3JwaGljLWljLTkuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHRl
c3Q3LmZvbyk6CisgICAgICAgICh0ZXN0Nyk6CisKIDIwMTktMTEtMjAgIFJvc3MgS2lyc2xpbmcg
IDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGFkZHJlc3Mg
RGFyaW4ncyBmZWVkYmFjayBvbiByMjUyNjgzLgpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFy
a3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy0xLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMS5qcwkobm9uZXhpc3Rl
bnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWlj
LTEuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIs
IG0pIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihtKTsKK30KKworZnVu
Y3Rpb24gdGVzdDEoKSB7CisgICAgZnVuY3Rpb24gZm9vKG8sIGkpIHsKKyAgICAgICAgcmV0dXJu
IG9baV07CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBsZXQgbyA9IHthOiA0Miwg
YjogNDN9OworICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDAwMDsgKytpKSB7CisgICAgICAgIGFzc2VydChmb28obywgImEiKSA9PT0gNDIp
OworICAgICAgICBhc3NlcnQoZm9vKG8sICJiIikgPT09IDQzKTsKKyAgICAgICAgYXNzZXJ0KGZv
byhvLCAiYyIpID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoZm9vKG8sICJkIikgPT09
IHVuZGVmaW5lZCk7CisgICAgfQorfQordGVzdDEoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMi5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTIuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhp
Yy1pYy0yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKK2Z1bmN0aW9uIGFzc2Vy
dChiLCBtKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7Cit9CisK
K2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGZ1bmN0aW9uIGZvbyhvLCBpKSB7CisgICAgICAgIHJl
dHVybiBvW2ldOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgbGV0IHQxID0ge307
CisgICAgbGV0IHQyID0ge307CisKKyAgICBsZXQgbzEgPSBbdDFdOworICAgIGxldCBvMiA9IFsx
MF07CisgICAgbGV0IG8zID0gWzEwLjVdOworICAgIGxldCBvNCA9IFt0Ml07CisgICAgbGV0IG81
ID0ge3g6NDJ9CisgICAgZW5zdXJlQXJyYXlTdG9yYWdlKG80KTsKKworICAgIGxldCBzdGFydCA9
IERhdGUubm93KCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4MDAwMDAwOyArK2kpIHsKKyAg
ICAgICAgYXNzZXJ0KGZvbyhvMSwgMCkgPT09IHQxKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMiwg
MCkgPT09IDEwKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMywgMCkgPT09IDEwLjUpOworICAgICAg
ICBhc3NlcnQoZm9vKG80LCAwKSA9PT0gdDIpOworICAgICAgICBhc3NlcnQoZm9vKG81LCAieCIp
ID09PSA0Mik7CisgICAgICAgIGFzc2VydChmb28obzUsICJ4IikgPT09IDQyKTsKKyAgICB9Cit9
Cit0ZXN0MigpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5
bW9ycGhpYy1pYy0zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dl
dC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTMuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyOCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIsIG0pIHsKKyAgICBpZiAoIWIp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcihtKTsKK30KKworZnVuY3Rpb24gdGVzdDMoKSB7Cisg
ICAgZnVuY3Rpb24gZm9vKG8sIGkpIHsKKyAgICAgICAgcmV0dXJuIG9baV07CisgICAgfQorICAg
IG5vSW5saW5lKGZvbyk7CisKKyAgICBmdW5jdGlvbiBhcmdzKGEsIGIpIHsKKyAgICAgICAgcmV0
dXJuIGFyZ3VtZW50czsKKyAgICB9CisKKyAgICBsZXQgbzEgPSBhcmdzKDIwLCAzMCk7CisgICAg
bGV0IG8yID0gWzEwXTsKKyAgICBsZXQgbzMgPSB7eDo0Mn0KKworICAgIGxldCBzdGFydCA9IERh
dGUubm93KCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4MDAwMDAwOyArK2kpIHsKKyAgICAg
ICAgYXNzZXJ0KGZvbyhvMSwgMCkgPT09IDIwKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMSwgMSkg
PT09IDMwKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMiwgMCkgPT09IDEwKTsKKyAgICAgICAgYXNz
ZXJ0KGZvbyhvMywgIngiKSA9PT0gNDIpOworICAgIH0KK30KK3Rlc3QzKCk7CkluZGV4OiBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1p
Yy00LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12
YWwtcG9seW1vcnBoaWMtaWMtNC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACitm
dW5jdGlvbiBhc3NlcnQoYiwgbSkgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKG0pOworfQorCitmdW5jdGlvbiB0ZXN0NCgpIHsKKyAgICAvLyBzY29wZWQgYXJndW1lbnRz
CisgICAgZnVuY3Rpb24gZm9vKG8sIGkpIHsKKyAgICAgICAgcmV0dXJuIG9baV07CisgICAgfQor
ICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmdW5jdGlvbiBhcmdzKGEsIGIpIHsKKyAgICAgICAg
ZnVuY3Rpb24gY2FwdHVyZSgpIHsgCisgICAgICAgICAgICByZXR1cm4gYSArIGI7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKKyAgICB9CisKKyAgICBsZXQgbzEgPSBhcmdz
KDIwLCAzMCwgNDApOworICAgIGxldCBvMyA9IHt4OjQyfQorCisgICAgbGV0IHN0YXJ0ID0gRGF0
ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDgwMDAwMDA7ICsraSkgeworICAgICAg
ICBhc3NlcnQoZm9vKG8xLCAwKSA9PT0gMjApOworICAgICAgICBhc3NlcnQoZm9vKG8xLCAxKSA9
PT0gMzApOworICAgICAgICBhc3NlcnQoZm9vKG8xLCAyKSA9PT0gNDApOworICAgICAgICBhc3Nl
cnQoZm9vKG8xLCAzKSA9PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMywgIngi
KSA9PT0gNDIpOworICAgIH0KK30KK3Rlc3Q0KCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy01LmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMt
aWMtNS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACitmdW5jdGlvbiBhc3NlcnQo
YiwgbSkgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pOworfQorCitm
dW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBmdW5jdGlvbiBmb28obywgaSkgeworICAgICAgICByZXR1
cm4gb1tpXTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZ1bmN0aW9uIGFyZ3Mo
YSwgYikgeworICAgICAgICBmdW5jdGlvbiBjYXB0dXJlKCkgeyAKKyAgICAgICAgICAgIHJldHVy
biBhICsgYjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXJndW1lbnRzOworICAgIH0KKwor
ICAgIGxldCBvMSA9IG5ldyBVaW50OEFycmF5KFsxLCAyXSk7CisgICAgbGV0IG8yID0gbmV3IFVp
bnQzMkFycmF5KFszLCA0XSk7CisgICAgbGV0IG8zID0gbmV3IEludDMyQXJyYXkoWzUsIDZdKTsK
KyAgICBsZXQgbzQgPSBuZXcgRmxvYXQzMkFycmF5KFs3LCA4XSk7CisKKyAgICBsZXQgc3RhcnQg
PSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODAwMDAwMDsgKytpKSB7Cisg
ICAgICAgIGFzc2VydChmb28obzEsIDApID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMSwg
MSkgPT09IDIpOworICAgICAgICBhc3NlcnQoZm9vKG8yLCAwKSA9PT0gMyk7CisgICAgICAgIGFz
c2VydChmb28obzIsIDEpID09PSA0KTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMywgMCkgPT09IDUp
OworICAgICAgICBhc3NlcnQoZm9vKG8zLCAxKSA9PT0gNik7CisgICAgICAgIGFzc2VydChmb28o
bzQsIDApID09PSA3KTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvNCwgMSkgPT09IDgpOworICAgIH0K
K30KK3Rlc3Q1KCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBv
bHltb3JwaGljLWljLTYuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
Z2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy02LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNi5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM0IEBACitmdW5jdGlvbiBhc3NlcnQoYiwgbSkgeworICAgIGlmICgh
YikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pOworfQorCitmdW5jdGlvbiB0ZXN0NigpIHsK
KyAgICBmdW5jdGlvbiBmb28obywgaSkgeworICAgICAgICByZXR1cm4gb1tpXTsKKyAgICB9Cisg
ICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZ1bmN0aW9uIGFyZ3MoYSwgYikgeworICAgICAgICBm
dW5jdGlvbiBjYXB0dXJlKCkgeyAKKyAgICAgICAgICAgIHJldHVybiBhICsgYjsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gYXJndW1lbnRzOworICAgIH0KKworICAgIGxldCBvMSA9ICJhYmMi
OworICAgIGxldCBvMiA9ICJcdTI3MTNhIjsKKyAgICBsZXQgbzMgPSBuZXcgVWludDMyQXJyYXko
WzMsIDRdKTsKKworICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAyMDAwMDAwOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMSwgMCkgPT09ICJh
Iik7CisgICAgICAgIGFzc2VydChmb28obzEsIDEpID09PSAiYiIpOworICAgICAgICBhc3NlcnQo
Zm9vKG8xLCAyKSA9PT0gImMiKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMiwgMCkgPT09ICJcdTI3
MTMiKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMiwgMSkgPT09ICJhIik7CisgICAgICAgIGFzc2Vy
dChmb28obzMsIDApID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMywgMSkgPT09IDQpOwor
ICAgIH0KK30KK3Rlc3Q2KCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnkt
dmFsLXBvbHltb3JwaGljLWljLTcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy03LmpzCShub25leGlzdGVudCkKKysrIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIxIEBACitmdW5jdGlvbiBhc3NlcnQoYiwgbSkgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pOworfQorCitmdW5jdGlvbiB0ZXN0
NygpIHsKKyAgICBmdW5jdGlvbiBmb28obywgaSkgeworICAgICAgICByZXR1cm4gb1tpXTsKKyAg
ICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGxldCBzMSA9IFN5bWJvbCgpOworICAgIGxl
dCBzMiA9IFN5bWJvbCgpOworICAgIGxldCBvID0ge1tzMV06IDQyLCBbczJdOiA0M307CisgICAg
bGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDAw
OyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGZvbyhvLCBzMSkgPT09IDQyKTsKKyAgICAgICAgYXNz
ZXJ0KGZvbyhvLCBzMikgPT09IDQzKTsKKyAgICB9Cit9Cit0ZXN0NygpOwpJbmRleDogSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy04LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMt
OC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFs
LXBvbHltb3JwaGljLWljLTguanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAorZnVu
Y3Rpb24gYXNzZXJ0KGIsIG0pIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cihtKTsKK30KKworZnVuY3Rpb24gdGVzdDcoKSB7CisgICAgZnVuY3Rpb24gZm9vKG8sIGkpIHsK
KyAgICAgICAgcmV0dXJuIG9baV07CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBs
ZXQgczEgPSBTeW1ib2woKTsKKyAgICBsZXQgczIgPSBTeW1ib2woKTsKKyAgICBsZXQgbyA9IHtb
czFdOiA0MiwgW3MyXTogNDMsIG86MzJ9OworICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7Cisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDAwMDsgKytpKSB7CisgICAgICAgIGFzc2VydChm
b28obywgczEpID09PSA0Mik7CisgICAgICAgIGFzc2VydChmb28obywgczIpID09PSA0Myk7Cisg
ICAgICAgIGFzc2VydChmb28obywgIm8iKSA9PT0gMzIpOworICAgIH0KK30KK3Rlc3Q3KCk7Cklu
ZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTku
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5
bW9ycGhpYy1pYy05LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtOS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI0IEBACitmdW5jdGlvbiBhc3NlcnQoYiwgbSkgeworICAgIGlmICghYikKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKG0pOworfQorCitmdW5jdGlvbiB0ZXN0NygpIHsKKyAgICBmdW5jdGlvbiBm
b28obywgaSkgeworICAgICAgICByZXR1cm4gb1tpXTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9v
KTsKKworICAgIGxldCBzMSA9IFN5bWJvbCgpOworICAgIGxldCBzMiA9IFN5bWJvbCgpOworICAg
IGxldCBvID0ge1tzMV06IDQyLCBbczJdOiA0MywgbzozMn07CisgICAgb1swXSA9IDEzMzc7Cisg
ICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAw
MDAwOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGZvbyhvLCBzMSkgPT09IDQyKTsKKyAgICAgICAg
YXNzZXJ0KGZvbyhvLCBzMikgPT09IDQzKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvLCAibyIpID09
PSAzMik7CisgICAgICAgIGFzc2VydChmb28obywgMCkgPT09IDEzMzcpOworICAgIH0KK30KK3Rl
c3Q3KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1Mjc1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw2OCBAQAorMjAxOS0xMS0yMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBHZXRCeVN0YXR1cyBzaG91bGQgbm90IHNheSBpdCB0b29rIHRoZSBzbG93IHBhdGgg
Zm9yIG11bHRpcGxlIGlkZW50aWZpZXJzIGFuZCBzaG91bGQgaGF2ZSBhIHdheSB0byBpbmRpY2F0
ZSBpZiB0aGUgU3RydWN0dXJlU3R1YkluZm8gaXQgc2F3IHRvb2sgdGhlIHNsb3cgcGF0aAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDM1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSBkaXNjb3ZlcmVk
IHNvbWUgaXNzdWVzIHdpdGggZ2V0IGJ5IHZhbCBJQ3Mgd2hlbiByZS1ydW5uaW5nIHRoZSBtaWNy
b2JlbmNobWFya3MKKyAgICAgICAgSSB3cm90ZS4gSSBub3RpY2VkIHRoYXQgd2Ugd2VyZSBmYXN0
ZXIgd2hlbiBub3QgcnVubmluZyB3aXRoIHRoZSBERkcuIFRoZSByZWFzb24KKyAgICAgICAgZm9y
IHRoaXMgaXMgdGhhdCB3ZSB3ZXJlIG9ubHkgZW1pdHRpbmcgYSBnZXQgYnkgdmFsIElDIGluIHRo
ZSBERkcvRlRMIHdoZW4gd2UKKyAgICAgICAgb2JzZXJ2ZSB0aGUgR2V0QnlTdGF0dXMgc2F5cyBp
dCBkaWRuJ3QgImdvIHRvIHRoZSBzbG93IHBhdGgiLiBUaGUgbG9naWMgaW4gR2V0QnlTdGF0dXMK
KyAgICAgICAgZm9yIGJ1aWxkaW5nIHVwIGEgdmFyaWFudCBsaXN0IHdhcyB3cm9uZyBmb3IgSUNz
IHdpdGggbXVsdGlwbGUgaWRlbnRpZmllcnMuIFdlIGhhdmUKKyAgICAgICAgYSBjb25zaXN0ZW5j
eSBjaGVjayB3aGVuIGJ1aWxkaW5nIHVwIHRoZSBsaXN0IHRvIGVuc3VyZSB0aGF0IG5vIHR3byB2
YXJpYW50cyBoYXZlCisgICAgICAgIHN0cnVjdHVyZSBzZXRzIHdoaWNoIG92ZXJsYXAsIGJlY2F1
c2Ugd2Ugd291bGRuJ3Qga25vdyB3aGljaCBvbmUgdG8gY2hvb3NlLiBIb3dldmVyLAorICAgICAg
ICB3ZSB3ZXJlIGFjY2lkZW50YWxseSBzYXlpbmcgdHdvIEdldEJ5SWRWYXJpYW50cyBvdmVybGFw
IHdoZW4gdGhleSBoYWQgZGlmZmVyZW50IGlkZW50aWZpZXJzLgorICAgICAgICBUaGlzIHBhdGNo
IGZpeGVzIHRoYXQgYnVnIGJ5IGFsc28gZG9pbmcgYW4gaWRlbnRpZmllciBjb21wYXJpc29uIGNo
ZWNrLiBUd28gR2V0QnlJZFZhcmlhbnRzCisgICAgICAgIHdpdGggZGlmZmVyZW50IGlkZW50aWZp
ZXJzIGRvIG5vdCBvdmVybGFwLgorICAgICAgICAKKyAgICAgICAgV2UgYWxzbyB1c2VkIHRvIHNh
eSBhIEdldEJ5U3RhdHVzICJnb2VzIHRvIHRoZSBzbG93IHBhdGgiIGlmIGFueSBvZiB0aGUgY2Fz
ZXMgd2VyZSBhbgorICAgICAgICBhcnJheS1saWtlIGxvYWQuIEkgd3JvdGUgdGhhdCBjb2RlIHRo
aW5raW5nIHRoYXQgQXJyYXlQcm9maWxlIHdvdWxkIGp1c3QgaGFuZGxlIGl0LgorICAgICAgICBI
b3dldmVyLCBzb21ldGltZXMgd2UgaGF2ZSBhIGdldCBieSB2YWwgSUMgdGhhdCBib3RoIGhhcyBz
dHJpbmcgcHJvcGVydGllcyBhbmQgaW50MzIgcHJvcGVydGllcy4KKyAgICAgICAgSW4gdGhlc2Ug
a2luZHMgb2Ygc2NlbmFyaW9zLCBhbiBJQyBpcyBzdXBlciBwcm9maXRhYmxlLiBUaGlzIHBhdGNo
IG5vdyBkaXN0aW5ndWlzaGVzCisgICAgICAgIGJldHdlZW4gYSBHZXRCeVN0YXR1cyBzYXlpbmcg
IndlJ3JlIGEgc2xvdyBwYXRoIiBhbmQgaWYgd2UgYWN0dWFsbHkgb2JzZXJ2ZWQgdGhlIFN0cnVj
dHVyZVN0dWJJbmZvCisgICAgICAgIGdvIHRvIHRoZSBzbG93IHBhdGguIEluIHRoZSBERkcvRlRM
LCB3ZSBvbmx5IGZvcmdvIGVtaXR0aW5nIGEgZ2V0IGJ5IHZhbCBJQyB3aGVuIG9ic2VydmluZyBh
CisgICAgICAgIHByaW9yIFN0cnVjdHVyZVN0dWJJbmZvIHRoYXQgd2VudCB0byB0aGUgc2xvdyBw
YXRoLgorICAgICAgICAKKyAgICAgICAgSSBhbHNvIHJlYWxpemVkIGFyZSBjYWxsIHRvIFN0cnVj
dHVyZVN0dWJJbmZvOjpjb25zaWRlckNhY2hpbmcgd2FzIHdyb25nIGZvciBnZXQgYnkgdmFsIElD
cy4KKyAgICAgICAgV2Ugd2VyZSBvbmx5IGNvbnNpZGVyaW5nIHRoZSBTdHJ1Y3R1cmUgaW4gaXNv
bGF0aW9uLCBub3QgdGhlIHsgU3RydWN0dXJlLCBJZGVudGlmaWVyIH0KKyAgICAgICAgcGFpci4g
Rm9yIGdldCBieSB2YWwsIHdlIG5lZWQgdG8gIGNvbnNpZGVyIHRoZSBwYWlyIHRvZ2V0aGVyLCBz
aW5jZSB7czEsICJhIn0KKyAgICAgICAgYW5kIHtzMSwgImIifSB3aWxsIGJlIHR3byBkaWZmZXJl
bnQgYWNjZXNzIGNhc2VzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBkZW1vbnN0cmF0
ZXMgdGhhdCBvbiB0aGVzZSBtaWNyb2JlbmNobWFya3MsIGdldCBieSB2YWwgSUNzIGNhbgorICAg
ICAgICBiZSBiZXR3ZWVuIDUwLTIwMCUgZmFzdGVyLgorCisgICAgICAgICogYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29u
dGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRlY29kZS9H
ZXRCeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpHZXRCeVN0YXR1cyk6
CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhp
dFNpdGVGZWVkYmFjayk6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6R2V0QnlTdGF0
dXM6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmg6CisgICAg
ICAgIChKU0M6OkdldEJ5U3RhdHVzOjpHZXRCeVN0YXR1cyk6CisgICAgICAgIChKU0M6OkdldEJ5
U3RhdHVzOjp0YWtlc1Nsb3dQYXRoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6
Om9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCBjb25zdCk6CisgICAgICAgICogYnl0
ZWNvZGUvSUNTdGF0dXNVdGlscy5oOgorICAgICAgICAoSlNDOjphcHBlbmRJQ1N0YXR1c1Zhcmlh
bnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0luQnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6
SW5CeUlkVmFyaWFudDo6b3ZlcmxhcHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RhbmNlT2ZW
YXJpYW50Lmg6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZWYXJpYW50OjpvdmVybGFwcyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVu
Y2VzKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6Y29uc2lkZXJDYWNoaW5nKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisKIDIwMTkt
MTEtMjEgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IHJlbW92aW5nIHRoZSBibGFja2JveCBmb3IgYSBzcGVjaWZpYyBzY3JpcHQgZG9l
c24ndCBhY3R1YWxseSByZW1vdmUgdGhlIGJsYWNrYm94CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI1Mjc1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MSwxMyArMTgxLDEzIEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG8KIAogdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKKyAgICBv
dXQucHJpbnQoIjwiKTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZpZXIgPyAqbV9p
ZGVudGlmaWVyIDogSWRlbnRpZmllcigpLCAiJywgIik7CiAgICAgaWYgKCFpc1NldCgpKSB7Ci0g
ICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOworICAgICAgICBvdXQucHJpbnQoImVtcHR5PiIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIG91dC5wcmludCgKLSAgICAgICAg
IjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBpbkNvbnRleHQo
bV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KHN0cnVj
dHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250
ZXh0KSk7CiAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsKICAgICBpZiAo
bV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxs
TGlua1N0YXR1cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjUyNzUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgz
LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1w
Q29udGV4dCopIGNvbnN0OwogCiAgICAgQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgR2V0
QnlJZFZhcmlhbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9
ICEhb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyLT5pbXBs
KCkgIT0gb3RoZXIubV9pZGVudGlmaWVyLT5pbXBsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFw
cyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgR2V0QnlTdGF0dXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDI3IEBAIG5hbWVzcGFjZSBET01KSVQgewogY2xhc3MgR2V0dGVyU2V0dGVyOwogfQog
CitHZXRCeVN0YXR1czo6R2V0QnlTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnksIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKKyAgICA6IG1fd2FzU2VlbkluSklUKHRydWUpCit7Cisg
ICAgc3dpdGNoIChzdW1tYXJ5KSB7CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3Jt
YXRpb246CisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKKyAgICBjYXNlIFN0dWJJbmZvU3Vt
bWFyeTo6TWFrZXNDYWxsczoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRo
OgorICAgICAgICBtX3N0YXRlID0gc3R1YkluZm8udG9va1Nsb3dQYXRoID8gT2JzZXJ2ZWRUYWtl
c1Nsb3dQYXRoIDogVGFrZXNTbG93UGF0aDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3R1
YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgbV9zdGF0
ZSA9IHN0dWJJbmZvLnRvb2tTbG93UGF0aCA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxz
IDogTWFrZXNDYWxsczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCiBib29sIEdldEJ5U3RhdHVzOjphcHBlbmRWYXJpYW50KGNv
bnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50KQogewogICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1
c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7CkBAIC0xNDgsNyArMTY5LDcgQEAgR2V0QnlT
dGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogewogICAgIFN0dWJJbmZvU3VtbWFy
eSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkoc3R1YkluZm8pOwogICAgIGlm
ICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQotICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoc3Vt
bWFyeSk7CisgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhzdW1tYXJ5LCAqc3R1YkluZm8pOwog
ICAgIAogICAgIC8vIEZpbmFsbHkgZmlndXJlIG91dCBpZiB3ZSBjYW4gZGVyaXZlIGFuIGFjY2Vz
cyBzdHJhdGVneS4KICAgICBHZXRCeVN0YXR1cyByZXN1bHQ7CkBAIC0xNjEsNyArMTgyLDcgQEAg
R2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgIGNhc2UgQ2FjaGVU
eXBlOjpHZXRCeUlkU2VsZjogewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJ
bmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAg
ICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0
dWJJbmZvKTsKICAgICAgICAgQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIgPSBzdHViSW5mby0+
Z2V0QnlJZFNlbGZJZGVudGlmaWVyKCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBpZGVudGlmaWVyLT5pbXBsKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7CkBAIC0x
NjksOSArMTkwLDkgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQog
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogICAgICAgICB2YXJpYW50Lm1fb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KHZhcmlhbnQubV9vZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIEdl
dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgcmV0dXJu
IEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JW
YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpKTsKKyAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAgICAKICAgICAgICAgdmFyaWFudC5tX3N0cnVj
dHVyZVNldC5hZGQoc3RydWN0dXJlKTsKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQu
YXBwZW5kVmFyaWFudCh2YXJpYW50KTsKQEAgLTE5NCwxNiArMjE1LDE2IEBAIEdldEJ5U3RhdHVz
IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgZm9yICh1bnNpZ25lZCBsaXN0
SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KSB7CiAgICAg
ICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChsaXN0SW5kZXgpOwog
ICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZv
KTsKIAogICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
LCAqc3R1YkluZm8pOwogCiAgICAgICAgICAgICBpZiAoIWFjY2Vzcy5yZXF1aXJlc0lkZW50aWZp
ZXJOYW1lTWF0Y2goKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCB1c2Ug
dGhpcyBmb3IgaW5kZXhlZCBsb2FkcyBpbiB0aGUgZnV0dXJlLiBUaGlzIGlzIHByZXR0eSBzb2xp
ZCBwcm9maWxpbmcKICAgICAgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbiwgYW5kIHByb2JhYmx5
IGJldHRlciB0aGFuIEFycmF5UHJvZmlsZSB3aGVuIGl0J3MgYXZhaWxhYmxlLgogICAgICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQyMTUK
LSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwpAQCAt
MjE0LDcgKzIzNSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkK
ICAgICAgICAgICAgICAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB1c2UgdmFsdWUgcHJvZmlsaW5n
IHRvIGRpc2NvdmVyIHNvbWV0aGluZyB0aGF0IHRoZSBBY2Nlc3NDYXNlCiAgICAgICAgICAgICAg
ICAgLy8gY291bGQgaGF2ZSB0b2xkIHVzLiBCdXQsIGl0IHdvcmtzIHdlbGwgZW5vdWdoLiBTbywg
b3VyIG9ubHkgY29uY2VybiBoZXJlIGlzIHRvIG5vdAogICAgICAgICAgICAgICAgIC8vIGNyYXNo
IG9uIG51bGwgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhK
U0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0
U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKQEAgLTIyNSw3ICsyNDYsNyBA
QCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDb21wbGV4
R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFi
bGU6IHsKICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNh
bGxMaW5rU3RhdHVzOwpAQCAtMjU1LDcgKzI3Niw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVz
Ojpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3Rv
bUFjY2Vzc29yR2V0dGVyOiB7CiAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0
dGVyID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY3VzdG9tQWNjZXNzb3Io
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZT4oKS5kb21BdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
ZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1
YkluZm8pOwogICAgICAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBXVEY6Om1ha2VVbmlx
dWU8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4oKmFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlPigpLmRvbUF0dHJpYnV0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaGF2ZURPTUF0dHJp
YnV0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gQ3VzdG9t
OwpAQCAtMjY0LDcgKzI4NSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9y
U3R1YkkKICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBJdCB3b3VsZCBiZSB0b3RhbGx5IHN3ZWV0IHRvIHN1cHBvcnQgbW9yZSBvZiB0aGVz
ZSBhdCBzb21lIHBvaW50IGluIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBmdXR1cmUuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTIKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICAgICAgICAgICAgICB9IH0KIAogICAgICAgICAgICAg
ICAgIEFTU0VSVCgoQWNjZXNzQ2FzZTo6TWlzcyA9PSBhY2Nlc3MudHlwZSgpKSA9PSAoYWNjZXNz
Lm9mZnNldCgpID09IGludmFsaWRPZmZzZXQpKTsKQEAgLTI3NiwxNiArMjk3LDE2IEBAIEdldEJ5
U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgICAgICAgICAgICAg
V1RGTW92ZShkb21BdHRyaWJ1dGUpKTsKIAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFw
cGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAK
ICAgICAgICAgICAgICAgICBpZiAoaGF2ZURPTUF0dHJpYnV0ZSkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBHaXZlIHVwIHdoZW4gY3VzdG9tIGFjY2Vzc2VzIGFyZSBub3QgbWVyZ2VkIGludG8g
b25lLgogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm51bVZhcmlhbnRzKCkgIT0gMSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJz
aW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEdpdmUgdXAgd2hlbiBjdXN0b20gYWNj
ZXNzIGFuZCBzaW1wbGUgYWNjZXNzIGFyZSBtaXhlZC4KICAgICAgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdC5tX3N0YXRlID09IEN1c3RvbSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAq
c3R1YkluZm8pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0gfQpAQCAtMjk1LDcgKzMxNiw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVz
Ojpjb21wdXRlRm9yU3R1YkkKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAg
cmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7
CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zOTQs
NiArNDE1LDcgQEAgYm9vbCBHZXRCeVN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0CiAgICAgc3dp
dGNoIChtX3N0YXRlKSB7CiAgICAgY2FzZSBOb0luZm9ybWF0aW9uOgogICAgIGNhc2UgVGFrZXNT
bG93UGF0aDoKKyAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKICAgICBjYXNlIEN1c3Rv
bToKICAgICBjYXNlIE1vZHVsZU5hbWVzcGFjZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NDA0LDYgKzQyNiw3IEBAIGJvb2wgR2V0QnlTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAg
Y2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxsczoKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MTMsNiArNDM2
LDggQEAgYm9vbCBHZXRCeVN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0CiAKIEdldEJ5U3RhdHVz
IEdldEJ5U3RhdHVzOjpzbG93VmVyc2lvbigpIGNvbnN0CiB7CisgICAgaWYgKG9ic2VydmVkU3Ry
dWN0dXJlU3R1YkluZm9TbG93UGF0aCgpKQorICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMobWFr
ZXNDYWxscygpID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMgOiBPYnNlcnZlZFRha2Vz
U2xvd1BhdGgsIHdhc1NlZW5JbkpJVCgpKTsKICAgICByZXR1cm4gR2V0QnlTdGF0dXMobWFrZXND
YWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgsIHdhc1NlZW5JbkpJVCgpKTsKIH0K
IApAQCAtNDIyLDcgKzQ0NywxMCBAQCB2b2lkIEdldEJ5U3RhdHVzOjptZXJnZShjb25zdCBHZXRC
eVN0YXR1CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAo
KSB7Ci0gICAgICAgICp0aGlzID0gR2V0QnlTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5t
YWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOworICAgICAgICBpZiAo
b2JzZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkgfHwgb3RoZXIub2JzZXJ2ZWRTdHJ1
Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkpCisgICAgICAgICAgICAqdGhpcyA9IEdldEJ5U3RhdHVz
KChtYWtlc0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE9ic2VydmVkU2xvd1BhdGhB
bmRNYWtlc0NhbGxzIDogT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgKnRoaXMgPSBHZXRCeVN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1ha2Vz
Q2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7CiAgICAgfTsKICAgICAKICAg
ICBzd2l0Y2ggKG1fc3RhdGUpIHsKQEAgLTQ1Nyw3ICs0ODUsOSBAQCB2b2lkIEdldEJ5U3RhdHVz
OjptZXJnZShjb25zdCBHZXRCeVN0YXR1CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgogICAg
IGNhc2UgTWFrZXNDYWxsczoKKyAgICBjYXNlIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxz
OgogICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CiAgICAgfQogICAgIApAQCAtNTQwLDkgKzU3
MCwxNSBAQCB2b2lkIEdldEJ5U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgY2Fz
ZSBUYWtlc1Nsb3dQYXRoOgogICAgICAgICBvdXQucHJpbnQoIlRha2VzU2xvd1BhdGgiKTsKICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CisgICAgICAgIG91
dC5wcmludCgiT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIik7CisgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgTWFrZXNDYWxsczoKICAgICAgICAgb3V0LnByaW50KCJNYWtlc0NhbGxzIik7CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAg
IG91dC5wcmludCgiT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMiKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIG91dC5wcmludCgiLCAiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIiwg
c2VlbkluSklUID0gIiwgbV93YXNTZWVuSW5KSVQsICIpIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkocmV2aXNpb24gMjUyNzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDggKzU4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgTW9kdWxlTmFtZXNwYWNl
LAogICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgogICAgICAg
ICBUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xv
dyBwYXRoLiBXZSBvYnNlcnZlZCBpdCBvbiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAgICAgICAgT2Jz
ZXJ2ZWRUYWtlc1Nsb3dQYXRoLAogICAgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2UgcGF0aHMg
dGhhdCBtYWtlIGNhbGxzLgogICAgICAgICBNYWtlc0NhbGxzLAorICAgICAgICAvLyBJdCdzIGtu
b3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLiBXZSBvYnNlcnZlZCB0aGUgc2xvdyBw
YXRoIG9uIFN0cnVjdHVyZVN0dWJJbmZvLgorICAgICAgICBPYnNlcnZlZFNsb3dQYXRoQW5kTWFr
ZXNDYWxscyAsCiAgICAgfTsKIAogICAgIEdldEJ5U3RhdHVzKCkKQEAgLTcwLDI5ICs3NCwxMCBA
QCBwdWJsaWM6CiAgICAgZXhwbGljaXQgR2V0QnlTdGF0dXMoU3RhdGUgc3RhdGUpCiAgICAgICAg
IDogbV9zdGF0ZShzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSA9PSBOb0luZm9y
bWF0aW9uIHx8IHN0YXRlID09IFRha2VzU2xvd1BhdGggfHwgc3RhdGUgPT0gTWFrZXNDYWxscyk7
CisgICAgICAgIEFTU0VSVChzdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IHN0YXRlID09IFRha2Vz
U2xvd1BhdGggfHwgc3RhdGUgPT0gT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIHx8IHN0YXRlID09IE1h
a2VzQ2FsbHMgfHwgc3RhdGUgPT0gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMpOwogICAg
IH0KICAgICAKLSAgICBleHBsaWNpdCBHZXRCeVN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFy
eSkKLSAgICAgICAgOiBtX3dhc1NlZW5JbkpJVCh0cnVlKQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChzdW1tYXJ5KSB7Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9u
OgotICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6Ci0gICAgICAgIGNhc2Ug
U3R1YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5m
b1N1bW1hcnk6OlRha2VzU2xvd1BhdGg6Ci0gICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93
UGF0aDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6
OlRha2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgotICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2Vz
Q2FsbHM7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9CisgICAgZXhwbGljaXQgR2V0QnlTdGF0dXMoU3R1
YkluZm9TdW1tYXJ5IHN1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgCiAgICAgR2V0
QnlTdGF0dXMoCiAgICAgICAgIFN0YXRlIHN0YXRlLCBib29sIHdhc1NlZW5JbkpJVCkKQEAgLTEx
Nyw3ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgR2V0QnlJZFZhcmlhbnQmIGF0KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KICAgICBjb25zdCBH
ZXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0
KGluZGV4KTsgfQogCi0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxscyB8fCBtX3N0YXRl
ID09IEN1c3RvbSB8fCBtX3N0YXRlID09IE1vZHVsZU5hbWVzcGFjZTsgfQorICAgIGJvb2wgdGFr
ZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBt
X3N0YXRlID09IE9ic2VydmVkVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMg
fHwgbV9zdGF0ZSA9PSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyB8fCBtX3N0YXRlID09
IEN1c3RvbSB8fCBtX3N0YXRlID09IE1vZHVsZU5hbWVzcGFjZTsgfQorICAgIGJvb2wgb2JzZXJ2
ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBP
YnNlcnZlZFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFr
ZXNDYWxsczsgfQogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAogICAgIEdldEJ5
U3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSUNTdGF0dXNVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmgJKHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgYm9vbCBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQoVmFyaWFudFZlY3Rv
cgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHZhcmlhbnRzLnNpemUoKTsg
KytqKSB7CiAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaikKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnRzW2pdLnN0cnVjdHVyZVNldCgp
Lm92ZXJsYXBzKG1lcmdlZFZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKQorICAgICAgICAgICAgICAg
IGlmICh2YXJpYW50c1tqXS5vdmVybGFwcyhtZXJnZWRWYXJpYW50KSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC01NCw3ICs1NCw3IEBAIGJvb2wgYXBwZW5kSUNTdGF0dXNWYXJpYW50KFZhcmlhbnRW
ZWN0b3IKICAgICAvLyBvdmVybGFwIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgYW4gaW5saW5lIGNh
Y2hlIGdvdCBpbnRvIGEgd2VpcmQgc3RhdGUuIFdlIGFyZQogICAgIC8vIGRlZmVuc2l2ZSBhbmQg
YmFpbCBpZiB3ZSBkZXRlY3QgY3JhenkuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZh
cmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICh2YXJpYW50c1tpXS5zdHJ1Y3R1cmVT
ZXQoKS5vdmVybGFwcyh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSkKKyAgICAgICAgaWYgKHZhcmlh
bnRzW2ldLm92ZXJsYXBzKHZhcmlhbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFZhcmlhbnQuaAkocmV2aXNpb24gMjUyNzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAKKyAgICBib29s
IG92ZXJsYXBzKGNvbnN0IEluQnlJZFZhcmlhbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKKyAgICB9
CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluQnlJZFN0YXR1czsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZWYXJpYW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZWYXJpYW50LmgJ
KHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
YW5jZU9mVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1MywxMSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworICAgIGJvb2wg
b3ZlcmxhcHMoY29uc3QgSW5zdGFuY2VPZlZhcmlhbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKKyAg
ICB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnN0YW5jZU9mU3RhdHVzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmgJKHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogCisgICAgYm9vbCBvdmVy
bGFwcyhjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4g
c3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOworICAgIH0KKwog
cHJpdmF0ZToKICAgICBib29sIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiByZXBsYWNlKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMjUyNzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4MywxMCBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiB7CiAgICAgVk0mIHZtID0gY29kZUJsb2Nr
LT52bSgpOwogICAgIAotICAgIGJ1ZmZlcmVkU3RydWN0dXJlcy5nZW5lcmljRmlsdGVyKAotICAg
ICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJl
dHVybiB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7CisgICAgYnVmZmVyZWRTdHJ1Y3R1cmVz
LnJlbW92ZUlmKAorICAgICAgICBbJl0gKGF1dG8mIHBhaXIpIC0+IGJvb2wgeworICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwYWlyLmZpcnN0OworICAgICAgICAgICAgcmV0dXJu
ICF2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7CiAgICAgICAgIH0pOwogCiAgICAgc3dpdGNo
IChtX2NhY2hlVHlwZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBp
dCBoYXMgbWFya2VkIGV2ZXJ5dGhpbmcgdGhhdCBpdCB3aWxsIGV2ZXIgbWFyay4KICAgICBib29s
IHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAotICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBjb25zaWRlckNhY2hpbmcoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgQUxXQVlTX0lOTElORSBib29sIGNvbnNpZGVy
Q2FjaGluZyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgPSBudWxscHRyKQogICAgIHsKICAgICAgICAgRGlz
YWxsb3dHQyBkaXNhbGxvd0dDOwogCkBAIC0xNTQsNyArMTU0LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgLy8gTk9URTogVGhpcyB3aWxsIGJlaGF2ZSBvZGRseSBmb3IgSW5zdGFuY2VPZiBpZiB0
aGUgdXNlciB2YXJpZXMgdGhlIHByb3RvdHlwZSBidXQgbm90CiAgICAgICAgICAgICAvLyB0aGUg
YmFzZSdzIHN0cnVjdHVyZS4gVGhhdCBzZWVtcyB1bmxpa2VseSBmb3IgdGhlIGNhbm9uaWNhbCB1
c2Ugb2YgaW5zdGFuY2VvZiwgd2hlcmUKICAgICAgICAgICAgIC8vIHRoZSBwcm90b3R5cGUgaXMg
Zml4ZWQuCi0gICAgICAgICAgICBib29sIGlzTmV3bHlBZGRlZCA9IGJ1ZmZlcmVkU3RydWN0dXJl
cy5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGJvb2wgaXNOZXdseUFkZGVkID0gYnVmZmVy
ZWRTdHJ1Y3R1cmVzLmFkZCh7IHN0cnVjdHVyZSwgaW1wbCB9KS5pc05ld0VudHJ5OwogICAgICAg
ICAgICAgaWYgKGlzTmV3bHlBZGRlZCkKICAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmV0dXJuIGlzTmV3bHlBZGRlZDsKQEAgLTE4
OCwxMSArMTg4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZ2V0QnlJZFNlbGZJZGVu
dGlmaWVyOwogICAgIH0KICAgICAKK3ByaXZhdGU6CiAgICAgLy8gUmVwcmVzZW50cyB0aG9zZSBz
dHJ1Y3R1cmVzIHRoYXQgYWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQ
b2x5bW9ycGhpY0FjY2Vzcy4KICAgICAvLyBOb3RlIHRoYXQgaXQncyBhbHdheXMgc2FmZSB0byBj
bGVhciB0aGlzLiBJZiB3ZSBjbGVhciBpdCBwcmVtYXR1cmVseSwgdGhlbiBpZiB3ZSBzZWUgdGhl
IHNhbWUKICAgICAvLyBzdHJ1Y3R1cmUgYWdhaW4gZHVyaW5nIHRoaXMgYnVmZmVyaW5nIGNvdW50
ZG93biwgd2Ugd2lsbCBjcmVhdGUgYW4gQWNjZXNzQ2FzZSBvYmplY3QgZm9yIGl0LgogICAgIC8v
IFRoYXQncyBub3Qgc28gYmFkIC0gd2UnbGwgZ2V0IHJpZCBvZiB0aGUgcmVkdW5kYW50IG9uZXMg
b25jZSB3ZSByZWdlbmVyYXRlLgotICAgIFN0cnVjdHVyZVNldCBidWZmZXJlZFN0cnVjdHVyZXM7
CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8U3RydWN0dXJlKiwgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJ
bXBsPj4+IGJ1ZmZlcmVkU3RydWN0dXJlczsKK3B1YmxpYzoKICAgICAKICAgICBzdHJ1Y3Qgewog
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8v
IFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNo
ZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNh
Y2hlcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAyNTI3NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY1NSw3ICs1NjU1LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
ICAgIE5vZGUqIGdldEJ5VmFsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEdldEJ5VmFsLCBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAg
ICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBHZXRCeVZhbCBtdXN0IGJlIHRyZWF0ZWQgYXMg
aWYgaXQgY2xvYmJlcnMgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFrZSBpdCBn
ZW5lcmljLgogICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgZ2V0QnlWYWwpOwot
ICAgICAgICAgICAgICAgIGlmIChnZXRCeVN0YXR1cy50YWtlc1Nsb3dQYXRoKCkpCisgICAgICAg
ICAgICAgICAgaWYgKGdldEJ5U3RhdHVzLm9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0
aCgpKQogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmFkZChnZXRC
eVZhbCk7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjUyNzUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyOCw3ICsy
MDI4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYg
c2xvdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgcHJv
cGVydHlOYW1lLCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7IAogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkpCisgICAgICAgICAgICAgICAg
aWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgYmFzZVZhbHVlLnN0
cnVjdHVyZU9yTnVsbCgpLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKSkKICAgICAgICAgICAgICAgICAg
ICAgcmVwYXRjaEdldEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHByb3Bl
cnR5TmFtZSwgc2xvdCwgKnN0dWJJbmZvLCBHZXRCeUtpbmQ6Ok5vcm1hbEJ5VmFsKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZm91bmQgPyBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9KSk7Cg==
</data>
<flag name="review"
          id="399896"
          type_id="1"
          status="+"
          setter="tzagallo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384111</attachid>
            <date>2019-11-21 17:52:05 -0800</date>
            <delta_ts>2019-11-21 17:55:48 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>45561</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTI3NTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU0IEBACisyMDE5LTExLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEdldEJ5U3RhdHVzIHNob3VsZCBub3Qgc2F5IGl0IHRvb2sgdGhlIHNs
b3cgcGF0aCBmb3IgbXVsdGlwbGUgaWRlbnRpZmllcnMgYW5kIHNob3VsZCBoYXZlIGEgd2F5IHRv
IGluZGljYXRlIGlmIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBpdCBzYXcgdG9vayB0aGUgc2xvdyBw
YXRoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBUYWRldSBaYWdhbGxvLgorCisgICAgICAgICogbWlj
cm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMS5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEuZm9vKToKKyAgICAgICAgKHRlc3QxKToKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy0yLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0Mi5mb28pOgorICAgICAgICAo
dGVzdDIpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGlj
LWljLTMuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3QzLmZvbyk6
CisgICAgICAgICh0ZXN0My5hcmdzKToKKyAgICAgICAgKHRlc3QzKToKKyAgICAgICAgKiBtaWNy
b2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy00LmpzOiBBZGRlZC4KKyAgICAg
ICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0NC5mb28pOgorICAgICAgICAodGVzdDQuY2FwdHVy
ZSk6CisgICAgICAgICh0ZXN0NC5hcmdzKToKKyAgICAgICAgKHRlc3Q0KToKKyAgICAgICAgKiBt
aWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy01LmpzOiBBZGRlZC4KKyAg
ICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0NS5mb28pOgorICAgICAgICAodGVzdDUuY2Fw
dHVyZSk6CisgICAgICAgICh0ZXN0NS5hcmdzKToKKyAgICAgICAgKHRlc3Q1KToKKyAgICAgICAg
KiBtaWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy02LmpzOiBBZGRlZC4K
KyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0Ni5mb28pOgorICAgICAgICAodGVzdDYu
Y2FwdHVyZSk6CisgICAgICAgICh0ZXN0Ni5hcmdzKToKKyAgICAgICAgKHRlc3Q2KToKKyAgICAg
ICAgKiBtaWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy03LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0Ny5mb28pOgorICAgICAgICAodGVz
dDcpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWlj
LTguanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3Q3LmZvbyk6Cisg
ICAgICAgICh0ZXN0Nyk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9s
eW1vcnBoaWMtaWMtOS5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVz
dDcuZm9vKToKKyAgICAgICAgKHRlc3Q3KToKKwogMjAxOS0xMS0yMCAgUm9zcyBLaXJzbGluZyAg
PHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYWRkcmVzcyBE
YXJpbidzIGZlZWRiYWNrIG9uIHIyNTI2ODMuCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTEuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy0xLmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMt
MS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxIEBACitmdW5jdGlvbiBhc3NlcnQoYiwg
bSkgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pOworfQorCitmdW5j
dGlvbiB0ZXN0MSgpIHsKKyAgICBmdW5jdGlvbiBmb28obywgaSkgeworICAgICAgICByZXR1cm4g
b1tpXTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGxldCBvID0ge2E6IDQyLCBi
OiA0M307CisgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDAwMDAwOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGZvbyhvLCAiYSIpID09PSA0Mik7
CisgICAgICAgIGFzc2VydChmb28obywgImIiKSA9PT0gNDMpOworICAgICAgICBhc3NlcnQoZm9v
KG8sICJjIikgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChmb28obywgImQiKSA9PT0g
dW5kZWZpbmVkKTsKKyAgICB9Cit9Cit0ZXN0MSgpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy0yLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMi5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGlj
LWljLTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorZnVuY3Rpb24gYXNzZXJ0
KGIsIG0pIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihtKTsKK30KKwor
ZnVuY3Rpb24gdGVzdDIoKSB7CisgICAgZnVuY3Rpb24gZm9vKG8sIGkpIHsKKyAgICAgICAgcmV0
dXJuIG9baV07CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBsZXQgdDEgPSB7fTsK
KyAgICBsZXQgdDIgPSB7fTsKKworICAgIGxldCBvMSA9IFt0MV07CisgICAgbGV0IG8yID0gWzEw
XTsKKyAgICBsZXQgbzMgPSBbMTAuNV07CisgICAgbGV0IG80ID0gW3QyXTsKKyAgICBsZXQgbzUg
PSB7eDo0Mn0KKyAgICBlbnN1cmVBcnJheVN0b3JhZ2UobzQpOworCisgICAgbGV0IHN0YXJ0ID0g
RGF0ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDgwMDAwMDA7ICsraSkgeworICAg
ICAgICBhc3NlcnQoZm9vKG8xLCAwKSA9PT0gdDEpOworICAgICAgICBhc3NlcnQoZm9vKG8yLCAw
KSA9PT0gMTApOworICAgICAgICBhc3NlcnQoZm9vKG8zLCAwKSA9PT0gMTAuNSk7CisgICAgICAg
IGFzc2VydChmb28obzQsIDApID09PSB0Mik7CisgICAgICAgIGFzc2VydChmb28obzUsICJ4Iikg
PT09IDQyKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvNSwgIngiKSA9PT0gNDIpOworICAgIH0KK30K
K3Rlc3QyKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHlt
b3JwaGljLWljLTMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0
LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy0zLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBhc3NlcnQoYiwgbSkgeworICAgIGlmICghYikK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pOworfQorCitmdW5jdGlvbiB0ZXN0MygpIHsKKyAg
ICBmdW5jdGlvbiBmb28obywgaSkgeworICAgICAgICByZXR1cm4gb1tpXTsKKyAgICB9CisgICAg
bm9JbmxpbmUoZm9vKTsKKworICAgIGZ1bmN0aW9uIGFyZ3MoYSwgYikgeworICAgICAgICByZXR1
cm4gYXJndW1lbnRzOworICAgIH0KKworICAgIGxldCBvMSA9IGFyZ3MoMjAsIDMwKTsKKyAgICBs
ZXQgbzIgPSBbMTBdOworICAgIGxldCBvMyA9IHt4OjQyfQorCisgICAgbGV0IHN0YXJ0ID0gRGF0
ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDgwMDAwMDA7ICsraSkgeworICAgICAg
ICBhc3NlcnQoZm9vKG8xLCAwKSA9PT0gMjApOworICAgICAgICBhc3NlcnQoZm9vKG8xLCAxKSA9
PT0gMzApOworICAgICAgICBhc3NlcnQoZm9vKG8yLCAwKSA9PT0gMTApOworICAgICAgICBhc3Nl
cnQoZm9vKG8zLCAieCIpID09PSA0Mik7CisgICAgfQorfQordGVzdDMoKTsKSW5kZXg6IEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWlj
LTQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZh
bC1wb2x5bW9ycGhpYy1pYy00LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKK2Z1
bmN0aW9uIGFzc2VydChiLCBtKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IobSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIC8vIHNjb3BlZCBhcmd1bWVudHMK
KyAgICBmdW5jdGlvbiBmb28obywgaSkgeworICAgICAgICByZXR1cm4gb1tpXTsKKyAgICB9Cisg
ICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZ1bmN0aW9uIGFyZ3MoYSwgYikgeworICAgICAgICBm
dW5jdGlvbiBjYXB0dXJlKCkgeyAKKyAgICAgICAgICAgIHJldHVybiBhICsgYjsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gYXJndW1lbnRzOworICAgIH0KKworICAgIGxldCBvMSA9IGFyZ3Mo
MjAsIDMwLCA0MCk7CisgICAgbGV0IG8zID0ge3g6NDJ9CisKKyAgICBsZXQgc3RhcnQgPSBEYXRl
Lm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODAwMDAwMDsgKytpKSB7CisgICAgICAg
IGFzc2VydChmb28obzEsIDApID09PSAyMCk7CisgICAgICAgIGFzc2VydChmb28obzEsIDEpID09
PSAzMCk7CisgICAgICAgIGFzc2VydChmb28obzEsIDIpID09PSA0MCk7CisgICAgICAgIGFzc2Vy
dChmb28obzEsIDMpID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoZm9vKG8zLCAieCIp
ID09PSA0Mik7CisgICAgfQorfQordGVzdDQoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTUuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1p
Yy01LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKK2Z1bmN0aW9uIGFzc2VydChi
LCBtKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7Cit9CisKK2Z1
bmN0aW9uIHRlc3Q1KCkgeworICAgIGZ1bmN0aW9uIGZvbyhvLCBpKSB7CisgICAgICAgIHJldHVy
biBvW2ldOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZnVuY3Rpb24gYXJncyhh
LCBiKSB7CisgICAgICAgIGZ1bmN0aW9uIGNhcHR1cmUoKSB7IAorICAgICAgICAgICAgcmV0dXJu
IGEgKyBiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhcmd1bWVudHM7CisgICAgfQorCisg
ICAgbGV0IG8xID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDJdKTsKKyAgICBsZXQgbzIgPSBuZXcgVWlu
dDMyQXJyYXkoWzMsIDRdKTsKKyAgICBsZXQgbzMgPSBuZXcgSW50MzJBcnJheShbNSwgNl0pOwor
ICAgIGxldCBvNCA9IG5ldyBGbG9hdDMyQXJyYXkoWzcsIDhdKTsKKworICAgIGxldCBzdGFydCA9
IERhdGUubm93KCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4MDAwMDAwOyArK2kpIHsKKyAg
ICAgICAgYXNzZXJ0KGZvbyhvMSwgMCkgPT09IDEpOworICAgICAgICBhc3NlcnQoZm9vKG8xLCAx
KSA9PT0gMik7CisgICAgICAgIGFzc2VydChmb28obzIsIDApID09PSAzKTsKKyAgICAgICAgYXNz
ZXJ0KGZvbyhvMiwgMSkgPT09IDQpOworICAgICAgICBhc3NlcnQoZm9vKG8zLCAwKSA9PT0gNSk7
CisgICAgICAgIGFzc2VydChmb28obzMsIDEpID09PSA2KTsKKyAgICAgICAgYXNzZXJ0KGZvbyhv
NCwgMCkgPT09IDcpOworICAgICAgICBhc3NlcnQoZm9vKG80LCAxKSA9PT0gOCk7CisgICAgfQor
fQordGVzdDUoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9s
eW1vcnBoaWMtaWMtNi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9n
ZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTYuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy02LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzQgQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBtKSB7CisgICAgaWYgKCFi
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q2KCkgewor
ICAgIGZ1bmN0aW9uIGZvbyhvLCBpKSB7CisgICAgICAgIHJldHVybiBvW2ldOworICAgIH0KKyAg
ICBub0lubGluZShmb28pOworCisgICAgZnVuY3Rpb24gYXJncyhhLCBiKSB7CisgICAgICAgIGZ1
bmN0aW9uIGNhcHR1cmUoKSB7IAorICAgICAgICAgICAgcmV0dXJuIGEgKyBiOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBhcmd1bWVudHM7CisgICAgfQorCisgICAgbGV0IG8xID0gImFiYyI7
CisgICAgbGV0IG8yID0gIlx1MjcxM2EiOworICAgIGxldCBvMyA9IG5ldyBVaW50MzJBcnJheShb
MywgNF0pOworCisgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDIwMDAwMDA7ICsraSkgeworICAgICAgICBhc3NlcnQoZm9vKG8xLCAwKSA9PT0gImEi
KTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMSwgMSkgPT09ICJiIik7CisgICAgICAgIGFzc2VydChm
b28obzEsIDIpID09PSAiYyIpOworICAgICAgICBhc3NlcnQoZm9vKG8yLCAwKSA9PT0gIlx1Mjcx
MyIpOworICAgICAgICBhc3NlcnQoZm9vKG8yLCAxKSA9PT0gImEiKTsKKyAgICAgICAgYXNzZXJ0
KGZvbyhvMywgMCkgPT09IDMpOworICAgICAgICBhc3NlcnQoZm9vKG8zLCAxKSA9PT0gNCk7Cisg
ICAgfQorfQordGVzdDYoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12
YWwtcG9seW1vcnBoaWMtaWMtNy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTcuanMJKG5vbmV4aXN0ZW50KQorKysgSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy03LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEgQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBtKSB7CisgICAg
aWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q3
KCkgeworICAgIGZ1bmN0aW9uIGZvbyhvLCBpKSB7CisgICAgICAgIHJldHVybiBvW2ldOworICAg
IH0KKyAgICBub0lubGluZShmb28pOworCisgICAgbGV0IHMxID0gU3ltYm9sKCk7CisgICAgbGV0
IHMyID0gU3ltYm9sKCk7CisgICAgbGV0IG8gPSB7W3MxXTogNDIsIFtzMl06IDQzfTsKKyAgICBs
ZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwMDA7
ICsraSkgeworICAgICAgICBhc3NlcnQoZm9vKG8sIHMxKSA9PT0gNDIpOworICAgICAgICBhc3Nl
cnQoZm9vKG8sIHMyKSA9PT0gNDMpOworICAgIH0KK30KK3Rlc3Q3KCk7CkluZGV4OiBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTguanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy04
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwt
cG9seW1vcnBoaWMtaWMtOC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyIEBACitmdW5j
dGlvbiBhc3NlcnQoYiwgbSkgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KG0pOworfQorCitmdW5jdGlvbiB0ZXN0NygpIHsKKyAgICBmdW5jdGlvbiBmb28obywgaSkgewor
ICAgICAgICByZXR1cm4gb1tpXTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGxl
dCBzMSA9IFN5bWJvbCgpOworICAgIGxldCBzMiA9IFN5bWJvbCgpOworICAgIGxldCBvID0ge1tz
MV06IDQyLCBbczJdOiA0MywgbzozMn07CisgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDAwOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGZv
byhvLCBzMSkgPT09IDQyKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvLCBzMikgPT09IDQzKTsKKyAg
ICAgICAgYXNzZXJ0KGZvbyhvLCAibyIpID09PSAzMik7CisgICAgfQorfQordGVzdDcoKTsKSW5k
ZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtOS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHlt
b3JwaGljLWljLTkuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
Z2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy05LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjQgQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBtKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IobSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q3KCkgeworICAgIGZ1bmN0aW9uIGZv
byhvLCBpKSB7CisgICAgICAgIHJldHVybiBvW2ldOworICAgIH0KKyAgICBub0lubGluZShmb28p
OworCisgICAgbGV0IHMxID0gU3ltYm9sKCk7CisgICAgbGV0IHMyID0gU3ltYm9sKCk7CisgICAg
bGV0IG8gPSB7W3MxXTogNDIsIFtzMl06IDQzLCBvOjMyfTsKKyAgICBvWzBdID0gMTMzNzsKKyAg
ICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAw
MDA7ICsraSkgeworICAgICAgICBhc3NlcnQoZm9vKG8sIHMxKSA9PT0gNDIpOworICAgICAgICBh
c3NlcnQoZm9vKG8sIHMyKSA9PT0gNDMpOworICAgICAgICBhc3NlcnQoZm9vKG8sICJvIikgPT09
IDMyKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvLCAwKSA9PT0gMTMzNyk7CisgICAgfQorfQordGVz
dDcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUyNzUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDY4IEBACisyMDE5LTExLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisg
ICAgICAgIEdldEJ5U3RhdHVzIHNob3VsZCBub3Qgc2F5IGl0IHRvb2sgdGhlIHNsb3cgcGF0aCBm
b3IgbXVsdGlwbGUgaWRlbnRpZmllcnMgYW5kIHNob3VsZCBoYXZlIGEgd2F5IHRvIGluZGljYXRl
IGlmIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBpdCBzYXcgdG9vayB0aGUgc2xvdyBwYXRoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBUYWRldSBaYWdhbGxvLgorCisgICAgICAgIEkgZGlzY292ZXJlZCBz
b21lIGlzc3VlcyB3aXRoIGdldCBieSB2YWwgSUNzIHdoZW4gcmUtcnVubmluZyB0aGUgbWljcm9i
ZW5jaG1hcmtzCisgICAgICAgIEkgd3JvdGUuIEkgbm90aWNlZCB0aGF0IHdlIHdlcmUgZmFzdGVy
IHdoZW4gbm90IHJ1bm5pbmcgd2l0aCB0aGUgREZHLiBUaGUgcmVhc29uCisgICAgICAgIGZvciB0
aGlzIGlzIHRoYXQgd2Ugd2VyZSBvbmx5IGVtaXR0aW5nIGEgZ2V0IGJ5IHZhbCBJQyBpbiB0aGUg
REZHL0ZUTCB3aGVuIHdlCisgICAgICAgIG9ic2VydmUgdGhlIEdldEJ5U3RhdHVzIHNheXMgaXQg
ZGlkbid0ICJnbyB0byB0aGUgc2xvdyBwYXRoIi4gVGhlIGxvZ2ljIGluIEdldEJ5U3RhdHVzCisg
ICAgICAgIGZvciBidWlsZGluZyB1cCBhIHZhcmlhbnQgbGlzdCB3YXMgd3JvbmcgZm9yIElDcyB3
aXRoIG11bHRpcGxlIGlkZW50aWZpZXJzLiBXZSBoYXZlCisgICAgICAgIGEgY29uc2lzdGVuY3kg
Y2hlY2sgd2hlbiBidWlsZGluZyB1cCB0aGUgbGlzdCB0byBlbnN1cmUgdGhhdCBubyB0d28gdmFy
aWFudHMgaGF2ZQorICAgICAgICBzdHJ1Y3R1cmUgc2V0cyB3aGljaCBvdmVybGFwLCBiZWNhdXNl
IHdlIHdvdWxkbid0IGtub3cgd2hpY2ggb25lIHRvIGNob29zZS4gSG93ZXZlciwKKyAgICAgICAg
d2Ugd2VyZSBhY2NpZGVudGFsbHkgc2F5aW5nIHR3byBHZXRCeUlkVmFyaWFudHMgb3ZlcmxhcCB3
aGVuIHRoZXkgaGFkIGRpZmZlcmVudCBpZGVudGlmaWVycy4KKyAgICAgICAgVGhpcyBwYXRjaCBm
aXhlcyB0aGF0IGJ1ZyBieSBhbHNvIGRvaW5nIGFuIGlkZW50aWZpZXIgY29tcGFyaXNvbiBjaGVj
ay4gVHdvIEdldEJ5SWRWYXJpYW50cworICAgICAgICB3aXRoIGRpZmZlcmVudCBpZGVudGlmaWVy
cyBkbyBub3Qgb3ZlcmxhcC4KKyAgICAgICAgCisgICAgICAgIFdlIGFsc28gdXNlZCB0byBzYXkg
YSBHZXRCeVN0YXR1cyAiZ29lcyB0byB0aGUgc2xvdyBwYXRoIiBpZiBhbnkgb2YgdGhlIGNhc2Vz
IHdlcmUgYW4KKyAgICAgICAgYXJyYXktbGlrZSBsb2FkLiBJIHdyb3RlIHRoYXQgY29kZSB0aGlu
a2luZyB0aGF0IEFycmF5UHJvZmlsZSB3b3VsZCBqdXN0IGhhbmRsZSBpdC4KKyAgICAgICAgSG93
ZXZlciwgc29tZXRpbWVzIHdlIGhhdmUgYSBnZXQgYnkgdmFsIElDIHRoYXQgYm90aCBoYXMgc3Ry
aW5nIHByb3BlcnRpZXMgYW5kIGludDMyIHByb3BlcnRpZXMuCisgICAgICAgIEluIHRoZXNlIGtp
bmRzIG9mIHNjZW5hcmlvcywgYW4gSUMgaXMgc3VwZXIgcHJvZml0YWJsZS4gVGhpcyBwYXRjaCBu
b3cgZGlzdGluZ3Vpc2hlcworICAgICAgICBiZXR3ZWVuIGEgR2V0QnlTdGF0dXMgc2F5aW5nICJ3
ZSdyZSBhIHNsb3cgcGF0aCIgYW5kIGlmIHdlIGFjdHVhbGx5IG9ic2VydmVkIHRoZSBTdHJ1Y3R1
cmVTdHViSW5mbworICAgICAgICBnbyB0byB0aGUgc2xvdyBwYXRoLiBJbiB0aGUgREZHL0ZUTCwg
d2Ugb25seSBmb3JnbyBlbWl0dGluZyBhIGdldCBieSB2YWwgSUMgd2hlbiBvYnNlcnZpbmcgYQor
ICAgICAgICBwcmlvciBTdHJ1Y3R1cmVTdHViSW5mbyB0aGF0IHdlbnQgdG8gdGhlIHNsb3cgcGF0
aC4KKyAgICAgICAgCisgICAgICAgIEkgYWxzbyByZWFsaXplZCBhcmUgY2FsbCB0byBTdHJ1Y3R1
cmVTdHViSW5mbzo6Y29uc2lkZXJDYWNoaW5nIHdhcyB3cm9uZyBmb3IgZ2V0IGJ5IHZhbCBJQ3Mu
CisgICAgICAgIFdlIHdlcmUgb25seSBjb25zaWRlcmluZyB0aGUgU3RydWN0dXJlIGluIGlzb2xh
dGlvbiwgbm90IHRoZSB7IFN0cnVjdHVyZSwgSWRlbnRpZmllciB9CisgICAgICAgIHBhaXIuIEZv
ciBnZXQgYnkgdmFsLCB3ZSBuZWVkIHRvICBjb25zaWRlciB0aGUgcGFpciB0b2dldGhlciwgc2lu
Y2Uge3MxLCAiYSJ9CisgICAgICAgIGFuZCB7czEsICJiIn0gd2lsbCBiZSB0d28gZGlmZmVyZW50
IGFjY2VzcyBjYXNlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggZGVtb25zdHJhdGVz
IHRoYXQgb24gdGhlc2UgbWljcm9iZW5jaG1hcmtzLCBnZXQgYnkgdmFsIElDcyBjYW4KKyAgICAg
ICAgYmUgYmV0d2VlbiA1MC0yMDAlIGZhc3Rlci4KKworICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRl
eHQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50Lmg6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjpvdmVybGFwcyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0
QnlTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6R2V0QnlTdGF0dXMpOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2spOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6bWFrZXNDYWxscyBjb25z
dCk6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpzbG93VmVyc2lvbiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkdldEJ5U3RhdHVzOjptZXJnZSk6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVz
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeVN0YXR1cy5oOgorICAgICAg
ICAoSlNDOjpHZXRCeVN0YXR1czo6R2V0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpHZXRCeVN0
YXR1czo6dGFrZXNTbG93UGF0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpv
YnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGggY29uc3QpOgorICAgICAgICAqIGJ5dGVj
b2RlL0lDU3RhdHVzVXRpbHMuaDoKKyAgICAgICAgKEpTQzo6YXBwZW5kSUNTdGF0dXNWYXJpYW50
KToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6Oklu
QnlJZFZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mVmFy
aWFudC5oOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6b3ZlcmxhcHMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRW
YXJpYW50OjpvdmVybGFwcyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNl
cyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmNvbnNpZGVyQ2FjaGluZyk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorCiAyMDE5LTEx
LTIxICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiByZW1vdmluZyB0aGUgYmxhY2tib3ggZm9yIGEgc3BlY2lmaWMgc2NyaXB0IGRvZXNu
J3QgYWN0dWFsbHkgcmVtb3ZlIHRoZSBibGFja2JveApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNTI3NTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODEsMTMgKzE4MSwxMyBAQCB2b2lkIEdldEJ5SWRWYXJpYW50Ojpk
dW1wKFByaW50U3RyZWFtJiBvCiAKIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQo
UHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CisgICAgb3V0
LnByaW50KCI8Iik7CisgICAgb3V0LnByaW50KCJpZD0nIiwgbV9pZGVudGlmaWVyID8gKm1faWRl
bnRpZmllciA6IElkZW50aWZpZXIoKSwgIicsICIpOwogICAgIGlmICghaXNTZXQoKSkgewotICAg
ICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAgICAgICAgb3V0LnByaW50KCJlbXB0eT4iKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBvdXQucHJpbnQoCi0gICAgICAgICI8
IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1f
Y29uZGl0aW9uU2V0LCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KGluQ29udGV4dChzdHJ1Y3R1
cmVTZXQoKSwgY29udGV4dCksICIsICIsIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4
dCkpOwogICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1f
Y2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExp
bmtTdGF0dXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Mywx
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENv
bnRleHQqKSBjb25zdDsKIAogICAgIEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IEdldEJ5
SWRWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAhPSAh
IW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyLT5pbXBsKCkg
IT0gb3RoZXIubV9pZGVudGlmaWVyLT5pbXBsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhv
dGhlci5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgR2V0QnlTdGF0dXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcg
KzUyLDcgQEAgYm9vbCBHZXRCeVN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBHZQogICAgIHJl
dHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7CiB9CiAKLUdl
dEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorR2V0QnlTdGF0dXMgR2V0QnlT
dGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycykK
IHsKICAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOwogICAgIApAQCAtOTEsNiArOTEs
OCBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEluCiAgICAgfQogICAg
IH0KIAorICAgIEFTU0VSVF9VTlVTRUQodHJhY2tJZGVudGlmaWVycywgdHJhY2tJZGVudGlmaWVy
cyA9PSBUcmFja0lkZW50aWZpZXJzOjpObyk7IC8vIFdlIGNvdWxkIG1ha2UgdGhpcyB3b3JrIGlu
IHRoZSBmdXR1cmUsIGJ1dCBub2JvZHkgbmVlZHMgaXQgcmlnaHQgbm93LgorCiAgICAgaWYgKCFz
dHJ1Y3R1cmVJRCkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24sIGZh
bHNlKTsKIApAQCAtMTExLDcgKzExMyw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21w
dXRlRnJvbUxMSW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1HZXRCeVN0YXR1cyBHZXRCeVN0
YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBt
YXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQorR2V0QnlTdGF0dXMgR2V0
QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01h
cCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlm
aWVycyB0cmFja0lkZW50aWZpZXJzKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
cHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIApAQCAtMTE5LDcgKzEyMSw3IEBAIEdldEJ5U3RhdHVz
IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGUKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAg
ICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUlu
ZGV4KSkuc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICBsb2NrZXIsIHByb2Zp
bGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm8sIGNh
bGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMpOwogICAgIAogICAgIGlmIChkaWRFeGl0
KQogICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7CkBAIC0xMzAsMTIgKzEzMiwz
MyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlCiAjZW5kaWYKIAog
ICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxl
ZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQo
cHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdHJhY2tJZGVudGlmaWVycyk7CiAgICAgCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmIEVOQUJMRShKSVQpCitHZXRCeVN0YXR1czo6R2V0
QnlTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKKyAgICA6IG1fd2FzU2VlbkluSklUKHRydWUpCit7CisgICAgc3dpdGNoIChzdW1tYXJ5
KSB7CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246CisgICAgICAgIG1f
c3RhdGUgPSBOb0luZm9ybWF0aW9uOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdHViSW5m
b1N1bW1hcnk6OlNpbXBsZToKKyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICBtX3N0YXRl
ID0gc3R1YkluZm8udG9va1Nsb3dQYXRoID8gT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIDogTWF5YmVU
YWtlc1Nsb3dQYXRoOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6
OlRha2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICBtX3N0YXRlID0gc3R1YkluZm8u
dG9va1Nsb3dQYXRoID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMgOiBNYWtlc0NhbGxz
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKIEdldEJ5U3RhdHVzOjpHZXRCeVN0YXR1cyhjb25zdCBNb2R1bGVOYW1lc3BhY2VB
Y2Nlc3NDYXNlJiBhY2Nlc3NDYXNlKQogICAgIDogbV9tb2R1bGVOYW1lc3BhY2VEYXRhKEJveDxN
b2R1bGVOYW1lc3BhY2VEYXRhPjo6Y3JlYXRlKE1vZHVsZU5hbWVzcGFjZURhdGEgeyBhY2Nlc3ND
YXNlLm1vZHVsZU5hbWVzcGFjZU9iamVjdCgpLCBhY2Nlc3NDYXNlLm1vZHVsZUVudmlyb25tZW50
KCksIGFjY2Vzc0Nhc2Uuc2NvcGVPZmZzZXQoKSwgYWNjZXNzQ2FzZS5pZGVudGlmaWVyKCkgfSkp
CiAgICAgLCBtX3N0YXRlKE1vZHVsZU5hbWVzcGFjZSkKQEAgLTE0NCwxMSArMTY3LDExIEBAIEdl
dEJ5U3RhdHVzOjpHZXRCeVN0YXR1cyhjb25zdCBNb2R1bGVOYW0KIH0KIAogR2V0QnlTdGF0dXMg
R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAot
ICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQorICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhLCBUcmFj
a0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMpCiB7CiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1
bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShzdHViSW5mbyk7CiAgICAgaWYgKCFp
c0lubGluZWFibGUoc3VtbWFyeSkpCi0gICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhzdW1tYXJ5
KTsKKyAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKHN1bW1hcnksICpzdHViSW5mbyk7CiAgICAg
CiAgICAgLy8gRmluYWxseSBmaWd1cmUgb3V0IGlmIHdlIGNhbiBkZXJpdmUgYW4gYWNjZXNzIHN0
cmF0ZWd5LgogICAgIEdldEJ5U3RhdHVzIHJlc3VsdDsKQEAgLTE2MSwxNyArMTg0LDE5IEBAIEdl
dEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICBjYXNlIENhY2hlVHlw
ZTo6R2V0QnlJZFNlbGY6IHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5m
by0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICBpZiAoc3Ry
dWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHVi
SW5mbyk7CiAgICAgICAgIEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyID0gc3R1YkluZm8tPmdl
dEJ5SWRTZWxmSWRlbnRpZmllcigpOwogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
aWRlbnRpZmllci0+aW1wbCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOworICAgICAg
ICBpZiAodHJhY2tJZGVudGlmaWVycyA9PSBUcmFja0lkZW50aWZpZXJzOjpObykKKyAgICAgICAg
ICAgIGlkZW50aWZpZXIgPSBudWxscHRyOwogICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50
KFdURk1vdmUoaWRlbnRpZmllcikpOwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogICAg
ICAgICB2YXJpYW50Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBh
dHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHZhcmlhbnQubV9vZmZzZXQp
KQotICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOworICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBHZXRCeVN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgIHJldHVybiBHZXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAgICAK
ICAgICAgICAgdmFyaWFudC5tX3N0cnVjdHVyZVNldC5hZGQoc3RydWN0dXJlKTsKICAgICAgICAg
Ym9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KTsKQEAgLTE5NCwx
NiArMjE5LDE2IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXpl
KCk7ICsrbGlzdEluZGV4KSB7CiAgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3Mg
PSBsaXN0LT5hdChsaXN0SW5kZXgpOwogICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKIAogICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2Vz
UG9seVByb3RvKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhK
U0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogCiAgICAgICAgICAgICBpZiAo
IWFjY2Vzcy5yZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2goKSkgewogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBjb3VsZCB1c2UgdGhpcyBmb3IgaW5kZXhlZCBsb2FkcyBpbiB0aGUgZnV0
dXJlLiBUaGlzIGlzIHByZXR0eSBzb2xpZCBwcm9maWxpbmcKICAgICAgICAgICAgICAgICAvLyBp
bmZvcm1hdGlvbiwgYW5kIHByb2JhYmx5IGJldHRlciB0aGFuIEFycmF5UHJvZmlsZSB3aGVuIGl0
J3MgYXZhaWxhYmxlLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDQyMTUKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdl
dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YWNjZXNzLnN0cnVjdHVyZSgpOwpAQCAtMjE0LDcgKzIzOSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgICAgICAgICAvLyBzaG91bGRuJ3QgaGF2
ZSB0byB1c2UgdmFsdWUgcHJvZmlsaW5nIHRvIGRpc2NvdmVyIHNvbWV0aGluZyB0aGF0IHRoZSBB
Y2Nlc3NDYXNlCiAgICAgICAgICAgICAgICAgLy8gY291bGQgaGF2ZSB0b2xkIHVzLiBCdXQsIGl0
IHdvcmtzIHdlbGwgZW5vdWdoLiBTbywgb3VyIG9ubHkgY29uY2VybiBoZXJlIGlzIHRvIG5vdAog
ICAgICAgICAgICAgICAgIC8vIGNyYXNoIG9uIG51bGwgc3RydWN0dXJlLgotICAgICAgICAgICAg
ICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwg
KnN0dWJJbmZvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29t
cGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0
ZUZvcigKQEAgLTIyNSw3ICsyNTAsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAg
ICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSwgKnN0dWJJbmZvKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENv
bXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOwpAQCAtMjU1LDcgKzI4MCw3IEBA
IEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgICAgICAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyOiB7CiAgICAgICAgICAgICAg
ICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0dGVyID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vz
c0Nhc2U+KCkuY3VzdG9tQWNjZXNzb3IoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2Nl
c3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5kb21BdHRyaWJ1dGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAgICAgICAgICAgICAgICBkb21B
dHRyaWJ1dGUgPSBXVEY6Om1ha2VVbmlxdWU8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4oKmFjY2Vz
cy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmRvbUF0dHJpYnV0ZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgaGF2ZURPTUF0dHJpYnV0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5tX3N0YXRlID0gQ3VzdG9tOwpAQCAtMjY0LDI4ICsyODksMjggQEAgR2V0QnlTdGF0
dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dl
ZXQgdG8gc3VwcG9ydCBtb3JlIG9mIHRoZXNlIGF0IHNvbWUgcG9pbnQgaW4gdGhlCiAgICAgICAg
ICAgICAgICAgICAgIC8vIGZ1dHVyZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMzA1MgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlND
OjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAgICAg
ICAgICAgIH0gfQogCiAgICAgICAgICAgICAgICAgQVNTRVJUKChBY2Nlc3NDYXNlOjpNaXNzID09
IGFjY2Vzcy50eXBlKCkpID09IChhY2Nlc3Mub2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldCkpOwog
ICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0gICAgICAgICAgICAgICAg
ICAgIGFjY2Vzcy5pZGVudGlmaWVyKCksIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4
R2V0U3RhdHVzLm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICB0cmFja0lkZW50aWZpZXJz
ID09IFRyYWNrSWRlbnRpZmllcnM6OlllcyA/IGFjY2Vzcy5pZGVudGlmaWVyKCkgOiBCb3g8SWRl
bnRpZmllcj4obnVsbHB0ciksIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3Rh
dHVzLm9mZnNldCgpLAogICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRp
dGlvblNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSwKICAgICAgICAgICAgICAgICAgICAg
aW50cmluc2ljRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0
dGVyLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGRvbUF0dHJpYnV0ZSkpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKIAogICAgICAgICAgICAgICAgIGlmIChoYXZlRE9NQXR0
cmlidXRlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEdpdmUgdXAgd2hlbiBjdXN0b20gYWNj
ZXNzZXMgYXJlIG5vdCBtZXJnZWQgaW50byBvbmUuCiAgICAgICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQubnVtVmFyaWFudHMoKSAhPSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpz
dHViSW5mbyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
Ly8gR2l2ZSB1cCB3aGVuIGN1c3RvbSBhY2Nlc3MgYW5kIHNpbXBsZSBhY2Nlc3MgYXJlIG1peGVk
LgogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1fc3RhdGUgPT0gQ3VzdG9tKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpT
Qzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSB9CkBAIC0yOTUsNyArMzIwLDcg
QEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgIH0KICAgICAg
ICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOworICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTMwNCw3ICszMjksNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAKIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5l
TWFwLAotICAgIElDU3RhdHVzQ29udGV4dFN0YWNrJiBpY0NvbnRleHRTdGFjaywgQ29kZU9yaWdp
biBjb2RlT3JpZ2luKQorICAgIElDU3RhdHVzQ29udGV4dFN0YWNrJiBpY0NvbnRleHRTdGFjaywg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMp
CiB7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CiAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVE
YXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEocHJvZmlsZWRCbG9jaywg
Ynl0ZWNvZGVJbmRleCk7CkBAIC0zMTksNyArMzQ0LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0
dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gaW5saW5lZCBhbmQgbm90LWlubGlu
ZWQuCiAgICAgICAgICAgICAgICAgR2V0QnlTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRl
Rm9yKAogICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBiYXNlbGluZU1hcCwgYnl0
ZWNvZGVJbmRleCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0
YSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmll
cnMpOwogICAgICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OwogICAgICAgICAgICAgfQpAQCAtMzMz
LDcgKzM1OCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4
dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAgICAgICAgICAg
ICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJ
bmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250
ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0
YSwgdHJhY2tJZGVudGlmaWVycyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocmVz
dWx0LmlzU2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7CkBAIC0z
NDMsNyArMzY4LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5nZXRTdGF0dXMpOwogICAgIH0KICAgICAKLSAg
ICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJ
bmRleCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgcmV0dXJuIGNvbXB1dGVGb3Io
cHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNhbGxF
eGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMpOwogfQogCiBHZXRCeVN0YXR1cyBHZXRCeVN0
YXR1czo6Y29tcHV0ZUZvcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKQEAgLTM1OSw3ICszODQsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29t
cHV0ZUZvcihjb25zCiAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cygpOwogCiAgICAgaWYgKHBh
cnNlSW5kZXgoKnVpZCkpCi0gICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKKyAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE1heWJlVGFrZXNTbG93UGF0aCk7CiAgICAg
CiAgICAgR2V0QnlTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwpA
QCAtMzY3LDIyICszOTIsMjIgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
Y29ucwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CiAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJl
LT50eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQotICAgICAgICAgICAgcmV0
dXJuIEdldEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgcmV0dXJuIEdldEJ5
U3RhdHVzKE1heWJlVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0cnVj
dHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJu
IEdldEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3Rh
dHVzKE1heWJlVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsg
Ly8gSXQncyBwcm9iYWJseSBhIHByb3RvdHlwZSBsb29rdXAuIEdpdmUgdXAgb24gbGlmZSBmb3Ig
bm93LCBldmVuIHRob3VnaCB3ZSBjb3VsZCB0b3RhbGx5IGJlIHdheSBzbWFydGVyIGFib3V0IGl0
LgorICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE1heWJlVGFrZXNTbG93UGF0aCk7IC8v
IEl0J3MgcHJvYmFibHkgYSBwcm90b3R5cGUgbG9va3VwLiBHaXZlIHVwIG9uIGxpZmUgZm9yIG5v
dywgZXZlbiB0aG91Z2ggd2UgY291bGQgdG90YWxseSBiZSB3YXkgc21hcnRlciBhYm91dCBpdC4K
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpCiAg
ICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTWFrZXNDYWxscyk7IC8vIFdlIGNvdWxkIGJl
IHNtYXJ0ZXIgaGVyZSwgbGlrZSBzdHJlbmd0aC1yZWR1Y2luZyB0aGlzIHRvIGEgQ2FsbC4KICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JP
clZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwor
ICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE1heWJlVGFrZXNTbG93UGF0aCk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KEdldEJ5SWRWYXJpYW50KG51
bGxwdHIsIHN0cnVjdHVyZSwgb2Zmc2V0KSkpCi0gICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTWF5YmVU
YWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM5Myw3
ICs0MTgsOCBAQCBib29sIEdldEJ5U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKICAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgY2FzZSBUYWtl
c1Nsb3dQYXRoOgorICAgIGNhc2UgTWF5YmVUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2UgT2JzZXJ2
ZWRUYWtlc1Nsb3dQYXRoOgogICAgIGNhc2UgQ3VzdG9tOgogICAgIGNhc2UgTW9kdWxlTmFtZXNw
YWNlOgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MDQsNiArNDMwLDcgQEAgYm9vbCBHZXRC
eVN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICBjYXNlIE9ic2VydmVkU2xvd1BhdGhBbmRN
YWtlc0NhbGxzOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQxMyw3ICs0NDAsOSBAQCBib29sIEdldEJ5U3RhdHVzOjpt
YWtlc0NhbGxzKCkgY29uc3QKIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OnNsb3dWZXJzaW9u
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gR2V0QnlTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXND
YWxscyA6IFRha2VzU2xvd1BhdGgsIHdhc1NlZW5JbkpJVCgpKTsKKyAgICBpZiAob2JzZXJ2ZWRT
dHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkpCisgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyht
YWtlc0NhbGxzKCkgPyBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyA6IE9ic2VydmVkVGFr
ZXNTbG93UGF0aCwgd2FzU2VlbkluSklUKCkpOworICAgIHJldHVybiBHZXRCeVN0YXR1cyhtYWtl
c0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogTWF5YmVUYWtlc1Nsb3dQYXRoLCB3YXNTZWVuSW5KSVQo
KSk7CiB9CiAKIHZvaWQgR2V0QnlTdGF0dXM6Om1lcmdlKGNvbnN0IEdldEJ5U3RhdHVzJiBvdGhl
cikKQEAgLTQyMiw3ICs0NTEsMTAgQEAgdm9pZCBHZXRCeVN0YXR1czo6bWVyZ2UoY29uc3QgR2V0
QnlTdGF0dQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYXV0byBtZXJnZVNsb3cgPSBbJl0g
KCkgewotICAgICAgICAqdGhpcyA9IEdldEJ5U3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIu
bWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgaWYg
KG9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpIHx8IG90aGVyLm9ic2VydmVkU3Ry
dWN0dXJlU3R1YkluZm9TbG93UGF0aCgpKQorICAgICAgICAgICAgKnRoaXMgPSBHZXRCeVN0YXR1
cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBPYnNlcnZlZFNsb3dQYXRo
QW5kTWFrZXNDYWxscyA6IE9ic2VydmVkVGFrZXNTbG93UGF0aCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICp0aGlzID0gR2V0QnlTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtl
c0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IE1heWJlVGFrZXNTbG93UGF0aCk7CiAgICAgfTsKICAg
ICAKICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKQEAgLTQ1Niw4ICs0ODgsMTAgQEAgdm9pZCBHZXRC
eVN0YXR1czo6bWVyZ2UoY29uc3QgR2V0QnlTdGF0dQogICAgICAgICAKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBNYXliZVRha2Vz
U2xvd1BhdGg6CisgICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CiAgICAgY2FzZSBNYWtl
c0NhbGxzOgorICAgIGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CiAgICAgICAg
IHJldHVybiBtZXJnZVNsb3coKTsKICAgICB9CiAgICAgCkBAIC01MzcsMTIgKzU3MSwxOCBAQCB2
b2lkIEdldEJ5U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgY2FzZSBNb2R1bGVO
YW1lc3BhY2U6CiAgICAgICAgIG91dC5wcmludCgiTW9kdWxlTmFtZXNwYWNlIik7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICAgICAgb3V0LnByaW50KCJUYWtl
c1Nsb3dQYXRoIik7CisgICAgY2FzZSBNYXliZVRha2VzU2xvd1BhdGg6CisgICAgICAgIG91dC5w
cmludCgiTWF5YmVUYWtlc1Nsb3dQYXRoIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT2Jz
ZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQucHJpbnQoIk9ic2VydmVkVGFrZXNTbG93
UGF0aCIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1ha2VzQ2FsbHM6CiAgICAgICAgIG91
dC5wcmludCgiTWFrZXNDYWxscyIpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE9ic2VydmVk
U2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIk9ic2VydmVkU2xvd1Bh
dGhBbmRNYWtlc0NhbGxzIik7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBvdXQucHJpbnQo
IiwgIiwgbGlzdER1bXAobV92YXJpYW50cyksICIsIHNlZW5JbkpJVCA9ICIsIG1fd2FzU2Vlbklu
SklULCAiKSIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmgJKHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTkgQEAg
cHVibGljOgogICAgICAgICBDdXN0b20sCiAgICAgICAgIC8vIEl0J3MgY2FjaGVkIGZvciBhbiBh
Y2Nlc3MgdG8gYSBtb2R1bGUgbmFtZXNwYWNlIG9iamVjdCdzIGJpbmRpbmcuCiAgICAgICAgIE1v
ZHVsZU5hbWVzcGFjZSwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cg
cGF0aC4KLSAgICAgICAgVGFrZXNTbG93UGF0aCwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byB0
YWtlIHBhdGhzIHRoYXQgbWFrZSBjYWxscy4KKyAgICAgICAgLy8gSXQgd2lsbCBsaWtlbHkgdGFr
ZSB0aGUgc2xvdyBwYXRoLgorICAgICAgICBNYXliZVRha2VzU2xvd1BhdGgsCisgICAgICAgIC8v
IEl0J3Mga25vd24gdG8gdGFrZSBzbG93IHBhdGguIFdlIGFsc28gb2JzZXJ2ZWQgdGhhdCB0aGUg
c2xvdyBwYXRoIHdhcyB0YWtlbiBvbiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAgICAgICAgT2JzZXJ2
ZWRUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCB3aWxsIGxpa2VseSB0YWtlIHRoZSBzbG93
IHBhdGggYW5kIHdpbGwgbWFrZSBjYWxscy4KICAgICAgICAgTWFrZXNDYWxscywKKyAgICAgICAg
Ly8gSXQga25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuIFdlIGFsc28gb2JzZXJ2
ZWQgdGhhdCB0aGUgc2xvdyBwYXRoIHdhcyB0YWtlbiBvbiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAg
ICAgICAgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMgLAorICAgIH07CisKKyAgICBlbnVt
IGNsYXNzIFRyYWNrSWRlbnRpZmllcnMgOiB1aW50OF90IHsKKyAgICAgICAgTm8sICAvLyBVc2Vk
IGZvciBnZXRfYnlfaWQKKyAgICAgICAgWWVzLCAvLyBVc2VkIGZvciBnZXRfYnlfdmFsCiAgICAg
fTsKIAogICAgIEdldEJ5U3RhdHVzKCkKQEAgLTcwLDI5ICs3OSwxMCBAQCBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgR2V0QnlTdGF0dXMoU3RhdGUgc3RhdGUpCiAgICAgICAgIDogbV9zdGF0ZShzdGF0
ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IHN0YXRl
ID09IFRha2VzU2xvd1BhdGggfHwgc3RhdGUgPT0gTWFrZXNDYWxscyk7CisgICAgICAgIEFTU0VS
VChzdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IHN0YXRlID09IE1heWJlVGFrZXNTbG93UGF0aCB8
fCBzdGF0ZSA9PSBPYnNlcnZlZFRha2VzU2xvd1BhdGggfHwgc3RhdGUgPT0gTWFrZXNDYWxscyB8
fCBzdGF0ZSA9PSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyk7CiAgICAgfQogICAgIAot
ICAgIGV4cGxpY2l0IEdldEJ5U3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQotICAgICAg
ICA6IG1fd2FzU2VlbkluSklUKHRydWUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHN1bW1hcnkp
IHsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246Ci0gICAgICAg
ICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1
bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6
VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93
UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBtX3N0YXRlID0gTWFrZXNDYWxsczsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KKyAgICBleHBsaWNpdCBHZXRCeVN0YXR1cyhTdHViSW5mb1N1bW1h
cnksIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgCiAgICAgR2V0QnlTdGF0dXMoCiAgICAgICAg
IFN0YXRlIHN0YXRlLCBib29sIHdhc1NlZW5JbkpJVCkKQEAgLTEwMSw3ICs5MSw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9y
KENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0
YXR1c0NvbnRleHRTdGFjayYgZGZnQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luKTsKKyAgICBzdGF0
aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3Rh
dHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGRmZ0NvbnRleHRTdGFj
aywgQ29kZU9yaWdpbiwgVHJhY2tJZGVudGlmaWVycyk7CiAgICAgc3RhdGljIEdldEJ5U3RhdHVz
IGNvbXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKIAog
ICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQpAQCAtMTE3LDE1ICsx
MDcsMTQgQEAgcHVibGljOgogICAgIGNvbnN0IEdldEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CiAgICAgY29uc3QgR2V0QnlJ
ZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRl
eCk7IH0KIAotICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
PT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMgfHwgbV9zdGF0ZSA9PSBD
dXN0b20gfHwgbV9zdGF0ZSA9PSBNb2R1bGVOYW1lc3BhY2U7IH0KKyAgICBib29sIHRha2VzU2xv
d1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE1heWJlVGFrZXNTbG93UGF0aCB8fCBt
X3N0YXRlID09IE9ic2VydmVkVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMg
fHwgbV9zdGF0ZSA9PSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyB8fCBtX3N0YXRlID09
IEN1c3RvbSB8fCBtX3N0YXRlID09IE1vZHVsZU5hbWVzcGFjZTsgfQorICAgIGJvb2wgb2JzZXJ2
ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBP
YnNlcnZlZFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFr
ZXNDYWxsczsgfQogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwogICAgIAogICAgIEdldEJ5
U3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCB3YXNTZWVuSW5KSVQo
KSBjb25zdCB7IHJldHVybiBtX3dhc1NlZW5JbkpJVDsgfQogICAgIAotICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgR2V0QnlTdGF0dXMmKTsKLSAgICAKICAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhl
IHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5
IGJlIGFwcHJveGltYXRlLgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwog
CkBAIC0xNDMsMTMgKzEzMiwxNSBAQCBwdWJsaWM6CiAgICAgQm94PElkZW50aWZpZXI+IHNpbmds
ZUlkZW50aWZpZXIoKSBjb25zdDsKICAgICAKIHByaXZhdGU6CisgICAgdm9pZCBtZXJnZShjb25z
dCBHZXRCeVN0YXR1cyYpOworICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgR2V0QnlTdGF0dXMo
Y29uc3QgTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZSYpOwogICAgIHN0YXRpYyBHZXRCeVN0YXR1
cyBjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygKLSAgICAgICAgY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworICAgICAgICBjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlmaWVy
cyk7CiAjZW5kaWYKLSAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2Rl
QmxvY2sqLCBCeXRlY29kZUluZGV4KTsKLSAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZv
cihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxs
TGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0
ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBUcmFja0lkZW50aWZpZXJzKTsK
KyAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01h
cCYsIEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRh
LCBUcmFja0lkZW50aWZpZXJzKTsKIAogICAgIHN0cnVjdCBNb2R1bGVOYW1lc3BhY2VEYXRhIHsK
ICAgICAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0
IHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3Rh
dHVzVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SUNTdGF0dXNVdGlscy5oCShyZXZpc2lvbiAyNTI3NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIGJvb2wgYXBwZW5kSUNTdGF0dXNWYXJpYW50KFZhcmlhbnRWZWN0b3IKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB2YXJpYW50cy5zaXplKCk7ICsraikgewogICAgICAg
ICAgICAgICAgIGlmIChpID09IGopCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIGlmICh2YXJpYW50c1tqXS5zdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhtZXJn
ZWRWYXJpYW50LnN0cnVjdHVyZVNldCgpKSkKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFudHNb
al0ub3ZlcmxhcHMobWVyZ2VkVmFyaWFudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTQsNyAr
NTQsNyBAQCBib29sIGFwcGVuZElDU3RhdHVzVmFyaWFudChWYXJpYW50VmVjdG9yCiAgICAgLy8g
b3ZlcmxhcCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IGFuIGlubGluZSBjYWNoZSBnb3QgaW50byBh
IHdlaXJkIHN0YXRlLiBXZSBhcmUKICAgICAvLyBkZWZlbnNpdmUgYW5kIGJhaWwgaWYgd2UgZGV0
ZWN0IGNyYXp5LgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YXJpYW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAodmFyaWFudHNbaV0uc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMo
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpCisgICAgICAgIGlmICh2YXJpYW50c1tpXS5vdmVybGFw
cyh2YXJpYW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmgJKHJl
dmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogCisgICAgYm9vbCBvdmVybGFwcyhjb25z
dCBJbkJ5SWRWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVT
ZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgfQorCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBJbkJ5SWRTdGF0dXM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mVmFyaWFudC5oCShyZXZpc2lvbiAyNTI3
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTEgQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0
IEluc3RhbmNlT2ZWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgfQogICAgIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zdGFuY2VPZlN0YXR1czsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAy
NTI3NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAorICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUHV0
QnlJZFZhcmlhbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgp
Lm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
Ym9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlkVmFy
aWFudCYgcmVwbGFjZSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI1Mjc1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4Myw5ICsyODMsMTAgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICAK
LSAgICBidWZmZXJlZFN0cnVjdHVyZXMuZ2VuZXJpY0ZpbHRlcigKLSAgICAgICAgWyZdIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gdm0uaGVhcC5p
c01hcmtlZChzdHJ1Y3R1cmUpOworICAgIGJ1ZmZlcmVkU3RydWN0dXJlcy5yZW1vdmVJZigKKyAg
ICAgICAgWyZdIChhdXRvJiBwYWlyKSAtPiBib29sIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gcGFpci5maXJzdDsKKyAgICAgICAgICAgIHJldHVybiAhdm0uaGVhcC5pc01h
cmtlZChzdHJ1Y3R1cmUpOwogICAgICAgICB9KTsKIAogICAgIHN3aXRjaCAobV9jYWNoZVR5cGUp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCShyZXZpc2lvbiAyNTI3NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQs
NyBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgaXQgaGFzIG1hcmtlZCBl
dmVyeXRoaW5nIHRoYXQgaXQgd2lsbCBldmVyIG1hcmsuCiAgICAgYm9vbCBwcm9wYWdhdGVUcmFu
c2l0aW9ucyhTbG90VmlzaXRvciYpOwogICAgICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
Y29uc2lkZXJDYWNoaW5nKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjb25zaWRlckNhY2hpbmcoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJp
bmdJbXBsKiBpbXBsID0gbnVsbHB0cikKICAgICB7CiAgICAgICAgIERpc2FsbG93R0MgZGlzYWxs
b3dHQzsKIApAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIE5PVEU6
IFRoaXMgd2lsbCBiZWhhdmUgb2RkbHkgZm9yIEluc3RhbmNlT2YgaWYgdGhlIHVzZXIgdmFyaWVz
IHRoZSBwcm90b3R5cGUgYnV0IG5vdAogICAgICAgICAgICAgLy8gdGhlIGJhc2UncyBzdHJ1Y3R1
cmUuIFRoYXQgc2VlbXMgdW5saWtlbHkgZm9yIHRoZSBjYW5vbmljYWwgdXNlIG9mIGluc3RhbmNl
b2YsIHdoZXJlCiAgICAgICAgICAgICAvLyB0aGUgcHJvdG90eXBlIGlzIGZpeGVkLgotICAgICAg
ICAgICAgYm9vbCBpc05ld2x5QWRkZWQgPSBidWZmZXJlZFN0cnVjdHVyZXMuYWRkKHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICBib29sIGlzTmV3bHlBZGRlZCA9IGJ1ZmZlcmVkU3RydWN0dXJlcy5h
ZGQoeyBzdHJ1Y3R1cmUsIGltcGwgfSkuaXNOZXdFbnRyeTsKICAgICAgICAgICAgIGlmIChpc05l
d2x5QWRkZWQpCiAgICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
KTsKICAgICAgICAgICAgIHJldHVybiBpc05ld2x5QWRkZWQ7CkBAIC0xODgsMTEgKzE4OCwxMyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2dldEJ5SWRTZWxmSWRlbnRpZmllcjsKICAgICB9
CiAgICAgCitwcml2YXRlOgogICAgIC8vIFJlcHJlc2VudHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0
IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nl
c3MuCiAgICAgLy8gTm90ZSB0aGF0IGl0J3MgYWx3YXlzIHNhZmUgdG8gY2xlYXIgdGhpcy4gSWYg
d2UgY2xlYXIgaXQgcHJlbWF0dXJlbHksIHRoZW4gaWYgd2Ugc2VlIHRoZSBzYW1lCiAgICAgLy8g
c3RydWN0dXJlIGFnYWluIGR1cmluZyB0aGlzIGJ1ZmZlcmluZyBjb3VudGRvd24sIHdlIHdpbGwg
Y3JlYXRlIGFuIEFjY2Vzc0Nhc2Ugb2JqZWN0IGZvciBpdC4KICAgICAvLyBUaGF0J3Mgbm90IHNv
IGJhZCAtIHdlJ2xsIGdldCByaWQgb2YgdGhlIHJlZHVuZGFudCBvbmVzIG9uY2Ugd2UgcmVnZW5l
cmF0ZS4KLSAgICBTdHJ1Y3R1cmVTZXQgYnVmZmVyZWRTdHJ1Y3R1cmVzOworICAgIEhhc2hTZXQ8
c3RkOjpwYWlyPFN0cnVjdHVyZSosIFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+PiBidWZmZXJl
ZFN0cnVjdHVyZXM7CitwdWJsaWM6CiAgICAgCiAgICAgc3RydWN0IHsKICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhl
ciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9j
YXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMjUyNzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MTMsNyArNDcxMyw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlR2V0QnlJZChjb25zdCAKICAgICBHZXRCeVN0YXR1cyBnZXRCeVN0YXR1
cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAs
IG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOworICAgICAg
ICBjdXJyZW50Q29kZU9yaWdpbigpLCBHZXRCeVN0YXR1czo6VHJhY2tJZGVudGlmaWVyczo6Tm8p
OwogCiAgICAgQWNjZXNzVHlwZSB0eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKICAgICB1bnNp
Z25lZCBvcGNvZGVMZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKQEAgLTU2MjIs
NyArNTYyMiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKICAgICAgICAgICAg
IE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgICAgICAgICAg
Ym9vbCBzaG91bGRDb21waWxlQXNHZXRCeUlkID0gZmFsc2U7Ci0gICAgICAgICAgICBHZXRCeVN0
YXR1cyBnZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9p
Y0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7CisgICAgICAgICAgICBHZXRCeVN0
YXR1cyBnZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9p
Y0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0dXM6OlRyYWNrSWRl
bnRpZmllcnM6Olllcyk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
MDsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0
ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNv
bWVzIG51bGwuCkBAIC01NjU1LDcgKzU2NTUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgTm9kZSogZ2V0QnlWYWwgPSBhZGRUb0dy
YXBoKE5vZGU6OlZhckFyZywgR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBP
cEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7IC8v
IEdldEJ5VmFsIG11c3QgYmUgdHJlYXRlZCBhcyBpZiBpdCBjbG9iYmVycyBleGl0IHN0YXRlLCBz
aW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIGl0IGdlbmVyaWMuCiAgICAgICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLm1fZHN0LCBnZXRCeVZhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGdldEJ5U3Rh
dHVzLnRha2VzU2xvd1BhdGgoKSkKKyAgICAgICAgICAgICAgICBpZiAoZ2V0QnlTdGF0dXMub2Jz
ZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkpCiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9zbG93R2V0QnlWYWwuYWRkKGdldEJ5VmFsKTsKICAgICAgICAgICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyNTI3NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDI4LDcgKzIwMjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFsm
XSAoYm9vbCBmb3VuZCwgUHJvcGVydHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBwcm9wZXJ0eU5hbWUsIGJhc2VWYWx1ZSA9PSBzbG90
LnNsb3RCYXNlKCkpKTsgCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0
dWJJbmZvLT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgYmFzZVZhbHVlLnN0cnVjdHVy
ZU9yTnVsbCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGlu
Zyh2bSwgY29kZUJsb2NrLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCksIHByb3BlcnR5TmFt
ZS5pbXBsKCkpKQogICAgICAgICAgICAgICAgICAgICByZXBhdGNoR2V0QnkoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCAqc3R1YkluZm8sIEdl
dEJ5S2luZDo6Tm9ybWFsQnlWYWwpOwogICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZCA/IHNs
b3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsK
ICAgICAgICAgICAgIH0pKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384113</attachid>
            <date>2019-11-21 17:55:48 -0800</date>
            <delta_ts>2019-11-21 21:42:04 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>45577</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTI3NTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU0IEBACisyMDE5LTExLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEdldEJ5U3RhdHVzIHNob3VsZCBub3Qgc2F5IGl0IHRvb2sgdGhlIHNs
b3cgcGF0aCBmb3IgbXVsdGlwbGUgaWRlbnRpZmllcnMgYW5kIHNob3VsZCBoYXZlIGEgd2F5IHRv
IGluZGljYXRlIGlmIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBpdCBzYXcgdG9vayB0aGUgc2xvdyBw
YXRoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBUYWRldSBaYWdhbGxvLgorCisgICAgICAgICogbWlj
cm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMS5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEuZm9vKToKKyAgICAgICAgKHRlc3QxKToKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy0yLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0Mi5mb28pOgorICAgICAgICAo
dGVzdDIpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGlj
LWljLTMuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3QzLmZvbyk6
CisgICAgICAgICh0ZXN0My5hcmdzKToKKyAgICAgICAgKHRlc3QzKToKKyAgICAgICAgKiBtaWNy
b2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy00LmpzOiBBZGRlZC4KKyAgICAg
ICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0NC5mb28pOgorICAgICAgICAodGVzdDQuY2FwdHVy
ZSk6CisgICAgICAgICh0ZXN0NC5hcmdzKToKKyAgICAgICAgKHRlc3Q0KToKKyAgICAgICAgKiBt
aWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy01LmpzOiBBZGRlZC4KKyAg
ICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0NS5mb28pOgorICAgICAgICAodGVzdDUuY2Fw
dHVyZSk6CisgICAgICAgICh0ZXN0NS5hcmdzKToKKyAgICAgICAgKHRlc3Q1KToKKyAgICAgICAg
KiBtaWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy02LmpzOiBBZGRlZC4K
KyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0Ni5mb28pOgorICAgICAgICAodGVzdDYu
Y2FwdHVyZSk6CisgICAgICAgICh0ZXN0Ni5hcmdzKToKKyAgICAgICAgKHRlc3Q2KToKKyAgICAg
ICAgKiBtaWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy03LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0Ny5mb28pOgorICAgICAgICAodGVz
dDcpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWlj
LTguanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3Q3LmZvbyk6Cisg
ICAgICAgICh0ZXN0Nyk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9s
eW1vcnBoaWMtaWMtOS5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVz
dDcuZm9vKToKKyAgICAgICAgKHRlc3Q3KToKKwogMjAxOS0xMS0yMCAgUm9zcyBLaXJzbGluZyAg
PHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYWRkcmVzcyBE
YXJpbidzIGZlZWRiYWNrIG9uIHIyNTI2ODMuCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTEuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy0xLmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMt
MS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxIEBACitmdW5jdGlvbiBhc3NlcnQoYiwg
bSkgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pOworfQorCitmdW5j
dGlvbiB0ZXN0MSgpIHsKKyAgICBmdW5jdGlvbiBmb28obywgaSkgeworICAgICAgICByZXR1cm4g
b1tpXTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGxldCBvID0ge2E6IDQyLCBi
OiA0M307CisgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDAwMDAwOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGZvbyhvLCAiYSIpID09PSA0Mik7
CisgICAgICAgIGFzc2VydChmb28obywgImIiKSA9PT0gNDMpOworICAgICAgICBhc3NlcnQoZm9v
KG8sICJjIikgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChmb28obywgImQiKSA9PT0g
dW5kZWZpbmVkKTsKKyAgICB9Cit9Cit0ZXN0MSgpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy0yLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMi5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGlj
LWljLTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorZnVuY3Rpb24gYXNzZXJ0
KGIsIG0pIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihtKTsKK30KKwor
ZnVuY3Rpb24gdGVzdDIoKSB7CisgICAgZnVuY3Rpb24gZm9vKG8sIGkpIHsKKyAgICAgICAgcmV0
dXJuIG9baV07CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBsZXQgdDEgPSB7fTsK
KyAgICBsZXQgdDIgPSB7fTsKKworICAgIGxldCBvMSA9IFt0MV07CisgICAgbGV0IG8yID0gWzEw
XTsKKyAgICBsZXQgbzMgPSBbMTAuNV07CisgICAgbGV0IG80ID0gW3QyXTsKKyAgICBsZXQgbzUg
PSB7eDo0Mn0KKyAgICBlbnN1cmVBcnJheVN0b3JhZ2UobzQpOworCisgICAgbGV0IHN0YXJ0ID0g
RGF0ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDgwMDAwMDA7ICsraSkgeworICAg
ICAgICBhc3NlcnQoZm9vKG8xLCAwKSA9PT0gdDEpOworICAgICAgICBhc3NlcnQoZm9vKG8yLCAw
KSA9PT0gMTApOworICAgICAgICBhc3NlcnQoZm9vKG8zLCAwKSA9PT0gMTAuNSk7CisgICAgICAg
IGFzc2VydChmb28obzQsIDApID09PSB0Mik7CisgICAgICAgIGFzc2VydChmb28obzUsICJ4Iikg
PT09IDQyKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvNSwgIngiKSA9PT0gNDIpOworICAgIH0KK30K
K3Rlc3QyKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHlt
b3JwaGljLWljLTMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0
LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy0zLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBhc3NlcnQoYiwgbSkgeworICAgIGlmICghYikK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pOworfQorCitmdW5jdGlvbiB0ZXN0MygpIHsKKyAg
ICBmdW5jdGlvbiBmb28obywgaSkgeworICAgICAgICByZXR1cm4gb1tpXTsKKyAgICB9CisgICAg
bm9JbmxpbmUoZm9vKTsKKworICAgIGZ1bmN0aW9uIGFyZ3MoYSwgYikgeworICAgICAgICByZXR1
cm4gYXJndW1lbnRzOworICAgIH0KKworICAgIGxldCBvMSA9IGFyZ3MoMjAsIDMwKTsKKyAgICBs
ZXQgbzIgPSBbMTBdOworICAgIGxldCBvMyA9IHt4OjQyfQorCisgICAgbGV0IHN0YXJ0ID0gRGF0
ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDgwMDAwMDA7ICsraSkgeworICAgICAg
ICBhc3NlcnQoZm9vKG8xLCAwKSA9PT0gMjApOworICAgICAgICBhc3NlcnQoZm9vKG8xLCAxKSA9
PT0gMzApOworICAgICAgICBhc3NlcnQoZm9vKG8yLCAwKSA9PT0gMTApOworICAgICAgICBhc3Nl
cnQoZm9vKG8zLCAieCIpID09PSA0Mik7CisgICAgfQorfQordGVzdDMoKTsKSW5kZXg6IEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWlj
LTQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZh
bC1wb2x5bW9ycGhpYy1pYy00LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKK2Z1
bmN0aW9uIGFzc2VydChiLCBtKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IobSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIC8vIHNjb3BlZCBhcmd1bWVudHMK
KyAgICBmdW5jdGlvbiBmb28obywgaSkgeworICAgICAgICByZXR1cm4gb1tpXTsKKyAgICB9Cisg
ICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGZ1bmN0aW9uIGFyZ3MoYSwgYikgeworICAgICAgICBm
dW5jdGlvbiBjYXB0dXJlKCkgeyAKKyAgICAgICAgICAgIHJldHVybiBhICsgYjsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gYXJndW1lbnRzOworICAgIH0KKworICAgIGxldCBvMSA9IGFyZ3Mo
MjAsIDMwLCA0MCk7CisgICAgbGV0IG8zID0ge3g6NDJ9CisKKyAgICBsZXQgc3RhcnQgPSBEYXRl
Lm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODAwMDAwMDsgKytpKSB7CisgICAgICAg
IGFzc2VydChmb28obzEsIDApID09PSAyMCk7CisgICAgICAgIGFzc2VydChmb28obzEsIDEpID09
PSAzMCk7CisgICAgICAgIGFzc2VydChmb28obzEsIDIpID09PSA0MCk7CisgICAgICAgIGFzc2Vy
dChmb28obzEsIDMpID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoZm9vKG8zLCAieCIp
ID09PSA0Mik7CisgICAgfQorfQordGVzdDQoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTUuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1p
Yy01LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKK2Z1bmN0aW9uIGFzc2VydChi
LCBtKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7Cit9CisKK2Z1
bmN0aW9uIHRlc3Q1KCkgeworICAgIGZ1bmN0aW9uIGZvbyhvLCBpKSB7CisgICAgICAgIHJldHVy
biBvW2ldOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZnVuY3Rpb24gYXJncyhh
LCBiKSB7CisgICAgICAgIGZ1bmN0aW9uIGNhcHR1cmUoKSB7IAorICAgICAgICAgICAgcmV0dXJu
IGEgKyBiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhcmd1bWVudHM7CisgICAgfQorCisg
ICAgbGV0IG8xID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDJdKTsKKyAgICBsZXQgbzIgPSBuZXcgVWlu
dDMyQXJyYXkoWzMsIDRdKTsKKyAgICBsZXQgbzMgPSBuZXcgSW50MzJBcnJheShbNSwgNl0pOwor
ICAgIGxldCBvNCA9IG5ldyBGbG9hdDMyQXJyYXkoWzcsIDhdKTsKKworICAgIGxldCBzdGFydCA9
IERhdGUubm93KCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4MDAwMDAwOyArK2kpIHsKKyAg
ICAgICAgYXNzZXJ0KGZvbyhvMSwgMCkgPT09IDEpOworICAgICAgICBhc3NlcnQoZm9vKG8xLCAx
KSA9PT0gMik7CisgICAgICAgIGFzc2VydChmb28obzIsIDApID09PSAzKTsKKyAgICAgICAgYXNz
ZXJ0KGZvbyhvMiwgMSkgPT09IDQpOworICAgICAgICBhc3NlcnQoZm9vKG8zLCAwKSA9PT0gNSk7
CisgICAgICAgIGFzc2VydChmb28obzMsIDEpID09PSA2KTsKKyAgICAgICAgYXNzZXJ0KGZvbyhv
NCwgMCkgPT09IDcpOworICAgICAgICBhc3NlcnQoZm9vKG80LCAxKSA9PT0gOCk7CisgICAgfQor
fQordGVzdDUoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9s
eW1vcnBoaWMtaWMtNi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9n
ZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTYuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy02LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzQgQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBtKSB7CisgICAgaWYgKCFi
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q2KCkgewor
ICAgIGZ1bmN0aW9uIGZvbyhvLCBpKSB7CisgICAgICAgIHJldHVybiBvW2ldOworICAgIH0KKyAg
ICBub0lubGluZShmb28pOworCisgICAgZnVuY3Rpb24gYXJncyhhLCBiKSB7CisgICAgICAgIGZ1
bmN0aW9uIGNhcHR1cmUoKSB7IAorICAgICAgICAgICAgcmV0dXJuIGEgKyBiOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBhcmd1bWVudHM7CisgICAgfQorCisgICAgbGV0IG8xID0gImFiYyI7
CisgICAgbGV0IG8yID0gIlx1MjcxM2EiOworICAgIGxldCBvMyA9IG5ldyBVaW50MzJBcnJheShb
MywgNF0pOworCisgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDIwMDAwMDA7ICsraSkgeworICAgICAgICBhc3NlcnQoZm9vKG8xLCAwKSA9PT0gImEi
KTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvMSwgMSkgPT09ICJiIik7CisgICAgICAgIGFzc2VydChm
b28obzEsIDIpID09PSAiYyIpOworICAgICAgICBhc3NlcnQoZm9vKG8yLCAwKSA9PT0gIlx1Mjcx
MyIpOworICAgICAgICBhc3NlcnQoZm9vKG8yLCAxKSA9PT0gImEiKTsKKyAgICAgICAgYXNzZXJ0
KGZvbyhvMywgMCkgPT09IDMpOworICAgICAgICBhc3NlcnQoZm9vKG8zLCAxKSA9PT0gNCk7Cisg
ICAgfQorfQordGVzdDYoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12
YWwtcG9seW1vcnBoaWMtaWMtNy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTcuanMJKG5vbmV4aXN0ZW50KQorKysgSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy03LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEgQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBtKSB7CisgICAg
aWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q3
KCkgeworICAgIGZ1bmN0aW9uIGZvbyhvLCBpKSB7CisgICAgICAgIHJldHVybiBvW2ldOworICAg
IH0KKyAgICBub0lubGluZShmb28pOworCisgICAgbGV0IHMxID0gU3ltYm9sKCk7CisgICAgbGV0
IHMyID0gU3ltYm9sKCk7CisgICAgbGV0IG8gPSB7W3MxXTogNDIsIFtzMl06IDQzfTsKKyAgICBs
ZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwMDA7
ICsraSkgeworICAgICAgICBhc3NlcnQoZm9vKG8sIHMxKSA9PT0gNDIpOworICAgICAgICBhc3Nl
cnQoZm9vKG8sIHMyKSA9PT0gNDMpOworICAgIH0KK30KK3Rlc3Q3KCk7CkluZGV4OiBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTguanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy04
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwt
cG9seW1vcnBoaWMtaWMtOC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyIEBACitmdW5j
dGlvbiBhc3NlcnQoYiwgbSkgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KG0pOworfQorCitmdW5jdGlvbiB0ZXN0NygpIHsKKyAgICBmdW5jdGlvbiBmb28obywgaSkgewor
ICAgICAgICByZXR1cm4gb1tpXTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAgIGxl
dCBzMSA9IFN5bWJvbCgpOworICAgIGxldCBzMiA9IFN5bWJvbCgpOworICAgIGxldCBvID0ge1tz
MV06IDQyLCBbczJdOiA0MywgbzozMn07CisgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDAwOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGZv
byhvLCBzMSkgPT09IDQyKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvLCBzMikgPT09IDQzKTsKKyAg
ICAgICAgYXNzZXJ0KGZvbyhvLCAibyIpID09PSAzMik7CisgICAgfQorfQordGVzdDcoKTsKSW5k
ZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2dldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtOS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9nZXQtYnktdmFsLXBvbHlt
b3JwaGljLWljLTkuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
Z2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy05LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjQgQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBtKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IobSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q3KCkgeworICAgIGZ1bmN0aW9uIGZv
byhvLCBpKSB7CisgICAgICAgIHJldHVybiBvW2ldOworICAgIH0KKyAgICBub0lubGluZShmb28p
OworCisgICAgbGV0IHMxID0gU3ltYm9sKCk7CisgICAgbGV0IHMyID0gU3ltYm9sKCk7CisgICAg
bGV0IG8gPSB7W3MxXTogNDIsIFtzMl06IDQzLCBvOjMyfTsKKyAgICBvWzBdID0gMTMzNzsKKyAg
ICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAw
MDA7ICsraSkgeworICAgICAgICBhc3NlcnQoZm9vKG8sIHMxKSA9PT0gNDIpOworICAgICAgICBh
c3NlcnQoZm9vKG8sIHMyKSA9PT0gNDMpOworICAgICAgICBhc3NlcnQoZm9vKG8sICJvIikgPT09
IDMyKTsKKyAgICAgICAgYXNzZXJ0KGZvbyhvLCAwKSA9PT0gMTMzNyk7CisgICAgfQorfQordGVz
dDcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUyNzUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDY4IEBACisyMDE5LTExLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisg
ICAgICAgIEdldEJ5U3RhdHVzIHNob3VsZCBub3Qgc2F5IGl0IHRvb2sgdGhlIHNsb3cgcGF0aCBm
b3IgbXVsdGlwbGUgaWRlbnRpZmllcnMgYW5kIHNob3VsZCBoYXZlIGEgd2F5IHRvIGluZGljYXRl
IGlmIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBpdCBzYXcgdG9vayB0aGUgc2xvdyBwYXRoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBUYWRldSBaYWdhbGxvLgorCisgICAgICAgIEkgZGlzY292ZXJlZCBz
b21lIGlzc3VlcyB3aXRoIGdldCBieSB2YWwgSUNzIHdoZW4gcmUtcnVubmluZyB0aGUgbWljcm9i
ZW5jaG1hcmtzCisgICAgICAgIEkgd3JvdGUuIEkgbm90aWNlZCB0aGF0IHdlIHdlcmUgZmFzdGVy
IHdoZW4gbm90IHJ1bm5pbmcgd2l0aCB0aGUgREZHLiBUaGUgcmVhc29uCisgICAgICAgIGZvciB0
aGlzIGlzIHRoYXQgd2Ugd2VyZSBvbmx5IGVtaXR0aW5nIGEgZ2V0IGJ5IHZhbCBJQyBpbiB0aGUg
REZHL0ZUTCB3aGVuIHdlCisgICAgICAgIG9ic2VydmUgdGhlIEdldEJ5U3RhdHVzIHNheXMgaXQg
ZGlkbid0ICJnbyB0byB0aGUgc2xvdyBwYXRoIi4gVGhlIGxvZ2ljIGluIEdldEJ5U3RhdHVzCisg
ICAgICAgIGZvciBidWlsZGluZyB1cCBhIHZhcmlhbnQgbGlzdCB3YXMgd3JvbmcgZm9yIElDcyB3
aXRoIG11bHRpcGxlIGlkZW50aWZpZXJzLiBXZSBoYXZlCisgICAgICAgIGEgY29uc2lzdGVuY3kg
Y2hlY2sgd2hlbiBidWlsZGluZyB1cCB0aGUgbGlzdCB0byBlbnN1cmUgdGhhdCBubyB0d28gdmFy
aWFudHMgaGF2ZQorICAgICAgICBzdHJ1Y3R1cmUgc2V0cyB3aGljaCBvdmVybGFwLCBiZWNhdXNl
IHdlIHdvdWxkbid0IGtub3cgd2hpY2ggb25lIHRvIGNob29zZS4gSG93ZXZlciwKKyAgICAgICAg
d2Ugd2VyZSBhY2NpZGVudGFsbHkgc2F5aW5nIHR3byBHZXRCeUlkVmFyaWFudHMgb3ZlcmxhcCB3
aGVuIHRoZXkgaGFkIGRpZmZlcmVudCBpZGVudGlmaWVycy4KKyAgICAgICAgVGhpcyBwYXRjaCBm
aXhlcyB0aGF0IGJ1ZyBieSBhbHNvIGRvaW5nIGFuIGlkZW50aWZpZXIgY29tcGFyaXNvbiBjaGVj
ay4gVHdvIEdldEJ5SWRWYXJpYW50cworICAgICAgICB3aXRoIGRpZmZlcmVudCBpZGVudGlmaWVy
cyBkbyBub3Qgb3ZlcmxhcC4KKyAgICAgICAgCisgICAgICAgIFdlIGFsc28gdXNlZCB0byBzYXkg
YSBHZXRCeVN0YXR1cyAiZ29lcyB0byB0aGUgc2xvdyBwYXRoIiBpZiBhbnkgb2YgdGhlIGNhc2Vz
IHdlcmUgYW4KKyAgICAgICAgYXJyYXktbGlrZSBsb2FkLiBJIHdyb3RlIHRoYXQgY29kZSB0aGlu
a2luZyB0aGF0IEFycmF5UHJvZmlsZSB3b3VsZCBqdXN0IGhhbmRsZSBpdC4KKyAgICAgICAgSG93
ZXZlciwgc29tZXRpbWVzIHdlIGhhdmUgYSBnZXQgYnkgdmFsIElDIHRoYXQgYm90aCBoYXMgc3Ry
aW5nIHByb3BlcnRpZXMgYW5kIGludDMyIHByb3BlcnRpZXMuCisgICAgICAgIEluIHRoZXNlIGtp
bmRzIG9mIHNjZW5hcmlvcywgYW4gSUMgaXMgc3VwZXIgcHJvZml0YWJsZS4gVGhpcyBwYXRjaCBu
b3cgZGlzdGluZ3Vpc2hlcworICAgICAgICBiZXR3ZWVuIGEgR2V0QnlTdGF0dXMgc2F5aW5nICJ3
ZSdyZSBhIHNsb3cgcGF0aCIgYW5kIGlmIHdlIGFjdHVhbGx5IG9ic2VydmVkIHRoZSBTdHJ1Y3R1
cmVTdHViSW5mbworICAgICAgICBnbyB0byB0aGUgc2xvdyBwYXRoLiBJbiB0aGUgREZHL0ZUTCwg
d2Ugb25seSBmb3JnbyBlbWl0dGluZyBhIGdldCBieSB2YWwgSUMgd2hlbiBvYnNlcnZpbmcgYQor
ICAgICAgICBwcmlvciBTdHJ1Y3R1cmVTdHViSW5mbyB0aGF0IHdlbnQgdG8gdGhlIHNsb3cgcGF0
aC4KKyAgICAgICAgCisgICAgICAgIEkgYWxzbyByZWFsaXplZCBhcmUgY2FsbCB0byBTdHJ1Y3R1
cmVTdHViSW5mbzo6Y29uc2lkZXJDYWNoaW5nIHdhcyB3cm9uZyBmb3IgZ2V0IGJ5IHZhbCBJQ3Mu
CisgICAgICAgIFdlIHdlcmUgb25seSBjb25zaWRlcmluZyB0aGUgU3RydWN0dXJlIGluIGlzb2xh
dGlvbiwgbm90IHRoZSB7IFN0cnVjdHVyZSwgSWRlbnRpZmllciB9CisgICAgICAgIHBhaXIuIEZv
ciBnZXQgYnkgdmFsLCB3ZSBuZWVkIHRvICBjb25zaWRlciB0aGUgcGFpciB0b2dldGhlciwgc2lu
Y2Uge3MxLCAiYSJ9CisgICAgICAgIGFuZCB7czEsICJiIn0gd2lsbCBiZSB0d28gZGlmZmVyZW50
IGFjY2VzcyBjYXNlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggZGVtb25zdHJhdGVz
IHRoYXQgb24gdGhlc2UgbWljcm9iZW5jaG1hcmtzLCBnZXQgYnkgdmFsIElDcyBjYW4KKyAgICAg
ICAgYmUgYmV0d2VlbiA1MC0yMDAlIGZhc3Rlci4KKworICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRl
eHQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50Lmg6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjpvdmVybGFwcyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0
QnlTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6R2V0QnlTdGF0dXMpOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2spOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6bWFrZXNDYWxscyBjb25z
dCk6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpzbG93VmVyc2lvbiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkdldEJ5U3RhdHVzOjptZXJnZSk6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVz
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeVN0YXR1cy5oOgorICAgICAg
ICAoSlNDOjpHZXRCeVN0YXR1czo6R2V0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpHZXRCeVN0
YXR1czo6dGFrZXNTbG93UGF0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpv
YnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGggY29uc3QpOgorICAgICAgICAqIGJ5dGVj
b2RlL0lDU3RhdHVzVXRpbHMuaDoKKyAgICAgICAgKEpTQzo6YXBwZW5kSUNTdGF0dXNWYXJpYW50
KToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6Oklu
QnlJZFZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mVmFy
aWFudC5oOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mVmFyaWFudDo6b3ZlcmxhcHMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRW
YXJpYW50OjpvdmVybGFwcyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNl
cyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmNvbnNpZGVyQ2FjaGluZyk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorCiAyMDE5LTEx
LTIxICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiByZW1vdmluZyB0aGUgYmxhY2tib3ggZm9yIGEgc3BlY2lmaWMgc2NyaXB0IGRvZXNu
J3QgYWN0dWFsbHkgcmVtb3ZlIHRoZSBibGFja2JveApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNTI3NTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODEsMTMgKzE4MSwxMyBAQCB2b2lkIEdldEJ5SWRWYXJpYW50Ojpk
dW1wKFByaW50U3RyZWFtJiBvCiAKIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQo
UHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CisgICAgb3V0
LnByaW50KCI8Iik7CisgICAgb3V0LnByaW50KCJpZD0nIiwgbV9pZGVudGlmaWVyID8gKm1faWRl
bnRpZmllciA6IElkZW50aWZpZXIoKSwgIicsICIpOwogICAgIGlmICghaXNTZXQoKSkgewotICAg
ICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAgICAgICAgb3V0LnByaW50KCJlbXB0eT4iKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBvdXQucHJpbnQoCi0gICAgICAgICI8
IiwgaW5Db250ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1f
Y29uZGl0aW9uU2V0LCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KGluQ29udGV4dChzdHJ1Y3R1
cmVTZXQoKSwgY29udGV4dCksICIsICIsIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4
dCkpOwogICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1f
Y2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExp
bmtTdGF0dXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Mywx
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENv
bnRleHQqKSBjb25zdDsKIAogICAgIEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IEdldEJ5
SWRWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAhPSAh
IW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyLT5pbXBsKCkg
IT0gb3RoZXIubV9pZGVudGlmaWVyLT5pbXBsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhv
dGhlci5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgR2V0QnlTdGF0dXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcg
KzUyLDcgQEAgYm9vbCBHZXRCeVN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBHZQogICAgIHJl
dHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7CiB9CiAKLUdl
dEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorR2V0QnlTdGF0dXMgR2V0QnlT
dGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycykK
IHsKICAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOwogICAgIApAQCAtOTEsNiArOTEs
OCBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEluCiAgICAgfQogICAg
IH0KIAorICAgIEFTU0VSVF9VTlVTRUQodHJhY2tJZGVudGlmaWVycywgdHJhY2tJZGVudGlmaWVy
cyA9PSBUcmFja0lkZW50aWZpZXJzOjpObyk7IC8vIFdlIGNvdWxkIG1ha2UgdGhpcyB3b3JrIGlu
IHRoZSBmdXR1cmUsIGJ1dCBub2JvZHkgbmVlZHMgaXQgcmlnaHQgbm93LgorCiAgICAgaWYgKCFz
dHJ1Y3R1cmVJRCkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24sIGZh
bHNlKTsKIApAQCAtMTExLDcgKzExMyw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21w
dXRlRnJvbUxMSW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1HZXRCeVN0YXR1cyBHZXRCeVN0
YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBt
YXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQorR2V0QnlTdGF0dXMgR2V0
QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01h
cCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlm
aWVycyB0cmFja0lkZW50aWZpZXJzKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
cHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIApAQCAtMTE5LDcgKzEyMSw3IEBAIEdldEJ5U3RhdHVz
IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGUKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAg
ICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUlu
ZGV4KSkuc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICBsb2NrZXIsIHByb2Zp
bGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm8sIGNh
bGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMpOwogICAgIAogICAgIGlmIChkaWRFeGl0
KQogICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7CkBAIC0xMzAsMTIgKzEzMiwz
MyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlCiAjZW5kaWYKIAog
ICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxl
ZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQo
cHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdHJhY2tJZGVudGlmaWVycyk7CiAgICAgCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmIEVOQUJMRShKSVQpCitHZXRCeVN0YXR1czo6R2V0
QnlTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKKyAgICA6IG1fd2FzU2VlbkluSklUKHRydWUpCit7CisgICAgc3dpdGNoIChzdW1tYXJ5
KSB7CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246CisgICAgICAgIG1f
c3RhdGUgPSBOb0luZm9ybWF0aW9uOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdHViSW5m
b1N1bW1hcnk6OlNpbXBsZToKKyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICBtX3N0YXRl
ID0gc3R1YkluZm8udG9va1Nsb3dQYXRoID8gT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIDogTGlrZWx5
VGFrZXNTbG93UGF0aDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5
OjpUYWtlc1Nsb3dQYXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgbV9zdGF0ZSA9IHN0dWJJbmZv
LnRvb2tTbG93UGF0aCA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogTWFrZXNDYWxs
czsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCiBHZXRCeVN0YXR1czo6R2V0QnlTdGF0dXMoY29uc3QgTW9kdWxlTmFtZXNwYWNl
QWNjZXNzQ2FzZSYgYWNjZXNzQ2FzZSkKICAgICA6IG1fbW9kdWxlTmFtZXNwYWNlRGF0YShCb3g8
TW9kdWxlTmFtZXNwYWNlRGF0YT46OmNyZWF0ZShNb2R1bGVOYW1lc3BhY2VEYXRhIHsgYWNjZXNz
Q2FzZS5tb2R1bGVOYW1lc3BhY2VPYmplY3QoKSwgYWNjZXNzQ2FzZS5tb2R1bGVFbnZpcm9ubWVu
dCgpLCBhY2Nlc3NDYXNlLnNjb3BlT2Zmc2V0KCksIGFjY2Vzc0Nhc2UuaWRlbnRpZmllcigpIH0p
KQogICAgICwgbV9zdGF0ZShNb2R1bGVOYW1lc3BhY2UpCkBAIC0xNDQsMTEgKzE2NywxMSBAQCBH
ZXRCeVN0YXR1czo6R2V0QnlTdGF0dXMoY29uc3QgTW9kdWxlTmFtCiB9CiAKIEdldEJ5U3RhdHVz
IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygK
LSAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENhbGxMaW5rU3RhdHVzOjpFeGl0
U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKKyAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSwgVHJh
Y2tJZGVudGlmaWVycyB0cmFja0lkZW50aWZpZXJzKQogewogICAgIFN0dWJJbmZvU3VtbWFyeSBz
dW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkoc3R1YkluZm8pOwogICAgIGlmICgh
aXNJbmxpbmVhYmxlKHN1bW1hcnkpKQotICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoc3VtbWFy
eSk7CisgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhzdW1tYXJ5LCAqc3R1YkluZm8pOwogICAg
IAogICAgIC8vIEZpbmFsbHkgZmlndXJlIG91dCBpZiB3ZSBjYW4gZGVyaXZlIGFuIGFjY2VzcyBz
dHJhdGVneS4KICAgICBHZXRCeVN0YXR1cyByZXN1bHQ7CkBAIC0xNjEsMTcgKzE4NCwxOSBAQCBH
ZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgY2FzZSBDYWNoZVR5
cGU6OkdldEJ5SWRTZWxmOiB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1Yklu
Zm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKICAgICAgICAgaWYgKHN0
cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAg
ICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1
YkluZm8pOwogICAgICAgICBCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllciA9IHN0dWJJbmZvLT5n
ZXRCeUlkU2VsZklkZW50aWZpZXIoKTsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9
IGlkZW50aWZpZXItPmltcGwoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKKyAgICAg
ICAgaWYgKHRyYWNrSWRlbnRpZmllcnMgPT0gVHJhY2tJZGVudGlmaWVyczo6Tm8pCisgICAgICAg
ICAgICBpZGVudGlmaWVyID0gbnVsbHB0cjsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFu
dChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAg
ICAgICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwg
YXR0cmlidXRlcyk7CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldCh2YXJpYW50Lm1fb2Zmc2V0
KSkKLSAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKKyAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gR2V0QnlT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICByZXR1cm4gR2V0
QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICAgICAg
CiAgICAgICAgIHZhcmlhbnQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAg
IGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CkBAIC0xOTQs
MTYgKzIxOSwxNiBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAg
ICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6
ZSgpOyArK2xpc3RJbmRleCkgewogICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNz
ID0gbGlzdC0+YXQobGlzdEluZGV4KTsKICAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHko
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAKICAgICAgICAgICAgIGlmIChhY2Nlc3MudXNl
c1BvbHlQcm90bygpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMo
SlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKIAogICAgICAgICAgICAgaWYg
KCFhY2Nlc3MucmVxdWlyZXNJZGVudGlmaWVyTmFtZU1hdGNoKCkpIHsKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2UgY291bGQgdXNlIHRoaXMgZm9yIGluZGV4ZWQgbG9hZHMgaW4gdGhlIGZ1
dHVyZS4gVGhpcyBpcyBwcmV0dHkgc29saWQgcHJvZmlsaW5nCiAgICAgICAgICAgICAgICAgLy8g
aW5mb3JtYXRpb24sIGFuZCBwcm9iYWJseSBiZXR0ZXIgdGhhbiBBcnJheVByb2ZpbGUgd2hlbiBp
dCdzIGF2YWlsYWJsZS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MjE1Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIHJldHVybiBH
ZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKQEAgLTIxNCw3ICsyMzksNyBAQCBHZXRCeVN0YXR1cyBHZXRC
eVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgICAgICAgICAgLy8gc2hvdWxkbid0IGhh
dmUgdG8gdXNlIHZhbHVlIHByb2ZpbGluZyB0byBkaXNjb3ZlciBzb21ldGhpbmcgdGhhdCB0aGUg
QWNjZXNzQ2FzZQogICAgICAgICAgICAgICAgIC8vIGNvdWxkIGhhdmUgdG9sZCB1cy4gQnV0LCBp
dCB3b3JrcyB3ZWxsIGVub3VnaC4gU28sIG91ciBvbmx5IGNvbmNlcm4gaGVyZSBpcyB0byBub3QK
ICAgICAgICAgICAgICAgICAvLyBjcmFzaCBvbiBudWxsIHN0cnVjdHVyZS4KLSAgICAgICAgICAg
ICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSks
ICpzdHViSW5mbyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENv
bXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1
dGVGb3IoCkBAIC0yMjUsNyArMjUwLDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1
dGVGb3JTdHViSQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBD
b21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1czsKQEAgLTI1NSw3ICsyODAsNyBA
QCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgICAgICAg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlcjogewogICAgICAgICAgICAg
ICAgICAgICBjdXN0b21BY2Nlc3NvckdldHRlciA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlPigpLmN1c3RvbUFjY2Vzc29yKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghYWNj
ZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuZG9tQXR0cmlidXRlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICAgICAgICAgICAgICAgICAgZG9t
QXR0cmlidXRlID0gV1RGOjptYWtlVW5pcXVlPERPTUF0dHJpYnV0ZUFubm90YXRpb24+KCphY2Nl
c3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5kb21BdHRyaWJ1dGUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGhhdmVET01BdHRyaWJ1dGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubV9zdGF0ZSA9IEN1c3RvbTsKQEAgLTI2NCwyOCArMjg5LDI4IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgICAgICAgICBkZWZhdWx0
OiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0b3RhbGx5IHN3
ZWV0IHRvIHN1cHBvcnQgbW9yZSBvZiB0aGVzZSBhdCBzb21lIHBvaW50IGluIHRoZQogICAgICAg
ICAgICAgICAgICAgICAvLyBmdXR1cmUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzMwNTIKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpT
Qzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0
QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICAgICAg
ICAgICAgICB9IH0KIAogICAgICAgICAgICAgICAgIEFTU0VSVCgoQWNjZXNzQ2FzZTo6TWlzcyA9
PSBhY2Nlc3MudHlwZSgpKSA9PSAoYWNjZXNzLm9mZnNldCgpID09IGludmFsaWRPZmZzZXQpKTsK
ICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50KAotICAgICAgICAgICAgICAg
ICAgICBhY2Nlc3MuaWRlbnRpZmllcigpLCBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxl
eEdldFN0YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgdHJhY2tJZGVudGlmaWVy
cyA9PSBUcmFja0lkZW50aWZpZXJzOjpZZXMgPyBhY2Nlc3MuaWRlbnRpZmllcigpIDogQm94PElk
ZW50aWZpZXI+KG51bGxwdHIpLCBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5jb25k
aXRpb25TZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cyksCiAgICAgICAgICAgICAgICAgICAg
IGludHJpbnNpY0Z1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICBjdXN0b21BY2Nlc3Nvckdl
dHRlciwKICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShkb21BdHRyaWJ1dGUpKTsKIAogICAg
ICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAKICAgICAgICAgICAgICAgICBpZiAoaGF2ZURPTUF0
dHJpYnV0ZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHVwIHdoZW4gY3VzdG9tIGFj
Y2Vzc2VzIGFyZSBub3QgbWVyZ2VkIGludG8gb25lLgogICAgICAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0Lm51bVZhcmlhbnRzKCkgIT0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAq
c3R1YkluZm8pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIEdpdmUgdXAgd2hlbiBjdXN0b20gYWNjZXNzIGFuZCBzaW1wbGUgYWNjZXNzIGFyZSBtaXhl
ZC4KICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tX3N0YXRlID09IEN1c3RvbSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhK
U0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gfQpAQCAtMjk1LDcgKzMyMCw3
IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICB9CiAgICAg
ICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMDQsNyArMzI5LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSQogCiBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGlu
ZU1hcCwKLSAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayYgaWNDb250ZXh0U3RhY2ssIENvZGVPcmln
aW4gY29kZU9yaWdpbikKKyAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayYgaWNDb250ZXh0U3RhY2ss
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVHJhY2tJZGVudGlmaWVycyB0cmFja0lkZW50aWZpZXJz
KQogewogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOwogICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRl
RGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKHByb2ZpbGVkQmxvY2ss
IGJ5dGVjb2RlSW5kZXgpOwpAQCAtMzE5LDcgKzM0NCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIC8vIGlubGluZWQgYW5kIG5vdC1pbmxp
bmVkLgogICAgICAgICAgICAgICAgIEdldEJ5U3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0
ZUZvcigKICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAsIGJ5
dGVjb2RlSW5kZXgsIGRpZEV4aXQsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURh
dGEpOworICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhLCB0cmFja0lkZW50aWZp
ZXJzKTsKICAgICAgICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsKICAgICAgICAgICAgIH0KQEAgLTMz
Myw3ICszNTgsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRl
eHQtPm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICByZXN1bHQg
PSBjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygKLSAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHVi
SW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29u
dGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURh
dGEsIHRyYWNrSWRlbnRpZmllcnMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJl
c3VsdC5pc1NldCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOwpAQCAt
MzQzLDcgKzM2OCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAg
ICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMuZ2V0U3RhdHVzKTsKICAgICB9CiAgICAgCi0g
ICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2Rl
SW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOworICAgIHJldHVybiBjb21wdXRlRm9y
KHByb2ZpbGVkQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LCBjYWxs
RXhpdFNpdGVEYXRhLCB0cmFja0lkZW50aWZpZXJzKTsKIH0KIAogR2V0QnlTdGF0dXMgR2V0QnlT
dGF0dXM6OmNvbXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCkBAIC0zNTksNyArMzg0LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNv
bXB1dGVGb3IoY29ucwogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoKTsKIAogICAgIGlmIChw
YXJzZUluZGV4KCp1aWQpKQotICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CisgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKICAg
ICAKICAgICBHZXRCeVN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7
CkBAIC0zNjcsMjIgKzM5MiwyMiBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZv
cihjb25zCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCi0gICAgICAgICAgICBy
ZXR1cm4gR2V0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICByZXR1cm4gR2V0
QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIEdldEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgcmV0dXJuIEdldEJ5
U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoVGFrZXNTbG93UGF0
aCk7IC8vIEl0J3MgcHJvYmFibHkgYSBwcm90b3R5cGUgbG9va3VwLiBHaXZlIHVwIG9uIGxpZmUg
Zm9yIG5vdywgZXZlbiB0aG91Z2ggd2UgY291bGQgdG90YWxseSBiZSB3YXkgc21hcnRlciBhYm91
dCBpdC4KKyAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRo
KTsgLy8gSXQncyBwcm9iYWJseSBhIHByb3RvdHlwZSBsb29rdXAuIEdpdmUgdXAgb24gbGlmZSBm
b3Igbm93LCBldmVuIHRob3VnaCB3ZSBjb3VsZCB0b3RhbGx5IGJlIHdheSBzbWFydGVyIGFib3V0
IGl0LgogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
cikKICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsgLy8gV2UgY291
bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0cmVuZ3RoLXJlZHVjaW5nIHRoaXMgdG8gYSBDYWxs
LgogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nl
c3Nvck9yVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CisgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7
CiAgICAgICAgIAogICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KEdldEJ5SWRWYXJp
YW50KG51bGxwdHIsIHN0cnVjdHVyZSwgb2Zmc2V0KSkpCi0gICAgICAgICAgICByZXR1cm4gR2V0
QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMo
TGlrZWx5VGFrZXNTbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiByZXN1bHQ7CkBA
IC0zOTMsNyArNDE4LDggQEAgYm9vbCBHZXRCeVN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgIGNh
c2UgVGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIExpa2VseVRha2VzU2xvd1BhdGg6CisgICAgY2Fz
ZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CiAgICAgY2FzZSBDdXN0b206CiAgICAgY2FzZSBNb2R1
bGVOYW1lc3BhY2U6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQwNCw2ICs0MzAsNyBAQCBi
b29sIEdldEJ5U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgIGNhc2UgT2JzZXJ2ZWRTbG93
UGF0aEFuZE1ha2VzQ2FsbHM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDEzLDcgKzQ0MCw5IEBAIGJvb2wgR2V0QnlT
dGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAogCiBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6c2xv
d1ZlcnNpb24oKSBjb25zdAogewotICAgIHJldHVybiBHZXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkg
PyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCwgd2FzU2VlbkluSklUKCkpOworICAgIGlmIChv
YnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgoKSkKKyAgICAgICAgcmV0dXJuIEdldEJ5
U3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogT2Jz
ZXJ2ZWRUYWtlc1Nsb3dQYXRoLCB3YXNTZWVuSW5KSVQoKSk7CisgICAgcmV0dXJuIEdldEJ5U3Rh
dHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBMaWtlbHlUYWtlc1Nsb3dQYXRoLCB3YXNT
ZWVuSW5KSVQoKSk7CiB9CiAKIHZvaWQgR2V0QnlTdGF0dXM6Om1lcmdlKGNvbnN0IEdldEJ5U3Rh
dHVzJiBvdGhlcikKQEAgLTQyMiw3ICs0NTEsMTAgQEAgdm9pZCBHZXRCeVN0YXR1czo6bWVyZ2Uo
Y29uc3QgR2V0QnlTdGF0dQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYXV0byBtZXJnZVNs
b3cgPSBbJl0gKCkgewotICAgICAgICAqdGhpcyA9IEdldEJ5U3RhdHVzKChtYWtlc0NhbGxzKCkg
fHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAgICAgaWYgKG9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpIHx8IG90aGVyLm9i
c2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpKQorICAgICAgICAgICAgKnRoaXMgPSBH
ZXRCeVN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBPYnNlcnZl
ZFNsb3dQYXRoQW5kTWFrZXNDYWxscyA6IE9ic2VydmVkVGFrZXNTbG93UGF0aCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICp0aGlzID0gR2V0QnlTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBv
dGhlci5tYWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IExpa2VseVRha2VzU2xvd1BhdGgpOwog
ICAgIH07CiAgICAgCiAgICAgc3dpdGNoIChtX3N0YXRlKSB7CkBAIC00NTYsOCArNDg4LDEwIEBA
IHZvaWQgR2V0QnlTdGF0dXM6Om1lcmdlKGNvbnN0IEdldEJ5U3RhdHUKICAgICAgICAgCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2Ug
TGlrZWx5VGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKICAg
ICBjYXNlIE1ha2VzQ2FsbHM6CisgICAgY2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxs
czoKICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwogICAgIH0KICAgICAKQEAgLTUzNywxMiAr
NTcxLDE4IEBAIHZvaWQgR2V0QnlTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICBj
YXNlIE1vZHVsZU5hbWVzcGFjZToKICAgICAgICAgb3V0LnByaW50KCJNb2R1bGVOYW1lc3BhY2Ui
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgotICAgICAgICBvdXQu
cHJpbnQoIlRha2VzU2xvd1BhdGgiKTsKKyAgICBjYXNlIExpa2VseVRha2VzU2xvd1BhdGg6Cisg
ICAgICAgIG91dC5wcmludCgiTGlrZWx5VGFrZXNTbG93UGF0aCIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCJPYnNl
cnZlZFRha2VzU2xvd1BhdGgiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNYWtlc0NhbGxz
OgogICAgICAgICBvdXQucHJpbnQoIk1ha2VzQ2FsbHMiKTsKICAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgb3V0LnByaW50KCJP
YnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyIpOworICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgb3V0LnByaW50KCIsICIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiLCBzZWVuSW5KSVQgPSAi
LCBtX3dhc1NlZW5JbkpJVCwgIikiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNTI3NTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
MTAgKzU2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgQ3VzdG9tLAogICAgICAgICAvLyBJdCdzIGNh
Y2hlZCBmb3IgYW4gYWNjZXNzIHRvIGEgbW9kdWxlIG5hbWVzcGFjZSBvYmplY3QncyBiaW5kaW5n
LgogICAgICAgICBNb2R1bGVOYW1lc3BhY2UsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0
ZW4gdGFrZSBzbG93IHBhdGguCi0gICAgICAgIFRha2VzU2xvd1BhdGgsCi0gICAgICAgIC8vIEl0
J3Mga25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuCisgICAgICAgIC8vIEl0IHdp
bGwgbGlrZWx5IHRha2UgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgTGlrZWx5VGFrZXNTbG93UGF0
aCwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byB0YWtlIHNsb3cgcGF0aC4gV2UgYWxzbyBvYnNl
cnZlZCB0aGF0IHRoZSBzbG93IHBhdGggd2FzIHRha2VuIG9uIFN0cnVjdHVyZVN0dWJJbmZvLgor
ICAgICAgICBPYnNlcnZlZFRha2VzU2xvd1BhdGgsCisgICAgICAgIC8vIEl0IHdpbGwgbGlrZWx5
IHRha2UgdGhlIHNsb3cgcGF0aCBhbmQgd2lsbCBtYWtlIGNhbGxzLgogICAgICAgICBNYWtlc0Nh
bGxzLAorICAgICAgICAvLyBJdCBrbm93biB0byB0YWtlIHBhdGhzIHRoYXQgbWFrZSBjYWxscy4g
V2UgYWxzbyBvYnNlcnZlZCB0aGF0IHRoZSBzbG93IHBhdGggd2FzIHRha2VuIG9uIFN0cnVjdHVy
ZVN0dWJJbmZvLgorICAgICAgICBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyAsCisgICAg
fTsKKworICAgIGVudW0gY2xhc3MgVHJhY2tJZGVudGlmaWVycyA6IHVpbnQ4X3QgeworICAgICAg
ICBObywgIC8vIFVzZWQgZm9yIGdldF9ieV9pZAorICAgICAgICBZZXMsIC8vIFVzZWQgZm9yIGdl
dF9ieV92YWwKICAgICB9OwogCiAgICAgR2V0QnlTdGF0dXMoKQpAQCAtNzAsMjkgKzc5LDEwIEBA
IHB1YmxpYzoKICAgICBleHBsaWNpdCBHZXRCeVN0YXR1cyhTdGF0ZSBzdGF0ZSkKICAgICAgICAg
OiBtX3N0YXRlKHN0YXRlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlID09IE5vSW5mb3Jt
YXRpb24gfHwgc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBzdGF0ZSA9PSBNYWtlc0NhbGxzKTsK
KyAgICAgICAgQVNTRVJUKHN0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgc3RhdGUgPT0gTGlrZWx5
VGFrZXNTbG93UGF0aCB8fCBzdGF0ZSA9PSBPYnNlcnZlZFRha2VzU2xvd1BhdGggfHwgc3RhdGUg
PT0gTWFrZXNDYWxscyB8fCBzdGF0ZSA9PSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyk7
CiAgICAgfQogICAgIAotICAgIGV4cGxpY2l0IEdldEJ5U3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBz
dW1tYXJ5KQotICAgICAgICA6IG1fd2FzU2VlbkluSklUKHRydWUpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKHN1bW1hcnkpIHsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3Jt
YXRpb246Ci0gICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKLSAgICAgICAg
Y2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0
dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtl
c1Nsb3dQYXRoOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3Vt
bWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBtX3N0YXRlID0g
TWFrZXNDYWxsczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKyAgICBleHBsaWNpdCBHZXRCeVN0YXR1
cyhTdHViSW5mb1N1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgCiAgICAgR2V0QnlT
dGF0dXMoCiAgICAgICAgIFN0YXRlIHN0YXRlLCBib29sIHdhc1NlZW5JbkpJVCkKQEAgLTEwMSw3
ICs5MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBHZXRCeVN0
YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJh
c2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgZGZnQ29udGV4dFN0YWNrLCBDb2RlT3Jp
Z2luKTsKKyAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2Vs
aW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2sm
IGRmZ0NvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVHJhY2tJZGVudGlmaWVycyk7CiAgICAgc3Rh
dGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0
cmluZ0ltcGwqKTsKIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsg
fQpAQCAtMTE3LDE1ICsxMDcsMTQgQEAgcHVibGljOgogICAgIGNvbnN0IEdldEJ5SWRWYXJpYW50
JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CiAg
ICAgY29uc3QgR2V0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBhdChpbmRleCk7IH0KIAotICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMg
fHwgbV9zdGF0ZSA9PSBDdXN0b20gfHwgbV9zdGF0ZSA9PSBNb2R1bGVOYW1lc3BhY2U7IH0KKyAg
ICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IExpa2VseVRh
a2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBPYnNlcnZlZFRha2VzU2xvd1BhdGggfHwgbV9zdGF0
ZSA9PSBNYWtlc0NhbGxzIHx8IG1fc3RhdGUgPT0gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2Fs
bHMgfHwgbV9zdGF0ZSA9PSBDdXN0b20gfHwgbV9zdGF0ZSA9PSBNb2R1bGVOYW1lc3BhY2U7IH0K
KyAgICBib29sIG9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUgPT0gT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gT2JzZXJ2
ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM7IH0KICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsK
ICAgICAKICAgICBHZXRCeVN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0OwogICAgIAogICAgIGJv
b2wgd2FzU2VlbkluSklUKCkgY29uc3QgeyByZXR1cm4gbV93YXNTZWVuSW5KSVQ7IH0KICAgICAK
LSAgICB2b2lkIG1lcmdlKGNvbnN0IEdldEJ5U3RhdHVzJik7Ci0gICAgCiAgICAgLy8gQXR0ZW1w
dHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1
cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KICAgICB2b2lkIGZpbHRlcihjb25zdCBT
dHJ1Y3R1cmVTZXQmKTsKIApAQCAtMTQzLDEzICsxMzIsMTUgQEAgcHVibGljOgogICAgIEJveDxJ
ZGVudGlmaWVyPiBzaW5nbGVJZGVudGlmaWVyKCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgorICAg
IHZvaWQgbWVyZ2UoY29uc3QgR2V0QnlTdGF0dXMmKTsKKyAgICAKICNpZiBFTkFCTEUoSklUKQog
ICAgIEdldEJ5U3RhdHVzKGNvbnN0IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UmKTsKICAgICBz
dGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJh
Y2soCi0gICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRh
KTsKKyAgICAgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEs
IFRyYWNrSWRlbnRpZmllcnMpOwogI2VuZGlmCi0gICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1
dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7Ci0gICAgc3RhdGljIEdldEJ5
U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4
LCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisgICAgc3RhdGljIEdl
dEJ5U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCwgVHJh
Y2tJZGVudGlmaWVycyk7CisgICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJs
b2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0
dXM6OkV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlmaWVycyk7CiAKICAgICBzdHJ1Y3QgTW9kdWxl
TmFtZXNwYWNlRGF0YSB7CiAgICAgICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtX21vZHVs
ZU5hbWVzcGFjZU9iamVjdCB7IG51bGxwdHIgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAkocmV2aXNpb24gMjUyNzUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNyArNDMsNyBAQCBib29sIGFwcGVuZElDU3RhdHVzVmFyaWFudChWYXJpYW50VmVj
dG9yCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdmFyaWFudHMuc2l6ZSgp
OyArK2opIHsKICAgICAgICAgICAgICAgICBpZiAoaSA9PSBqKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFudHNbal0uc3RydWN0dXJlU2V0
KCkub3ZlcmxhcHMobWVyZ2VkVmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpCisgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhbnRzW2pdLm92ZXJsYXBzKG1lcmdlZFZhcmlhbnQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQoVmFyaWFu
dFZlY3RvcgogICAgIC8vIG92ZXJsYXAgYnV0IGl0J3MgcG9zc2libGUgdGhhdCBhbiBpbmxpbmUg
Y2FjaGUgZ290IGludG8gYSB3ZWlyZCBzdGF0ZS4gV2UgYXJlCiAgICAgLy8gZGVmZW5zaXZlIGFu
ZCBiYWlsIGlmIHdlIGRldGVjdCBjcmF6eS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHZhcmlhbnRzW2ldLnN0cnVjdHVy
ZVNldCgpLm92ZXJsYXBzKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpKQorICAgICAgICBpZiAodmFy
aWFudHNbaV0ub3ZlcmxhcHModmFyaWFudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFZh
cmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5C
eUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNTI3NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAorICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOworICAg
IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5CeUlkU3RhdHVzOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlhbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlZhcmlhbnQu
aAkocmV2aXNpb24gMjUyNzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
c3RhbmNlT2ZWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDExIEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworCisgICAgYm9v
bCBvdmVybGFwcyhjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgb3RoZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOwor
ICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc3RhbmNlT2ZTdGF0dXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMjUyNzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAKKyAgICBib29sIG92
ZXJsYXBzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2Uo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2UpOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZp
c2lvbiAyNTI3NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsOSArMjgzLDEwIEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KIHsKICAgICBWTSYgdm0gPSBjb2RlQmxv
Y2stPnZtKCk7CiAgICAgCi0gICAgYnVmZmVyZWRTdHJ1Y3R1cmVzLmdlbmVyaWNGaWx0ZXIoCi0g
ICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIC0+IGJvb2wgewotICAgICAgICAgICAg
cmV0dXJuIHZtLmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKTsKKyAgICBidWZmZXJlZFN0cnVjdHVy
ZXMucmVtb3ZlSWYoCisgICAgICAgIFsmXSAoYXV0byYgcGFpcikgLT4gYm9vbCB7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICByZXR1
cm4gIXZtLmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKTsKICAgICAgICAgfSk7CiAKICAgICBzd2l0
Y2ggKG1fY2FjaGVUeXBlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjUyNzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlm
IGl0IGhhcyBtYXJrZWQgZXZlcnl0aGluZyB0aGF0IGl0IHdpbGwgZXZlciBtYXJrLgogICAgIGJv
b2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKICAgICAgICAgCi0gICAgQUxX
QVlTX0lOTElORSBib29sIGNvbnNpZGVyQ2FjaGluZyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgY29uc2lk
ZXJDYWNoaW5nKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCA9IG51bGxwdHIpCiAgICAgewogICAgICAgICBE
aXNhbGxvd0dDIGRpc2FsbG93R0M7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAvLyBOT1RFOiBUaGlzIHdpbGwgYmVoYXZlIG9kZGx5IGZvciBJbnN0YW5jZU9mIGlm
IHRoZSB1c2VyIHZhcmllcyB0aGUgcHJvdG90eXBlIGJ1dCBub3QKICAgICAgICAgICAgIC8vIHRo
ZSBiYXNlJ3Mgc3RydWN0dXJlLiBUaGF0IHNlZW1zIHVubGlrZWx5IGZvciB0aGUgY2Fub25pY2Fs
IHVzZSBvZiBpbnN0YW5jZW9mLCB3aGVyZQogICAgICAgICAgICAgLy8gdGhlIHByb3RvdHlwZSBp
cyBmaXhlZC4KLSAgICAgICAgICAgIGJvb2wgaXNOZXdseUFkZGVkID0gYnVmZmVyZWRTdHJ1Y3R1
cmVzLmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgYm9vbCBpc05ld2x5QWRkZWQgPSBidWZm
ZXJlZFN0cnVjdHVyZXMuYWRkKHsgc3RydWN0dXJlLCBpbXBsIH0pLmlzTmV3RW50cnk7CiAgICAg
ICAgICAgICBpZiAoaXNOZXdseUFkZGVkKQogICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jayk7CiAgICAgICAgICAgICByZXR1cm4gaXNOZXdseUFkZGVkOwpAQCAt
MTg4LDExICsxODgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9nZXRCeUlkU2VsZklk
ZW50aWZpZXI7CiAgICAgfQogICAgIAorcHJpdmF0ZToKICAgICAvLyBSZXByZXNlbnRzIHRob3Nl
IHN0cnVjdHVyZXMgdGhhdCBhbHJlYWR5IGhhdmUgYnVmZmVyZWQgQWNjZXNzQ2FzZXMgaW4gdGhl
IFBvbHltb3JwaGljQWNjZXNzLgogICAgIC8vIE5vdGUgdGhhdCBpdCdzIGFsd2F5cyBzYWZlIHRv
IGNsZWFyIHRoaXMuIElmIHdlIGNsZWFyIGl0IHByZW1hdHVyZWx5LCB0aGVuIGlmIHdlIHNlZSB0
aGUgc2FtZQogICAgIC8vIHN0cnVjdHVyZSBhZ2FpbiBkdXJpbmcgdGhpcyBidWZmZXJpbmcgY291
bnRkb3duLCB3ZSB3aWxsIGNyZWF0ZSBhbiBBY2Nlc3NDYXNlIG9iamVjdCBmb3IgaXQuCiAgICAg
Ly8gVGhhdCdzIG5vdCBzbyBiYWQgLSB3ZSdsbCBnZXQgcmlkIG9mIHRoZSByZWR1bmRhbnQgb25l
cyBvbmNlIHdlIHJlZ2VuZXJhdGUuCi0gICAgU3RydWN0dXJlU2V0IGJ1ZmZlcmVkU3RydWN0dXJl
czsKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxTdHJ1Y3R1cmUqLCBSZWZQdHI8VW5pcXVlZFN0cmlu
Z0ltcGw+Pj4gYnVmZmVyZWRTdHJ1Y3R1cmVzOworcHVibGljOgogICAgIAogICAgIHN0cnVjdCB7
CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsg
Ly8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNh
Y2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicg
Y2FjaGVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDI1Mjc1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzEzLDcgKzQ3MTMs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUdldEJ5SWQoY29uc3QgCiAgICAgR2V0QnlT
dGF0dXMgZ2V0QnlTdGF0dXMgPSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLAotICAgICAgICBjdXJyZW50Q29kZU9y
aWdpbigpKTsKKyAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0dXM6OlRyYWNr
SWRlbnRpZmllcnM6Ok5vKTsKIAogICAgIEFjY2Vzc1R5cGUgdHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5SWQ7CiAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCk7CkBAIC01NjIyLDcgKzU2MjIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFz
ZSk7CiAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5
KTsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29tcGlsZUFzR2V0QnlJZCA9IGZhbHNlOwotICAg
ICAgICAgICAgR2V0QnlTdGF0dXMgZ2V0QnlTdGF0dXMgPSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZv
cihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1f
YmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOworICAg
ICAgICAgICAgR2V0QnlTdGF0dXMgZ2V0QnlTdGF0dXMgPSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZv
cihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1f
YmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksIEdldEJ5
U3RhdHVzOjpUcmFja0lkZW50aWZpZXJzOjpZZXMpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciA9IDA7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklU
LCBieVZhbEluZm8gYmVjb21lcyBudWxsLgpAQCAtNTY1NSw3ICs1NjU1LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIE5vZGUqIGdl
dEJ5VmFsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEdldEJ5VmFsLCBPcEluZm8oYXJyYXlN
b2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgICAgICBtX2V4
aXRPSyA9IGZhbHNlOyAvLyBHZXRCeVZhbCBtdXN0IGJlIHRyZWF0ZWQgYXMgaWYgaXQgY2xvYmJl
cnMgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFrZSBpdCBnZW5lcmljLgogICAg
ICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgZ2V0QnlWYWwpOwotICAgICAgICAgICAg
ICAgIGlmIChnZXRCeVN0YXR1cy50YWtlc1Nsb3dQYXRoKCkpCisgICAgICAgICAgICAgICAgaWYg
KGdldEJ5U3RhdHVzLm9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpKQogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmFkZChnZXRCeVZhbCk7CiAgICAg
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMjUyNzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyOCw3ICsyMDI4LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gSlNW
YWx1ZSB7CiAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgcHJvcGVydHlOYW1lLCBi
YXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7IAogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBjb2RlQmxvY2ssIGJh
c2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkpCisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZv
LT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVs
bCgpLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKSkKICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaEdl
dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xv
dCwgKnN0dWJJbmZvLCBHZXRCeUtpbmQ6Ok5vcm1hbEJ5VmFsKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZm91bmQgPyBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSA6
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9KSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>