<?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>15972</bug_id>
          
          <creation_ts>2007-11-13 14:51:45 -0800</creation_ts>
          <short_desc>Add BinaryOperatorNode class to clean up the Node tree</short_desc>
          <delta_ts>2008-01-13 14:53:50 -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>LATER</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>15973</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>61119</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-13 14:51:45 -0800</bug_when>
    <thetext>Add BinaryOperatorNode class to clean up the Node tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61120</commentid>
    <comment_count>1</comment_count>
      <attachid>17241</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-13 14:52:03 -0800</bug_when>
    <thetext>Created attachment 17241
cleanup patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61132</commentid>
    <comment_count>2</comment_count>
      <attachid>17241</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-11-13 16:42:58 -0800</bug_when>
    <thetext>Comment on attachment 17241
cleanup patch

operatorAsString should be KJS_FAST_CALL.

Looks good. r=me if the SunSpider gods do not disapprove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61138</commentid>
    <comment_count>3</comment_count>
      <attachid>17248</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-13 17:34:37 -0800</bug_when>
    <thetext>Created attachment 17248
improved patch, SunSpider reports wild results

SunSpider reports absolutely wild results from this:

TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           2.0% *slower*   4372.2ms +/- 0.2%   4460.8ms +/- 0.3%     significant

