<?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>15885</bug_id>
          
          <creation_ts>2007-11-07 10:07:35 -0800</creation_ts>
          <short_desc>Add move virtual void evaluate() =0 from Node into new ExpressionNode subclass</short_desc>
          <delta_ts>2007-11-08 17:54:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>15910</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60568</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-07 10:07:35 -0800</bug_when>
    <thetext>Add move virtual void evaluate() =0 from Node into new StatementNode subclass

Darin suggested this as part of comments on bug 15879.  I agree, I think it would make the node tree cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60700</commentid>
    <comment_count>1</comment_count>
      <attachid>17131</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-08 15:51:00 -0800</bug_when>
    <thetext>Created attachment 17131
the patch

Well, this does as requested... adds an ExpressionNode and makes all expressions use it/subclass from it instead of Node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60703</commentid>
    <comment_count>2</comment_count>
      <attachid>17131</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-08 16:23:11 -0800</bug_when>
    <thetext>Comment on attachment 17131
the patch

Good first step. Now some of the nodes should probably not be a subclass of ExpressionNode, since they&apos;re not used in a polymorphic way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60704</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-08 16:49:45 -0800</bug_when>
    <thetext>Committed as r27622.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17131</attachid>
            <date>2007-11-08 15:51:00 -0800</date>
            <delta_ts>2007-11-08 16:23:11 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>node.patch</filename>
            <type>text/plain</type>
            <size>83485</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkgYi9KYXZhU2NyaXB0Q29y
