<?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>139416</bug_id>
          
          <creation_ts>2014-12-08 14:55:33 -0800</creation_ts>
          <short_desc>Removed some allocation and cruft from the parser</short_desc>
          <delta_ts>2014-12-08 21:43:51 -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>New Bugs</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>
          
          <blocked>139428</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1053538</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-08 14:55:33 -0800</bug_when>
    <thetext>Removed some allocation and cruft from the parser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053557</commentid>
    <comment_count>1</comment_count>
      <attachid>242857</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-08 15:51:57 -0800</bug_when>
    <thetext>Created attachment 242857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053583</commentid>
    <comment_count>2</comment_count>
      <attachid>242857</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-08 16:51:17 -0800</bug_when>
    <thetext>Comment on attachment 242857
Patch

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

r=me with one suggestion.

&gt; Source/JavaScriptCore/parser/SyntaxChecker.h:133
&gt; +    ExpressionType appendToCommaExpr(const JSTokenLocation&amp;, ExpressionType&amp; tail, ExpressionType next) { tail = next; return next; }

I suggest changing this prototype to match the one in ASTBuilder (tail can be just ExpressionType).  Also, you no longer need to assign &quot;tail = next;&quot; here since you&apos;ve changed the parser to do the assign using the return value.  Hence, this &quot;tail&quot; assignment is redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053592</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-08 17:13:25 -0800</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/parser/SyntaxChecker.h:133
&gt; &gt; +    ExpressionType appendToCommaExpr(const JSTokenLocation&amp;, ExpressionType&amp; tail, ExpressionType next) { tail = next; return next; }
&gt; 
&gt; I suggest changing this prototype to match the one in ASTBuilder (tail can
&gt; be just ExpressionType).  Also, you no longer need to assign &quot;tail = next;&quot;
&gt; here since you&apos;ve changed the parser to do the assign using the return
&gt; value.  Hence, this &quot;tail&quot; assignment is redundant.

You&apos;re right that I wrote this redundantly with its caller; I&apos;ll fix that. But the code will continue to need a distinct signature. This code is a bit evil. The ASTBuilder builds a valid linked list of comma nodes. But the SyntaxChecker actually builds an invalid list that constantly overwrites its head with its tail. The reason it does this is so that the parent expression of the comma list can statically check for errors caused by the value of the last node (which is the node that produces the comma expression&apos;s value). By overwriting the head with the tail, the syntax checker presents only the tail node of the comma list to its parent expression for checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053593</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-08 17:14:27 -0800</bug_when>
    <thetext>For example, the program

    &apos;use strict&apos;; ++(1, 2, 3, eval)

is a syntax error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053608</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-08 17:31:24 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; By overwriting the head with the tail, the syntax checker presents only the
&gt; tail node of the comma list to its parent expression for checking.

Interesting.  So tricky.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053610</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-08 17:53:16 -0800</bug_when>
    <thetext>Committed r177001: &lt;http://trac.webkit.org/changeset/177001&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053642</commentid>
    <comment_count>7</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-12-08 21:24:02 -0800</bug_when>
    <thetext>
EFL port has broken since r177001. Because EFL port treats build warning as error. This patch generated a below warning.


