<?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>72221</bug_id>
          
          <creation_ts>2011-11-12 16:08:24 -0800</creation_ts>
          <short_desc>Standardized the JS calling convention</short_desc>
          <delta_ts>2011-11-14 11:21:45 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>501479</commentid>
    <comment_count>0</comment_count>
      <attachid>114847</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-12 16:08:24 -0800</bug_when>
    <thetext>Created attachment 114847
patch

Standardized the JS calling convention</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501487</commentid>
    <comment_count>1</comment_count>
      <attachid>114847</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-11-12 18:42:35 -0800</bug_when>
    <thetext>Comment on attachment 114847
patch

Just a note mid-review -- this patch could be smaller if you switched from bool to CallType in a separate patch, as that change introduces quite a bit of noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502122</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-14 11:21:45 -0800</bug_when>
    <thetext>Committed r100165: &lt;http://trac.webkit.org/changeset/100165&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114847</attachid>
            <date>2011-11-12 16:08:24 -0800</date>
            <delta_ts>2011-11-13 12:52:14 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>154530</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwMDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyOSBA
QAorMjAxMS0xMS0xMiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFN0YW5kYXJkaXplZCB0aGUgSlMgY2FsbGluZyBjb252ZW50aW9uCisgICAgICAgIAorICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHN0
YW5kYXJkaXplcyB0aGUgY2FsbGluZyBjb252ZW50aW9uIHNvIHRoYXQgdGhlIGNhbGxlciBhbHdh
eXMKKyAgICAgICAgc2V0cyB1cCB0aGUgY2FsbGVlJ3MgQ2FsbEZyYW1lLiBBZGp1c3RtZW50cyBm
b3IgY2FsbCB0eXBlLCBjYWxsZWUgdHlwZSwKKyAgICAgICAgYXJndW1lbnQgY291bnQsIGV0Yy4g
bm93IGFsd2F5cyB0YWtlIHBsYWNlIGFmdGVyIHRoYXQgaW5pdGlhbCBzZXR1cC4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgaXMgYSBzdGVwIHRvd2FyZCByZXZlcnNpbmcgdGhlIGFyZ3VtZW50IG9y
ZGVyLCBidXQgYWxzbyBoYXMgdGhlc2UKKyAgICAgICAgaW1tZWRpYXRlIGJlbmVmaXRzIChtZWFz
dXJlZCBvbiB4NjQpOgorICAgICAgICAKKyAgICAgICAgKDEpIDElIGJlbmNobWFyayBzcGVlZHVw
IGFjcm9zcyB0aGUgYm9hcmQuCisgICAgICAgIAorICAgICAgICAoMikgNTAlIGNvZGUgc2l6ZSBy
ZWR1Y3Rpb24gaW4gYmFzZWxpbmUgSklUIGZ1bmN0aW9uIGNhbGxzLgorICAgICAgICAKKyAgICAg
ICAgKDMpIDEuNXggc3BlZWR1cCBmb3Igc2luZ2xlLWRpc3BhdGNoIC5hcHBseSBmb3J3YXJkaW5n
LgorICAgICAgICAKKyAgICAgICAgKDQpIDEuMXggc3BlZWR1cCBmb3IgbXVsdGktZGlzcGF0Y2gg
LmFwcGx5IGZvcndhcmRpbmcuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWZmZWN0ZWQgdGhlIGJh
c2VsaW5lIEpJVCBtb3N0LCBzaW5jZSB0aGUgYmFzZWxpbmUgSklUIGhhZAorICAgICAgICBsb3Rz
IG9mIGFkIGhvYyBjYWxsaW5nIGNvbnZlbnRpb25zIGZvciBkaWZmZXJlbnQgY2FsbGVyIC8gY2Fs
bGVlIHR5cGVzLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2hQdHIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNoQWRkUHRyKTogT3B0aW1pemUgY29t
cGFyZSB0byAwIGludG8KKyAgICAgICAgYSB0ZXN0LCBsaWtlIG90aGVyIGFzc2VtYmxlcnMgZG8u
IChJIGFkZGVkIHNvbWUgY29tcGFyZXMgdG8gMCwgYW5kIGRpZG4ndAorICAgICAgICB3YW50IHRo
ZW0gdG8gYmUgc2xvdy4pCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOiBNZXJnZWQgb3BfbG9hZF92YXJhcmdzIGludG8g
b3BfY2FsbF92YXJhcmdzIHNvCisgICAgICAgIG9wX2NhbGxfdmFyYXJncyBjb3VsZCBzaGFyZSBj
b2RlIGdlbmVyYXRpb24gd2l0aCBvdGhlciBmb3JtcyBvZiBvcF9jYWxsLgorICAgICAgICBUaGlz
IGlzIGFsc28gYSBzbWFsbCBvcHRpbWl6YXRpb24sIHNpbmNlIG9wXyp2YXJhcmdzIG5vIGxvbmdl
ciBoYXZlIHRvCisgICAgICAgIHBhc3MgYXJndW1lbnRzIHRvIGVhY2ggb3RoZXIgdGhyb3VnaCB0
aGUgcmVnaXN0ZXIgZmlsZS4KKworICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVubGluayk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6IEFkZGVkIGEgbmV3IGNhbGwgdHlwZTog
Q2FsbFZhcmFyZ3MuIFRoaXMgYWxsb3dzCisgICAgICAgIHVzIHRvIGxpbmsgZnVuY3Rpb25zIGNh
bGxlZCB0aHJvdWdoIC5hcHBseSBzeW50YXguIFdlIG5lZWQgdG8gZGlzdGluZ3Vpc2gKKyAgICAg
ICAgQ2FsbFZhcmFyZ3MgZnJvbSBDYWxsIGJlY2F1c2UgQ2FsbFZhcmFyZ3MgY2hhbmdlcyBpdHMg
YXJndW1lbnQgY291bnQKKyAgICAgICAgb24gZWFjaCBpbm92Y2F0aW9uLCBzbyB3ZSBtdXN0IGFs
d2F5cyBsaW5rIHRvIHRoZSBhcmd1bWVudCBjb3VudCBjaGVja2luZworICAgICAgICB2ZXJzaW9u
IG9mIHRoZSBjYWxsZWUuCisKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDogTWVyZ2VkIG9wX2xvYWRfdmFyYXJncyBpbnRvIG9wX2NhbGxf
dmFyYXJncy4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAg
ICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6IERpdHRv
LiBBbHNvLCBzaW1wbGlmaWVkCisgICAgICAgIHNvbWUgb2YgdGhpcyBieXRlY29kZSBnZW5lcmF0
aW9uIHRvIHJlbW92ZSByZWR1bmRhbnQgY29waWVzLgorCisgICAgICAgICogZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKTogQWRkZWQgYSBu
ZXcgY2FsbCB0eXBlOiBDYWxsVmFyYXJncy4KKyAgICAgICAgREZHIGRvZXNuJ3Qgc3VwcG9ydCB0
aGlzIHR5cGUsIGJ1dCBpdHMgY29kZSBuZWVkcyB0byBjaGFuZ2Ugc2xpZ2h0bHkKKyAgICAgICAg
dG8gYWNjb21vZGF0ZSBhIDMtc3RhdGUgdmFyaWFibGUuCisKKyAgICAgICAgU3RvcHBlZCBwYXNz
aW5nIHRoZSBhcmd1bWVudCBjb3VudCBpbiByZWdUMSBiZWNhdXNlIHRoaXMgaXMgbm9uLXN0YW5k
YXJkLgorICAgICAgICAoVGhlIGFyZ3VtZW50IGNvdW50IGdvZXMgaW4gdGhlIENhbGxGcmFtZS4g
VGhpcyB0cmFkZXMgc3BlZWQgb24gdGhlIHNsb3cKKyAgICAgICAgcGF0aCBmb3Igc3BlZWQgYW5k
IGNvZGUgc2l6ZSBvbiB0aGUgZmFzdCBwYXRoLCBhbmQgc2ltcGxpY2l0eSBvbiBhbGwgcGF0aHMu
CisgICAgICAgIEEgZ29vZCB0cmFkZSwgaW4gbXkgb3Bpbmlvbi4pCisKKyAgICAgICAgKiBkZmcv
REZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21w
aWxlRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6IFR3ZWFrZWQgY29kZSB0byBtYWtlIENhbGxG
cmFtZQorICAgICAgICBzZXR1cCBtb3JlIG9idmlvdXMgd2hlbiBzaW5nbGUtc3RlcHBpbmcuIEFs
c28sIHVwZGF0ZWQgZm9yIGFyZ3VtZW50IGNvdW50CisgICAgICAgIG5vdCBiZWluZyBpbiByZWdU
MS4KKworICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvbXBpbGVyOjphZGRKU0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpKU0NhbGxSZWNvcmQ6OkpTQ2FsbFJlY29yZCk6IEFkZGVkIGEgbmV3IGNhbGwKKyAgICAgICAg
dHlwZTogQ2FsbFZhcmFyZ3MuCisKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6IERv
IGZpbmlzaCBDYWxsRnJhbWUgc2V0dXAgaW4gb25lIHBsYWNlIGJlZm9yZQorICAgICAgICBkb2lu
ZyBhbnl0aGluZyBlbHNlLiBEb24ndCBjaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3cgYmVjYXVzZSB3
ZSBoYXZlIG5vIGNhbGxlZQorICAgICAgICByZWdpc3RlcnMsIGFuZCBvdXIgY2FsbGVyIGhhcyBh
bHJlYWR5IGNoZWNrZWQgZm9yIGl0cyBvd24gcmVnaXN0ZXJzLgorCisgICAgICAgICogZGZnL0RG
R1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRmZ0xpbmtGb3IpOiBXZSBjYW4gbGlu
ayB0byBvdXIgY2FsbGVlIGV2ZW4gaWYgb3VyIGFyZ3VtZW50CisgICAgICAgIGNvdW50IGRvZXNu
J3QgbWF0Y2ggLS0gd2UganVzdCBuZWVkIHRvIGxpbmsgdG8gdGhlIGFyZ3VtZW50IGNvdW50IGNo
ZWNraW5nCisgICAgICAgIHZlcnNpb24uCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJh
bWVDbG9zdXJlLmg6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZUNsb3N1cmU6OnNldEFyZ3VtZW50
KTogQlVHIEZJWDogV2hlbiBzdXBwbHlpbmcgdG9vIG1hbnkKKyAgICAgICAgYXJndW1lbnRzIGZy
b20gQysrLCB3ZSBuZWVkIHRvIHN1cHBseSBhIGZ1bGwgY29weSBvZiB0aGUgYXJndW1lbnRzIHBy
aW9yCisgICAgICAgIHRvIHRoZSBzdWJzZXQgY29weSB0aGF0IG1hdGNoZXMgb3VyIGNhbGxlZSdz
IGFyZ3VtZW50IGNvdW50LiAoVGhhdCBpcyB3aGF0CisgICAgICAgIHRoZSBzdGFuZGFyZCBjYWxs
aW5nIGNvbnZlbnRpb24gd291bGQgaGF2ZSBwcm9kdWNlZCBpbiBKUy4pIEkgd291bGQgaGF2ZQor
ICAgICAgICBzcGxpdCB0aGlzIGludG8gaXRzIG93biBwYXRjaCwgYnV0IEkgY291bGRuJ3QgZmlu
ZCBhIHdheSB0byBnZXQgdGhlIEpJVAorICAgICAgICB0byBmYWlsIGEgcmVncmVzc2lvbiB0ZXN0
IGluIHRoaXMgYXJlYSB3aXRob3V0IG15IHBhdGNoIGFwcGxpZWQuCisKKyAgICAgICAgKiBpbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHA6IExldCB0aGUgdHJ1ZSBjb2RlIGJvbWIgYmVnaW4hCisK
KyAgICAgICAgKEpTQzo6ZXZhbCk6IEZpeGVkIHVwIHRoaXMgaGVscGVyIGZ1bmN0aW9uIHRvIG9w
ZXJhdGUgb24gZXZhbCgpJ3MgQ2FsbEZyYW1lLAorICAgICAgICBhbmQgbm90IGV2YWwoKSdzIGNh
bGxlciBmcmFtZS4gV2Ugbm8gbG9uZ2VyIGxlYXZlIHRoZSBDYWxsRnJhbWUgcG9pbnRpbmcKKyAg
ICAgICAgdG8gZXZhbCgpJ3MgY2FsbGVyIGR1cmluZyBhIGNhbGwgdG8gZXZhbCgpLCBzaW5jZSB0
aGF0IGlzIG5vdCBzdGFuZGFyZC4KKworICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6IEZhY3Rv
cmVkIG91dCBhIHNoYXJlZCBoZWxwZXIgZnVuY3Rpb24gZm9yIHVzZSBieSBKSVQKKyAgICAgICAg
YW5kIGludGVycHJldGVyIGJlY2F1c2UgaGFsZiB0aGUgY29kZSBtZWFucyBvbmUgcXVhcnRlciB0
aGUgYnVncyAtLSBpbiBteQorICAgICAgICBwcm9ncmFtbWluZywgYXQgbGVhc3QuCisKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOiBSZW1vdmVkIGEgbm93LXVudXNlZCB3YXkg
dG8gaW52b2tlIGV2YWwuCisgICAgICAgIAorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJp
dmF0ZUV4ZWN1dGUpOiBSZW1vdmVkIGFuIGludmFsaWQgQVNTRVJUIGZvbGxvd2luZworICAgICAg
ICBwdXREaXJlY3QsIGJlY2F1c2UgaXQgZ290IGluIHRoZSB3YXkgb2YgbXkgdGVzdGluZy4gKFdo
ZW4gcHV0dGluZyBhCisgICAgICAgIGZ1bmN0aW9uLCB0aGUgY2FjaGVkIGJhc2Ugb2YgYSBQdXRQ
cm9wZXJ0eVNsb3QgY2FuIGJlIDAgdG8gc2lnbmlmeSAiZG8KKyAgICAgICAgbm90IG9wdGltaXpl
Ii4pCisgICAgICAgIAorICAgICAgICBvcF9jYWxsX2V2YWw6IFVwZGF0ZWQgZm9yIG5ldywgc3Rh
bmRhcmQgZXZhbCBjYWxsaW5nIGNvbnZlbnRpb24uCisgICAgICAgIAorICAgICAgICBvcF9sb2Fk
X3ZhcmFyZ3M6IE1lcmdlZCBvcF9sb2FkX3ZhcmFyZ3MgaW50byBvcF9jYWxsX3ZhcmFyZ3MuCisK
KyAgICAgICAgb3BfY2FsbF92YXJhZ3M6IFVwZGF0ZWQgZm9yIG5ldywgc3RhbmRhcmQgZXZhbCBj
YWxsaW5nIGNvbnZlbnRpb24uIERvbid0CisgICAgICAgIGNoZWNrIGZvciBzdGFjayBvdmVyZmxv
dyBiZWNhdXNlIHRoZSBsb2FkVmFyYXJncyBoZWxwZXIgZnVuY3Rpb24gYWxyZWFkeQorICAgICAg
ICBjaGVja2VkLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOiBIZWFkZXJzIGFyZSBmdW4gYW5kIGVkdWNh
dGlvbmFsIQorCisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjpncm93U2xvd0Nhc2UpOgorICAgICAgICAqIGludGVycHJl
dGVyL1JlZ2lzdGVyRmlsZS5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlckZpbGU6Omdyb3cpOiBG
YWN0b3JlZCBvdXQgdGhlIHNsb3cgY2FzZSBpbnRvIGEgc2xvdworICAgICAgICBjYXNlIGJlY2F1
c2UgaXQgd2FzIGNyYW1waW5nIHRoZSBzdHlsZSBvZiBteSBmYXN0IGNhc2UuCisKKyAgICAgICAg
KiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6IE1vdmVk
IGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrIHRvIG1h
a2UgaXQgbW9yZSBvYnZpb3VzIHdoZW4gZGVidWdnaW5nLiBSZW1vdmVkCisgICAgICAgIGFzc3Vt
cHRpb24gdGhhdCBhcmd1bWVudCBjb3VudCBpcyBpbiByZWdUMSwgYXMgYWJvdmUuIFJlbW92ZWQg
Y2FsbCB0bworICAgICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKSBiZWNhdXNlIHRoZSBK
SVRTdHViQ2FsbCBhYnN0cmFjdGlvbiBkb2VzIHRoaXMgZm9yIHVzLgorCisgICAgICAgIChKU0M6
OkpJVDo6bGlua0Zvcik6IExpbmsgZXZlbiBpZiB3ZSBtaXNzIG9uIGFyZ3VtZW50IGNvdW50LCBh
cyBhYm92ZS4KKworICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jYWxsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2NhbGxfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
Y29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhbGxfZXZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MpOiBTaGFyZSBhbGwgZnVuY3Rpb24g
Y2FsbCBjb2RlIGdlbmVyYXRpb24uCisgICAgICAgIERvbid0IGNvdW50IGNhbGxfZXZhbCB3aGVu
IGFjY291bnRpbmcgZm9yIGxpbmthYmxlIGZ1bmN0aW9uIGNhbGxzIGJlY2F1c2UKKyAgICAgICAg
ZXZhbCBkb2Vzbid0IGxpbmsuIChJdHMgZmFzdCBwYXRoIGlzIHRvIHBlcmZvcm0gdGhlIGV2YWwu
KQorCisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKTogUG9ydGVkIHRoaXMg
aW5saW5lIGNvcHlpbmcgb3B0aW1pemF0aW9uCisgICAgICAgIHRvIG91ciBuZXcgY2FsbGluZyBj
b252ZW50aW9uLiBUaGUga2V5IHRvIHRoaXMgb3B0aW1pemF0aW9uIGlzIHRoZQorICAgICAgICBv
YnNlcnZhdGlvbiB0aGF0LCBpbiBhIGZ1bmN0aW9uIHRoYXQgZGVjbGFyZXMgbm8gYXJndW1lbnRz
LCBpZiBhbnkKKyAgICAgICAgYXJndW1lbnRzIGFyZSBwYXNzZWQsIHRoZXkgYWxsIGVuZCB1cCBy
aWdodCBiZWhpbmQgJ3RoaXMnLgorCisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6IEZhY3RvcmVk
IG91dCBldmFsIGZvciBhIGxpdHRsZSBjbGFyaXR5LgorCisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKTog
SWYgeW91IGFyZSBzdGlsbCB3aXRoIG1lLCBkZWFyIHJlYWRlciwKKyAgICAgICAgdGhpcyBpcyB0
aGUgd2hvbGUgcG9pbnQgb2YgbXkgcGF0Y2guIFRoZSBjYWxsZXIgbm93IHVuY29uZGl0aW9uYWxs
eSBtb3ZlcworICAgICAgICB0aGUgQ2FsbEZyYW1lIGZvcndhcmQgYW5kIGZpbGxzIGluIHRoZSBk
YXRhIGl0IGtub3dzIGJlZm9yZSB0YWtpbmcgYW55CisgICAgICAgIGJyYW5jaGVzIHRvIGRlYWwg
d2l0aCB3ZWlyZCBjYWxsZXIvY2FsbGVlIHBhaXJzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBh
bHNvIG1lYW5zIHRoYXQgdGhlcmUgaXMgYWxtb3N0IG5vIHNsb3cgcGF0aCBmb3IgY2FsbHMgLS0g
aXQgYWxsCisgICAgICAgIGdldHMgZm9sZGVkIGludG8gdGhlIHNoYXJlZCB2aXJ0dWFsIGNhbGwg
c3R1Yi4gVGhlIG9ubHkgdGhpbmdzIHJlbWFpbmluZworICAgICAgICBpbiB0aGUgc2xvdyBwYXRo
IGFyZSB0aGUgcmFyZSBjYXNlIGNvdW50ZXIgYW5kIGEgY2FsbCB0byB0aGUgc3R1Yi4KKworICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZh
dGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwpOiBVcGRhdGVkIGZvciB2YWx1ZXMgYmVpbmcgaW4KKyAg
ICAgICAgZGlmZmVyZW50IHJlZ2lzdGVycyBvciBpbiBtZW1vcnksIGJhc2VkIG9uIG91ciBuZXcg
c3RhbmRhcmQgY2FsbGluZworICAgICAgICBjb252ZW50aW9uLgorICAgICAgICAKKyAgICAgICAg
QWRkZWQgYSBzaGFyZWQgcGF0aCBmb3IgY2FsbGluZyBvdXQgdG8gQ1RJIGhlbHBlciBmdW5jdGlv
bnMgZm9yIG5vbi1KUworICAgICAgICBjYWxscy4KKworICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21ldGhvZF9jaGVj
ayk6IG1ldGhvZF9jaGVjayBlbWl0cyBpdHMgb3duIGNvZGUgYW5kCisgICAgICAgIHRoZSBmb2xs
b3dpbmcgZ2V0X2J5X2lkJ3MgY29kZSwgc28gaXQgbmVlZHMgdG8gYWRkIGJvdGggd2hlbiBpbmZv
cm1pbmcKKyAgICAgICAgcmVzdWx0IGNoYWluaW5nIG9mIGl0cyByZXN1bHQuIFRoaXMgaXMgaW1w
b3J0YW50IGJlY2F1c2UgdGhlIHN0YW5kYXJkCisgICAgICAgIGNhbGxpbmcgY29udmVudGlvbiBj
YW4gbm93IHRha2UgYWR2YW50YWdlIG9mIHRoaXMgY2hhaW5pbmcuCisKKyAgICAgICAgKiBqaXQv
SklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxs
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAq
IGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNU
SU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYWxsX2V2
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2FsbF92YXJhcmdzKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9jYWxsX2V2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFy
YXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KTogT2JzZXJ2
ZSwgYXMgSSB3cml0ZSBhbGwgb2YgbXkgY29kZSBhCisgICAgICAgIHNlY29uZCB0aW1lLCBub3cg
d2l0aCA2NCBiaXRzLgorCisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6dGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsKToKKyAgICAgICAgKEpTQzo6aml0Q29tcGlsZUZv
cik6CisgICAgICAgIChKU0M6OmFyaXR5Q2hlY2tGb3IpOgorICAgICAgICAoSlNDOjpsYXp5TGlu
a0Zvcik6IEEgbG90IG9mIG1lY2hhbmljYWwgY2hhbmdlcyBoZXJlIGZvciBvbmUgcHVycG9zZToK
KyAgICAgICAgRXhjZXB0aW9ucyB0aHJvd24gaW4gdGhlIG1pZGRsZSBvZiBhIGZ1bmN0aW9uIGNh
bGwgbm93IHVzZSBhIHNoYXJlZCBoZWxwZXIKKyAgICAgICAgZnVuY3Rpb24gKHRocm93RXhjZXB0
aW9uRnJvbU9wQ2FsbCkuIFRoaXMgZnVuY3Rpb24gdW5kZXJzdGFuZHMgdGhhdCB0aGUKKyAgICAg
ICAgQ2FsbEZyYW1lIGN1cnJlbnRseSBwb2ludHMgdG8gdGhlIGNhbGxFRSwgYW5kIHRoZSBleGNl
cHRpb24gbXVzdCBiZQorICAgICAgICB0aHJvd24gYnkgdGhlIGNhbGxFUi4gKFRoZSBvbGQgY2Fs
bGluZyBjb252ZW50aW9uIHdvdWxkIG9mdGVuIHN0aWxsIGhhdmUKKyAgICAgICAgdGhlIENhbGxG
cmFtZSBwb2ludGluZyBhdCB0aGUgY2FsbEVSIGF0IHRoZSBwb2ludCBvZiBhbiBleGNlcHRpb24u
IFRoYXQKKyAgICAgICAgaXMgbm90IHRoZSB3YXkgb2Ygb3VyIG5ldywgc3RhbmRhcmQgY2FsbGlu
ZyBjb252ZW50aW9uLikKKworICAgICAgICAoSlNDOjpvcF9jYWxsX2V2YWwpOiBGaW5pc2ggc3Rh
bmRhcmQgQ2FsbEZyYW1lIHNldHVwIGJlZm9yZSBjYWxsaW5nIAorICAgICAgICBvdXIgZXZhbCBo
ZWxwZXIgZnVuY3Rpb24sIHdoaWNoIG5vdyBkZXBlbmRzIG9uIHRoYXQgc2V0dXAuCisKKyAgICAg
ICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6Omxlbmd0
aCk6IFJlbmFtZWQgbnVtUHJvdmlkZWRBcmd1bWVudHMoKSB0byBsZW5ndGgoKQorICAgICAgICBi
ZWNhdXNlIHRoYXQncyB3aGF0IG90aGVyIG9iamVjdHMgY2FsbCBpdCwgYW5kIHRoZSBkaWZmZXJl
bmNlIG1hZGUgb3VyCisgICAgICAgIG5ldyBsb2FkVmFyYXJncyBoZWxwZXIgZnVuY3Rpb24gaGFy
ZCB0byByZWFkLgorCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwp
OiBJbnRlcnByZXRlciBidWlsZAorICAgICAgICBmaXhlcy4KKworICAgICAgICAqIHJ1bnRpbWUv
RnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0Fw
cGx5KTogSG9ub3IgQXJndW1lbnRzOjpNYXhBcmd1bWVudHMgZXZlbiB3aGVuCisgICAgICAgIHRo
ZSAuYXBwbHkgY2FsbF92YXJhcmdzIG9wdGltaXphdGlvbiBmYWlscy4gKFRoaXMgYnVnIGFwcGVh
cnMgb24gbGF5b3V0CisgICAgICAgIHRlc3RzIHdoZW4geW91IGRpc2FibGUgdGhlIG9wdGltaXph
dGlvbi4pCisKIDIwMTEtMTEtMTIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQWRkIEVOQUJMRShERkdfSklUKSBhcm91bmQgREZH
Q29ycmVjdGFibGVKdW1wUG9pbnQgY29kZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDk4
NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNiArMzQ1LDEwIEBAIHB1YmxpYzoKIAogICAg
IEp1bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0
LCBUcnVzdGVkSW1tUHRyIHJpZ2h0KQogICAgIHsKKyAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVh
bCkgfHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIudGVzdHFfcnIobGVmdCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4g
SnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgICAgIH0KICAg
ICAgICAgbW92ZShyaWdodCwgc2NyYXRjaFJlZ2lzdGVyKTsKICAgICAgICAgcmV0dXJuIGJyYW5j
aFB0cihjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOwogICAgIH0KQEAgLTQxNiw2ICs0MjAs
MTIgQEAgcHVibGljOgogICAgIH0KIAogCisgICAgSnVtcCBicmFuY2hBZGRQdHIoUmVzdWx0Q29u
ZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGFkZFB0cihpbW0sIGRlc3QpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxl
ci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2hBZGRQ
dHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBhZGRQdHIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5ODU4OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTMwLDE0ICsxMTMwLDExIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSog
ZXhlYywgY28KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bf
Y2FsbF92YXJhcmdzOiB7Ci0gICAgICAgICAgICBpbnQgZnVuYyA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50ZigiWyU0ZF0gY2FsbF92YXJhcmdzXHQgJXMsICVzLCAlZFxuIiwgbG9jYXRpb24sIHJl
Z2lzdGVyTmFtZShleGVjLCBmdW5jKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCBhcmdDb3Vu
dCkuZGF0YSgpLCByZWdpc3Rlck9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX2xvYWRfdmFyYXJnczogewotICAgICAgICAgICAgcHJpbnRVbmFy
eU9wKGV4ZWMsIGxvY2F0aW9uLCBpdCwgImxvYWRfdmFyYXJncyIpOworICAgICAgICAgICAgaW50
IGNhbGxlZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHRoaXNWYWx1ZSA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGFyZ3VtZW50cyA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludGYoIlslNGRdIGNhbGxfdmFyYXJnc1x0ICVzLCAl
cywgJXMsICVkXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIGNhbGxlZSkuZGF0YSgp
LCByZWdpc3Rlck5hbWUoZXhlYywgdGhpc1ZhbHVlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVj
LCBhcmd1bWVudHMpLmRhdGEoKSwgZmlyc3RGcmVlUmVnaXN0ZXIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9uOiB7CkBA
IC0xNzY1LDEyICsxNzYyLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoSlNHbG9iYWxE
YXRhJiAKICAgICAKICAgICBpZiAoaXNERkcpIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsUmV0dXJuTG9jYXRp
b24pLCBpc0NhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3Qp
OworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxSZXR1
cm5Mb2NhdGlvbiksIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IG9wZXJhdGlvbkxpbmtDb25zdHJ1
Y3QgOiBvcGVyYXRpb25MaW5rQ2FsbCk7CiAjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhD
b2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24pLCBpc0NhbGw/IGdsb2JhbERh
dGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogZ2xvYmFsRGF0YS5qaXRTdHVicy0+
Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGNhbGxUeXBlID09IENv
bnN0cnVjdCA/IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkg
OiBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7CiAgICAgaGFzU2Vl
blNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKICAgICBjYWxsZWUuY2xlYXIoKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTg1ODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNCwxMCArMTA0LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBzdHJ1Y3QgQ2FsbExpbmtJbmZvOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8Q2FsbExpbmtJbmZvPiB7CisgICAgICAgIGVudW0gQ2FsbFR5cGUgeyBOb25lLCBDYWxsLCBD
YWxsVmFyYXJncywgQ29uc3RydWN0IH07CisgICAgICAgIHN0YXRpYyBDYWxsVHlwZSBjYWxsVHlw
ZUZvcihPcGNvZGVJRCBvcGNvZGVJRCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wY29k
ZUlEID09IG9wX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKQorICAgICAgICAgICAg
ICAgIHJldHVybiBDYWxsOworICAgICAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0OworICAgICAgICAgICAgQVNTRVJU
KG9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICByZXR1cm4gQ2FsbFZh
cmFyZ3M7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIENhbGxMaW5rSW5mbygpCiAgICAg
ICAgICAgICA6IGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQotICAgICAgICAgICAgLCBpc0Nh
bGwoZmFsc2UpCiAgICAgICAgICAgICAsIGlzREZHKGZhbHNlKQorICAgICAgICAgICAgLCBjYWxs
VHlwZShOb25lKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMjMsOCArMTM0
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpJVFdyaXRlQmFycmllcjxKU0Z1bmN0aW9u
PiBjYWxsZWU7CiAgICAgICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxl
ZTsKICAgICAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7Ci0gICAgICAgIGJvb2wg
aXNDYWxsIDogMTsKICAgICAgICAgYm9vbCBpc0RGRyA6IDE7CisgICAgICAgIENhbGxUeXBlIGNh
bGxUeXBlIDogMjsKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBi
b29sIGlzTGlua2VkKCkgeyByZXR1cm4gY2FsbGVlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiA5ODU4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDggKzE2Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtYWNybyhvcF9uZXdfZnVuY19leHAsIDMpIFwK
ICAgICAgICAgbWFjcm8ob3BfY2FsbCwgNCkgXAogICAgICAgICBtYWNybyhvcF9jYWxsX2V2YWws
IDQpIFwKLSAgICAgICAgbWFjcm8ob3BfY2FsbF92YXJhcmdzLCA0KSBcCi0gICAgICAgIG1hY3Jv
KG9wX2xvYWRfdmFyYXJncywgNCkgXAorICAgICAgICBtYWNybyhvcF9jYWxsX3ZhcmFyZ3MsIDUp
IFwKICAgICAgICAgbWFjcm8ob3BfdGVhcl9vZmZfYWN0aXZhdGlvbiwgMykgXAogICAgICAgICBt
YWNybyhvcF90ZWFyX29mZl9hcmd1bWVudHMsIDIpIFwKICAgICAgICAgbWFjcm8ob3BfcmV0LCAy
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTg1ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgzMywyMCArMTgzMyw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbCgKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExvYWRWYXJhcmdzKFJlZ2lzdGVySUQqIGFyZ0NvdW50RHN0LCBSZWdpc3Rl
cklEKiB0aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cykKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBmdW5jLCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50
cywgUmVnaXN0ZXJJRCogZmlyc3RGcmVlUmVnaXN0ZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogewotICAgIEFTU0VSVChhcmdDb3Vu
dERzdC0+aW5kZXgoKSA8IGFyZ3VtZW50cy0+aW5kZXgoKSk7Ci0gICAgZW1pdE9wY29kZShvcF9s
b2FkX3ZhcmFyZ3MpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmdDb3VudERzdC0+aW5k
ZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3VtZW50cy0+aW5kZXgoKSk7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRoaXNSZWdpc3Rlci0+aW5kZXgoKSArIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7IC8vIGluaXRpYWwgcmVnaXN0ZXJPZmZzZXQKLSAg
ICByZXR1cm4gYXJnQ291bnREc3Q7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdp
c3RlcklEKiB0aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ0NvdW50UmVnaXN0ZXIsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotewot
ICAgIEFTU0VSVChmdW5jLT5yZWZDb3VudCgpKTsKLSAgICBBU1NFUlQodGhpc1JlZ2lzdGVyLT5y
ZWZDb3VudCgpKTsKICAgICBBU1NFUlQoZHN0ICE9IGZ1bmMpOwogICAgIGlmIChtX3Nob3VsZEVt
aXRQcm9maWxlSG9va3MpIHsKICAgICAgICAgZW1pdE9wY29kZShvcF9wcm9maWxlX3dpbGxfY2Fs
bCk7CkBAIC0xODU0LDE1ICsxODQyLDE2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbFYKICAgICB9CiAgICAgCiAgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLSAgICAKKwogICAgIC8vIEVtaXQgY2FsbC4KICAgICBl
bWl0T3Bjb2RlKG9wX2NhbGxfdmFyYXJncyk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1
bmMtPmluZGV4KCkpOyAvLyBmdW5jCi0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ0NvdW50
UmVnaXN0ZXItPmluZGV4KCkpOyAvLyBhcmcgY291bnQKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQodGhpc1JlZ2lzdGVyLT5pbmRleCgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplKTsgLy8gaW5pdGlhbCByZWdpc3Rlck9mZnNldAorICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChmdW5jLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGhpc1JlZ2lzdGVy
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndW1lbnRzLT5pbmRleCgp
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmlyc3RGcmVlUmVnaXN0ZXItPmluZGV4KCkp
OwogICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7CiAgICAgICAgIGVtaXRPcGNvZGUo
b3BfY2FsbF9wdXRfcmVzdWx0KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7IC8vIGRzdAorICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRl
eCgpKTsKICAgICB9CiAgICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgewogICAgICAg
ICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfZGlkX2NhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gOTg1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNCw3ICszMzQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRDYWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1
bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklE
KiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0
ZXJJRCogYXJnQ291bnQsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJhcmdzKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVy
LCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCB1
bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkVmFyYXJncyhSZWdpc3RlcklEKiBhcmdDb3Vu
dERzdCwgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmdzKTsKIAogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0UmV0dXJuKFJlZ2lzdGVySUQqIHNyYyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CShyZXZpc2lvbiA5ODU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDI2ICs0OTIsMjAgQEAgUmVn
aXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBt
X2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dCk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgYmFzZS5nZXQoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYXJnc0Nv
dW50UmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwot
ICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGFyZ3NSZWdpc3RlciA9IGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh0aGlzUmVnaXN0
ZXIuZ2V0KCksIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByKTsKKyAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB0aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9hcmdzLT5t
X2xpc3ROb2RlLT5tX2V4cHIpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGFyZ3NS
ZWdpc3RlcjsKICAgICAgICAgICAgIEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MgPSBtX2FyZ3MtPm1f
bGlzdE5vZGUtPm1fbmV4dDsKLSAgICAgICAgICAgIGJvb2wgaXNBcmd1bWVudHNBcHBseSA9IGZh
bHNlOwotICAgICAgICAgICAgaWYgKGFyZ3MtPm1fZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmVOb2RlID0gc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihhcmdzLT5tX2V4cHIpOwotICAgICAgICAgICAgICAgIGlzQXJndW1lbnRzQXBw
bHkgPSBnZW5lcmF0b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50cyhyZXNvbHZlTm9kZS0+aWRlbnRp
ZmllcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNBcmd1bWVudHNBcHBseSkKLSAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGFyZ3NSZWdpc3Rlci5nZXQoKSwgZ2VuZXJh
dG9yLnVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKCFpc0FyZ3VtZW50c0FwcGx5KQotICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0Tm9kZShhcmdzUmVnaXN0ZXIuZ2V0KCksIGFyZ3MtPm1fZXhwcik7CisgICAgICAgICAg
ICBpZiAoYXJncy0+bV9leHByLT5pc1Jlc29sdmVOb2RlKCkgJiYgZ2VuZXJhdG9yLndpbGxSZXNv
bHZlVG9Bcmd1bWVudHMoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihhcmdzLT5tX2V4cHIpLT5p
ZGVudGlmaWVyKCkpKQorICAgICAgICAgICAgICAgIGFyZ3NSZWdpc3RlciA9IGdlbmVyYXRvci51
bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGFyZ3NSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Tm9kZShhcmdzLT5tX2V4cHIp
OworCisgICAgICAgICAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkgaWdub3JlcyBleHRy
YSBhcmd1bWVudHMsIGJ1dCB3ZSBzdGlsbAorICAgICAgICAgICAgLy8gbmVlZCB0byBldmFsdWF0
ZSB0aGVtIGZvciBzaWRlIGVmZmVjdHMuCiAgICAgICAgICAgICB3aGlsZSAoKGFyZ3MgPSBhcmdz
LT5tX25leHQpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShhcmdzLT5tX2V4
cHIpOwogCi0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWRWYXJhcmdzKGFyZ3NDb3VudFJl
Z2lzdGVyLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIGFyZ3NSZWdpc3Rlci5nZXQoKSk7Ci0g
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGxWYXJhcmdzKGZpbmFsRGVzdGluYXRpb25Pckln
bm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBhcmdz
Q291bnRSZWdpc3Rlci5nZXQoKSwgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJncyhmaW5hbERlc3RpbmF0aW9u
T3JJZ25vcmVkLmdldCgpLCBiYXNlLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIGFyZ3NSZWdp
c3Rlci5nZXQoKSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBkaXZvdCgpLCBzdGFydE9mZnNl
dCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
KGVuZC5nZXQoKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAkocmV2aXNpb24gOTg1ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyODksMTMgKzEyODksMTcgQEAgdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjplbWl0Q2FsbChOb2RlJiBubwogCiAgICAgaWYgKG5vZGUub3AgPT0gQ2FsbCkgewogICAg
ICAgICBzbG93Q2FsbEZ1bmN0aW9uID0gb3BlcmF0aW9uTGlua0NhbGw7Ci0gICAgICAgIGlzQ2Fs
bCA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gQ29uc3Ry
dWN0KTsKICAgICAgICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3Q7
Ci0gICAgICAgIGlzQ2FsbCA9IGZhbHNlOwogICAgIH0KIAorICAgIC8vIEZvciBjb25zdHJ1Y3Rv
cnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBz
cGFjZQorICAgIC8vIGZvciBpdC4KKyAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBub2RlLm9w
ID09IENhbGwgPyAwIDogMTsKKworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUg
PSBub2RlLm9wID09IENhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNv
bnN0cnVjdDsKKwogICAgIE5vZGVJbmRleCBjYWxsZWVOb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgp
Lm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldOwogICAgIEpTVmFsdWVPcGVyYW5k
IGNhbGxlZSh0aGlzLCBjYWxsZWVOb2RlSW5kZXgpOwogICAgIEdQUlJlZyBjYWxsZWVUYWdHUFIg
PSBjYWxsZWUudGFnR1BSKCk7CkBAIC0xMzA4LDcgKzEzMTIsNyBAQCB2b2lkIEpJVENvZGVHZW5l
cmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAKICAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUg
dGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKICAg
ICAvLyBmb3IgaXQuCi0gICAgaW50IG51bVBhc3NlZEFyZ3MgPSBudW1BcmdzICsgKGlzQ2FsbCA/
IDAgOiAxKTsKKyAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG51bUFyZ3MgKyBkdW1teVRoaXNBcmd1
bWVudDsKIAogICAgIC8vIGFtb3VudCBvZiBzdHVmZiAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJlZ2lz
dGVyKSkgdGhhdCB3ZSBuZWVkIHRvIHBsYWNlIGF0IHRoZQogICAgIC8vIHRvcCBvZiB0aGUgSlMg
c3RhY2suCkBAIC0xMzMyLDggKzEzMzYsOCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsKE5vZGUmIG5vCiAgICAgICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRH
UFIoKTsKICAgICAgICAgdXNlKGFyZ05vZGVJbmRleCk7CiAKLSAgICAgICAgbV9qaXQuc3RvcmUz
MihhcmdUYWdHUFIsIHRhZ09mQ2FsbERhdGEoLWNhbGxEYXRhU2l6ZSArIGFyZ0lkeCArIChpc0Nh
bGwgPyAwIDogMSkpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBwYXls
b2FkT2ZDYWxsRGF0YSgtY2FsbERhdGFTaXplICsgYXJnSWR4ICsgKGlzQ2FsbCA/IDAgOiAxKSkp
OworICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgdGFnT2ZDYWxsRGF0YSgtY2FsbERh
dGFTaXplICsgYXJnSWR4ICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgbV9qaXQuc3Rv
cmUzMihhcmdQYXlsb2FkR1BSLCBwYXlsb2FkT2ZDYWxsRGF0YSgtY2FsbERhdGFTaXplICsgYXJn
SWR4ICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKICAgICB9CiAKICAgICBtX2ppdC5zdG9yZTMyKGNh
bGxlZVRhZ0dQUiwgdGFnT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlZSkpOwpAQCAtMTM2
Niw3ICsxMzcwLDYgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwog
ICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdp
c3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgbV9qaXQucG9rZShHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYWRkRmFzdEV4Y2Vw
dGlvbkNoZWNrKG1faml0LmFwcGVuZENhbGwoc2xvd0NhbGxGdW5jdGlvbiksIGF0KG1fY29tcGls
ZUluZGV4KS5jb2RlT3JpZ2luKTsKLSAgICBtX2ppdC5tb3ZlKEltbTMyKG51bVBhc3NlZEFyZ3Mp
LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwogCkBA
IC0xMzc2LDcgKzEzNzksNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUm
IG5vCiAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwg
bV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKIAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hl
Y2ssIGlzQ2FsbCwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOworICAgIG1faml0LmFk
ZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxUeXBlLCBhdCht
X2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAkocmV2
aXNpb24gOTg1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3I2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDEsMTYgKzEyNDEsMTkgQEAgdm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogdm9pZCBKSVRDb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbChOb2RlJiBub2RlKQogewogICAgIFBfREZHT3BlcmF0aW9uX0Ugc2xvd0NhbGxG
dW5jdGlvbjsKLSAgICBib29sIGlzQ2FsbDsKLSAgICAKLSAgICBpZiAobm9kZS5vcCA9PSBDYWxs
KSB7CisKKyAgICBpZiAobm9kZS5vcCA9PSBDYWxsKQogICAgICAgICBzbG93Q2FsbEZ1bmN0aW9u
ID0gb3BlcmF0aW9uTGlua0NhbGw7Ci0gICAgICAgIGlzQ2FsbCA9IHRydWU7Ci0gICAgfSBlbHNl
IHsKKyAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gQ29uc3RydWN0KTsKICAg
ICAgICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3Q7Ci0gICAgICAg
IGlzQ2FsbCA9IGZhbHNlOwogICAgIH0KKworICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0
aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQorICAg
IC8vIGZvciBpdC4KKyAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBub2RlLm9wID09IENhbGwg
PyAwIDogMTsKKyAgICAKKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlID0gbm9k
ZS5vcCA9PSBDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1
Y3Q7CiAgICAgCiAgICAgTm9kZUluZGV4IGNhbGxlZU5vZGVJbmRleCA9IG1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV07CiAgICAgSlNWYWx1ZU9wZXJhbmQg
Y2FsbGVlKHRoaXMsIGNhbGxlZU5vZGVJbmRleCk7CkBAIC0xMjYxLDkgKzEyNjQsNyBAQCB2b2lk
IEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgLy8gcmVjZWl2ZXIgKG1l
dGhvZCBjYWxsKS4gc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KICAgICBp
bnQgbnVtQXJncyA9IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CiAgICAgCi0gICAgLy8gRm9yIGNv
bnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0
byBtYWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0LgotICAgIGludCBudW1QYXNzZWRBcmdzID0gbnVt
QXJncyArIChpc0NhbGwgPyAwIDogMSk7CisgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBudW1Bcmdz
ICsgZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgCiAgICAgLy8gYW1vdW50IG9mIHN0dWZmIChpbiB1
bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8gcGxhY2UgYXQgdGhlCiAg
ICAgLy8gdG9wIG9mIHRoZSBKUyBzdGFjay4KQEAgLTEyODQsNyArMTI4NSw3IEBAIHZvaWQgSklU
Q29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICAgICAgR1BSUmVnIGFyZ0dQUiA9
IGFyZy5ncHIoKTsKICAgICAgICAgdXNlKGFyZ05vZGVJbmRleCk7CiAgICAgICAgIAotICAgICAg
ICBtX2ppdC5zdG9yZVB0cihhcmdHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKC1jYWxsRGF0YVNpemUg
KyBhcmdJZHggKyAoaXNDYWxsID8gMCA6IDEpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKGFy
Z0dQUiwgYWRkcmVzc09mQ2FsbERhdGEoLWNhbGxEYXRhU2l6ZSArIGFyZ0lkeCArIGR1bW15VGhp
c0FyZ3VtZW50KSk7CiAgICAgfQogICAgIAogICAgIG1faml0LnN0b3JlUHRyKGNhbGxlZUdQUiwg
YWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsKQEAgLTEzMTIsNyArMTMx
Myw2IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICAKICAg
ICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwogICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9q
aXQuYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKG1faml0LmFwcGVuZENhbGwoc2xvd0NhbGxGdW5jdGlv
biksIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKLSAgICBtX2ppdC5tb3ZlKEltbTMy
KG51bVBhc3NlZEFyZ3MpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMy
KG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rl
cikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgbV9qaXQubm90aWZ5Q2FsbCht
X2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgYXQobV9jb21waWxlSW5kZXgpLmNv
ZGVPcmlnaW4pOwogICAgIApAQCAtMTMyMiw3ICsxMzIyLDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwogICAgIAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdl
dFRvQ2hlY2ssIGlzQ2FsbCwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOworICAgIG1f
aml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxUeXBl
LCBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CiB9CiAKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk4
NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4OSw2ICs1ODksNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxl
RW50cnkoKQogICAgIC8vIGJvdGggbm9ybWFsIHJldHVybiBjb2RlIGFuZCB3aGVuIGp1bXBpbmcg
dG8gYW4gZXhjZXB0aW9uIGhhbmRsZXIpLgogICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbChHUFJJbmZvOjpyZWdUMik7CiAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUklu
Zm86OnJlZ1QyLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKKyAgICBlbWl0UHV0SW1tZWRpYXRl
VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKTsK
IH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUJvZHkoKQpAQCAtNjczLDcgKzY3NCw3IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBtX2NvZGVCbG9j
ay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fanNDYWxscy5zaXplKCkpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKLSAgICAgICAg
aW5mby5pc0NhbGwgPSBtX2pzQ2FsbHNbaV0ubV9pc0NhbGw7CisgICAgICAgIGluZm8uY2FsbFR5
cGUgPSBtX2pzQ2FsbHNbaV0ubV9jYWxsVHlwZTsKICAgICAgICAgaW5mby5pc0RGRyA9IHRydWU7
CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWwobGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsKSk7CiAgICAgICAgIGlu
Zm8uaG90UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3Rh
cmdldFRvQ2hlY2spOwpAQCAtNjkzLDEzICs2OTQsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENvZGUm
IGVudHJ5KQogewotICAgIC8vIFByZXNlcnZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2Fs
bGZyYW1lLgogICAgIGNvbXBpbGVFbnRyeSgpOwotICAgIC8vIEdlbmVyYXRlIHRoZSBib2R5IG9m
IHRoZSBwcm9ncmFtLgogICAgIGNvbXBpbGVCb2R5KCk7Ci0gICAgLy8gTGluaworCiAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGxpbmsobGlua0J1
ZmZlcik7CisKICAgICBlbnRyeSA9IEpJVENvZGUobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSwg
SklUQ29kZTo6REZHSklUKTsKIH0KIApAQCAtNzEyLDggKzcxMiw2IEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAgICAvLyBJZiB3ZSBuZWVkZWQgdG8gcGVyZm9y
bSBhbiBhcml0eSBjaGVjayB3ZSB3aWxsIGFscmVhZHkgaGF2ZSBtb3ZlZCB0aGUgcmV0dXJuIGFk
ZHJlc3MsCiAgICAgLy8gc28gZW50ZXIgYWZ0ZXIgdGhpcy4KICAgICBMYWJlbCBmcm9tQXJpdHlD
aGVjayh0aGlzKTsKLSAgICAvLyBTZXR1cCBhIHBvaW50ZXIgdG8gdGhlIGNvZGVibG9jayBpbiB0
aGUgQ2FsbEZyYW1lSGVhZGVyLgotICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRl
cihtX2NvZGVCbG9jaywgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spOwogICAgIC8vIFBsYW50IGEg
Y2hlY2sgdGhhdCBzdWZmaWNpZW50IHNwYWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgUmVnaXN0ZXJG
aWxlLgogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTYyOTEKICAgICBhZGRQdHIoSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjpyZWdUMSk7CkBAIC03NDUsOCArNzQzLDkgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGls
ZUZ1bmN0aW9uKEpJVENvZAogICAgIC8vIEluIGNhc2VzIHdoZXJlIGFuIGFyaXR5IGNoZWNrIGlz
IG5lY2Vzc2FyeSwgd2UgZW50ZXIgaGVyZS4KICAgICAvLyBGSVhNRTogY2hhbmdlIHRoaXMgZnJv
bSBhIGN0aSBjYWxsIHRvIGEgREZHIHN0eWxlIG9wZXJhdGlvbiAobm9ybWFsIEMgY2FsbGluZyBj
b252ZW50aW9ucykuCiAgICAgTGFiZWwgYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgcHJlc2Vy
dmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1QyKTsKLSAgICBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOwor
ICAgIGNvbXBpbGVFbnRyeSgpOworCisgICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgYnJhbmNoMzIoRXF1
YWwsIEdQUkluZm86OnJlZ1QxLCBJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSku
bGlua1RvKGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1l
KSAvIHNpemVvZih2b2lkKikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTg1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw5ICszOTYsOSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fbWV0aG9kR2V0cy5hcHBlbmQoTWV0aG9kR2V0UmVjb3JkKHNsb3dD
YWxsLCBzdHJ1Y3RUb0NvbXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRvQ29tcGFyZSwgcHV0
RnVuY3Rpb24pKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2Fs
bCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxs
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2Fs
bCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5m
bzo6Q2FsbFR5cGUgY2FsbFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7Ci0gICAg
ICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFy
Z2V0VG9DaGVjaywgaXNDYWxsLCBjb2RlT3JpZ2luKSk7CisgICAgICAgIG1fanNDYWxscy5hcHBl
bmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbFR5
cGUsIGNvZGVPcmlnaW4pKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBub3RpY2VPU1JFbnRyeShC
YXNpY0Jsb2NrJiBiYXNpY0Jsb2NrKQpAQCAtNTI4LDExICs1MjgsMTEgQEAgcHJpdmF0ZToKICAg
ICB9OwogICAgIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewotICAgICAgICBKU0NhbGxSZWNv
cmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hl
Y2ssIGJvb2wgaXNDYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgICAgIEpTQ2FsbFJl
Y29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9D
aGVjaywgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQogICAgICAgICAgICAgOiBtX2Zhc3RDYWxsKGZhc3RDYWxsKQogICAgICAgICAgICAgLCBt
X3Nsb3dDYWxsKHNsb3dDYWxsKQogICAgICAgICAgICAgLCBtX3RhcmdldFRvQ2hlY2sodGFyZ2V0
VG9DaGVjaykKLSAgICAgICAgICAgICwgbV9pc0NhbGwoaXNDYWxsKQorICAgICAgICAgICAgLCBt
X2NhbGxUeXBlKGNhbGxUeXBlKQogICAgICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdp
bikKICAgICAgICAgewogICAgICAgICB9CkBAIC01NDAsNyArNTQwLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgQ2FsbCBtX2Zhc3RDYWxsOwogICAgICAgICBDYWxsIG1fc2xvd0NhbGw7CiAgICAgICAg
IERhdGFMYWJlbFB0ciBtX3RhcmdldFRvQ2hlY2s7Ci0gICAgICAgIGJvb2wgbV9pc0NhbGw7Cisg
ICAgICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgbV9jYWxsVHlwZTsKICAgICAgICAgQ29kZU9y
aWdpbiBtX2NvZGVPcmlnaW47CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA5ODU4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMCw2
ICs1MzAsMTAgQEAgc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQogewog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIGV4ZWND
YWxsZWUtPnNldFNjb3BlQ2hhaW4oZXhlYy0+c2NvcGVDaGFpbigpKTsKKyAgICBleGVjQ2FsbGVl
LT5zZXRDb2RlQmxvY2soMCk7CisKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewogICAg
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRD
YWxsRGF0YShjYWxsZWUsIGNhbGxEYXRhKTsKQEAgLTUzNywxNyArNTQxLDEwIEBAIHN0YXRpYyB2
b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGUKICAgICAgICAgQVNTRVJUKGNhbGxUeXBl
ICE9IENhbGxUeXBlSlMpOwogICAgIAogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVI
b3N0KSB7Ci0gICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmludGVycHJldGVyLT5yZWdpc3Rl
ckZpbGUoKS5ncm93KGV4ZWNDYWxsZWUtPnJlZ2lzdGVycygpKSkgewotICAgICAgICAgICAgICAg
IGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKSk7Ci0g
ICAgICAgIAogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAg
ICAgICAKICAgICAgICAgICAgIGlmIChnbG9iYWxEYXRhLT5leGNlcHRpb24pCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZv
aWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKICAgICAgICAgfQogICAgIApAQCAtNTY0LDE3
ICs1NjEsMTAgQEAgc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQogICAg
IEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVKUyk7CiAgICAgCiAgICAgaWYg
KGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKLSAgICAgICAgaWYgKCFnbG9i
YWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdyhleGVjQ2FsbGVlLT5yZWdp
c3RlcnMoKSkpIHsKLSAgICAgICAgICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0
YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNjb3Bl
Q2hhaW4oKSk7Ci0gICAgICAgIAogICAgICAgICBnbG9iYWxEYXRhLT5ob3N0Q2FsbFJldHVyblZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWND
YWxsZWUpKTsKLSAgICAgICAgCiAgICAgICAgIGlmIChnbG9iYWxEYXRhLT5leGNlcHRpb24pCiAg
ICAgICAgICAgICByZXR1cm4gMDsKKwogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIApAQCAtNTkxLDE1ICs1
ODEsMTYgQEAgaW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAgIEpT
Q2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUp
OwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiAgICAgICAgIHJldHVybiBoYW5kbGVI
b3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBraW5kKTsKKwogICAgIEpTRnVuY3Rp
b24qIGNhbGxlZSA9IGFzRnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIGV4ZWND
YWxsZWUtPnNldFNjb3BlQ2hhaW4oY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpKTsKICAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwotICAgIAorCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSAwOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICBj
b2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS5hZGRyZXNzRm9y
Q2FsbCgpOwogICAgIGVsc2UgewotICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGNh
bGxlZS0+c2NvcGUoKSk7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVj
dXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAg
ICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihl
eGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24g
OTg1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MzUsMTUgKzYzNSwxMyBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRl
KiBleGVjLCBDYWxsTGluCiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNh
bGxlckNvZGVCbG9jayk7CiAgICAgCi0gICAgaWYgKCFjYWxsZWVDb2RlQmxvY2sgfHwgc3RhdGlj
X2Nhc3Q8aW50PihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSA9PSBjYWxsZWVD
b2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5m
by5pc0xpbmtlZCgpKTsKLSAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxlZS5zZXQoZXhlYy0+Y2Fs
bGVyRnJhbWUoKS0+Z2xvYmFsRGF0YSgpLCBjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luLCBjYWxs
ZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgICAgICBjYWxsTGlu
a0luZm8ubGFzdFNlZW5DYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPmdsb2JhbERhdGEo
KSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKLSAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwgY29kZVB0cik7
Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQotICAgICAgICAgICAgY2Fs
bGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKCZjYWxsTGlua0luZm8pOwotICAgIH0KKyAg
ICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKKyAgICBjYWxsTGlua0luZm8uY2Fs
bGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxMaW5rSW5mby5o
b3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7
CisgICAgY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgp
LT5nbG9iYWxEYXRhKCksIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxl
ZSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwg
Y29kZVB0cik7CisgICAgCisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVl
Q29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKCZjYWxsTGlua0luZm8pOwogICAgIAogICAgIGlm
IChraW5kID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENv
ZGVMb2NhdGlvbkNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG9wZXJhdGlv
blZpcnR1YWxDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWVDbG9zdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaAkocmV2aXNpb24gOTg1ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lQ2xvc3VyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw4IEBAIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlIHsKICAgICB7CiAg
ICAgICAgIGlmIChhcmcgPCBleHBlY3RlZFBhcmFtcykKICAgICAgICAgICAgIG5ld0NhbGxGcmFt
ZVthcmcgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBleHBlY3RlZFBhcmFt
c10gPSB2YWx1ZTsKLSAgICAgICAgZWxzZQorCisgICAgICAgIGlmIChwcm92aWRlZFBhcmFtcyA+
IGV4cGVjdGVkUGFyYW1zKQogICAgICAgICAgICAgbmV3Q2FsbEZyYW1lW2FyZyAtIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGV4cGVjdGVkUGFyYW1zIC0gcHJvdmlkZWRQYXJh
bXNdID0gdmFsdWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDk4NTg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIyLDEzICs0MjIsMTIgQEAgc3RhdGljIE5FVkVSX0lOTElORSBib29sIGlzSW52YWxp
ZFBhcmFtRgogfQogI2VuZGlmCiAKLU5FVkVSX0lOTElORSBKU1ZhbHVlIEludGVycHJldGVyOjpj
YWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUs
IFJlZ2lzdGVyKiBhcmd2LCBpbnQgYXJnYywgaW50IHJlZ2lzdGVyT2Zmc2V0KQorSlNWYWx1ZSBl
dmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIGlmIChhcmdjIDwgMikKKyAgICBpZiAo
IWNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIEpTVmFsdWUgcHJvZ3JhbSA9IGFyZ3ZbMV0uanNWYWx1ZSgpOwotCisgICAgSlNW
YWx1ZSBwcm9ncmFtID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXByb2dyYW0u
aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHByb2dyYW07CiAKQEAgLTQzNiwxMyArNDM1LDEz
IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIEludGVycHJldGVyOjpjYWxsRXYKICAgICBpZiAoY2Fs
bEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAg
Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KTsKLSAgICBFdmFsRXhlY3V0YWJsZSogZXZhbCA9IGNvZGVCbG9jay0+ZXZhbENvZGVDYWNoZSgp
LnRyeUdldChjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBwcm9ncmFtU291cmNlLCBzY29wZUNo
YWluKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZSgpOworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVC
bG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJh
bWUtPnNjb3BlQ2hhaW4oKTsKKyAgICBFdmFsRXhlY3V0YWJsZSogZXZhbCA9IGNhbGxlckNvZGVC
bG9jay0+ZXZhbENvZGVDYWNoZSgpLnRyeUdldChjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpLCBwcm9ncmFtU291cmNlLCBjYWxsZXJTY29wZUNoYWluKTsKIAogICAgIGlmICghZXZhbCkg
ewotICAgICAgICBpZiAoIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgaWYg
KCFjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhN
RTogV2UgY2FuIHVzZSB0aGUgcHJlcGFyc2VyIGluIHN0cmljdCBtb2RlLCB3ZSBqdXN0IG5lZWQg
YWRkaXRpb25hbCBsb2dpYwogICAgICAgICAgICAgLy8gdG8gcHJldmVudCBkdXBsaWNhdGVzLgog
ICAgICAgICAgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFtU291
cmNlLmNoYXJhY3RlcnMoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6
Tm9uU3RyaWN0SlNPTik7CkBAIC00NTEsMTYgKzQ1MCwxMDkgQEAgTkVWRVJfSU5MSU5FIEpTVmFs
dWUgSW50ZXJwcmV0ZXI6OmNhbGxFdgogICAgICAgICB9CiAKICAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb25WYWx1ZTsKLSAgICAgICAgZXZhbCA9IGNvZGVCbG9jay0+ZXZhbENvZGVDYWNoZSgpLmdl
dFNsb3coY2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpLCBwcm9ncmFtU291cmNlLCBzY29wZUNoYWluLCBleGNlcHRpb25WYWx1
ZSk7CisgICAgICAgIGV2YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRT
bG93KGNhbGxGcmFtZSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVy
Q29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFp
biwgZXhjZXB0aW9uVmFsdWUpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCFldmFsID09IGV4
Y2VwdGlvblZhbHVlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFldmFsKSkKICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUpOwogICAgIH0KIAot
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGNvZGVCbG9jay0+
dGhpc1JlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxl
ckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpLmpzVmFs
dWUoKTsKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc1ZhbHVlLCBjYWxsRnJhbWUp
KTsKLSAgICByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPmV4ZWN1
dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBy
ZWdpc3RlckZpbGUtPmJlZ2luKCkgKyByZWdpc3Rlck9mZnNldCwgc2NvcGVDaGFpbik7CisgICAg
SW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaW50ZXJw
cmV0ZXI7CisgICAgcmV0dXJuIGludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwg
dGhpc1ZhbHVlLCBjYWxsZXJTY29wZUNoYWluLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gaW50
ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmJlZ2luKCkgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplKTsKK30KKworQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBKU1ZhbHVlIGFyZ3VtZW50cywgaW50IGZpcnN0RnJlZVJlZ2lzdGVyKQoreworICAgIGlmICgh
YXJndW1lbnRzKSB7IC8vIGYuYXBwbHkoeCwgYXJndW1lbnRzKSwgd2l0aCBhcmd1bWVudHMgdW5t
b2RpZmllZC4KKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7CisgICAgICAgIENhbGxGcmFt
ZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSArIGZpcnN0RnJlZVJlZ2lzdGVyICsgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBSZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpOworICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyArIDEgfHwgIXJlZ2lzdGVy
RmlsZS0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkgeworICAgICAgICAgICAgY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGNhbGxGcmFtZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAg
IHVuc2lnbmVkIHBhcmFtZXRlckNvdW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9udW1Q
YXJhbWV0ZXJzOworICAgICAgICBSZWdpc3Rlciogc3JjID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIHBhcmFtZXRlckNvdW50Owor
ICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPiBwYXJhbWV0ZXJDb3VudCkK
KyAgICAgICAgICAgIHNyYyAtPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAg
UmVnaXN0ZXIqIGRzdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBmaXJzdEZyZWVSZWdpc3Rl
cjsKKyAgICAgICAgZHN0WzBdID0gdGhpc1ZhbHVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkKKyAgICAgICAgICAgIGRz
dFtpXSA9IHNyY1tpXTsKKworICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgcmV0dXJu
IG5ld0NhbGxGcmFtZTsKKyAgICB9CisKKyAgICBpZiAoYXJndW1lbnRzLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHsKKyAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNy
ZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgZmlyc3RGcmVlUmVnaXN0ZXIgKyAxICsgUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKKyAgICAgICAgaWYgKCFyZWdpc3RlckZp
bGUtPmdyb3cobmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKKyAgICAgICAgICAgIGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihj
YWxsRnJhbWUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgUmVn
aXN0ZXIqIGRzdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBmaXJzdEZyZWVSZWdpc3RlcjsK
KyAgICAgICAgZHN0WzBdID0gdGhpc1ZhbHVlOworCisgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoMSk7CisgICAgICAgIHJldHVybiBuZXdDYWxsRnJh
bWU7CisgICAgfQorCisgICAgaWYgKCFhcmd1bWVudHMuaXNPYmplY3QoKSkgeworICAgICAgICBj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJv
cihjYWxsRnJhbWUsICJGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkiLCBhcmd1bWVudHMpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoYXNPYmplY3QoYXJndW1lbnRzKS0+Y2xh
c3NJbmZvKCkgPT0gJkFyZ3VtZW50czo6c19pbmZvKSB7CisgICAgICAgIEFyZ3VtZW50cyogYXJn
c09iamVjdCA9IGFzQXJndW1lbnRzKGFyZ3VtZW50cyk7CisgICAgICAgIHVuc2lnbmVkIGFyZ0Nv
dW50ID0gYXJnc09iamVjdC0+bGVuZ3RoKGNhbGxGcmFtZSk7CisgICAgICAgIENhbGxGcmFtZSog
bmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAr
IGZpcnN0RnJlZVJlZ2lzdGVyICsgYXJnQ291bnQgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplKTsKKyAgICAgICAgaWYgKGFyZ0NvdW50ID4gQXJndW1lbnRzOjpNYXhBcmd1
bWVudHMgfHwgIXJlZ2lzdGVyRmlsZS0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkg
eworICAgICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRl
U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgICAgICBSZWdpc3RlciogZHN0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAr
IGZpcnN0RnJlZVJlZ2lzdGVyOworICAgICAgICBkc3RbMF0gPSB0aGlzVmFsdWU7CisgICAgICAg
IGFyZ3NPYmplY3QtPmNvcHlUb1JlZ2lzdGVycyhjYWxsRnJhbWUsICZkc3RbMV0sIGFyZ0NvdW50
KTsKKworICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KGFyZ0NvdW50ICsgMSk7CisgICAgICAgIHJldHVybiBuZXdDYWxsRnJhbWU7CisgICAgfQorCisg
ICAgaWYgKGlzSlNBcnJheSgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGFyZ3VtZW50cykpIHsK
KyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KGFyZ3VtZW50cyk7CisgICAgICAgIHVu
c2lnbmVkIGFyZ0NvdW50ID0gYXJyYXktPmxlbmd0aCgpOworICAgICAgICBDYWxsRnJhbWUqIG5l
d0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBm
aXJzdEZyZWVSZWdpc3RlciArIGFyZ0NvdW50ICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSk7CisgICAgICAgIGlmIChhcmdDb3VudCA+IEFyZ3VtZW50czo6TWF4QXJndW1l
bnRzIHx8ICFyZWdpc3RlckZpbGUtPmdyb3cobmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkpIHsK
KyAgICAgICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0
YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKyAgICAgICAgUmVnaXN0ZXIqIGRzdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBm
aXJzdEZyZWVSZWdpc3RlcjsKKyAgICAgICAgZHN0WzBdID0gdGhpc1ZhbHVlOworICAgICAgICBh
cnJheS0+Y29weVRvUmVnaXN0ZXJzKGNhbGxGcmFtZSwgJmRzdFsxXSwgYXJnQ291bnQpOworCisg
ICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJnQ291
bnQgKyAxKTsKKyAgICAgICAgcmV0dXJuIG5ld0NhbGxGcmFtZTsKKyAgICB9CisKKyAgICBKU09i
amVjdCogYXJnT2JqZWN0ID0gYXNPYmplY3QoYXJndW1lbnRzKTsKKyAgICB1bnNpZ25lZCBhcmdD
b3VudCA9IGFyZ09iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoKS50b1VJbnQzMihjYWxsRnJhbWUpOworICAgIENhbGxGcmFtZSogbmV3Q2FsbEZy
YW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0RnJl
ZVJlZ2lzdGVyICsgYXJnQ291bnQgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplKTsKKyAgICBpZiAoYXJnQ291bnQgPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyB8fCAhcmVn
aXN0ZXJGaWxlLT5ncm93KG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpKSB7CisgICAgICAgIGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJv
cihjYWxsRnJhbWUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgUmVnaXN0ZXIqIGRz
dCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBmaXJzdEZyZWVSZWdpc3RlcjsKKyAgICBkc3Rb
MF0gPSB0aGlzVmFsdWU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ0NvdW50OyAr
K2kpIHsKKyAgICAgICAgZHN0W2kgKyAxXSA9IGFzT2JqZWN0KGFyZ3VtZW50cyktPmdldChjYWxs
RnJhbWUsIGkpOworICAgICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
ZXhjZXB0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG5ld0NhbGxG
cmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJnQ291bnQgKyAxKTsKKyAgICBy
ZXR1cm4gbmV3Q2FsbEZyYW1lOwogfQogCiBJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoKQpAQCAt
MTIwMCwxNSArMTI5Miw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmVuZFJlcGVhdENhbGwoQ2FsbEZy
YW0KICAgICBtX3JlZ2lzdGVyRmlsZS5zaHJpbmsoY2xvc3VyZS5vbGRFbmQpOwogfQogCi1KU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFsLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
KQotewotICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBldmFsLT5jb21waWxlKGNhbGxGcmFt
ZSwgc2NvcGVDaGFpbik7Ci0gICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVycm9yKSkKLSAgICAg
ICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGNvbXBpbGVFcnJv
cikpOwotICAgIHJldHVybiBleGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBtX3Jl
Z2lzdGVyRmlsZS5zaXplKCkgKyBldmFsLT5nZW5lcmF0ZWRCeXRlY29kZSgpLm1fbnVtUGFyYW1l
dGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgc2NvcGVDaGFpbik7Ci19
Ci0KLUpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgaW50IGdsb2JhbFJlZ2lzdGVy
T2Zmc2V0LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKK0pTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIGludCBnbG9iYWxSZWdp
c3Rlck9mZnNldCkKIHsKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc1ZhbHVlLCBj
YWxsRnJhbWUpKTsKICAgICBBU1NFUlQoIXNjb3BlQ2hhaW4tPmdsb2JhbERhdGEtPmV4Y2VwdGlv
bik7CkBAIC0zMjE1LDEwICszMjk5LDkgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwogICAgICAg
ICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7CiAg
ICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwot
ICAgICAgICBpZiAoZGlyZWN0KSB7CisgICAgICAgIGlmIChkaXJlY3QpCiAgICAgICAgICAgICBi
YXNlVmFsdWUucHV0RGlyZWN0KGNhbGxGcmFtZSwgaWRlbnQsIGNhbGxGcmFtZS0+cih2YWx1ZSku
anNWYWx1ZSgpLCBzbG90KTsKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgYmFzZVZh
bHVlLnB1dChjYWxsRnJhbWUsIGlkZW50LCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSwg
c2xvdCk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIApAQCAtMzMzNCwxMCArMzQx
Nyw5IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
Y2FsbEZyYW1lLT5yKGJhc2UpLmpzVmFsdWUoKTsKICAgICAgICAgSWRlbnRpZmllciYgaWRlbnQg
PSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwogICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgaWYgKGRpcmVjdCkg
eworICAgICAgICBpZiAoZGlyZWN0KQogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dERpcmVjdChj
YWxsRnJhbWUsIGlkZW50LCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSwgc2xvdCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKTsKLSAgICAgICAgfSBl
bHNlCisgICAgICAgIGVsc2UKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBp
ZGVudCwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCksIHNsb3QpOwogICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OKCk7CiAKQEAgLTQxNjUsMTAgKzQyNDcsMTAgQEAgc2tpcF9pZF9jdXN0
b21fc2VsZjoKICAgICAgICAgSlNWYWx1ZSBmdW5jVmFsID0gY2FsbEZyYW1lLT5yKGZ1bmMpLmpz
VmFsdWUoKTsKIAogICAgICAgICBpZiAoaXNIb3N0RnVuY3Rpb24oZnVuY1ZhbCwgZ2xvYmFsRnVu
Y0V2YWwpKSB7Ci0gICAgICAgICAgICBSZWdpc3RlciogbmV3Q2FsbEZyYW1lID0gY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0OwotICAgICAgICAgICAgUmVnaXN0ZXIqIGFy
Z3YgPSBuZXdDYWxsRnJhbWUgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBh
cmdDb3VudDsKKyAgICAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1l
OjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAg
ICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGxf
ZXZhbCksIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBhc0Z1
bmN0aW9uKGZ1bmNWYWwpKTsKIAotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsRXZh
bChjYWxsRnJhbWUsIHJlZ2lzdGVyRmlsZSwgYXJndiwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0
KTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbChuZXdDYWxsRnJhbWUpOwogICAg
ICAgICAgICAgaWYgKChleGNlcHRpb25WYWx1ZSA9IGdsb2JhbERhdGEtPmV4Y2VwdGlvbikpCiAg
ICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKICAgICAgICAgICAgIGZ1bmN0aW9uUmV0dXJu
VmFsdWUgPSByZXN1bHQ7CkBAIC00MjYxLDk2ICs0MzQzLDggQEAgc2tpcF9pZF9jdXN0b21fc2Vs
ZjoKICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihjYWxs
RnJhbWUsIHYpOwogICAgICAgICBnb3RvIHZtX3Rocm93OwogICAgIH0KLSAgICBERUZJTkVfT1BD
T0RFKG9wX2xvYWRfdmFyYXJncykgewotICAgICAgICBpbnQgYXJnQ291bnREc3QgPSB2UENbMV0u
dS5vcGVyYW5kOwotICAgICAgICBpbnQgYXJnc09mZnNldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIAotICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+cihhcmdzT2Zm
c2V0KS5qc1ZhbHVlKCk7Ci0gICAgICAgIHVpbnQzMl90IGFyZ0NvdW50ID0gMDsKLSAgICAgICAg
aWYgKCFhcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGFyZ0NvdW50ID0gKHVpbnQzMl90KShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgICAgICAgICBpZiAoYXJnQ291bnQgPiBBcmd1
bWVudHM6Ok1heEFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0g
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgZ290
byB2bV90aHJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludDMyX3Qgc2l6ZURlbHRh
ID0gYXJnc09mZnNldCArIGFyZ0NvdW50ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplOwotICAgICAgICAgICAgUmVnaXN0ZXIqIG5ld0VuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyBzaXplRGVsdGE7Ci0gICAgICAgICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+Z3JvdyhuZXdF
bmQpIHx8ICgobmV3RW5kIC0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgIT0gc2l6ZURlbHRhKSkg
ewotICAgICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCghYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgp
KS0+aXNIb3N0RnVuY3Rpb24oKSk7Ci0gICAgICAgICAgICBpbnQzMl90IGV4cGVjdGVkUGFyYW1z
ID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPnBhcmFt
ZXRlckNvdW50KCk7Ci0gICAgICAgICAgICBpbnQzMl90IGlucGxhY2VBcmdzID0gbWluKHN0YXRp
Y19jYXN0PGludDMyX3Q+KGFyZ0NvdW50KSwgZXhwZWN0ZWRQYXJhbXMpOwotICAgICAgICAgICAg
aW50MzJfdCBpID0gMDsKLSAgICAgICAgICAgIFJlZ2lzdGVyKiBhcmdTdG9yZSA9IGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkgKyBhcmdzT2Zmc2V0OwotCi0gICAgICAgICAgICAvLyBGaXJzdCBzdGVw
IGlzIHRvIGNvcHkgdGhlICJleHBlY3RlZCIgcGFyYW1ldGVycyBmcm9tIHRoZWlyIG5vcm1hbCBs
b2NhdGlvbiByZWxhdGl2ZSB0byB0aGUgY2FsbGZyYW1lCi0gICAgICAgICAgICBmb3IgKDsgaSA8
IGlucGxhY2VBcmdzOyBpKyspCi0gICAgICAgICAgICAgICAgYXJnU3RvcmVbaV0gPSBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpW2kgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBl
eHBlY3RlZFBhcmFtc107Ci0gICAgICAgICAgICAvLyBUaGVuIHdlIGNvcHkgYW55IGFkZGl0aW9u
YWwgYXJndW1lbnRzIHRoYXQgbWF5IGJlIGZ1cnRoZXIgdXAgdGhlIHN0YWNrICgnLTEnIHRvIGFj
Y291bnQgZm9yICd0aGlzJykKLSAgICAgICAgICAgIGZvciAoOyBpIDwgc3RhdGljX2Nhc3Q8aW50
MzJfdD4oYXJnQ291bnQpOyBpKyspCi0gICAgICAgICAgICAgICAgYXJnU3RvcmVbaV0gPSBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpW2kgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUg
LSBleHBlY3RlZFBhcmFtcyAtIHN0YXRpY19jYXN0PGludDMyX3Q+KGFyZ0NvdW50KSAtIDFdOwot
ICAgICAgICB9IGVsc2UgaWYgKCFhcmd1bWVudHMuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAg
ICAgICAgICAgaWYgKCFhcmd1bWVudHMuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIGV4
Y2VwdGlvblZhbHVlID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoY2FsbEZyYW1lLCAiRnVuY3Rp
b24ucHJvdG90eXBlLmFwcGx5IiwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICBnb3RvIHZt
X3Rocm93OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFzT2JqZWN0KGFyZ3VtZW50
cyktPmNsYXNzSW5mbygpID09ICZBcmd1bWVudHM6OnNfaW5mbykgewotICAgICAgICAgICAgICAg
IEFyZ3VtZW50cyogYXJncyA9IGFzQXJndW1lbnRzKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAg
ICAgYXJnQ291bnQgPSBhcmdzLT5udW1Qcm92aWRlZEFyZ3VtZW50cyhjYWxsRnJhbWUpOwotICAg
ICAgICAgICAgICAgIGlmIChhcmdDb3VudCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGludDMyX3Qgc2l6ZURlbHRhID0gYXJnc09m
ZnNldCArIGFyZ0NvdW50ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAg
ICAgICAgICAgICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsg
c2l6ZURlbHRhOwotICAgICAgICAgICAgICAgIGlmICghcmVnaXN0ZXJGaWxlLT5ncm93KG5ld0Vu
ZCkgfHwgKChuZXdFbmQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSAhPSBzaXplRGVsdGEpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlU3RhY2tPdmVyZmxv
d0Vycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ3MtPmNvcHlUb1JlZ2lzdGVycyhj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBhcmdzT2Zmc2V0LCBhcmdDb3VudCk7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNBcnJheSgmY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCksIGFyZ3VtZW50cykpIHsKLSAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJy
YXkoYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICBhcmdDb3VudCA9IGFycmF5LT5sZW5ndGgo
KTsKLSAgICAgICAgICAgICAgICBpZiAoYXJnQ291bnQgPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50
cykgewotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihjYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQzMl90IHNpemVEZWx0YSA9
IGFyZ3NPZmZzZXQgKyBhcmdDb3VudCArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZTsKLSAgICAgICAgICAgICAgICBSZWdpc3RlciogbmV3RW5kID0gY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSArIHNpemVEZWx0YTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+Z3Jv
dyhuZXdFbmQpIHx8ICgobmV3RW5kIC0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgIT0gc2l6ZURl
bHRhKSkgewotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIHZtX3Ro
cm93OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcnJheS0+Y29weVRvUmVn
aXN0ZXJzKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGFyZ3NPZmZzZXQsIGFy
Z0NvdW50KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgSlNPYmplY3Qq
IGFyZ09iamVjdCA9IGFzT2JqZWN0KGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgYXJnQ291
bnQgPSBhcmdPYmplY3QtPmdldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCkudG9VSW50MzIoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJnQ291
bnQgPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgICAgICBleGNl
cHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwotICAgICAg
ICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpbnQzMl90IHNpemVEZWx0YSA9IGFyZ3NPZmZzZXQgKyBhcmdDb3VudCArIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAgICAgICBSZWdpc3Rlciog
bmV3RW5kID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHNpemVEZWx0YTsKLSAgICAgICAgICAg
ICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+Z3JvdyhuZXdFbmQpIHx8ICgobmV3RW5kIC0gY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSkgIT0gc2l6ZURlbHRhKSkgewotICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwotICAg
ICAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBSZWdpc3RlciogYXJnc0J1ZmZlciA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkg
KyBhcmdzT2Zmc2V0OwotICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBh
cmdDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3NCdWZmZXJbaV0gPSBhc09i
amVjdChhcmd1bWVudHMpLT5nZXQoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgICAgICAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNhbGxG
cmFtZS0+dW5jaGVja2VkUihhcmdDb3VudERzdCkgPSBSZWdpc3Rlcjo6d2l0aEludChhcmdDb3Vu
dCArIDEpOwotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9sb2FkX3ZhcmFyZ3MpOwot
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7Ci0gICAgfQogICAgIERFRklORV9PUENPREUob3Bf
Y2FsbF92YXJhcmdzKSB7Ci0gICAgICAgIC8qIGNhbGxfdmFyYXJncyBmdW5jKHIpIGFyZ0NvdW50
UmVnKHIpIGJhc2VSZWdpc3Rlck9mZnNldChuKQorICAgICAgICAvKiBjYWxsX3ZhcmFyZ3MgY2Fs
bGVlKHIpIHRoaXNWYWx1ZShyKSBhcmd1bWVudHMocikgZmlyc3RGcmVlUmVnaXN0ZXIobikKICAg
ICAgICAgIAogICAgICAgICAgUGVyZm9ybSBhIGZ1bmN0aW9uIGNhbGwgd2l0aCBhIGR5bmFtaWMg
c2V0IG9mIGFyZ3VtZW50cy4KICAgICAgICAgIApAQCAtNDM2MSwxMyArNDM1NSwxNiBAQCBza2lw
X2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgZHN0IGlzIHdoZXJlIG9wX3JldCBzaG91bGQgc3Rv
cmUgaXRzIHJlc3VsdC4KICAgICAgICAgICovCiAgICAgICAgIAotICAgICAgICBpbnQgZnVuYyA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBhcmdDb3VudFJlZyA9IHZQQ1syXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIAotICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIoZnVuYykuanNWYWx1ZSgp
OwotICAgICAgICBpbnQgYXJnQ291bnQgPSBjYWxsRnJhbWUtPnIoYXJnQ291bnRSZWcpLmkoKTsK
LSAgICAgICAgcmVnaXN0ZXJPZmZzZXQgKz0gYXJnQ291bnQ7CisgICAgICAgIEpTVmFsdWUgdiA9
IGNhbGxGcmFtZS0+cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsK
KyAgICAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBjYWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFu
ZCkuanNWYWx1ZSgpOworICAgICAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSB2UENbNF0udS5v
cGVyYW5kOworCisgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gbG9hZFZhcmFyZ3Mo
Y2FsbEZyYW1lLCByZWdpc3RlckZpbGUsIHRoaXNWYWx1ZSwgYXJndW1lbnRzLCBmaXJzdEZyZWVS
ZWdpc3Rlcik7CisgICAgICAgIGlmICgoZXhjZXB0aW9uVmFsdWUgPSBnbG9iYWxEYXRhLT5leGNl
cHRpb24pKQorICAgICAgICAgICAgZ290byB2bV90aHJvdzsKKyAgICAgICAgaW50IGFyZ0NvdW50
ID0gbmV3Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpOworCiAgICAgICAg
IENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxE
YXRhKHYsIGNhbGxEYXRhKTsKICAgICAgICAgCkBAIC00MzgwLDIxICs0Mzc3LDIwIEBAIHNraXBf
aWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgQ2FsbEZyYW1lKiBwcmV2aW91c0NhbGxGcmFtZSA9IGNhbGxG
cmFtZTsKICAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNhbGxEYXRhLmpz
LmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7Ci0gICAgICAg
ICAgICBjYWxsRnJhbWUgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChuZXdDb2RlQmxvY2ss
IHJlZ2lzdGVyRmlsZSwgY2FsbEZyYW1lLCByZWdpc3Rlck9mZnNldCwgYXJnQ291bnQpOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCFjYWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICAgICAgY2Fs
bEZyYW1lID0gcHJldmlvdXNDYWxsRnJhbWU7CisgICAgICAgICAgICBuZXdDYWxsRnJhbWUgPSBz
bGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChuZXdDb2RlQmxvY2ssIHJlZ2lzdGVyRmlsZSwgbmV3
Q2FsbEZyYW1lLCAwLCBhcmdDb3VudCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIW5ld0Nh
bGxGcmFtZSkpIHsKICAgICAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxv
Y2ssIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgY2FsbERhdGFTY29wZUNo
YWluLCBwcmV2aW91c0NhbGxGcmFtZSwgYXJnQ291bnQsIGFzRnVuY3Rpb24odikpOworICAgICAg
ICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgdlBDICsgT1BDT0RFX0xFTkdU
SChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgYXJnQ291
bnQsIGFzRnVuY3Rpb24odikpOwogICAgICAgICAgICAgY29kZUJsb2NrID0gbmV3Q29kZUJsb2Nr
OworICAgICAgICAgICAgY2FsbEZyYW1lID0gbmV3Q2FsbEZyYW1lOwogICAgICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jayA9PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICp0
b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1lOwogICAgICAgICAgICAgdlBDID0gbmV3Q29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotICAgICAgICAgICAgCisKICNpZiBFTkFCTEUo
T1BDT0RFX1NUQVRTKQogICAgICAgICAgICAgT3Bjb2RlU3RhdHM6OnJlc2V0TGFzdEluc3RydWN0
aW9uKCk7CiAjZW5kaWYKQEAgLTQ0MDQsMTEgKzQ0MDAsNiBAQCBza2lwX2lkX2N1c3RvbV9zZWxm
OgogICAgICAgICAKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgewogICAg
ICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKTsKLSAgICAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpj
cmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAg
ICAgIGlmICghcmVnaXN0ZXJGaWxlLT5ncm93KG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpKSB7
Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTdGFja092ZXJmbG93RXJy
b3IoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotICAgICAgICAg
ICAgfQogICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9QQ09ERV9MRU5H
VEgob3BfY2FsbF92YXJhcmdzKSwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLCBhcmdDb3VudCwgYXNP
YmplY3QodikpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmgJKHJldmlzaW9uIDk4NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBleGVjdXRlKFByb2dyYW1FeGVjdXRhYmxlKiwg
Q2FsbEZyYW1lKiwgU2NvcGVDaGFpbk5vZGUqLCBKU09iamVjdCogdGhpc09iaik7CiAgICAgICAg
IEpTVmFsdWUgZXhlY3V0ZUNhbGwoQ2FsbEZyYW1lKiwgSlNPYmplY3QqIGZ1bmN0aW9uLCBDYWxs
VHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
OwogICAgICAgICBKU09iamVjdCogZXhlY3V0ZUNvbnN0cnVjdChDYWxsRnJhbWUqLCBKU09iamVj
dCogZnVuY3Rpb24sIENvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmLCBjb25zdCBB
cmdMaXN0Jik7Ci0gICAgICAgIEpTVmFsdWUgZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbE5v
ZGUsIENhbGxGcmFtZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBTY29wZUNoYWluTm9kZSopOworICAg
ICAgICBKU1ZhbHVlIGV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNWYWx1ZSBleGVjdXRlKEV2
YWxFeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjb3BlQ2hhaW5O
b2RlKiwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KTsKIAogICAgICAgICBKU1ZhbHVlIHJldHJp
ZXZlQXJndW1lbnRzKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKSBjb25zdDsKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSByZXRyaWV2ZUNhbGxlcihDYWxsRnJhbWUqLCBKU0Z1bmN0
aW9uKikgY29uc3Q7CkBAIC0xMjUsNyArMTI2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IAogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBsZXIoKSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0
KCk7IH0KIAotICAgICAgICBORVZFUl9JTkxJTkUgSlNWYWx1ZSBjYWxsRXZhbChDYWxsRnJhbWUq
LCBSZWdpc3RlckZpbGUqLCBSZWdpc3RlciogYXJndiwgaW50IGFyZ2MsIGludCByZWdpc3Rlck9m
ZnNldCk7CiAgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdGhyb3dFeGNlcHRpb24o
Q2FsbEZyYW1lKiYsIEpTVmFsdWUmLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgICAg
IE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lELCBpbnQgZmly
c3RMaW5lLCBpbnQgbGFzdExpbmUpOwogCkBAIC0xMzksOCArMTM5LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW5kUmVwZWF0Q2FsbChDYWxsRnJhbWVDbG9zdXJlJik7CiAgICAg
ICAgIEpTVmFsdWUgZXhlY3V0ZShDYWxsRnJhbWVDbG9zdXJlJik7CiAKLSAgICAgICAgSlNWYWx1
ZSBleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGludCBnbG9iYWxSZWdpc3Rlck9mZnNldCwgU2NvcGVDaGFpbk5vZGUqKTsKLQogI2lmIEVOQUJM
RShJTlRFUlBSRVRFUikKICAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZShDYWxsRnJh
bWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWUmIGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgTkVW
RVJfSU5MSU5FIGJvb2wgcmVzb2x2ZVNraXAoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1Zh
bHVlJiBleGNlcHRpb25WYWx1ZSk7CkBAIC0xOTAsNiArMTg4LDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gIXRoaXNWYWx1ZS5pc09iamVjdCgpIHx8IHRoaXNWYWx1ZS50b1Ro
aXNPYmplY3QoZXhlYykgPT0gdGhpc1ZhbHVlOwogICAgIH0KIAorICAgIGlubGluZSBKU1ZhbHVl
IEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFsLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUs
IHNjb3BlQ2hhaW4sIG1fcmVnaXN0ZXJGaWxlLnNpemUoKSArIDEgKyBSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemUpOworICAgIH0KKworICAgIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUq
KTsKKyAgICBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFtZSosIFJlZ2lzdGVyRmlsZSos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgaW50IGZpcnN0RnJlZVJlZ2lz
dGVyKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBJbnRlcnByZXRlcl9oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJG
aWxlLmNwcAkocmV2aXNpb24gOTg1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMjQgQEAg
UmVnaXN0ZXJGaWxlOjp+UmVnaXN0ZXJGaWxlKCkKICAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2Nh
dGUoKTsKIH0KIAorYm9vbCBSZWdpc3RlckZpbGU6Omdyb3dTbG93Q2FzZShSZWdpc3RlciogbmV3
RW5kKQoreworICAgIGlmIChuZXdFbmQgPD0gbV9jb21taXRFbmQpIHsKKyAgICAgICAgbV9lbmQg
PSBuZXdFbmQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGxvbmcgZGVsdGEg
PSByb3VuZFVwQWxsb2NhdGlvblNpemUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obmV3RW5kKSAt
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSwgY29tbWl0U2l6ZSk7CisgICAg
aWYgKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSArIGRlbHRhID4gc3RhdGlj
X2Nhc3Q8Y2hhcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSArIG1fcmVzZXJ2YXRpb24uc2l6ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChtX2Nv
bW1pdEVuZCwgZGVsdGEpOworICAgIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KGRlbHRhKTsKKyAg
ICBtX2NvbW1pdEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJlZ2lzdGVyKj4ocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsgZGVsdGEpOworICAgIG1fZW5kID0gbmV3RW5k
OworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewogICAg
IGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCShyZXZpc2lvbiA5
ODU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNzEsOCArNzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CiAgICAgICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gZW5kKCkgLSBiZWdpbigpOyB9CiAKLSAgICAgICAgYm9v
bCBncm93KFJlZ2lzdGVyKiBuZXdFbmQpOwotICAgICAgICB2b2lkIHNocmluayhSZWdpc3Rlciog
bmV3RW5kKTsKKyAgICAgICAgYm9vbCBncm93KFJlZ2lzdGVyKik7CisgICAgICAgIHZvaWQgc2hy
aW5rKFJlZ2lzdGVyKik7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgc2l6ZV90IGNvbW1pdHRl
ZEJ5dGVDb3VudCgpOwogICAgICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7
CkBAIC04Myw2ICs4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcml2
YXRlOgorICAgICAgICBib29sIGdyb3dTbG93Q2FzZShSZWdpc3RlciopOwogICAgICAgICB2b2lk
IHJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpOwogICAgICAgICB2b2lkIGFkZFRvQ29tbWl0dGVkQnl0
ZUNvdW50KGxvbmcpOwogICAgICAgICBSZWdpc3RlciogbV9lbmQ7CkBAIC0xMTMsMjEgKzExNCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgaWYgKG5ld0VuZCA8PSBtX2VuZCkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAgIGlmIChuZXdF
bmQgPD0gbV9jb21taXRFbmQpIHsKLSAgICAgICAgICAgIG1fZW5kID0gbmV3RW5kOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBsb25nIGRlbHRhID0gcm91
bmRVcEFsbG9jYXRpb25TaXplKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG5ld0VuZCkgLSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCksIGNvbW1pdFNpemUpOwotICAgICAgICBp
ZiAocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsgZGVsdGEgPiBzdGF0aWNf
Y2FzdDxjaGFyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpICsgbV9yZXNlcnZhdGlvbi5zaXplKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21t
aXQobV9jb21taXRFbmQsIGRlbHRhKTsKLSAgICAgICAgYWRkVG9Db21taXR0ZWRCeXRlQ291bnQo
ZGVsdGEpOwotICAgICAgICBtX2NvbW1pdEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJlZ2lz
dGVyKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsgZGVsdGEpOwotICAg
ICAgICBtX2VuZCA9IG5ld0VuZDsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biBncm93U2xvd0Nhc2UobmV3RW5kKTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gOTg1ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw3ICsyOTQs
NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9P
UChvcF9qbmdyZWF0ZXJlcSkKICAgICAgICAgREVGSU5FX09QKG9wX2pzcikKICAgICAgICAgREVG
SU5FX09QKG9wX2p0cnVlKQotICAgICAgICBERUZJTkVfT1Aob3BfbG9hZF92YXJhcmdzKQogICAg
ICAgICBERUZJTkVfT1Aob3BfbG9vcCkKICAgICAgICAgREVGSU5FX09QKG9wX2xvb3BfaGludCkK
ICAgICAgICAgREVGSU5FX09QKG9wX2xvb3BfaWZfbGVzcykKQEAgLTQ3MCw3ICs0NjksNiBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3Bfam5ncmVhdGVyKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5ncmVh
dGVyZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qdHJ1ZSkKLSAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2xvYWRfdmFyYXJncykKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2xvb3BfaWZfbGVzcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3Bf
aWZfbGVzc2VxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9pZl9ncmVhdGVy
KQpAQCAtNTM5LDE0ICs1MzcsMTQgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQ
dHIqIGZ1bgogI2lmIEVOQUJMRShERkdfSklUKSB8fCBFTkFCTEUoSklUX1ZFUkJPU0UpCiAgICAg
bV9zdGFydE9mQ29kZSA9IGxhYmVsKCk7CiAjZW5kaWYKLSAgICAKKwogICAgIC8vIEp1c3QgYWRk
IGEgbGl0dGxlIGJpdCBvZiByYW5kb21uZXNzIHRvIHRoZSBjb2RlZ2VuCiAgICAgaWYgKG1fcmFu
ZG9tR2VuZXJhdG9yLmdldFVpbnQzMigpICYgMSkKICAgICAgICAgbm9wKCk7CiAKLSAgICAvLyBD
b3VsZCB1c2UgYSBwb3BfbSwgYnV0IHdvdWxkIG5lZWQgdG8gb2Zmc2V0IHRoZSBmb2xsb3dpbmcg
aW5zdHJ1Y3Rpb24gaWYgc28uCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJl
Z1QyKTsKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDIsIFJlZ2lzdGVyRmlsZTo6
UmV0dXJuUEMpOworICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVC
bG9jaywgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0
aGlzKTsKIApAQCAtNTg2LDkgKzU4NCw2IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShD
b2RlUHRyKiBmdW4KICAgICAgICAgfQogI2VuZGlmCiAKLSAgICAgICAgLy8gSW4gdGhlIGNhc2Ug
b2YgYSBmYXN0IGxpbmtlZCBjYWxsLCB3ZSBkbyBub3Qgc2V0IHRoaXMgdXAgaW4gdGhlIGNhbGxl
ci4KLSAgICAgICAgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2Nr
LCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jayk7Ci0KICAgICAgICAgYWRkUHRyKEltbTMyKG1fY29k
ZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3RlciwgcmVnVDEpOwogICAgICAgICByZWdpc3RlckZpbGVDaGVjayA9IGJyYW5jaFB0
cihCZWxvdywgQWJzb2x1dGVBZGRyZXNzKG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lz
dGVyRmlsZSgpLmFkZHJlc3NPZkVuZCgpKSwgcmVnVDEpOwogICAgIH0KQEAgLTYxMiw4ICs2MDcs
MTAgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgICAgICBh
cml0eUNoZWNrID0gbGFiZWwoKTsKICAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKHJlZ1QyKTsKICAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QyLCBSZWdp
c3RlckZpbGU6OlJldHVyblBDKTsKKyAgICAgICAgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1l
SGVhZGVyKG1fY29kZUJsb2NrLCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jayk7CisKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRD
b3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMSk7CiAgICAg
ICAgIGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7Ci0gICAgICAgIHJlc3RvcmVB
cmd1bWVudFJlZmVyZW5jZSgpOwogCiAgICAgICAgIEpJVFN0dWJDYWxsKHRoaXMsIG1fY29kZUJs
b2NrLT5tX2lzQ29uc3RydWN0b3IgPyBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlf
b3BfY2FsbF9hcml0eUNoZWNrKS5jYWxsKGNhbGxGcmFtZVJlZ2lzdGVyKTsKIApAQCAtNjgzLDcg
KzY4MCw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAgICBt
X2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9j
b2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKLSAgICAgICAgaW5m
by5pc0NhbGwgPSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmlzQ2FsbDsK
KyAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm9baV0uY2FsbFR5cGU7CiAgICAgICAgIGluZm8uYnl0ZWNvZGVJbmRleCA9IG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uYnl0ZWNvZGVJbmRleDsKICAgICAgICAgaW5mby5j
YWxsUmV0dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0
dXJuTG9jYXRpb24pKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aEJl
Z2luKTsKQEAgLTcxNSwyMyArNzEyLDE5IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShD
b2RlUHRyKiBmdW4KICAgICByZXR1cm4gSklUQ29kZShyZXN1bHQsIEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKIH0KIAotdm9pZCBKSVQ6OmxpbmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxv
Y2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29k
ZVB0ciBjb2RlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgaW50IGNhbGxlckFyZ0NvdW50
LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
K3ZvaWQgSklUOjpsaW5rRm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKSVQ6OkNvZGVQdHIgY29kZSwg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogCi0gICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgbGluayBj
YWxscyB3aXRoIHRoZSBleGFjdCBudW1iZXIgb2YgYXJndW1lbnRzLgotICAgIC8vIElmIHRoaXMg
aXMgYSBuYXRpdmUgY2FsbCBjYWxsZWVDb2RlQmxvY2sgaXMgbnVsbCBzbyB0aGUgbnVtYmVyIG9m
IHBhcmFtZXRlcnMgaXMgdW5pbXBvcnRhbnQKLSAgICBpZiAoIWNhbGxlZUNvZGVCbG9jayB8fCAo
Y2FsbGVyQXJnQ291bnQgPT0gY2FsbGVlQ29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKSB7Ci0g
ICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKLSAgICAgICAgY2FsbExp
bmtJbmZvLT5jYWxsZWUuc2V0KCpnbG9iYWxEYXRhLCBjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdp
biwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKLSAgICAgICAg
Y2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQoKmdsb2JhbERhdGEsIGNhbGxlckNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLCBjb2RlKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxp
bmtJbmNvbWluZ0NhbGwoY2FsbExpbmtJbmZvKTsKLSAgICB9CisgICAgQVNTRVJUKCFjYWxsTGlu
a0luZm8tPmlzTGlua2VkKCkpOworICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCgqZ2xvYmFs
RGF0YSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5z
ZXQoKmdsb2JhbERhdGEsIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxl
ZSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIs
IGNvZGUpOworCisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29kZUJs
b2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxMaW5rSW5mbyk7CiAKLSAgICAvLyBwYXRjaCB0aGUg
Y2FsbCBzbyB3ZSBkbyBub3QgY29udGludWUgdG8gdHJ5IHRvIGxpbmsuCisgICAgLy8gUGF0Y2gg
dGhlIHNsb3cgcGF0Y2ggc28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRyeSB0byBsaW5rLgogICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKSwg
Z2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsKCkpOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk4NTg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRy
IGhvdFBhdGhCZWdpbjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaG90UGF0aE90aGVy
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAg
ICAgIGJvb2wgaXNDYWxsOworICAgICAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBl
OwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogICAgIH07CiAKQEAgLTI2NCw3ICsy
NjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKHJldHVybkFkZHJlc3MpOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIHZvaWQgbGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayog
Y2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgQ29kZVB0ciwgQ2Fs
bExpbmtJbmZvKiwgaW50IGNhbGxlckFyZ0NvdW50LCBKU0dsb2JhbERhdGEqLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKKyAgICAgICAgc3RhdGljIHZvaWQgbGlua0ZvcihKU0Z1bmN0aW9uKiBj
YWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVC
bG9jaywgQ29kZVB0ciwgQ2FsbExpbmtJbmZvKiwgSlNHbG9iYWxEYXRhKiwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdHJ1Y3QgSlNSSW5mbyB7CkBA
IC0zMDIsMTEgKzMwMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhZGRKdW1w
KEp1bXAsIGludCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCwgaW50KTsK
IAotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwotICAgICAgICB2b2lkIGNvbXBp
bGVPcENhbGxWYXJhcmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbik7Ci0gICAgICAgIHZvaWQg
Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKLSAgICAgICAgdm9pZCBjb21waWxl
T3BDYWxsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgT3Bjb2Rl
SUQgb3Bjb2RlSUQpOwotICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxWYXJhcmdzU2xvd0Nhc2Uo
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKE9wY29kZUlELCBJbnN0cnVjdGlv
biosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BD
YWxsU2xvd0Nhc2UoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgdm9pZCBj
b21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2Fs
bEV2YWwoKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAKICAgICAgICAgZW51bSBDb21waWxlT3BTdHJpY3RF
cVR5cGUgeyBPcFN0cmljdEVxLCBPcE5TdHJpY3RFcSB9OwogICAgICAgICB2b2lkIGNvbXBpbGVP
cFN0cmljdEVxKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBl
IHR5cGUpOwpAQCAtODE0LDcgKzgxNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRfb3Bfam5ncmVhdGVyZXEoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2pzcihJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rp
b24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2xvYWRfdmFyYXJncyhJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfbG9vcChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfbG9vcF9oaW50KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb29w
X2lmX2xlc3MoSW5zdHJ1Y3Rpb24qKTsKQEAgLTkxNyw3ICs5MTYsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmdyZWF0ZXIoSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5ncmVhdGVyZXEoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9h
ZF92YXJhcmdzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaWZfbGVzcyhJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2lmX2dyZWF0ZXIoSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiA5ODU4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAjaW5jbHVkZSAiSklU
LmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKQEAg
LTQ2LDE1ICs0Nyw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKQotewotICAgIC8v
IHJlZ1QwIGhvbGRzIGNhbGxlZSwgcmVnVDEgaG9sZHMgYXJnQ291bnQKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwg
cmVnVDMpOyAvLyBzY29wZUNoYWluCi0gICAgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKHJl
Z1QxLCBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpOwotICAgIGVtaXRQdXRDZWxsVG9DYWxs
RnJhbWVIZWFkZXIocmVnVDAsIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKTsKLSAgICBlbWl0UHV0Q2Vs
bFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pOwotfQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX3B1dF9yZXN1bHQoSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQogewogICAgIGludCBkc3QgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC02Miw1
MiArNTQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX3B1dF9yZXN1bHQoSW5zdHJ1CiAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxWYXJhcmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgY2FsbGVlID0g
aW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBhcmdDb3VudFJlZ2lzdGVyID0gaW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBlbWl0TG9hZFBheWxvYWQoYXJnQ291bnRSZWdpc3RlciwgcmVnVDIpOyAvLyBhcmdDb3Vu
dAotICAgIGFkZFB0cihJbW0zMihyZWdpc3Rlck9mZnNldCksIHJlZ1QyLCByZWdUMyk7IC8vIHJl
Z2lzdGVyT2Zmc2V0Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoY2FsbGVlLCBy
ZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1QxLCBK
U0Z1bmN0aW9uVHlwZSkpOwotCi0gICAgLy8gU3BlY3VsYXRpdmVseSByb2xsIHRoZSBjYWxsZnJh
bWUsIGFzc3VtaW5nIGFyZ0NvdW50IHdpbGwgbWF0Y2ggdGhlIGFyaXR5LgotICAgIG11bDMyKFRy
dXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDMsIHJlZ1QzKTsKLSAgICBhZGRQdHIo
Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QzKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgdGFnRm9yKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUsIHJlZ1QzKSk7
Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIHBheWxvYWRGb3IoUmVnaXN0ZXJGaWxl
OjpDYWxsZXJGcmFtZSwgcmVnVDMpKTsKLSAgICBtb3ZlKHJlZ1QzLCBjYWxsRnJhbWVSZWdpc3Rl
cik7Ci0KLSAgICBtb3ZlKHJlZ1QyLCByZWdUMSk7IC8vIGFyZ0NvdW50Ci0KLSAgICBlbWl0TmFr
ZWRDYWxsKG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsKCkpOwotCi0gICAg
c2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxWYXJhcmdzU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0KLSAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBjYWxs
ZWUpOwotICAgIEp1bXAgbm90Q2VsbCA9IGp1bXAoKTsKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsgLy8gTmVl
ZCB0byByZXN0b3JlIGNlbGwgdGFnIGluIHJlZ1QxIGJlY2F1c2UgaXQgd2FzIGNsb2JiZXJlZC4K
LSAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0KLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChy
ZWdUMSwgcmVnVDApOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QzKTsKLSAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChyZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotCi0gICAgc2Ft
cGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgZW1pdE9wdGltaXphdGlvbkNo
ZWNrKFJldE9wdGltaXphdGlvbkNoZWNrKTsKQEAgLTE1MywyMiArOTksMjIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKElucwogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKywgb3BfY2FsbCk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxf
ZXZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKywgb3BfY2FsbF9ldmFsKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgpOwogfQotCisgCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFZh
cmFyZ3NTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZShvcF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVj
dChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKywgb3BfY29uc3RydWN0KTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Nh
bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE3OCwxMiArMTI0LDEyIEBA
IHZvaWQgSklUOjplbWl0X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnIKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
Y29tcGlsZU9wQ2FsbChvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfZXZhbCwgY3VycmVudElu
c3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgY29t
cGlsZU9wQ2FsbFZhcmFyZ3MoY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBjb21waWxlT3BDYWxs
KG9wX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE5MSwxMDIgKzEzNywxNjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y29uc3RydWN0KEluc3RydWN0aW9uKgogICAgIGNvbXBpbGVPcENhbGwob3BfY29uc3RydWN0LCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKK3ZvaWQgSklU
Ojpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGlu
dCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGFyZ3VtZW50
cyA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIg
PSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZTsKKyAg
ICBKdW1wTGlzdCBlbmQ7CisgICAgaWYgKG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkKKyAg
ICAgICAgJiYgYXJndW1lbnRzID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpCisg
ICAgICAgICYmIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPT0gMSkgeworICAgICAgICBl
bWl0TG9hZFRhZyhhcmd1bWVudHMsIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWcpKSk7CisKKyAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZp
bGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QyKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFyZ3VtZW50czo6TWF4QXJndW1lbnRzICsg
MSkpKTsKKyAgICAgICAgLy8gcmVnVDI6IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzCisKKyAg
ICAgICAgbW92ZShyZWdUMiwgcmVnVDMpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoZmly
c3RGcmVlUmVnaXN0ZXIgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpLCByZWdU
Myk7CisgICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgcmVnVDMpOworICAgICAgICBh
ZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QzKTsKKyAgICAgICAgLy8gcmVnVDM6IG5ld0Nh
bGxGcmFtZQorCisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hQdHIoQmVsb3csIEFic29s
dXRlQWRkcmVzcyhtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5hZGRy
ZXNzT2ZFbmQoKSksIHJlZ1QzKSk7CisKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBBcmd1bWVudENv
dW50LgorICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRh
Z0ZvcihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QzKSk7CisgICAgICAgIHN0b3Jl
MzIocmVnVDIsIHBheWxvYWRGb3IoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMykp
OworCisgICAgICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnIGFuZCBjb3B5IGFyZ3VtZW50cy4KKyAg
ICAgICAgbmVnMzIocmVnVDIpOworICAgICAgICBlbWl0TG9hZCh0aGlzVmFsdWUsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSAtKFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkpKSk7CisgICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywg
cmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
IC0oUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSkpKTsKKyAgICAgICAgZW5kLmFwcGVuZChicmFuY2hBZGQzMihaZXJv
LCBJbW0zMigxKSwgcmVnVDIpKTsKKworICAgICAgICBMYWJlbCBjb3B5TG9vcCA9IGxhYmVsKCk7
CisgICAgICAgIGxvYWQzMihCYXNlSW5kZXgoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QyLCBUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkgLSgoUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgMSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKEJhc2VJbmRleChjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpIC0oKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIDEp
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpLCByZWdUMSk7CisgICAgICAg
IHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSAtKFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKSk7
CisgICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpIC0oUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSkpKTsKKyAgICAgICAgYnJhbmNoQWRkMzIoTm9uWmVybywgSW1tMzIoMSksIHJlZ1QyKS5saW5r
VG8oY29weUxvb3AsIHRoaXMpOworCisgICAgICAgIGVuZC5hcHBlbmQoanVtcCgpKTsKKyAgICB9
CisKKyAgICBpZiAobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9PSAxKQorICAgICAgICBz
bG93Q2FzZS5saW5rKHRoaXMpOworCisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X29wX2xvYWRfdmFyYXJncyk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodGhpc1ZhbHVlKTsK
KyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChhcmd1bWVudHMpOworICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KEltbTMyKGZpcnN0RnJlZVJlZ2lzdGVyKSk7CisgICAgc3R1YkNhbGwuY2FsbChyZWdU
Myk7CisKKyAgICBpZiAobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9PSAxKQorICAgICAg
ICBlbmQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbCgpCit7Cisg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2NhbGxfZXZhbCk7IC8vIEluaXRp
YWxpemVzIFNjb3BlQ2hhaW47IFJldHVyblBDOyBDb2RlQmxvY2suCisgICAgc3R1YkNhbGwuY2Fs
bCgpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworCisg
ICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgZW1pdExvYWQoUmVnaXN0ZXJGaWxlOjpD
YWxsZWUsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsKKworICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVC
bG9jayk7Cit9CisKIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewog
ICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGFyZ0Nv
dW50ID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCByZWdpc3Rlck9mZnNldCA9
IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAotICAgIEp1bXAgd2FzRXZhbDsKKyAgICAvKiBD
YWxsZXIgYWx3YXlzOgorICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2Fs
bGVlIGNhbGxGcmFtZS4KKyAgICAgICAgLSBJbml0aWFsaXplcyBBcmd1bWVudENvdW50OyBDYWxs
ZXJGcmFtZTsgQ2FsbGVlLgorCisgICAgICAgRm9yIGEgSlMgY2FsbDoKKyAgICAgICAgLSBDYWxs
ZXIgaW5pdGlhbGl6ZXMgU2NvcGVDaGFpbi4KKyAgICAgICAgLSBDYWxsZWUgaW5pdGlhbGl6ZXMg
UmV0dXJuUEM7IENvZGVCbG9jay4KKyAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1l
UmVnaXN0ZXIgdXBvbiByZXR1cm4uCisKKyAgICAgICBGb3IgYSBub24tSlMgY2FsbDoKKyAgICAg
ICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENvZGVCbG9jay4K
KyAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdXBvbiByZXR1cm4u
CisgICAgKi8KKyAgICAKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzKQorICAg
ICAgICBjb21waWxlTG9hZFZhcmFyZ3MoaW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgeworICAgICAg
ICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCByZWdUMyk7CisKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdU
MykpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmdDb3VudCksIHBheWxvYWRGb3Io
UmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMykpOworICAgIH0gLy8gcmVnVDMgaG9s
ZHMgbmV3Q2FsbEZyYW1lIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KKyAgICBlbWl0
TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWUu
CisKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMywgUmVnaXN0
ZXJGaWxlOjpDYWxsZXJGcmFtZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKKyAgICBlbWl0U3RvcmUoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1QxLCByZWdUMCwgcmVn
VDMpOworICAgIG1vdmUocmVnVDMsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKwogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wX2NhbGxfZXZhbCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGNhbGxl
ZSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEpJVDo6SW1tMzIocmVnaXN0ZXJPZmZz
ZXQpKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSklUOjpJbW0zMihhcmdDb3VudCkp
OwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgICAgIHdhc0V2YWwgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Cisg
ICAgICAgIGNvbXBpbGVDYWxsRXZhbCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
ZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwotCiAgICAgRGF0YUxhYmVsUHRyIGFkZHJl
c3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7Ci0KICAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVF
TkNFKHNlcXVlbmNlT3BDYWxsKTsKLQotICAgIEp1bXAganVtcFRvU2xvdyA9IGJyYW5jaFB0cldp
dGhQYXRjaChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRy
dXN0ZWRJbW1QdHIoMCkpOwotCisgICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRj
aChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJ
bW1QdHIoMCkpOwogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlT3BDYWxs
KTsKIAotICAgIGFkZFNsb3dDYXNlKGp1bXBUb1Nsb3cpOwotICAgIEFTU0VSVF9KSVRfT0ZGU0VU
KGRpZmZlcmVuY2VCZXR3ZWVuKGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIGp1bXBUb1Ns
b3cpLCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXApOworICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworCisgICAgQVNTRVJUX0pJVF9PRkZTRVQoZGlm
ZmVyZW5jZUJldHdlZW4oYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgc2xvd0Nhc2UpLCBw
YXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXApOwogICAgIEFTU0VSVChtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CiAgICAg
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5hcHBlbmQoU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mbygpKTsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlv
bkNoZWNrOwotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmlzQ2FsbCA9IG9wY29kZUlEICE9IG9wX2NvbnN0cnVjdDsKKyAgICBtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsVHlwZSA9
IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOwogICAgIG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlT2Zmc2V0OwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKLQotICAgIC8vIFRoZSBmb2xs
b3dpbmcgaXMgdGhlIGZhc3QgY2FzZSwgb25seSB1c2VkIHdoYW4gYSBjYWxsZWUgY2FuIGJlIGxp
bmtlZC4KLQotICAgIC8vIEZhc3QgdmVyc2lvbiBvZiBzdGFjayBmcmFtZSBpbml0aWFsaXphdGlv
biwgZGlyZWN0bHkgcmVsYXRpdmUgdG8gZWRpLgotICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9taXRz
IHRvIHNldCB1cCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaywgd2hpY2ggaXMgc2V0IGluIHRoZSBj
YWxsZWUKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0
aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVnVDIpOwotCi0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6
OkFyZ3VtZW50Q291bnQpKTsKLSAgICBzdG9yZTMyKEltbTMyKGFyZ0NvdW50KSwgcGF5bG9hZEZv
cihyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOwotICAgIHN0
b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6Q2FsbGVy
RnJhbWUgKyByZWdpc3Rlck9mZnNldCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAgICBlbWl0U3Rv
cmUocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKHJlZ2lz
dGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7Ci0gICAgc3RvcmUzMihyZWdU
MiwgcGF5bG9hZEZvcihyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikp
OwotICAgIGFkZFB0cihJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0KLSAgICAvLyBDYWxsIHRvIHRoZSBjYWxsZWUKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hh
aW4pKSwgcmVnVDEpOworICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJl
Z2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgp
OwotICAgIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIHdhc0V2
YWwubGluayh0aGlzKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiB9CiAK
LXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCwgT3Bjb2RlSUQgb3Bjb2RlSUQpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAg
IGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGFyZ0NvdW50
ID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCByZWdpc3Rlck9mZnNldCA9IGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFs
KSB7CisgICAgICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGl0ZXIpOworICAgICAgICByZXR1
cm47CisgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKLQotICAgIC8vIEZhc3QgY2hlY2sgZm9yIEpTIGZ1bmN0aW9uLgotICAgIEp1bXAgY2Fs
bExpbmtGYWlsTm90T2JqZWN0ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgIEp1bXAgY2FsbExpbmtGYWlsTm90SlNGdW5jdGlv
biA9IGVtaXRKdW1wSWZOb3RUeXBlKHJlZ1QwLCByZWdUMSwgSlNGdW5jdGlvblR5cGUpOwotCi0g
ICAgLy8gU3BlY3VsYXRpdmVseSByb2xsIHRoZSBjYWxsZnJhbWUsIGFzc3VtaW5nIGFyZ0NvdW50
IHdpbGwgbWF0Y2ggdGhlIGFyaXR5LgotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCB0YWdGb3IoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSArIHJlZ2lzdGVyT2Zm
c2V0LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVy
LCBwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUgKyByZWdpc3Rlck9mZnNldCwg
Y2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAgICBhZGRQdHIoSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwot
ICAgIG1vdmUoSW1tMzIoYXJnQ291bnQpLCByZWdUMSk7Ci0KKyAgICAKICAgICBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9j
YXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fZ2xvYmFs
RGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgOiBtX2dsb2JhbERhdGEt
PmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7CiAKLSAgICAvLyBEb25lISAtIHJldHVy
biBiYWNrIHRvIHRoZSBob3QgcGF0aC4KLSAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxs
KSA9PSBPUENPREVfTEVOR1RIKG9wX2NhbGxfZXZhbCkpOwotICAgIEFTU0VSVChPUENPREVfTEVO
R1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSk7Ci0gICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2NhbGwpKTsKLQotICAgIC8vIFRo
aXMgaGFuZGxlcyBob3N0IGZ1bmN0aW9ucwotICAgIGNhbGxMaW5rRmFpbE5vdEpTRnVuY3Rpb24u
bGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVn
VDEpOyAvLyBSZXN0b3JlIGNlbGwgdGFnIHNpbmNlIGl0IHdhcyBjbG9iYmVyZWQuCi0gICAgY2Fs
bExpbmtGYWlsTm90T2JqZWN0LmxpbmsodGhpcyk7Ci0KLSAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBjdGlfb3BfY29uc3RydWN0X05vdEpT
Q29uc3RydWN0IDogY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbik7Ci0gICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoY2FsbGVlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChKSVQ6OkltbTMyKHJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSklUOjpJbW0zMihhcmdD
b3VudCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLQogICAgIHNhbXBsZUNvZGVCbG9jayhtX2Nv
ZGVCbG9jayk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gOTg1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgVVNFKEpTVkFMVUU2NCkKICNp
bmNsdWRlICJKSVQuaCIKIAorI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKSVRTdHVi
Q2FsbC5oIgpAQCAtNDYsMTUgKzQ3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXZvaWQgSklUOjpjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgp
Ci17Ci0gICAgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLCByZWdUMSBob2xkcyBhcmdDb3VudAotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2Nv
cGVDaGFpbikpLCByZWdUMyk7IC8vIHNjb3BlQ2hhaW4KLSAgICBlbWl0UHV0SW50VG9DYWxsRnJh
bWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCk7Ci0gICAgZW1pdFB1
dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMCwgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpOwotICAg
IGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIFJlZ2lzdGVyRmlsZTo6U2NvcGVD
aGFpbik7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2NhbGxfcHV0X3Jlc3VsdChJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGRzdCA9IGluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKQEAgLTYyLDE0NyArNTQsMTU1IEBAIHZvaWQgSklUOjplbWl0X29wX2NhbGxfcHV0X3Jlc3Vs
dChJbnN0cnUKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklU
Ojpjb21waWxlT3BDYWxsVmFyYXJncyhJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBp
bnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBhcmdDb3VudFJl
Z2lzdGVyID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCByZWdpc3Rlck9mZnNl
dCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgdGhpc1ZhbHVlID0gaW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gaW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kOworCisgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworCisgICAgSnVtcExpc3Qg
c2xvd0Nhc2U7CisgICAgSnVtcExpc3QgZW5kOworICAgIGlmIChtX2NvZGVCbG9jay0+dXNlc0Fy
Z3VtZW50cygpCisgICAgICAgICYmIGFyZ3VtZW50cyA9PSBtX2NvZGVCbG9jay0+YXJndW1lbnRz
UmVnaXN0ZXIoKQorICAgICAgICAmJiBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID09IDEp
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7CisKKyAgICAgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEFyZ3VtZW50czo6TWF4QXJndW1lbnRzICsgMSkpKTsKKyAgICAgICAgLy8gcmVnVDA6IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzCisKKyAgICAgICAgbW92ZShyZWdUMCwgcmVnVDEpOwor
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoZmlyc3RGcmVlUmVnaXN0ZXIgKyBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemUpLCByZWdUMSk7CisgICAgICAgIGxzaGlmdDMyKFRydXN0
ZWRJbW0zMigzKSwgcmVnVDEpOworICAgICAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QxKTsKKyAgICAgICAgLy8gcmVnVDE6IG5ld0NhbGxGcmFtZQorCisgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChicmFuY2hQdHIoQmVsb3csIEFic29sdXRlQWRkcmVzcyhtX2dsb2JhbERhdGEtPmlu
dGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5hZGRyZXNzT2ZFbmQoKSksIHJlZ1QxKSk7CisKKyAg
ICAgICAgLy8gSW5pdGlhbGl6ZSBBcmd1bWVudENvdW50LgorICAgICAgICBlbWl0RmFzdEFyaXRo
UmVUYWdJbW1lZGlhdGUocmVnVDAsIHJlZ1QyKTsKKyAgICAgICAgc3RvcmVQdHIocmVnVDIsIEFk
ZHJlc3MocmVnVDEsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgICAgICAvLyBJbml0aWFsaXplICd0aGlzJyBh
bmQgY29weSBhcmd1bWVudHMuCisgICAgICAgIG5lZzMyKHJlZ1QwKTsKKyAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih0aGlzVmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChy
ZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQsIC0oUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpKTsKKyAgICAgICAgZW5k
LmFwcGVuZChicmFuY2hBZGRQdHIoWmVybywgSW1tMzIoMSksIHJlZ1QwKSk7CisKKyAgICAgICAg
TGFiZWwgY29weUxvb3AgPSBsYWJlbCgpOworICAgICAgICBsb2FkUHRyKEJhc2VJbmRleChjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDAsIFRpbWVzRWlnaHQsIC0oKFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSArIDEpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
LCByZWdUMik7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDEsIHJlZ1Qw
LCBUaW1lc0VpZ2h0LCAtKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKSk7CisgICAgICAgIGJyYW5jaEFkZFB0cihO
b25aZXJvLCBJbW0zMigxKSwgcmVnVDApLmxpbmtUbyhjb3B5TG9vcCwgdGhpcyk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ0NvdW50UmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0
RmFzdEFyaXRoSW1tVG9JbnQocmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2Fs
bGVlLCByZWdUMCk7Ci0gICAgYWRkUHRyKEltbTMyKHJlZ2lzdGVyT2Zmc2V0KSwgcmVnVDEsIHJl
Z1QyKTsKLQotICAgIC8vIENoZWNrIGZvciBKU0Z1bmN0aW9ucy4KLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RUeXBl
KHJlZ1QwLCByZWdUMywgSlNGdW5jdGlvblR5cGUpKTsKLQotICAgIC8vIFNwZWN1bGF0aXZlbHkg
cm9sbCB0aGUgY2FsbGZyYW1lLCBhc3N1bWluZyBhcmdDb3VudCB3aWxsIG1hdGNoIHRoZSBhcml0
eS4KLSAgICBtdWwzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QyLCByZWdU
Mik7Ci0gICAgaW50cHRyX3Qgb2Zmc2V0ID0gKGludHB0cl90KXNpemVvZihSZWdpc3RlcikgKiAo
aW50cHRyX3QpUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZTsKLSAgICBhZGRQdHIoSW1tMzIoKGlu
dDMyX3Qpb2Zmc2V0KSwgcmVnVDIsIHJlZ1QzKTsKLSAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0
ZXIsIHJlZ1QzKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDMpOwotICAg
IGFkZFB0cihyZWdUMiwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGVtaXROYWtlZENhbGwobV9n
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGwoKSk7CisgICAgICAgIGVuZC5hcHBl
bmQoanVtcCgpKTsKKyAgICB9CisKKyAgICBpZiAobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cyA9PSAxKQorICAgICAgICBzbG93Q2FzZS5saW5rKHRoaXMpOworCisgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX2xvYWRfdmFyYXJncyk7CisgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQodGhpc1ZhbHVlLCByZWdUMCk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYXJndW1l
bnRzLCByZWdUMCk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoZmlyc3RGcmVlUmVn
aXN0ZXIpKTsKKyAgICBzdHViQ2FsbC5jYWxsKHJlZ1QxKTsKKworICAgIGlmIChtX2NvZGVCbG9j
ay0+bV9udW1QYXJhbWV0ZXJzID09IDEpCisgICAgICAgIGVuZC5saW5rKHRoaXMpOworfQorCit2
b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKCkKK3sKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfY2FsbF9ldmFsKTsgLy8gSW5pdGlhbGl6ZXMgU2NvcGVDaGFpbjsgUmV0dXJu
UEM7IENvZGVCbG9jay4KKyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSkpKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6
OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICBzYW1wbGVDb2RlQmxvY2so
bV9jb2RlQmxvY2spOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFZhcmFyZ3NTbG93Q2Fz
ZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2NhbGxf
Tm90SlNGdW5jdGlvbik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdU
MSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIAorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUMCk7CisgICAgZW1pdE5ha2VkQ2Fs
bChtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsKKwogICAgIHNhbXBs
ZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiB9Ci0gICAgCisKIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwot
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAotICAg
IC8vIEhhbmRsZSBldmFsCi0gICAgSnVtcCB3YXNFdmFsOworICAgIC8qIENhbGxlciBhbHdheXM6
CisgICAgICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1l
LgorICAgICAgICAtIEluaXRpYWxpemVzIEFyZ3VtZW50Q291bnQ7IENhbGxlckZyYW1lOyBDYWxs
ZWUuCisKKyAgICAgICBGb3IgYSBKUyBjYWxsOgorICAgICAgICAtIENhbGxlciBpbml0aWFsaXpl
cyBTY29wZUNoYWluLgorICAgICAgICAtIENhbGxlZSBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29k
ZUJsb2NrLgorICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciB1cG9u
IHJldHVybi4KKworICAgICAgIEZvciBhIG5vbi1KUyBjYWxsOgorICAgICAgICAtIENhbGxlciBp
bml0aWFsaXplcyBTY29wZUNoYWluOyBSZXR1cm5QQzsgQ29kZUJsb2NrLgorICAgICAgICAtIENh
bGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciB1cG9uIHJldHVybi4KKyAgICAqLworCisg
ICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncykKKyAgICAgICAgY29tcGlsZUxvYWRW
YXJhcmdzKGluc3RydWN0aW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0g
aW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBp
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihy
ZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDEpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihhcmdDb3VudCkpKSwgQWRkcmVzcyhyZWdUMSwgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENv
dW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIH0gLy8gcmVn
VDEgaG9sZHMgbmV3Q2FsbEZyYW1lIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBj
YWxsZWUuCisKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwg
UmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsKKyAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgUmVnaXN0ZXJGaWxl
OjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgbW92
ZShyZWdUMSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworCiAgICAgaWYgKG9wY29kZUlEID09IG9wX2Nh
bGxfZXZhbCkgewotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY2Fs
bF9ldmFsKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY2FsbGVlLCByZWdUMCk7Ci0g
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEpJVDo6SW1tMzIocmVnaXN0ZXJPZmZzZXQpKTsK
LSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSklUOjpJbW0zMihhcmdDb3VudCkpOwotICAg
ICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgICAgIHdhc0V2YWwgPSBicmFuY2hQdHIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7Cisg
ICAgICAgIGNvbXBpbGVDYWxsRXZhbCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ly8gVGhpcyBwbGFudHMgYSBjaGVjayBmb3IgYSBjYWNoZWQgSlNGdW5jdGlvbiB2YWx1ZSwgc28g
d2UgY2FuIHBsYW50IGEgZmFzdCBsaW5rIHRvIHRoZSBjYWxsZWUuCi0gICAgLy8gVGhpcyBkZWxp
YmVyYXRlbHkgbGVhdmVzIHRoZSBjYWxsZWUgaW4gZWN4LCB1c2VkIHdoZW4gc2V0dGluZyB1cCB0
aGUgc3RhY2sgZnJhbWUgYmVsb3cKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwg
cmVnVDApOwogICAgIERhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwot
CiAgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZU9wQ2FsbCk7Ci0KLSAg
ICBKdW1wIGp1bXBUb1Nsb3cgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBh
ZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpKSk7Ci0KKyAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNo
KE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOwogICAgIEVORF9VTklOVEVSUlVQVEVE
X1NFUVVFTkNFKHNlcXVlbmNlT3BDYWxsKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7CiAK
LSAgICBhZGRTbG93Q2FzZShqdW1wVG9TbG93KTsKLSAgICBBU1NFUlRfSklUX09GRlNFVChkaWZm
ZXJlbmNlQmV0d2VlbihhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBqdW1wVG9TbG93KSwg
cGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wKTsKLSAgICAKKyAgICBBU1NFUlRfSklUX09G
RlNFVChkaWZmZXJlbmNlQmV0d2VlbihhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBzbG93
Q2FzZSksIHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCk7CiAgICAgQVNTRVJUKG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4
KTsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLmFwcGVuZChTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvKCkpOwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtl
ZEZ1bmN0aW9uQ2hlY2s7Ci0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uaXNDYWxsID0gb3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0OworICAg
IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CiAgICAgbV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uYnl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVPZmZzZXQ7CiAKLSAgICAvLyBUaGUgZm9sbG93aW5nIGlzIHRoZSBm
YXN0IGNhc2UsIG9ubHkgdXNlZCB3aGFuIGEgY2FsbGVlIGNhbiBiZSBsaW5rZWQuCi0KLSAgICAv
LyBGYXN0IHZlcnNpb24gb2Ygc3RhY2sgZnJhbWUgaW5pdGlhbGl6YXRpb24sIGRpcmVjdGx5IHJl
bGF0aXZlIHRvIGVkaS4KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbWl0cyB0byBzZXQgdXAgUmVn
aXN0ZXJGaWxlOjpDb2RlQmxvY2ssIHdoaWNoIGlzIHNldCBpbiB0aGUgY2FsbGVlCi0KLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3Bl
Q2hhaW4pKSwgcmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCi0gICAgCi0gICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSW50MzJUYWcpLCBpbnRUYWdGb3IocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZp
bGU6OkFyZ3VtZW50Q291bnQpKTsKLSAgICBzdG9yZTMyKEltbTMyKGFyZ0NvdW50KSwgaW50UGF5
bG9hZEZvcihyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOwot
ICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxs
ZWUpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIHN0b3JlUHRy
KHJlZ1QxLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdp
c3RlckZpbGU6OlNjb3BlQ2hhaW4pICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSkpOwotICAgIGFkZFB0cihJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0KLSAgICAvLyBDYWxsIHRvIHRoZSBjYWxsZWUKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3Bl
Q2hhaW4pKSwgcmVnVDEpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWRDYWxsKCk7
Ci0gICAgCi0gICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgd2FzRXZh
bC5saW5rKHRoaXMpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKIH0KIAot
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4LCBPcGNvZGVJRCBvcGNvZGVJRCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAg
aW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCByZWdpc3Rl
ck9mZnNldCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGl0ZXIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAg
Ly8gRmFzdCBjaGVjayBmb3IgSlMgZnVuY3Rpb24uCi0gICAgSnVtcCBjYWxsTGlua0ZhaWxOb3RP
YmplY3QgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKLSAgICBKdW1wIGNhbGxMaW5rRmFp
bE5vdEpTRnVuY3Rpb24gPSBlbWl0SnVtcElmTm90VHlwZShyZWdUMCwgcmVnVDMsIEpTRnVuY3Rp
b25UeXBlKTsKLQotICAgIC8vIFNwZWN1bGF0aXZlbHkgcm9sbCB0aGUgY2FsbGZyYW1lLCBhc3N1
bWluZyBhcmdDb3VudCB3aWxsIG1hdGNoIHRoZSBhcml0eS4KLSAgICBzdG9yZVB0cihjYWxsRnJh
bWVSZWdpc3RlciwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVyRnJhbWUgKyByZWdpc3Rlck9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7Ci0gICAgYWRkUHRyKEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBtb3ZlKElt
bTMyKGFyZ0NvdW50KSwgcmVnVDEpOwotCisgICAgCiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1p
dE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX2dsb2JhbERhdGEtPmppdFN0
dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpVmlydHVhbENhbGxMaW5rKCkpOwogCi0gICAgLy8gRG9uZSEgLSByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGguCi0gICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RF
X0xFTkdUSChvcF9jYWxsX2V2YWwpKTsKLSAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxs
KSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCkpOwotI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKLSAgICBpZiAobV9jYW5CZU9wdGltaXplZCkgewotICAgICAgICBSYXJlQ2FzZVByb2Zp
bGUqIHJhcmVDYXNlUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5yYXJlQ2FzZVByb2ZpbGUobV9jb2Rl
QmxvY2stPm51bWJlck9mUmFyZUNhc2VQcm9maWxlcygpIC0gMSk7Ci0gICAgICAgIEFTU0VSVCgo
dW5zaWduZWQpcmFyZUNhc2VQcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IG1fYnl0ZWNvZGVP
ZmZzZXQpOwotICAgICAgICBhZGQzMihJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2Fz
ZVByb2ZpbGUtPm1fY291bnRlcikpOwotICAgIH0KLSNlbmRpZgotICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSk7Ci0KLSAgICAvLyBUaGlzIGhhbmRs
ZXMgaG9zdCBmdW5jdGlvbnMKLSAgICBjYWxsTGlua0ZhaWxOb3RPYmplY3QubGluayh0aGlzKTsK
LSAgICBjYWxsTGlua0ZhaWxOb3RKU0Z1bmN0aW9uLmxpbmsodGhpcyk7Ci0KLSAgICBKSVRTdHVi
Q2FsbCBzdHViQ2FsbCh0aGlzLCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBjdGlfb3BfY29u
c3RydWN0X05vdEpTQ29uc3RydWN0IDogY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbik7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEpJ
VDo6SW1tMzIocmVnaXN0ZXJPZmZzZXQpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChKSVQ6
OkltbTMyKGFyZ0NvdW50KSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotCiAgICAgc2FtcGxlQ29k
ZUJsb2NrKG1fY29kZUJsb2NrKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gOTg1ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDg0ICs2MywxMjUgQEAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBKSVQ6Ogog
CiAgICAgcmV0KCk7CiAgICAgCi0gICAgSnVtcExpc3QgY2FsbExpbmtGYWlsdXJlczsKLSAgICAv
LyAoMikgVHJhbXBvbGluZXMgZm9yIHRoZSBzbG93IGNhc2VzIG9mIG9wX2NhbGwgLyBvcF9jYWxs
X2V2YWwgLyBvcF9jb25zdHJ1Y3QuCisgICAgSnVtcExpc3QgY2FsbFNsb3dDYXNlOworICAgIEp1
bXBMaXN0IGNvbnN0cnVjdFNsb3dDYXNlOworCiAgICAgLy8gVmlydHVhbENhbGxMaW5rIFRyYW1w
b2xpbmUKLSAgICAvLyByZWdUMCBob2xkcyBjYWxsZWUsIHJlZ1QxIGhvbGRzIGFyZ0NvdW50LiAg
cmVnVDIgd2lsbCBob2xkIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUuCisgICAgLy8gcmVnVDEsIHJl
Z1QwIGhvbGRzIGNhbGxlZTsgY2FsbEZyYW1lIGlzIG1vdmVkIGFuZCBwYXJ0aWFsbHkgaW5pdGlh
bGl6ZWQuCiAgICAgTGFiZWwgdmlydHVhbENhbGxMaW5rQmVnaW4gPSBhbGlnbigpOwotICAgIGNv
bXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7CisgICAgY2FsbFNsb3dDYXNlLmFwcGVu
ZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSkpOworICAgIGNhbGxTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJl
Z1QxLCBKU0Z1bmN0aW9uVHlwZSkpOworCisgICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFs
aXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVnVDEpOwor
ICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6U2Nv
cGVDaGFpbik7CisKKyAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0dXJuUEMgZm9yIHVzZSBieSBs
YXp5IGxpbmtpbmcgYW5kIGV4Y2VwdGlvbnMuCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0
ZXJDYWxsKHJlZ1QzKTsKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIFJlZ2lz
dGVyRmlsZTo6UmV0dXJuUEMpOworCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAg
ICAgQ2FsbCBjYWxsTGF6eUxpbmtDYWxsID0gY2FsbCgpOwotICAgIGNhbGxMaW5rRmFpbHVyZXMu
YXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKICAgICByZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIz
MihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QxKTsKICAgICBqdW1wKHJlZ1QwKTsK
IAogICAgIC8vIFZpcnR1YWxDb25zdHJ1Y3RMaW5rIFRyYW1wb2xpbmUKLSAgICAvLyByZWdUMCBo
b2xkcyBjYWxsZWUsIHJlZ1QxIGhvbGRzIGFyZ0NvdW50LiAgcmVnVDIgd2lsbCBob2xkIHRoZSBG
dW5jdGlvbkV4ZWN1dGFibGUuCisgICAgLy8gcmVnVDEsIHJlZ1QwIGhvbGRzIGNhbGxlZTsgY2Fs
bEZyYW1lIGlzIG1vdmVkIGFuZCBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuCiAgICAgTGFiZWwgdmly
dHVhbENvbnN0cnVjdExpbmtCZWdpbiA9IGFsaWduKCk7Ci0gICAgY29tcGlsZU9wQ2FsbEluaXRp
YWxpemVDYWxsRnJhbWUoKTsKKyAgICBjb25zdHJ1Y3RTbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICBj
b25zdHJ1Y3RTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1QxLCBK
U0Z1bmN0aW9uVHlwZSkpOworCisgICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlv
biBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9C
SkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVnVDEpOworICAgIGVt
aXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFp
bik7CisKKyAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0dXJuUEMgZm9yIHVzZSBieSBsYXp5IGxp
bmtpbmcgYW5kIGV4ZXB0aW9ucy4KICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwo
cmVnVDMpOwogICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgUmVnaXN0ZXJGaWxl
OjpSZXR1cm5QQyk7CisKICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKICAgICBDYWxs
IGNhbGxMYXp5TGlua0NvbnN0cnVjdCA9IGNhbGwoKTsKICAgICByZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAgY2FsbExpbmtGYWlsdXJlcy5hcHBlbmQoYnJhbmNo
VGVzdFB0cihaZXJvLCByZWdUMCkpOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIo
UmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMSk7CiAgICAganVtcChyZWdUMCk7CiAK
ICAgICAvLyBWaXJ0dWFsQ2FsbCBUcmFtcG9saW5lCi0gICAgLy8gcmVnVDAgaG9sZHMgY2FsbGVl
LCByZWdUMSBob2xkcyBhcmdDb3VudC4gIHJlZ1QyIHdpbGwgaG9sZCB0aGUgRnVuY3Rpb25FeGVj
dXRhYmxlLgorICAgIC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWU7IHJlZ1QyIHdpbGwgaG9s
ZCB0aGUgRnVuY3Rpb25FeGVjdXRhYmxlLgogICAgIExhYmVsIHZpcnR1YWxDYWxsQmVnaW4gPSBh
bGlnbigpOwotICAgIGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7CisgICAgY2Fs
bFNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSkpOworICAgIGNhbGxTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5v
dFR5cGUocmVnVDAsIHJlZ1QxLCBKU0Z1bmN0aW9uVHlwZSkpOwogCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJl
Z1QyKTsKKyAgICAvLyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBm
dW5jdGlvbiBjYWxsLgorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9G
KEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZWdUMSk7CisgICAgZW1pdFB1dENlbGxUb0Nh
bGxGcmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKIAotICAgIEp1
bXAgaGFzQ29kZUJsb2NrMyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJz
Rm9yQ2FsbCkpLCBUcnVzdGVkSW1tMzIoMCkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7CisgICAg
SnVtcCBoYXNDb2RlQmxvY2sxID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX251bVBhcmFtZXRl
cnNGb3JDYWxsKSksIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNz
QWZ0ZXJDYWxsKHJlZ1QzKTsKICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKICAgICBD
YWxsIGNhbGxDb21waWxlQ2FsbCA9IGNhbGwoKTsKLSAgICBjYWxsTGlua0ZhaWx1cmVzLmFwcGVu
ZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXIzMihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QxKTsKICAgICByZXN0b3Jl
UmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsK
LSAgICBoYXNDb2RlQmxvY2szLmxpbmsodGhpcyk7CiAKKyAgICBoYXNDb2RlQmxvY2sxLmxpbmso
dGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rp
b25FeGVjdXRhYmxlLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spKSwgcmVnVDApOwog
ICAgIGp1bXAocmVnVDApOwogCiAgICAgLy8gVmlydHVhbENvbnN0cnVjdCBUcmFtcG9saW5lCi0g
ICAgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLCByZWdUMSBob2xkcyBhcmdDb3VudC4gIHJlZ1QyIHdp
bGwgaG9sZCB0aGUgRnVuY3Rpb25FeGVjdXRhYmxlLgorICAgIC8vIHJlZ1QxLCByZWdUMCBob2xk
cyBjYWxsZWU7IHJlZ1QyIHdpbGwgaG9sZCB0aGUgRnVuY3Rpb25FeGVjdXRhYmxlLgogICAgIExh
YmVsIHZpcnR1YWxDb25zdHJ1Y3RCZWdpbiA9IGFsaWduKCk7Ci0gICAgY29tcGlsZU9wQ2FsbElu
aXRpYWxpemVDYWxsRnJhbWUoKTsKKyAgICBjb25zdHJ1Y3RTbG93Q2FzZS5hcHBlbmQoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAg
ICBjb25zdHJ1Y3RTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1Qx
LCBKU0Z1bmN0aW9uVHlwZSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKKyAgICAvLyBGaW5p
c2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBjYWxsLgorICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2Nv
cGVDaGFpbikpLCByZWdUMSk7CisgICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdU
MSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKIAotICAgIEp1bXAgaGFzQ29kZUJsb2NrNCA9
IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNF
VE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KSksIFRy
dXN0ZWRJbW0zMigwKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKKyAgICBKdW1wIGhhc0NvZGVC
bG9jazIgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVD
VF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVj
dCkpLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2Fs
bChyZWdUMyk7CiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgQ2FsbCBjYWxs
Q29tcGlsZUNjb25zdHJ1Y3QgPSBjYWxsKCk7Ci0gICAgY2FsbExpbmtGYWlsdXJlcy5hcHBlbmQo
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMSk7CisgICAgQ2FsbCBjYWxs
Q29tcGlsZUNvbnN0cnVjdCA9IGNhbGwoKTsKICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihyZWdUMyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKLSAgICBoYXNDb2RlQmxvY2s0
LmxpbmsodGhpcyk7CiAKKyAgICBoYXNDb2RlQmxvY2syLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2pp
dENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykpLCByZWdUMCk7CiAgICAganVtcChyZWdU
MCk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIHBhcnNlciBmYWlscyB3ZSB3YW50IHRvIGJlIGFibGUg
dG8gYmUgYWJsZSB0byBrZWVwIGdvaW5nLAotICAgIC8vIFNvIHdlIGhhbmRsZSB0aGlzIGFzIGEg
cGFyc2UgZmFpbHVyZS4KLSAgICBjYWxsTGlua0ZhaWx1cmVzLmxpbmsodGhpcyk7Ci0gICAgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQywgcmVnVDEp
OworCisgICAgY2FsbFNsb3dDYXNlLmxpbmsodGhpcyk7CisgICAgLy8gRmluaXNoIGNhbm9uaWNh
bCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCByZWdUMik7Cisg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWlu
LCByZWdUMiwgcmVnVDIpOworICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDIs
IFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CisKKyAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0
dXJuUEMgYW5kIENvZGVCbG9jaywgbGlrZSBhIEpTIGZ1bmN0aW9uIHdvdWxkLgorICAgIHByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKHJlZ1QzLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKKyAgICBlbWl0UHV0SW1tZWRp
YXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spOworCisgICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7
CisgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgQ2FsbCBjYWxsQ2FsbE5vdEpT
RnVuY3Rpb24gPSBjYWxsKCk7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVn
aXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIHJlc3RvcmVS
ZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Jmdsb2JhbERhdGEtPmV4Y2VwdGlvbkxvY2F0aW9uKSwgcmVnVDIpOwotICAgIHN0b3JlUHRyKHJl
Z1QxLCByZWdUMik7Ci0gICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgMSArIE9CSkVDVF9PRkZT
RVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwot
ICAgIHBva2UoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihjdGlWTVRocm93VHJhbXBvbGluZSku
dmFsdWUoKSkpOworICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsK
KyAgICByZXQoKTsKKworICAgIGNvbnN0cnVjdFNsb3dDYXNlLmxpbmsodGhpcyk7CisgICAgLy8g
RmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4K
KyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZy
YW1lLCByZWdUMik7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJG
aWxlOjpTY29wZUNoYWluLCByZWdUMiwgcmVnVDIpOworICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJh
bWVIZWFkZXIocmVnVDIsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CisKKyAgICAvLyBBbHNv
IGluaXRpYWxpemUgUmV0dXJuUEMgYW5kIENvZGVCbG9jaywgbGlrZSBhIEpTIGZ1bmN0aW9uIHdv
dWxkLgorICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CisgICAgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKKyAg
ICBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgUmVnaXN0ZXJGaWxlOjpDb2Rl
QmxvY2spOworCisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEt
PnRvcENhbGxGcmFtZSk7CisgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgQ2Fs
bCBjYWxsQ29uc3RydWN0Tm90SlNGdW5jdGlvbiA9IGNhbGwoKTsKKyAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwogICAg
IHJldCgpOwogCiAgICAgLy8gTmF0aXZlQ2FsbCBUcmFtcG9saW5lCkBAIC0xNjAsMTggKzIwMSwy
MSBAQCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEpJVDo6CiAgICAgcGF0Y2hC
dWZmZXIubGluayhjYWxsTGF6eUxpbmtDYWxsLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtD
YWxsKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTGF6eUxpbmtDb25zdHJ1Y3QsIEZ1bmN0
aW9uUHRyKGN0aV92bV9sYXp5TGlua0NvbnN0cnVjdCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
Y2FsbENvbXBpbGVDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9qaXRDb21waWxlKSk7Ci0g
ICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZUNjb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENv
bXBpbGVDb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENhbGxOb3RKU0Z1bmN0aW9uLCBGdW5jdGlvblB0
cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
Q29uc3RydWN0Tm90SlNGdW5jdGlvbiwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RK
U0NvbnN0cnVjdCkpOwogCiAgICAgQ29kZVJlZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKTsKICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJs
ZU1lbW9yeSA9IGZpbmFsQ29kZS5leGVjdXRhYmxlTWVtb3J5KCk7CiAKKyAgICB0cmFtcG9saW5l
cy0+Y3RpVmlydHVhbENhbGxMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxD
YWxsTGlua0JlZ2luKTsKKyAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsg
PSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENvbnN0cnVjdExpbmtCZWdpbik7CiAg
ICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0
KHZpcnR1YWxDYWxsQmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0
ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDb25zdHJ1Y3RCZWdpbik7CiAgICAg
dHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQobmF0
aXZlQ2FsbFRodW5rKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpTmF0aXZlQ29uc3RydWN0ID0gcGF0
Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNvbnN0cnVjdFRodW5rKTsKICAgICB0cmFtcG9s
aW5lcy0+Y3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVB
dChzdHJpbmdMZW5ndGhCZWdpbik7Ci0gICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGlu
ayA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbExpbmtCZWdpbik7Ci0gICAg
dHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBv
bGluZUF0KHZpcnR1YWxDb25zdHJ1Y3RMaW5rQmVnaW4pOworCiAjaWYgRU5BQkxFKEpJVF9VU0Vf
U09GVF9NT0RVTE8pCiAgICAgdHJhbXBvbGluZXMtPmN0aVNvZnRNb2R1bG8gPSBwYXRjaEJ1ZmZl
ci50cmFtcG9saW5lQXQoc29mdE1vZEJlZ2luKTsKICNlbmRpZgpAQCAtMjM3LDcgKzI4MSw3IEBA
IEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUMKICAgICAvLyBnZXQgdG8g
aXRzIGdsb2JhbCBkYXRhLgogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lz
dGVyRmlsZTo6Q2FsbGVyRnJhbWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1QxLCByZWdUMik7Ci0gICAgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pOwor
ICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6U2Nv
cGVDaGFpbik7CiAKICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOyAv
LyBDYWxsZWUgcHJlc2VydmVkCiAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBS
ZWdpc3RlckZpbGU6OlJldHVyblBDKTsKQEAgLTQwMyw3ICs0NDcsNyBAQCBKSVQ6OkNvZGVSZWYg
SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0
YS4KICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxl
ckZyYW1lLCByZWdUMik7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0
ZXJGaWxlOjpTY29wZUNoYWluLCByZWdUMSwgcmVnVDIpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKKyAgICBlbWl0UHV0Q2Vs
bFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pOwogCiAg
ICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsgLy8gQ2FsbGVlIHByZXNl
cnZlZAogICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgUmVnaXN0ZXJGaWxlOjpS
ZXR1cm5QQyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHJldmlzaW9uIDk4NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsODQgKzY0LDEyNSBAQCBQYXNzUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IEpJVDo6CiAgICAgLy8gKDMpIFRyYW1wb2xpbmVzIGZvciB0aGUg
c2xvdyBjYXNlcyBvZiBvcF9jYWxsIC8gb3BfY2FsbF9ldmFsIC8gb3BfY29uc3RydWN0LgogICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihDb2RlVHlwZSkgPT0gNCwgQ29kZVR5cGVFbnVtTXVzdEJl
MzJCaXQpOwogCisgICAgSnVtcExpc3QgY2FsbFNsb3dDYXNlOworICAgIEp1bXBMaXN0IGNvbnN0
cnVjdFNsb3dDYXNlOworCiAgICAgLy8gVmlydHVhbENhbGxMaW5rIFRyYW1wb2xpbmUKLSAgICAv
LyByZWdUMCBob2xkcyBjYWxsZWUsIHJlZ1QxIGhvbGRzIGFyZ0NvdW50LiAgcmVnVDIgd2lsbCBo
b2xkIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUuCi0gICAgSnVtcExpc3QgY2FsbExpbmtGYWlsdXJl
czsKKyAgICAvLyByZWdUMCBob2xkcyBjYWxsZWU7IGNhbGxGcmFtZSBpcyBtb3ZlZCBhbmQgcGFy
dGlhbGx5IGluaXRpYWxpemVkLgogICAgIExhYmVsIHZpcnR1YWxDYWxsTGlua0JlZ2luID0gYWxp
Z24oKTsKLSAgICBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpOworICAgIGNhbGxT
bG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCkpOworICAgIGNhbGxTbG93
Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1QxLCBKU0Z1bmN0aW9uVHlw
ZSkpOworCisgICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMg
ZnVuY3Rpb24gY2FsbC4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRP
RihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVnVDEpOworICAgIGVtaXRQdXRDZWxsVG9D
YWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CisKKyAgICAv
LyBBbHNvIGluaXRpYWxpemUgUmV0dXJuUEMgZm9yIHVzZSBieSBsYXp5IGxpbmtpbmcgYW5kIGV4
Y2VwdGlvbnMuCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKICAg
ICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMp
OworCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgQ2FsbCBjYWxsTGF6eUxp
bmtDYWxsID0gY2FsbCgpOwotICAgIGNhbGxMaW5rRmFpbHVyZXMuYXBwZW5kKGJyYW5jaFRlc3RQ
dHIoWmVybywgcmVnVDApKTsKICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihy
ZWdUMyk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFy
Z3VtZW50Q291bnQsIHJlZ1QxKTsKICAgICBqdW1wKHJlZ1QwKTsKIAogICAgIC8vIFZpcnR1YWxD
b25zdHJ1Y3RMaW5rIFRyYW1wb2xpbmUKLSAgICAvLyByZWdUMCBob2xkcyBjYWxsZWUsIHJlZ1Qx
IGhvbGRzIGFyZ0NvdW50LiAgcmVnVDIgd2lsbCBob2xkIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUu
CisgICAgLy8gcmVnVDAgaG9sZHMgY2FsbGVlOyBjYWxsRnJhbWUgaXMgbW92ZWQgYW5kIHBhcnRp
YWxseSBpbml0aWFsaXplZC4KICAgICBMYWJlbCB2aXJ0dWFsQ29uc3RydWN0TGlua0JlZ2luID0g
YWxpZ24oKTsKLSAgICBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpOworICAgIGNv
bnN0cnVjdFNsb3dDYXNlLmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKSk7CisgICAg
Y29uc3RydWN0U2xvd0Nhc2UuYXBwZW5kKGVtaXRKdW1wSWZOb3RUeXBlKHJlZ1QwLCByZWdUMSwg
SlNGdW5jdGlvblR5cGUpKTsKKworICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6YXRp
b24gYmVmb3JlIEpTIGZ1bmN0aW9uIGNhbGwuCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlZ1QxKTsKKyAgICBl
bWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hh
aW4pOworCisgICAgLy8gQWxzbyBpbml0aWFsaXplIFJldHVyblBDIGZvciB1c2UgYnkgbGF6eSBs
aW5raW5nIGFuZCBleGVwdGlvbnMuCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxs
KHJlZ1QzKTsKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIFJlZ2lzdGVyRmls
ZTo6UmV0dXJuUEMpOworCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgQ2Fs
bCBjYWxsTGF6eUxpbmtDb25zdHJ1Y3QgPSBjYWxsKCk7Ci0gICAgY2FsbExpbmtGYWlsdXJlcy5h
cHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOwogICAgIHJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMy
KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVnVDEpOwogICAgIGp1bXAocmVnVDApOwog
CiAgICAgLy8gVmlydHVhbENhbGwgVHJhbXBvbGluZQotICAgIC8vIHJlZ1QwIGhvbGRzIGNhbGxl
ZSwgcmVnVDEgaG9sZHMgYXJnQ291bnQuICByZWdUMiB3aWxsIGhvbGQgdGhlIEZ1bmN0aW9uRXhl
Y3V0YWJsZS4KKyAgICAvLyByZWdUMCBob2xkcyBjYWxsZWU7IHJlZ1QyIHdpbGwgaG9sZCB0aGUg
RnVuY3Rpb25FeGVjdXRhYmxlLgogICAgIExhYmVsIHZpcnR1YWxDYWxsQmVnaW4gPSBhbGlnbigp
OwotICAgIGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7CisgICAgY2FsbFNsb3dD
YXNlLmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKSk7CisgICAgY2FsbFNsb3dDYXNl
LmFwcGVuZChlbWl0SnVtcElmTm90VHlwZShyZWdUMCwgcmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7
CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9u
LCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOworICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5pdGlh
bGl6YXRpb24gYmVmb3JlIEpTIGZ1bmN0aW9uIGNhbGwuCisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlZ1QxKTsK
KyAgICBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBSZWdpc3RlckZpbGU6OlNj
b3BlQ2hhaW4pOwogCi0gICAgSnVtcCBoYXNDb2RlQmxvY2szID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRh
YmxlLCBtX251bVBhcmFtZXRlcnNGb3JDYWxsKSksIFRydXN0ZWRJbW0zMigwKSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRh
YmxlKSksIHJlZ1QyKTsKKyAgICBKdW1wIGhhc0NvZGVCbG9jazEgPSBicmFuY2gzMihHcmVhdGVy
VGhhbk9yRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1
dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpKSwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwogICAgIHJlc3RvcmVBcmd1bWVu
dFJlZmVyZW5jZSgpOwogICAgIENhbGwgY2FsbENvbXBpbGVDYWxsID0gY2FsbCgpOwotICAgIGNh
bGxMaW5rRmFpbHVyZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKLSAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwg
cmVnVDEpOwogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4
ZWN1dGFibGUpKSwgcmVnVDIpOwotICAgIGhhc0NvZGVCbG9jazMubGluayh0aGlzKTsKIAorICAg
IGhhc0NvZGVCbG9jazEubGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9C
SkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVjaykpLCByZWdUMCk7CiAgICAganVtcChyZWdUMCk7CiAKICAgICAvLyBWaXJ0dWFsQ29u
c3RydWN0IFRyYW1wb2xpbmUKLSAgICAvLyByZWdUMCBob2xkcyBjYWxsZWUsIHJlZ1QxIGhvbGRz
IGFyZ0NvdW50LiAgcmVnVDIgd2lsbCBob2xkIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUuCisgICAg
Ly8gcmVnVDAgaG9sZHMgY2FsbGVlOyByZWdUMiB3aWxsIGhvbGQgdGhlIEZ1bmN0aW9uRXhlY3V0
YWJsZS4KICAgICBMYWJlbCB2aXJ0dWFsQ29uc3RydWN0QmVnaW4gPSBhbGlnbigpOwotICAgIGNv
bXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7CisgICAgY29uc3RydWN0U2xvd0Nhc2Uu
YXBwZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApKTsKKyAgICBjb25zdHJ1Y3RTbG93Q2Fz
ZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1QxLCBKU0Z1bmN0aW9uVHlwZSkp
OwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlv
biwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKKyAgICAvLyBGaW5pc2ggY2Fub25pY2FsIGluaXRp
YWxpemF0aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBjYWxsLgorICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZWdUMSk7
CisgICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpT
Y29wZUNoYWluKTsKIAotICAgIEp1bXAgaGFzQ29kZUJsb2NrNCA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0
YWJsZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KSksIFRydXN0ZWRJbW0zMigwKSk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9l
eGVjdXRhYmxlKSksIHJlZ1QyKTsKKyAgICBKdW1wIGhhc0NvZGVCbG9jazIgPSBicmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlv
bkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCkpLCBUcnVzdGVkSW1tMzIo
MCkpOwogICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CiAgICAgcmVz
dG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgQ2FsbCBjYWxsQ29tcGlsZUNvbnN0cnVjdCA9
IGNhbGwoKTsKLSAgICBjYWxsTGlua0ZhaWx1cmVzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8s
IHJlZ1QwKSk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZpbGU6
OkFyZ3VtZW50Q291bnQsIHJlZ1QxKTsKICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihyZWdUMyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKLSAgICBoYXNDb2RlQmxvY2s0Lmxp
bmsodGhpcyk7CiAKKyAgICBoYXNDb2RlQmxvY2syLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykpLCByZWdUMCk7CiAgICAganVtcChyZWdUMCk7
Ci0gICAgCi0gICAgLy8gSWYgdGhlIHBhcnNlciBmYWlscyB3ZSB3YW50IHRvIGJlIGFibGUgdG8g
YmUgYWJsZSB0byBrZWVwIGdvaW5nLAotICAgIC8vIFNvIHdlIGhhbmRsZSB0aGlzIGFzIGEgcGFy
c2UgZmFpbHVyZS4KLSAgICBjYWxsTGlua0ZhaWx1cmVzLmxpbmsodGhpcyk7Ci0gICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQywgcmVnVDEpOwor
CisgICAgY2FsbFNsb3dDYXNlLmxpbmsodGhpcyk7CisgICAgLy8gRmluaXNoIGNhbm9uaWNhbCBp
bml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KKyAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCByZWdUMik7CisgICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCBy
ZWdUMiwgcmVnVDIpOworICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDIsIFJl
Z2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CisKKyAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0dXJu
UEMgYW5kIENvZGVCbG9jaywgbGlrZSBhIEpTIGZ1bmN0aW9uIHdvdWxkLgorICAgIHByZXNlcnZl
UmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKHJlZ1QzLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKKyAgICBlbWl0UHV0SW1tZWRpYXRl
VG9DYWxsRnJhbWVIZWFkZXIoMCwgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spOworCisgICAgc3Rv
cmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7Cisg
ICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgQ2FsbCBjYWxsQ2FsbE5vdEpTRnVu
Y3Rpb24gPSBjYWxsKCk7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0
ZXJGaWxlOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIHJlc3RvcmVSZXR1
cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoJmds
b2JhbERhdGEtPmV4Y2VwdGlvbkxvY2F0aW9uKSwgcmVnVDIpOwotICAgIHN0b3JlUHRyKHJlZ1Qx
LCByZWdUMik7Ci0gICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgMSArIE9CSkVDVF9PRkZTRVRP
RihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAg
IHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKKyAgICByZXQoKTsKKwor
ICAgIGNvbnN0cnVjdFNsb3dDYXNlLmxpbmsodGhpcyk7CisgICAgLy8gRmluaXNoIGNhbm9uaWNh
bCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCByZWdUMik7Cisg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWlu
LCByZWdUMiwgcmVnVDIpOworICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDIs
IFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CisKKyAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0
dXJuUEMgYW5kIENvZGVCbG9jaywgbGlrZSBhIEpTIGZ1bmN0aW9uIHdvdWxkLgorICAgIHByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKHJlZ1QzLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKKyAgICBlbWl0UHV0SW1tZWRp
YXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spOworCiAgICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7
Ci0gICAgcG9rZShUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5l
KS52YWx1ZSgpKSk7CisgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgQ2FsbCBj
YWxsQ29uc3RydWN0Tm90SlNGdW5jdGlvbiA9IGNhbGwoKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwogICAgIHJl
dCgpOwogCiAgICAgLy8gTmF0aXZlQ2FsbCBUcmFtcG9saW5lCkBAIC0xNjIsNiArMjAzLDggQEAg
UGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBKSVQ6OgogICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbExhenlMaW5rQ29uc3RydWN0LCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtD
b25zdHJ1Y3QpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxlQ2FsbCwgRnVuY3Rp
b25QdHIoY3RpX29wX2NhbGxfaml0Q29tcGlsZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bENvbXBpbGVDb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGls
ZSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENhbGxOb3RKU0Z1bmN0aW9uLCBGdW5jdGlv
blB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhj
YWxsQ29uc3RydWN0Tm90SlNGdW5jdGlvbiwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9O
b3RKU0NvbnN0cnVjdCkpOwogCiAgICAgQ29kZVJlZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0
YWJsZU1lbW9yeSA9IGZpbmFsQ29kZS5leGVjdXRhYmxlTWVtb3J5KCk7CkBAIC00MjEsMTIgKzQ2
NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYWxsKEluc3RydWN0aW9uKiBjdXJyCiAKIHZvaWQg
SklUOjplbWl0X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsX2V2YWwsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGNvbXBpbGVPcENhbGxWYXJhcmdzKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgY29tcGls
ZU9wQ2FsbChvcF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzgzLDIyICsxNDI2LDIyIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nh
bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyssIG9wX2NhbGwpOworICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyssIG9wX2NhbGxfZXZhbCk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KTsKIH0KLQorIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENhbGxWYXJh
cmdzU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICBjb21waWxlT3BDYWxs
U2xvd0Nhc2Uob3BfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3Qo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyssIG9wX2NvbnN0cnVjdCk7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dG9fanNudW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1NDksNzYgKzE1OTIsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfcmVnZXhwKEluc3RydWN0aW9uCiAgICAgc3R1YkNhbGwuY2FsbChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfbG9h
ZF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGFy
Z0NvdW50RHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYXJn
c09mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBBU1NFUlQo
YXJnc09mZnNldCA8PSByZWdpc3Rlck9mZnNldCk7Ci0gICAgCi0gICAgaW50IGV4cGVjdGVkUGFy
YW1zID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAtIDE7Ci0gICAgLy8gRG9uJ3QgZG8g
aW5saW5lIGNvcHlpbmcgaWYgd2UgYXJlbid0IGd1YXJhbnRlZWQgdG8gaGF2ZSBhIHNpbmdsZSBz
dHJlYW0KLSAgICAvLyBvZiBhcmd1bWVudHMKLSAgICBpZiAoZXhwZWN0ZWRQYXJhbXMpIHsKLSAg
ICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2xvYWRfdmFyYXJncyk7Ci0g
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGFyZ3NPZmZzZXQpKTsKLSAgICAgICAg
c3R1YkNhbGwuY2FsbCgpOwotICAgICAgICAvLyBTdG9yZXMgYSBuYWtlZCBpbnQzMiBpbiB0aGUg
cmVnaXN0ZXIgZmlsZS4KLSAgICAgICAgc3RvcmUzMihyZXR1cm5WYWx1ZVJlZ2lzdGVyLCBBZGRy
ZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdDb3VudERzdCAqIHNpemVvZihSZWdpc3RlcikpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0ZvcihhcmdzT2Zmc2V0KSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0jZWxzZQotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3RQdHIoTm9uWmVybywgYWRkcmVzc0ZvcihhcmdzT2Zmc2V0KSkpOwotI2VuZGlmCi0g
ICAgLy8gTG9hZCBhcmcgY291bnQgaW50byByZWdUMAotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7Ci0gICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSW50MzJUYWcpLCBpbnRUYWdGb3IoYXJnQ291bnREc3QpKTsKLSAgICBz
dG9yZTMyKHJlZ1QwLCBpbnRQYXlsb2FkRm9yKGFyZ0NvdW50RHN0KSk7Ci0gICAgSnVtcCBlbmRC
cmFuY2ggPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigxKSk7Ci0KLSAgICBt
dWwzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMyk7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZW9mKFJlZ2lzdGVy
KSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIHNpemVvZihSZWdpc3Rlcikp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdWJQdHIocmVnVDMsIHJlZ1QxKTsg
Ly8gcmVnVDEgaXMgbm93IHRoZSBzdGFydCBvZiB0aGUgb3V0IG9mIGxpbmUgYXJndW1lbnRzCi0g
ICAgYWRkUHRyKEltbTMyKGFyZ3NPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QyKTsgLy8gcmVnVDIgaXMgdGhlIHRhcmdldCBidWZmZXIKLSAgICAKLSAg
ICAvLyBCb3VuZHMgY2hlY2sgdGhlIHJlZ2lzdGVyZmlsZQotICAgIGFkZFB0cihyZWdUMiwgcmVn
VDMpOwotICAgIGFkZFB0cihJbW0zMigocmVnaXN0ZXJPZmZzZXQgLSBhcmdzT2Zmc2V0KSAqIHNp
emVvZihSZWdpc3RlcikpLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKEJlbG93
LCBBYnNvbHV0ZUFkZHJlc3MobV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxl
KCkuYWRkcmVzc09mRW5kKCkpLCByZWdUMykpOwotCi0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7Ci0gICAgTGFiZWwgbG9vcFN0YXJ0ID0gbGFiZWwoKTsKLSAgICBsb2FkUHRyKEJh
c2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigw
IC0gMiAqIHNpemVvZihSZWdpc3RlcikpKSwgcmVnVDMpOwotICAgIHN0b3JlUHRyKHJlZ1QzLCBC
YXNlSW5kZXgocmVnVDIsIHJlZ1QwLCBUaW1lc0VpZ2h0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
MCAtIHNpemVvZihSZWdpc3RlcikpKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBsb2Fk
UHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzaXplb2Yodm9pZCopIC0gMiAqIHNpemVvZihSZWdpc3RlcikpKSwgcmVnVDMpOwotICAg
IHN0b3JlUHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QwLCBUaW1lc0VpZ2h0LCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZW9mKHZvaWQqKSAtIHNpemVvZihSZWdpc3RlcikpKSk7Ci0j
ZW5kaWYKLSAgICBicmFuY2hTdWJQdHIoTm9uWmVybywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCku
bGlua1RvKGxvb3BTdGFydCwgdGhpcyk7Ci0gICAgZW5kQnJhbmNoLmxpbmsodGhpcyk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9sb2FkX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBpbnQgYXJnQ291bnREc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBhcmdzT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgZXhwZWN0ZWRQYXJhbXMgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gMTsKLSAg
ICBpZiAoZXhwZWN0ZWRQYXJhbXMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9sb2FkX3ZhcmFyZ3MpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KEltbTMyKGFyZ3NPZmZzZXQpKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgCi0gICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoSW50MzJUYWcpLCBpbnRUYWdGb3IoYXJnQ291bnREc3QpKTsK
LSAgICBzdG9yZTMyKHJldHVyblZhbHVlUmVnaXN0ZXIsIGludFBheWxvYWRGb3IoYXJnQ291bnRE
c3QpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmMoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBKdW1wIGxhenlKdW1wOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZp
c2lvbiA5ODU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9tZXRob2RfY2hlY2soSW5zdHJ1Y3RpCiAgICAgbWF0Y2gubGluayh0aGlzKTsKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKEZpcnN0UHJvZmlsaW5nU2l0ZSk7CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09E
RV9MRU5HVEgob3BfbWV0aG9kX2NoZWNrKSwgZHN0LCByZWdUMSwgcmVnVDApOworICAgIG1hcCht
X2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RF
X0xFTkdUSChvcF9nZXRfYnlfaWQpLCBkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgCiAgICAgLy8g
V2UndmUgYWxyZWFkeSBnZW5lcmF0ZWQgdGhlIGZvbGxvd2luZyBnZXRfYnlfaWQsIHNvIG1ha2Ug
c3VyZSBpdCdzIHNraXBwZWQgb3Zlci4KICAgICBtX2J5dGVjb2RlT2Zmc2V0ICs9IE9QQ09ERV9M
RU5HVEgob3BfZ2V0X2J5X2lkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiA5ODU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTEsMTIgKzk5MSw2IEBAIHN0YXRpYyBORVZF
Ul9JTkxJTkUgdm9pZCByZXR1cm5Ub1Rocm93VHIKICAgICByZXR1cm5BZGRyZXNzU2xvdCA9IFJl
dHVybkFkZHJlc3NQdHIoRnVuY3Rpb25QdHIoY3RpVk1UaHJvd1RyYW1wb2xpbmUpKTsKIH0KIAot
c3RhdGljIE5FVkVSX0lOTElORSB2b2lkIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJldHVybkFkZHJlc3NQdHIg
ZXhjZXB0aW9uTG9jYXRpb24sIFJldHVybkFkZHJlc3NQdHImIHJldHVybkFkZHJlc3NTbG90KQot
ewotICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihj
YWxsRnJhbWUpOwotICAgIHJldHVyblRvVGhyb3dUcmFtcG9saW5lKGdsb2JhbERhdGEsIGV4Y2Vw
dGlvbkxvY2F0aW9uLCByZXR1cm5BZGRyZXNzU2xvdCk7Ci19Ci0KICNkZWZpbmUgVk1fVEhST1df
RVhDRVBUSU9OKCkgXAogICAgIGRvIHsgXAogICAgICAgICBWTV9USFJPV19FWENFUFRJT05fQVRf
RU5EKCk7IFwKQEAgLTEwMjksNiArMTAyMyw3IEBAIHN0cnVjdCBFeGNlcHRpb25IYW5kbGVyIHsK
ICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7CiB9Owor
CiBzdGF0aWMgRXhjZXB0aW9uSGFuZGxlciBqaXRUaHJvdyhKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBSZXR1cm5B
ZGRyZXNzUHRyIGZhdWx0TG9jYXRpb24pCiB7CiAgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsK
QEAgLTEwNDcsMTAgKzEwNDIsMjAgQEAgc3RhdGljIEV4Y2VwdGlvbkhhbmRsZXIgaml0VGhyb3co
SlNHbG9iYQogLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBKSVQgc3R1YnMgdGhhdCBtYXkgdGhyb3cg
YW4gZXhjZXB0aW9uIGluIHRoZSBtaWRkbGUgb2YKIC8vIHByb2Nlc3NpbmcgYSBmdW5jdGlvbiBj
YWxsLiBUaGlzIGZ1bmN0aW9uIHJvbGxzIGJhY2sgdGhlIHJlZ2lzdGVyIGZpbGUgdG8KIC8vIG91
ciBjYWxsZXIsIHNvIGV4Y2VwdGlvbiBwcm9jZXNzaW5nIGNhbiBwcm9jZWVkIGZyb20gYSB2YWxp
ZCBzdGF0ZS4KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvbkhhbmRsZXIgdGhyb3dFeGNl
cHRpb25Gcm9tT3BDYWxsKENhbGxGcmFtZSogb2xkQ2FsbEZyYW1lLCBDYWxsRnJhbWUqIG5ld0Nh
bGxGcmFtZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIHRocm93RXhjZXB0aW9uRnJv
bU9wQ2FsbChKSVRTdGFja0ZyYW1lJiBqaXRTdGFja0ZyYW1lLCBDYWxsRnJhbWUqIG5ld0NhbGxG
cmFtZSwgUmV0dXJuQWRkcmVzc1B0ciYgcmV0dXJuQWRkcmVzc1Nsb3QpCit7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBuZXdDYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgQVNTRVJU
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbik7CisgICAgaml0U3RhY2tGcmFtZS5j
YWxsRnJhbWUgPSBjYWxsRnJhbWU7CisgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkudG9wQ2Fs
bEZyYW1lID0gY2FsbEZyYW1lOworICAgIHJldHVyblRvVGhyb3dUcmFtcG9saW5lKCZjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgUmV0dXJuQWRkcmVzc1B0cihuZXdDYWxsRnJhbWUtPnJldHVyblBD
KCkpLCByZXR1cm5BZGRyZXNzU2xvdCk7CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RhdGljIFQgdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsKEpJVFN0YWNrRnJh
bWUmIGppdFN0YWNrRnJhbWUsIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lLCBSZXR1cm5BZGRyZXNz
UHRyJiByZXR1cm5BZGRyZXNzU2xvdCwgSlNWYWx1ZSBleGNlcHRpb24pCiB7Ci0gICAgb2xkQ2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkudG9wQ2FsbEZyYW1lID0gb2xkQ2FsbEZyYW1lOwotICAgIHJl
dHVybiBqaXRUaHJvdygmb2xkQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG9sZENhbGxGcmFtZSwg
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKG9sZENhbGxGcmFtZSksIFJldHVybkFkZHJlc3NQdHIo
bmV3Q2FsbEZyYW1lLT5yZXR1cm5QQygpKSk7CisgICAgbmV3Q2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZSgpLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgIHJldHVybiB0aHJv
d0V4Y2VwdGlvbkZyb21PcENhbGw8VD4oaml0U3RhY2tGcmFtZSwgbmV3Q2FsbEZyYW1lLCByZXR1
cm5BZGRyZXNzU2xvdCk7CiB9CiAKICNpZiBDUFUoQVJNX1RIVU1CMikgJiYgQ09NUElMRVIoR0ND
KQpAQCAtMTM1NSwxMSArMTM2MCw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCByZWdp
c3Rlcl9maWwKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKIAotICAgIGlmIChVTkxJ
S0VMWSghc3RhY2tGcmFtZS5yZWdpc3RlckZpbGUtPmdyb3coJmNhbGxGcmFtZS0+cmVnaXN0ZXJz
KClbY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkpIHsKLSAg
ICAgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxs
KGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbEZyYW1lKTsKLSAgICAgICAgU1RVQl9TRVRf
UkVUVVJOX0FERFJFU1MoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwotICAgICAgICBjYWxsRnJhbWUg
PSBoYW5kbGVyLmNhbGxGcmFtZTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKCFzdGFja0ZyYW1l
LnJlZ2lzdGVyRmlsZS0+Z3JvdygmY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSkKKyAgICAgICAgcmV0dXJuIHRocm93
RXhjZXB0aW9uRnJvbU9wQ2FsbDx2b2lkKj4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JF
VFVSTl9BRERSRVNTLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lLT5jYWxsZXJG
cmFtZSgpKSk7CiAKICAgICByZXR1cm4gY2FsbEZyYW1lOwogfQpAQCAtMjE0MSwxOCArMjE0Mywx
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19mCiAgICAgcmV0dXJu
IHN0YWNrRnJhbWUuYXJnc1swXS5mdW5jdGlvbigpLT5tYWtlKHN0YWNrRnJhbWUuY2FsbEZyYW1l
LCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKIH0KIAotaW5saW5lIHZvaWQq
IGppdENvbXBpbGVGb3IoSklUU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQoraW5saW5lIHZvaWQqIGppdENvbXBpbGVGb3IoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IGFzRnVuY3Rpb24oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlZSgpKTsKKyAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxsZWUoKSk7
CiAgICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSk7CiAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOwogICAgIFNj
b3BlQ2hhaW5Ob2RlKiBjYWxsRGF0YVNjb3BlQ2hhaW4gPSBmdW5jdGlvbi0+c2NvcGUoKTsKLSAg
ICBKU09iamVjdCogZXJyb3IgPSBleGVjdXRhYmxlLT5jb21waWxlRm9yKHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIGtpbmQpOwotICAgIGlmIChlcnJvcikgewotICAg
ICAgICBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGVycm9y
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGZ1bmN0aW9uOworICAgIEpT
T2JqZWN0KiBlcnJvciA9IGV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoY2FsbEZyYW1lLCBjYWxsRGF0
YVNjb3BlQ2hhaW4sIGtpbmQpOworICAgIGlmICghZXJyb3IpCisgICAgICAgIHJldHVybiBmdW5j
dGlvbjsKKyAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKKyAg
ICByZXR1cm4gMDsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX2NhbGxfaml0
Q29tcGlsZSkKQEAgLTIxNjQsNyArMjE2NSwxMiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
Kiwgb3BfY2FsbF9qaXRDCiAgICAgQVNTRVJUKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jYWxsZWUo
KS0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxl
ZSgpLCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGVKUyk7CiAjZW5kaWYKICAgICAKLSAgICByZXR1cm4g
aml0Q29tcGlsZUZvcihzdGFja0ZyYW1lLCBDb2RlRm9yQ2FsbCk7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKyAgICB2b2lkKiByZXN1bHQgPSBqaXRD
b21waWxlRm9yKGNhbGxGcmFtZSwgQ29kZUZvckNhbGwpOworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPHZvaWQqPihzdGFja0ZyYW1lLCBj
YWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX2NvbnN0cnVjdF9qaXRDb21waWxlKQpA
QCAtMjE3NSwxMyArMjE4MSwxNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3BfY29u
c3RydWN0CiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIEFTU0VSVChhc0Z1
bmN0aW9uKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jYWxsZWUoKSktPm1ldGhvZFRhYmxlKCktPmdl
dENvbnN0cnVjdERhdGEoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlZSgpLCBjb25zdHJ1Y3RE
YXRhKSA9PSBDb25zdHJ1Y3RUeXBlSlMpOwogI2VuZGlmCi0gICAgCi0gICAgcmV0dXJuIGppdENv
bXBpbGVGb3Ioc3RhY2tGcmFtZSwgQ29kZUZvckNvbnN0cnVjdCk7CisKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOyAgICAKKyAgICB2b2lkKiByZXN1bHQg
PSBqaXRDb21waWxlRm9yKGNhbGxGcmFtZSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGw8dm9pZCo+KHN0
YWNrRnJhbWUsIGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CisKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1pbmxpbmUgdm9pZCogYXJpdHlDaGVja0ZvcihKSVRTdGFja0ZyYW1lJiBz
dGFja0ZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJldHVybkFkZHJlc3NQdHIm
IHN0dWJSZXR1cm5BZGRyZXNzKQoraW5saW5lIENhbGxGcmFtZSogYXJpdHlDaGVja0ZvcihDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKIHsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJh
bWUuY2FsbEZyYW1lOwogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24oY2FsbEZy
YW1lLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKCFjYWxsZWUtPmlzSG9zdEZ1bmN0aW9uKCkpOwog
ICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNhbGxlZS0+anNFeGVjdXRhYmxlKCktPmdl
bmVyYXRlZEJ5dGVjb2RlRm9yKGtpbmQpOwpAQCAtMjE5NywxMSArMjIwNyw4IEBAIGlubGluZSB2
b2lkKiBhcml0eUNoZWNrRm9yKEpJVFN0YWNrRnJhbWUKICAgICAgICAgc2l6ZV90IG51bVBhcmFt
ZXRlcnMgPSBuZXdDb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgciA9IGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkgKyBudW1QYXJhbWV0ZXJzOwogICAgICAgICBSZWdpc3RlciogbmV3
RW5kID0gciArIG5ld0NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7Ci0gICAgICAgIGlm
ICghc3RhY2tGcmFtZS5yZWdpc3RlckZpbGUtPmdyb3cobmV3RW5kKSkgewotICAgICAgICAgICAg
RXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsKG9sZENh
bGxGcmFtZSwgY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIHN0dWJSZXR1cm5BZGRyZXNzID0gUmV0
dXJuQWRkcmVzc1B0cihoYW5kbGVyLmNhdGNoUm91dGluZSk7Ci0gICAgICAgICAgICByZXR1cm4g
aGFuZGxlci5jYWxsRnJhbWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFyZWdpc3RlckZpbGUt
Pmdyb3cobmV3RW5kKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIFJlZ2lzdGVy
KiBhcmd2ID0gciAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIG51bVBhcmFt
ZXRlcnMgLSBhcmdDb3VudDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1QYXJh
bWV0ZXJzOyArK2kpCkBAIC0yMjEwLDExICsyMjE3LDggQEAgaW5saW5lIHZvaWQqIGFyaXR5Q2hl
Y2tGb3IoSklUU3RhY2tGcmFtZQogICAgICAgICBzaXplX3Qgb21pdHRlZEFyZ0NvdW50ID0gbmV3
Q29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBhcmdDb3VudDsKICAgICAgICAgciA9IGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkgKyBvbWl0dGVkQXJnQ291bnQ7CiAgICAgICAgIFJlZ2lzdGVyKiBu
ZXdFbmQgPSByICsgbmV3Q29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKLSAgICAgICAg
aWYgKCFzdGFja0ZyYW1lLnJlZ2lzdGVyRmlsZS0+Z3JvdyhuZXdFbmQpKSB7Ci0gICAgICAgICAg
ICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGwob2xk
Q2FsbEZyYW1lLCBjYWxsRnJhbWUpOwotICAgICAgICAgICAgc3R1YlJldHVybkFkZHJlc3MgPSBS
ZXR1cm5BZGRyZXNzUHRyKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKLSAgICAgICAgICAgIHJldHVy
biBoYW5kbGVyLmNhbGxGcmFtZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIXJlZ2lzdGVyRmls
ZS0+Z3JvdyhuZXdFbmQpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgUmVnaXN0
ZXIqIGFyZ3YgPSByIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gb21pdHRl
ZEFyZ0NvdW50OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9taXR0ZWRBcmdDb3Vu
dDsgKytpKQpAQCAtMjIyNyw1NCArMjIzMSw2NiBAQCBpbmxpbmUgdm9pZCogYXJpdHlDaGVja0Zv
cihKSVRTdGFja0ZyYW1lCiAgICAgY2FsbEZyYW1lLT5zZXRDYWxsZWUoY2FsbGVlKTsKICAgICBj
YWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbGVlLT5zY29wZSgpKTsKICAgICBjYWxsRnJhbWUt
PnNldFJldHVyblBDKHBjLnZhbHVlKCkpOworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKG5l
d0NvZGVCbG9jayk7CiAKLSAgICBBU1NFUlQoKHZvaWQqKWNhbGxGcmFtZSA8PSBzdGFja0ZyYW1l
LnJlZ2lzdGVyRmlsZS0+ZW5kKCkpOworICAgIEFTU0VSVCgodm9pZCopY2FsbEZyYW1lIDw9IHJl
Z2lzdGVyRmlsZS0+ZW5kKCkpOwogICAgIHJldHVybiBjYWxsRnJhbWU7CiB9CiAKIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9jYWxsX2FyaXR5Q2hlY2spCiB7CiAgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIAotICAgIHJldHVybiBhcml0eUNoZWNrRm9y
KHN0YWNrRnJhbWUsIENvZGVGb3JDYWxsLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisKKyAgICBDYWxsRnJh
bWUqIG5ld0NhbGxGcmFtZSA9IGFyaXR5Q2hlY2tGb3IoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLnJl
Z2lzdGVyRmlsZSwgQ29kZUZvckNhbGwpOworICAgIGlmICghbmV3Q2FsbEZyYW1lKQorICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPHZvaWQqPihzdGFja0ZyYW1lLCBjYWxs
RnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxs
RnJhbWUtPmNhbGxlckZyYW1lKCkpKTsKKworICAgIHJldHVybiBuZXdDYWxsRnJhbWU7CiB9CiAK
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIHsK
ICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICByZXR1cm4gYXJp
dHlDaGVja0ZvcihzdGFja0ZyYW1lLCBDb2RlRm9yQ29uc3RydWN0LCBTVFVCX1JFVFVSTl9BRERS
RVNTKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwor
CisgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBhcml0eUNoZWNrRm9yKGNhbGxGcmFtZSwg
c3RhY2tGcmFtZS5yZWdpc3RlckZpbGUsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGlmICghbmV3
Q2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPHZvaWQq
PihzdGFja0ZyYW1lLCBjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MsIGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCkpKTsKKworICAgIHJldHVybiBu
ZXdDYWxsRnJhbWU7CiB9CiAKLWlubGluZSB2b2lkKiBsYXp5TGlua0ZvcihKSVRTdGFja0ZyYW1l
JiBzdGFja0ZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitpbmxpbmUgdm9pZCog
bGF6eUxpbmtGb3IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKIHsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OwogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxsZWUo
KSk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUo
KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gMDsKKyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9ICZjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oY2FsbEZyYW1l
LT5yZXR1cm5QQygpKTsKKwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQog
ICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS5h
ZGRyZXNzRm9yQ2FsbCgpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUt
PmNvbXBpbGVGb3IoY2FsbEZyYW1lLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOwotICAgICAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlv
biA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOworICAgICAgICBpZiAoZXJy
b3IpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQogICAgICAgICBjb2RlQmxvY2sg
PSAmZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihraW5kKTsKLSAgICAg
ICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA9PSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkKLSAgICAgICAgICAgIGNv
ZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCkuYWRk
cmVzc0ZvckNhbGwoKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
LT5tX251bVBhcmFtZXRlcnMpCisgICAgICAgICAgICB8fCBjYWxsTGlua0luZm8tPmNhbGxUeXBl
ID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MpCiAgICAgICAgICAgICBjb2RlUHRyID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUt
PmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCkuYWRkcmVzc0ZvckNhbGwoKTsKICAgICB9Ci0gICAg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSAmc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxl
ckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oY2FsbEZyYW1lLT5yZXR1cm5Q
QygpKTsKIAogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBjYWxs
TGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAgIEpJVDo6bGlua0ZvcihjYWxs
ZWUsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKSwgY29k
ZUJsb2NrLCBjb2RlUHRyLCBjYWxsTGlua0luZm8sIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSwgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBraW5kKTsKKyAgICAgICAgSklU
OjpsaW5rRm9yKGNhbGxlZSwgY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKSwg
Y29kZUJsb2NrLCBjb2RlUHRyLCBjYWxsTGlua0luZm8sICZjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSwga2luZCk7CiAKICAgICByZXR1cm4gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwogfQpA
QCAtMjI4MiwxNSArMjI5OCwyNSBAQCBpbmxpbmUgdm9pZCogbGF6eUxpbmtGb3IoSklUU3RhY2tG
cmFtZSYgCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtDYWxsKQogewog
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLSAgICAKLSAgICByZXR1cm4g
bGF6eUxpbmtGb3Ioc3RhY2tGcmFtZSwgQ29kZUZvckNhbGwpOworCisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKyAgICB2b2lkKiByZXN1bHQgPSBsYXp5
TGlua0ZvcihjYWxsRnJhbWUsIENvZGVGb3JDYWxsKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uRnJvbU9wQ2FsbDx2b2lkKj4oc3RhY2tGcmFtZSwgY2Fs
bEZyYW1lLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlua0NvbnN0cnVjdCkKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgCi0gICAgcmV0dXJuIGxh
enlMaW5rRm9yKHN0YWNrRnJhbWUsIENvZGVGb3JDb25zdHJ1Y3QpOworCisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKyAgICB2b2lkKiByZXN1bHQgPSBs
YXp5TGlua0ZvcihjYWxsRnJhbWUsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPHZvaWQqPihzdGFja0Zy
YW1lLCBjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXNoX2FjdGl2YXRp
b24pCkBAIC0yMzA2LDM5ICsyMzMyLDI4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAK
LSAgICBKU1ZhbHVlIGZ1bmNWYWwgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgSlNWYWx1
ZSBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZUFzVmFsdWUoKTsKIAogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY1ZhbCwgY2Fs
bERhdGEpOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxs
RGF0YSk7CiAKICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVKUyk7CisgICAgaWYgKGNh
bGxUeXBlICE9IENhbGxUeXBlSG9zdCkgeworICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGVOb25lKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uRnJvbU9wQ2FsbDxFbmNv
ZGVkSlNWYWx1ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBj
cmVhdGVOb3RBRnVuY3Rpb25FcnJvcihjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCksIGNhbGxlZSkp
OworICAgIH0KIAotICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCk7Ci0gICAgICAg
IGludCBhcmdDb3VudCA9IHN0YWNrRnJhbWUuYXJnc1syXS5pbnQzMigpOwotICAgICAgICBDYWxs
RnJhbWUqIHByZXZpb3VzQ2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUocHJldmlvdXNDYWxsRnJh
bWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICBpZiAoIXN0YWNrRnJh
bWUucmVnaXN0ZXJGaWxlLT5ncm93KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpKSB7Ci0gICAgICAg
ICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihwcmV2aW91c0NhbGxGcmFtZSwgc3RhY2tGcmFt
ZS5nbG9iYWxEYXRhLCBjYWxsRnJhbWUtPnJldHVyblBDKCksIFNUVUJfUkVUVVJOX0FERFJFU1Mp
OwotICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYWxsRnJhbWUtPmluaXQoMCwgc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPigoU1RVQl9SRVRV
Uk5fQUREUkVTUykudmFsdWUoKSksIHByZXZpb3VzQ2FsbEZyYW1lLT5zY29wZUNoYWluKCksIHBy
ZXZpb3VzQ2FsbEZyYW1lLCBhcmdDb3VudCwgYXNPYmplY3QoZnVuY1ZhbCkpOwotCi0gICAgICAg
IEVuY29kZWRKU1ZhbHVlIHJldHVyblZhbHVlOwotICAgICAgICB7Ci0gICAgICAgICAgICBTYW1w
bGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQoQ1RJX1NBTVBMRVIpOwotICAgICAg
ICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lKTsK
LSAgICAgICAgfQotCi0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAg
ICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICBFbmNvZGVkSlNWYWx1ZSByZXR1cm5WYWx1ZTsK
KyAgICB7CisgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChD
VElfU0FNUExFUik7CisgICAgICAgIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0
aW9uKGNhbGxGcmFtZSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBl
Tm9uZSk7CisgICAgaWYgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQorICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPEVuY29kZWRKU1ZhbHVlPihzdGFja0Zy
YW1lLCBjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MpOwogCi0gICAgc3RhY2tGcmFtZS5n
bG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihzdGFja0ZyYW1l
LmNhbGxGcmFtZSwgZnVuY1ZhbCk7Ci0gICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CisgICAgcmV0
dXJuIHJldHVyblZhbHVlOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfY3JlYXRlX2FyZ3VtZW50cykKQEAgLTI0NDgsMzkgKzI0NjMsMjggQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogewogICAgIFNUVUJfSU5JVF9TVEFDS19G
UkFNRShzdGFja0ZyYW1lKTsKIAotICAgIEpTVmFsdWUgY29uc3RyVmFsID0gc3RhY2tGcmFtZS5h
cmdzWzBdLmpzVmFsdWUoKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOworICAgIEpTVmFsdWUgY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWVBc1ZhbHVl
KCk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgQ29uc3RydWN0VHlw
ZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShjb25zdHJWYWwsIGNvbnN0cnVjdERh
dGEpOworICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEo
Y2FsbGVlLCBjb25zdHJ1Y3REYXRhKTsKIAogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENv
bnN0cnVjdFR5cGVKUyk7CisgICAgaWYgKGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZUhv
c3QpIHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUp
OworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPEVuY29kZWRKU1ZhbHVl
PihzdGFja0ZyYW1lLCBjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MsIGNyZWF0ZU5vdEFD
b25zdHJ1Y3RvckVycm9yKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbGVlKSk7CisgICAg
fQogCi0gICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKLSAgICAg
ICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCk7Ci0gICAg
ICAgIGludCBhcmdDb3VudCA9IHN0YWNrRnJhbWUuYXJnc1syXS5pbnQzMigpOwotICAgICAgICBD
YWxsRnJhbWUqIHByZXZpb3VzQ2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAg
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUocHJldmlvdXNDYWxs
RnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICBpZiAoIXN0YWNr
RnJhbWUucmVnaXN0ZXJGaWxlLT5ncm93KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpKSB7Ci0gICAg
ICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihwcmV2aW91c0NhbGxGcmFtZSwgc3RhY2tG
cmFtZS5nbG9iYWxEYXRhLCBjYWxsRnJhbWUtPnJldHVyblBDKCksIFNUVUJfUkVUVVJOX0FERFJF
U1MpOwotICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjYWxsRnJhbWUtPmluaXQoMCwgc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPigoU1RVQl9S
RVRVUk5fQUREUkVTUykudmFsdWUoKSksIHByZXZpb3VzQ2FsbEZyYW1lLT5zY29wZUNoYWluKCks
IHByZXZpb3VzQ2FsbEZyYW1lLCBhcmdDb3VudCwgYXNPYmplY3QoY29uc3RyVmFsKSk7Ci0KLSAg
ICAgICAgRW5jb2RlZEpTVmFsdWUgcmV0dXJuVmFsdWU7Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChDVElfU0FNUExFUik7Ci0g
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGNh
bGxGcmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpOwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgRW5jb2RlZEpTVmFsdWUgcmV0
dXJuVmFsdWU7CisgICAgeworICAgICAgICBTYW1wbGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNh
bGxSZWNvcmQoQ1RJX1NBTVBMRVIpOworICAgICAgICByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERh
dGEubmF0aXZlLmZ1bmN0aW9uKGNhbGxGcmFtZSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGNvbnN0
cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOworICAgIGlmIChzdGFja0ZyYW1lLmdsb2Jh
bERhdGEtPmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uRnJvbU9wQ2Fs
bDxFbmNvZGVkSlNWYWx1ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVSTl9BRERS
RVNTKTsKIAotICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlTm90
QUNvbnN0cnVjdG9yRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsIGNvbnN0clZhbCk7Ci0gICAg
Vk1fVEhST1dfRVhDRVBUSU9OKCk7CisgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBERUZJ
TkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbCkKQEAgLTI3MzAs
MTAyICsyNzM0LDIwIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8K
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklORV9TVFVCX0ZV
TkNUSU9OKGludCwgb3BfbG9hZF92YXJhcmdzKQorREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCos
IG9wX2xvYWRfdmFyYXJncykKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFt
ZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwog
ICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlID0gc3RhY2tGcmFtZS5yZWdpc3RlckZpbGU7
Ci0gICAgaW50IGFyZ3NPZmZzZXQgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKLSAgICBK
U1ZhbHVlIGFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbYXJnc09mZnNldF0uanNW
YWx1ZSgpOwotICAgIHVpbnQzMl90IGFyZ0NvdW50ID0gMDsKLSAgICBpZiAoIWFyZ3VtZW50cykg
ewotICAgICAgICBpbnQgcHJvdmlkZWRQYXJhbXMgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW1Jl
Z2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudF0uaSgpIC0gMTsKLSAgICAgICAgYXJnQ291bnQgPSBw
cm92aWRlZFBhcmFtczsKLSAgICAgICAgaWYgKGFyZ0NvdW50ID4gQXJndW1lbnRzOjpNYXhBcmd1
bWVudHMpIHsKLSAgICAgICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0g
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBWTV9USFJP
V19FWENFUFRJT04oKTsKLSAgICAgICAgfQotICAgICAgICBpbnQzMl90IHNpemVEZWx0YSA9IGFy
Z3NPZmZzZXQgKyBhcmdDb3VudCArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
LSAgICAgICAgUmVnaXN0ZXIqIG5ld0VuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBzaXpl
RGVsdGE7Ci0gICAgICAgIGlmICghcmVnaXN0ZXJGaWxlLT5ncm93KG5ld0VuZCkgfHwgKChuZXdF
bmQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSAhPSBzaXplRGVsdGEpKSB7Ci0gICAgICAgICAg
ICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dF
cnJvcihjYWxsRnJhbWUpOwotICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaW50MzJfdCBleHBlY3RlZFBhcmFtcyA9IGFzRnVuY3Rpb24oY2FsbEZy
YW1lLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpOwotICAgICAg
ICBpbnQzMl90IGlucGxhY2VBcmdzID0gbWluKHByb3ZpZGVkUGFyYW1zLCBleHBlY3RlZFBhcmFt
cyk7Ci0gICAgICAgIAotICAgICAgICBSZWdpc3RlciogaW5wbGFjZUFyZ3NEc3QgPSBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpICsgYXJnc09mZnNldDsKLQotICAgICAgICBSZWdpc3RlciogaW5wbGFj
ZUFyZ3NFbmQgPSBpbnBsYWNlQXJnc0RzdCArIGlucGxhY2VBcmdzOwotICAgICAgICBSZWdpc3Rl
ciogaW5wbGFjZUFyZ3NFbmQyID0gaW5wbGFjZUFyZ3NEc3QgKyBwcm92aWRlZFBhcmFtczsKLQot
ICAgICAgICBSZWdpc3RlciogaW5wbGFjZUFyZ3NTcmMgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygp
IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gZXhwZWN0ZWRQYXJhbXM7Ci0g
ICAgICAgIFJlZ2lzdGVyKiBpbnBsYWNlQXJnc1NyYzIgPSBpbnBsYWNlQXJnc1NyYyAtIHByb3Zp
ZGVkUGFyYW1zIC0gMSArIGlucGxhY2VBcmdzOwotIAotICAgICAgICAvLyBGaXJzdCBzdGVwIGlz
IHRvIGNvcHkgdGhlICJleHBlY3RlZCIgcGFyYW1ldGVycyBmcm9tIHRoZWlyIG5vcm1hbCBsb2Nh
dGlvbiByZWxhdGl2ZSB0byB0aGUgY2FsbGZyYW1lCi0gICAgICAgIHdoaWxlIChpbnBsYWNlQXJn
c0RzdCA8IGlucGxhY2VBcmdzRW5kKQotICAgICAgICAgICAgKmlucGxhY2VBcmdzRHN0KysgPSAq
aW5wbGFjZUFyZ3NTcmMrKzsKLQotICAgICAgICAvLyBUaGVuIHdlIGNvcHkgYW55IGFkZGl0aW9u
YWwgYXJndW1lbnRzIHRoYXQgbWF5IGJlIGZ1cnRoZXIgdXAgdGhlIHN0YWNrICgnLTEnIHRvIGFj
Y291bnQgZm9yICd0aGlzJykKLSAgICAgICAgd2hpbGUgKGlucGxhY2VBcmdzRHN0IDwgaW5wbGFj
ZUFyZ3NFbmQyKQotICAgICAgICAgICAgKmlucGxhY2VBcmdzRHN0KysgPSAqaW5wbGFjZUFyZ3NT
cmMyKys7Ci0KLSAgICB9IGVsc2UgaWYgKCFhcmd1bWVudHMuaXNVbmRlZmluZWRPck51bGwoKSkg
ewotICAgICAgICBpZiAoIWFyZ3VtZW50cy5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBzdGFj
a0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGNh
bGxGcmFtZSwgIkZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSIsIGFyZ3VtZW50cyk7Ci0gICAgICAg
ICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXNPYmpl
Y3QoYXJndW1lbnRzKS0+Y2xhc3NJbmZvKCkgPT0gJkFyZ3VtZW50czo6c19pbmZvKSB7Ci0gICAg
ICAgICAgICBBcmd1bWVudHMqIGFyZ3NPYmplY3QgPSBhc0FyZ3VtZW50cyhhcmd1bWVudHMpOwot
ICAgICAgICAgICAgYXJnQ291bnQgPSBhcmdzT2JqZWN0LT5udW1Qcm92aWRlZEFyZ3VtZW50cyhj
YWxsRnJhbWUpOwotICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID4gQXJndW1lbnRzOjpNYXhBcmd1
bWVudHMpIHsKLSAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlv
biA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwotICAgICAgICAgICAgICAg
IFZNX1RIUk9XX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50MzJf
dCBzaXplRGVsdGEgPSBhcmdzT2Zmc2V0ICsgYXJnQ291bnQgKyBSZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlclNpemU7Ci0gICAgICAgICAgICBSZWdpc3RlciogbmV3RW5kID0gY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKSArIHNpemVEZWx0YTsKLSAgICAgICAgICAgIGlmICghcmVnaXN0ZXJGaWxl
LT5ncm93KG5ld0VuZCkgfHwgKChuZXdFbmQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSAhPSBz
aXplRGVsdGEpKSB7Ci0gICAgICAgICAgICAgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNl
cHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKLSAgICAgICAgICAg
ICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFy
Z3NPYmplY3QtPmNvcHlUb1JlZ2lzdGVycyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyBhcmdzT2Zmc2V0LCBhcmdDb3VudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNKU0FycmF5
KCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgYXJndW1lbnRzKSkgewotICAgICAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBhc0FycmF5KGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBhcmdDb3VudCA9
IGFycmF5LT5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChhcmdDb3VudCA+IEFyZ3VtZW50czo6
TWF4QXJndW1lbnRzKSB7Ci0gICAgICAgICAgICAgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5l
eGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKLSAgICAgICAg
ICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGludDMyX3Qgc2l6ZURlbHRhID0gYXJnc09mZnNldCArIGFyZ0NvdW50ICsgUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgUmVnaXN0ZXIqIG5ld0VuZCA9IGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBzaXplRGVsdGE7Ci0gICAgICAgICAgICBpZiAoIXJlZ2lz
dGVyRmlsZS0+Z3JvdyhuZXdFbmQpIHx8ICgobmV3RW5kIC0gY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSkgIT0gc2l6ZURlbHRhKSkgewotICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7Ci0gICAg
ICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBhcnJheS0+Y29weVRvUmVnaXN0ZXJzKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSArIGFyZ3NPZmZzZXQsIGFyZ0NvdW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEpTT2JqZWN0KiBhcmdPYmplY3QgPSBhc09iamVjdChhcmd1bWVudHMpOwotICAgICAgICAg
ICAgYXJnQ291bnQgPSBhcmdPYmplY3QtPmdldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGlmIChh
cmdDb3VudCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzKSB7Ci0gICAgICAgICAgICAgICAgc3Rh
Y2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Io
Y2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGludDMyX3Qgc2l6ZURlbHRhID0gYXJnc09mZnNldCArIGFy
Z0NvdW50ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAg
UmVnaXN0ZXIqIG5ld0VuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBzaXplRGVsdGE7Ci0g
ICAgICAgICAgICBpZiAoIXJlZ2lzdGVyRmlsZS0+Z3JvdyhuZXdFbmQpIHx8ICgobmV3RW5kIC0g
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgIT0gc2l6ZURlbHRhKSkgewotICAgICAgICAgICAgICAg
IHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWdpc3RlciogYXJnc0J1ZmZlciA9IGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkgKyBhcmdzT2Zmc2V0OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBhcmdzQnVmZmVyW2ld
ID0gYXNPYmplY3QoYXJndW1lbnRzKS0+Z2V0KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgICAgICAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQorICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7Cisg
ICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gc3RhY2tGcmFtZS5hcmdzWzJdLmludDMyKCk7CiAK
LSAgICByZXR1cm4gYXJnQ291bnQgKyAxOworICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0g
bG9hZFZhcmFyZ3MoY2FsbEZyYW1lLCByZWdpc3RlckZpbGUsIHRoaXNWYWx1ZSwgYXJndW1lbnRz
LCBmaXJzdEZyZWVSZWdpc3Rlcik7CisgICAgaWYgKCFuZXdDYWxsRnJhbWUpCisgICAgICAgIFZN
X1RIUk9XX0VYQ0VQVElPTigpOworICAgIHJldHVybiBuZXdDYWxsRnJhbWU7CiB9CiAKIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9uZWdhdGUpCkBAIC0zNDIyLDI1ICsz
MzQ0LDI0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9jYWxsX2V2YWwpCiB7CiAgICAgU1RV
Ql9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIEFTU0VSVChzdGFja0ZyYW1lLmNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlIHx8ICFzdGFj
a0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSB8fCBz
dGFja0ZyYW1lLmNhbGxGcmFtZS0+dW5jaGVja2VkUihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwogCiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBSZWdpc3RlckZpbGUq
IHJlZ2lzdGVyRmlsZSA9IHN0YWNrRnJhbWUucmVnaXN0ZXJGaWxlOworICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgQVNTRVJUKGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25D
b2RlCisgICAgICAgIHx8ICFjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5u
ZWVkc0Z1bGxTY29wZUNoYWluKCkKKyAgICAgICAgfHwgY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgp
LT51bmNoZWNrZWRSKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmFjdGl2
YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOworCisgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNo
YWluKGNhbGxlckZyYW1lLT5zY29wZUNoYWluKCkpOworICAgIGNhbGxGcmFtZS0+c2V0UmV0dXJu
UEMoc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPigoU1RVQl9SRVRVUk5fQUREUkVTUykudmFsdWUo
KSkpOworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKDApOwogCi0gICAgSW50ZXJwcmV0ZXIq
IGludGVycHJldGVyID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5pbnRlcnByZXRlcjsKLSAgICAK
LSAgICBKU1ZhbHVlIGZ1bmNWYWwgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAg
IGludCByZWdpc3Rlck9mZnNldCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpOwotICAgIGlu
dCBhcmdDb3VudCA9IHN0YWNrRnJhbWUuYXJnc1syXS5pbnQzMigpOwotCi0gICAgaWYgKCFpc0hv
c3RGdW5jdGlvbihmdW5jVmFsLCBnbG9iYWxGdW5jRXZhbCkpCisgICAgaWYgKCFpc0hvc3RGdW5j
dGlvbihjYWxsRnJhbWUtPmNhbGxlZUFzVmFsdWUoKSwgZ2xvYmFsRnVuY0V2YWwpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKLSAgICBSZWdpc3RlciogbmV3
Q2FsbEZyYW1lID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0OwotICAg
IFJlZ2lzdGVyKiBhcmd2ID0gbmV3Q2FsbEZyYW1lIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplIC0gYXJnQ291bnQ7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsKGNhbGxGcmFt
ZSk7CisgICAgaWYgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQorICAgICAgICBy
ZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPEVuY29kZWRKU1ZhbHVlPihzdGFja0ZyYW1l
LCBjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MpOwogCi0gICAgSlNWYWx1ZSByZXN1bHQg
PSBpbnRlcnByZXRlci0+Y2FsbEV2YWwoY2FsbEZyYW1lLCByZWdpc3RlckZpbGUsIGFyZ3YsIGFy
Z0NvdW50LCByZWdpc3Rlck9mZnNldCk7Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQo
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDk4NTg4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSgpIHsgcmV0dXJu
IEpTVmFsdWU6OmRlY29kZShhc0VuY29kZWRKU1ZhbHVlKTsgfQogICAgICAgICBKU09iamVjdCog
anNPYmplY3QoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGFzUG9pbnRlcik7IH0K
KyAgICAgICAgUmVnaXN0ZXIqIHJlZygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4o
YXNQb2ludGVyKTsgfQogICAgICAgICBJZGVudGlmaWVyJiBpZGVudGlmaWVyKCkgeyByZXR1cm4g
KnN0YXRpY19jYXN0PElkZW50aWZpZXIqPihhc1BvaW50ZXIpOyB9CiAgICAgICAgIGludDMyX3Qg
aW50MzIoKSB7IHJldHVybiBhc0ludDMyOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oYXNQb2ludGVyKTsgfQpAQCAtNDAx
LDcgKzQwMiw3IEBAIGV4dGVybiAiQyIgewogICAgIGludCBKSVRfU1RVQiBjdGlfb3BfamdyZWF0
ZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3RpX29wX2pncmVh
dGVyZXEoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3RpX29wX2p0
cnVlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgaW50IEpJVF9TVFVCIGN0aV9vcF9sb2Fk
X3ZhcmFyZ3MoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkKiBKSVRfU1RVQiBjdGlf
b3BfbG9hZF92YXJhcmdzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgaW50IEpJVF9TVFVC
IGN0aV90aW1lb3V0X2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgaW50IEpJVF9T
VFVCIGN0aV9oYXNfcHJvcGVydHkoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJ
VF9TVFVCIGN0aV9vcF9jaGVja19oYXNfaW5zdGFuY2UoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lv
biA5ODU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwog
Ci0gICAgICAgIHVpbnQzMl90IG51bVByb3ZpZGVkQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QgCisgICAgICAgIHVpbnQzMl90IGxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0IAog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZC0+b3ZlcnJvZGVMZW5ndGgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkudG9VSW50MzIoZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTg1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDYgKzQ1
Niw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIHsKICNpZiAh
RU5BQkxFKEpJVCkKICAgICBVTlVTRURfUEFSQU0oaml0VHlwZSk7CisgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwogI2VuZGlmCiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRp
ZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlv
bjsKQEAgLTUxNCw2ICs1MTUsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21w
aWxlRm9yCiBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0
SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUs
IEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKICAgICBVTlVTRURfUEFSQU0oaml0VHlwZSk7
CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIAogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBK
SVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAg
ICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDk4NTg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzIsMTcgKzEzMiwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUHJvCiAgICAgaWYgKCFhcnJheS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAg
ICAgICAgIGlmICghYXJyYXkuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICBpZiAoYXNPYmplY3QoYXJyYXkpLT5jbGFzc0luZm8o
KSA9PSAmQXJndW1lbnRzOjpzX2luZm8pCisgICAgICAgIGlmIChhc09iamVjdChhcnJheSktPmNs
YXNzSW5mbygpID09ICZBcmd1bWVudHM6OnNfaW5mbykgeworICAgICAgICAgICAgaWYgKGFzQXJn
dW1lbnRzKGFycmF5KS0+bGVuZ3RoKGV4ZWMpID4gQXJndW1lbnRzOjpNYXhBcmd1bWVudHMpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1N0YWNrT3ZlcmZsb3dF
cnJvcihleGVjKSk7CiAgICAgICAgICAgICBhc0FyZ3VtZW50cyhhcnJheSktPmZpbGxBcmdMaXN0
KGV4ZWMsIGFwcGx5QXJncyk7Ci0gICAgICAgIGVsc2UgaWYgKGlzSlNBcnJheSgmZXhlYy0+Z2xv
YmFsRGF0YSgpLCBhcnJheSkpCisgICAgICAgIH0gZWxzZSBpZiAoaXNKU0FycmF5KCZleGVjLT5n
bG9iYWxEYXRhKCksIGFycmF5KSkgeworICAgICAgICAgICAgaWYgKGFzQXJyYXkoYXJyYXkpLT5s
ZW5ndGgoKSA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzKQorICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogICAgICAg
ICAgICAgYXNBcnJheShhcnJheSktPmZpbGxBcmdMaXN0KGV4ZWMsIGFwcGx5QXJncyk7Ci0gICAg
ICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXNPYmplY3QoYXJyYXkpLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgICAgICBpZiAobGVuZ3RoID4gQXJndW1lbnRzOjpN
YXhBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcihleGVjKSk7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICBhcHBseUFyZ3MuYXBwZW5k
KGFzQXJyYXkoYXJyYXkpLT5nZXQoZXhlYywgaSkpOworICAgICAgICAgICAgICAgIGFwcGx5QXJn
cy5hcHBlbmQoYXNPYmplY3QoYXJyYXkpLT5nZXQoZXhlYywgaSkpOwogICAgICAgICB9CiAgICAg
fQotCisgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIHRoaXNWYWx1
ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBleGVjLT5hcmd1bWVudCgwKSwgYXBwbHlBcmdzKSk7CiB9
CiAK
</data>
<flag name="review"
          id="113615"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>