ZS9ranMvZ3JhbW1hci55CmluZGV4IGFhOWM5ZWUuLmY1ZjJjNTggMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIu
eQpAQCAtNTcsMTUgKzU3LDE1IEBAIHN0YXRpYyBib29sIGFsbG93QXV0b21hdGljU2VtaWNvbG9u
KCk7CiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKLXN0YXRpYyBOb2RlKiBtYWtlQXNzaWduTm9k
ZShOb2RlKiBsb2MsIE9wZXJhdG9yLCBOb2RlKiBleHByKTsKLXN0YXRpYyBOb2RlKiBtYWtlUHJl
Zml4Tm9kZShOb2RlKiBleHByLCBPcGVyYXRvcik7Ci1zdGF0aWMgTm9kZSogbWFrZVBvc3RmaXhO
b2RlKE5vZGUqIGV4cHIsIE9wZXJhdG9yKTsKK3N0YXRpYyBFeHByZXNzaW9uTm9kZSogbWFrZUFz
c2lnbk5vZGUoRXhwcmVzc2lvbk5vZGUqIGxvYywgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiBl
eHByKTsKK3N0YXRpYyBFeHByZXNzaW9uTm9kZSogbWFrZVByZWZpeE5vZGUoRXhwcmVzc2lvbk5v
ZGUqIGV4cHIsIE9wZXJhdG9yKTsKK3N0YXRpYyBFeHByZXNzaW9uTm9kZSogbWFrZVBvc3RmaXhO
b2RlKEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvcik7CiBzdGF0aWMgUHJvcGVydHlOb2Rl
KiBtYWtlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciAmZ2V0T3JT
ZXQsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFBhcmFtZXRlck5vZGUqLCBGdW5jdGlvbkJvZHlO
b2RlKik7Ci1zdGF0aWMgTm9kZSAqbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoTm9kZSAqZnVuYywgQXJn
dW1lbnRzTm9kZSAqYXJncyk7Ci1zdGF0aWMgTm9kZSAqbWFrZVR5cGVPZk5vZGUoTm9kZSAqZXhw
cik7Ci1zdGF0aWMgTm9kZSAqbWFrZURlbGV0ZU5vZGUoTm9kZSAqZXhwcik7Ci1zdGF0aWMgTm9k
ZSAqbWFrZU5lZ2F0ZU5vZGUoTm9kZSAqZXhwcik7Ci1zdGF0aWMgTm9kZSogbWFrZU51bWJlck5v
ZGUoZG91YmxlKTsKK3N0YXRpYyBFeHByZXNzaW9uTm9kZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUo
RXhwcmVzc2lvbk5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqKTsKK3N0YXRpYyBFeHByZXNzaW9u
Tm9kZSogbWFrZVR5cGVPZk5vZGUoRXhwcmVzc2lvbk5vZGUqKTsKK3N0YXRpYyBFeHByZXNzaW9u
Tm9kZSogbWFrZURlbGV0ZU5vZGUoRXhwcmVzc2lvbk5vZGUqKTsKK3N0YXRpYyBFeHByZXNzaW9u
Tm9kZSogbWFrZU5lZ2F0ZU5vZGUoRXhwcmVzc2lvbk5vZGUqKTsKK3N0YXRpYyBOdW1iZXJOb2Rl
KiBtYWtlTnVtYmVyTm9kZShkb3VibGUpOwogCiAjaWYgQ09NUElMRVIoTVNWQykKIApAQCAtODgs
NyArODgsNyBAQCBzdGF0aWMgTm9kZSogbWFrZU51bWJlck5vZGUoZG91YmxlKTsKICAgZG91Ymxl
ICAgICAgICAgICAgICBkdmFsOwogICBVU3RyaW5nICAgICAgICAgICAgICp1c3RyOwogICBJZGVu
dGlmaWVyICAgICAgICAgICppZGVudDsKLSAgTm9kZSAgICAgICAgICAgICAgICAqbm9kZTsKKyAg
RXhwcmVzc2lvbk5vZGUgICAgICAqbm9kZTsKICAgU3RhdGVtZW50Tm9kZSAgICAgICAqc3RhdDsK
ICAgUGFyYW1ldGVyTGlzdCAgICAgICBwYXJhbTsKICAgRnVuY3Rpb25Cb2R5Tm9kZSAgICAqYm9k
eTsKQEAgLTc0Miw3ICs3NDIsNyBAQCBJdGVyYXRpb25TdGF0ZW1lbnQ6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBGb3JOb2RlKCQ0LmhlYWQsICQ2
LCAkOCwgJDEwKTsgREJHKCQkLCBAMSwgQDkpOyB9CiAgIHwgRk9SICcoJyBMZWZ0SGFuZFNpZGVF
eHByIElOVE9LRU4gRXhwciAnKScgU3RhdGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlICpuID0gJDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEV4cHJlc3Npb25Ob2RlKiBuID0gJDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbi0+aXNMb2NhdGlvbigpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlBQk9SVDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBuZXcgRm9ySW5Ob2RlKG4sICQ1LCAk
Nyk7CkBAIC04ODcsNyArODg3LDcgQEAgU291cmNlRWxlbWVudDoKICAKICUlCiAKLXN0YXRpYyBO
b2RlKiBtYWtlQXNzaWduTm9kZShOb2RlKiBsb2MsIE9wZXJhdG9yIG9wLCBOb2RlKiBleHByKQor
c3RhdGljIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZShFeHByZXNzaW9uTm9kZSogbG9j
LCBPcGVyYXRvciBvcCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCiB7CiAgICAgaWYgKCFsb2MtPmlz
TG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25FcnJvck5vZGUobG9jLCBvcCwg
ZXhwcik7CkBAIC05MTMsNyArOTEzLDcgQEAgc3RhdGljIE5vZGUqIG1ha2VBc3NpZ25Ob2RlKE5v
ZGUqIGxvYywgT3BlcmF0b3Igb3AsIE5vZGUqIGV4cHIpCiAgICAgcmV0dXJuIG5ldyBSZWFkTW9k
aWZ5RG90Tm9kZShkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIG9wLCBleHByKTsKIH0K
IAotc3RhdGljIE5vZGUqIG1ha2VQcmVmaXhOb2RlKE5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wKQor
c3RhdGljIEV4cHJlc3Npb25Ob2RlKiBtYWtlUHJlZml4Tm9kZShFeHByZXNzaW9uTm9kZSogZXhw
ciwgT3BlcmF0b3Igb3ApCiB7IAogICAgIGlmICghZXhwci0+aXNMb2NhdGlvbigpKQogICAgICAg
ICByZXR1cm4gbmV3IFByZWZpeEVycm9yTm9kZShleHByLCBvcCk7CkBAIC05MzksNyArOTM5LDcg
QEAgc3RhdGljIE5vZGUqIG1ha2VQcmVmaXhOb2RlKE5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wKQog
ICAgIHJldHVybiBuZXcgUHJlRGVjRG90Tm9kZShkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVy
KCkpOwogfQogCi1zdGF0aWMgTm9kZSogbWFrZVBvc3RmaXhOb2RlKE5vZGUqIGV4cHIsIE9wZXJh
dG9yIG9wKQorc3RhdGljIEV4cHJlc3Npb25Ob2RlKiBtYWtlUG9zdGZpeE5vZGUoRXhwcmVzc2lv
bk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wKQogeyAKICAgICBpZiAoIWV4cHItPmlzTG9jYXRpb24o
KSkKICAgICAgICAgcmV0dXJuIG5ldyBQb3N0Zml4RXJyb3JOb2RlKGV4cHIsIG9wKTsKQEAgLTk2
Niw3ICs5NjYsNyBAQCBzdGF0aWMgTm9kZSogbWFrZVBvc3RmaXhOb2RlKE5vZGUqIGV4cHIsIE9w
ZXJhdG9yIG9wKQogICAgIHJldHVybiBuZXcgUG9zdERlY0RvdE5vZGUoZG90LT5iYXNlKCksIGRv
dC0+aWRlbnRpZmllcigpKTsKIH0KIAotc3RhdGljIE5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2Rl
KE5vZGUqIGZ1bmMsIEFyZ3VtZW50c05vZGUqIGFyZ3MpCitzdGF0aWMgRXhwcmVzc2lvbk5vZGUq
IG1ha2VGdW5jdGlvbkNhbGxOb2RlKEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2Rl
KiBhcmdzKQogewogICAgIGlmICghZnVuYy0+aXNMb2NhdGlvbigpKQogICAgICAgICByZXR1cm4g
bmV3IEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShmdW5jLCBhcmdzKTsKQEAgLTk4Myw3ICs5ODMsNyBA
QCBzdGF0aWMgTm9kZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoTm9kZSogZnVuYywgQXJndW1lbnRz
Tm9kZSogYXJncykKICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQ2FsbERvdE5vZGUoZG90LT5iYXNl
KCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzKTsKIH0KIAotc3RhdGljIE5vZGUqIG1ha2VUeXBl
T2ZOb2RlKE5vZGUqIGV4cHIpCitzdGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VUeXBlT2ZOb2Rl
KEV4cHJlc3Npb25Ob2RlKiBleHByKQogewogICAgIGlmIChleHByLT5pc1Jlc29sdmVOb2RlKCkp
IHsKICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9k
ZSo+KGV4cHIpOwpAQCAtOTkyLDcgKzk5Miw3IEBAIHN0YXRpYyBOb2RlKiBtYWtlVHlwZU9mTm9k
ZShOb2RlKiBleHByKQogICAgIHJldHVybiBuZXcgVHlwZU9mVmFsdWVOb2RlKGV4cHIpOwogfQog
Ci1zdGF0aWMgTm9kZSogbWFrZURlbGV0ZU5vZGUoTm9kZSogZXhwcikKK3N0YXRpYyBFeHByZXNz
aW9uTm9kZSogbWFrZURlbGV0ZU5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIpCiB7CiAgICAgaWYg
KCFleHByLT5pc0xvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBuZXcgRGVsZXRlVmFsdWVOb2Rl
KGV4cHIpOwpAQCAtMTAyMSw3ICsxMDIxLDcgQEAgc3RhdGljIFByb3BlcnR5Tm9kZSogbWFrZUdl
dHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImIGdldE9yU2V0LAogICAg
IHJldHVybiBuZXcgUHJvcGVydHlOb2RlKG5hbWUsIG5ldyBGdW5jRXhwck5vZGUoQ29tbW9uSWRl
bnRpZmllcnM6OnNoYXJlZCgpLT5udWxsSWRlbnRpZmllciwgYm9keSwgcGFyYW1zKSwgdHlwZSk7
CiB9CiAKLXN0YXRpYyBOb2RlKiBtYWtlTmVnYXRlTm9kZShOb2RlKiBuKQorc3RhdGljIEV4cHJl
c3Npb25Ob2RlKiBtYWtlTmVnYXRlTm9kZShFeHByZXNzaW9uTm9kZSogbikKIHsKICAgICBpZiAo
bi0+aXNOdW1iZXIoKSkgewogICAgICAgICBOdW1iZXJOb2RlKiBudW1iZXIgPSBzdGF0aWNfY2Fz
dDxOdW1iZXJOb2RlKj4obik7CkBAIC0xMDM1LDcgKzEwMzUsNyBAQCBzdGF0aWMgTm9kZSogbWFr
ZU5lZ2F0ZU5vZGUoTm9kZSogbikKICAgICByZXR1cm4gbmV3IE5lZ2F0ZU5vZGUobik7CiB9CiAK
LXN0YXRpYyBOb2RlKiBtYWtlTnVtYmVyTm9kZShkb3VibGUgZCkKK3N0YXRpYyBOdW1iZXJOb2Rl
KiBtYWtlTnVtYmVyTm9kZShkb3VibGUgZCkKIHsKICAgICBKU1ZhbHVlKiB2YWx1ZSA9IEpTSW1t
ZWRpYXRlOjpmcm9tRG91YmxlKGQpOwogICAgIGlmICh2YWx1ZSkKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCmlu
ZGV4IGZhODhlOGQuLjJhNjcwNTcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rl
cy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcApAQCAtMjAzLDcgKzIwMyw3
IEBAIHZvaWQgTm9kZTo6Y2xlYXJOZXdOb2RlcygpCiAgICAgbmV3Tm9kZXMgPSAwOwogfQogCi1k
b3VibGUgTm9kZTo6ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCitkb3VibGUgRXhw
cmVzc2lvbk5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpT
VmFsdWUqIHZhbHVlID0gZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVN
QkVSCkBAIC0yMjk2LDggKzIyOTYsOCBAQCBKU1ZhbHVlICpDb25kaXRpb25hbE5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIAogLy8gRUNNQSAxMS4xMwogCi1zdGF0aWMgQUxXQVlTX0lO
TElORSBKU1ZhbHVlKiB2YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSogY3VycmVudCwgTm9kZSogcmlnaHQsIE9wZXJhdG9yIG9wZXIpIEtKU19GQVNU
X0NBTEw7Ci1zdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiB2YWx1ZUZvclJlYWRNb2RpZnlB
c3NpZ25tZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogY3VycmVudCwgTm9kZSogcmlnaHQs
IE9wZXJhdG9yIG9wZXIpCitzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiB2YWx1ZUZvclJl
YWRNb2RpZnlBc3NpZ25tZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogY3VycmVudCwgRXhw
cmVzc2lvbk5vZGUqIHJpZ2h0LCBPcGVyYXRvciBvcGVyKSBLSlNfRkFTVF9DQUxMOworc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogdmFsdWVGb3JSZWFkTW9kaWZ5QXNzaWdubWVudChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGN1cnJlbnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgT3Bl
cmF0b3Igb3BlcikKIHsKICAgSlNWYWx1ZSAqdjsKICAgaW50IGkxOwpAQCAtMzA5NCwxMyArMzA5
NCwxMyBAQCB2b2lkIEZvck5vZGU6OmdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYg
c3RhY2tzKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9ySW5Ob2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Gb3JJbk5vZGU6OkZvckluTm9k
ZShOb2RlICpsLCBOb2RlICplLCBTdGF0ZW1lbnROb2RlICpzKQorRm9ySW5Ob2RlOjpGb3JJbk5v
ZGUoRXhwcmVzc2lvbk5vZGUqIGwsIEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnROb2RlKiBz
KQogICA6IGluaXQoMEwpLCBsZXhwcihsKSwgZXhwcihlKSwgdmFyRGVjbCgwTCksIHN0YXRlbWVu
dChzKQogewogICAgIG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IAogfQogCi1Gb3JJbk5v
ZGU6OkZvckluTm9kZShjb25zdCBJZGVudGlmaWVyICZpLCBBc3NpZ25FeHByTm9kZSAqaW4sIE5v
ZGUgKmUsIFN0YXRlbWVudE5vZGUgKnMpCitGb3JJbk5vZGU6OkZvckluTm9kZShjb25zdCBJZGVu
dGlmaWVyJiBpLCBBc3NpZ25FeHByTm9kZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1l
bnROb2RlKiBzKQogICA6IGlkZW50KGkpLCBpbml0KGluKSwgZXhwcihlKSwgc3RhdGVtZW50KHMp
CiB7CiAgIG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IApkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUva2pzL25vZGVzLmggYi9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAppbmRleCA0
OGU0YWFkLi4yNjIzM2ZmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaApAQCAtMTE3LDggKzExNyw2IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIE5vZGUoUGxhY2VtZW50TmV3QWRvcHRUeXBlKSBLSlNfRkFTVF9DQUxM
IHsgfQogICAgIHZpcnR1YWwgfk5vZGUoKTsKIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgZXZh
bHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIFVTdHJpbmcgdG9T
dHJpbmcoKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIGludCBsaW5lTm8oKSBjb25zdCBLSlNf
RkFTVF9DQUxMIHsgcmV0dXJuIG1fbGluZTsgfQogICAgIHZvaWQgcmVmKCkgS0pTX0ZBU1RfQ0FM
TDsKQEAgLTEyNiwxMiArMTI0LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdW5zaWduZWQgcmVm
Y291bnQoKSBLSlNfRkFTVF9DQUxMOwogICAgIHN0YXRpYyB2b2lkIGNsZWFyTmV3Tm9kZXMoKSBL
SlNfRkFTVF9DQUxMOwogCi0gICAgdmlydHVhbCBib29sIGlzTnVtYmVyKCkgY29uc3QgS0pTX0ZB
U1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkg
Y29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c1Jlc29sdmVOb2RlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxM
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzRG90QWNjZXNzb3JOb2RlKCkg
Y29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgLy8gU2VyaWFsaXph
dGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTCA9IDA7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCA9IDA7CkBAIC0xNTAsMTUgKzE0MiwxNSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBDb21wbGV0
aW9uIGNyZWF0ZUVycm9yQ29tcGxldGlvbihFeGVjU3RhdGUgKiwgRXJyb3JUeXBlLCBjb25zdCBj
aGFyICptc2cpIEtKU19GQVNUX0NBTEw7CiAgICAgQ29tcGxldGlvbiBjcmVhdGVFcnJvckNvbXBs
ZXRpb24oRXhlY1N0YXRlICosIEVycm9yVHlwZSwgY29uc3QgY2hhciAqbXNnLCBjb25zdCBJZGVu
dGlmaWVyICYpIEtKU19GQVNUX0NBTEw7CiAKLSAgICBKU1ZhbHVlICp0aHJvd0Vycm9yKEV4ZWNT
dGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIgKm1zZykgS0pTX0ZBU1RfQ0FMTDsKLSAgICBK
U1ZhbHVlKiB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1z
ZywgY29uc3QgY2hhciopIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSAqdGhyb3dFcnJvcihF
eGVjU3RhdGUgKiwgRXJyb3JUeXBlLCBjb25zdCBjaGFyICptc2csIEpTVmFsdWUgKiwgTm9kZSAq
KSBLSlNfRkFTVF9DQUxMOwotICAgIEpTVmFsdWUgKnRocm93RXJyb3IoRXhlY1N0YXRlICosIEVy
cm9yVHlwZSwgY29uc3QgY2hhciAqbXNnLCBjb25zdCBJZGVudGlmaWVyICYpIEtKU19GQVNUX0NB
TEw7Ci0gICAgSlNWYWx1ZSAqdGhyb3dFcnJvcihFeGVjU3RhdGUgKiwgRXJyb3JUeXBlLCBjb25z
dCBjaGFyICptc2csIEpTVmFsdWUgKiwgY29uc3QgSWRlbnRpZmllciAmKSBLSlNfRkFTVF9DQUxM
OwotICAgIEpTVmFsdWUgKnRocm93RXJyb3IoRXhlY1N0YXRlICosIEVycm9yVHlwZSwgY29uc3Qg
Y2hhciAqbXNnLCBKU1ZhbHVlICosIE5vZGUgKiwgTm9kZSAqKSBLSlNfRkFTVF9DQUxMOwotICAg
IEpTVmFsdWUgKnRocm93RXJyb3IoRXhlY1N0YXRlICosIEVycm9yVHlwZSwgY29uc3QgY2hhciAq
bXNnLCBKU1ZhbHVlICosIE5vZGUgKiwgY29uc3QgSWRlbnRpZmllciAmKSBLSlNfRkFTVF9DQUxM
OworICAgIEpTVmFsdWUqIHRocm93RXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JUeXBlLCBjb25zdCBj
aGFyKiBtc2cpIEtKU19GQVNUX0NBTEw7CisgICAgSlNWYWx1ZSogdGhyb3dFcnJvcihFeGVjU3Rh
dGUqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgY2hhciopIEtKU19GQVNUX0NB
TEw7CisgICAgSlNWYWx1ZSogdGhyb3dFcnJvcihFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0
IGNoYXIqIG1zZywgSlNWYWx1ZSosIE5vZGUqKSBLSlNfRkFTVF9DQUxMOworICAgIEpTVmFsdWUq
IHRocm93RXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtc2csIGNvbnN0
IElkZW50aWZpZXImKSBLSlNfRkFTVF9DQUxMOworICAgIEpTVmFsdWUqIHRocm93RXJyb3IoRXhl
Y1N0YXRlKiwgRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtc2csIEpTVmFsdWUqLCBjb25zdCBJZGVu
dGlmaWVyJikgS0pTX0ZBU1RfQ0FMTDsKKyAgICBKU1ZhbHVlKiB0aHJvd0Vycm9yKEV4ZWNTdGF0
ZSosIEVycm9yVHlwZSwgY29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiwgTm9kZSosIE5vZGUqKSBL
SlNfRkFTVF9DQUxMOworICAgIEpTVmFsdWUqIHRocm93RXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JU
eXBlLCBjb25zdCBjaGFyKiBtc2csIEpTVmFsdWUqLCBOb2RlKiwgY29uc3QgSWRlbnRpZmllciYp
IEtKU19GQVNUX0NBTEw7CiAKLSAgICBKU1ZhbHVlICp0aHJvd1VuZGVmaW5lZFZhcmlhYmxlRXJy
b3IoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXIgJikgS0pTX0ZBU1RfQ0FMTDsKKyAgICBK
U1ZhbHVlKiB0aHJvd1VuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYpIEtKU19GQVNUX0NBTEw7CiAKICAgICB2b2lkIGhhbmRsZUV4Y2VwdGlvbihFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZvaWQgaGFuZGxlRXhjZXB0aW9uKEV4ZWNTdGF0
ZSosIEpTVmFsdWUqKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTcyLDYgKzE2NCwyOSBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBOb2RlJiBvcGVyYXRvcj0oY29uc3QgTm9kZSYpIEtKU19GQVNUX0NBTEw7
CiAgICAgTm9kZShjb25zdCBOb2RlICZvdGhlcikgS0pTX0ZBU1RfQ0FMTDsKICAgfTsKKyAgICAK
KyAgICBjbGFzcyBFeHByZXNzaW9uTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEV4cHJlc3Npb25Ob2RlKCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgICAgICAgOiBOb2Rl
KCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBTcGVjaWFsIGNv
bnN0cnVjdG9yIGZvciBjYXNlcyB3aGVyZSB3ZSBvdmVyd3JpdGUgYW4gb2JqZWN0IGluIHBsYWNl
LgorICAgICAgICBFeHByZXNzaW9uTm9kZShQbGFjZW1lbnROZXdBZG9wdFR5cGUpIEtKU19GQVNU
X0NBTEwKKyAgICAgICAgICAgIDogTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNOdW1iZXIoKSBjb25z
dCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBp
c0xvY2F0aW9uKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZXNvbHZlTm9kZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzQnJhY2tldEFjY2Vzc29yTm9kZSgp
IGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBi
b29sIGlzRG90QWNjZXNzb3JOb2RlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxz
ZTsgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMID0gMDsKKyAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVU
b051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIH07CiAKICAgY2xhc3MgU3Rh
dGVtZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgpAQCAtMTg2LDI5ICsyMDEsMjgg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgIHByb3RlY3RlZDoKICAgICBMYWJlbFN0YWNrIGxzOwogICBw
cml2YXRlOgotICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEwg
eyByZXR1cm4ganNVbmRlZmluZWQoKTsgfQogICAgIGludCBtX2xhc3RMaW5lOwogICB9OwogCi0g
IGNsYXNzIE51bGxOb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBOdWxsTm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKICAgICBOdWxsTm9kZSgpIEtKU19GQVNUX0NB
TEwge30KLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwor
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNQcmltYXJ5OyB9CiAgIH07CiAKLSAgY2xhc3MgQm9vbGVhbk5vZGUgOiBwdWJsaWMgTm9k
ZSB7CisgIGNsYXNzIEJvb2xlYW5Ob2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVi
bGljOgogICAgIEJvb2xlYW5Ob2RlKGJvb2wgdikgS0pTX0ZBU1RfQ0FMTCA6IHZhbHVlKHYpIHt9
Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
UHJpbWFyeTsgfQogICBwcml2YXRlOgogICAgIGJvb2wgdmFsdWU7CiAgIH07CiAKLSAgY2xhc3Mg
TnVtYmVyTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgTnVtYmVyTm9kZSA6IHB1YmxpYyBF
eHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKICAgICBOdW1iZXJOb2RlKGRvdWJsZSB2KSBLSlNf
RkFTVF9DQUxMIDogbV9kb3VibGUodikge30KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0yMzMsNyArMjQ3LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICBKU1ZhbHVlKiBtX3ZhbHVlOwogICB9OwogCi0gIGNsYXNzIFN0cmluZ05v
ZGUgOiBwdWJsaWMgTm9kZSB7CisgIGNsYXNzIFN0cmluZ05vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUgewogICBwdWJsaWM6CiAgICAgU3RyaW5nTm9kZShjb25zdCBVU3RyaW5nICp2KSBLSlNf
RkFTVF9DQUxMIHsgdmFsdWUgPSAqdjsgfQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKQEAgLTI0NCwyNiArMjU4LDI2IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIFVTdHJpbmcgdmFsdWU7CiAgIH07CiAKLSAgY2xhc3MgUmVnRXhwTm9kZSA6
IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgUmVnRXhwTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSB7CiAgIHB1YmxpYzoKICAgICBSZWdFeHBOb2RlKGNvbnN0IFVTdHJpbmcgJnAsIGNvbnN0IFVT
dHJpbmcgJmYpIEtKU19GQVNUX0NBTEwgCiAgICAgICA6IHBhdHRlcm4ocCksIGZsYWdzKGYpIHsg
fQotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAg
dmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y1ByaW1hcnk7IH0KICAgcHJpdmF0ZToKICAgICBVU3RyaW5nIHBhdHRlcm4sIGZsYWdzOwogICB9
OwogCi0gIGNsYXNzIFRoaXNOb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBUaGlzTm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKICAgICBUaGlzTm9kZSgpIEtKU19G
QVNUX0NBTEwge30KLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNQcmltYXJ5OyB9CiAgfTsKIAotICBjbGFzcyBSZXNvbHZlTm9kZSA6IHB1Ymxp
YyBOb2RlIHsKKyAgY2xhc3MgUmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewog
ICBwdWJsaWM6CiAgICAgUmVzb2x2ZU5vZGUoY29uc3QgSWRlbnRpZmllciAmcykgS0pTX0ZBU1Rf
Q0FMTCAKICAgICAgICAgOiBpZGVudChzKSAKQEAgLTI3MiwxNCArMjg2LDE0IEBAIG5hbWVzcGFj
ZSBLSlMgewogCiAgICAgLy8gU3BlY2lhbCBjb25zdHJ1Y3RvciBmb3IgY2FzZXMgd2hlcmUgd2Ug
b3ZlcndyaXRlIGFuIG9iamVjdCBpbiBwbGFjZS4KICAgICBSZXNvbHZlTm9kZShQbGFjZW1lbnRO
ZXdBZG9wdFR5cGUpIEtKU19GQVNUX0NBTEwgCi0gICAgICAgIDogTm9kZShQbGFjZW1lbnROZXdB
ZG9wdCkKLSAgICAgICAgLCBpZGVudChQbGFjZW1lbnROZXdBZG9wdCkgCisgICAgICAgIDogRXhw
cmVzc2lvbk5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCisgICAgICAgICwgaWRlbnQoUGxhY2VtZW50
TmV3QWRvcHQpCiAgICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JikgS0pTX0ZBU1RfQ0FMTDsKIAotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KIApAQCAtMzA3LDEzICszMjEsMTMgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShF
eGVjU3RhdGUqKTsKICAgfTsKIAotICBjbGFzcyBFbGVtZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsK
KyAgY2xhc3MgRWxlbWVudE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6
Ci0gICAgRWxlbWVudE5vZGUoaW50IGUsIE5vZGUqIG4pIEtKU19GQVNUX0NBTEwgOiBlbGlzaW9u
KGUpLCBub2RlKG4pIHsgfQotICAgIEVsZW1lbnROb2RlKEVsZW1lbnROb2RlKiBsLCBpbnQgZSwg
Tm9kZSogbikgS0pTX0ZBU1RfQ0FMTAorICAgIEVsZW1lbnROb2RlKGludCBlLCBFeHByZXNzaW9u
Tm9kZSogbikgS0pTX0ZBU1RfQ0FMTCA6IGVsaXNpb24oZSksIG5vZGUobikgeyB9CisgICAgRWxl
bWVudE5vZGUoRWxlbWVudE5vZGUqIGwsIGludCBlLCBFeHByZXNzaW9uTm9kZSogbikgS0pTX0ZB
U1RfQ0FMTAogICAgICAgOiBlbGlzaW9uKGUpLCBub2RlKG4pIHsgbC0+bmV4dCA9IHRoaXM7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2Rl
KiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNW
YWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgUGFz
c1JlZlB0cjxFbGVtZW50Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IG5leHQucmVsZWFzZSgpOyB9CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KQEAg
LTMyMSwxOCArMzM1LDE4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGZyaWVuZCBjbGFzcyBBcnJh
eU5vZGU7CiAgICAgTGlzdFJlZlB0cjxFbGVtZW50Tm9kZT4gbmV4dDsKICAgICBpbnQgZWxpc2lv
bjsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG5v
ZGU7CiAgIH07CiAKLSAgY2xhc3MgQXJyYXlOb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBB
cnJheU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6CiAgICAgQXJyYXlO
b2RlKGludCBlKSBLSlNfRkFTVF9DQUxMIDogZWxpc2lvbihlKSwgb3B0KHRydWUpIHsgfQotICAg
IEFycmF5Tm9kZShFbGVtZW50Tm9kZSogZWxlKSBLSlNfRkFTVF9DQUxMCisgICAgQXJyYXlOb2Rl
KEVsZW1lbnROb2RlKikgS0pTX0ZBU1RfQ0FMTAogICAgICAgOiBlbGVtZW50KGVsZSksIGVsaXNp
b24oMCksIG9wdChmYWxzZSkgeyB9CiAgICAgQXJyYXlOb2RlKGludCBlbGksIEVsZW1lbnROb2Rl
KiBlbGUpIEtKU19GQVNUX0NBTEwKICAgICAgIDogZWxlbWVudChlbGUpLCBlbGlzaW9uKGVsaSks
IG9wdCh0cnVlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
KyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjUHJpbWFyeTsgfQogICBwcml2YXRlOgpAQCAtMzQxLDMxICszNTUsMzEgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgYm9vbCBvcHQ7CiAgIH07CiAKLSAgY2xhc3MgUHJvcGVydHlOb2RlIDog
cHVibGljIE5vZGUgeworICBjbGFzcyBQcm9wZXJ0eU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5v
ZGUgewogICBwdWJsaWM6CiAgICAgZW51bSBUeXBlIHsgQ29uc3RhbnQsIEdldHRlciwgU2V0dGVy
IH07Ci0gICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImIG4sIE5vZGUgKmEsIFR5cGUg
dCkgS0pTX0ZBU1RfQ0FMTAorICAgIFByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyJiBuLCBF
eHByZXNzaW9uTm9kZSogYSwgVHlwZSB0KSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IG1fbmFtZShu
KSwgYXNzaWduKGEpLCB0eXBlKHQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlMaXN0Tm9kZTsKICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICAgIGNvbnN0IElkZW50aWZpZXImIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgcHJpdmF0ZToKICAgICBJZGVudGlmaWVy
IG1fbmFtZTsKLSAgICBSZWZQdHI8Tm9kZT4gYXNzaWduOworICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gYXNzaWduOwogICAgIFR5cGUgdHlwZTsKICAgfTsKICAgCi0gIGNsYXNzIFByb3BlcnR5
TGlzdE5vZGUgOiBwdWJsaWMgTm9kZSB7CisgIGNsYXNzIFByb3BlcnR5TGlzdE5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6CiAgICAgUHJvcGVydHlMaXN0Tm9kZShQcm9w
ZXJ0eU5vZGUqIG4pIEtKU19GQVNUX0NBTEwKICAgICAgIDogbm9kZShuKSB7IH0KICAgICBQcm9w
ZXJ0eUxpc3ROb2RlKFByb3BlcnR5Tm9kZSogbiwgUHJvcGVydHlMaXN0Tm9kZSogbCkgS0pTX0ZB
U1RfQ0FMTAogICAgICAgOiBub2RlKG4pIHsgbC0+bmV4dCA9IHRoaXM7IH0KICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1
YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgUGFzc1JlZlB0cjxQcm9w
ZXJ0eUxpc3ROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbmV4dC5y
ZWxlYXNlKCk7IH0KICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQpAQCAtMzc1LDIx
ICszODksMjEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgTGlzdFJlZlB0cjxQcm9wZXJ0eUxpc3RO
b2RlPiBuZXh0OwogICB9OwogCi0gIGNsYXNzIE9iamVjdExpdGVyYWxOb2RlIDogcHVibGljIE5v
ZGUgeworICBjbGFzcyBPYmplY3RMaXRlcmFsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CiAgIHB1YmxpYzoKICAgICBPYmplY3RMaXRlcmFsTm9kZSgpIEtKU19GQVNUX0NBTEwgeyB9CiAg
ICAgT2JqZWN0TGl0ZXJhbE5vZGUoUHJvcGVydHlMaXN0Tm9kZSogbCkgS0pTX0ZBU1RfQ0FMTCA6
IGxpc3QobCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMOwotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY1ByaW1hcnk7IH0KICAgcHJpdmF0ZToKICAgICBSZWZQdHI8UHJvcGVydHlMaXN0Tm9kZT4g
bGlzdDsKICAgfTsKIAotICBjbGFzcyBCcmFja2V0QWNjZXNzb3JOb2RlIDogcHVibGljIE5vZGUg
eworICBjbGFzcyBCcmFja2V0QWNjZXNzb3JOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsK
ICAgcHVibGljOgotICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBL
SlNfRkFTVF9DQUxMIDogZXhwcjEoZTEpLCBleHByMihlMikge30KKyAgICBCcmFja2V0QWNjZXNz
b3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9D
QUxMIDogZXhwcjEoZTEpLCBleHByMihlMikge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1i
ZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKQEAgLTM5OCw0MCArNDEyLDQwIEBAIG5hbWVz
cGFjZSBLSlMgewogCiAgICAgdmlydHVhbCBib29sIGlzTG9jYXRpb24oKSBjb25zdCBLSlNfRkFT
VF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNCcmFja2V0QWNjZXNz
b3JOb2RlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9Ci0gICAgTm9kZSAq
YmFzZSgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gZXhwcjEuZ2V0KCk7IH0KLSAgICBOb2RlICpz
dWJzY3JpcHQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGV4cHIyLmdldCgpOyB9CisgICAgRXhw
cmVzc2lvbk5vZGUqIGJhc2UoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGV4cHIxLmdldCgpOyB9
CisgICAgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4g
ZXhwcjIuZ2V0KCk7IH0KIAogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHIxOwotICAg
IFJlZlB0cjxOb2RlPiBleHByMjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwor
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKLSAgY2xhc3MgRG90QWNj
ZXNzb3JOb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBEb3RBY2Nlc3Nvck5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgRG90QWNjZXNzb3JOb2RlKE5vZGUg
KmUsIGNvbnN0IElkZW50aWZpZXIgJnMpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpLCBpZGVudChz
KSB7IH0KKyAgICBEb3RBY2Nlc3Nvck5vZGUoRXhwcmVzc2lvbk5vZGUqIGUsIGNvbnN0IElkZW50
aWZpZXImIHMpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpLCBpZGVudChzKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTWVtYmVyOyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNMb2NhdGlvbigpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0RvdEFjY2Vzc29yTm9kZSgpIGNvbnN0IEtKU19GQVNU
X0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIE5vZGUgKmJhc2UoKSBjb25zdCBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIGV4cHIuZ2V0KCk7IH0KKyAgICBFeHByZXNzaW9uTm9kZSogYmFzZSgpIGNv
bnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gZXhwci5nZXQoKTsgfQogICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGlkZW50OyB9
CiAKICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gZXhwcjsKKyAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IGV4cHI7CiAgICAgSWRlbnRpZmllciBpZGVudDsKICAgfTsKIAotICBjbGFzcyBB
cmd1bWVudExpc3ROb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBBcmd1bWVudExpc3ROb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIEFyZ3VtZW50TGlzdE5v
ZGUoTm9kZSogZSkgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkgeyB9Ci0gICAgQXJndW1lbnRMaXN0
Tm9kZShBcmd1bWVudExpc3ROb2RlKiBsLCBOb2RlKiBlKSBLSlNfRkFTVF9DQUxMIAorICAgIEFy
Z3VtZW50TGlzdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUp
IHsgfQorICAgIEFyZ3VtZW50TGlzdE5vZGUoQXJndW1lbnRMaXN0Tm9kZSogbCwgRXhwcmVzc2lv
bk5vZGUqIGUpIEtKU19GQVNUX0NBTEwgCiAgICAgICA6IGV4cHIoZSkgeyBsLT5uZXh0ID0gdGhp
czsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2b2lk
IGV2YWx1YXRlTGlzdChFeGVjU3RhdGUqLCBMaXN0JikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICBQYXNzUmVmUHRyPEFyZ3VtZW50TGlzdE5vZGU+IHJlbGVhc2VOZXh0KCkgS0pTX0ZBU1RfQ0FM
TCB7IHJldHVybiBuZXh0LnJlbGVhc2UoKTsgfQpAQCAtNDM5LDE2ICs0NTMsMTYgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFyZ3VtZW50c05vZGU7CiAg
ICAgTGlzdFJlZlB0cjxBcmd1bWVudExpc3ROb2RlPiBuZXh0OwotICAgIFJlZlB0cjxOb2RlPiBl
eHByOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKICAgfTsKIAotICBjbGFzcyBB
cmd1bWVudHNOb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBBcmd1bWVudHNOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgogICAgIEFyZ3VtZW50c05vZGUoKSBLSlNf
RkFTVF9DQUxMIHsgfQogICAgIEFyZ3VtZW50c05vZGUoQXJndW1lbnRMaXN0Tm9kZSogbCkgS0pT
X0ZBU1RfQ0FMTAogICAgICAgOiBsaXN0Tm9kZShsKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdm9pZCBldmFsdWF0ZUxpc3QoRXhlY1N0YXRlKiBl
eGVjLCBMaXN0JiBsaXN0KSBLSlNfRkFTVF9DQUxMIHsgaWYgKGxpc3ROb2RlKSBsaXN0Tm9kZS0+
ZXZhbHVhdGVMaXN0KGV4ZWMsIGxpc3QpOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4
cHJlc3Npb247IH0KQEAgLTQ1NiwzMiArNDcwLDMyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFJl
ZlB0cjxBcmd1bWVudExpc3ROb2RlPiBsaXN0Tm9kZTsKICAgfTsKIAotICBjbGFzcyBOZXdFeHBy
Tm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgTmV3RXhwck5vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgTmV3RXhwck5vZGUoTm9kZSAqZSkgS0pTX0ZBU1Rf
Q0FMTCA6IGV4cHIoZSkge30KLSAgICBOZXdFeHByTm9kZShOb2RlICplLCBBcmd1bWVudHNOb2Rl
ICphKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSwgYXJncyhhKSB7fQorICAgIE5ld0V4cHJOb2Rl
KEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7fQorICAgIE5ld0V4
cHJOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBBcmd1bWVudHNOb2RlKiBhKSBLSlNfRkFTVF9DQUxM
IDogZXhwcihlKSwgYXJncyhhKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNMZWZ0SGFuZFNpZGU7IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9k
ZT4gZXhwcjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7CiAgICAgUmVmUHRyPEFy
Z3VtZW50c05vZGU+IGFyZ3M7CiAgIH07CiAKLSAgY2xhc3MgRnVuY3Rpb25DYWxsVmFsdWVOb2Rl
IDogcHVibGljIE5vZGUgeworICBjbGFzcyBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUgOiBwdWJsaWMg
RXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKE5v
ZGUgKmUsIEFyZ3VtZW50c05vZGUgKmEpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpLCBhcmdzKGEp
IHt9CisgICAgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBBcmd1bWVu
dHNOb2RlKiBhKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSwgYXJncyhhKSB7fQogICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFs
dWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9CiAgIHByaXZhdGU6
Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHBy
OwogICAgIFJlZlB0cjxBcmd1bWVudHNOb2RlPiBhcmdzOwogICB9OwogCi0gIGNsYXNzIEZ1bmN0
aW9uQ2FsbFJlc29sdmVOb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBGdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKICAgICBGdW5j
dGlvbkNhbGxSZXNvbHZlTm9kZShjb25zdCBJZGVudGlmaWVyJiBpLCBBcmd1bWVudHNOb2RlKiBh
KSBLSlNfRkFTVF9DQUxMCiAgICAgICAgIDogaWRlbnQoaSkKQEAgLTQ5MCwxNCArNTA0LDE0IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIH0KIAogICAgIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKFBs
YWNlbWVudE5ld0Fkb3B0VHlwZSkgS0pTX0ZBU1RfQ0FMTCAKLSAgICAgICAgOiBOb2RlKFBsYWNl
bWVudE5ld0Fkb3B0KQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKFBsYWNlbWVudE5ld0Fkb3B0
KQogICAgICAgICAsIGlkZW50KFBsYWNlbWVudE5ld0Fkb3B0KQogICAgICAgICAsIGFyZ3MoUGxh
Y2VtZW50TmV3QWRvcHQpCiAgICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9CiAKQEAgLTUxNiw0MSArNTMwLDQxIEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICBpbmRleCA9IGk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSog
ZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUq
IGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgIH07CiAKLSAgY2xhc3MgRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGUgOiBwdWJsaWMgTm9kZSB7CisgIGNsYXNzIEZ1bmN0aW9uQ2Fs
bEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIEZ1
bmN0aW9uQ2FsbEJyYWNrZXROb2RlKE5vZGUgKmIsIE5vZGUgKnMsIEFyZ3VtZW50c05vZGUgKmEp
IEtKU19GQVNUX0NBTEwgOiBiYXNlKGIpLCBzdWJzY3JpcHQocyksIGFyZ3MoYSkge30KKyAgICBG
dW5jdGlvbkNhbGxCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9kZSogYiwgRXhwcmVzc2lvbk5vZGUq
IHMsIEFyZ3VtZW50c05vZGUqIGEpIEtKU19GQVNUX0NBTEwgOiBiYXNlKGIpLCBzdWJzY3JpcHQo
cyksIGFyZ3MoYSkge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
KyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjQ2FsbDsgfQogICBwcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPE5vZGU+IGJhc2U7Ci0gICAg
UmVmUHRyPE5vZGU+IHN1YnNjcmlwdDsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGJhc2U7
CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBzdWJzY3JpcHQ7CiAgICAgUmVmUHRyPEFyZ3Vt
ZW50c05vZGU+IGFyZ3M7CiAgIH07CiAKLSAgY2xhc3MgRnVuY3Rpb25DYWxsRG90Tm9kZSA6IHB1
YmxpYyBOb2RlIHsKKyAgY2xhc3MgRnVuY3Rpb25DYWxsRG90Tm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKE5vZGUgKmIsIGNv
bnN0IElkZW50aWZpZXIgJmksIEFyZ3VtZW50c05vZGUgKmEpIEtKU19GQVNUX0NBTEwgOiBiYXNl
KGIpLCBpZGVudChpKSwgYXJncyhhKSB7fQorICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUoRXhwcmVz
c2lvbk5vZGUqIGIsIGNvbnN0IElkZW50aWZpZXImIGksIEFyZ3VtZW50c05vZGUqIGEpIEtKU19G
QVNUX0NBTEwgOiBiYXNlKGIpLCBpZGVudChpKSwgYXJncyhhKSB7fQogICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9CiAgIHByb3RlY3RlZDoKLSAg
ICBSZWZQdHI8Tm9kZT4gYmFzZTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGJhc2U7CiAg
ICAgSWRlbnRpZmllciBpZGVudDsKICAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAg
fTsKIAotICBjbGFzcyBQcmVQb3N0UmVzb2x2ZU5vZGUgOiBwdWJsaWMgTm9kZSB7CisgICAgY2xh
c3MgUHJlUG9zdFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGlj
OgogICAgIFByZVBvc3RSZXNvbHZlTm9kZShjb25zdCBJZGVudGlmaWVyJiBpKSBLSlNfRkFTVF9D
QUxMIDogbV9pZGVudChpKSB7fQogICAgICAgCiAgICAgUHJlUG9zdFJlc29sdmVOb2RlKFBsYWNl
bWVudE5ld0Fkb3B0VHlwZSkgS0pTX0ZBU1RfQ0FMTCAKLSAgICAgICAgOiBOb2RlKFBsYWNlbWVu
dE5ld0Fkb3B0KQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKFBsYWNlbWVudE5ld0Fkb3B0KQog
ICAgICAgICAsIG1faWRlbnQoUGxhY2VtZW50TmV3QWRvcHQpCiAgICAgewogICAgIH0KQEAgLTU3
MCw3ICs1ODQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFj
a3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUG9zdGZpeDsgfQogICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVzdWx0KCk7CkBAIC01ODYsNyArNjAwLDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIG1faW5kZXggPSBpOwogICAgIH0KIAotICAgIEpTVmFsdWUq
IGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVzdWx0KCk7CiAgIH07CiAKQEAgLTYwMCw3ICs2MTQsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IHJldHVybiBQcmVjUG9zdGZpeDsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZUZv
clVubmVjZXNzYXJ5UmVzdWx0KCk7CkBAIC02MTUsODggKzYyOSw4OCBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgbV9pbmRleCA9IGk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplRm9y
VW5uZWNlc3NhcnlSZXN1bHQoKTsKICAgfTsKIAotICBjbGFzcyBQb3N0Zml4QnJhY2tldE5vZGUg
OiBwdWJsaWMgTm9kZSB7CisgICAgY2xhc3MgUG9zdGZpeEJyYWNrZXROb2RlIDogcHVibGljIEV4
cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIFBvc3RmaXhCcmFja2V0Tm9kZShOb2RlICpi
LCBOb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogbV9iYXNlKGIpLCBtX3N1YnNjcmlwdChzKSB7fQor
ICAgIFBvc3RmaXhCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9kZSogYiwgRXhwcmVzc2lvbk5vZGUq
IHMpIEtKU19GQVNUX0NBTEwgOiBtX2Jhc2UoYiksIG1fc3Vic2NyaXB0KHMpIHt9CiAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xh
cmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1Bvc3RmaXg7IH0K
ICAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBpc0luY3JlbWVudCgpIGNvbnN0ID0gMDsK
LSAgICBSZWZQdHI8Tm9kZT4gbV9iYXNlOwotICAgIFJlZlB0cjxOb2RlPiBtX3N1YnNjcmlwdDsK
KyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fYmFzZTsKKyAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IG1fc3Vic2NyaXB0OwogICB9OwogCiAgIGNsYXNzIFBvc3RJbmNCcmFja2V0Tm9kZSA6
IHB1YmxpYyBQb3N0Zml4QnJhY2tldE5vZGUgewogICBwdWJsaWM6Ci0gICAgUG9zdEluY0JyYWNr
ZXROb2RlKE5vZGUgKmIsIE5vZGUgKnMpIEtKU19GQVNUX0NBTEwgOiBQb3N0Zml4QnJhY2tldE5v
ZGUoYiwgcykge30KLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOworICAgIFBvc3RJbmNCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9kZSogYiwgRXhwcmVzc2lv
bk5vZGUqIHMpIEtKU19GQVNUX0NBTEwgOiBQb3N0Zml4QnJhY2tldE5vZGUoYiwgcykge30KKyAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaXNJbmNyZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAgIH07CiAKICAgY2xhc3MgUG9zdERlY0JyYWNrZXROb2RlIDogcHVibGljIFBv
c3RmaXhCcmFja2V0Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBQb3N0RGVjQnJhY2tldE5vZGUoTm9k
ZSAqYiwgTm9kZSAqcykgS0pTX0ZBU1RfQ0FMTCA6IFBvc3RmaXhCcmFja2V0Tm9kZShiLCBzKSB7
fQotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAg
UG9zdERlY0JyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiBiLCBFeHByZXNzaW9uTm9kZSogcykg
S0pTX0ZBU1RfQ0FMTCA6IFBvc3RmaXhCcmFja2V0Tm9kZShiLCBzKSB7fQorICAgIHZpcnR1YWwg
SlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgYm9vbCBpc0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgIH07CiAKLSAgY2xhc3MgUG9zdGZpeERvdE5vZGUgOiBwdWJsaWMgTm9kZSB7CisgICAgY2xh
c3MgUG9zdGZpeERvdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0g
ICAgUG9zdGZpeERvdE5vZGUoTm9kZSAqYiwgY29uc3QgSWRlbnRpZmllciYgaSkgS0pTX0ZBU1Rf
Q0FMTCA6IG1fYmFzZShiKSwgbV9pZGVudChpKSB7fQorICAgIFBvc3RmaXhEb3ROb2RlKEV4cHJl
c3Npb25Ob2RlKiBiLCBjb25zdCBJZGVudGlmaWVyJiBpKSBLSlNfRkFTVF9DQUxMIDogbV9iYXNl
KGIpLCBtX2lkZW50KGkpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY1Bvc3RmaXg7IH0KICAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9v
bCBpc0luY3JlbWVudCgpIGNvbnN0ID0gMDsKLSAgICBSZWZQdHI8Tm9kZT4gbV9iYXNlOworICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgIElkZW50aWZpZXIgbV9pZGVudDsK
ICAgfTsKIAogICBjbGFzcyBQb3N0SW5jRG90Tm9kZSA6IHB1YmxpYyBQb3N0Zml4RG90Tm9kZSB7
CiAgIHB1YmxpYzoKLSAgICBQb3N0SW5jRG90Tm9kZShOb2RlICpiLCBjb25zdCBJZGVudGlmaWVy
JiBpKSBLSlNfRkFTVF9DQUxMIDogUG9zdGZpeERvdE5vZGUoYiwgaSkge30KLSAgICBKU1ZhbHVl
KiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIFBvc3RJbmNEb3ROb2Rl
KEV4cHJlc3Npb25Ob2RlKiAgYiwgY29uc3QgSWRlbnRpZmllciYgaSkgS0pTX0ZBU1RfQ0FMTCA6
IFBvc3RmaXhEb3ROb2RlKGIsIGkpIHt9CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29s
IGlzSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICB9OwogCiAgIGNsYXNzIFBv
c3REZWNEb3ROb2RlIDogcHVibGljIFBvc3RmaXhEb3ROb2RlIHsKICAgcHVibGljOgotICAgIFBv
c3REZWNEb3ROb2RlKE5vZGUgKmIsIGNvbnN0IElkZW50aWZpZXImIGkpIEtKU19GQVNUX0NBTEwg
OiBQb3N0Zml4RG90Tm9kZShiLCBpKSB7fQotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CisgICAgUG9zdERlY0RvdE5vZGUoRXhwcmVzc2lvbk5vZGUqICBi
LCBjb25zdCBJZGVudGlmaWVyJiBpKSBLSlNfRkFTVF9DQUxMIDogUG9zdGZpeERvdE5vZGUoYiwg
aSkge30KKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaXNJbmNyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICB9OwogCi0gIGNsYXNzIFBvc3RmaXhFcnJvck5vZGUgOiBw
dWJsaWMgTm9kZSB7CisgIGNsYXNzIFBvc3RmaXhFcnJvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUgewogICBwdWJsaWM6Ci0gICAgUG9zdGZpeEVycm9yTm9kZShOb2RlKiBlLCBPcGVyYXRv
ciBvKSBLSlNfRkFTVF9DQUxMIDogbV9leHByKGUpLCBtX29wZXIobykge30KLSAgICBKU1ZhbHVl
KiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIFBvc3RmaXhFcnJvck5v
ZGUoRXhwcmVzc2lvbk5vZGUqIGUsIE9wZXJhdG9yIG8pIEtKU19GQVNUX0NBTEwgOiBtX2V4cHIo
ZSksIG1fb3BlcihvKSB7fQorICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRy
PE5vZGU+IG1fZXhwcjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjsKICAgICBP
cGVyYXRvciBtX29wZXI7CiAgIH07CiAKLSAgY2xhc3MgRGVsZXRlUmVzb2x2ZU5vZGUgOiBwdWJs
aWMgTm9kZSB7CisgIGNsYXNzIERlbGV0ZVJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlIHsKICAgcHVibGljOgogICAgIERlbGV0ZVJlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXIm
IGkpIEtKU19GQVNUX0NBTEwgOiBtX2lkZW50KGkpIHt9CiAgICAgRGVsZXRlUmVzb2x2ZU5vZGUo
UGxhY2VtZW50TmV3QWRvcHRUeXBlKSBLSlNfRkFTVF9DQUxMIAotICAgICAgICA6IE5vZGUoUGxh
Y2VtZW50TmV3QWRvcHQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoUGxhY2VtZW50TmV3QWRv
cHQpCiAgICAgICAgICwgbV9pZGVudChQbGFjZW1lbnROZXdBZG9wdCkKICAgICB7CiAgICAgfQog
CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9k
ZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgIEpT
VmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9
CiAgIHByaXZhdGU6CkBAIC03MTAsNTYgKzcyNCw1NiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB7
CiAgICAgfQogCi0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CiAgIH07CiAKLSAgY2xhc3MgRGVsZXRlQnJhY2tldE5vZGUgOiBwdWJsaWMgTm9kZSB7Cisg
IGNsYXNzIERlbGV0ZUJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVi
bGljOgotICAgIERlbGV0ZUJyYWNrZXROb2RlKE5vZGUgKmJhc2UsIE5vZGUgKnN1YnNjcmlwdCkg
S0pTX0ZBU1RfQ0FMTCA6IG1fYmFzZShiYXNlKSwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0KSB7fQor
ICAgIERlbGV0ZUJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9k
ZSogc3Vic2NyaXB0KSBLSlNfRkFTVF9DQUxMIDogbV9iYXNlKGJhc2UpLCBtX3N1YnNjcmlwdChz
dWJzY3JpcHQpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMOwotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY1VuYXJ5OyB9CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IG1fYmFzZTsKLSAgICBS
ZWZQdHI8Tm9kZT4gbV9zdWJzY3JpcHQ7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jh
c2U7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3N1YnNjcmlwdDsKICAgfTsKIAotICBj
bGFzcyBEZWxldGVEb3ROb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBEZWxldGVEb3ROb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIERlbGV0ZURvdE5vZGUo
Tm9kZSAqYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaSkgS0pTX0ZBU1RfQ0FMTCA6IG1fYmFzZShi
YXNlKSwgbV9pZGVudChpKSB7fQorICAgIERlbGV0ZURvdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGJh
c2UsIGNvbnN0IElkZW50aWZpZXImIGkpIEtKU19GQVNUX0NBTEwgOiBtX2Jhc2UoYmFzZSksIG1f
aWRlbnQoaSkge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5j
dGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQ
cmVjVW5hcnk7IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9iYXNlOworICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAg
fTsKIAotICBjbGFzcyBEZWxldGVWYWx1ZU5vZGUgOiBwdWJsaWMgTm9kZSB7CisgIGNsYXNzIERl
bGV0ZVZhbHVlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBE
ZWxldGVWYWx1ZU5vZGUoTm9kZSAqZSkgS0pTX0ZBU1RfQ0FMTCA6IG1fZXhwcihlKSB7fQorICAg
IERlbGV0ZVZhbHVlTm9kZShFeHByZXNzaW9uTm9kZSogZSkgS0pTX0ZBU1RfQ0FMTCA6IG1fZXhw
cihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9u
Qm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNV
bmFyeTsgfQogICBwcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBtX2V4cHI7CisgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgIH07CiAKLSAgY2xhc3MgVm9pZE5vZGUgOiBwdWJs
aWMgTm9kZSB7CisgIGNsYXNzIFZvaWROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAg
cHVibGljOgotICAgIFZvaWROb2RlKE5vZGUgKmUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpIHt9
CisgICAgVm9pZE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUp
IHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAg
IEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5
OyB9CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHI7CisgICAgUmVmUHRyPEV4cHJl
c3Npb25Ob2RlPiBleHByOwogICB9OwogCi0gIGNsYXNzIFR5cGVPZlJlc29sdmVOb2RlIDogcHVi
bGljIE5vZGUgeworICBjbGFzcyBUeXBlT2ZSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSB7CiAgIHB1YmxpYzoKICAgICBUeXBlT2ZSZXNvbHZlTm9kZShjb25zdCBJZGVudGlmaWVy
ICZzKSBLSlNfRkFTVF9DQUxMIAogICAgICAgICA6IG1faWRlbnQocykgCkBAIC03NjcsMTQgKzc4
MSwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB9CiAgICAgCiAgICAgVHlwZU9mUmVzb2x2ZU5v
ZGUoUGxhY2VtZW50TmV3QWRvcHRUeXBlKSBLSlNfRkFTVF9DQUxMIAotICAgICAgICA6IE5vZGUo
UGxhY2VtZW50TmV3QWRvcHQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoUGxhY2VtZW50TmV3
QWRvcHQpCiAgICAgICAgICwgbV9pZGVudChQbGFjZW1lbnROZXdBZG9wdCkgCiAgICAgewogICAg
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNVbmFyeTsgfQogCkBAIC03OTQsMTggKzgwOCwxOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgbV9pbmRleCA9IGk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgIH07CiAKLSAgY2xhc3MgVHlwZU9mVmFsdWVOb2RlIDogcHVi
bGljIE5vZGUgeworICBjbGFzcyBUeXBlT2ZWYWx1ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5v
ZGUgewogICBwdWJsaWM6Ci0gICAgVHlwZU9mVmFsdWVOb2RlKE5vZGUgKmUpIEtKU19GQVNUX0NB
TEwgOiBtX2V4cHIoZSkge30KKyAgICBUeXBlT2ZWYWx1ZU5vZGUoRXhwcmVzc2lvbk5vZGUqIGUp
IEtKU19GQVNUX0NBTEwgOiBtX2V4cHIoZSkge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9k
ZT4gbV9leHByOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICB9OwogCiAg
IGNsYXNzIFByZUluY1Jlc29sdmVOb2RlIDogcHVibGljIFByZVBvc3RSZXNvbHZlTm9kZSB7CkBA
IC04MjIsNyArODM2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgCiAgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogCi0gICAgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KICAgfTsKQEAgLTgzNiw3
ICs4NTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgbV9pbmRleCA9IGk7CiAgICAgfQog
ICAgIAotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICB9OwogICAKICAgY2xhc3MgUHJlRGVjUmVzb2x2ZU5vZGUgOiBwdWJsaWMgUHJlUG9zdFJlc29s
dmVOb2RlIHsKQEAgLTg1Myw3ICs4NjcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAKLSAgICBKU1ZhbHVl
KiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1
ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogICB9
OwpAQCAtODY3LDEyNSArODgxLDEyNSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgbV9pbmRl
eCA9IGk7CiAgICAgfQogICAgIAotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICB9OwogICAKLSAgY2xhc3MgUHJlZml4QnJhY2tldE5vZGUgOiBwdWJs
aWMgTm9kZSB7CisgIGNsYXNzIFByZWZpeEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlIHsKICAgcHVibGljOgotICAgIFByZWZpeEJyYWNrZXROb2RlKE5vZGUgKmIsIE5vZGUgKnMp
IEtKU19GQVNUX0NBTEwgOiBtX2Jhc2UoYiksIG1fc3Vic2NyaXB0KHMpIHt9CisgICAgUHJlZml4
QnJhY2tldE5vZGUoRXhwcmVzc2lvbk5vZGUqIGIsIEV4cHJlc3Npb25Ob2RlKiBzKSBLSlNfRkFT
VF9DQUxMIDogbV9iYXNlKGIpLCBtX3N1YnNjcmlwdChzKSB7fQogICAgIAogICAgIHZpcnR1YWwg
dm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogICBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIGlzSW5jcmVtZW50KCkgY29uc3QgPSAwOwotICAgIFJl
ZlB0cjxOb2RlPiBtX2Jhc2U7Ci0gICAgUmVmUHRyPE5vZGU+IG1fc3Vic2NyaXB0OworICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bV9zdWJzY3JpcHQ7CiAgIH07CiAgIAogICBjbGFzcyBQcmVJbmNCcmFja2V0Tm9kZSA6IHB1Ymxp
YyBQcmVmaXhCcmFja2V0Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBQcmVJbmNCcmFja2V0Tm9kZShO
b2RlICpiLCBOb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogUHJlZml4QnJhY2tldE5vZGUoYiwgcykg
e30KLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAg
IFByZUluY0JyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiAgYiwgRXhwcmVzc2lvbk5vZGUqICBz
KSBLSlNfRkFTVF9DQUxMIDogUHJlZml4QnJhY2tldE5vZGUoYiwgcykge30KKyAgICB2aXJ0dWFs
IEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgIHByb3RlY3Rl
ZDoKICAgICBib29sIGlzSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICB9Owog
ICAKICAgY2xhc3MgUHJlRGVjQnJhY2tldE5vZGUgOiBwdWJsaWMgUHJlZml4QnJhY2tldE5vZGUg
ewogICBwdWJsaWM6Ci0gICAgUHJlRGVjQnJhY2tldE5vZGUoTm9kZSAqYiwgTm9kZSAqcykgS0pT
X0ZBU1RfQ0FMTCA6IFByZWZpeEJyYWNrZXROb2RlKGIsIHMpIHt9Ci0gICAgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICBQcmVEZWNCcmFja2V0Tm9kZShF
eHByZXNzaW9uTm9kZSogIGIsIEV4cHJlc3Npb25Ob2RlKiAgcykgS0pTX0ZBU1RfQ0FMTCA6IFBy
ZWZpeEJyYWNrZXROb2RlKGIsIHMpIHt9CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBpc0luY3Jl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgIH07CiAKLSAgY2xhc3MgUHJlZml4RG90
Tm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgUHJlZml4RG90Tm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBQcmVmaXhEb3ROb2RlKE5vZGUgKmIsIGNvbnN0
IElkZW50aWZpZXImIGkpIEtKU19GQVNUX0NBTEwgOiBtX2Jhc2UoYiksIG1faWRlbnQoaSkge30K
KyAgICBQcmVmaXhEb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBiLCBjb25zdCBJZGVudGlmaWVyJiBp
KSBLSlNfRkFTVF9DQUxMIDogbV9iYXNlKGIpLCBtX2lkZW50KGkpIHt9CiAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9u
U3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1Bvc3RmaXg7IH0KICAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBpc0luY3JlbWVudCgpIGNvbnN0ID0gMDsKLSAgICBS
ZWZQdHI8Tm9kZT4gbV9iYXNlOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwog
ICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgfTsKIAogICBjbGFzcyBQcmVJbmNEb3ROb2RlIDog
cHVibGljIFByZWZpeERvdE5vZGUgewogICBwdWJsaWM6Ci0gICAgUHJlSW5jRG90Tm9kZShOb2Rl
ICpiLCBjb25zdCBJZGVudGlmaWVyJiBpKSBLSlNfRkFTVF9DQUxMIDogUHJlZml4RG90Tm9kZShi
LCBpKSB7fQotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CisgICAgUHJlSW5jRG90Tm9kZShFeHByZXNzaW9uTm9kZSogYiwgY29uc3QgSWRlbnRpZmllciYg
aSkgS0pTX0ZBU1RfQ0FMTCA6IFByZWZpeERvdE5vZGUoYiwgaSkge30KKyAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIGJvb2wgaXNJbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAg
IH07CiAKICAgY2xhc3MgUHJlRGVjRG90Tm9kZSA6IHB1YmxpYyBQcmVmaXhEb3ROb2RlIHsKICAg
cHVibGljOgotICAgIFByZURlY0RvdE5vZGUoTm9kZSAqYiwgY29uc3QgSWRlbnRpZmllciYgaSkg
S0pTX0ZBU1RfQ0FMTCA6IFByZWZpeERvdE5vZGUoYiwgaSkge30KLSAgICBKU1ZhbHVlKiBldmFs
dWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIFByZURlY0RvdE5vZGUoRXhwcmVz
c2lvbk5vZGUqIGIsIGNvbnN0IElkZW50aWZpZXImIGkpIEtKU19GQVNUX0NBTEwgOiBQcmVmaXhE
b3ROb2RlKGIsIGkpIHt9CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIGlzSW5jcmVt
ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgfTsKIAotICBjbGFzcyBQcmVmaXhFcnJv
ck5vZGUgOiBwdWJsaWMgTm9kZSB7CisgIGNsYXNzIFByZWZpeEVycm9yTm9kZSA6IHB1YmxpYyBF
eHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBQcmVmaXhFcnJvck5vZGUoTm9kZSogZSwg
T3BlcmF0b3IgbykgS0pTX0ZBU1RfQ0FMTCA6IG1fZXhwcihlKSwgbV9vcGVyKG8pIHt9Ci0gICAg
SlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICBQcmVmaXhF
cnJvck5vZGUoRXhwcmVzc2lvbk5vZGUqIGUsIE9wZXJhdG9yIG8pIEtKU19GQVNUX0NBTEwgOiBt
X2V4cHIoZSksIG1fb3BlcihvKSB7fQorICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogICBwcml2YXRlOgotICAgIFJl
ZlB0cjxOb2RlPiBtX2V4cHI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAg
ICAgT3BlcmF0b3IgbV9vcGVyOwogICB9OwogCi0gIGNsYXNzIFVuYXJ5UGx1c05vZGUgOiBwdWJs
aWMgTm9kZSB7CisgIGNsYXNzIFVuYXJ5UGx1c05vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUg
ewogICBwdWJsaWM6Ci0gICAgVW5hcnlQbHVzTm9kZShOb2RlICplKSBLSlNfRkFTVF9DQUxMIDog
ZXhwcihlKSB7fQorICAgIFVuYXJ5UGx1c05vZGUoRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNU
X0NBTEwgOiBleHByKGUpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY1VuYXJ5OyB9CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHI7Cisg
ICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwogICB9OwogCi0gIGNsYXNzIE5lZ2F0ZU5v
ZGUgOiBwdWJsaWMgTm9kZSB7CisgIGNsYXNzIE5lZ2F0ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUgewogICBwdWJsaWM6Ci0gICAgTmVnYXRlTm9kZShOb2RlICplKSBLSlNfRkFTVF9DQUxM
IDogZXhwcihlKSB7fQorICAgIE5lZ2F0ZU5vZGUoRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNU
X0NBTEwgOiBleHByKGUpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8
Tm9kZT4gZXhwcjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7CiAgIH07CiAKLSAg
Y2xhc3MgQml0d2lzZU5vdE5vZGUgOiBwdWJsaWMgTm9kZSB7CisgIGNsYXNzIEJpdHdpc2VOb3RO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIEJpdHdpc2VOb3RO
b2RlKE5vZGUgKmUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpIHt9CisgICAgQml0d2lzZU5vdE5v
ZGUoRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpIHt9CiAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xh
cmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAgIHByaXZh
dGU6Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBl
eHByOwogICB9OwogCi0gIGNsYXNzIExvZ2ljYWxOb3ROb2RlIDogcHVibGljIE5vZGUgeworICBj
bGFzcyBMb2dpY2FsTm90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoK
LSAgICBMb2dpY2FsTm90Tm9kZShOb2RlICplKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7fQor
ICAgIExvZ2ljYWxOb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogZXhw
cihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9u
Qm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNV
bmFyeTsgfQogICBwcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBleHByOworICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gZXhwcjsKICAgfTsKICAgCi0gIGNsYXNzIE11bHROb2RlIDogcHVibGlj
IE5vZGUgeworICBjbGFzcyBNdWx0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1
YmxpYzoKLSAgICAgIE11bHROb2RlKE5vZGUgKnQxLCBOb2RlICp0MikgS0pTX0ZBU1RfQ0FMTCA6
IHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CisgICAgICBNdWx0Tm9kZShFeHByZXNzaW9uTm9kZSog
IHQxLCBFeHByZXNzaW9uTm9kZSogIHQyKSBLSlNfRkFTVF9DQUxMIDogdGVybTEodDEpLCB0ZXJt
Mih0Mikge30KICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKQEAgLTk5MywxMyArMTAwNywxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY011
bHRpcGxpY2l0YXZlOyB9CiAgIHByaXZhdGU6CiAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBp
bmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopOwotICAgICAgUmVmUHRyPE5vZGU+IHRl
cm0xOwotICAgICAgUmVmUHRyPE5vZGU+IHRlcm0yOworICAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiB0ZXJtMTsKKyAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CiAgIH07CiAg
IAotICBjbGFzcyBEaXZOb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBEaXZOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgICAgRGl2Tm9kZShOb2RlICp0MSwg
Tm9kZSAqdDIpIEtKU19GQVNUX0NBTEwgOiB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQorICAgICAg
RGl2Tm9kZShFeHByZXNzaW9uTm9kZSogIHQxLCBFeHByZXNzaW9uTm9kZSogIHQyKSBLSlNfRkFT
VF9DQUxMIDogdGVybTEodDEpLCB0ZXJtMih0Mikge30KICAgICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKQEAgLTEwMDcsMTMgKzEwMjEs
MTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNdWx0aXBsaWNpdGF2ZTsgfQogICBwcml2YXRlOgogICAg
ICAgQUxXQVlTX0lOTElORSBkb3VibGUgaW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUq
KTsKLSAgICAgIFJlZlB0cjxOb2RlPiB0ZXJtMTsKLSAgICAgIFJlZlB0cjxOb2RlPiB0ZXJtMjsK
KyAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTE7CisgICAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IHRlcm0yOwogICB9OwogICAKLSAgY2xhc3MgTW9kTm9kZSA6IHB1YmxpYyBOb2Rl
IHsKKyAgY2xhc3MgTW9kTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoK
LSAgICAgIE1vZE5vZGUoTm9kZSAqdDEsIE5vZGUgKnQyKSBLSlNfRkFTVF9DQUxMIDogdGVybTEo
dDEpLCB0ZXJtMih0Mikge30KKyAgICAgIE1vZE5vZGUoRXhwcmVzc2lvbk5vZGUqICB0MSwgRXhw
cmVzc2lvbk5vZGUqICB0MikgS0pTX0ZBU1RfQ0FMTCA6IHRlcm0xKHQxKSwgdGVybTIodDIpIHt9
CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CkBAIC0xMDIxLDI2ICsxMDM1LDI2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTXVsdGlwbGlj
aXRhdmU7IH0KICAgcHJpdmF0ZToKICAgICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIGlubGluZUV2
YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKik7Ci0gICAgICBSZWZQdHI8Tm9kZT4gdGVybTE7Ci0g
ICAgICBSZWZQdHI8Tm9kZT4gdGVybTI7CisgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRl
cm0xOworICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMjsKICAgfTsKIAotICBjbGFz
cyBBZGROb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBBZGROb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIEFkZE5vZGUoTm9kZSAqdDEsIE5vZGUgKnQyKSBL
SlNfRkFTVF9DQUxMIDogdGVybTEodDEpLCB0ZXJtMih0Mikge30KKyAgICBBZGROb2RlKEV4cHJl
c3Npb25Ob2RlKiAgdDEsIEV4cHJlc3Npb25Ob2RlKiAgdDIpIEtKU19GQVNUX0NBTEwgOiB0ZXJt
MSh0MSksIHRlcm0yKHQyKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAgIHByaXZhdGU6Ci0gICAgUmVm
UHRyPE5vZGU+IHRlcm0xOwotICAgIFJlZlB0cjxOb2RlPiB0ZXJtMjsKKyAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IHRlcm0xOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CiAg
IH07CiAgIAotICBjbGFzcyBTdWJOb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBTdWJOb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgICAgU3ViTm9kZShOb2Rl
ICp0MSwgTm9kZSAqdDIpIEtKU19GQVNUX0NBTEwgOiB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQor
ICAgICAgU3ViTm9kZShFeHByZXNzaW9uTm9kZSogIHQxLCBFeHByZXNzaW9uTm9kZSogIHQyKSBL
SlNfRkFTVF9DQUxMIDogdGVybTEodDEpLCB0ZXJtMih0Mikge30KICAgICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgZG91Ymxl
IGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKQEAgLTEwNDgsMjY3
ICsxMDYyLDI2NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAgIHByaXZhdGU6CiAg
ICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0
ZSopOwotICAgICAgUmVmUHRyPE5vZGU+IHRlcm0xOwotICAgICAgUmVmUHRyPE5vZGU+IHRlcm0y
OworICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKKyAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gdGVybTI7CiAgIH07CiAKLSAgY2xhc3MgTGVmdFNoaWZ0Tm9kZSA6IHB1Ymxp
YyBOb2RlIHsKKyAgY2xhc3MgTGVmdFNoaWZ0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CiAgIHB1YmxpYzoKLSAgICBMZWZ0U2hpZnROb2RlKE5vZGUgKnQxLCBOb2RlICp0MikgS0pTX0ZB
U1RfQ0FMTAorICAgIExlZnRTaGlmdE5vZGUoRXhwcmVzc2lvbk5vZGUqICB0MSwgRXhwcmVzc2lv
bk5vZGUqICB0MikgS0pTX0ZBU1RfQ0FMTAogICAgICAgOiB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7
fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5v
ZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwg
SlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNTaGlmdDsg
fQogICBwcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiB0ZXJtMTsKLSAgICBSZWZQdHI8Tm9kZT4g
dGVybTI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKKyAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IHRlcm0yOwogICB9OwogCi0gIGNsYXNzIFJpZ2h0U2hpZnROb2RlIDogcHVi
bGljIE5vZGUgeworICBjbGFzcyBSaWdodFNoaWZ0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSB7CiAgIHB1YmxpYzoKLSAgICBSaWdodFNoaWZ0Tm9kZShOb2RlICp0MSwgTm9kZSAqdDIpIEtK
U19GQVNUX0NBTEwKKyAgICBSaWdodFNoaWZ0Tm9kZShFeHByZXNzaW9uTm9kZSogIHQxLCBFeHBy
ZXNzaW9uTm9kZSogIHQyKSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IHRlcm0xKHQxKSwgdGVybTIo
dDIpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwot
ICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1No
aWZ0OyB9CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IHRlcm0xOwotICAgIFJlZlB0cjxO
b2RlPiB0ZXJtMjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0xOworICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CiAgIH07CiAKLSAgY2xhc3MgVW5zaWduZWRSaWdodFNo
aWZ0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBVbnNpZ25lZFJpZ2h0U2hp
ZnROb2RlKE5vZGUgKnQxLCBOb2RlICp0MikgS0pTX0ZBU1RfQ0FMTAorICAgIFVuc2lnbmVkUmln
aHRTaGlmdE5vZGUoRXhwcmVzc2lvbk5vZGUqICB0MSwgRXhwcmVzc2lvbk5vZGUqICB0MikgS0pT
X0ZBU1RfQ0FMTAogICAgICAgOiB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQogICAgIHZpcnR1YWwg
dm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0
ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNTaGlmdDsgfQogICBwcml2YXRlOgot
ICAgIFJlZlB0cjxOb2RlPiB0ZXJtMTsKLSAgICBSZWZQdHI8Tm9kZT4gdGVybTI7CisgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRl
cm0yOwogICB9OwogCi0gIGNsYXNzIExlc3NOb2RlIDogcHVibGljIE5vZGUgeworICBjbGFzcyBM
ZXNzTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBMZXNzTm9k
ZShOb2RlICplMSwgTm9kZSAqZTIpIEtKU19GQVNUX0NBTEwgOgorICAgIExlc3NOb2RlKEV4cHJl
c3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMIDoKICAgICAg
IGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2sm
KSBLSlNfRkFTVF9DQUxMOwotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9k
ZT4gZXhwcjE7Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHIyOworICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gZXhwcjE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAot
ICBjbGFzcyBHcmVhdGVyTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgR3JlYXRlck5vZGUg
OiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgR3JlYXRlck5vZGUoTm9k
ZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxMIDoKKyAgICBHcmVhdGVyTm9kZShFeHByZXNz
aW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTCA6CiAgICAgICBl
eHByMShlMSksIGV4cHIyKGUyKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+
IGV4cHIxOwotICAgIFJlZlB0cjxOb2RlPiBleHByMjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IGV4cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKLSAg
Y2xhc3MgTGVzc0VxTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgTGVzc0VxTm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBMZXNzRXFOb2RlKE5vZGUgKmUx
LCBOb2RlICplMikgS0pTX0ZBU1RfQ0FMTCA6CisgICAgTGVzc0VxTm9kZShFeHByZXNzaW9uTm9k
ZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTCA6CiAgICAgICBleHByMShl
MSksIGV4cHIyKGUyKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHIx
OwotICAgIFJlZlB0cjxOb2RlPiBleHByMjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4
cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKLSAgY2xhc3Mg
R3JlYXRlckVxTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgR3JlYXRlckVxTm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBHcmVhdGVyRXFOb2RlKE5vZGUg
KmUxLCBOb2RlICplMikgS0pTX0ZBU1RfQ0FMTCA6CisgICAgR3JlYXRlckVxTm9kZShFeHByZXNz
aW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTCA6CiAgICAgICBl
eHByMShlMSksIGV4cHIyKGUyKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+
IGV4cHIxOwotICAgIFJlZlB0cjxOb2RlPiBleHByMjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IGV4cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKLSAg
Y2xhc3MgSW5zdGFuY2VPZk5vZGUgOiBwdWJsaWMgTm9kZSB7CisgICAgY2xhc3MgSW5zdGFuY2VP
Zk5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgSW5zdGFuY2VP
Zk5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxMIDoKKyAgICBJbnN0YW5jZU9m
Tm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FM
TCA6CiAgICAgICBleHByMShlMSksIGV4cHIyKGUyKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAgIHByaXZhdGU6Ci0gICAg
UmVmUHRyPE5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxOb2RlPiBleHByMjsKKyAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IGV4cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7
CiAgIH07CiAKLSAgY2xhc3MgSW5Ob2RlIDogcHVibGljIE5vZGUgeworICAgIGNsYXNzIEluTm9k
ZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBJbk5vZGUoTm9kZSAq
ZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxMIDoKKyAgICBJbk5vZGUoRXhwcmVzc2lvbk5vZGUq
IGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwgOgogICAgICAgZXhwcjEoZTEp
LCBleHByMihlMikge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
KyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjUmVsYXRpb25hbDsgfQogICBwcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBleHByMTsK
LSAgICBSZWZQdHI8Tm9kZT4gZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHBy
MTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOwogICB9OwogCi0gIGNsYXNzIEVx
dWFsTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBFcXVhbE5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgRXF1YWxOb2RlKE5vZGUgKmUxLCBOb2RlICpl
MikgS0pTX0ZBU1RfQ0FMTAorICAgIEVxdWFsTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJl
c3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTAogICAgICAgOiBleHByMShlMSksIGV4cHIyKGUy
KSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVh
bGl0eTsgfQogICBwcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBleHByMTsKLSAgICBSZWZQdHI8
Tm9kZT4gZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKKyAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOwogICB9OwogCi0gIGNsYXNzIE5vdEVxdWFsTm9kZSA6
IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBOb3RFcXVhbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUgewogICBwdWJsaWM6Ci0gICAgTm90RXF1YWxOb2RlKE5vZGUgKmUxLCBOb2RlICplMikg
S0pTX0ZBU1RfQ0FMTAorICAgIE5vdEVxdWFsTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJl
c3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTAogICAgICAgOiBleHByMShlMSksIGV4cHIyKGUy
KSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVh
bGl0eTsgfQogICBwcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBleHByMTsKLSAgICBSZWZQdHI8
Tm9kZT4gZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKKyAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOwogICB9OwogCi0gIGNsYXNzIFN0cmljdEVxdWFsTm9k
ZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBTdHJpY3RFcXVhbE5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgU3RyaWN0RXF1YWxOb2RlKE5vZGUgKmUxLCBO
b2RlICplMikgS0pTX0ZBU1RfQ0FMTAorICAgIFN0cmljdEVxdWFsTm9kZShFeHByZXNzaW9uTm9k
ZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTAogICAgICAgOiBleHByMShl
MSksIGV4cHIyKGUyKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIFByZWNFcXVhbGl0eTsgfQogICBwcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBleHByMTsK
LSAgICBSZWZQdHI8Tm9kZT4gZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHBy
MTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOwogICB9OwogCi0gIGNsYXNzIE5v
dFN0cmljdEVxdWFsTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBOb3RTdHJpY3RFcXVh
bE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgTm90U3RyaWN0
RXF1YWxOb2RlKE5vZGUgKmUxLCBOb2RlICplMikgS0pTX0ZBU1RfQ0FMTAorICAgIE5vdFN0cmlj
dEVxdWFsTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZB
U1RfQ0FMTAogICAgICAgOiBleHByMShlMSksIGV4cHIyKGUyKSB7fQogICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0eTsgfQogICBwcml2YXRlOgot
ICAgIFJlZlB0cjxOb2RlPiBleHByMTsKLSAgICBSZWZQdHI8Tm9kZT4gZXhwcjI7CisgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4
cHIyOwogICB9OwogCi0gIGNsYXNzIEJpdEFuZE5vZGUgOiBwdWJsaWMgTm9kZSB7CisgICAgY2xh
c3MgQml0QW5kTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBC
aXRBbmROb2RlKE5vZGUgKmUxLCBOb2RlICplMikgS0pTX0ZBU1RfQ0FMTCA6CisgICAgQml0QW5k
Tm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FM
TCA6CiAgICAgICBleHByMShlMSksIGV4cHIyKGUyKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNCaXR3aXNlQW5kOyB9CiAgIHByaXZhdGU6Ci0gICAg
UmVmUHRyPE5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxOb2RlPiBleHByMjsKKyAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IGV4cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7
CiAgIH07CiAKLSAgY2xhc3MgQml0T3JOb2RlIDogcHVibGljIE5vZGUgeworICAgIGNsYXNzIEJp
dE9yTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBCaXRPck5v
ZGUoTm9kZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxMIDoKKyAgICBCaXRPck5vZGUoRXhw
cmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwgOgogICAg
ICAgZXhwcjEoZTEpLCBleHByMihlMikge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IHJldHVybiBQcmVjQml0d2lzZU9yOyB9CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5v
ZGU+IGV4cHIxOwotICAgIFJlZlB0cjxOb2RlPiBleHByMjsKKyAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IGV4cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAK
LSAgY2xhc3MgQml0WE9yTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBCaXRYT3JOb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIEJpdFhPck5vZGUoTm9k
ZSAqZTEsIE5vZGUgKmUyKSBLSlNfRkFTVF9DQUxMIDoKKyAgICBCaXRYT3JOb2RlKEV4cHJlc3Np
b25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMIDoKICAgICAgIGV4
cHIxKGUxKSwgZXhwcjIoZTIpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMOwotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyByZXR1cm4gUHJlY0JpdHdpc2VYb3I7IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4g
ZXhwcjE7Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHIyOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gZXhwcjE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAogICAv
KioKICAgICogZXhwcjEgJiYgZXhwcjIsIGV4cHIxIHx8IGV4cHIyCiAgICAqLwotICBjbGFzcyBM
b2dpY2FsQW5kTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBMb2dpY2FsQW5kTm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBMb2dpY2FsQW5kTm9kZShO
b2RlICplMSwgTm9kZSAqZTIpIEtKU19GQVNUX0NBTEwgOgorICAgIExvZ2ljYWxBbmROb2RlKEV4
cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMIDoKICAg
ICAgIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOwotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0xvZ2ljYWxBbmQ7IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8
Tm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHIyOworICAgIFJlZlB0cjxFeHByZXNz
aW9uTm9kZT4gZXhwcjE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsK
ICAgCi0gIGNsYXNzIExvZ2ljYWxPck5vZGUgOiBwdWJsaWMgTm9kZSB7CisgICAgY2xhc3MgTG9n
aWNhbE9yTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBMb2dp
Y2FsT3JOb2RlKE5vZGUgKmUxLCBOb2RlICplMikgS0pTX0ZBU1RfQ0FMTCA6CisgICAgTG9naWNh
bE9yTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1Rf
Q0FMTCA6CiAgICAgICBleHByMShlMSksIGV4cHIyKGUyKSB7fQogICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNMb2dpY2FsT3I7IH0KICAgcHJpdmF0ZToKLSAg
ICBSZWZQdHI8Tm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHIyOworICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHBy
MjsKICAgfTsKIAogICAvKioKICAgICogVGhlIHRlcm5hcnkgb3BlcmF0b3IsICJsb2dpY2FsID8g
ZXhwcjEgOiBleHByMiIKICAgICovCi0gIGNsYXNzIENvbmRpdGlvbmFsTm9kZSA6IHB1YmxpYyBO
b2RlIHsKKyAgICBjbGFzcyBDb25kaXRpb25hbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUg
ewogICBwdWJsaWM6Ci0gICAgQ29uZGl0aW9uYWxOb2RlKE5vZGUgKmwsIE5vZGUgKmUxLCBOb2Rl
ICplMikgS0pTX0ZBU1RfQ0FMTCA6CisgICAgQ29uZGl0aW9uYWxOb2RlKEV4cHJlc3Npb25Ob2Rl
KiAgbCwgRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NB
TEwgOgogICAgICAgbG9naWNhbChsKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ29uZGl0aW9uYWw7IH0KICAg
cHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbG9naWNhbDsKLSAgICBSZWZQdHI8Tm9kZT4gZXhw
cjE7Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHIyOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bG9naWNhbDsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOworICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKLSAgY2xhc3MgUmVhZE1vZGlmeVJlc29sdmVO
b2RlIDogcHVibGljIE5vZGUgeworICAgIGNsYXNzIFJlYWRNb2RpZnlSZXNvbHZlTm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBSZWFkTW9kaWZ5UmVzb2x2ZU5v
ZGUoY29uc3QgSWRlbnRpZmllciAmaWRlbnQsIE9wZXJhdG9yIG9wZXIsIE5vZGUgKnJpZ2h0KSBL
SlNfRkFTVF9DQUxMCisgICAgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXIg
JmlkZW50LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogIHJpZ2h0KSBLSlNfRkFTVF9D
QUxMCiAgICAgICA6IG1faWRlbnQoaWRlbnQpCiAgICAgICAsIG1fb3BlcihvcGVyKQogICAgICAg
LCBtX3JpZ2h0KHJpZ2h0KSAKQEAgLTEzMTYsMjAgKzEzMzAsMjAgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICB9CiAKICAgICBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHRU
eXBlKSBLSlNfRkFTVF9DQUxMIAotICAgICAgOiBOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQorICAg
ICAgOiBFeHByZXNzaW9uTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKICAgICAgICwgbV9pZGVudChQ
bGFjZW1lbnROZXdBZG9wdCkgCiAgICAgICAsIG1fcmlnaHQoUGxhY2VtZW50TmV3QWRvcHQpIAog
ICAgIHsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
KyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjQXNzaWdubWVudDsgfQogICBwcm90ZWN0ZWQ6CiAgICAgSWRlbnRpZmllciBtX2lkZW50
OwogICAgIE9wZXJhdG9yIG1fb3BlcjsKLSAgICBSZWZQdHI8Tm9kZT4gbV9yaWdodDsKKyAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7CiAgICAgc2l6ZV90IG1faW5kZXg7IC8vIFVz
ZWQgYnkgUmVhZE1vZGlmeUxvY2FsVmFyTm9kZS4KICAgfTsKIApAQCAtMTM0MiwzMSArMTM1Niwz
MSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgbV9pbmRleCA9IGk7CiAgICAgfQogICAgIAot
ICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICB9Owog
Ci0gIGNsYXNzIEFzc2lnblJlc29sdmVOb2RlIDogcHVibGljIE5vZGUgeworICAgIGNsYXNzIEFz
c2lnblJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAg
ICBBc3NpZ25SZXNvbHZlTm9kZShjb25zdCBJZGVudGlmaWVyICZpZGVudCwgTm9kZSAqcmlnaHQp
IEtKU19GQVNUX0NBTEwKKyAgICAgQXNzaWduUmVzb2x2ZU5vZGUoY29uc3QgSWRlbnRpZmllciAm
aWRlbnQsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQpIEtKU19GQVNUX0NBTEwKICAgICAgIDogbV9p
ZGVudChpZGVudCkKICAgICAgICwgbV9yaWdodChyaWdodCkgCiAgICAgICB7CiAgICAgICB9CiAK
ICAgICBBc3NpZ25SZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdFR5cGUpIEtKU19GQVNUX0NB
TEwgCi0gICAgICA6IE5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCisgICAgICA6IEV4cHJlc3Npb25O
b2RlKFBsYWNlbWVudE5ld0Fkb3B0KQogICAgICAgLCBtX2lkZW50KFBsYWNlbWVudE5ld0Fkb3B0
KSAKICAgICAgICwgbV9yaWdodChQbGFjZW1lbnROZXdBZG9wdCkgCiAgICAgewogICAgIH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUq
LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1Zh
bHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNBc3NpZ25tZW50
OyB9CiAgIHByb3RlY3RlZDoKICAgICBJZGVudGlmaWVyIG1faWRlbnQ7Ci0gICAgUmVmUHRyPE5v
ZGU+IG1fcmlnaHQ7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3JpZ2h0OwogICAgIHNp
emVfdCBtX2luZGV4OyAvLyBVc2VkIGJ5IFJlYWRNb2RpZnlMb2NhbFZhck5vZGUuCiAgIH07CiAK
QEAgLTEzNzksMTA0ICsxMzkzLDEwNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgbV9pbmRl
eCA9IGk7CiAgICAgfQogICAgIAotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICB9OwogCi0gIGNsYXNzIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSA6IHB1
YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBSZWFkTW9kaWZ5QnJhY2tldE5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgUmVhZE1vZGlmeUJyYWNrZXROb2RlKE5vZGUg
KmJhc2UsIE5vZGUgKnN1YnNjcmlwdCwgT3BlcmF0b3Igb3BlciwgTm9kZSAqcmlnaHQpIEtKU19G
QVNUX0NBTEwKKyAgICBSZWFkTW9kaWZ5QnJhY2tldE5vZGUoRXhwcmVzc2lvbk5vZGUqICBiYXNl
LCBFeHByZXNzaW9uTm9kZSogIHN1YnNjcmlwdCwgT3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5v
ZGUqICByaWdodCkgS0pTX0ZBU1RfQ0FMTAogICAgICAgOiBtX2Jhc2UoYmFzZSksIG1fc3Vic2Ny
aXB0KHN1YnNjcmlwdCksIG1fb3BlcihvcGVyKSwgbV9yaWdodChyaWdodCkge30KICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQogICBw
cm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPE5vZGU+IG1fYmFzZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9z
dWJzY3JpcHQ7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7CisgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBtX3N1YnNjcmlwdDsKICAgICBPcGVyYXRvciBtX29wZXI7Ci0gICAg
UmVmUHRyPE5vZGU+IG1fcmlnaHQ7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3JpZ2h0
OwogICB9OwogCi0gIGNsYXNzIEFzc2lnbkJyYWNrZXROb2RlIDogcHVibGljIE5vZGUgeworICAg
IGNsYXNzIEFzc2lnbkJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVi
bGljOgotICAgIEFzc2lnbkJyYWNrZXROb2RlKE5vZGUgKmJhc2UsIE5vZGUgKnN1YnNjcmlwdCwg
Tm9kZSAqcmlnaHQpIEtKU19GQVNUX0NBTEwKKyAgICBBc3NpZ25CcmFja2V0Tm9kZShFeHByZXNz
aW9uTm9kZSogIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiAgc3Vic2NyaXB0LCBFeHByZXNzaW9uTm9k
ZSogIHJpZ2h0KSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IG1fYmFzZShiYXNlKSwgbV9zdWJzY3Jp
cHQoc3Vic2NyaXB0KSwgbV9yaWdodChyaWdodCkge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQogICBwcm90ZWN0ZWQ6Ci0gICAg
UmVmUHRyPE5vZGU+IG1fYmFzZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9zdWJzY3JpcHQ7Ci0gICAg
UmVmUHRyPE5vZGU+IG1fcmlnaHQ7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7
CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3N1YnNjcmlwdDsKKyAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IG1fcmlnaHQ7CiAgIH07CiAKLSAgY2xhc3MgQXNzaWduRG90Tm9kZSA6IHB1
YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBBc3NpZ25Eb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlIHsKICAgcHVibGljOgotICAgIEFzc2lnbkRvdE5vZGUoTm9kZSAqYmFzZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIE5vZGUgKnJpZ2h0KSBLSlNfRkFTVF9DQUxMCisgICAgQXNzaWduRG90
Tm9kZShFeHByZXNzaW9uTm9kZSogIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHBy
ZXNzaW9uTm9kZSogIHJpZ2h0KSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IG1fYmFzZShiYXNlKSwg
bV9pZGVudChpZGVudCksIG1fcmlnaHQocmlnaHQpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KICAgcHJvdGVjdGVkOgotICAg
IFJlZlB0cjxOb2RlPiBtX2Jhc2U7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7
CiAgICAgSWRlbnRpZmllciBtX2lkZW50OwotICAgIFJlZlB0cjxOb2RlPiBtX3JpZ2h0OworICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9yaWdodDsKICAgfTsKIAotICBjbGFzcyBSZWFkTW9k
aWZ5RG90Tm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBSZWFkTW9kaWZ5RG90Tm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBSZWFkTW9kaWZ5RG90Tm9k
ZShOb2RlICpiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgT3BlcmF0b3Igb3BlciwgTm9k
ZSAqcmlnaHQpIEtKU19GQVNUX0NBTEwKKyAgICBSZWFkTW9kaWZ5RG90Tm9kZShFeHByZXNzaW9u
Tm9kZSogIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBPcGVyYXRvciBvcGVyLCBFeHBy
ZXNzaW9uTm9kZSogIHJpZ2h0KSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IG1fYmFzZShiYXNlKSwg
bV9pZGVudChpZGVudCksIG1fb3BlcihvcGVyKSwgbV9yaWdodChyaWdodCkge30KICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQogICBw
cm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPE5vZGU+IG1fYmFzZTsKKyAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IG1fYmFzZTsKICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgT3BlcmF0b3IgbV9v
cGVyOwotICAgIFJlZlB0cjxOb2RlPiBtX3JpZ2h0OworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gbV9yaWdodDsKICAgfTsKIAotICBjbGFzcyBBc3NpZ25FcnJvck5vZGUgOiBwdWJsaWMgTm9k
ZSB7CisgICAgY2xhc3MgQXNzaWduRXJyb3JOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsK
ICAgcHVibGljOgotICAgIEFzc2lnbkVycm9yTm9kZShOb2RlKiBsZWZ0LCBPcGVyYXRvciBvcGVy
LCBOb2RlKiByaWdodCkgS0pTX0ZBU1RfQ0FMTAorICAgIEFzc2lnbkVycm9yTm9kZShFeHByZXNz
aW9uTm9kZSogbGVmdCwgT3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0KSBLSlNf
RkFTVF9DQUxMCiAgICAgICA6IG1fbGVmdChsZWZ0KSwgbV9vcGVyKG9wZXIpLCBtX3JpZ2h0KHJp
Z2h0KSB7fQotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1
cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KICAgcHJvdGVjdGVkOgotICAgIFJlZlB0cjxOb2RlPiBtX2xl
ZnQ7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2xlZnQ7CiAgICAgT3BlcmF0b3IgbV9v
cGVyOwotICAgIFJlZlB0cjxOb2RlPiBtX3JpZ2h0OworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gbV9yaWdodDsKICAgfTsKIAotICBjbGFzcyBDb21tYU5vZGUgOiBwdWJsaWMgTm9kZSB7Cisg
ICAgY2xhc3MgQ29tbWFOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgot
ICAgIENvbW1hTm9kZShOb2RlICplMSwgTm9kZSAqZTIpIEtKU19GQVNUX0NBTEwgOiBleHByMShl
MSksIGV4cHIyKGUyKSB7fQorICAgIENvbW1hTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJl
c3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CiAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1Zh
bHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0V4cHJlc3Npb247
IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPE5vZGU+
IGV4cHIyOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CisgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAotICBjbGFzcyBBc3NpZ25FeHByTm9kZSA6IHB1
YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBBc3NpZ25FeHByTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBBc3NpZ25FeHByTm9kZShOb2RlICplKSBLSlNfRkFTVF9D
QUxMIDogZXhwcihlKSB7fQorICAgIEFzc2lnbkV4cHJOb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBL
SlNfRkFTVF9DQUxMIDogZXhwcihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICBw
cml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBleHByOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gZXhwcjsKICAgfTsKIAotICBjbGFzcyBWYXJEZWNsTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAg
ICBjbGFzcyBWYXJEZWNsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoK
ICAgICBlbnVtIFR5cGUgeyBWYXJpYWJsZSwgQ29uc3RhbnQgfTsKICAgICBWYXJEZWNsTm9kZShj
b25zdCBJZGVudGlmaWVyICZpZCwgQXNzaWduRXhwck5vZGUgKmluLCBUeXBlIHQpIEtKU19GQVNU
X0NBTEw7CkBAIC0xNTI5LDU1ICsxNTQzLDU1IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNz
IEV4cHJTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6Ci0g
ICAgRXhwclN0YXRlbWVudE5vZGUoTm9kZSAqZSkgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkgeyB9
CisgICAgRXhwclN0YXRlbWVudE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNUX0NBTEwg
OiBleHByKGUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1
bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBL
SlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBleHByOworICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKICAgfTsKIAogICBjbGFzcyBJZk5vZGUgOiBwdWJs
aWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBJZk5vZGUoTm9kZSAqZSwgU3RhdGVt
ZW50Tm9kZSAqczEsIFN0YXRlbWVudE5vZGUgKnMyKSBLSlNfRkFTVF9DQUxMCisgICAgSWZOb2Rl
KEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnROb2RlICpzMSwgU3RhdGVtZW50Tm9kZSAqczIp
IEtKU19GQVNUX0NBTEwKICAgICAgIDogZXhwcihlKSwgc3RhdGVtZW50MShzMSksIHN0YXRlbWVu
dDIoczIpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gc3RhdGVtZW50MS0+bWF5SGF2ZURlY2xh
cmF0aW9ucygpIHx8IChzdGF0ZW1lbnQyICYmIHN0YXRlbWVudDItPm1heUhhdmVEZWNsYXJhdGlv
bnMoKSk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlv
bkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3Rh
Y2tzJikgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gZXhwcjsK
KyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7CiAgICAgUmVmUHRyPFN0YXRlbWVudE5v
ZGU+IHN0YXRlbWVudDE7CiAgICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IHN0YXRlbWVudDI7CiAg
IH07CiAKICAgY2xhc3MgRG9XaGlsZU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1
YmxpYzoKLSAgICBEb1doaWxlTm9kZShTdGF0ZW1lbnROb2RlICpzLCBOb2RlICplKSBLSlNfRkFT
VF9DQUxMIDogc3RhdGVtZW50KHMpLCBleHByKGUpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0g
dHJ1ZTsgfQorICAgIERvV2hpbGVOb2RlKFN0YXRlbWVudE5vZGUgKnMsIEV4cHJlc3Npb25Ob2Rl
KiBlKSBLSlNfRkFTVF9DQUxMIDogc3RhdGVtZW50KHMpLCBleHByKGUpIHsgbV9tYXlIYXZlRGVj
bGFyYXRpb25zID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVj
bGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIFJlZlB0cjxT
dGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHI7CisgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwogICB9OwogCiAgIGNsYXNzIFdoaWxlTm9kZSA6IHB1
YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgotICAgIFdoaWxlTm9kZShOb2RlICplLCBT
dGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSwgc3RhdGVtZW50KHMpIHsg
bV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQorICAgIFdoaWxlTm9kZShFeHByZXNzaW9u
Tm9kZSogZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSksIHN0YXRl
bWVudChzKSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25T
dGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBDb21wbGV0aW9u
IGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pTX0ZBU1RfQ0FMTDsKICAg
cHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gZXhwcjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IGV4cHI7CiAgICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKICAgfTsKIAog
ICBjbGFzcyBGb3JOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6Ci0gICAg
Rm9yTm9kZShOb2RlKiBlMSwgTm9kZSogZTIsIE5vZGUqIGUzLCBTdGF0ZW1lbnROb2RlKiBzKSBL
SlNfRkFTVF9DQUxMIDoKKyAgICBGb3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lv
bk5vZGUqIGUyLCBFeHByZXNzaW9uTm9kZSogZTMsIFN0YXRlbWVudE5vZGUqIHMpIEtKU19GQVNU
X0NBTEwgOgogICAgICAgZXhwcjEoZTEpLCBleHByMihlMiksIGV4cHIzKGUzKSwgc3RhdGVtZW50
KHMpCiAgICAgewogICAgICAgICBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyAKQEAgLTE1
OTAsMTYgKzE2MDQsMTYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNUX0NBTEw7CiAgIHBy
aXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxOb2RlPiBleHByMjsK
LSAgICBSZWZQdHI8Tm9kZT4gZXhwcjM7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHBy
MTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOworICAgIFJlZlB0cjxFeHByZXNz
aW9uTm9kZT4gZXhwcjM7CiAgICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKICAg
fTsKIAogICBjbGFzcyBGb3JJbk5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1Ymxp
YzoKLSAgICBGb3JJbk5vZGUoTm9kZSAqbCwgTm9kZSAqZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pT
X0ZBU1RfQ0FMTDsKLSAgICBGb3JJbk5vZGUoY29uc3QgSWRlbnRpZmllciAmaSwgQXNzaWduRXhw
ck5vZGUgKmluLCBOb2RlICplLCBTdGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMOworICAg
IEZvckluTm9kZShFeHByZXNzaW9uTm9kZSogIGwsIEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1l
bnROb2RlICpzKSBLSlNfRkFTVF9DQUxMOworICAgIEZvckluTm9kZShjb25zdCBJZGVudGlmaWVy
ICZpLCBBc3NpZ25FeHByTm9kZSAqaW4sIEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnROb2Rl
ICpzKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwpAQCAtMTYwNyw4ICsxNjIxLDggQEAgbmFtZXNwYWNlIEtKUyB7
CiAgIHByaXZhdGU6CiAgICAgSWRlbnRpZmllciBpZGVudDsKICAgICBSZWZQdHI8QXNzaWduRXhw
ck5vZGU+IGluaXQ7Ci0gICAgUmVmUHRyPE5vZGU+IGxleHByOwotICAgIFJlZlB0cjxOb2RlPiBl
eHByOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbGV4cHI7CisgICAgUmVmUHRyPEV4cHJl
c3Npb25Ob2RlPiBleHByOwogICAgIFJlZlB0cjxWYXJEZWNsTm9kZT4gdmFyRGVjbDsKICAgICBS
ZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50OwogICB9OwpAQCAtMTYzNSwyMyArMTY0OSwy
MyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBSZXR1cm5Ob2RlIDogcHVibGljIFN0YXRl
bWVudE5vZGUgewogICBwdWJsaWM6Ci0gICAgUmV0dXJuTm9kZShOb2RlICp2KSBLSlNfRkFTVF9D
QUxMIDogdmFsdWUodikge30KKyAgICBSZXR1cm5Ob2RlKEV4cHJlc3Npb25Ob2RlKiB2KSBLSlNf
RkFTVF9DQUxMIDogdmFsdWUodikge30KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYp
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gdmFs
dWU7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB2YWx1ZTsKICAgfTsKIAogICBjbGFzcyBX
aXRoTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgotICAgIFdpdGhOb2Rl
KE5vZGUgKmUsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpLCBzdGF0
ZW1lbnQocykgeyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CisgICAgV2l0aE5vZGUo
RXhwcmVzc2lvbk5vZGUqIGUsIFN0YXRlbWVudE5vZGUqIHMpIEtKU19GQVNUX0NBTEwgOiBleHBy
KGUpLCBzdGF0ZW1lbnQocykgeyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CiAgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERl
Y2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
Q29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNU
X0NBTEw7CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IGV4cHI7CisgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBleHByOwogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7
CiAgIH07CiAKQEAgLTE2NjksMTIgKzE2ODMsMTIgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xh
c3MgVGhyb3dOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6Ci0gICAgVGhy
b3dOb2RlKE5vZGUgKmUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpIHt9CisgICAgVGhyb3dOb2Rl
KEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7fQogICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIENvbXBs
ZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRl
OgotICAgIFJlZlB0cjxOb2RlPiBleHByOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhw
cjsKICAgfTsKIAogICBjbGFzcyBUcnlOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAt
MTY5MiwxMiArMTcwNiwxMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBSZWZQdHI8U3RhdGVtZW50
Tm9kZT4gZmluYWxseUJsb2NrOwogICB9OwogCi0gIGNsYXNzIFBhcmFtZXRlck5vZGUgOiBwdWJs
aWMgTm9kZSB7CisgICAgY2xhc3MgUGFyYW1ldGVyTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSB7CiAgIHB1YmxpYzoKICAgICBQYXJhbWV0ZXJOb2RlKGNvbnN0IElkZW50aWZpZXImIGkpIEtK
U19GQVNUX0NBTEwgOiBpZChpKSB7IH0KICAgICBQYXJhbWV0ZXJOb2RlKFBhcmFtZXRlck5vZGUq
IGwsIGNvbnN0IElkZW50aWZpZXImIGkpIEtKU19GQVNUX0NBTEwKICAgICAgIDogaWQoaSkgeyBs
LT5uZXh0ID0gdGhpczsgfQotICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgIElkZW50aWZpZXIgaWRlbnQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IGlkOyB9CiAgICAgUGFyYW1ldGVyTm9kZSAqbmV4dFBhcmFtKCkgS0pTX0ZBU1RfQ0FMTCB7IHJl
dHVybiBuZXh0LmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC0xNzUxLDcgKzE3NjUsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBTeW1ib2xUYWJsZSBtX3N5bWJvbFRhYmxlOwogICB9OwogCi0gIGNsYXNzIEZ1
bmNFeHByTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBGdW5jRXhwck5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6CiAgICAgRnVuY0V4cHJOb2RlKGNvbnN0IElk
ZW50aWZpZXImIGksIEZ1bmN0aW9uQm9keU5vZGUqIGIsIFBhcmFtZXRlck5vZGUqIHAgPSAwKSBL
SlNfRkFTVF9DQUxMIAogICAgICAgOiBpZGVudChpKSwgcGFyYW0ocCksIGJvZHkoYikgeyBhZGRQ
YXJhbXMoKTsgfQpAQCAtMTc4NCwyOSArMTc5OCwyOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBS
ZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keTsKICAgfTsKIAotICBjbGFzcyBDYXNlQ2xhdXNl
Tm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBDYXNlQ2xhdXNlTm9kZSA6IHB1YmxpYyBF
eHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICAgIENhc2VDbGF1c2VOb2RlKE5vZGUqIGUp
IEtKU19GQVNUX0NBTEwgOiBleHByKGUpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsg
fQotICAgICAgQ2FzZUNsYXVzZU5vZGUoTm9kZSogZSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVu
KSBLSlNfRkFTVF9DQUxMCisgICAgICBDYXNlQ2xhdXNlTm9kZShFeHByZXNzaW9uTm9kZSogZSkg
S0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkgeyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9
CisgICAgICBDYXNlQ2xhdXNlTm9kZShFeHByZXNzaW9uTm9kZSogZSwgU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuKSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IGV4cHIoZSksIG1fY2hpbGRyZW4oY2hp
bGRyZW4pIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9u
U3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIENvbXBsZXRpb24gZXZhbFN0
YXRlbWVudHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVh
bCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNUX0NBTEw7
CiAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICBwcml2YXRlOgotICAgICAg
UmVmUHRyPE5vZGU+IGV4cHI7CisgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7CiAg
ICAgICBPd25QdHI8U291cmNlRWxlbWVudHM+IG1fY2hpbGRyZW47CiAgIH07CiAgIAotICBjbGFz
cyBDbGF1c2VMaXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBDbGF1c2VMaXN0Tm9k
ZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKICAgICAgIENsYXVzZUxpc3RO
b2RlKENhc2VDbGF1c2VOb2RlKiBjKSBLSlNfRkFTVF9DQUxMIDogY2xhdXNlKGMpIHsgbV9tYXlI
YXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgICAgQ2xhdXNlTGlzdE5vZGUoQ2xhdXNlTGlz
dE5vZGUqIG4sIENhc2VDbGF1c2VOb2RlKiBjKSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IGNsYXVz
ZShjKSB7IG4tPm5leHQgPSB0aGlzOyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CiAg
ICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2Rl
KiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgQ2Fz
ZUNsYXVzZU5vZGUgKmdldENsYXVzZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gY2xh
dXNlLmdldCgpOyB9CiAgICAgICBDbGF1c2VMaXN0Tm9kZSAqZ2V0TmV4dCgpIGNvbnN0IEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gbmV4dC5nZXQoKTsgfQogICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC0xODE5LDExICsxODMz
LDExIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgTGlzdFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4g
bmV4dDsKICAgfTsKICAgCi0gIGNsYXNzIENhc2VCbG9ja05vZGUgOiBwdWJsaWMgTm9kZSB7Cisg
ICAgY2xhc3MgQ2FzZUJsb2NrTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1Ymxp
YzoKICAgICAgIENhc2VCbG9ja05vZGUoQ2xhdXNlTGlzdE5vZGUqIGwxLCBDYXNlQ2xhdXNlTm9k
ZSogZCwgQ2xhdXNlTGlzdE5vZGUqIGwyKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9u
U3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIENvbXBsZXRpb24gZXZhbEJs
b2NrKEV4ZWNTdGF0ZSAqZXhlYywgSlNWYWx1ZSAqaW5wdXQpIEtKU19GQVNUX0NBTEw7CiAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3Mm
KSBLSlNfRkFTVF9DQUxMOwpAQCAtMTgzNiwxMyArMTg1MCwxMyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgCiAgIGNsYXNzIFN3aXRjaE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1Ymxp
YzoKLSAgICAgIFN3aXRjaE5vZGUoTm9kZSAqZSwgQ2FzZUJsb2NrTm9kZSAqYikgS0pTX0ZBU1Rf
Q0FMTCA6IGV4cHIoZSksIGJsb2NrKGIpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsg
fQorICAgICAgU3dpdGNoTm9kZShFeHByZXNzaW9uTm9kZSogZSwgQ2FzZUJsb2NrTm9kZSAqYikg
S0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSksIGJsb2NrKGIpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25z
ID0gdHJ1ZTsgfQogICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMOwogICAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNs
YXJhdGlvblN0YWNrcyYpIEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6Ci0gICAgICBSZWZQdHI8
Tm9kZT4gZXhwcjsKKyAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKICAgICAgIFJl
ZlB0cjxDYXNlQmxvY2tOb2RlPiBibG9jazsKICAgfTsKICAgCg==
</data>
<flag name="review"
          id="7287"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>