../../Source/JavaScriptCore/parser/Nodes.h:1104:11: error: direct base ‘JSC::ParserArenaFreeable’ inaccessible in ‘JSC::CommaNode’ due to ambiguity [-Werror]
     class CommaNode final : public ExpressionNode, public ParserArenaFreeable {
           ^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053650</commentid>
    <comment_count>8</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-12-08 21:43:29 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; EFL port has broken since r177001. Because EFL port treats build warning as
&gt; error. This patch generated a below warning.
&gt; 
&gt; 
&gt; ../../Source/JavaScriptCore/parser/Nodes.h:1104:11: error: direct base
&gt; ‘JSC::ParserArenaFreeable’ inaccessible in ‘JSC::CommaNode’ due to ambiguity
&gt; [-Werror]
&gt;      class CommaNode final : public ExpressionNode, public
&gt; ParserArenaFreeable {
&gt;            ^

I upload a fix to Bug 139428.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242857</attachid>
            <date>2014-12-08 15:51:57 -0800</date>
            <delta_ts>2014-12-08 16:51:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139416-20141208155237.patch</filename>
            <type>text/plain</type>
            <size>37361</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2OTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDE0LTEyLTA4ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlZCBzb21lIGFsbG9jYXRpb24gYW5kIGNydWZ0IGZyb20gdGhlIHBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm93LCB0aGUgb25s
eSBBU1Qgbm9kZXMgdGhhdCByZXF1aXJlIGEgZGVzdHJ1Y3RvciBhcmUgdGhlIG9uZXMgdGhhdAor
ICAgICAgICByZWxhdGUgdG8gcGlja2xpbmcgYSBmdW5jdGlvbidzIGFyZ3VtZW50cyAtLSB3aGlj
aCB3aWxsIHJlcXVpcmVkIHNvbWUKKyAgICAgICAgZGVlcGVyIHRoaW5raW5nIHRvIHJlc29sdmUu
CisKKyAgICAgICAgVGhpcyBpcyBhIDwgMSUgcGFyc2VyIHNwZWVkdXAuCisKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogUmVtb3Zl
ZCBOb2RlSW5mbyBiZWNhdXNlIGl0CisgICAgICAgIHdhcyB1bnVzZWQuCisKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6Q29tbWFOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpTb3VyY2VFbGVtZW50czo6bGFzdFN0YXRlbWVu
dCk6CisgICAgICAgIChKU0M6OlNvdXJjZUVsZW1lbnRzOjplbWl0Qnl0ZWNvZGUpOiBVcGRhdGVk
IGZvciBpbnRlcmZhY2UgY2hhbmdlIHRvIGxpbmtlZCBsaXN0LgorCisgICAgICAgICogcGFyc2Vy
L0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6QVNUQnVpbGRlcik6Cisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnZhckRlY2xhcmF0aW9ucyk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6OmZ1bmNEZWNsYXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVGdW5jRGVjbFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmFk
ZFZhcik6IFJlbW92ZWQgdGhlIFBhcnNlckFyZW5hRGF0YSBhYnN0cmFjdGlvbiBiZWNhdXNlCisg
ICAgICAgIGl0IHdhc24ndCBidXlpbmcgdXMgYW55dGhpbmcuIFdlIGNhbiBqdXN0IHVzZSBWZWN0
b3IgZGlyZWN0bHkuCisKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ29tbWFFeHBy
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6YXBwZW5kVG9Db21tYUV4cHIpOiBDaGFuZ2Vk
IHRvIHVzZSBhIGxpbmtlZCBsaXN0IGluc3RlYWQKKyAgICAgICAgb2YgYSB2ZWN0b3IsIHRvIGF2
b2lkIGFsbG9jYXRpbmcgYSB2ZWN0b3Igd2l0aCBpbmxpbmUgY2FwYWNpdHkgaW4gdGhlCisgICAg
ICAgIGNvbW1vbiBjYXNlIGluIHdoaWNoIGFuIGV4cHJlc3Npb24gaXMgbm90IGZvbGxvd2VkIGJ5
IGEgdmVjdG9yLgorCisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OlNjb3BlOjpTY29wZSk6IFVz
ZSBWZWN0b3IgZGlyZWN0bHkgdG8gYXZvaWQgbmV3J2luZworICAgICAgICB1cCBhIFZlY3Rvciou
CisKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6YXBwZW5kVG9Db21tYSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNvbWJpbmVDb21tYU5vZGVzKTogRGVsZXRlZC4KKwor
ICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6CisKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0
cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpTdGF0ZW1lbnROb2RlOjpTdGF0ZW1lbnROb2RlKToK
KyAgICAgICAgKEpTQzo6Q29tbWFOb2RlOjpDb21tYU5vZGUpOgorICAgICAgICAoSlNDOjpTb3Vy
Y2VFbGVtZW50czo6U291cmNlRWxlbWVudHMpOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdl
IHRvIGxpbmtlZCBsaXN0LgorCisgICAgICAgICogcGFyc2VyL05vZGVJbmZvLmg6IFJlbW92ZWQu
CisKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpTb3VyY2VFbGVt
ZW50czo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6U291cmNlRWxlbWVudHM6OnNpbmdsZVN0YXRl
bWVudCk6IFVzZSBhIGxpbmtlZCBsaXN0IGluc3RlYWQgb2YgYQorICAgICAgICB2ZWN0b3IgdG8g
dHJhY2sgdGhlIHN0YXRlbWVudHMgaW4gYSBsaXN0LiBUaGlzIHJlbW92ZXMgc29tZSBhbGxvY2F0
aW9uCisgICAgICAgIGFuZCBpdCBtZWFucyB0aGF0IHdlIGRvbid0IG5lZWQgYSBkZXN0cnVjdG9y
IGFueW1vcmUuCisKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpTY29wZU5vZGUpOgorICAgICAg
ICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9k
ZTo6RXZhbE5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbk5vZGU6OkZ1bmN0aW9uTm9kZSk6
IFVwZGF0ZWQgZm9yIGludGVyZmFjZSBjaGFuZ2UgdG8gcmVmZXJlbmNlLAorICAgICAgICBzaW5j
ZSB0aGVzZSB2YWx1ZXMgYXJlIG5ldmVyIG51bGwuCisKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMu
aDoKKyAgICAgICAgKEpTQzo6U3RhdGVtZW50Tm9kZTo6bmV4dCk6CisgICAgICAgIChKU0M6OlN0
YXRlbWVudE5vZGU6OnNldE5leHQpOgorICAgICAgICAoSlNDOjpDb21tYU5vZGU6OmFwcGVuZCk6
IERlbGV0ZWQuIFVwZGF0ZWQgZm9yIGludGVyZmFjZSBjaGFuZ2UgdG8gbGlua2VkIGxpc3QuCisK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVy
VHlwZT46OmRpZEZpbmlzaFBhcnNpbmcpOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlIHRv
IHJlZmVyZW5jZS4KKworICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VWYXJE
ZWNsYXJhdGlvbkxpc3QpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VF
eHByZXNzaW9uKTogVHJhY2sgY29tbWEgZXhwcmVzc2lvbnMgYXMKKyAgICAgICAgYW4gZXhwbGlj
aXQgbGlzdCBvZiBDb21tYU5vZGVzLCByZW1vdmluZyBhIHVzZSBvZiB2ZWN0b3IgYW5kIGEgZGVz
dHJ1Y3Rvci4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6UGFy
c2VyPExleGVyVHlwZT46OnBhcnNlKToKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5o
OgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVDb21tYUV4cHIpOgorICAgICAg
ICAoSlNDOjpTeW50YXhDaGVja2VyOjphcHBlbmRUb0NvbW1hRXhwcik6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmFwcGVuZFRvQ29tbWEpOiBEZWxldGVkLiBVcGRhdGVkIGZvciBpbnRl
cmZhY2UgY2hhbmdlcy4KKwogMjAxNC0xMi0wOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZSBXVEY6OmN1cnJlbnRDUFVUaW1lIHRvIHJldHVy
biBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIGFuZCBnZXQgcmlkIG9mIGN1cnJlbnRDUFVUaW1l
TVMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24g
MTc2ODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM4Miw3ICsxMzgyLDYg
QEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxBU1RCdWlsZGVyLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcTGV4ZXIuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxOb2RlQ29uc3RydWN0b3JzLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcTm9kZUluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBhcnNlclxOb2Rlcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGFyc2VyXFBhcnNlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXFBh
cnNlckFyZW5hLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNzY4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMJKHdvcmtpbmcgY29weSkKQEAgLTI0MDgsOSArMjQwOCw2IEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwYXJzZXJcTm9kZUNvbnN0cnVjdG9ycy5oIj4KICAgICAgIDxGaWx0ZXI+cGFy
c2VyPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwYXJzZXJcTm9kZUluZm8uaCI+Ci0gICAgICA8RmlsdGVyPnBhcnNlcjwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXE5vZGVzLmgi
PgogICAgICAgPEZpbHRlcj5wYXJzZXI8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzY4NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtOTQzLDcgKzk0Myw2IEBACiAJCTdDMTg0RTIzMTdCRUUyNDAwMDdD
QjYzQSAvKiBKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxODRFMjExN0JFRTI0MDAwN0NCNjNBIC8qIEpTUHJvbWlz
ZUNvbnN0cnVjdG9yLmggKi87IH07CiAJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1
Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0U0RUU3MDgwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0U0RUU3MEYwRUJCN0E1
QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNEVFNzBFMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1
cmVDaGFpbi5jcHAgKi87IH07Ci0JCTdFRkYwMDY0MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VGRjAw
NjMwRUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpT
QVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzA4OTRENjBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjAxNjFF
MzBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYwMTYxREYwRjNBODNDMTAwRjg0
NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFj
cm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2MDE2MUUwMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNjA5LDcg
KzI2MDgsNiBAQAogCQk3Q0ZCQUMxQzE4QjUzNUU1MDBEMDA3NTAgLyogUHJvbWlzZS5wcm90b3R5
cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBQcm9taXNlLnBy
b3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U0RUU3MDgwRUJCNzk2
MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdF
NEVFNzBFMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTdFRkYwMDYzMEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NjAxNjFERjBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUw
MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxMzMsNyArNDEzMSw2IEBACiAJ
CQkJRjY5MkE4NjUwMjU1NTk3RDAxRkY2MEY3IC8qIExleGVyLmNwcCAqLywKIAkJCQlGNjkyQTg2
NjAyNTU1OTdEMDFGRjYwRjcgLyogTGV4ZXIuaCAqLywKIAkJCQk5MzBEQUQwMzBGQjFFQjFBMDA4
MkQyMDUgLyogTm9kZUNvbnN0cnVjdG9ycy5oICovLAotCQkJCTdFRkYwMDYzMEVDMDVBOUEwMEFB
N0M5MyAvKiBOb2RlSW5mby5oICovLAogCQkJCUY2OTJBODZEMDI1NTU5N0QwMUZGNjBGNyAvKiBO
b2Rlcy5jcHAgKi8sCiAJCQkJRjY5MkE4NkUwMjU1NTk3RDAxRkY2MEY3IC8qIE5vZGVzLmggKi8s
CiAJCQkJOTNGMEIzQTkwOUJCNERDMDAwNjhGQ0UzIC8qIFBhcnNlci5jcHAgKi8sCkBAIC02MDQ5
LDcgKzYwNDYsNiBAQAogCQkJCUJDMDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJv
clByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlDQzBCNjMxOEJFOTk1MDAwNkNFQkND
IC8qIENvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkZC
OTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJN0VGRjAwNjQwRUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9kZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk5RTQ1QTI4MThBMUIyNTkwMDI2RDg4RiAvKiBOb25kZXRlcm1pbmlzdGljSW5wdXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAyMTlBREE0MTEwMDZBQzcyQSAvKiBERkdOYWl2
ZURvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTc2ODY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjg2LDEwICsxNjg2LDEwIEBAIFJlZ2lzdGVySUQqIFJlYWRN
b2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEIKIAogUmVnaXN0ZXJJRCogQ29tbWFOb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewot
ICAgIEFTU0VSVChtX2V4cHJlc3Npb25zLnNpemUoKSA+IDEpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9leHByZXNzaW9ucy5zaXplKCkgLSAxOyBpKyspCi0gICAgICAgIGdlbmVyYXRv
ci5lbWl0Tm9kZShnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpLCBtX2V4cHJlc3Npb25zW2ldKTsK
LSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9leHByZXNzaW9ucy5sYXN0KCkp
OworICAgIENvbW1hTm9kZSogbm9kZSA9IHRoaXM7CisgICAgZm9yICg7IG5vZGUgJiYgbm9kZS0+
bmV4dCgpOyBub2RlID0gbm9kZS0+bmV4dCgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUo
Z2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSwgbm9kZS0+bV9leHByKTsKKyAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXROb2RlKGRzdCwgbm9kZS0+bV9leHByKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0RGVjbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC0xNzUzLDE1ICsxNzUzLDEzIEBAIHZvaWQgQ29uc3RTdGF0ZW1lbnRO
b2RlOjplbWl0Qnl0ZWNvZGUoQnkKIAogaW5saW5lIFN0YXRlbWVudE5vZGUqIFNvdXJjZUVsZW1l
bnRzOjpsYXN0U3RhdGVtZW50KCkgY29uc3QKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fc3RhdGVt
ZW50cy5zaXplKCk7Ci0gICAgcmV0dXJuIHNpemUgPyBtX3N0YXRlbWVudHNbc2l6ZSAtIDFdIDog
MDsKKyAgICByZXR1cm4gbV90YWlsOwogfQogCiBpbmxpbmUgdm9pZCBTb3VyY2VFbGVtZW50czo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fc3RhdGVtZW50cy5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShk
c3QsIG1fc3RhdGVtZW50c1tpXSk7CisgICAgZm9yIChTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQg
PSBtX2hlYWQ7IHN0YXRlbWVudDsgc3RhdGVtZW50ID0gc3RhdGVtZW50LT5uZXh0KCkpCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIHN0YXRlbWVudCk7CiB9CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCbG9ja05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxk
ZXIuaAkocmV2aXNpb24gMTc2ODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9B
U1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAg
ICAgICA6IG1fdm0odm0pCiAgICAgICAgICwgbV9wYXJzZXJBcmVuYShwYXJzZXJBcmVuYSkKICAg
ICAgICAgLCBtX3NvdXJjZUNvZGUoc291cmNlQ29kZSkKLSAgICAgICAgLCBtX3Njb3BlKG1fcGFy
c2VyQXJlbmEpCiAgICAgICAgICwgbV9ldmFsQ291bnQoMCkKICAgICB7CiAgICAgfQpAQCAtMTI1
LDE1ICsxMjQsMTEgQEAgcHVibGljOgogCiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRl
U291cmNlRWxlbWVudHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNl
RWxlbWVudHMoKTsgfQogCi0gICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpW
YXJTdGFjaz4qIHZhckRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fc2NvcGUubV92YXJEZWNsYXJh
dGlvbnM7IH0KLSAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9u
U3RhY2s+KiBmdW5jRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9zY29wZS5tX2Z1bmNEZWNsYXJh
dGlvbnM7IH0KKyAgICBEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2smIHZhckRlY2xhcmF0aW9u
cygpIHsgcmV0dXJuIG1fc2NvcGUubV92YXJEZWNsYXJhdGlvbnM7IH0KKyAgICBEZWNsYXJhdGlv
blN0YWNrczo6RnVuY3Rpb25TdGFjayYgZnVuY0RlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fc2Nv
cGUubV9mdW5jRGVjbGFyYXRpb25zOyB9CiAgICAgaW50IGZlYXR1cmVzKCkgY29uc3QgeyByZXR1
cm4gbV9zY29wZS5tX2ZlYXR1cmVzOyB9CiAgICAgaW50IG51bUNvbnN0YW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fc2NvcGUubV9udW1Db25zdGFudHM7IH0KIAotICAgIHZvaWQgYXBwZW5kVG9Db21t
YShDb21tYU5vZGUqIGNvbW1hTm9kZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgY29tbWFOb2Rl
LT5hcHBlbmQoZXhwcik7IH0KLQotICAgIENvbW1hTm9kZSogY3JlYXRlQ29tbWFFeHByKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Np
b25Ob2RlKiByaHMpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ29tbWFOb2RlKGxvY2F0
aW9uLCBsaHMsIHJocyk7IH0KLQogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3IsIEV4
cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpOwogICAgIEV4cHJlc3Np
b25Ob2RlKiBtYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
Tm9kZSosIE9wZXJhdG9yLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCk7CiAgICAgRXhwcmVz
c2lvbk5vZGUqIG1ha2VQb3N0Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uTm9kZSosIE9wZXJhdG9yLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCk7CkBAIC0zNDYs
NyArMzQxLDcgQEAgcHVibGljOgogICAgICAgICBGdW5jRGVjbE5vZGUqIGRlY2wgPSBuZXcgKG1f
cGFyc2VyQXJlbmEpIEZ1bmNEZWNsTm9kZShsb2NhdGlvbiwgKm5hbWUsIGJvZHksIG1fc291cmNl
Q29kZS0+c3ViRXhwcmVzc2lvbihvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJv
ZHlTdGFydExpbmUsIGJvZHlTdGFydENvbHVtbiksIHBhcmFtZXRlcnMpOwogICAgICAgICBpZiAo
Km5hbWUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKQogICAgICAgICAgICAgdXNl
c0FyZ3VtZW50cygpOwotICAgICAgICBtX3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9ucy0+ZGF0YS5h
cHBlbmQoZGVjbC0+Ym9keSgpKTsKKyAgICAgICAgbV9zY29wZS5tX2Z1bmNEZWNsYXJhdGlvbnMu
YXBwZW5kKGRlY2wtPmJvZHkoKSk7CiAgICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRMaW5l
LCBib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9m
ZnNldCk7CiAgICAgICAgIGJvZHktPnNldEZ1bmN0aW9uS2V5d29yZFN0YXJ0KGZ1bmN0aW9uS2V5
d29yZFN0YXJ0KTsKICAgICAgICAgcmV0dXJuIGRlY2w7CkBAIC01MzgsMTggKzUzMywyMCBAQCBw
dWJsaWM6CiAgICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmlk
ZW50KQogICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwogICAgICAgICBBU1NFUlQoaWRlbnQt
PmltcGwoKS0+aXNBdG9taWMoKSk7Ci0gICAgICAgIG1fc2NvcGUubV92YXJEZWNsYXJhdGlvbnMt
PmRhdGEuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCppZGVudCwgYXR0cnMpKTsKKyAgICAgICAgbV9z
Y29wZS5tX3ZhckRlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoKmlkZW50LCBhdHRy
cykpOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjb21iaW5lQ29tbWFOb2Rlcyhjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbGlzdCwgRXhwcmVz
c2lvbk5vZGUqIGluaXQpCisgICAgQ29tbWFOb2RlKiBjcmVhdGVDb21tYUV4cHIoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBpZiAoIWxpc3QpCi0gICAgICAgICAgICByZXR1cm4gaW5pdDsKLSAgICAgICAgaWYgKGxp
c3QtPmlzQ29tbWFOb2RlKCkpIHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PENvbW1hTm9kZSo+
KGxpc3QpLT5hcHBlbmQoaW5pdCk7Ci0gICAgICAgICAgICByZXR1cm4gbGlzdDsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBDb21tYU5vZGUobG9jYXRpb24s
IGxpc3QsIGluaXQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBDb21tYU5v
ZGUobG9jYXRpb24sIG5vZGUpOworICAgIH0KKworICAgIENvbW1hTm9kZSogYXBwZW5kVG9Db21t
YUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIHRh
aWwsIEV4cHJlc3Npb25Ob2RlKiBuZXh0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRhaWwtPmlz
Q29tbWFOb2RlKCkpOworICAgICAgICBDb21tYU5vZGUqIG5ld1RhaWwgPSBuZXcgKG1fcGFyc2Vy
QXJlbmEpIENvbW1hTm9kZShsb2NhdGlvbiwgbmV4dCk7CisgICAgICAgIHN0YXRpY19jYXN0PENv
bW1hTm9kZSo+KHRhaWwpLT5zZXROZXh0KG5ld1RhaWwpOworICAgICAgICByZXR1cm4gbmV3VGFp
bDsKICAgICB9CiAKICAgICBpbnQgZXZhbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ291
bnQ7IH0KQEAgLTY5MCwxNSArNjg3LDEzIEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAg
c3RydWN0IFNjb3BlIHsKLSAgICAgICAgU2NvcGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hKQot
ICAgICAgICAgICAgOiBtX3ZhckRlY2xhcmF0aW9ucyhuZXcgKHBhcnNlckFyZW5hKSBQYXJzZXJB
cmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPikKLSAgICAgICAgICAgICwgbV9m
dW5jRGVjbGFyYXRpb25zKG5ldyAocGFyc2VyQXJlbmEpIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJh
dGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4pCi0gICAgICAgICAgICAsIG1fZmVhdHVyZXMoMCkK
KyAgICAgICAgU2NvcGUoKQorICAgICAgICAgICAgOiBtX2ZlYXR1cmVzKDApCiAgICAgICAgICAg
ICAsIG1fbnVtQ29uc3RhbnRzKDApCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICBQYXJz
ZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogbV92YXJEZWNsYXJhdGlv
bnM7Ci0gICAgICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25T
dGFjaz4qIG1fZnVuY0RlY2xhcmF0aW9uczsKKyAgICAgICAgRGVjbGFyYXRpb25TdGFja3M6OlZh
clN0YWNrIG1fdmFyRGVjbGFyYXRpb25zOworICAgICAgICBEZWNsYXJhdGlvblN0YWNrczo6RnVu
Y3Rpb25TdGFjayBtX2Z1bmNEZWNsYXJhdGlvbnM7CiAgICAgICAgIGludCBtX2ZlYXR1cmVzOwog
ICAgICAgICBpbnQgbV9udW1Db25zdGFudHM7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAxNzY4NjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBA
QAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIk5vZGVJbmZvLmgi
CiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL2R0b2EuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0
cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAxNzY4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBTdGF0ZW1lbnROb2RlOjpTdGF0ZW1l
bnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgICAgIDogTm9kZShs
b2NhdGlvbikKKyAgICAgICAgLCBtX25leHQobnVsbHB0cikKICAgICAgICAgLCBtX2xhc3RMaW5l
KC0xKQogICAgIHsKICAgICB9CkBAIC02MDksMTMgKzYxMCwxMSBAQCBpbmxpbmUgUmVzb2x2ZU5v
ZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBDb21t
YU5vZGU6OkNvbW1hTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMikKKyAgICBpbmxpbmUgQ29tbWFO
b2RlOjpDb21tYU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCisgICAgICAg
ICwgbV9leHByKGV4cHIpCisgICAgICAgICwgbV9uZXh0KG51bGxwdHIpCiAgICAgewotICAgICAg
ICBBU1NFUlQoZXhwcjEpOwotICAgICAgICBBU1NFUlQoZXhwcjIpOwotICAgICAgICBtX2V4cHJl
c3Npb25zLmFwcGVuZChleHByMSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvbnMuYXBwZW5kKGV4cHIy
KTsKICAgICB9CiAKICAgICBpbmxpbmUgQ29uc3RTdGF0ZW1lbnROb2RlOjpDb25zdFN0YXRlbWVu
dE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgQ29uc3REZWNsTm9kZSogbmV4
dCkKQEAgLTYyNSw2ICs2MjQsOCBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNv
bnN0IEpTCiAgICAgfQogCiAgICAgaW5saW5lIFNvdXJjZUVsZW1lbnRzOjpTb3VyY2VFbGVtZW50
cygpCisgICAgICAgIDogbV9oZWFkKG51bGxwdHIpCisgICAgICAgICwgbV90YWlsKG51bGxwdHIp
CiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUlu
Zm8uaAkocmV2aXNpb24gMTc2ODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2RlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIE5vZGVJbmZvX2gKLSNkZWZpbmUgTm9k
ZUluZm9faAotCi0jaW5jbHVkZSAiTm9kZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IE5vZGVJbmZvIHsKLSAgICAgICAgVCBtX25vZGU7
Ci0gICAgICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwotICAgICAgICBpbnQgbV9udW1Db25z
dGFudHM7Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgTm9kZUluZm88RnVuY0RlY2xOb2RlKj4gRnVu
Y0RlY2xOb2RlSW5mbzsgICAgCi0gICAgdHlwZWRlZiBOb2RlSW5mbzxGdW5jRXhwck5vZGUqPiBG
dW5jRXhwck5vZGVJbmZvOwotICAgIHR5cGVkZWYgTm9kZUluZm88RXhwcmVzc2lvbk5vZGUqPiBF
eHByZXNzaW9uTm9kZUluZm87Ci0gICAgdHlwZWRlZiBOb2RlSW5mbzxBcmd1bWVudHNOb2RlKj4g
QXJndW1lbnRzTm9kZUluZm87Ci0gICAgdHlwZWRlZiBOb2RlSW5mbzxDb25zdERlY2xOb2RlKj4g
Q29uc3REZWNsTm9kZUluZm87Ci0gICAgdHlwZWRlZiBOb2RlSW5mbzxQcm9wZXJ0eU5vZGUqPiBQ
cm9wZXJ0eU5vZGVJbmZvOwotICAgIHR5cGVkZWYgTm9kZUluZm88UHJvcGVydHlMaXN0PiBQcm9w
ZXJ0eUxpc3RJbmZvOwotICAgIHR5cGVkZWYgTm9kZUluZm88RWxlbWVudExpc3Q+IEVsZW1lbnRM
aXN0SW5mbzsKLSAgICB0eXBlZGVmIE5vZGVJbmZvPEFyZ3VtZW50TGlzdD4gQXJndW1lbnRMaXN0
SW5mbzsKLSAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IE5vZGVEZWNsYXJh
dGlvbkluZm8gewotICAgICAgICBUIG1fbm9kZTsKLSAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERl
Y2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIG1fdmFyRGVjbGFyYXRpb25zOwotICAgICAgICBQ
YXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KiBtX2Z1bmNE
ZWNsYXJhdGlvbnM7Ci0gICAgICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwotICAgICAgICBp
bnQgbV9udW1Db25zdGFudHM7Ci0gICAgfTsKLSAgICAKLSAgICB0eXBlZGVmIE5vZGVEZWNsYXJh
dGlvbkluZm88U3RhdGVtZW50Tm9kZSo+IFN0YXRlbWVudE5vZGVJbmZvOwotICAgIHR5cGVkZWYg
Tm9kZURlY2xhcmF0aW9uSW5mbzxDYXNlQmxvY2tOb2RlKj4gQ2FzZUJsb2NrTm9kZUluZm87Ci0g
ICAgdHlwZWRlZiBOb2RlRGVjbGFyYXRpb25JbmZvPENhc2VDbGF1c2VOb2RlKj4gQ2FzZUNsYXVz
ZU5vZGVJbmZvOwotICAgIHR5cGVkZWYgTm9kZURlY2xhcmF0aW9uSW5mbzxTb3VyY2VFbGVtZW50
cyo+IFNvdXJjZUVsZW1lbnRzSW5mbzsKLSAgICB0eXBlZGVmIE5vZGVEZWNsYXJhdGlvbkluZm88
Q2xhdXNlTGlzdD4gQ2xhdXNlTGlzdEluZm87Ci0gICAgdHlwZWRlZiBOb2RlRGVjbGFyYXRpb25J
bmZvPEV4cHJlc3Npb25Ob2RlKj4gVmFyRGVjbExpc3RJbmZvOwotICAgIHR5cGVkZWYgTm9kZURl
Y2xhcmF0aW9uSW5mbzxDb25zdERlY2xMaXN0PiBDb25zdERlY2xMaXN0SW5mbzsKLSAgICB0eXBl
ZGVmIE5vZGVEZWNsYXJhdGlvbkluZm88UGFyYW1ldGVyTGlzdD4gUGFyYW1ldGVyTGlzdEluZm87
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gTm9kZUluZm9faApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDE3Njg2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NSwxMyArNjUsMjAgQEAgdm9pZCBTb3VyY2VFbGVtZW50czo6YXBwZW5kKFN0YXRlbWVudE5vZAog
ewogICAgIGlmIChzdGF0ZW1lbnQtPmlzRW1wdHlTdGF0ZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIG1fc3RhdGVtZW50cy5hcHBlbmQoc3RhdGVtZW50KTsKKworICAgIGlmICghbV9oZWFk
KSB7CisgICAgICAgIG1faGVhZCA9IHN0YXRlbWVudDsKKyAgICAgICAgbV90YWlsID0gc3RhdGVt
ZW50OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV90YWlsLT5zZXROZXh0KHN0YXRl
bWVudCk7CisgICAgbV90YWlsID0gc3RhdGVtZW50OwogfQogCiBTdGF0ZW1lbnROb2RlKiBTb3Vy
Y2VFbGVtZW50czo6c2luZ2xlU3RhdGVtZW50KCkgY29uc3QKIHsKLSAgICBzaXplX3Qgc2l6ZSA9
IG1fc3RhdGVtZW50cy5zaXplKCk7Ci0gICAgcmV0dXJuIHNpemUgPT0gMSA/IG1fc3RhdGVtZW50
c1swXSA6IDA7CisgICAgcmV0dXJuIG1faGVhZCA9PSBtX3RhaWwgPyBtX2hlYWQgOiBudWxscHRy
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2NvcGVOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04OCw3ICs5NSw3IEBAIFNjb3BlTm9kZTo6U2Nv
cGVOb2RlKFBhcnNlckFyZW5hJiBwYXJzZXIKIHsKIH0KIAotU2NvcGVOb2RlOjpTY29wZU5vZGUo
UGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9j
YXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ss
IEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJs
ZXMsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Njb3BlTm9kZTo6
U2NvcGVOb2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sm
IHZhclN0YWNrLCBGdW5jdGlvblN0YWNrJiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1
cmVkVmFyaWFibGVzLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAg
ICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0aW9uKQogICAgICwgUGFyc2VyQXJlbmFSb290KHBh
cnNlckFyZW5hKQogICAgICwgbV9zdGFydExpbmVOdW1iZXIoc3RhcnRMb2NhdGlvbi5saW5lKQpA
QCAtOTksMTAgKzEwNiw4IEBAIFNjb3BlTm9kZTo6U2NvcGVOb2RlKFBhcnNlckFyZW5hJiBwYXJz
ZXIKICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0YW50cykKICAgICAsIG1fc3RhdGVtZW50
cyhjaGlsZHJlbikKIHsKLSAgICBpZiAodmFyU3RhY2spCi0gICAgICAgIG1fdmFyU3RhY2suc3dh
cCgqdmFyU3RhY2spOwotICAgIGlmIChmdW5jU3RhY2spCi0gICAgICAgIG1fZnVuY3Rpb25TdGFj
ay5zd2FwKCpmdW5jU3RhY2spOworICAgIG1fdmFyU3RhY2suc3dhcCh2YXJTdGFjayk7CisgICAg
bV9mdW5jdGlvblN0YWNrLnN3YXAoZnVuY1N0YWNrKTsKICAgICBtX2NhcHR1cmVkVmFyaWFibGVz
LnN3YXAoY2FwdHVyZWRWYXJpYWJsZXMpOwogfQogCkBAIC0xMTMsNyArMTE4LDcgQEAgU3RhdGVt
ZW50Tm9kZSogU2NvcGVOb2RlOjpzaW5nbGVTdGF0ZW1lbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gUHJvZ3JhbU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotUHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBT
b3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFj
ayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMp
CitQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNv
dXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2smIHZhclN0YWNrLCBGdW5jdGlvblN0YWNr
JiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykK
ICAgICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24s
IHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVz
LCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVt
bikKICAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKQEAgLTEyNyw3ICsxMzIsNyBAQCB2b2lk
IFByb2dyYW1Ob2RlOjpzZXRDbG9zZWRWYXJpYWJsZXMoVmVjCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBFdmFsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1FdmFsTm9kZTo6RXZhbE5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGls
ZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50
aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENv
ZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK0V2YWxOb2RlOjpFdmFsTm9k
ZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRM
b2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQsIHVu
c2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayYgdmFy
U3RhY2ssIEZ1bmN0aW9uU3RhY2smIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRW
YXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExv
Y2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFj
aywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCiAgICAgLCBtX2Vu
ZENvbHVtbihlbmRDb2x1bW4pCiB7CkBAIC0xODgsNyArMTkzLDcgQEAgdm9pZCBGdW5jdGlvbkJv
ZHlOb2RlOjpzZXRFbmRQb3NpdGlvbihKUwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRnVuY3Rpb25Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZ1bmN0
aW9uTm9kZTo6RnVuY3Rpb25Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExv
Y2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VF
bGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVu
Y1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQor
RnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNv
dXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2smIHZhclN0YWNrLCBGdW5jdGlvblN0YWNr
JiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFu
dHMpCiAgICAgOiBTY29wZU5vZGUocGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0
aW9uLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRW
YXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0
YXJ0Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1uKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTc2ODY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsMTEgKzEwNiw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBQ
YXJzZXJBcmVuYSYpOwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBz
dHJ1Y3QgUGFyc2VyQXJlbmFEYXRhIDogUGFyc2VyQXJlbmFEZWxldGFibGUgewotICAgICAgICBU
IGRhdGE7Ci0gICAgfTsKLQogICAgIGNsYXNzIFBhcnNlckFyZW5hUm9vdCB7CiAgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHByb3RlY3RlZDoKQEAgLTE5MCw2ICsxODUsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lKCkgY29uc3QgeyBy
ZXR1cm4gbGluZU5vKCk7IH0KICAgICAgICAgdW5zaWduZWQgbGFzdExpbmUoKSBjb25zdCB7IHJl
dHVybiBtX2xhc3RMaW5lOyB9CiAKKyAgICAgICAgU3RhdGVtZW50Tm9kZSogbmV4dCgpIHsgcmV0
dXJuIG1fbmV4dDsgfQorICAgICAgICB2b2lkIHNldE5leHQoU3RhdGVtZW50Tm9kZSogbmV4dCkg
eyBtX25leHQgPSBuZXh0OyB9CisKICAgICAgICAgdmlydHVhbCBib29sIGlzRW1wdHlTdGF0ZW1l
bnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZXR1
cm5Ob2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlz
RXhwclN0YXRlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xOTgsNiArMTk2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Jsb2NrKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHByb3RlY3RlZDoKKyAgICAgICAgU3RhdGVtZW50Tm9k
ZSogbV9uZXh0OwogICAgICAgICBpbnQgbV9sYXN0TGluZTsKICAgICB9OwogCkBAIC0xMDk3LDIx
ICsxMDk2LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJp
ZGU7CiAgICAgfTsKICAgICAKLSAgICB0eXBlZGVmIFZlY3RvcjxFeHByZXNzaW9uTm9kZSosIDg+
IEV4cHJlc3Npb25WZWN0b3I7Ci0KLSAgICBjbGFzcyBDb21tYU5vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUsIHB1YmxpYyBQYXJzZXJBcmVuYURlbGV0YWJsZSB7CisgICAgY2xhc3MgQ29tbWFO
b2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgUGFyc2VyQXJlbmFGcmVl
YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBDb21tYU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpOworICAg
ICAgICBDb21tYU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqKTsK
IAotICAgICAgICB1c2luZyBQYXJzZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3IgbmV3OwotCi0g
ICAgICAgIHZvaWQgYXBwZW5kKEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IEFTU0VSVChleHByKTsg
bV9leHByZXNzaW9ucy5hcHBlbmQoZXhwcik7IH0KKyAgICAgICAgdm9pZCBzZXROZXh0KENvbW1h
Tm9kZSogbmV4dCkgeyBtX25leHQgPSBuZXh0OyB9CisgICAgICAgIENvbW1hTm9kZSogbmV4dCgp
IHsgcmV0dXJuIG1fbmV4dDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29s
IGlzQ29tbWFOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgb3ZlcnJpZGU7CiAKLSAgICAgICAgRXhwcmVzc2lvblZlY3RvciBtX2V4cHJl
c3Npb25zOworICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByOworICAgICAgICBDb21tYU5v
ZGUqIG1fbmV4dDsKICAgICB9OwogICAgIAogICAgIGNsYXNzIENvbnN0RGVjbE5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUgewpAQCAtMTE0NCw3ICsxMTQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIENvbnN0RGVjbE5vZGUqIG1fbmV4dDsKICAgICB9OwogCi0gICAgY2xhc3MgU291
cmNlRWxlbWVudHMgOiBwdWJsaWMgUGFyc2VyQXJlbmFEZWxldGFibGUgeworICAgIGNsYXNzIFNv
dXJjZUVsZW1lbnRzIGZpbmFsIDogcHVibGljIFBhcnNlckFyZW5hRnJlZWFibGUgewogICAgIHB1
YmxpYzoKICAgICAgICAgU291cmNlRWxlbWVudHMoKTsKIApAQCAtMTE1Niw3ICsxMTUzLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogZGVzdGluYXRpb24pOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
VmVjdG9yPFN0YXRlbWVudE5vZGUqPiBtX3N0YXRlbWVudHM7CisgICAgICAgIFN0YXRlbWVudE5v
ZGUqIG1faGVhZDsKKyAgICAgICAgU3RhdGVtZW50Tm9kZSogbV90YWlsOwogICAgIH07CiAKICAg
ICBjbGFzcyBCbG9ja05vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC0xNDExLDcgKzE0
MDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNr
czo6RnVuY3Rpb25TdGFjayBGdW5jdGlvblN0YWNrOwogCiAgICAgICAgIFNjb3BlTm9kZShQYXJz
ZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kLCBib29sIGluU3RyaWN0Q29udGV4dCk7Ci0gICAgICAgIFNjb3BlTm9kZShQYXJz
ZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kLCBjb25zdCBTb3VyY2VDb2RlJiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayos
IEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKKyAgICAgICAgU2NvcGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0IFNvdXJjZUNv
ZGUmLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrJiwgRnVuY3Rpb25TdGFjayYsIElkZW50aWZp
ZXJTZXQmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHVzaW5n
IFBhcnNlckFyZW5hUm9vdDo6b3BlcmF0b3IgbmV3OwogCkBAIC0xNDczLDcgKzE0NzEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFByb2dyYW1Ob2RlIDogcHVibGljIFNjb3BlTm9k
ZSB7CiAgICAgcHVibGljOgotICAgICAgICBQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNp
Z25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZh
clN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2Rl
JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgUHJvZ3JhbU5vZGUo
UGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwg
U291cmNlRWxlbWVudHMqLCBWYXJTdGFjayYsIEZ1bmN0aW9uU3RhY2smLCBJZGVudGlmaWVyU2V0
JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAK
ICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29s
dW1uOyB9CiAgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
Q29sdW1uOyB9CkBAIC0xNDkyLDcgKzE0OTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIEV2YWxOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBF
dmFsTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5k
Q29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50
aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKTsKKyAgICAgICAgRXZhbE5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1
bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayYsIEZ1bmN0
aW9uU3RhY2smLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBz
dGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAgICAgdW5zaWduZWQgZW5kQ29s
dW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KQEAgLTE1NzMsNyArMTU3MSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25Ob2RlIGZpbmFsIDogcHVibGlj
IFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jdGlvbk5vZGUoUGFyc2VyQXJl
bmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxl
bWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3Qg
U291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIEZ1
bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQg
ZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrJiwgRnVuY3Rpb25TdGFjayYsIElk
ZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTc2ODY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkxleGVyLmgiCi0jaW5jbHVkZSAiTm9kZUluZm8uaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJWTS5o
IgpAQCAtMzA3LDEyICszMDYsMTIgQEAgU3RyaW5nIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlu
bmVyKCkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXZvaWQgUGFyc2VyPExl
eGVyVHlwZT46OmRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNvdXJjZUVsZW1lbnRz
LCBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFyU3RhY2ss
IAotICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4q
IGZ1bmNTdGFjaywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBJZGVu
dGlmaWVyU2V0JiBjYXB0dXJlZFZhcnMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4+
JiYgY2xvc2VkVmFyaWFibGVzKQordm9pZCBQYXJzZXI8TGV4ZXJUeXBlPjo6ZGlkRmluaXNoUGFy
c2luZyhTb3VyY2VFbGVtZW50cyogc291cmNlRWxlbWVudHMsIERlY2xhcmF0aW9uU3RhY2tzOjpW
YXJTdGFjayYgdmFyU3RhY2ssIAorICAgIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNr
JiBmdW5jU3RhY2ssIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgSWRl
bnRpZmllclNldCYgY2FwdHVyZWRWYXJzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0cmluZ0ltcGw+
PiYmIGNsb3NlZFZhcmlhYmxlcykKIHsKICAgICBtX3NvdXJjZUVsZW1lbnRzID0gc291cmNlRWxl
bWVudHM7Ci0gICAgbV92YXJEZWNsYXJhdGlvbnMgPSB2YXJTdGFjazsKLSAgICBtX2Z1bmNEZWNs
YXJhdGlvbnMgPSBmdW5jU3RhY2s7CisgICAgbV92YXJEZWNsYXJhdGlvbnMuc3dhcCh2YXJTdGFj
ayk7CisgICAgbV9mdW5jRGVjbGFyYXRpb25zLnN3YXAoZnVuY1N0YWNrKTsKICAgICBtX2NhcHR1
cmVkVmFyaWFibGVzLnN3YXAoY2FwdHVyZWRWYXJzKTsKICAgICBtX2Nsb3NlZFZhcmlhYmxlcyA9
IGNsb3NlZFZhcmlhYmxlczsKICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7CkBAIC00NTEsNyAr
NDUwLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KFRy
ZWVCdWlsZGVyJiBjb250ZXh0LCBpbnQmIGRlY2xhcmF0aW9ucywgVHJlZURlY29uc3RydWN0aW9u
UGF0dGVybiYgbGFzdFBhdHRlcm4sIFRyZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIEpT
VGV4dFBvc2l0aW9uJiBpZGVudFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdFN0YXJ0LCBKU1Rl
eHRQb3NpdGlvbiYgaW5pdEVuZCkKIHsKLSAgICBUcmVlRXhwcmVzc2lvbiB2YXJEZWNscyA9IDA7
CisgICAgVHJlZUV4cHJlc3Npb24gaGVhZCA9IDA7CisgICAgVHJlZUV4cHJlc3Npb24gdGFpbCA9
IDA7CiAgICAgY29uc3QgSWRlbnRpZmllciogbGFzdElkZW50OwogICAgIGRvIHsKICAgICAgICAg
bGFzdElkZW50ID0gMDsKQEAgLTQ5NywxNCArNDk3LDE3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKCF2YXJEZWNscykKLSAgICAgICAgICAgIHZhckRlY2xzID0gbm9kZTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdmFyRGVjbHMgPSBjb250ZXh0LmNvbWJpbmVDb21tYU5v
ZGVzKGxvY2F0aW9uLCB2YXJEZWNscywgbm9kZSk7CisgICAgICAgIGlmICghaGVhZCkKKyAgICAg
ICAgICAgIGhlYWQgPSBub2RlOworICAgICAgICBlbHNlIGlmICghdGFpbCkgeworICAgICAgICAg
ICAgaGVhZCA9IGNvbnRleHQuY3JlYXRlQ29tbWFFeHByKGxvY2F0aW9uLCBoZWFkKTsKKyAgICAg
ICAgICAgIHRhaWwgPSBjb250ZXh0LmFwcGVuZFRvQ29tbWFFeHByKGxvY2F0aW9uLCBoZWFkLCBu
b2RlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0YWlsID0gY29udGV4dC5hcHBlbmRU
b0NvbW1hRXhwcihsb2NhdGlvbiwgdGFpbCwgbm9kZSk7CiAgICAgfSB3aGlsZSAobWF0Y2goQ09N
TUEpKTsKICAgICBpZiAobGFzdElkZW50KQogICAgICAgICBsYXN0UGF0dGVybiA9IGNyZWF0ZUJp
bmRpbmdQYXR0ZXJuKGNvbnRleHQsIERlY29uc3RydWN0VG9WYXJpYWJsZXMsICpsYXN0SWRlbnQs
IDAsIG1fdG9rZW4pOwotICAgIHJldHVybiB2YXJEZWNsczsKKyAgICByZXR1cm4gaGVhZDsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTE1OTUsMTYgKzE1OTgsMTcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIFRyZWVFeHByZXNz
aW9uIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICBmYWls
SWZGYWxzZShyaWdodCwgIkNhbm5vdCBwYXJzZSBleHByZXNzaW9uIGluIGEgY29tbWEgZXhwcmVz
c2lvbiIpOwogICAgIGNvbnRleHQuc2V0RW5kT2Zmc2V0KHJpZ2h0LCBtX2xhc3RUb2tlbkVuZFBv
c2l0aW9uLm9mZnNldCk7Ci0gICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkNvbW1hIGNvbW1hTm9k
ZSA9IGNvbnRleHQuY3JlYXRlQ29tbWFFeHByKGxvY2F0aW9uLCBub2RlLCByaWdodCk7CisgICAg
dHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkNvbW1hIGhlYWQgPSBjb250ZXh0LmNyZWF0ZUNvbW1hRXhw
cihsb2NhdGlvbiwgbm9kZSk7CisgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkNvbW1hIHRhaWwg
PSBjb250ZXh0LmFwcGVuZFRvQ29tbWFFeHByKGxvY2F0aW9uLCBoZWFkLCByaWdodCk7CiAgICAg
d2hpbGUgKG1hdGNoKENPTU1BKSkgewogICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVp
bGRTdHJpbmdzKTsKICAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNv
bnRleHQpOwogICAgICAgICBmYWlsSWZGYWxzZShyaWdodCwgIkNhbm5vdCBwYXJzZSBleHByZXNz
aW9uIGluIGEgY29tbWEgZXhwcmVzc2lvbiIpOwogICAgICAgICBjb250ZXh0LnNldEVuZE9mZnNl
dChyaWdodCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5vZmZzZXQpOwotICAgICAgICBjb250ZXh0
LmFwcGVuZFRvQ29tbWEoY29tbWFOb2RlLCByaWdodCk7CisgICAgICAgIHRhaWwgPSBjb250ZXh0
LmFwcGVuZFRvQ29tbWFFeHByKGxvY2F0aW9uLCB0YWlsLCByaWdodCk7CiAgICAgfQotICAgIGNv
bnRleHQuc2V0RW5kT2Zmc2V0KGNvbW1hTm9kZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5vZmZz
ZXQpOwotICAgIHJldHVybiBjb21tYU5vZGU7CisgICAgY29udGV4dC5zZXRFbmRPZmZzZXQoaGVh
ZCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5vZmZzZXQpOworICAgIHJldHVybiBoZWFkOwogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAxNzY4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzEsOCArNTMxLDggQEAgcHJp
dmF0ZToKICAgICBQYXJzZXIoKTsKICAgICBTdHJpbmcgcGFyc2VJbm5lcigpOwogCi0gICAgdm9p
ZCBkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiwgUGFyc2VyQXJlbmFEYXRhPERlY2xh
cmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qLCAKLSAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xh
cmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiosIENvZGVGZWF0dXJlcywgaW50LCBJZGVudGlm
aWVyU2V0JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPj4mJik7CisgICAgdm9pZCBk
aWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiwgRGVjbGFyYXRpb25TdGFja3M6OlZhclN0
YWNrJiwgCisgICAgICAgIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiwgQ29kZUZl
YXR1cmVzLCBpbnQsIElkZW50aWZpZXJTZXQmLCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0cmluZ0lt
cGw+PiYmKTsKIAogICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIHR5cGUgb2YgZXJyb3IgdG8gcmVw
b3J0LgogICAgIGJvb2wgaXNGdW5jdGlvbkJvZHlOb2RlKFNjb3BlTm9kZSopIHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC04MzMsOCArODMzLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U291cmNlUHJv
dmlkZXJDYWNoZT4gbV9mdW5jdGlvbkNhY2hlOwogICAgIFNvdXJjZUVsZW1lbnRzKiBtX3NvdXJj
ZUVsZW1lbnRzOwogICAgIGJvb2wgbV9wYXJzaW5nQnVpbHRpbjsKLSAgICBQYXJzZXJBcmVuYURh
dGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogbV92YXJEZWNsYXJhdGlvbnM7Ci0gICAg
UGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPiogbV9mdW5j
RGVjbGFyYXRpb25zOworICAgIERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjayBtX3ZhckRlY2xh
cmF0aW9uczsKKyAgICBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayBtX2Z1bmNEZWNs
YXJhdGlvbnM7CiAgICAgSWRlbnRpZmllclNldCBtX2NhcHR1cmVkVmFyaWFibGVzOwogICAgIFZl
Y3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4+IG1fY2xvc2VkVmFyaWFibGVzOwogICAgIENvZGVGZWF0
dXJlcyBtX2ZlYXR1cmVzOwpAQCAtOTA1LDggKzkwNSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJz
ZWROb2RlPiBQYXJzZXI8TGV4ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0Q29sdW1uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ29s
dW1uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VFbGVtZW50
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFyRGVjbGFyYXRpb25z
ID8gJm1fdmFyRGVjbGFyYXRpb25zLT5kYXRhIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA/ICZtX2Z1bmNEZWNsYXJhdGlvbnMtPmRh
dGEgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92YXJEZWNsYXJh
dGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmNEZWNsYXJh
dGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhcHR1cmVkVmFy
aWFibGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1fc291cmNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlcywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAx
NzY4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTI5LDggKzEyOSw4IEBAIHB1YmxpYzoKIAogICAgIGludCBjcmVh
dGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIFNvdXJjZUVsZW1lbnRzUmVzdWx0OyB9CiAgICAg
RXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIENhbGxFeHByOyB9Ci0gICAgdm9p
ZCBhcHBlbmRUb0NvbW1hKEV4cHJlc3Npb25UeXBlJiBiYXNlLCBFeHByZXNzaW9uVHlwZSByaWdo
dCkgeyBiYXNlID0gcmlnaHQ7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVDb21tYUV4cHIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlIHJp
Z2h0KSB7IHJldHVybiByaWdodDsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNvbW1hRXhw
cihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSBleHByKSB7IHJldHVybiBl
eHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgYXBwZW5kVG9Db21tYUV4cHIoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUmIHRhaWwsIEV4cHJlc3Npb25UeXBlIG5leHQpIHsg
dGFpbCA9IG5leHQ7IHJldHVybiBuZXh0OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgbWFrZUFzc2ln
bk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBF
eHByZXNzaW9uVHlwZSwgYm9vbCwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNzaWdu
bWVudEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBtYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIFByZUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBtYWtlUG9zdGZpeE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9yLCBpbnQsIGludCwg
aW50KSB7IHJldHVybiBQb3N0RXhwcjsgfQo=
</data>
<flag name="review"
          id="267711"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>