=============================================================================

  3d:                  1.4% *slower*    494.2ms +/- 0.3%    501.2ms +/- 1.0%     significant
    cube:              ??               166.4ms +/- 0.7%    168.2ms +/- 3.2%     not conclusive: might be 1.1% *slower*
    morph:             ??               160.0ms +/- 0.5%    160.4ms +/- 0.4%     not conclusive: might be 0.3% *slower*
    raytrace:          2.9% *slower*    167.8ms +/- 0.3%    172.6ms +/- 0.6%     significant

  access:              -                713.4ms +/- 0.2%    712.8ms +/- 0.5% 
    binary-trees:      1.3% *slower*    108.8ms +/- 0.5%    110.2ms +/- 0.9%     significant
    fannkuch:          1.0% faster      344.8ms +/- 0.2%    341.4ms +/- 0.6%     significant
    nbody:             ??               181.6ms +/- 0.4%    182.4ms +/- 0.4%     not conclusive: might be 0.4% *slower*
    nsieve:            ??                78.2ms +/- 0.7%     78.8ms +/- 0.7%     not conclusive: might be 0.8% *slower*

  bitops:              ??               618.0ms +/- 0.1%    618.8ms +/- 0.2%     not conclusive: might be 0.1% *slower*
    3bit-bits-in-byte: 1.9% *slower*    114.2ms +/- 0.9%    116.4ms +/- 0.6%     significant
    bits-in-byte:      0.7% *slower*    152.6ms +/- 0.4%    153.6ms +/- 0.4%     significant
    bitwise-and:       -                214.4ms +/- 0.3%    214.4ms +/- 0.3% 
    nsieve-bits:       1.8% faster      136.8ms +/- 0.4%    134.4ms +/- 0.5%     significant

  controlflow:         ??               154.6ms +/- 0.4%    155.2ms +/- 0.4%     not conclusive: might be 0.4% *slower*
    recursive:         ??               154.6ms +/- 0.4%    155.2ms +/- 0.4%     not conclusive: might be 0.4% *slower*

  crypto:              -                343.8ms +/- 0.7%    343.6ms +/- 0.2% 
    aes:               0.8% faster       97.8ms +/- 0.6%     97.0ms +/- 0.0%     significant
    md5:               0.5% *slower*    123.4ms +/- 0.6%    124.0ms +/- 0.0%     significant
    sha1:              -                122.6ms +/- 1.4%    122.6ms +/- 0.6% 

  date:                1.9% *slower*    364.2ms +/- 0.2%    371.0ms +/- 0.2%     significant
    format-tofte:      1.4% *slower*    160.8ms +/- 0.3%    163.0ms +/- 0.5%     significant
    format-xparb:      2.3% *slower*    203.4ms +/- 0.3%    208.0ms +/- 0.4%     significant

  math:                -                524.4ms +/- 0.4%    522.6ms +/- 0.6% 
    cordic:            1.0% faster      229.4ms +/- 0.5%    227.0ms +/- 1.4%     significant
    partial-sums:      -                173.0ms +/- 0.5%    173.0ms +/- 0.5% 
    spectral-norm:     ??               122.0ms +/- 0.7%    122.6ms +/- 0.6%     not conclusive: might be 0.5% *slower*

  regexp:              23.4% *slower*   295.4ms +/- 0.2%    364.4ms +/- 1.9%     significant
    dna:               23.4% *slower*   295.4ms +/- 0.2%    364.4ms +/- 1.9%     significant

  string:              0.8% *slower*    864.2ms +/- 0.3%    871.2ms +/- 0.3%     significant
    base64:            1.8% *slower*    120.0ms +/- 0.7%    122.2ms +/- 0.5%     significant
    fasta:             ??               205.6ms +/- 0.5%    206.4ms +/- 0.3%     not conclusive: might be 0.4% *slower*
    tagcloud:          1.0% *slower*    197.0ms +/- 0.4%    199.0ms +/- 0.4%     significant
    unpack-code:       1.8% *slower*    202.0ms +/- 0.4%    205.6ms +/- 0.5%     significant
    validate-input:    1.1% faster      139.6ms +/- 1.0%    138.0ms +/- 0.6%     significant</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61139</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-13 17:41:14 -0800</bug_when>
    <thetext>Looking at the time samples for --shark --tests dna, there is very very little difference.  Certainly nothing that could account for 23%.  I guess the next step is to try an cache-miss session and see if there is a difference there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61219</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-14 11:31:39 -0800</bug_when>
    <thetext>I added --shark-cache (bug 15983) to check for level 2 cache misses, and also didn&apos;t see a difference.  I&apos;m really sad about this mystery code-gen regression. :(  Especially since this kinda blocks other nice work like bug 15973.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61664</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-19 05:40:32 -0800</bug_when>
    <thetext>This mystery regression may not be there next time we try.  We&apos;ll just keep this patch around until we understand why it regresses. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65174</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-23 22:06:14 -0800</bug_when>
    <thetext>Huzzah!  I updated this patch to TOT, and now it&apos;s still showing slowness. but it&apos;s showing slowness in areas that it actually could have changed (like math-heavy tests).  Investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67160</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-13 14:53:50 -0800</bug_when>
    <thetext>I&apos;ve given up on this patch.  Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17241</attachid>
            <date>2007-11-13 14:52:03 -0800</date>
            <delta_ts>2007-11-19 05:37:09 -0800</delta_ts>
            <desc>cleanup patch</desc>
            <filename>bath.patch</filename>
            <type>text/plain</type>
            <size>57756</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwIGIv
SmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAppbmRleCA2MThlMzcwLi42ZWY1Y2ZkIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L2tqcy9ub2Rlcy5jcHAKQEAgLTI1MSw2ICsyNTEsMTIgQEAgdWludDMyX3QgRXhwcmVzc2lvbk5v
ZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiB2YWx1ZS0+
dG9VSW50MzIoZXhlYyk7CiB9CiAKK3ZvaWQgQmluYXJ5T3BlcmF0b3JOb2RlOjpvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJiBub2RlU3RhY2spCit7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsK
KyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOworfQorCiBzdGF0aWMgdm9pZCBz
dWJzdGl0dXRlKFVTdHJpbmcgJnN0cmluZywgY29uc3QgVVN0cmluZyAmc3Vic3RyaW5nKSBLSlNf
RkFTVF9DQUxMOwogc3RhdGljIHZvaWQgc3Vic3RpdHV0ZShVU3RyaW5nICZzdHJpbmcsIGNvbnN0
IFVTdHJpbmcgJnN1YnN0cmluZykKIHsKQEAgLTI3NCwxMiArMjgwLDEyIEBAIHN0YXRpYyBpbmxp
bmUgY29uc3QgVVN0cmluZyYgY3VycmVudFNvdXJjZVVSTChFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
cmV0dXJuIGV4ZWMtPmN1cnJlbnRCb2R5KCktPnNvdXJjZVVSTCgpOwogfQogCi1Db21wbGV0aW9u
IE5vZGU6OmNyZWF0ZUVycm9yQ29tcGxldGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBl
LCBjb25zdCBjaGFyICptc2cpCitDb21wbGV0aW9uIFN0YXRlbWVudE5vZGU6OmNyZWF0ZUVycm9y
Q29tcGxldGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyICptc2cp
CiB7CiAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIEVycm9yOjpjcmVhdGUoZXhlYywgZSwg
bXNnLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBjdXJyZW50U291cmNlVVJMKGV4
ZWMpKSk7CiB9CiAKLUNvbXBsZXRpb24gTm9kZTo6Y3JlYXRlRXJyb3JDb21wbGV0aW9uKEV4ZWNT
dGF0ZSAqZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgSWRlbnRpZmll
ciAmaWRlbnQpCitDb21wbGV0aW9uIFN0YXRlbWVudE5vZGU6OmNyZWF0ZUVycm9yQ29tcGxldGlv
bihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyICptc2csIGNvbnN0IElk
ZW50aWZpZXIgJmlkZW50KQogewogICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKICAgICBzdWJz
dGl0dXRlKG1lc3NhZ2UsIGlkZW50LnVzdHJpbmcoKSk7CkBAIC0yMDM5LDE4ICsyMDQ1LDEyIEBA
IGJvb2wgTG9naWNhbE5vdE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE11bHRpcGxpY2F0aXZlIE5vZGVz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgTXVsdE5vZGU6Om9w
dGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdl
dCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0yLmdldCgpKTsKLX0KLQogLy8gRUNNQSAx
MS41LjEKIGRvdWJsZSBNdWx0Tm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgZG91YmxlIG4xID0gdGVybTEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7
CisgICAgZG91YmxlIG4xID0gbV9leHByMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKICAgICBL
SlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICBkb3VibGUgbjIgPSB0ZXJtMi0+ZXZhbHVhdGVU
b051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbjIgPSBtX2V4cHIyLT5ldmFsdWF0ZVRvTnVtYmVy
KGV4ZWMpOwogICAgIHJldHVybiBuMSAqIG4yOwogfQogCkBAIC0yMDc5LDE4ICsyMDc5LDEyIEBA
IHVpbnQzMl90IE11bHROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7
CiB9CiAKLXZvaWQgRGl2Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5v
ZGVTdGFjay5hcHBlbmQodGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQodGVybTIu
Z2V0KCkpOwotfQotCiAvLyBFQ01BIDExLjUuMgogZG91YmxlIERpdk5vZGU6OmlubGluZUV2YWx1
YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGRvdWJsZSBuMSA9IHRlcm0xLT5l
dmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBuMSA9IG1fZXhwcjEtPmV2YWx1YXRl
VG9OdW1iZXIoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgZG91Ymxl
IG4yID0gdGVybTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIG4yID0gbV9l
eHByMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKICAgICByZXR1cm4gbjEgLyBuMjsKIH0KIApA
QCAtMjExNCwxOCArMjEwOCwxMiBAQCB1aW50MzJfdCBEaXZOb2RlOjpldmFsdWF0ZVRvVUludDMy
KEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZh
bHVhdGVUb051bWJlcihleGVjKSk7CiB9CiAKLXZvaWQgTW9kTm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYg
bm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQodGVybTEuZ2V0KCkpOwotICAgIG5v
ZGVTdGFjay5hcHBlbmQodGVybTIuZ2V0KCkpOwotfQotCiAvLyBFQ01BIDExLjUuMwogZG91Ymxl
IE1vZE5vZGU6OmlubGluZUV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IGRvdWJsZSBuMSA9IHRlcm0xLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBu
MSA9IG1fZXhwcjEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBU
SU9OTlVNQkVSCi0gICAgZG91YmxlIG4yID0gdGVybTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7
CisgICAgZG91YmxlIG4yID0gbV9leHByMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKICAgICBy
ZXR1cm4gZm1vZChuMSwgbjIpOwogfQogCkBAIC0yMjUxLDE5ICsyMjM5LDEzIEBAIHN0YXRpYyBp
bmxpbmUgZG91YmxlIGFkZFRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdjEsIEpT
VmFsdWUgKnYyKQogICAgIHJldHVybiBhZGRTbG93Q2FzZVRvTnVtYmVyKGV4ZWMsIHYxLCB2Mik7
CiB9CiAKLXZvaWQgQWRkTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5v
ZGVTdGFjay5hcHBlbmQodGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQodGVybTIu
Z2V0KCkpOwotfQotCiAvLyBFQ01BIDExLjYuMQogSlNWYWx1ZSogQWRkTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVlKiB2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVj
KTsKKyAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNL
RVhDRVBUSU9OVkFMVUUKIAotICBKU1ZhbHVlKiB2MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsK
KyAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKIAogICByZXR1cm4gYWRkKGV4ZWMsIHYxLCB2Mik7CkBAIC0yMjcxLDEwICsy
MjUzLDEwIEBAIEpTVmFsdWUqIEFkZE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIAog
ZG91YmxlIEFkZE5vZGU6OmlubGluZUV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIEpTVmFsdWUqIHYxID0gdGVybTEtPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUq
IHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVN
QkVSCiAgICAgCi0gICAgSlNWYWx1ZSogdjIgPSB0ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAg
SlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENF
UFRJT05OVU1CRVIKICAgICAKICAgICByZXR1cm4gYWRkVG9OdW1iZXIoZXhlYywgdjEsIHYyKTsK
QEAgLTIyOTcsOSArMjI3OSw5IEBAIHVpbnQzMl90IEFkZE5vZGU6OmV2YWx1YXRlVG9VSW50MzIo
RXhlY1N0YXRlKiBleGVjKQogCiBkb3VibGUgQWRkTnVtYmVyc05vZGU6OmlubGluZUV2YWx1YXRl
VG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGRvdWJsZSBuMSA9IHRlcm0xLT5ldmFs
dWF0ZVRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBuMSA9IG1fZXhwcjEtPmV2YWx1YXRlVG9O
dW1iZXIoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgZG91YmxlIG4y
ID0gdGVybTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIG4yID0gbV9leHBy
Mi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKICAgICByZXR1cm4gbjEgKyBuMjsKIH0KIApAQCAt
MjMyNSwxMCArMjMwNywxMCBAQCB1aW50MzJfdCBBZGROdW1iZXJzTm9kZTo6ZXZhbHVhdGVUb1VJ
bnQzMihFeGVjU3RhdGUqIGV4ZWMpCiAKIEpTVmFsdWUqIEFkZFN0cmluZ3NOb2RlOjpldmFsdWF0
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSB0ZXJtMS0+ZXZhbHVhdGUo
ZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIAotICAgIEpTVmFsdWUqIHYyID0gdGVybTItPmV2
YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7
CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgICAKICAgICByZXR1cm4ganNTdHJpbmco
c3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjEpLT52YWx1ZSgpICsgc3RhdGljX2Nhc3Q8U3RyaW5n
SW1wKj4odjIpLT52YWx1ZSgpKTsKQEAgLTIzMzYsMTAgKzIzMTgsMTAgQEAgSlNWYWx1ZSogQWRk
U3RyaW5nc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIAogSlNWYWx1ZSogQWRkU3Ry
aW5nTGVmdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2
MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2
YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgCi0gICAgSlNW
YWx1ZSogdjIgPSB0ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4
cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIAog
ICAgIEpTVmFsdWUqIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMsIFVuc3BlY2lmaWVkVHlwZSk7
CkBAIC0yMzQ4LDI4ICsyMzMwLDIyIEBAIEpTVmFsdWUqIEFkZFN0cmluZ0xlZnROb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAKIEpTVmFsdWUqIEFkZFN0cmluZ1JpZ2h0Tm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUqIHYxID0gdGVybTEtPmV2YWx1
YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgICAKLSAgICBKU1ZhbHVlKiB2MiA9IHRlcm0y
LT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4
ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgCiAgICAgSlNWYWx1ZSogcDEg
PSB2MS0+dG9QcmltaXRpdmUoZXhlYywgVW5zcGVjaWZpZWRUeXBlKTsKICAgICByZXR1cm4ganNT
dHJpbmcocDEtPnRvU3RyaW5nKGV4ZWMpICsgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIpLT52
YWx1ZSgpKTsKIH0KIAotdm9pZCBTdWJOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17
Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZCh0ZXJtMi5nZXQoKSk7Ci19Ci0KIC8vIEVDTUEgMTEuNi4yCiBkb3VibGUgU3ViTm9kZTo6aW5s
aW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG91YmxlIG4xID0g
dGVybTEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIG4xID0gbV9leHByMS0+
ZXZhbHVhdGVUb051bWJlcihleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAg
ICBkb3VibGUgbjIgPSB0ZXJtMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUg
bjIgPSBtX2V4cHIyLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBuMSAtIG4y
OwogfQogCkBAIC0yMzk1LDE4ICsyMzcxLDEyIEBAIHVpbnQzMl90IFN1Yk5vZGU6OmV2YWx1YXRl
VG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gU2hpZnQgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LXZvaWQgTGVmdFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5v
ZGVTdGFjay5hcHBlbmQodGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQodGVybTIu
Z2V0KCkpOwotfQotCiAvLyBFQ01BIDExLjcuMQogaW50MzJfdCBMZWZ0U2hpZnROb2RlOjppbmxp
bmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGludCBpMSA9IHRlcm0x
LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgaW50IGkxID0gbV9leHByMS0+ZXZhbHVhdGVU
b0ludDMyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHVuc2lnbmVk
IGludCBpMiA9IHRlcm0yLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKKyAgICB1bnNp
Z25lZCBpbnQgaTIgPSBtX2V4cHIyLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKICAg
ICByZXR1cm4gKGkxIDw8IGkyKTsKIH0KIApAQCAtMjQzMCwxOCArMjQwMCwxMiBAQCB1aW50MzJf
dCBMZWZ0U2hpZnROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKICAgICBy
ZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogfQogCi12b2lkIFJpZ2h0U2hpZnRO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0
ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMi5nZXQoKSk7Ci19Ci0KIC8v
IEVDTUEgMTEuNy4yCiBpbnQzMl90IFJpZ2h0U2hpZnROb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50
MzIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGludCBpMSA9IHRlcm0xLT5ldmFsdWF0ZVRvSW50
MzIoZXhlYyk7CisgICAgaW50IGkxID0gbV9leHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwog
ICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHVuc2lnbmVkIGludCBpMiA9IHRlcm0y
LT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKKyAgICB1bnNpZ25lZCBpbnQgaTIgPSBt
X2V4cHIyLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKICAgICByZXR1cm4gKGkxID4+
IGkyKTsKIH0KIApAQCAtMjQ2NSwxOCArMjQyOSwxMiBAQCB1aW50MzJfdCBSaWdodFNoaWZ0Tm9k
ZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlVG9JbnQzMihleGVjKTsKIH0KIAotdm9pZCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5n
ZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMi5nZXQoKSk7Ci19Ci0KIC8vIEVDTUEg
MTEuNy4zCiB1aW50MzJfdCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjppbmxpbmVFdmFsdWF0ZVRv
VUludDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICB1bnNpZ25lZCBpbnQgaTEgPSB0ZXJtMS0+
ZXZhbHVhdGVUb1VJbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCBpbnQgaTEgPSBtX2V4cHIxLT5l
dmFsdWF0ZVRvVUludDMyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAg
IHVuc2lnbmVkIGludCBpMiA9IHRlcm0yLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsK
KyAgICB1bnNpZ25lZCBpbnQgaTIgPSBtX2V4cHIyLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYg
MHgxZjsKICAgICByZXR1cm4gKGkxID4+IGkyKTsKIH0KIApAQCAtMjUzMiwxOCArMjQ5MCwxMiBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgbGVzc1RoYW5FcShFeGVjU3RhdGUgKmV4ZWMsIEpTVmFsdWUq
IHYxLCBKU1ZhbHVlKiB2MikKICAgICByZXR1cm4gIShzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmdJ
bXAqPihwMiktPnZhbHVlKCkgPCBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmdJbXAqPihwMSktPnZh
bHVlKCkpOwogfQogCi12b2lkIExlc3NOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17
Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChleHByMS5nZXQoKSk7Ci19Ci0KIC8vIEVDTUEgMTEuOC4xCiBib29sIExlc3NOb2RlOjppbmxp
bmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEg
PSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFs
dWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1ZSog
djIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5l
dmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCiAgICAgcmV0dXJu
IGxlc3NUaGFuKGV4ZWMsIHYxLCB2Mik7CiB9CkBAIC0yNTYwLDkgKzI1MTIsOSBAQCBib29sIExl
c3NOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiAKIGJvb2wgTGVzc051
bWJlcnNOb2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgZG91YmxlIG4xID0gZXhwcjEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CisgICAgZG91Ymxl
IG4xID0gbV9leHByMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQotICAgIGRvdWJsZSBuMiA9IGV4cHIyLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMp
OworICAgIGRvdWJsZSBuMiA9IG1fZXhwcjItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiAgICAg
cmV0dXJuIG4xIDwgbjI7CiB9CiAKQEAgLTI1NzgsOSArMjUzMCw5IEBAIGJvb2wgTGVzc051bWJl
cnNOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiAKIGJvb2wgTGVzc1N0
cmluZ3NOb2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgSlNWYWx1ZSogdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEg
PSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQot
ICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYy
ID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cmlu
Z0ltcCo+KHYxKS0+dmFsdWUoKSA8IHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+KHYyKS0+dmFsdWUo
KTsKIH0KIApAQCAtMjU5NCwxOCArMjU0NiwxMiBAQCBib29sIExlc3NTdHJpbmdzTm9kZTo6ZXZh
bHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBpbmxpbmVFdmFsdWF0
ZVRvQm9vbGVhbihleGVjKTsKIH0KIAotdm9pZCBHcmVhdGVyTm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYg
bm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOwotICAgIG5v
ZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOwotfQotCiAvLyBFQ01BIDExLjguMgogYm9vbCBH
cmVhdGVyTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKQogewot
ICAgIEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYx
ID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVB
TgotICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUq
IHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9P
TEVBTgogICAgIHJldHVybiBsZXNzVGhhbihleGVjLCB2MiwgdjEpOwogfQpAQCAtMjYyMCwxOCAr
MjU2NiwxMiBAQCBib29sIEdyZWF0ZXJOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUg
KmV4ZWMpCiAgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogfQogCi12
b2lkIExlc3NFcU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgp
KTsKLX0KLQogLy8gRUNNQSAxMS44LjMKIGJvb2wgTGVzc0VxTm9kZTo6aW5saW5lRXZhbHVhdGVU
b0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2
YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7
CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gZXhwcjIt
PmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhl
Yyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgogICAgIHJldHVybiBsZXNzVGhhbkVx
KGV4ZWMsIHYxLCB2Mik7CiB9CkBAIC0yNjQ2LDE4ICsyNTg2LDEyIEBAIGJvb2wgTGVzc0VxTm9k
ZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBpbmxpbmVF
dmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKIH0KIAotdm9pZCBHcmVhdGVyRXFOb2RlOjpvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7
Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7Ci19Ci0KIC8vIEVDTUEgMTEuOC40
CiBib29sIEdyZWF0ZXJFcU5vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBK
U1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQ
VElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAg
ICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VY
Q0VQVElPTkJPT0xFQU4KICAgICByZXR1cm4gbGVzc1RoYW5FcShleGVjLCB2MiwgdjEpOwogfQpA
QCAtMjY3MiwyMiArMjYwNiwxNiBAQCBib29sIEdyZWF0ZXJFcU5vZGU6OmV2YWx1YXRlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4o
ZXhlYyk7CiB9CiAKLXZvaWQgSW5zdGFuY2VPZk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKGV4cHIxLmdldCgpKTsKLX0KLQogLy8gRUNNQSAxMS44LjYKIEpTVmFsdWUqIEluc3Rh
bmNlT2ZOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEg
PSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFs
dWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHYy
ID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZh
bHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKIAogICAgIGlmICghdjIt
PmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwg
IlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGFuIG9iamVjdC4gQ2Fu
bm90IGJlIHVzZWQgd2l0aCBpbnN0YW5jZW9mIG9wZXJhdG9yLiIsIHYyLCBleHByMi5nZXQoKSk7
CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChy
ZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGFuIG9iamVjdC4gQ2Fubm90IGJlIHVzZWQg
d2l0aCBpbnN0YW5jZW9mIG9wZXJhdG9yLiIsIHYyLCBtX2V4cHIyLmdldCgpKTsKIAogICAgIEpT
T2JqZWN0KiBvMiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odjIpOwogCkBAIC0yNzAzLDEzICsy
NjMxLDEzIEBAIEpTVmFsdWUqIEluc3RhbmNlT2ZOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4
ZWMpCiAKIGJvb2wgSW5zdGFuY2VPZk5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBK
U1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQ
VElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAg
ICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VY
Q0VQVElPTkJPT0xFQU4KIAogICAgIGlmICghdjItPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24g
JXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5vdCBiZSB1c2VkIHdpdGggJ2luc3RhbmNlb2YnIG9w
ZXJhdG9yLiIsIHYyLCBleHByMi5nZXQoKSk7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2Jq
ZWN0LiBDYW5ub3QgYmUgdXNlZCB3aXRoICdpbnN0YW5jZW9mJyBvcGVyYXRvci4iLCB2MiwgbV9l
eHByMi5nZXQoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTI3MjUsMzUg
KzI2NTMsMjkgQEAgYm9vbCBJbnN0YW5jZU9mTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0
YXRlKiBleGVjKQogICAgIHJldHVybiBvMi0+aGFzSW5zdGFuY2UoZXhlYywgdjEpOwogfQogCi12
b2lkIEluTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5h
cHBlbmQoZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOwot
fQotCiAvLyBFQ01BIDExLjguNwogSlNWYWx1ZSogSW5Ob2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAg
SlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAg
IEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKIAogICAgIGlmICghdjItPmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lv
biAlcykgaXMgbm90IGFuIG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCAnaW4nIG9wZXJhdG9y
LiIsIHYyLCBleHByMi5nZXQoKSk7CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGFuIG9i
amVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCAnaW4nIG9wZXJhdG9yLiIsIHYyLCBtX2V4cHIyLmdl
dCgpKTsKIAogICAgIHJldHVybiBqc0Jvb2xlYW4oc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2Mikt
Pmhhc1Byb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIodjEtPnRvU3RyaW5nKGV4ZWMpKSkpOwogfQog
CiBib29sIEluTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKQogewotICAg
IEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYxID0g
bV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgot
ICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYy
ID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVB
TgogCiAgICAgaWYgKCF2Mi0+aXNPYmplY3QoKSkgewotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGFu
IG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCAnaW4nIG9wZXJhdG9yLiIsIHYyLCBleHByMi5n
ZXQoKSk7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJl
c3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNlZCB3
aXRoICdpbicgb3BlcmF0b3IuIiwgdjIsIG1fZXhwcjIuZ2V0KCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkBAIC0yNzYyLDE4ICsyNjg0LDEyIEBAIGJvb2wgSW5Ob2RlOjpldmFs
dWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUgKmV4ZWMpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBFcXVhbGl0eSBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotdm9pZCBFcXVhbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4
cHIxLmdldCgpKTsKLX0KLQogLy8gRUNNQSAxMS45LjEKIGJvb2wgRXF1YWxOb2RlOjppbmxpbmVF
dmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBl
eHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0
ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1ZSogdjIg
PSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFs
dWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCiAgICAgCiAgICAgcmV0
dXJuIGVxdWFsKGV4ZWMsIHYxLCB2Mik7CkBAIC0yNzg5LDE4ICsyNzA1LDEyIEBAIGJvb2wgRXF1
YWxOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogfQogCi12b2lkIE5vdEVxdWFsTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjIuZ2V0
KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOwotfQotCiAvLyBFQ01BIDEx
LjkuMgogYm9vbCBOb3RFcXVhbE5vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAg
ICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VY
Q0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsK
KyAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVD
S0VYQ0VQVElPTkJPT0xFQU4KIAogICAgIHJldHVybiAhZXF1YWwoZXhlYyx2MSwgdjIpOwpAQCAt
MjgxNiwxOCArMjcyNiwxMiBAQCBib29sIE5vdEVxdWFsTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4o
RXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVj
KTsKIH0KIAotdm9pZCBTdHJpY3RFcXVhbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykK
LXsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKGV4cHIxLmdldCgpKTsKLX0KLQogLy8gRUNNQSAxMS45LjQKIGJvb2wgU3RyaWN0RXF1YWxO
b2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNW
YWx1ZSogdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4
cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAg
SlNWYWx1ZSogdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBt
X2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCiAK
ICAgICByZXR1cm4gc3RyaWN0RXF1YWwoZXhlYyx2MSwgdjIpOwpAQCAtMjg0MywxOCArMjc0Nywx
MiBAQCBib29sIFN0cmljdEVxdWFsTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBl
eGVjKQogICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKIH0KIAotdm9p
ZCBOb3RTdHJpY3RFcXVhbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5
Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBu
b2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIx
LmdldCgpKTsKLX0KLQogLy8gRUNNQSAxMS45LjUKIGJvb2wgTm90U3RyaWN0RXF1YWxOb2RlOjpp
bmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSog
djEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5l
dmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1
ZSogdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIy
LT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCiAKICAgICBy
ZXR1cm4gIXN0cmljdEVxdWFsKGV4ZWMsdjEsIHYyKTsKQEAgLTI4NzIsMTggKzI3NzAsMTIgQEAg
Ym9vbCBOb3RTdHJpY3RFcXVhbE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhl
YykKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJpdCBPcGVyYXRpb24gTm9k
ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIEJpdEFuZE5vZGU6
Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIy
LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgpKTsKLX0KLQogLy8gRUNN
QSAxMS4xMAogSlNWYWx1ZSogQml0QW5kTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQog
eyAgICAKLSAgICBKU1ZhbHVlICp2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1Zh
bHVlICp2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0gICAgSlNWYWx1ZSAqdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNW
YWx1ZSAqdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05WQUxVRQogCiAgICAgcmV0dXJuIGpzTnVtYmVyRnJvbUFuZChleGVjLCB2MSwgdjIpOwpAQCAt
Mjg5MSw5ICsyNzgzLDkgQEAgSlNWYWx1ZSogQml0QW5kTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjKQogCiBpbnQzMl90IEJpdEFuZE5vZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgaW50MzJfdCBpMSA9IGV4cHIxLT5ldmFsdWF0ZVRvSW50MzIo
ZXhlYyk7CisgICAgaW50MzJfdCBpMSA9IG1fZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsK
ICAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICBpbnQzMl90IGkyID0gZXhwcjItPmV2
YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBpbnQzMl90IGkyID0gbV9leHByMi0+ZXZhbHVhdGVU
b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiAoaTEgJiBpMik7CiB9CiAKQEAgLTI5MTcsMTcgKzI4
MDksMTEgQEAgdWludDMyX3QgQml0QW5kTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKIH0KIAotdm9p
ZCBCaXRYT3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNr
LmFwcGVuZChleHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7
Ci19Ci0KIGludDMyX3QgQml0WE9yTm9kZTo6aW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBpbnQgaTEgPSBleHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwor
ICAgIGludCBpMSA9IG1fZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKICAgICBLSlNfQ0hF
Q0tFWENFUFRJT05OVU1CRVIKLSAgICBpbnQgaTIgPSBleHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4
ZWMpOworICAgIGludCBpMiA9IG1fZXhwcjItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKICAgICBy
ZXR1cm4gKGkxIF4gaTIpOwogfQogCkBAIC0yOTU2LDE3ICsyODQyLDExIEBAIHVpbnQzMl90IEJp
dFhPck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CiB9CiAKLXZvaWQgQml0T3JOb2RlOjpvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7
Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7Ci19Ci0KIGludDMyX3QgQml0T3JO
b2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGludCBp
MSA9IGV4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgaW50IGkxID0gbV9leHByMS0+
ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAg
IGludCBpMiA9IGV4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgaW50IGkyID0gbV9l
eHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIHJldHVybiAoaTEgfCBpMik7CiB9CiAK
QEAgLTI5OTcsNTMgKzI4NzcsNDEgQEAgdWludDMyX3QgQml0T3JOb2RlOjpldmFsdWF0ZVRvVUlu
dDMyKEV4ZWNTdGF0ZSogZXhlYykKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEJpbmFyeSBMb2dpY2FsIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9p
ZCBMb2dpY2FsQW5kTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2Rl
KiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVT
dGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0
KCkpOwotfQotCiAvLyBFQ01BIDExLjExCiBKU1ZhbHVlKiBMb2dpY2FsQW5kTm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOworICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgICBib29sIGIxID0gdjEtPnRvQm9vbGVhbihleGVj
KTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIGlmICghYjEpCiAgICAgICAgIHJl
dHVybiB2MTsKLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgICBK
U1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZBTFVFCiAgICAgcmV0dXJuIHYyOwogfQogCiBib29sIExvZ2ljYWxBbmROb2RlOjpldmFs
dWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYm9vbCBiID0gZXhwcjEtPmV2
YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wgYiA9IG1fZXhwcjEtPmV2YWx1YXRlVG9C
b29sZWFuKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICByZXR1cm4g
YiAmJiBleHByMi0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLXZvaWQgTG9naWNhbE9y
Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQo
ZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOworICAgIHJl
dHVybiBiICYmIG1fZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogfQogCiBKU1ZhbHVl
KiBMb2dpY2FsT3JOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1
ZSogdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIx
LT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIGlmICh2
MS0+dG9Cb29sZWFuKGV4ZWMpKQogICAgICAgICByZXR1cm4gdjE7Ci0gICAgcmV0dXJuIGV4cHIy
LT5ldmFsdWF0ZShleGVjKTsKKyAgICByZXR1cm4gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiB9
CiAKIGJvb2wgTG9naWNhbE9yTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGJvb2wgYiA9IGV4cHIxLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAgICBi
b29sIGIgPSBtX2V4cHIxLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKICAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGIgfHwgZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFu
KGV4ZWMpOworICAgIHJldHVybiBiIHx8IG1fZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMp
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uZGl0aW9uYWxOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzLmggYi9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAppbmRleCAwZDRhNDdk
Li42Nzc3ZDQ3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaApAQCAtMTI2LDcgKzEyNiw2IEBAIG5hbWVzcGFjZSBL
SlMgewogCiAgICAgLy8gU2VyaWFsaXphdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTCA9IDA7Ci0gICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCA9IDA7CiAKICAgICAvLyBVc2VkIGZvciBpdGVyYXRp
dmUsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCBvZiB0aGUgbm9kZSB0cmVlLiBEb2VzIG5vdCBjcm9z
cyBmdW5jdGlvbiBjYWxsIGJvdW5kYXJpZXMuCiAgICAgYm9vbCBtYXlIYXZlRGVjbGFyYXRpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9tYXlIYXZlRGVjbGFyYXRpb25zOyB9CkBAIC0xMzcsOCArMTM2
LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgcHJvdGVjdGVkOgogICAgIE5vZGUoSlNUeXBlKSBL
SlNfRkFTVF9DQUxMOyAvLyB1c2VkIGJ5IEV4cHJlc3Npb25Ob2RlCi0gICAgQ29tcGxldGlvbiBj
cmVhdGVFcnJvckNvbXBsZXRpb24oRXhlY1N0YXRlICosIEVycm9yVHlwZSwgY29uc3QgY2hhciAq
bXNnKSBLSlNfRkFTVF9DQUxMOwotICAgIENvbXBsZXRpb24gY3JlYXRlRXJyb3JDb21wbGV0aW9u
KEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgSWRlbnRpZmll
ciAmKSBLSlNfRkFTVF9DQUxMOwogCiAgICAgSlNWYWx1ZSogdGhyb3dFcnJvcihFeGVjU3RhdGUq
LCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZykgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVl
KiB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29uc3QgY2hhciogbXNnLCBjb25z
dCBjaGFyKikgS0pTX0ZBU1RfQ0FMTDsKQEAgLTE3OCw2ICsxNzUsOCBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgCiAgICAgICAgIEpTVHlwZSBleHBlY3RlZFJldHVyblR5cGUoKSBjb25zdCBL
SlNfRkFTVF9DQUxMIHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTVHlwZT4obV9leHBlY3RlZFJldHVy
blR5cGUpOyB9CiAgICAgICAgIAorICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTCA9IDA7CiAgICAgICAgIHZpcnR1YWwgZG91Ymxl
IGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmly
dHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwpA
QCAtMTg4LDE2ICsxODcsMzMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVzdWx0KCkgeyB9CiAgICB9OwogCisgICAgY2xhc3Mg
QmluYXJ5T3BlcmF0b3JOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEJpbmFyeU9wZXJhdG9yTm9kZShKU1R5cGUgcmV0dXJuVHlwZSwgRXhwcmVzc2lv
bk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpCisgICAgICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKHJldHVyblR5cGUpLCBtX2V4cHIxKGUxKSwgbV9leHByMihlMikge30KKyAgICAgICAgCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5v
ZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAg
ICAgCisgICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0b3JBc1N0cmluZygpIGNvbnN0
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IG1fZXhwcjE7CisgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsK
KyAgICB9OworCiAgIGNsYXNzIFN0YXRlbWVudE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1Ymxp
YzoKICAgICBTdGF0ZW1lbnROb2RlKCkgS0pTX0ZBU1RfQ0FMTDsKICAgICB2b2lkIHNldExvYyhp
bnQgbGluZTAsIGludCBsaW5lMSkgS0pTX0ZBU1RfQ0FMTDsKICAgICBpbnQgZmlyc3RMaW5lKCkg
Y29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBsaW5lTm8oKTsgfQogICAgIGludCBsYXN0TGlu
ZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9sYXN0TGluZTsgfQorCiAgICAgYm9v
bCBoaXRTdGF0ZW1lbnQoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIENv
bXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpIEtKU19GQVNUX0NBTEwgPSAwOwogICAg
IHZvaWQgcHVzaExhYmVsKGNvbnN0IElkZW50aWZpZXIgJmlkKSBLSlNfRkFTVF9DQUxMIHsgbHMu
cHVzaChpZCk7IH0KLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQorCisgICAgQ29t
cGxldGlvbiBjcmVhdGVFcnJvckNvbXBsZXRpb24oRXhlY1N0YXRlICosIEVycm9yVHlwZSwgY29u
c3QgY2hhciAqbXNnKSBLSlNfRkFTVF9DQUxMOworICAgIENvbXBsZXRpb24gY3JlYXRlRXJyb3JD
b21wbGV0aW9uKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIgKm1zZywgY29uc3Qg
SWRlbnRpZmllciAmKSBLSlNfRkFTVF9DQUxMOwogICBwcm90ZWN0ZWQ6CiAgICAgTGFiZWxTdGFj
ayBsczsKICAgcHJpdmF0ZToKQEAgLTM1Miw3ICszNjgsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICBFbGVtZW50Tm9kZShpbnQgZSwgRXhwcmVzc2lvbk5vZGUqIG4pIEtKU19GQVNUX0NBTEwgOiBl
bGlzaW9uKGUpLCBub2RlKG4pIHsgfQogICAgIEVsZW1lbnROb2RlKEVsZW1lbnROb2RlKiBsLCBp
bnQgZSwgRXhwcmVzc2lvbk5vZGUqIG4pIEtKU19GQVNUX0NBTEwKICAgICAgIDogZWxpc2lvbihl
KSwgbm9kZShuKSB7IGwtPm5leHQgPSB0aGlzOyB9Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJl
c3Npb247IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7CiAKQEAgLTM5MSw3ICs0MDYsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIDogbV9u
YW1lKG4pLCBhc3NpZ24oYSksIHR5cGUodCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNz
aW9uOyB9CiAKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
QEAgLTQxMSw3ICs0MjUsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIDogbm9kZShuKSB7IGwt
Pm5leHQgPSB0aGlzOyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBL
SlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAKICAgICBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIFBhc3NSZWZQ
dHI8UHJvcGVydHlMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IG5leHQucmVsZWFzZSgpOyB9CkBAIC00ODcsNyArNTAwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgICA6IGV4cHIoZSkgeyBsLT5uZXh0ID0gdGhpczsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhw
cmVzc2lvbjsgfQogCiAgICAgdm9pZCBldmFsdWF0ZUxpc3QoRXhlY1N0YXRlKiwgTGlzdCYpIEtK
U19GQVNUX0NBTEw7CiAgICAgUGFzc1JlZlB0cjxBcmd1bWVudExpc3ROb2RlPiByZWxlYXNlTmV4
dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KQEAgLTUwNSw3ICs1
MTcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIDogbGlzdE5vZGUobCkgeyB9CiAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xh
cmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAKICAgICB2b2lkIGV2YWx1YXRlTGlzdChFeGVjU3Rh
dGUqIGV4ZWMsIExpc3QmIGxpc3QpIEtKU19GQVNUX0NBTEwgeyBpZiAobGlzdE5vZGUpIGxpc3RO
b2RlLT5ldmFsdWF0ZUxpc3QoZXhlYywgbGlzdCk7IH0KIApAQCAtMTA3Nyw3MCArMTA4OCw1OSBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7CiAgIH07
CiAgIAotICBjbGFzcyBNdWx0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgIGNsYXNz
IE11bHROb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9kZSB7CiAgIHB1YmxpYzoKLSAgICAg
IE11bHROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQyKSBLSlNfRkFT
VF9DQUxMIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIHRlcm0xKHQxKSwgdGVybTIodDIp
IHt9Ci0gICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJv
ZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Cisg
ICAgICBNdWx0Tm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Npb25Ob2RlKiB0MikgS0pT
X0ZBU1RfQ0FMTAorICAgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShOdW1iZXJUeXBlLCB0MSwg
dDIpIHt9CiAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4o
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0
ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdWludDMy
X3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Cisg
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25zdCB7IHJldHVy
biAiKiI7IH0KICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY011bHRpcGxpY2l0YXZlOyB9CiAgIHByaXZhdGU6CiAgICAgICBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopOwotICAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKLSAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
dGVybTI7CiAgIH07CiAgIAotICBjbGFzcyBEaXZOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2Rl
IHsKKyAgY2xhc3MgRGl2Tm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5vZGUgewogICBwdWJs
aWM6Ci0gICAgICBEaXZOb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQy
KSBLSlNfRkFTVF9DQUxMIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIHRlcm0xKHQxKSwg
dGVybTIodDIpIHt9Ci0gICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7CisgICAgICBEaXZOb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUq
IHQyKSBLSlNfRkFTVF9DQUxMIDogQmluYXJ5T3BlcmF0b3JOb2RlKE51bWJlclR5cGUsIHQxLCB0
MikgIHt9CiAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMy
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1
YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIi8iOyB9
CiAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNNdWx0aXBsaWNpdGF2ZTsgfQogICBwcml2YXRlOgogICAgICAgQUxXQVlTX0lOTElORSBkb3Vi
bGUgaW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKTsKLSAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gdGVybTE7Ci0gICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0yOwog
ICB9OwogICAKLSAgY2xhc3MgTW9kTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgIGNs
YXNzIE1vZE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKICAgcHVibGljOgotICAg
ICAgTW9kTm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Npb25Ob2RlKiB0MikgS0pTX0ZB
U1RfQ0FMTCA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCB0ZXJtMSh0MSksIHRlcm0yKHQy
KSB7fQotICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwor
ICAgICAgTW9kTm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Npb25Ob2RlKiB0MikgS0pT
X0ZBU1RfQ0FMTCA6IEJpbmFyeU9wZXJhdG9yTm9kZShOdW1iZXJUeXBlLCB0MSwgdDIpIHt9CiAg
ICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVh
dGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisgICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiJSI7IH0K
ICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y011bHRpcGxpY2l0YXZlOyB9CiAgIHByaXZhdGU6CiAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJs
ZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopOwotICAgICAgUmVmUHRyPEV4cHJl
c3Npb25Ob2RlPiB0ZXJtMTsKLSAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CiAg
IH07CiAKLSAgY2xhc3MgQWRkTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgIGNsYXNz
IEFkZE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKICAgcHVibGljOgotICAgIEFk
ZE5vZGUoRXhwcmVzc2lvbk5vZGUqIHQxLCBFeHByZXNzaW9uTm9kZSogdDIpIEtKU19GQVNUX0NB
TEwgOiB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQotICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKyAgICBBZGROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhw
cmVzc2lvbk5vZGUqIHQyKSBLSlNfRkFTVF9DQUxMIDogQmluYXJ5T3BlcmF0b3JOb2RlKE9iamVj
dFR5cGUsIHQxLCB0Mikge30KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRv
SW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2
YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiKyI7IH0K
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNB
ZGRpdGl2ZTsgfQogICBwcm90ZWN0ZWQ6Ci0gICAgQWRkTm9kZShFeHByZXNzaW9uTm9kZSogdDEs
IEV4cHJlc3Npb25Ob2RlKiB0MiwgSlNUeXBlIGV4cGVjdGVkUmV0dXJuKSBLSlNfRkFTVF9DQUxM
IDogRXhwcmVzc2lvbk5vZGUoZXhwZWN0ZWRSZXR1cm4pLCB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7
fQotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTE7Ci0gICAgUmVmUHRyPEV4cHJlc3Np
b25Ob2RlPiB0ZXJtMjsKKyAgICBBZGROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lv
bk5vZGUqIHQyLCBKU1R5cGUgZXhwZWN0ZWRSZXR1cm4pIEtKU19GQVNUX0NBTEwgOiBCaW5hcnlP
cGVyYXRvck5vZGUoZXhwZWN0ZWRSZXR1cm4sIHQxLCB0Mikge30KICAgcHJpdmF0ZToKICAgICBB
TFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopOwog
ICB9OwpAQCAtMTE3NCw4NyArMTE3NCw3MSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIH07
CiAKLSAgY2xhc3MgU3ViTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgIGNsYXNzIFN1
Yk5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKICAgcHVibGljOgotICAgICAgU3Vi
Tm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Npb25Ob2RlKiB0MikgS0pTX0ZBU1RfQ0FM
TCA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQot
ICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9k
ZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOworICAgICAg
U3ViTm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Npb25Ob2RlKiB0MikgS0pTX0ZBU1Rf
Q0FMTCA6IEJpbmFyeU9wZXJhdG9yTm9kZShOdW1iZXJUeXBlLCB0MSwgdDIpIHt9CiAgICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
ICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CiAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiBvcGVyYXRvckFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIi0iOyB9CiAgICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNBZGRpdGl2ZTsgfQog
ICBwcml2YXRlOgogICAgICAgQUxXQVlTX0lOTElORSBkb3VibGUgaW5saW5lRXZhbHVhdGVUb051
bWJlcihFeGVjU3RhdGUqKTsKLSAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTE7Ci0g
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0yOwogICB9OwogCi0gIGNsYXNzIExlZnRT
aGlmdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICBjbGFzcyBMZWZ0U2hpZnROb2Rl
IDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9kZSB7CiAgIHB1YmxpYzoKICAgICBMZWZ0U2hpZnRO
b2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQyKSBLSlNfRkFTVF9DQUxM
Ci0gICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCB0ZXJtMSh0MSksIHRlcm0yKHQy
KSB7fQotICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICAgIDogQmluYXJ5T3BlcmF0b3JOb2RlKE51bWJlclR5cGUsIHQxLCB0Mikge30KICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNT
dHJpbmcoKSBjb25zdCB7IHJldHVybiAiPDwiOyB9CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjU2hpZnQ7IH0KICAgcHJpdmF0ZToKICAgICBB
TFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwot
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiB0ZXJtMjsKICAgfTsKIAotICBjbGFzcyBSaWdodFNoaWZ0Tm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CisgIGNsYXNzIFJpZ2h0U2hpZnROb2RlIDogcHVibGljIEJpbmFyeU9wZXJh
dG9yTm9kZSB7CiAgIHB1YmxpYzoKICAgICBSaWdodFNoaWZ0Tm9kZShFeHByZXNzaW9uTm9kZSog
dDEsIEV4cHJlc3Npb25Ob2RlKiB0MikgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBFeHByZXNzaW9u
Tm9kZShOdW1iZXJUeXBlKSwgdGVybTEodDEpLCB0ZXJtMih0Mikge30KLSAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25T
dGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CisgICAgICA6IEJpbmFyeU9wZXJhdG9y
Tm9kZShOdW1iZXJUeXBlLCB0MSwgdDIpIHt9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0
ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRl
VG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGludDMyX3Qg
ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB1
aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gIj4+IjsgfQogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY1NoaWZ0OyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90
IGlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IHRlcm0xOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CiAgIH07CiAK
LSAgY2xhc3MgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CisgIGNsYXNzIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JO
b2RlIHsKICAgcHVibGljOgogICAgIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUoRXhwcmVzc2lvbk5v
ZGUqIHQxLCBFeHByZXNzaW9uTm9kZSogdDIpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogRXhwcmVz
c2lvbk5vZGUoTnVtYmVyVHlwZSksIHRlcm0xKHQxKSwgdGVybTIodDIpIHt9Ci0gICAgdmlydHVh
bCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0
aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOworICAgICAgOiBCaW5hcnlPcGVy
YXRvck5vZGUoTnVtYmVyVHlwZSwgdDEsIHQyKSB7fQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFs
dWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBpbnQz
Ml90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0b3JBc1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuICI+Pj4iOyB9CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCB7IHJldHVybiBQcmVjU2hpZnQ7IH0KICAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIHVp
bnQzMl90IGlubGluZUV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKik7Ci0gICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiB0ZXJtMTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0yOwog
ICB9OwogCi0gIGNsYXNzIExlc3NOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgY2xh
c3MgTGVzc05vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKICAgcHVibGljOgogICAg
IExlc3NOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFT
VF9DQUxMCi0gICAgICA6IEV4cHJlc3Npb25Ob2RlKEJvb2xlYW5UeXBlKSwgZXhwcjEoZTEpLCBl
eHByMihlMikge30KLSAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5j
dGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7CisgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShCb29sZWFuVHlwZSwgZTEsIGUyKSB7fQog
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBj
b25zdCB7IHJldHVybiAiPCI7IH0KICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlT
X0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICBwcm90
ZWN0ZWQ6Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKLSAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IGV4cHIyOwogICB9OwogCiAgICAgY2xhc3MgTGVzc051bWJlcnNOb2RlIDog
cHVibGljIExlc3NOb2RlIHsKQEAgLTEyNzcsMTAyICsxMjYxLDgxIEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhl
Y1N0YXRlKik7CiAgICAgfTsKIAotICBjbGFzcyBHcmVhdGVyTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSB7CisgIGNsYXNzIEdyZWF0ZXJOb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9k
ZSB7CiAgIHB1YmxpYzoKLSAgICBHcmVhdGVyTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJl
c3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTCA6Ci0gICAgICBleHByMShlMSksIGV4cHIyKGUy
KSB7fQotICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9k
eU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKyAg
ICBHcmVhdGVyTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pT
X0ZBU1RfQ0FMTAorICAgICAgOiBCaW5hcnlPcGVyYXRvck5vZGUoQm9vbGVhblR5cGUsIGUxLCBl
Mikge30KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gIj4iOyB9CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVsYXRpb25hbDsgfQogICBwcml2YXRlOgogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKTsK
LSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gZXhwcjI7CiAgIH07CiAKLSAgY2xhc3MgTGVzc0VxTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSB7CisgIGNsYXNzIExlc3NFcU5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2Rl
IHsKICAgcHVibGljOgotICAgIExlc3NFcU5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNz
aW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwgOgotICAgICAgZXhwcjEoZTEpLCBleHByMihlMikg
e30KLSAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CisgICAg
TGVzc0VxTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZB
U1RfQ0FMTAorICAgICAgOiBCaW5hcnlPcGVyYXRvck5vZGUoQm9vbGVhblR5cGUsIGUxLCBlMikg
e30KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gIjw9IjsgfQogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KICAgcHJpdmF0ZToKICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKik7Ci0g
ICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IGV4cHIyOwogICB9OwogCi0gIGNsYXNzIEdyZWF0ZXJFcU5vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUgeworICBjbGFzcyBHcmVhdGVyRXFOb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9y
Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBHcmVhdGVyRXFOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwg
RXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMIDoKLSAgICAgIGV4cHIxKGUxKSwgZXhw
cjIoZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rp
b25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OworICAgIEdyZWF0ZXJFcU5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSog
ZTIpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogQmluYXJ5T3BlcmF0b3JOb2RlKEJvb2xlYW5UeXBl
LCBlMSwgZTIpIHt9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0
b3JBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICI+PSI7IH0KICAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAgIHByaXZh
dGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNT
dGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAotICAgIGNsYXNzIEluc3RhbmNlT2ZOb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBjbGFzcyBJbnN0YW5jZU9mTm9kZSA6IHB1Ymxp
YyBCaW5hcnlPcGVyYXRvck5vZGUgewogICBwdWJsaWM6CiAgICAgSW5zdGFuY2VPZk5vZGUoRXhw
cmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFuVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9
Ci0gICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9k
ZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOworICAgICAg
ICA6IEJpbmFyeU9wZXJhdG9yTm9kZShCb29sZWFuVHlwZSwgZTEsIGUyKSB7fQogICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiAiaW5zdGFuY2VvZiI7IH0KICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9Ci0gIHByaXZhdGU6Ci0gICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBleHByMTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIy
OwogICB9OwogCi0gICAgY2xhc3MgSW5Ob2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAg
ICBjbGFzcyBJbk5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKICAgcHVibGljOgot
ICAgIEluTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZB
U1RfQ0FMTCA6Ci0gICAgICBleHByMShlMSksIGV4cHIyKGUyKSB7fQotICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKyAgICBJbk5vZGUoRXhwcmVzc2lvbk5v
ZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKKyAgICAgICAgOiBCaW5h
cnlPcGVyYXRvck5vZGUoQm9vbGVhblR5cGUsIGUxLCBlMikge30KICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29s
IGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisgICAg
dmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gImlu
IjsgfQogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY1JlbGF0aW9uYWw7IH0KLSAgcHJpdmF0ZToKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKLSAgICBj
bGFzcyBFcXVhbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIGNsYXNzIEVxdWFs
Tm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5vZGUgewogICBwdWJsaWM6CiAgICAgRXF1YWxO
b2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxM
Ci0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoQm9vbGVhblR5cGUpLCBleHByMShlMSksIGV4cHIy
KGUyKSB7fQotICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9u
Qm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
KyAgICAgICAgOiBCaW5hcnlPcGVyYXRvck5vZGUoQm9vbGVhblR5cGUsIGUxLCBlMikge30KICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gIj09IjsgfQogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lO
TElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHBy
MjsKICAgfTsKIAotICAgIGNsYXNzIE5vdEVxdWFsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSB7CisgICAgY2xhc3MgTm90RXF1YWxOb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9kZSB7
CiAgIHB1YmxpYzoKICAgICBOb3RFcXVhbE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNz
aW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29s
ZWFuVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOworICAgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShC
b29sZWFuVHlwZSwgZTEsIGUyKSB7fQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xl
YW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiIT0iOyB9CiAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjRXF1YWxpdHk7IH0K
ICAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xl
YW4oRXhlY1N0YXRlKik7CkBAIC0xMzgwLDEyMSArMTM0MywxMDAgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAotICAgIGNsYXNzIFN0
cmljdEVxdWFsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgY2xhc3MgU3RyaWN0
RXF1YWxOb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9kZSB7CiAgIHB1YmxpYzoKICAgICBT
dHJpY3RFcXVhbE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtK
U19GQVNUX0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFuVHlwZSksIGV4cHIx
KGUxKSwgZXhwcjIoZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOworICAgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShCb29sZWFuVHlwZSwgZTEs
IGUyKSB7fQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNT
dHJpbmcoKSBjb25zdCB7IHJldHVybiAiPT09IjsgfQogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9CiAgIHByaXZhdGU6CiAg
ICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSop
OwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Np
b25Ob2RlPiBleHByMjsKICAgfTsKIAotICAgIGNsYXNzIE5vdFN0cmljdEVxdWFsTm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgY2xhc3MgTm90U3RyaWN0RXF1YWxOb2RlIDogcHVi
bGljIEJpbmFyeU9wZXJhdG9yTm9kZSB7CiAgIHB1YmxpYzoKICAgICBOb3RTdHJpY3RFcXVhbE5v
ZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwK
LSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFuVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIo
ZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwor
ICAgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShCb29sZWFuVHlwZSwgZTEsIGUyKSB7fQogICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25z
dCB7IHJldHVybiAiIT09IjsgfQogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lO
TElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHBy
MjsKICAgfTsKIAotICAgIGNsYXNzIEJpdEFuZE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUg
eworICAgIGNsYXNzIEJpdEFuZE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKICAg
cHVibGljOgogICAgIEJpdEFuZE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9k
ZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBl
KSwgZXhwcjEoZTEpLCBleHByMihlMikge30KLSAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7CisgICAgICAgIDogQmluYXJ5T3BlcmF0b3JOb2RlKE51bWJlclR5
cGUsIGUxLCBlMikge30KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVh
bihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0
ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHVpbnQzMl90
IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiJiI7
IH0KICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNCaXR3aXNlQW5kOyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlu
bGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKLSAg
ICBjbGFzcyBCaXRPck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIGNsYXNzIEJp
dE9yTm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5vZGUgewogICBwdWJsaWM6CiAgICAgQml0
T3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9D
QUxMCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIGV4cHIxKGUxKSwgZXhw
cjIoZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rp
b25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OworICAgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShOdW1iZXJUeXBlLCBlMSwgZTIpIHt9CiAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMy
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBjb25zdCBjaGFy
KiBvcGVyYXRvckFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gInwiOyB9CiAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lzZU9yOyB9CiAg
IHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQz
MihFeGVjU3RhdGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKLSAgICBjbGFzcyBCaXRYT3JOb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBjbGFzcyBCaXRYT3JOb2RlIDogcHVibGlj
IEJpbmFyeU9wZXJhdG9yTm9kZSB7CiAgIHB1YmxpYzoKICAgICBCaXRYT3JOb2RlKEV4cHJlc3Np
b25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgIDog
RXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9Ci0gICAg
dmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERl
Y2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOworICAgICAgICA6IEJp
bmFyeU9wZXJhdG9yTm9kZShOdW1iZXJUeXBlLCBlMSwgZTIpIHt9CiAgICAgdmlydHVhbCBKU1Zh
bHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgZG91
YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gIl4iOyB9CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lzZVhvcjsgfQogICBwcml2YXRlOgogICAg
IEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKik7
Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKLSAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IGV4cHIyOwogICB9OwogCiAgIC8qKgogICAgKiBleHByMSAmJiBleHByMiwgZXhwcjEg
fHwgZXhwcjIKICAgICovCi0gICAgY2xhc3MgTG9naWNhbEFuZE5vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUgeworICAgIGNsYXNzIExvZ2ljYWxBbmROb2RlIDogcHVibGljIEJpbmFyeU9wZXJh
dG9yTm9kZSB7CiAgIHB1YmxpYzoKICAgICBMb2dpY2FsQW5kTm9kZShFeHByZXNzaW9uTm9kZSog
ZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKEJvb2xlYW5UeXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KLSAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CisgICAgICAgIDogQmluYXJ5T3Bl
cmF0b3JOb2RlKEJvb2xlYW5UeXBlLCBlMSwgZTIpIHt9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFs
dWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1
YWwgY29uc3QgY2hhciogb3BlcmF0b3JBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICImJiI7IH0K
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNM
b2dpY2FsQW5kOyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2
YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
ZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKICAgCi0gICAg
Y2xhc3MgTG9naWNhbE9yTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgY2xhc3Mg
TG9naWNhbE9yTm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5vZGUgewogICBwdWJsaWM6CiAg
ICAgTG9naWNhbE9yTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikg
S0pTX0ZBU1RfQ0FMTAotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKEJvb2xlYW5UeXBlKSwgZXhw
cjEoZTEpLCBleHByMihlMikge30KLSAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7CisgICAgICAgIDogQmluYXJ5T3BlcmF0b3JOb2RlKEJvb2xlYW5UeXBlLCBl
MSwgZTIpIHt9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0b3JB
c1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJ8fCI7IH0KICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNMb2dpY2FsT3I7IH0KICAgcHJpdmF0ZToK
ICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
Kik7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKLSAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IGV4cHIyOwogICB9OwogCiAgIC8qKgpAQCAtMjAxMiw3ICsxOTU0LDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFy
YXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwotICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJl
c3Npb247IH0KIAogICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgIENvbXBsZXRpb24gZXZhbFN0YXRlbWVudHMoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKQEAgLTIwMzMsNyArMTk3NCw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAg
ICAgICBQYXNzUmVmUHRyPENsYXVzZUxpc3ROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NB
TEwgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KICAgICAgIHZpcnR1YWwgdm9pZCBnZXREZWNs
YXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwotICAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KICAgcHJpdmF0ZToKICAgICAgIGZyaWVuZCBjbGFzcyBD
YXNlQmxvY2tOb2RlOwogICAgICAgUmVmUHRyPENhc2VDbGF1c2VOb2RlPiBjbGF1c2U7CkBAIC0y
MDQ3LDcgKzE5ODcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIENvbXBsZXRpb24gZXZhbEJs
b2NrKEV4ZWNTdGF0ZSAqZXhlYywgSlNWYWx1ZSAqaW5wdXQpIEtKU19GQVNUX0NBTEw7CiAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3Mm
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KICAg
cHJpdmF0ZToKICAgICAgIFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gbGlzdDE7CiAgICAgICBSZWZQ
dHI8Q2FzZUNsYXVzZU5vZGU+IGRlZjsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9u
b2RlczJzdHJpbmcuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAKaW5k
ZXggNjNmM2Y0OC4uMTE0ZGQzMSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVz
MnN0cmluZy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAKQEAg
LTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChVbmlu
ZGVudFR5cGUpOwogICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChEb3RFeHByVHlwZSk7CiAg
ICAgU291cmNlU3RyZWFtJiBvcGVyYXRvcjw8KFByZWNlZGVuY2UpOworICAgIFNvdXJjZVN0cmVh
bSYgb3BlcmF0b3I8PChjb25zdCBFeHByZXNzaW9uTm9kZSopOwogICAgIFNvdXJjZVN0cmVhbSYg
b3BlcmF0b3I8PChjb25zdCBOb2RlKik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFNvdXJj
ZVN0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBSZWZQdHI8VD4mIG4pIHsgcmV0dXJuICp0aGlzIDw8
IG4uZ2V0KCk7IH0KIApAQCAtMTkwLDcgKzE5MSw3IEBAIFNvdXJjZVN0cmVhbSYgU291cmNlU3Ry
ZWFtOjpvcGVyYXRvcjw8KGNvbnN0IElkZW50aWZpZXImIHMpCiAgICAgcmV0dXJuICp0aGlzOwog
fQogCi1Tb3VyY2VTdHJlYW0mIFNvdXJjZVN0cmVhbTo6b3BlcmF0b3I8PChjb25zdCBOb2RlKiBu
KQorU291cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgRXhwcmVzc2lv
bk5vZGUqIG4pCiB7CiAgICAgYm9vbCBuZWVkUGFyZW5zID0gbV9wcmVjZWRlbmNlICE9IFByZWNF
eHByZXNzaW9uICYmIG4tPnByZWNlZGVuY2UoKSA+IG1fcHJlY2VkZW5jZTsKICAgICBtX3ByZWNl
ZGVuY2UgPSBQcmVjRXhwcmVzc2lvbjsKQEAgLTIwNCw2ICsyMDUsMTQgQEAgU291cmNlU3RyZWFt
JiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgTm9kZSogbikKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKK1NvdXJjZVN0cmVhbSYgU291cmNlU3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IE5v
ZGUqIG4pCit7CisgICAgbV9wcmVjZWRlbmNlID0gUHJlY0V4cHJlc3Npb247CisgICAgaWYgKG4p
CisgICAgICAgIG4tPnN0cmVhbVRvKCp0aGlzKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIFNv
dXJjZVN0cmVhbSYgU291cmNlU3RyZWFtOjpvcGVyYXRvcjw8KEVuZGxUeXBlKQogewogICAgIG1f
bnVtYmVyTmVlZHNQYXJlbnMgPSBmYWxzZTsKQEAgLTIzOSw3ICsyNDgsNyBAQCBpbmxpbmUgU291
cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwoUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KQogfQogCiBzdGF0aWMgdm9pZCBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihT
b3VyY2VTdHJlYW0mIHMsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSwKLSAgICBjb25zdCBjaGFyKiBv
cGVyYXRvclN0cmluZywgY29uc3QgTm9kZSogbGVmdCwgY29uc3QgTm9kZSogcmlnaHQpCisgICAg
Y29uc3QgY2hhciogb3BlcmF0b3JTdHJpbmcsIGNvbnN0IEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBj
b25zdCBFeHByZXNzaW9uTm9kZSogcmlnaHQpCiB7CiAgICAgcyA8PCBwcmVjZWRlbmNlIDw8IGxl
ZnQKICAgICAgICAgPDwgJyAnIDw8IG9wZXJhdG9yU3RyaW5nIDw8ICcgJwpAQCAtNTQyLDExOSAr
NTUxLDkgQEAgdm9pZCBMb2dpY2FsTm90Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBj
b25zdAogICAgIHMgPDwgIiEiIDw8IFByZWNVbmFyeSA8PCBleHByOwogfQogCi12b2lkIE11bHRO
b2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFz
c29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiKiIsIHRlcm0xLCB0ZXJt
Mik7Ci19Ci0KLXZvaWQgRGl2Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAot
ewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2Uo
KSwgIi8iLCB0ZXJtMSwgdGVybTIpOwotfQotCi12b2lkIE1vZE5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVy
YXRvcihzLCBwcmVjZWRlbmNlKCksICIlIiwgdGVybTEsIHRlcm0yKTsKLX0KLQotdm9pZCBBZGRO
b2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFz
c29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiKyIsIHRlcm0xLCB0ZXJt
Mik7Ci19Ci0KLXZvaWQgU3ViTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAot
ewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2Uo
KSwgIi0iLCB0ZXJtMSwgdGVybTIpOwotfQotCi12b2lkIExlZnRTaGlmdE5vZGU6OnN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5h
cnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI8PCIsIHRlcm0xLCB0ZXJtMik7Ci19Ci0KLXZv
aWQgUmlnaHRTaGlmdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAg
ICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI+
PiIsIHRlcm0xLCB0ZXJtMik7Ci19Ci0KLXZvaWQgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6c3Ry
ZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2
ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIj4+PiIsIHRlcm0xLCB0ZXJtMik7Ci19
Ci0KLXZvaWQgTGVzc05vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAg
ICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI8
IiwgZXhwcjEsIGV4cHIyKTsKLX0KLQotdm9pZCBHcmVhdGVyTm9kZTo6c3RyZWFtVG8oU291cmNl
U3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJh
dG9yKHMsIHByZWNlZGVuY2UoKSwgIj4iLCBleHByMSwgZXhwcjIpOwotfQotCi12b2lkIExlc3NF
cU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0
QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI8PSIsIGV4cHIxLCBl
eHByMik7Ci19Ci0KLXZvaWQgR3JlYXRlckVxTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHBy
ZWNlZGVuY2UoKSwgIj49IiwgZXhwcjEsIGV4cHIyKTsKLX0KLQotdm9pZCBJbnN0YW5jZU9mTm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3Nv
Y2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgImluc3RhbmNlb2YiLCBleHBy
MSwgZXhwcjIpOwotfQotCi12b2lkIEluTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBj
b25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNl
ZGVuY2UoKSwgImluIiwgZXhwcjEsIGV4cHIyKTsKLX0KLQotdm9pZCBFcXVhbE5vZGU6OnN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVC
aW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI9PSIsIGV4cHIxLCBleHByMik7Ci19Ci0K
LXZvaWQgTm90RXF1YWxOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0g
ICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAi
IT0iLCBleHByMSwgZXhwcjIpOwotfQotCi12b2lkIFN0cmljdEVxdWFsTm9kZTo6c3RyZWFtVG8o
U291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFy
eU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIj09PSIsIGV4cHIxLCBleHByMik7Ci19Ci0KLXZv
aWQgTm90U3RyaWN0RXF1YWxOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17
Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgp
LCAiIT09IiwgZXhwcjEsIGV4cHIyKTsKLX0KLQotdm9pZCBCaXRBbmROb2RlOjpzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5
T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiJiIsIGV4cHIxLCBleHByMik7Ci19Ci0KLXZvaWQg
Qml0WE9yTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVh
bUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIl4iLCBleHBy
MSwgZXhwcjIpOwotfQotCi12b2lkIEJpdE9yTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHBy
ZWNlZGVuY2UoKSwgInwiLCBleHByMSwgZXhwcjIpOwotfQotCi12b2lkIExvZ2ljYWxBbmROb2Rl
OjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29j
aWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiJiYiLCBleHByMSwgZXhwcjIp
OwotfQotCi12b2lkIExvZ2ljYWxPck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29u
c3QKK3ZvaWQgQmluYXJ5T3BlcmF0b3JOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNv
bnN0CiB7Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2Vk
ZW5jZSgpLCAifHwiLCBleHByMSwgZXhwcjIpOworICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJp
bmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgb3BlcmF0b3JBc1N0cmluZygpLCBtX2V4cHIx
LCBtX2V4cHIyKTsKIH0KIAogdm9pZCBDb25kaXRpb25hbE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYgcykgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17248</attachid>
            <date>2007-11-13 17:34:37 -0800</date>
            <delta_ts>2007-11-13 17:34:37 -0800</delta_ts>
            <desc>improved patch, SunSpider reports wild results</desc>
            <filename>final.patch</filename>
            <type>text/plain</type>
            <size>83556</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS9ranMvbm9kZXMuY3BwCmluZGV4IDYxOGUzNzAuLjZlZjVjZmQgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNw
cApAQCAtMjUxLDYgKzI1MSwxMiBAQCB1aW50MzJfdCBFeHByZXNzaW9uTm9kZTo6ZXZhbHVhdGVU
b1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIHZhbHVlLT50b1VJbnQzMihleGVj
KTsKIH0KIAordm9pZCBCaW5hcnlPcGVyYXRvck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
RnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKK3sKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOworICAgIG5vZGVTdGFj
ay5hcHBlbmQobV9leHByMi5nZXQoKSk7Cit9CisKIHN0YXRpYyB2b2lkIHN1YnN0aXR1dGUoVVN0
cmluZyAmc3RyaW5nLCBjb25zdCBVU3RyaW5nICZzdWJzdHJpbmcpIEtKU19GQVNUX0NBTEw7CiBz
dGF0aWMgdm9pZCBzdWJzdGl0dXRlKFVTdHJpbmcgJnN0cmluZywgY29uc3QgVVN0cmluZyAmc3Vi
c3RyaW5nKQogewpAQCAtMjc0LDEyICsyODAsMTIgQEAgc3RhdGljIGlubGluZSBjb25zdCBVU3Ry
aW5nJiBjdXJyZW50U291cmNlVVJMKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gZXhlYy0+
Y3VycmVudEJvZHkoKS0+c291cmNlVVJMKCk7CiB9CiAKLUNvbXBsZXRpb24gTm9kZTo6Y3JlYXRl
RXJyb3JDb21wbGV0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIg
Km1zZykKK0NvbXBsZXRpb24gU3RhdGVtZW50Tm9kZTo6Y3JlYXRlRXJyb3JDb21wbGV0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICByZXR1
cm4gQ29tcGxldGlvbihUaHJvdywgRXJyb3I6OmNyZWF0ZShleGVjLCBlLCBtc2csIGxpbmVObygp
LCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpKTsKIH0KIAot
Q29tcGxldGlvbiBOb2RlOjpjcmVhdGVFcnJvckNvbXBsZXRpb24oRXhlY1N0YXRlICpleGVjLCBF
cnJvclR5cGUgZSwgY29uc3QgY2hhciAqbXNnLCBjb25zdCBJZGVudGlmaWVyICZpZGVudCkKK0Nv
bXBsZXRpb24gU3RhdGVtZW50Tm9kZTo6Y3JlYXRlRXJyb3JDb21wbGV0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgSWRlbnRpZmllciAmaWRl
bnQpCiB7CiAgICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwogICAgIHN1YnN0aXR1dGUobWVzc2Fn
ZSwgaWRlbnQudXN0cmluZygpKTsKQEAgLTIwMzksMTggKzIwNDUsMTIgQEAgYm9vbCBMb2dpY2Fs
Tm90Tm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTXVsdGlwbGljYXRpdmUgTm9kZXMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBNdWx0Tm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYg
bm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQodGVybTEuZ2V0KCkpOwotICAgIG5v
ZGVTdGFjay5hcHBlbmQodGVybTIuZ2V0KCkpOwotfQotCiAvLyBFQ01BIDExLjUuMQogZG91Ymxl
IE11bHROb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBkb3VibGUgbjEgPSB0ZXJtMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUg
bjEgPSBtX2V4cHIxLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQ
VElPTk5VTUJFUgotICAgIGRvdWJsZSBuMiA9IHRlcm0yLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMp
OworICAgIGRvdWJsZSBuMiA9IG1fZXhwcjItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiAgICAg
cmV0dXJuIG4xICogbjI7CiB9CiAKQEAgLTIwNzksMTggKzIwNzksMTIgQEAgdWludDMyX3QgTXVs
dE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1Zh
bHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKIH0KIAotdm9pZCBE
aXZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZCh0ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMi5nZXQoKSk7Ci19Ci0K
IC8vIEVDTUEgMTEuNS4yCiBkb3VibGUgRGl2Tm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG91YmxlIG4xID0gdGVybTEtPmV2YWx1YXRlVG9OdW1i
ZXIoZXhlYyk7CisgICAgZG91YmxlIG4xID0gbV9leHByMS0+ZXZhbHVhdGVUb051bWJlcihleGVj
KTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICBkb3VibGUgbjIgPSB0ZXJtMi0+
ZXZhbHVhdGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbjIgPSBtX2V4cHIyLT5ldmFsdWF0
ZVRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBuMSAvIG4yOwogfQogCkBAIC0yMTE0LDE4ICsy
MTA4LDEyIEBAIHVpbnQzMl90IERpdk5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBl
eGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KGV4ZWMpKTsKIH0KIAotdm9pZCBNb2ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17
Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZCh0ZXJtMi5nZXQoKSk7Ci19Ci0KIC8vIEVDTUEgMTEuNS4zCiBkb3VibGUgTW9kTm9kZTo6aW5s
aW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG91YmxlIG4xID0g
dGVybTEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIG4xID0gbV9leHByMS0+
ZXZhbHVhdGVUb051bWJlcihleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAg
ICBkb3VibGUgbjIgPSB0ZXJtMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUg
bjIgPSBtX2V4cHIyLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBmbW9kKG4x
LCBuMik7CiB9CiAKQEAgLTIyNTEsMTkgKzIyMzksMTMgQEAgc3RhdGljIGlubGluZSBkb3VibGUg
YWRkVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSAqdjIpCiAg
ICAgcmV0dXJuIGFkZFNsb3dDYXNlVG9OdW1iZXIoZXhlYywgdjEsIHYyKTsKIH0KIAotdm9pZCBB
ZGROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZCh0ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMi5nZXQoKSk7Ci19Ci0K
IC8vIEVDTUEgMTEuNi4xCiBKU1ZhbHVlKiBBZGROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gIEpTVmFsdWUqIHYxID0gdGVybTEtPmV2YWx1YXRlKGV4ZWMpOworICBKU1ZhbHVl
KiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQogCi0gIEpTVmFsdWUqIHYyID0gdGVybTItPmV2YWx1YXRlKGV4ZWMpOworICBKU1ZhbHVlKiB2
MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQog
CiAgIHJldHVybiBhZGQoZXhlYywgdjEsIHYyKTsKQEAgLTIyNzEsMTAgKzIyNTMsMTAgQEAgSlNW
YWx1ZSogQWRkTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiBkb3VibGUgQWRkTm9k
ZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1
ZSogdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIx
LT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKICAgICAKLSAg
ICBKU1ZhbHVlKiB2MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MiA9
IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgog
ICAgIAogICAgIHJldHVybiBhZGRUb051bWJlcihleGVjLCB2MSwgdjIpOwpAQCAtMjI5Nyw5ICsy
Mjc5LDkgQEAgdWludDMyX3QgQWRkTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4
ZWMpCiAKIGRvdWJsZSBBZGROdW1iZXJzTm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG91YmxlIG4xID0gdGVybTEtPmV2YWx1YXRlVG9OdW1iZXIo
ZXhlYyk7CisgICAgZG91YmxlIG4xID0gbV9leHByMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsK
ICAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICBkb3VibGUgbjIgPSB0ZXJtMi0+ZXZh
bHVhdGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbjIgPSBtX2V4cHIyLT5ldmFsdWF0ZVRv
TnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBuMSArIG4yOwogfQogCkBAIC0yMzI1LDEwICsyMzA3
LDEwIEBAIHVpbnQzMl90IEFkZE51bWJlcnNOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0
ZSogZXhlYykKIAogSlNWYWx1ZSogQWRkU3RyaW5nc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKKyAgICBK
U1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZBTFVFCiAgICAgCi0gICAgSlNWYWx1ZSogdjIgPSB0ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7
CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQogICAgIAogICAgIHJldHVybiBqc1N0cmluZyhzdGF0aWNfY2FzdDxT
dHJpbmdJbXAqPih2MSktPnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MiktPnZh
bHVlKCkpOwpAQCAtMjMzNiwxMCArMjMxOCwxMCBAQCBKU1ZhbHVlKiBBZGRTdHJpbmdzTm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiBKU1ZhbHVlKiBBZGRTdHJpbmdMZWZ0Tm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUqIHYxID0gdGVybTEtPmV2
YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7
CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgICAKLSAgICBKU1ZhbHVlKiB2MiA9IHRl
cm0yLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRl
KGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgCiAgICAgSlNWYWx1ZSog
cDIgPSB2Mi0+dG9QcmltaXRpdmUoZXhlYywgVW5zcGVjaWZpZWRUeXBlKTsKQEAgLTIzNDgsMjgg
KzIzMzAsMjIgQEAgSlNWYWx1ZSogQWRkU3RyaW5nTGVmdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKIAogSlNWYWx1ZSogQWRkU3RyaW5nUmlnaHROb2RlOjpldmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7Cisg
ICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tF
WENFUFRJT05WQUxVRQogICAgIAotICAgIEpTVmFsdWUqIHYyID0gdGVybTItPmV2YWx1YXRlKGV4
ZWMpOworICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pT
X0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgICAKICAgICBKU1ZhbHVlKiBwMSA9IHYxLT50b1ByaW1p
dGl2ZShleGVjLCBVbnNwZWNpZmllZFR5cGUpOwogICAgIHJldHVybiBqc1N0cmluZyhwMS0+dG9T
dHJpbmcoZXhlYykgKyBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MiktPnZhbHVlKCkpOwogfQog
Ci12b2lkIFN1Yk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKHRlcm0xLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0yLmdldCgp
KTsKLX0KLQogLy8gRUNNQSAxMS42LjIKIGRvdWJsZSBTdWJOb2RlOjppbmxpbmVFdmFsdWF0ZVRv
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBkb3VibGUgbjEgPSB0ZXJtMS0+ZXZhbHVh
dGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbjEgPSBtX2V4cHIxLT5ldmFsdWF0ZVRvTnVt
YmVyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIGRvdWJsZSBuMiA9
IHRlcm0yLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBuMiA9IG1fZXhwcjIt
PmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIG4xIC0gbjI7CiB9CiAKQEAgLTIz
OTUsMTggKzIzNzEsMTIgQEAgdWludDMyX3QgU3ViTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVj
U3RhdGUqIGV4ZWMpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTaGlmdCBO
b2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBMZWZ0U2hp
ZnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZCh0ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMi5nZXQoKSk7Ci19Ci0K
IC8vIEVDTUEgMTEuNy4xCiBpbnQzMl90IExlZnRTaGlmdE5vZGU6OmlubGluZUV2YWx1YXRlVG9J
bnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaW50IGkxID0gdGVybTEtPmV2YWx1YXRlVG9J
bnQzMihleGVjKTsKKyAgICBpbnQgaTEgPSBtX2V4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7
CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgdW5zaWduZWQgaW50IGkyID0gdGVy
bTItPmV2YWx1YXRlVG9VSW50MzIoZXhlYykgJiAweDFmOworICAgIHVuc2lnbmVkIGludCBpMiA9
IG1fZXhwcjItPmV2YWx1YXRlVG9VSW50MzIoZXhlYykgJiAweDFmOwogICAgIHJldHVybiAoaTEg
PDwgaTIpOwogfQogCkBAIC0yNDMwLDE4ICsyNDAwLDEyIEBAIHVpbnQzMl90IExlZnRTaGlmdE5v
ZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBpbmxpbmVF
dmFsdWF0ZVRvSW50MzIoZXhlYyk7CiB9CiAKLXZvaWQgUmlnaHRTaGlmdE5vZGU6Om9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2Rl
U3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsK
LSAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0yLmdldCgpKTsKLX0KLQogLy8gRUNNQSAxMS43LjIK
IGludDMyX3QgUmlnaHRTaGlmdE5vZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgaW50IGkxID0gdGVybTEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAg
ICBpbnQgaTEgPSBtX2V4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OTlVNQkVSCi0gICAgdW5zaWduZWQgaW50IGkyID0gdGVybTItPmV2YWx1YXRlVG9V
SW50MzIoZXhlYykgJiAweDFmOworICAgIHVuc2lnbmVkIGludCBpMiA9IG1fZXhwcjItPmV2YWx1
YXRlVG9VSW50MzIoZXhlYykgJiAweDFmOwogICAgIHJldHVybiAoaTEgPj4gaTIpOwogfQogCkBA
IC0yNDY1LDE4ICsyNDI5LDEyIEBAIHVpbnQzMl90IFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRv
VUludDMyKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMy
KGV4ZWMpOwogfQogCi12b2lkIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6Om9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2sm
IG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKLSAgICBu
b2RlU3RhY2suYXBwZW5kKHRlcm0yLmdldCgpKTsKLX0KLQogLy8gRUNNQSAxMS43LjMKIHVpbnQz
Ml90IFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmlubGluZUV2YWx1YXRlVG9VSW50MzIoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIHVuc2lnbmVkIGludCBpMSA9IHRlcm0xLT5ldmFsdWF0ZVRvVUlu
dDMyKGV4ZWMpOworICAgIHVuc2lnbmVkIGludCBpMSA9IG1fZXhwcjEtPmV2YWx1YXRlVG9VSW50
MzIoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgdW5zaWduZWQgaW50
IGkyID0gdGVybTItPmV2YWx1YXRlVG9VSW50MzIoZXhlYykgJiAweDFmOworICAgIHVuc2lnbmVk
IGludCBpMiA9IG1fZXhwcjItPmV2YWx1YXRlVG9VSW50MzIoZXhlYykgJiAweDFmOwogICAgIHJl
dHVybiAoaTEgPj4gaTIpOwogfQogCkBAIC0yNTMyLDE4ICsyNDkwLDEyIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBsZXNzVGhhbkVxKEV4ZWNTdGF0ZSAqZXhlYywgSlNWYWx1ZSogdjEsIEpTVmFsdWUq
IHYyKQogICAgIHJldHVybiAhKHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcCo+KHAyKS0+dmFs
dWUoKSA8IHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcCo+KHAxKS0+dmFsdWUoKSk7CiB9CiAK
LXZvaWQgTGVzc05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgp
KTsKLX0KLQogLy8gRUNNQSAxMS44LjEKIGJvb2wgTGVzc05vZGU6OmlubGluZUV2YWx1YXRlVG9C
b29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFs
dWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwog
ICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5l
dmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMp
OwogICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KICAgICByZXR1cm4gbGVzc1RoYW4oZXhl
YywgdjEsIHYyKTsKIH0KQEAgLTI1NjAsOSArMjUxMiw5IEBAIGJvb2wgTGVzc05vZGU6OmV2YWx1
YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIAogYm9vbCBMZXNzTnVtYmVyc05vZGU6Omlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBkb3VibGUgbjEg
PSBleHByMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbjEgPSBtX2V4cHIx
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0g
ICAgZG91YmxlIG4yID0gZXhwcjItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CisgICAgZG91Ymxl
IG4yID0gbV9leHByMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKICAgICByZXR1cm4gbjEgPCBu
MjsKIH0KIApAQCAtMjU3OCw5ICsyNTMwLDkgQEAgYm9vbCBMZXNzTnVtYmVyc05vZGU6OmV2YWx1
YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIAogYm9vbCBMZXNzU3RyaW5nc05vZGU6Omlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2
MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2
YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1ZSog
djIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5l
dmFsdWF0ZShleGVjKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjEpLT52
YWx1ZSgpIDwgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIpLT52YWx1ZSgpOwogfQogCkBAIC0y
NTk0LDE4ICsyNTQ2LDEyIEBAIGJvb2wgTGVzc1N0cmluZ3NOb2RlOjpldmFsdWF0ZVRvQm9vbGVh
bihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4
ZWMpOwogfQogCi12b2lkIEdyZWF0ZXJOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17
Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChleHByMS5nZXQoKSk7Ci19Ci0KIC8vIEVDTUEgMTEuOC4yCiBib29sIEdyZWF0ZXJOb2RlOjpp
bmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSog
djEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5l
dmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1
ZSogdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIy
LT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCiAgICAgcmV0
dXJuIGxlc3NUaGFuKGV4ZWMsIHYyLCB2MSk7CiB9CkBAIC0yNjIwLDE4ICsyNTY2LDEyIEBAIGJv
b2wgR3JlYXRlck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSAqZXhlYykKICAgICBy
ZXR1cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7CiB9CiAKLXZvaWQgTGVzc0VxTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25T
dGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhw
cjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOwotfQotCiAvLyBF
Q01BIDExLjguMwogYm9vbCBMZXNzRXFOb2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7
CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hF
Q0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1ZSogdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhl
Yyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNf
Q0hFQ0tFWENFUFRJT05CT09MRUFOCiAgICAgcmV0dXJuIGxlc3NUaGFuRXEoZXhlYywgdjEsIHYy
KTsKIH0KQEAgLTI2NDYsMTggKzI1ODYsMTIgQEAgYm9vbCBMZXNzRXFOb2RlOjpldmFsdWF0ZVRv
Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29s
ZWFuKGV4ZWMpOwogfQogCi12b2lkIEdyZWF0ZXJFcU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nl
c3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVT
dGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKGV4cHIxLmdldCgpKTsKLX0KLQogLy8gRUNNQSAxMS44LjQKIGJvb2wgR3JlYXRl
ckVxTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogewotICAg
IEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYxID0g
bV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgot
ICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYy
ID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVB
TgogICAgIHJldHVybiBsZXNzVGhhbkVxKGV4ZWMsIHYyLCB2MSk7CiB9CkBAIC0yNjcyLDIyICsy
NjA2LDE2IEBAIGJvb2wgR3JlYXRlckVxTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KiBleGVjKQogICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKIH0KIAot
dm9pZCBJbnN0YW5jZU9mTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5v
ZGVTdGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEu
Z2V0KCkpOwotfQotCiAvLyBFQ01BIDExLjguNgogSlNWYWx1ZSogSW5zdGFuY2VPZk5vZGU6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFs
dWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwog
ICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1ZSogdjIgPSBleHByMi0+ZXZh
bHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsK
ICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgICAgaWYgKCF2Mi0+aXNPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJl
c3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNlZCB3
aXRoIGluc3RhbmNlb2Ygb3BlcmF0b3IuIiwgdjIsIGV4cHIyLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHBy
ZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNlZCB3aXRoIGluc3RhbmNl
b2Ygb3BlcmF0b3IuIiwgdjIsIG1fZXhwcjIuZ2V0KCkpOwogCiAgICAgSlNPYmplY3QqIG8yID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2Mik7CiAKQEAgLTI3MDMsMTMgKzI2MzEsMTMgQEAgSlNW
YWx1ZSogSW5zdGFuY2VPZk5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIAogYm9vbCBJ
bnN0YW5jZU9mTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogewotICAg
IEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYxID0g
bV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgot
ICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYy
ID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVB
TgogCiAgICAgaWYgKCF2Mi0+aXNPYmplY3QoKSkgewotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGFu
IG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCAnaW5zdGFuY2VvZicgb3BlcmF0b3IuIiwgdjIs
IGV4cHIyLmdldCgpKTsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1
ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5vdCBi
ZSB1c2VkIHdpdGggJ2luc3RhbmNlb2YnIG9wZXJhdG9yLiIsIHYyLCBtX2V4cHIyLmdldCgpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjcyNSwzNSArMjY1MywyOSBAQCBi
b29sIEluc3RhbmNlT2ZOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgcmV0dXJuIG8yLT5oYXNJbnN0YW5jZShleGVjLCB2MSk7CiB9CiAKLXZvaWQgSW5Ob2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5n
ZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7Ci19Ci0KIC8vIEVDTUEg
MTEuOC43CiBKU1ZhbHVlKiBJbk5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAg
ICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9
IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0g
ICAgSlNWYWx1ZSogdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIg
PSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQog
CiAgICAgaWYgKCF2Mi0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3Qg
YW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNlZCB3aXRoICdpbicgb3BlcmF0b3IuIiwgdjIsIGV4cHIy
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFs
dWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3Qg
YmUgdXNlZCB3aXRoICdpbicgb3BlcmF0b3IuIiwgdjIsIG1fZXhwcjIuZ2V0KCkpOwogCiAgICAg
cmV0dXJuIGpzQm9vbGVhbihzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYyKS0+aGFzUHJvcGVydHko
ZXhlYywgSWRlbnRpZmllcih2MS0+dG9TdHJpbmcoZXhlYykpKSk7CiB9CiAKIGJvb2wgSW5Ob2Rl
OjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEg
PSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFs
dWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1ZSog
djIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5l
dmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCiAKICAgICBpZiAo
IXYyLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAi
VmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5u
b3QgYmUgdXNlZCB3aXRoICdpbicgb3BlcmF0b3IuIiwgdjIsIGV4cHIyLmdldCgpKTsKKyAgICAg
ICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJl
c3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5vdCBiZSB1c2VkIHdpdGggJ2luJyBvcGVy
YXRvci4iLCB2MiwgbV9leHByMi5nZXQoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTI3NjIsMTggKzI2ODQsMTIgQEAgYm9vbCBJbk5vZGU6OmV2YWx1YXRlVG9Cb29sZWFu
KEV4ZWNTdGF0ZSAqZXhlYykKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVx
dWFsaXR5IE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lk
IEVxdWFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5h
cHBlbmQoZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOwot
fQotCiAvLyBFQ01BIDExLjkuMQogYm9vbCBFcXVhbE5vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0
ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAg
IEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5ldmFs
dWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwog
ICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KICAgICAKICAgICByZXR1cm4gZXF1YWwoZXhl
YywgdjEsIHYyKTsKQEAgLTI3ODksMTggKzI3MDUsMTIgQEAgYm9vbCBFcXVhbE5vZGU6OmV2YWx1
YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVU
b0Jvb2xlYW4oZXhlYyk7CiB9CiAKLXZvaWQgTm90RXF1YWxOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBu
b2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7Ci19Ci0KIC8vIEVDTUEgMTEuOS4yCiBib29sIE5v
dEVxdWFsTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYx
ID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVB
TgotICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUq
IHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9P
TEVBTgogCiAgICAgcmV0dXJuICFlcXVhbChleGVjLHYxLCB2Mik7CkBAIC0yODE2LDE4ICsyNzI2
LDEyIEBAIGJvb2wgTm90RXF1YWxOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogfQogCi12b2lk
IFN0cmljdEVxdWFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2Rl
KiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVT
dGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0
KCkpOwotfQotCiAvLyBFQ01BIDExLjkuNAogYm9vbCBTdHJpY3RFcXVhbE5vZGU6OmlubGluZUV2
YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4
cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9
IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1
YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KIAogICAgIHJldHVybiBz
dHJpY3RFcXVhbChleGVjLHYxLCB2Mik7CkBAIC0yODQzLDE4ICsyNzQ3LDEyIEBAIGJvb2wgU3Ry
aWN0RXF1YWxOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0
dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogfQogCi12b2lkIE5vdFN0cmljdEVx
dWFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBl
bmQoZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOwotfQot
CiAvLyBFQ01BIDExLjkuNQogYm9vbCBOb3RTdHJpY3RFcXVhbE5vZGU6OmlubGluZUV2YWx1YXRl
VG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5l
dmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMp
OwogICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIy
LT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4
ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KIAogICAgIHJldHVybiAhc3RyaWN0
RXF1YWwoZXhlYyx2MSwgdjIpOwpAQCAtMjg3MiwxOCArMjc3MCwxMiBAQCBib29sIE5vdFN0cmlj
dEVxdWFsTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQml0IE9wZXJhdGlvbiBOb2RlcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgQml0QW5kTm9kZTo6b3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOwotICAg
IG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOwotfQotCiAvLyBFQ01BIDExLjEwCiBKU1Zh
bHVlKiBCaXRBbmROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7ICAgIAotICAgIEpT
VmFsdWUgKnYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUgKnYxID0gbV9l
eHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBK
U1ZhbHVlICp2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlICp2MiA9IG1f
ZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAg
ICByZXR1cm4ganNOdW1iZXJGcm9tQW5kKGV4ZWMsIHYxLCB2Mik7CkBAIC0yODkxLDkgKzI3ODMs
OSBAQCBKU1ZhbHVlKiBCaXRBbmROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAKIGlu
dDMyX3QgQml0QW5kTm9kZTo6aW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBpbnQzMl90IGkxID0gZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBp
bnQzMl90IGkxID0gbV9leHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIEtKU19DSEVD
S0VYQ0VQVElPTk5VTUJFUgotICAgIGludDMyX3QgaTIgPSBleHByMi0+ZXZhbHVhdGVUb0ludDMy
KGV4ZWMpOworICAgIGludDMyX3QgaTIgPSBtX2V4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7
CiAgICAgcmV0dXJuIChpMSAmIGkyKTsKIH0KIApAQCAtMjkxNywxNyArMjgwOSwxMSBAQCB1aW50
MzJfdCBCaXRBbmROb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKICAgICBy
ZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogfQogCi12b2lkIEJpdFhPck5vZGU6
Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIy
LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgpKTsKLX0KLQogaW50MzJf
dCBCaXRYT3JOb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGludCBpMSA9IGV4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgaW50IGkxID0g
bV9leHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5V
TUJFUgotICAgIGludCBpMiA9IGV4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgaW50
IGkyID0gbV9leHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIHJldHVybiAoaTEgXiBp
Mik7CiB9CiAKQEAgLTI5NTYsMTcgKzI4NDIsMTEgQEAgdWludDMyX3QgQml0WE9yTm9kZTo6ZXZh
bHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGlubGluZUV2YWx1YXRl
VG9JbnQzMihleGVjKTsKIH0KIAotdm9pZCBCaXRPck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nl
c3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVT
dGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKGV4cHIxLmdldCgpKTsKLX0KLQogaW50MzJfdCBCaXRPck5vZGU6OmlubGluZUV2
YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaW50IGkxID0gZXhwcjEtPmV2
YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBpbnQgaTEgPSBtX2V4cHIxLT5ldmFsdWF0ZVRvSW50
MzIoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgaW50IGkyID0gZXhw
cjItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBpbnQgaTIgPSBtX2V4cHIyLT5ldmFsdWF0
ZVRvSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIChpMSB8IGkyKTsKIH0KIApAQCAtMjk5Nyw1MyAr
Mjg3Nyw0MSBAQCB1aW50MzJfdCBCaXRPck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRl
KiBleGVjKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmluYXJ5IExvZ2lj
YWwgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIExvZ2ljYWxBbmRO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChl
eHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7Ci19Ci0KIC8v
IEVDTUEgMTEuMTEKIEpTVmFsdWUqIExvZ2ljYWxBbmROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAg
SlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQogICAgIGJvb2wgYjEgPSB2MS0+dG9Cb29sZWFuKGV4ZWMpOwogICAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgaWYgKCFiMSkKICAgICAgICAgcmV0dXJuIHYxOwotICAg
IEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYyID0g
bV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAg
ICByZXR1cm4gdjI7CiB9CiAKIGJvb2wgTG9naWNhbEFuZE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFu
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBib29sIGIgPSBleHByMS0+ZXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7CisgICAgYm9vbCBiID0gbV9leHByMS0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7
CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiBiICYmIGV4cHIyLT5l
dmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotdm9pZCBMb2dpY2FsT3JOb2RlOjpvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7
Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7CisgICAgcmV0dXJuIGIgJiYgbV9l
eHByMi0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7CiB9CiAKIEpTVmFsdWUqIExvZ2ljYWxPck5v
ZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIx
LT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4
ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgaWYgKHYxLT50b0Jvb2xlYW4o
ZXhlYykpCiAgICAgICAgIHJldHVybiB2MTsKLSAgICByZXR1cm4gZXhwcjItPmV2YWx1YXRlKGV4
ZWMpOworICAgIHJldHVybiBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKIH0KIAogYm9vbCBMb2dp
Y2FsT3JOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYm9v
bCBiID0gZXhwcjEtPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wgYiA9IG1fZXhw
cjEtPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xF
QU4KLSAgICByZXR1cm4gYiB8fCBleHByMi0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7CisgICAg
cmV0dXJuIGIgfHwgbV9leHByMi0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25kaXRpb25hbE5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMu
aCBiL0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCmluZGV4IDBkNGE0N2QuLmJhOWQ3NzQgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCisrKyBiL0phdmFTY3JpcHRDb3Jl
L2tqcy9ub2Rlcy5oCkBAIC0xMjYsNyArMTI2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAv
LyBTZXJpYWxpemF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMID0gMDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0ID0gMDsKIAogICAgIC8vIFVzZWQgZm9yIGl0ZXJhdGl2ZSwgZGVwdGgtZmly
c3QgdHJhdmVyc2FsIG9mIHRoZSBub2RlIHRyZWUuIERvZXMgbm90IGNyb3NzIGZ1bmN0aW9uIGNh
bGwgYm91bmRhcmllcy4KICAgICBib29sIG1heUhhdmVEZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX21heUhhdmVEZWNsYXJhdGlvbnM7IH0KQEAgLTEzNyw4ICsxMzYsNiBAQCBuYW1lc3Bh
Y2UgS0pTIHsKIAogICBwcm90ZWN0ZWQ6CiAgICAgTm9kZShKU1R5cGUpIEtKU19GQVNUX0NBTEw7
IC8vIHVzZWQgYnkgRXhwcmVzc2lvbk5vZGUKLSAgICBDb21wbGV0aW9uIGNyZWF0ZUVycm9yQ29t
cGxldGlvbihFeGVjU3RhdGUgKiwgRXJyb3JUeXBlLCBjb25zdCBjaGFyICptc2cpIEtKU19GQVNU
X0NBTEw7Ci0gICAgQ29tcGxldGlvbiBjcmVhdGVFcnJvckNvbXBsZXRpb24oRXhlY1N0YXRlICos
IEVycm9yVHlwZSwgY29uc3QgY2hhciAqbXNnLCBjb25zdCBJZGVudGlmaWVyICYpIEtKU19GQVNU
X0NBTEw7CiAKICAgICBKU1ZhbHVlKiB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSosIEVycm9yVHlwZSwg
Y29uc3QgY2hhciogbXNnKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUqIHRocm93RXJyb3Io
RXhlY1N0YXRlKiwgRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtc2csIGNvbnN0IGNoYXIqKSBLSlNf
RkFTVF9DQUxMOwpAQCAtMTc4LDYgKzE3NSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAK
ICAgICAgICAgSlNUeXBlIGV4cGVjdGVkUmV0dXJuVHlwZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNUeXBlPihtX2V4cGVjdGVkUmV0dXJuVHlwZSk7IH0KICAg
ICAgICAgCisgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pT
X0ZBU1RfQ0FMTCA9IDA7CisgICAgICAgIAogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1
YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEwgPSAwOwogICAgICAgICB2aXJ0dWFsIGRvdWJs
ZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZp
cnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
QEAgLTE4OCwxNiArMTg3LDMzIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVGb3JVbm5lY2Vzc2FyeVJlc3VsdCgpIHsgfQogICAgfTsKIAorICAgIGNsYXNz
IEJpbmFyeU9wZXJhdG9yTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgcHVibGlj
OgorICAgICAgICBCaW5hcnlPcGVyYXRvck5vZGUoSlNUeXBlIHJldHVyblR5cGUsIEV4cHJlc3Np
b25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKQorICAgICAgICAgICAgOiBFeHByZXNzaW9u
Tm9kZShyZXR1cm5UeXBlKSwgbV9leHByMShlMSksIG1fZXhwcjIoZTIpIHt9CisgICAgICAgIAor
ICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlO
b2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CisgICAg
ICAgIAorICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25z
dCBLSlNfRkFTVF9DQUxMID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CisgICAgICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gbV9leHByMjsKKyAgICB9OworCiAgIGNsYXNzIFN0YXRlbWVudE5vZGUgOiBwdWJsaWMg
Tm9kZSB7CiAgIHB1YmxpYzoKICAgICBTdGF0ZW1lbnROb2RlKCkgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2b2lkIHNldExvYyhpbnQgbGluZTAsIGludCBsaW5lMSkgS0pTX0ZBU1RfQ0FMTDsKICAgICBp
bnQgZmlyc3RMaW5lKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBsaW5lTm8oKTsgfQog
ICAgIGludCBsYXN0TGluZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9sYXN0TGlu
ZTsgfQorCiAgICAgYm9vbCBoaXRTdGF0ZW1lbnQoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpIEtKU19GQVNU
X0NBTEwgPSAwOwogICAgIHZvaWQgcHVzaExhYmVsKGNvbnN0IElkZW50aWZpZXIgJmlkKSBLSlNf
RkFTVF9DQUxMIHsgbHMucHVzaChpZCk7IH0KLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lv
bjsgfQorCisgICAgQ29tcGxldGlvbiBjcmVhdGVFcnJvckNvbXBsZXRpb24oRXhlY1N0YXRlICos
IEVycm9yVHlwZSwgY29uc3QgY2hhciAqbXNnKSBLSlNfRkFTVF9DQUxMOworICAgIENvbXBsZXRp
b24gY3JlYXRlRXJyb3JDb21wbGV0aW9uKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IGNo
YXIgKm1zZywgY29uc3QgSWRlbnRpZmllciAmKSBLSlNfRkFTVF9DQUxMOwogICBwcm90ZWN0ZWQ6
CiAgICAgTGFiZWxTdGFjayBsczsKICAgcHJpdmF0ZToKQEAgLTIwOSw3ICsyMjUsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBOdWxsTm9kZSgpIEtKU19GQVNUX0NBTEwgOiBFeHByZXNzaW9uTm9k
ZShOdWxsVHlwZSkge30KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQog
ICB9OwogCiAgIGNsYXNzIEZhbHNlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC0y
MTgsNyArMjM0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFs
dWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0
ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQ
cmVjUHJpbWFyeTsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
S0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogICB9OwogCiAgIGNsYXNzIFRy
dWVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTIyNyw3ICsyNDMsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KKyAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1
cm4gUHJlY1ByaW1hcnk7IH0KICAgfTsKIAogICBjbGFzcyBOdW1iZXJOb2RlIDogcHVibGljIEV4
cHJlc3Npb25Ob2RlIHsKQEAgLTIzOSw3ICsyNTUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2
aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogCiAgICAg
dmlydHVhbCBib29sIGlzTnVtYmVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVl
OyB9CiAgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX2Rv
dWJsZTsgfQpAQCAtMjY4LDcgKzI4NCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwg
ZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNQcmltYXJ5OyB9CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9CiAKICAgcHJpdmF0ZToKICAg
ICBVU3RyaW5nIG1fdmFsdWU7CkBAIC0yODIsNyArMjk4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgfQogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQ
cmVjUHJpbWFyeTsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
S0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogICBwcml2YXRlOgogICAgIFJl
ZlB0cjxSZWdFeHA+IG1fcmVnRXhwOwogICB9OwpAQCAtMjkyLDcgKzMwOCw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIFRoaXNOb2RlKCkgS0pTX0ZBU1RfQ0FMTCB7fQogICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9
CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxM
IHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9CiAgfTsKIAogICBjbGFzcyBSZXNvbHZlTm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC0zMTcsNyArMzMzLDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0K
IAogICAgIHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJl
dHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVzb2x2ZU5vZGUoKSBjb25zdCBLSlNf
RkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KQEAgLTM1Miw3ICszNjgsNiBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBFbGVtZW50Tm9kZShpbnQgZSwgRXhwcmVzc2lvbk5vZGUqIG4pIEtKU19GQVNU
X0NBTEwgOiBlbGlzaW9uKGUpLCBub2RlKG4pIHsgfQogICAgIEVsZW1lbnROb2RlKEVsZW1lbnRO
b2RlKiBsLCBpbnQgZSwgRXhwcmVzc2lvbk5vZGUqIG4pIEtKU19GQVNUX0NBTEwKICAgICAgIDog
ZWxpc2lvbihlKSwgbm9kZShuKSB7IGwtPm5leHQgPSB0aGlzOyB9Ci0gICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
UHJlY0V4cHJlc3Npb247IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYp
IEtKU19GQVNUX0NBTEw7CiAKQEAgLTM3Nyw3ICszOTIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwg
RGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1h
cnk7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNU
X0NBTEwgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KICAgcHJpdmF0ZToKICAgICBSZWZQdHI8RWxl
bWVudE5vZGU+IGVsZW1lbnQ7CiAgICAgaW50IGVsaXNpb247CkBAIC0zOTEsNyArNDA2LDYgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICA6IG1fbmFtZShuKSwgYXNzaWduKGEpLCB0eXBlKHQpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5v
ZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
LSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCiAgICAgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CkBAIC00MTEsNyArNDI1LDYgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICA6IG5vZGUobikgeyBsLT5uZXh0ID0gdGhpczsgfQogICAgIHZpcnR1YWwg
dm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBQcmVjRXhwcmVzc2lvbjsgfQogCiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgICBQYXNzUmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IHJlbGVhc2VO
ZXh0KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBuZXh0LnJlbGVhc2UoKTsgfQpAQCAtNDI5LDcg
KzQ0Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjUHJpbWFyeTsg
fQogICBwcml2YXRlOgogICAgIFJlZlB0cjxQcm9wZXJ0eUxpc3ROb2RlPiBsaXN0OwogICB9OwpA
QCAtNDQ0LDcgKzQ1Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgaW50MzJfdCBl
dmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHVp
bnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
LSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNN
ZW1iZXI7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gUHJlY01lbWJlcjsgfQogCiAgICAgdmlydHVhbCBib29sIGlzTG9j
YXRpb24oKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNCcmFja2V0QWNjZXNzb3JOb2RlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVy
biB0cnVlOyB9CkBAIC00NjcsNyArNDgwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVh
bCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY01lbWJlcjsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjTWVtYmVyOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNMb2NhdGlvbigpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0RvdEFjY2Vzc29yTm9kZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwg
eyByZXR1cm4gdHJ1ZTsgfQpAQCAtNDg3LDcgKzUwMCw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgOiBleHByKGUpIHsgbC0+bmV4dCA9IHRoaXM7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJl
c3Npb247IH0KIAogICAgIHZvaWQgZXZhbHVhdGVMaXN0KEV4ZWNTdGF0ZSosIExpc3QmKSBLSlNf
RkFTVF9DQUxMOwogICAgIFBhc3NSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4gcmVsZWFzZU5leHQo
KSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CkBAIC01MDUsNyArNTE3
LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICA6IGxpc3ROb2RlKGwpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCiAgICAgdm9pZCBldmFsdWF0ZUxpc3QoRXhlY1N0YXRl
KiBleGVjLCBMaXN0JiBsaXN0KSBLSlNfRkFTVF9DQUxMIHsgaWYgKGxpc3ROb2RlKSBsaXN0Tm9k
ZS0+ZXZhbHVhdGVMaXN0KGV4ZWMsIGxpc3QpOyB9CiAKQEAgLTUyNCw3ICs1MzUsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4o
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNMZWZ0SGFuZFNpZGU7IH0KKyAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4g
UHJlY0xlZnRIYW5kU2lkZTsgfQogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSogaW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBleHByOwpAQCAtNTM3LDcgKzU0OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwg
dm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUq
IGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQorICAgIHZp
cnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVy
biBQcmVjQ2FsbDsgfQogICBwcml2YXRlOgogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhw
cjsKICAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKQEAgLTU2NSw3ICs1NzYsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUlu
dDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQorICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVj
Q2FsbDsgfQogCiAgIHByb3RlY3RlZDoKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGlu
ZUV2YWx1YXRlKEV4ZWNTdGF0ZSopOwpAQCAtNTk4LDcgKzYwOSw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5v
ZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
Q2FsbDsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZB
U1RfQ0FMTCB7IHJldHVybiBQcmVjQ2FsbDsgfQogICBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBiYXNlOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gc3Vic2NyaXB0
OwpAQCAtNjE1LDcgKzYyNiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgaW50MzJf
dCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNDYWxsOyB9CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNf
RkFTVF9DQUxMIHsgcmV0dXJuIFByZWNDYWxsOyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKICAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IGJhc2U7CkBAIC02NTAsNyArNjYxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0
Zml4OyB9CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFT
VF9DQUxMIHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
Rm9yVW5uZWNlc3NhcnlSZXN1bHQoKTsKIAogICB9OwpAQCAtNjgwLDcgKzY5MSw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJl
dHVybiBQcmVjUG9zdGZpeDsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjUG9zdGZpeDsgfQogICAgIHZpcnR1YWwg
dm9pZCBvcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVzdWx0KCk7CiAgIH07CiAKQEAgLTcwOCw3ICs3
MTksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBQb3N0Zml4QnJhY2tldE5vZGUoRXhwcmVzc2lv
bk5vZGUqIGIsIEV4cHJlc3Npb25Ob2RlKiBzKSBLSlNfRkFTVF9DQUxMIDogbV9iYXNlKGIpLCBt
X3N1YnNjcmlwdChzKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CiAgIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaXNJbmNyZW1lbnQoKSBjb25zdCA9IDA7CiAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7CkBAIC03MzYsNyArNzQ3LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgUG9zdGZpeERvdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGIsIGNvbnN0IElkZW50
aWZpZXImIGkpIEtKU19GQVNUX0NBTEwgOiBtX2Jhc2UoYiksIG1faWRlbnQoaSkge30KICAgICB2
aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUG9zdGZpeDsg
fQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FM
TCB7IHJldHVybiBQcmVjUG9zdGZpeDsgfQogICBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29s
IGlzSW5jcmVtZW50KCkgY29uc3QgPSAwOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9i
YXNlOwpAQCAtNzY0LDcgKzc3NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFBvc3RmaXhFcnJv
ck5vZGUoRXhwcmVzc2lvbk5vZGUqIGUsIE9wZXJhdG9yIG8pIEtKU19GQVNUX0NBTEwgOiBtX2V4
cHIoZSksIG1fb3BlcihvKSB7fQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CisgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIFByZWNQb3N0Zml4
OyB9CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgICAg
T3BlcmF0b3IgbV9vcGVyOwpAQCAtNzgyLDcgKzc5Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7
IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NB
TEwgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAgIHByaXZhdGU6CiAgICAgSWRlbnRpZmllciBtX2lk
ZW50OwogICB9OwpAQCAtODAzLDcgKzgxNCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KKyAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyBy
ZXR1cm4gUHJlY1VuYXJ5OyB9CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBtX2Jhc2U7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3N1YnNjcmlwdDsKQEAgLTgx
NSw3ICs4MjYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CisgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIFByZWNVbmFyeTsg
fQogICBwcml2YXRlOgogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgIElk
ZW50aWZpZXIgbV9pZGVudDsKQEAgLTgyNyw3ICs4MzgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwg
RGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5
OyB9CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIFByZWNVbmFyeTsgfQogICBwcml2YXRlOgogICAgIFJlZlB0cjxFeHByZXNz
aW9uTm9kZT4gbV9leHByOwogICB9OwpAQCAtODM4LDcgKzg0OSw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5v
ZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
VW5hcnk7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBleHByOwogICB9OwpAQCAtODU5LDcgKzg3MCw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIAogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjVW5hcnk7IH0KIAogICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IG1faWRlbnQ7IH0KIApAQCAtODg3LDcgKzg5OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNs
YXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0K
KyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwg
eyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX2V4cHI7CiAgIH07CkBAIC05MDgsNyArOTE5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAK
ICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjVW5hcnk7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAgIH07CiAKICAgY2xhc3MgUHJl
SW5jTG9jYWxWYXJOb2RlIDogcHVibGljIFByZUluY1Jlc29sdmVOb2RlIHsKQEAgLTkzOSw3ICs5
NTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQorICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjVW5h
cnk7IH0KICAgfTsKIAogICBjbGFzcyBQcmVEZWNMb2NhbFZhck5vZGUgOiBwdWJsaWMgUHJlRGVj
UmVzb2x2ZU5vZGUgewpAQCAtOTYwLDcgKzk3MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUq
LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFy
eTsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZBU1Rf
Q0FMTCB7IHJldHVybiBQcmVjVW5hcnk7IH0KICAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9v
bCBpc0luY3JlbWVudCgpIGNvbnN0ID0gMDsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1f
YmFzZTsKQEAgLTk4OCw3ICs5OTksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBQcmVmaXhEb3RO
b2RlKEV4cHJlc3Npb25Ob2RlKiBiLCBjb25zdCBJZGVudGlmaWVyJiBpKSBLSlNfRkFTVF9DQUxM
IDogbV9iYXNlKGIpLCBtX2lkZW50KGkpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1Bvc3RmaXg7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY1Bvc3RmaXg7
IH0KICAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBpc0luY3JlbWVudCgpIGNvbnN0ID0g
MDsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fYmFzZTsKQEAgLTEwMTYsNyArMTAyNyw3
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFByZWZpeEVycm9yTm9kZShFeHByZXNzaW9uTm9kZSog
ZSwgT3BlcmF0b3IgbykgS0pTX0ZBU1RfQ0FMTCA6IG1fZXhwcihlKSwgbV9vcGVyKG8pIHt9CiAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY1VuYXJ5OyB9CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBL
SlNfRkFTVF9DQUxMIHsgcmV0dXJuIFByZWNVbmFyeTsgfQogICBwcml2YXRlOgogICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICAgIE9wZXJhdG9yIG1fb3BlcjsKQEAgLTEwMzIs
NyArMTA0Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0
ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHVpbnQzMl90
IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsg
fQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FM
TCB7IHJldHVybiBQcmVjVW5hcnk7IH0KICAgcHJpdmF0ZToKICAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IG1fZXhwcjsKICAgfTsKQEAgLTEwNDQsNyArMTA1NSw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCB7IHJldHVybiBQcmVjVW5hcnk7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAgIHByaXZhdGU6
CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwogICB9OwpAQCAtMTA1OSw3ICsxMDcw
LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQz
MihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVh
dGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CisgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuIFByZWNVbmFyeTsgfQogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKik7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBleHByOwpAQCAtMTA3Miw3NSArMTA4Myw2NCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjVW5hcnk7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAgIHByaXZhdGU6CiAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwogICB9OwogICAKLSAgY2xhc3MgTXVsdE5vZGUgOiBw
dWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICBjbGFzcyBNdWx0Tm9kZSA6IHB1YmxpYyBCaW5hcnlP
cGVyYXRvck5vZGUgewogICBwdWJsaWM6Ci0gICAgICBNdWx0Tm9kZShFeHByZXNzaW9uTm9kZSog
dDEsIEV4cHJlc3Npb25Ob2RlKiB0MikgS0pTX0ZBU1RfQ0FMTCA6IEV4cHJlc3Npb25Ob2RlKE51
bWJlclR5cGUpLCB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQotICAgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOworICAgICAgTXVsdE5vZGUoRXhwcmVzc2lvbk5v
ZGUqIHQxLCBFeHByZXNzaW9uTm9kZSogdDIpIEtKU19GQVNUX0NBTEwKKyAgICAgICAgOiBCaW5h
cnlPcGVyYXRvck5vZGUoTnVtYmVyVHlwZSwgdDEsIHQyKSB7fQogICAgICAgdmlydHVhbCBKU1Zh
bHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBk
b3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
dmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTXVsdGlwbGljaXRhdmU7IH0KKyAgICAgIHZp
cnR1YWwgY29uc3QgY2hhciogb3BlcmF0b3JBc1N0cmluZygpIGNvbnN0IEtKU19GQVNUX0NBTEwg
eyByZXR1cm4gIioiOyB9CisgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY011bHRpcGxpY2l0YXZlOyB9CiAgIHByaXZh
dGU6CiAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4
ZWNTdGF0ZSopOwotICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKLSAgICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CiAgIH07CiAgIAotICBjbGFzcyBEaXZOb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgY2xhc3MgRGl2Tm9kZSA6IHB1YmxpYyBCaW5hcnlP
cGVyYXRvck5vZGUgewogICBwdWJsaWM6Ci0gICAgICBEaXZOb2RlKEV4cHJlc3Npb25Ob2RlKiB0
MSwgRXhwcmVzc2lvbk5vZGUqIHQyKSBLSlNfRkFTVF9DQUxMIDogRXhwcmVzc2lvbk5vZGUoTnVt
YmVyVHlwZSksIHRlcm0xKHQxKSwgdGVybTIodDIpIHt9Ci0gICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CisgICAgICBEaXZOb2RlKEV4cHJlc3Npb25Ob2Rl
KiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQyKSBLSlNfRkFTVF9DQUxMIDogQmluYXJ5T3BlcmF0b3JO
b2RlKE51bWJlclR5cGUsIHQxLCB0MikgIHt9CiAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1
YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFs
dWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIGlu
dDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2
aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwotICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjTXVsdGlwbGljaXRhdmU7IH0KKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhciog
b3BlcmF0b3JBc1N0cmluZygpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gIi8iOyB9Cisg
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwg
eyByZXR1cm4gUHJlY011bHRpcGxpY2l0YXZlOyB9CiAgIHByaXZhdGU6CiAgICAgICBBTFdBWVNf
SU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopOwotICAgICAg
UmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKLSAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gdGVybTI7CiAgIH07CiAgIAotICBjbGFzcyBNb2ROb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlIHsKKyAgY2xhc3MgTW9kTm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5vZGUgewogICBw
dWJsaWM6Ci0gICAgICBNb2ROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUq
IHQyKSBLSlNfRkFTVF9DQUxMIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIHRlcm0xKHQx
KSwgdGVybTIodDIpIHt9Ci0gICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19G
QVNUX0NBTEw7CisgICAgICBNb2ROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5v
ZGUqIHQyKSBLSlNfRkFTVF9DQUxMIDogQmluYXJ5T3BlcmF0b3JOb2RlKE51bWJlclR5cGUsIHQx
LCB0Mikge30KICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVh
bihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1
YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB1aW50
MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y011bHRpcGxpY2l0YXZlOyB9CisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNT
dHJpbmcoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuICIlIjsgfQorICAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIFBy
ZWNNdWx0aXBsaWNpdGF2ZTsgfQogICBwcml2YXRlOgogICAgICAgQUxXQVlTX0lOTElORSBkb3Vi
bGUgaW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKTsKLSAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gdGVybTE7Ci0gICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0yOwog
ICB9OwogCi0gIGNsYXNzIEFkZE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICBjbGFz
cyBBZGROb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBB
ZGROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQyKSBLSlNfRkFTVF9D
QUxMIDogdGVybTEodDEpLCB0ZXJtMih0Mikge30KLSAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CisgICAgQWRkTm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4
cHJlc3Npb25Ob2RlKiB0MikgS0pTX0ZBU1RfQ0FMTCA6IEJpbmFyeU9wZXJhdG9yTm9kZShPYmpl
Y3RUeXBlLCB0MSwgdDIpIHt9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVU
b0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB1aW50MzJfdCBl
dmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQWRkaXRpdmU7
IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25zdCBLSlNf
RkFTVF9DQUxMIHsgcmV0dXJuICIrIjsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjQWRkaXRpdmU7IH0KICAgcHJv
dGVjdGVkOgotICAgIEFkZE5vZGUoRXhwcmVzc2lvbk5vZGUqIHQxLCBFeHByZXNzaW9uTm9kZSog
dDIsIEpTVHlwZSBleHBlY3RlZFJldHVybikgS0pTX0ZBU1RfQ0FMTCA6IEV4cHJlc3Npb25Ob2Rl
KGV4cGVjdGVkUmV0dXJuKSwgdGVybTEodDEpLCB0ZXJtMih0Mikge30KLSAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IHRlcm0xOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7Cisg
ICAgQWRkTm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Npb25Ob2RlKiB0MiwgSlNUeXBl
IGV4cGVjdGVkUmV0dXJuKSBLSlNfRkFTVF9DQUxMIDogQmluYXJ5T3BlcmF0b3JOb2RlKGV4cGVj
dGVkUmV0dXJuLCB0MSwgdDIpIHt9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBkb3Vi
bGUgaW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKTsKICAgfTsKQEAgLTExNzQsODcg
KzExNzQsNzEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB9OwogCi0gIGNsYXNzIFN1Yk5v
ZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICBjbGFzcyBTdWJOb2RlIDogcHVibGljIEJp
bmFyeU9wZXJhdG9yTm9kZSB7CiAgIHB1YmxpYzoKLSAgICAgIFN1Yk5vZGUoRXhwcmVzc2lvbk5v
ZGUqIHQxLCBFeHByZXNzaW9uTm9kZSogdDIpIEtKU19GQVNUX0NBTEwgOiBFeHByZXNzaW9uTm9k
ZShOdW1iZXJUeXBlKSwgdGVybTEodDEpLCB0ZXJtMih0Mikge30KLSAgICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIFN1Yk5vZGUoRXhwcmVzc2lv
bk5vZGUqIHQxLCBFeHByZXNzaW9uTm9kZSogdDIpIEtKU19GQVNUX0NBTEwgOiBCaW5hcnlPcGVy
YXRvck5vZGUoTnVtYmVyVHlwZSwgdDEsIHQyKSB7fQogICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBkb3VibGUg
ZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVh
bCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAg
ICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7Ci0gICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9w
ZXJhdG9yQXNTdHJpbmcoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuICItIjsgfQorICAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsg
cmV0dXJuIFByZWNBZGRpdGl2ZTsgfQogICBwcml2YXRlOgogICAgICAgQUxXQVlTX0lOTElORSBk
b3VibGUgaW5saW5lRXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKTsKLSAgICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gdGVybTE7Ci0gICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0y
OwogICB9OwogCi0gIGNsYXNzIExlZnRTaGlmdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUg
eworICBjbGFzcyBMZWZ0U2hpZnROb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9kZSB7CiAg
IHB1YmxpYzoKICAgICBMZWZ0U2hpZnROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lv
bk5vZGUqIHQyKSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5
cGUpLCB0ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQotICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgIDogQmluYXJ5T3BlcmF0b3JOb2RlKE51bWJlclR5
cGUsIHQxLCB0Mikge30KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50
MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1
YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNTaGlmdDsgfQorICAg
IHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0b3JBc1N0cmluZygpIGNvbnN0IEtKU19GQVNUX0NB
TEwgeyByZXR1cm4gIjw8IjsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjU2hpZnQ7IH0KICAgcHJpdmF0ZToKICAg
ICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSop
OwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTE7Ci0gICAgUmVmUHRyPEV4cHJlc3Np
b25Ob2RlPiB0ZXJtMjsKICAgfTsKIAotICBjbGFzcyBSaWdodFNoaWZ0Tm9kZSA6IHB1YmxpYyBF
eHByZXNzaW9uTm9kZSB7CisgIGNsYXNzIFJpZ2h0U2hpZnROb2RlIDogcHVibGljIEJpbmFyeU9w
ZXJhdG9yTm9kZSB7CiAgIHB1YmxpYzoKICAgICBSaWdodFNoaWZ0Tm9kZShFeHByZXNzaW9uTm9k
ZSogdDEsIEV4cHJlc3Npb25Ob2RlKiB0MikgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBFeHByZXNz
aW9uTm9kZShOdW1iZXJUeXBlKSwgdGVybTEodDEpLCB0ZXJtMih0Mikge30KLSAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CisgICAgICA6IEJpbmFyeU9wZXJh
dG9yTm9kZShOdW1iZXJUeXBlLCB0MSwgdDIpIHt9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFs
dWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGludDMy
X3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQ
cmVjU2hpZnQ7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBj
b25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuICI+PiI7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY1NoaWZ0OyB9
CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9J
bnQzMihFeGVjU3RhdGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0xOwotICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CiAgIH07CiAKLSAgY2xhc3MgVW5zaWduZWRS
aWdodFNoaWZ0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgIGNsYXNzIFVuc2lnbmVk
UmlnaHRTaGlmdE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKICAgcHVibGljOgog
ICAgIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUoRXhwcmVzc2lvbk5vZGUqIHQxLCBFeHByZXNzaW9u
Tm9kZSogdDIpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlw
ZSksIHRlcm0xKHQxKSwgdGVybTIodDIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOworICAgICAgOiBCaW5hcnlPcGVyYXRvck5vZGUoTnVtYmVyVHlw
ZSwgdDEsIHQyKSB7fQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQz
MihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVh
dGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1NoaWZ0OyB9CisgICAg
dmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgY29uc3QgS0pTX0ZBU1RfQ0FM
TCB7IHJldHVybiAiPj4+IjsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjU2hpZnQ7IH0KICAgcHJpdmF0ZToKICAg
ICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGlubGluZUV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRl
Kik7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKLSAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IHRlcm0yOwogICB9OwogCi0gIGNsYXNzIExlc3NOb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlIHsKKyAgY2xhc3MgTGVzc05vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2Rl
IHsKICAgcHVibGljOgogICAgIExlc3NOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lv
bk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IEV4cHJlc3Npb25Ob2RlKEJvb2xlYW5U
eXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KLSAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CisgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShCb29sZWFu
VHlwZSwgZTEsIGUyKSB7fQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CisgICAgdmlydHVhbCBj
b25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVy
biAiPCI7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KICAgcHJpdmF0ZToKICAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKik7Ci0gIHBy
b3RlY3RlZDoKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKICAgICBjbGFzcyBMZXNzTnVtYmVyc05vZGUg
OiBwdWJsaWMgTGVzc05vZGUgewpAQCAtMTI3NywyMjQgKzEyNjEsMTgyIEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4o
RXhlY1N0YXRlKik7CiAgICAgfTsKIAotICBjbGFzcyBHcmVhdGVyTm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CisgIGNsYXNzIEdyZWF0ZXJOb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9y
Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBHcmVhdGVyTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4
cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTCA6Ci0gICAgICBleHByMShlMSksIGV4cHIy
KGUyKSB7fQotICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9u
Qm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
KyAgICBHcmVhdGVyTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikg
S0pTX0ZBU1RfQ0FMTAorICAgICAgOiBCaW5hcnlPcGVyYXRvck5vZGUoQm9vbGVhblR5cGUsIGUx
LCBlMikge30KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjUmVsYXRpb25hbDsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogb3BlcmF0b3JBc1N0cmluZygpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gIj4iOyB9
CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxM
IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElO
RSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsK
ICAgfTsKIAotICBjbGFzcyBMZXNzRXFOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAg
Y2xhc3MgTGVzc0VxTm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5vZGUgewogICBwdWJsaWM6
Ci0gICAgTGVzc0VxTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikg
S0pTX0ZBU1RfQ0FMTCA6Ci0gICAgICBleHByMShlMSksIGV4cHIyKGUyKSB7fQotICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKyAgICBMZXNzRXFOb2RlKEV4
cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCisgICAg
ICA6IEJpbmFyeU9wZXJhdG9yTm9kZShCb29sZWFuVHlwZSwgZTEsIGUyKSB7fQogICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNSZWxhdGlvbmFsOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5n
KCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiAiPD0iOyB9CisgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIFByZWNSZWxh
dGlvbmFsOyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1
YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhw
cjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAotICBjbGFzcyBH
cmVhdGVyRXFOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgY2xhc3MgR3JlYXRlckVx
Tm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5vZGUgewogICBwdWJsaWM6Ci0gICAgR3JlYXRl
ckVxTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1Rf
Q0FMTCA6Ci0gICAgICBleHByMShlMSksIGV4cHIyKGUyKSB7fQotICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKyAgICBHcmVhdGVyRXFOb2RlKEV4cHJlc3Np
b25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCisgICAgICA6IEJp
bmFyeU9wZXJhdG9yTm9kZShCb29sZWFuVHlwZSwgZTEsIGUyKSB7fQogICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJv
b2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxh
dGlvbmFsOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgY29u
c3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiAiPj0iOyB9CisgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIFByZWNSZWxhdGlvbmFs
OyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9C
b29sZWFuKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7Ci0g
ICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAotICAgIGNsYXNzIEluc3Rh
bmNlT2ZOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBjbGFzcyBJbnN0YW5jZU9m
Tm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5vZGUgewogICBwdWJsaWM6CiAgICAgSW5zdGFu
Y2VPZk5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNU
X0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFuVHlwZSksIGV4cHIxKGUxKSwg
ZXhwcjIoZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMOworICAgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShCb29sZWFuVHlwZSwgZTEsIGUyKSB7
fQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9Ci0gIHByaXZhdGU6Ci0gICAgUmVmUHRyPEV4cHJl
c3Npb25Ob2RlPiBleHByMTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOworICAg
IHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0b3JBc1N0cmluZygpIGNvbnN0IEtKU19GQVNUX0NB
TEwgeyByZXR1cm4gImluc3RhbmNlb2YiOyB9CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAg
IH07CiAKLSAgICBjbGFzcyBJbk5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIGNs
YXNzIEluTm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5vZGUgewogICBwdWJsaWM6Ci0gICAg
SW5Ob2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9D
QUxMIDoKLSAgICAgIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9w
dGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOworICAgIEluTm9kZShFeHByZXNzaW9uTm9kZSog
ZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTAorICAgICAgICA6IEJpbmFyeU9w
ZXJhdG9yTm9kZShCb29sZWFuVHlwZSwgZTEsIGUyKSB7fQogICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZh
bHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFs
OyB9Ci0gIHByaXZhdGU6Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKLSAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3Bl
cmF0b3JBc1N0cmluZygpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gImluIjsgfQorICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJl
dHVybiBQcmVjUmVsYXRpb25hbDsgfQogICB9OwogCi0gICAgY2xhc3MgRXF1YWxOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBjbGFzcyBFcXVhbE5vZGUgOiBwdWJsaWMgQmluYXJ5
T3BlcmF0b3JOb2RlIHsKICAgcHVibGljOgogICAgIEVxdWFsTm9kZShFeHByZXNzaW9uTm9kZSog
ZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKEJvb2xlYW5UeXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KLSAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CisgICAgICAgIDogQmluYXJ5T3Bl
cmF0b3JOb2RlKEJvb2xlYW5UeXBlLCBlMSwgZTIpIHt9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFs
dWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9
CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgY29uc3QgS0pTX0ZB
U1RfQ0FMTCB7IHJldHVybiAiPT0iOyB9CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIFByZWNFcXVhbGl0eTsgfQogICBwcml2
YXRlOgogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVj
U3RhdGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKLSAgICBjbGFzcyBOb3RFcXVhbE5vZGUgOiBw
dWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIGNsYXNzIE5vdEVxdWFsTm9kZSA6IHB1YmxpYyBC
aW5hcnlPcGVyYXRvck5vZGUgewogICBwdWJsaWM6CiAgICAgTm90RXF1YWxOb2RlKEV4cHJlc3Np
b25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgIDog
RXhwcmVzc2lvbk5vZGUoQm9vbGVhblR5cGUpLCBleHByMShlMSksIGV4cHIyKGUyKSB7fQotICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBE
ZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgOiBC
aW5hcnlPcGVyYXRvck5vZGUoQm9vbGVhblR5cGUsIGUxLCBlMikge30KICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBi
b29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0g
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjRXF1
YWxpdHk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25z
dCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuICIhPSI7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9
CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSopOwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CiAgICAg
UmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAotICAgIGNsYXNzIFN0cmljdEVx
dWFsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgY2xhc3MgU3RyaWN0RXF1YWxO
b2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9kZSB7CiAgIHB1YmxpYzoKICAgICBTdHJpY3RF
cXVhbE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNU
X0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFuVHlwZSksIGV4cHIxKGUxKSwg
ZXhwcjIoZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMOworICAgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShCb29sZWFuVHlwZSwgZTEsIGUyKSB7
fQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNFcXVhbGl0eTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0
b3JBc1N0cmluZygpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gIj09PSI7IH0KKyAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1
cm4gUHJlY0VxdWFsaXR5OyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAot
ICAgIGNsYXNzIE5vdFN0cmljdEVxdWFsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7Cisg
ICAgY2xhc3MgTm90U3RyaWN0RXF1YWxOb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9kZSB7
CiAgIHB1YmxpYzoKICAgICBOb3RTdHJpY3RFcXVhbE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBF
eHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9k
ZShCb29sZWFuVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lk
IG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOworICAgICAgICA6IEJpbmFyeU9wZXJhdG9y
Tm9kZShCb29sZWFuVHlwZSwgZTEsIGUyKSB7fQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVU
b0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0eTsgfQorICAg
IHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0b3JBc1N0cmluZygpIGNvbnN0IEtKU19GQVNUX0NB
TEwgeyByZXR1cm4gIiE9PSI7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9CiAgIHByaXZhdGU6
CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0
ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJl
c3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAotICAgIGNsYXNzIEJpdEFuZE5vZGUgOiBwdWJsaWMg
RXhwcmVzc2lvbk5vZGUgeworICAgIGNsYXNzIEJpdEFuZE5vZGUgOiBwdWJsaWMgQmluYXJ5T3Bl
cmF0b3JOb2RlIHsKICAgcHVibGljOgogICAgIEJpdEFuZE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUx
LCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9u
Tm9kZShOdW1iZXJUeXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KLSAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25T
dGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CisgICAgICAgIDogQmluYXJ5T3BlcmF0
b3JOb2RlKE51bWJlclR5cGUsIGUxLCBlMikge30KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1
YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVh
dGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBl
dmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
aW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIFByZWNCaXR3aXNlQW5kOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBvcGVyYXRvckFz
U3RyaW5nKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiAiJiI7IH0KKyAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJl
Y0JpdHdpc2VBbmQ7IH0KICAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5s
aW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAotICAg
IGNsYXNzIEJpdE9yTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgY2xhc3MgQml0
T3JOb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9kZSB7CiAgIHB1YmxpYzoKICAgICBCaXRP
ck5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NB
TEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgZXhwcjEoZTEpLCBleHBy
MihlMikge30KLSAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlv
bkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
CisgICAgICAgIDogQmluYXJ5T3BlcmF0b3JOb2RlKE51bWJlclR5cGUsIGUxLCBlMikge30KICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNCaXR3aXNlT3I7IH0KKyAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuICJ8IjsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pT
X0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjQml0d2lzZU9yOyB9CiAgIHByaXZhdGU6CiAgICAgQUxX
QVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKTsKLSAg
ICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gZXhwcjI7CiAgIH07CiAKLSAgICBjbGFzcyBCaXRYT3JOb2RlIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlIHsKKyAgICBjbGFzcyBCaXRYT3JOb2RlIDogcHVibGljIEJpbmFyeU9wZXJhdG9yTm9k
ZSB7CiAgIHB1YmxpYzoKICAgICBCaXRYT3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVz
c2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVt
YmVyVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOworICAgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShO
dW1iZXJUeXBlLCBlMSwgZTIpIHt9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1i
ZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVU
b0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGludDMyX3Qg
ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB1
aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
Qml0d2lzZVhvcjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0b3JBc1N0cmluZygp
IGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gIl4iOyB9CisgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIFByZWNCaXR3aXNl
WG9yOyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1
YXRlVG9JbnQzMihFeGVjU3RhdGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIx
OwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKICAgLyoqCiAgICAq
IGV4cHIxICYmIGV4cHIyLCBleHByMSB8fCBleHByMgogICAgKi8KLSAgICBjbGFzcyBMb2dpY2Fs
QW5kTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgY2xhc3MgTG9naWNhbEFuZE5v
ZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKICAgcHVibGljOgogICAgIExvZ2ljYWxB
bmROb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9D
QUxMCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoQm9vbGVhblR5cGUpLCBleHByMShlMSksIGV4
cHIyKGUyKSB7fQotICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0
aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICAgICAgOiBCaW5hcnlPcGVyYXRvck5vZGUoQm9vbGVhblR5cGUsIGUxLCBlMikge30K
ICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjTG9naWNhbEFuZDsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0
b3JBc1N0cmluZygpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gIiYmIjsgfQorICAgIHZp
cnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVy
biBQcmVjTG9naWNhbEFuZDsgfQogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
bmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAg
IAotICAgIGNsYXNzIExvZ2ljYWxPck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAg
IGNsYXNzIExvZ2ljYWxPck5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKICAgcHVi
bGljOgogICAgIExvZ2ljYWxPck5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9k
ZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFuVHlw
ZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOworICAgICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShCb29sZWFu
VHlwZSwgZTEsIGUyKSB7fQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNMb2dpY2FsT3I7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
ICJ8fCI7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gUHJlY0xvZ2ljYWxPcjsgfQogICBwcml2YXRlOgogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKTsKLSAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
ZXhwcjI7CiAgIH07CiAKICAgLyoqCkBAIC0xNTExLDcgKzE0NTMsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ29uZGl0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY0NvbmRp
dGlvbmFsOyB9CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBsb2dpY2Fs
OwogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CkBAIC0xNTM3LDcgKzE0NzksNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0K
ICAgcHJvdGVjdGVkOgogICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICBPcGVyYXRvciBtX29w
ZXI7CkBAIC0xNTc1LDcgKzE1MTcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25T
dGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KKyAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyBy
ZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KICAgcHJvdGVjdGVkOgogICAgIElkZW50aWZpZXIgbV9p
ZGVudDsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7CkBAIC0xNjAxLDcgKzE1
NDMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYp
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY0Fzc2lnbm1l
bnQ7IH0KICAgcHJvdGVjdGVkOgogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwog
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9zdWJzY3JpcHQ7CkBAIC0xNjE2LDcgKzE1NTgs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7
IH0KICAgcHJvdGVjdGVkOgogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9zdWJzY3JpcHQ7CkBAIC0xNjMwLDcgKzE1NzIsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0K
ICAgcHJvdGVjdGVkOgogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgIElk
ZW50aWZpZXIgbV9pZGVudDsKQEAgLTE2NDQsNyArMTU4Niw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUq
LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0g
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNz
aWdubWVudDsgfQorICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgS0pT
X0ZBU1RfQ0FMTCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQogICBwcm90ZWN0ZWQ6CiAgICAg
UmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7CiAgICAgSWRlbnRpZmllciBtX2lkZW50OwpA
QCAtMTY1OCw3ICsxNjAwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICA6IG1fbGVmdChsZWZ0
KSwgbV9vcGVyKG9wZXIpLCBtX3JpZ2h0KHJpZ2h0KSB7fQogICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNBc3NpZ25tZW50OyB9Cisg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsg
cmV0dXJuIFByZWNBc3NpZ25tZW50OyB9CiAgIHByb3RlY3RlZDoKICAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IG1fbGVmdDsKICAgICBPcGVyYXRvciBtX29wZXI7CkBAIC0xNjc0LDcgKzE2MTYs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY0V4cHJlc3Npb247
IH0KICAgcHJpdmF0ZToKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwogICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CkBAIC0xNjkwLDcgKzE2MzIsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJl
c3Npb247IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IEtKU19G
QVNUX0NBTEwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9
CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwogICB9OwpAQCAt
MTcwNCw3ICsxNjQ2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBldmFsdWF0ZVNpbmds
ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBnZXRE
ZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CisgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQ
cmVjRXhwcmVzc2lvbjsgfQogICAgIFBhc3NSZWZQdHI8VmFyRGVjbE5vZGU+IHJlbGVhc2VOZXh0
KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBuZXh0LnJlbGVhc2UoKTsgfQogCiAgICAgVHlwZSB2
YXJUeXBlOwpAQCAtMTkyMiw3ICsxODY0LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgUGFyYW1l
dGVyTm9kZSAqbmV4dFBhcmFtKCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBuZXh0LmdldCgpOyB9
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgUGFzc1JlZlB0cjxQYXJhbWV0ZXJOb2RlPiByZWxlYXNlTmV4dCgpIEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KLSAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVj
RXhwcmVzc2lvbjsgfQogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBGdW5jRGVjbE5vZGU7
CiAgICAgZnJpZW5kIGNsYXNzIEZ1bmNFeHByTm9kZTsKQEAgLTE5NzcsNyArMTkxOCw3IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgOiBpZGVudChpKSwgcGFyYW0ocCksIGJvZHkoYikgeyBhZGRQ
YXJhbXMoKTsgfQogICAgIHZpcnR1YWwgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgcmV0dXJuIFByZWNNZW1iZXI7IH0KKyAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gUHJlY01lbWJlcjsgfQogICBwcml2
YXRlOgogICAgIHZvaWQgYWRkUGFyYW1zKCkgS0pTX0ZBU1RfQ0FMTDsKICAgICAvLyBVc2VkIGZv
ciBzdHJlYW1UbwpAQCAtMjAxMiw3ICsxOTUzLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICB2
aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
IHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KIAogICAgICAgSlNW
YWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIENvbXBsZXRp
b24gZXZhbFN0YXRlbWVudHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKQEAgLTIwMzMsNyAr
MTk3Myw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICBQYXNzUmVmUHRyPENsYXVz
ZUxpc3ROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbmV4dC5yZWxl
YXNlKCk7IH0KICAgICAgIHZpcnR1YWwgdm9pZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25T
dGFja3MmKSBLSlNfRkFTVF9DQUxMOwotICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247
IH0KICAgcHJpdmF0ZToKICAgICAgIGZyaWVuZCBjbGFzcyBDYXNlQmxvY2tOb2RlOwogICAgICAg
UmVmUHRyPENhc2VDbGF1c2VOb2RlPiBjbGF1c2U7CkBAIC0yMDQ3LDcgKzE5ODYsNiBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAgIENvbXBsZXRpb24gZXZhbEJsb2NrKEV4ZWNTdGF0ZSAqZXhlYywg
SlNWYWx1ZSAqaW5wdXQpIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9p
ZCBnZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KICAgcHJpdmF0ZToKICAgICAgIFJlZlB0
cjxDbGF1c2VMaXN0Tm9kZT4gbGlzdDE7CiAgICAgICBSZWZQdHI8Q2FzZUNsYXVzZU5vZGU+IGRl
ZjsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJpbmcuY3BwIGIvSmF2
YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAKaW5kZXggNjNmM2Y0OC4uMTE0ZGQzMSAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGlj
OgogICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChVbmluZGVudFR5cGUpOwogICAgIFNvdXJj
ZVN0cmVhbSYgb3BlcmF0b3I8PChEb3RFeHByVHlwZSk7CiAgICAgU291cmNlU3RyZWFtJiBvcGVy
YXRvcjw8KFByZWNlZGVuY2UpOworICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBF
eHByZXNzaW9uTm9kZSopOwogICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBOb2Rl
Kik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChj
b25zdCBSZWZQdHI8VD4mIG4pIHsgcmV0dXJuICp0aGlzIDw8IG4uZ2V0KCk7IH0KIApAQCAtMTkw
LDcgKzE5MSw3IEBAIFNvdXJjZVN0cmVhbSYgU291cmNlU3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0
IElkZW50aWZpZXImIHMpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1Tb3VyY2VTdHJlYW0mIFNv
dXJjZVN0cmVhbTo6b3BlcmF0b3I8PChjb25zdCBOb2RlKiBuKQorU291cmNlU3RyZWFtJiBTb3Vy
Y2VTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgRXhwcmVzc2lvbk5vZGUqIG4pCiB7CiAgICAgYm9v
bCBuZWVkUGFyZW5zID0gbV9wcmVjZWRlbmNlICE9IFByZWNFeHByZXNzaW9uICYmIG4tPnByZWNl
ZGVuY2UoKSA+IG1fcHJlY2VkZW5jZTsKICAgICBtX3ByZWNlZGVuY2UgPSBQcmVjRXhwcmVzc2lv
bjsKQEAgLTIwNCw2ICsyMDUsMTQgQEAgU291cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06Om9wZXJh
dG9yPDwoY29uc3QgTm9kZSogbikKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKK1NvdXJjZVN0cmVh
bSYgU291cmNlU3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IE5vZGUqIG4pCit7CisgICAgbV9wcmVj
ZWRlbmNlID0gUHJlY0V4cHJlc3Npb247CisgICAgaWYgKG4pCisgICAgICAgIG4tPnN0cmVhbVRv
KCp0aGlzKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIFNvdXJjZVN0cmVhbSYgU291cmNlU3Ry
ZWFtOjpvcGVyYXRvcjw8KEVuZGxUeXBlKQogewogICAgIG1fbnVtYmVyTmVlZHNQYXJlbnMgPSBm
YWxzZTsKQEAgLTIzOSw3ICsyNDgsNyBAQCBpbmxpbmUgU291cmNlU3RyZWFtJiBTb3VyY2VTdHJl
YW06Om9wZXJhdG9yPDwoUHJlY2VkZW5jZSBwcmVjZWRlbmNlKQogfQogCiBzdGF0aWMgdm9pZCBz
dHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihTb3VyY2VTdHJlYW0mIHMsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSwKLSAgICBjb25zdCBjaGFyKiBvcGVyYXRvclN0cmluZywgY29uc3Qg
Tm9kZSogbGVmdCwgY29uc3QgTm9kZSogcmlnaHQpCisgICAgY29uc3QgY2hhciogb3BlcmF0b3JT
dHJpbmcsIGNvbnN0IEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBjb25zdCBFeHByZXNzaW9uTm9kZSog
cmlnaHQpCiB7CiAgICAgcyA8PCBwcmVjZWRlbmNlIDw8IGxlZnQKICAgICAgICAgPDwgJyAnIDw8
IG9wZXJhdG9yU3RyaW5nIDw8ICcgJwpAQCAtNTQyLDExOSArNTUxLDkgQEAgdm9pZCBMb2dpY2Fs
Tm90Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogICAgIHMgPDwgIiEiIDw8
IFByZWNVbmFyeSA8PCBleHByOwogfQogCi12b2lkIE11bHROb2RlOjpzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0
b3IocywgcHJlY2VkZW5jZSgpLCAiKiIsIHRlcm0xLCB0ZXJtMik7Ci19Ci0KLXZvaWQgRGl2Tm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3Nv
Y2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIi8iLCB0ZXJtMSwgdGVybTIp
OwotfQotCi12b2lkIE1vZE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsK
LSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCks
ICIlIiwgdGVybTEsIHRlcm0yKTsKLX0KLQotdm9pZCBBZGROb2RlOjpzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0
b3IocywgcHJlY2VkZW5jZSgpLCAiKyIsIHRlcm0xLCB0ZXJtMik7Ci19Ci0KLXZvaWQgU3ViTm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3Nv
Y2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIi0iLCB0ZXJtMSwgdGVybTIp
OwotfQotCi12b2lkIExlZnRTaGlmdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29u
c3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRl
bmNlKCksICI8PCIsIHRlcm0xLCB0ZXJtMik7Ci19Ci0KLXZvaWQgUmlnaHRTaGlmdE5vZGU6OnN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRp
dmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI+PiIsIHRlcm0xLCB0ZXJtMik7Ci19
Ci0KLXZvaWQgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHBy
ZWNlZGVuY2UoKSwgIj4+PiIsIHRlcm0xLCB0ZXJtMik7Ci19Ci0KLXZvaWQgTGVzc05vZGU6OnN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRp
dmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI8IiwgZXhwcjEsIGV4cHIyKTsKLX0K
LQotdm9pZCBHcmVhdGVyTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewot
ICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwg
Ij4iLCBleHByMSwgZXhwcjIpOwotfQotCi12b2lkIExlc3NFcU5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVy
YXRvcihzLCBwcmVjZWRlbmNlKCksICI8PSIsIGV4cHIxLCBleHByMik7Ci19Ci0KLXZvaWQgR3Jl
YXRlckVxTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVh
bUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIj49IiwgZXhw
cjEsIGV4cHIyKTsKLX0KLQotdm9pZCBJbnN0YW5jZU9mTm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9y
KHMsIHByZWNlZGVuY2UoKSwgImluc3RhbmNlb2YiLCBleHByMSwgZXhwcjIpOwotfQotCi12b2lk
IEluTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxl
ZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgImluIiwgZXhwcjEs
IGV4cHIyKTsKLX0KLQotdm9pZCBFcXVhbE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykg
Y29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVj
ZWRlbmNlKCksICI9PSIsIGV4cHIxLCBleHByMik7Ci19Ci0KLXZvaWQgTm90RXF1YWxOb2RlOjpz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0
aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiIT0iLCBleHByMSwgZXhwcjIpOwot
fQotCi12b2lkIFN0cmljdEVxdWFsTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25z
dAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVu
Y2UoKSwgIj09PSIsIGV4cHIxLCBleHByMik7Ci19Ci0KLXZvaWQgTm90U3RyaWN0RXF1YWxOb2Rl
OjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29j
aWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiIT09IiwgZXhwcjEsIGV4cHIy
KTsKLX0KLQotdm9pZCBCaXRBbmROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0
Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5j
ZSgpLCAiJiIsIGV4cHIxLCBleHByMik7Ci19Ci0KLXZvaWQgQml0WE9yTm9kZTo6c3RyZWFtVG8o
U291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFy
eU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIl4iLCBleHByMSwgZXhwcjIpOwotfQotCi12b2lk
IEJpdE9yTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVh
bUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgInwiLCBleHBy
MSwgZXhwcjIpOwotfQotCi12b2lkIExvZ2ljYWxBbmROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3Io
cywgcHJlY2VkZW5jZSgpLCAiJiYiLCBleHByMSwgZXhwcjIpOwotfQotCi12b2lkIExvZ2ljYWxP
ck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKK3ZvaWQgQmluYXJ5T3BlcmF0
b3JOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgc3RyZWFtTGVm
dEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAifHwiLCBleHByMSwg
ZXhwcjIpOworICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNl
ZGVuY2UoKSwgb3BlcmF0b3JBc1N0cmluZygpLCBtX2V4cHIxLCBtX2V4cHIyKTsKIH0KIAogdm9p
ZCBDb25kaXRpb25hbE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QK
</data>

          </attachment>
      

    </bug>

</bugzilla>