<?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>64066</bug_id>
          
          <creation_ts>2011-07-06 23:48:27 -0700</creation_ts>
          <short_desc>DFG JIT does not implement op_construct</short_desc>
          <delta_ts>2011-07-12 18:46:27 -0700</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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>433290</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-06 23:48:27 -0700</bug_when>
    <thetext>The DFG JIT does not implement the op_construct opcode.  This means that code containing object construction will not get compiled with DFG.  DFG JIT should implement op_construct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433294</commentid>
    <comment_count>1</comment_count>
      <attachid>99946</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-06 23:51:18 -0700</bug_when>
    <thetext>Created attachment 99946
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433297</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-06 23:53:52 -0700</bug_when>
    <thetext>Attachment 99946 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGRepatch.h:40:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433303</commentid>
    <comment_count>3</comment_count>
      <attachid>99948</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-07 00:02:46 -0700</bug_when>
    <thetext>Created attachment 99948
the patch (fix style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433793</commentid>
    <comment_count>4</comment_count>
      <attachid>99948</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-07 16:55:09 -0700</bug_when>
    <thetext>Comment on attachment 99948
the patch (fix style)

Clearing flags on attachment: 99948

Committed r90602: &lt;http://trac.webkit.org/changeset/90602&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433794</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-07 16:55:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434389</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-08 16:43:49 -0700</bug_when>
    <thetext>Reopening - these changes were rolled out in r90673 due to https://bugs.webkit.org/show_bug.cgi?id=64181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436054</commentid>
    <comment_count>7</comment_count>
      <attachid>100583</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-12 16:22:05 -0700</bug_when>
    <thetext>Created attachment 100583
the patch

This patch fixes two bugs in the previous patch, which, together with other patches since committed, makes this work with gmail, bankrate, facebook, reddit, and google (according to my testing), even with DFG restrictions turned off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436072</commentid>
    <comment_count>8</comment_count>
      <attachid>100583</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-12 16:38:08 -0700</bug_when>
    <thetext>Comment on attachment 100583
the patch

Hey Filip, following on from our conversation earlier, looking at the two bugs this fixes since the original patch, one looks tougher to test for (error on unlinking calls), but the other does look testable (virtualFor always compiles for call).  To test we&apos;d just have to have one function use new, call another, and have the constructor that is called do something that would prove whether it was invoked as a call or a constructor (as an example, returning a non-object value would do).  Unless there is any reason it won&apos;t be possible, let&apos;s add a LayoutTest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436093</commentid>
    <comment_count>9</comment_count>
      <attachid>100592</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-12 17:13:55 -0700</bug_when>
    <thetext>Created attachment 100592
the patch (fix review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436144</commentid>
    <comment_count>10</comment_count>
      <attachid>100592</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-12 18:46:22 -0700</bug_when>
    <thetext>Comment on attachment 100592
the patch (fix review)

Clearing flags on attachment: 100592

Committed r90877: &lt;http://trac.webkit.org/changeset/90877&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436145</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-12 18:46:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99946</attachid>
            <date>2011-07-06 23:51:18 -0700</date>
            <delta_ts>2011-07-07 00:02:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>construct_patch_1.diff</filename>
            <type>text/plain</type>
            <size>21391</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA1NDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAK
KzIwMTEtMDctMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGltcGxlbWVudCBvcF9jb25zdHJ1Y3QuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDA2NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGZnL0RGR0FsaWFzVHJhY2tlci5oOgor
ICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6cmVjb3JkQ29uc3RydWN0KToKKyAgICAg
ICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkZmdMaW5r
Rm9yKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorCiAyMDExLTA3LTA2ICBKdWFuIEMuIE1vbnRlbWF5b3IgIDxqbW9udEBhcHBsZS5jb20+
CiAKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEIHJ1bm5pbmcgdGVzdCAyNjIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkocmV2aXNpb24gOTA1
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9jYW5kaWRh
dGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwogICAgIH0KIAorICAgIHZvaWQgcmVjb3JkQ29uc3Ry
dWN0KE5vZGVJbmRleCBjb25zdHJ1Y3QpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGNv
bnN0cnVjdCwgbV9ncmFwaFtjb25zdHJ1Y3RdLm9wID09IENvbnN0cnVjdCk7CisgICAgICAgIG1f
Y2FuZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
Ly8gVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGZvciBhcmd1bWVudHM6CiAgICAgLy8gICAtIChY
LCBYKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHJldmlzaW9uIDkwNTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw2ICs0MTEsMjMgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChjaGlsZCk7
CiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncysrOwogICAgIH0KKyAgICAKKyAgICBOb2RlSW5k
ZXggYWRkQ2FsbChJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wKQorICAgIHsKKyAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgaW50IGFyZ0Nv
dW50ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgaW50
IGZpcnN0QXJnID0gcmVnaXN0ZXJPZmZzZXQgLSBhcmdDb3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgYXJnSWR4ID0gZmlyc3RBcmc7IGFy
Z0lkeCA8IGZpcnN0QXJnICsgYXJnQ291bnQ7IGFyZ0lkeCsrKQorICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KGFyZ0lkeCkpOworICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBvcCk7CisgICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlv
biA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAgICAg
IGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9
PSBvcF9jYWxsX3B1dF9yZXN1bHQpCisgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBjYWxsKTsKKyAgICAgICAgaWYgKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSArICh1bnNpZ25lZClhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMpCisgICAgICAg
ICAgICBtX3BhcmFtZXRlclNsb3RzID0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgYXJnQ291bnQ7CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KIAogICAgIHZvaWQgcHJl
ZGljdEFycmF5KE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewpAQCAtMTEwMSwyNyArMTExOCwx
OCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NhbGw6IHsKLSAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAg
ICAgICBpbnQgYXJnQ291bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBmaXJzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0IC0gYXJnQ291
bnQgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgICAgICBmb3Ig
KGludCBhcmdJZHggPSBmaXJzdEFyZzsgYXJnSWR4IDwgZmlyc3RBcmcgKyBhcmdDb3VudDsgYXJn
SWR4KyspCi0gICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ0lkeCkpOwotICAg
ICAgICAgICAgTm9kZUluZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgQ2FsbCk7
CisgICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ2FsbCk7CiAgICAgICAgICAgICBhbGlhc2VzLnJlY29yZENhbGwoY2Fs
bCk7Ci0gICAgICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5z
dHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICAgICAgaWYgKGludGVy
cHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxf
cHV0X3Jlc3VsdCkKLSAgICAgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCBjYWxsKTsKLSAgICAgICAgICAgIGlmIChSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQotICAgICAgICAg
ICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUgKyBhcmdDb3VudDsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAgICAgICAg
ICAgIE5vZGVJbmRleCBjb25zdHJ1Y3QgPSBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIENvbnN0cnVjdCk7CisgICAgICAgICAgICBhbGlhc2VzLnJlY29yZENvbnN0cnVj
dChjb25zdHJ1Y3QpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbF9wdXRfcmVzdWx0OiB7
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGNhbGxJbnN0
cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiAtIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGNhbGxJbnN0cnVjdGlv
bi0+dS5vcGNvZGUpID09IG9wX2NhbGwpOwotI2VuZGlmCiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTA1
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NzAsNiArNDcwLDE4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6Y2FjaGVkR2V0TWV0aG9kKEcKIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChO
b2RlJiBub2RlKQogeworICAgIFBfREZHT3BlcmF0aW9uX0Ugc2xvd0NhbGxGdW5jdGlvbjsKKyAg
ICBib29sIGlzQ2FsbDsKKyAgICAKKyAgICBpZiAobm9kZS5vcCA9PSBDYWxsKSB7CisgICAgICAg
IHNsb3dDYWxsRnVuY3Rpb24gPSBvcGVyYXRpb25MaW5rQ2FsbDsKKyAgICAgICAgaXNDYWxsID0g
dHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBDb25zdHJ1Y3Qp
OworICAgICAgICBzbG93Q2FsbEZ1bmN0aW9uID0gb3BlcmF0aW9uTGlua0NvbnN0cnVjdDsKKyAg
ICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgfQorICAgIAogICAgIE5vZGVJbmRleCBjYWxsZWVO
b2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCldOwogICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVOb2RlSW5kZXgpOwog
ICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CkBAIC01MDEsMTQgKzUxMyw3IEBA
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoYXJnR1BSLCBhZGRyZXNzT2ZDYWxsRGF0YSgtY2FsbERhdGFTaXplICsgYXJnSWR4
KSk7CiAgICAgfQogICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgIGNhc2UgQ2FsbDoK
LSAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdp
c3RlckZpbGU6OkNhbGxlZSkpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQorICAgIG1faml0LnN0b3Jl
UHRyKGNhbGxlZUdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsK
ICAgICAKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIApAQCAtNTE4LDE2ICs1MjMsOSBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgSklUQ29tcGlsZXI6
OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoOwogICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgIGNhc2UgQ2FsbDoKLSAgICAg
ICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7Ci0gICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LnN0b3Jl
UHRyKHJlc3VsdEdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWlu
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9CisgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJX
aXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hl
Y2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVH
UFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVzdWx0R1BS
KTsKKyAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lz
dGVyRmlsZTo6U2NvcGVDaGFpbikpOwogCiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNv
ZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCkBAIC01MzksNyArNTM3LDcgQEAgdm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIHNsb3dQYXRoLmxpbmsoJm1f
aml0KTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVyOjpDYWxs
IHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uTGlua0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8p
OworICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhG
YXN0RXhjZXB0aW9uQ2hlY2soc2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBp
bGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CiAgICAgbV9qaXQubW92ZShJbW0zMihudW1BcmdzKSwg
R1BSSW5mbzo6cmVnVDEpOwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2so
KS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgIG1faml0Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiksIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlv
bkluZm8pOwpAQCAtNTUwLDcgKzU0OCw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdENh
bGwoTm9kZSYgbm8KICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAK
LSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCB0
cnVlLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBt
X2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGws
IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOwogfQogCiAjaWZu
ZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDkwNTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw2ICsxNDIsNyBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87
CiAgICAgXAogICAgIC8qIENhbGxzLiAqL1wKICAgICBtYWNybyhDYWxsLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhDb25zdHJ1
Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAog
ICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhC
cmVha3BvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTA1NDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA2OCw2ICsxMDY4LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShTcGVjdWxhdAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
YWxsOgorICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA5MDU0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMSw4NiArNDMxLDEyNCBA
QCBFbmNvZGVkSlNWYWx1ZSBnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShleGVjLT5nbG9iYWxEYXRhKCkuaG9zdENhbGxSZXR1cm5WYWx1ZSk7CiB9
CiAKLXN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpT
VmFsdWUgY2FsbGVlKQorc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgQ2FsbERh
dGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjYWxsZWUs
IGNhbGxEYXRhKTsKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKKyAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShj
YWxsZWUsIGNhbGxEYXRhKTsKICAgICAKLSAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVK
Uyk7CisgICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKICAgICAKLSAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coZXhlY0NhbGxlZS0+cmVnaXN0ZXJzKCkp
KSB7Ci0gICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlSG9zdCkgeworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5pbnRl
cnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdyhleGVjQ2FsbGVlLT5yZWdpc3RlcnMoKSkpIHsK
KyAgICAgICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihleGVjLT5z
Y29wZUNoYWluKCkpOworICAgICAgICAKKyAgICAgICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxs
UmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4
ZWNDYWxsZWUpKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOwogICAgICAgICB9Cisg
ICAgCisgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICAK
LSAgICAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWluKCkpOwor
ICAgICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CisgICAgICAgIENvbnN0cnVjdFR5
cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEoY2FsbGVlLCBjb25zdHJ1Y3REYXRh
KTsKICAgICAgICAgCi0gICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAg
ICAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPSBDb25zdHJ1Y3RUeXBlSlMpOwogICAgICAgICAK
LSAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1
cm5WYWx1ZSk7CisgICAgICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0
KSB7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmludGVycHJldGVyLT5yZWdpc3RlckZp
bGUoKS5ncm93KGV4ZWNDYWxsZWUtPnJlZ2lzdGVycygpKSkgeworICAgICAgICAgICAgICAgIGds
b2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWluKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBnbG9iYWxEYXRhLT5ob3N0Q2FsbFJldHVyblZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxs
ZWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlv
bikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUp
OwogICAgIH0KLSAgICAKLSAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKICAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3Io
ZXhlYywgY2FsbGVlKTsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCogb3BlcmF0aW9uTGlua0Nh
bGxXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKTsKLUZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9BUkcyX1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvbkxpbmtDYWxsKTsK
LXZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitpbmxpbmUgdm9pZCogbGlu
a0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVj
Q2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCA9IGdldEpTRnVuY3Rpb24oKmdsb2JhbERhdGEsIGNhbGxlZUFzVmFsdWUpOwogICAgIGlmICgh
Y2FsbGVlQXNGdW5jdGlvbkNlbGwpCi0gICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVj
Q2FsbGVlLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4
ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpOwogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9
IGFzRnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwogICAgIGlm
IChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpOworICAgICAg
ICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS5hZGRyZXNz
Rm9yQ2FsbCgpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBp
bGVGb3JDYWxsKGV4ZWMsIGNhbGxlZS0+c2NvcGUoKSk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJv
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihleGVjLCBjYWxsZWUtPnNjb3BlKCks
IGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGdsb2JhbERhdGEtPmV4
Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGNvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1dGFi
bGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ2FsbCgpOworICAgICAgICBjb2RlQmxvY2sgPSAmZnVu
Y3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihraW5kKTsKICAgICAgICAgaWYg
KGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPT0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpCi0gICAgICAgICAgICBjb2RlUHRy
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmFkZHJlc3NG
b3JDYWxsKCk7CisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5l
cmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4
ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKICAgICAg
ICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihjYWxsZWUtPnNjb3BlKCkpOwogICAgIH0KICAg
ICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxs
TGlua0luZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2Uo
KSkKICAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAgIGRm
Z0xpbmtDYWxsKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNv
ZGVQdHIpOworICAgICAgICBkZmdMaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29k
ZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQpOwogICAgIHJldHVybiBjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiB9CiAKLXZvaWQqIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSkKK3ZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cik7CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJH
Ml9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25MaW5rQ2FsbCk7Cit2b2lkKiBvcGVyYXRpb25MaW5r
Q2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIHJl
dHVybkFkZHJlc3MsIENvZGVGb3JDYWxsKTsKK30KKwordm9pZCogb3BlcmF0aW9uTGlua0NvbnN0
cnVjdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpOworRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX0FSRzJfUkVUVVJOX0FERFJFU1Mob3BlcmF0aW9uTGlua0NvbnN0
cnVjdCk7Cit2b2lkKiBvcGVyYXRpb25MaW5rQ29uc3RydWN0V2l0aFJldHVybkFkZHJlc3MoRXhl
Y1N0YXRlKiBleGVjQ2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7Cisg
ICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgcmV0dXJuQWRkcmVzcywgQ29kZUZvckNvbnN0
cnVjdCk7Cit9CisKK2lubGluZSB2b2lkKiB2aXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVj
Q2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCA9IGdldEpTRnVuY3Rpb24oKmdsb2JhbERhdGEsIGNhbGxlZUFzVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQotICAgICAgICByZXR1cm4gaGFuZGxlSG9z
dENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSk7CisgICAgICAgIHJldHVybiBoYW5kbGVI
b3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBraW5kKTsKICAgICAKICAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogICAg
IEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3JDYWxsKCkpKSB7CisgICAg
aWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewogICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3Ig
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4ZWMsIGZ1bmN0aW9uLT5zY29w
ZSgpKTsKICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC01MTksNyArNTU3LDE3IEBAIHZvaWQqIG9w
ZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgfQogICAgIH0KICAgICBl
eGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpKTsKLSAg
ICByZXR1cm4gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
aygpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgcmV0dXJuIGV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKS5leGVjdXRhYmxlQWRkcmVzcygpOworfQor
Cit2b2lkKiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7Cisg
ICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOworfQorCit2b2lk
KiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAg
ICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uSW5zdGFuY2VPZihFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTA1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBA
QCB0eXBlZGVmIHZvaWQgKCpWX0RGR09wZXJhdGlvbl9FSkpKKShFeGVjCiB0eXBlZGVmIHZvaWQg
KCpWX0RGR09wZXJhdGlvbl9FSkpQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIHZvaWQqKTsKIHR5cGVkZWYgdm9pZCAoKlZfREZHT3BlcmF0aW9uX0VKSkkpKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciopOwog
dHlwZWRlZiBkb3VibGUgKCpEX0RGR09wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwordHlw
ZWRlZiB2b2lkICooKlBfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogCiAvLyBUaGVzZSBy
b3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMg
b2Ygb3BlcmF0aW9ucyB0b28gY29tcGxleCB0byBKSVQuCiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRp
b25Db252ZXJ0VGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKTsKQEAg
LTgzLDYgKzg0LDggQEAgYm9vbCBvcGVyYXRpb25Db21wYXJlRXEoRXhlY1N0YXRlKiwgRW5jbwog
Ym9vbCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiB2b2lkKiBvcGVyYXRpb25W
aXJ0dWFsQ2FsbChFeGVjU3RhdGUqKTsKIHZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0
ZSopOwordm9pZCogb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqKTsKK3ZvaWQq
IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKik7CiAKIC8vIFRoaXMgbWV0aG9kIGlz
IHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRp
b24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxs
cyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gOTA1NDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzIsNyArNDMyLDcgQEAgdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IAogICAgICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5k
KSk7CiB9CiAKLXZvaWQgZGZnTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNh
bGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCit2b2lkIGRmZ0xpbmtGb3IoRXhl
Y1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxs
ZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBDb2RlQmxvY2sqIGNh
bGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwogICAgIApA
QCAtNDQ0LDcgKzQ0NCwxMiBAQCB2b2lkIGRmZ0xpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bExpCiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3Ro
ZXIsIGNvZGVQdHIpOwogICAgIH0KICAgICAKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2Rl
TG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLCBvcGVyYXRpb25W
aXJ0dWFsQ2FsbCk7CisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVy
bkxvY2F0aW9uKSwgb3BlcmF0aW9uVmlydHVhbENhbGwpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biksIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNp
b24gOTA1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB2b2lkIGRmZ1JlcGF0Y2hHZXRCeUlEKEV4ZWNT
dGF0ZSosIEpTVmFsCiB2b2lkIGRmZ1JlcGF0Y2hHZXRNZXRob2QoRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIE1ldGhvZENhbGxMaW5r
SW5mbyYpOwogdm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owogdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRL
aW5kKTsKLXZvaWQgZGZnTGlua0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJs
b2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwordm9pZCBk
ZmdMaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rp
b24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MDU0
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTQ1LDYgKzExNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENh
bGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99948</attachid>
            <date>2011-07-07 00:02:46 -0700</date>
            <delta_ts>2011-07-12 16:22:05 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>construct_patch_2.diff</filename>
            <type>text/plain</type>
            <size>21386</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA1NDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAK
KzIwMTEtMDctMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGltcGxlbWVudCBvcF9jb25zdHJ1Y3QuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDA2NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGZnL0RGR0FsaWFzVHJhY2tlci5oOgor
ICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6cmVjb3JkQ29uc3RydWN0KToKKyAgICAg
ICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkZmdMaW5r
Rm9yKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorCiAyMDExLTA3LTA2ICBKdWFuIEMuIE1vbnRlbWF5b3IgIDxqbW9udEBhcHBsZS5jb20+
CiAKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEIHJ1bm5pbmcgdGVzdCAyNjIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkocmV2aXNpb24gOTA1
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9jYW5kaWRh
dGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwogICAgIH0KIAorICAgIHZvaWQgcmVjb3JkQ29uc3Ry
dWN0KE5vZGVJbmRleCBjb25zdHJ1Y3QpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGNv
bnN0cnVjdCwgbV9ncmFwaFtjb25zdHJ1Y3RdLm9wID09IENvbnN0cnVjdCk7CisgICAgICAgIG1f
Y2FuZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
Ly8gVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGZvciBhcmd1bWVudHM6CiAgICAgLy8gICAtIChY
LCBYKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHJldmlzaW9uIDkwNTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw2ICs0MTEsMjMgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChjaGlsZCk7
CiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncysrOwogICAgIH0KKyAgICAKKyAgICBOb2RlSW5k
ZXggYWRkQ2FsbChJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wKQorICAgIHsKKyAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgaW50IGFyZ0Nv
dW50ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgaW50
IGZpcnN0QXJnID0gcmVnaXN0ZXJPZmZzZXQgLSBhcmdDb3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgYXJnSWR4ID0gZmlyc3RBcmc7IGFy
Z0lkeCA8IGZpcnN0QXJnICsgYXJnQ291bnQ7IGFyZ0lkeCsrKQorICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KGFyZ0lkeCkpOworICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBvcCk7CisgICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlv
biA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAgICAg
IGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9
PSBvcF9jYWxsX3B1dF9yZXN1bHQpCisgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBjYWxsKTsKKyAgICAgICAgaWYgKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSArICh1bnNpZ25lZClhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMpCisgICAgICAg
ICAgICBtX3BhcmFtZXRlclNsb3RzID0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgYXJnQ291bnQ7CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KIAogICAgIHZvaWQgcHJl
ZGljdEFycmF5KE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewpAQCAtMTEwMSwyNyArMTExOCwx
OCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NhbGw6IHsKLSAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAg
ICAgICBpbnQgYXJnQ291bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBmaXJzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0IC0gYXJnQ291
bnQgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgICAgICBmb3Ig
KGludCBhcmdJZHggPSBmaXJzdEFyZzsgYXJnSWR4IDwgZmlyc3RBcmcgKyBhcmdDb3VudDsgYXJn
SWR4KyspCi0gICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ0lkeCkpOwotICAg
ICAgICAgICAgTm9kZUluZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgQ2FsbCk7
CisgICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ2FsbCk7CiAgICAgICAgICAgICBhbGlhc2VzLnJlY29yZENhbGwoY2Fs
bCk7Ci0gICAgICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5z
dHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICAgICAgaWYgKGludGVy
cHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxf
cHV0X3Jlc3VsdCkKLSAgICAgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCBjYWxsKTsKLSAgICAgICAgICAgIGlmIChSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQotICAgICAgICAg
ICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUgKyBhcmdDb3VudDsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAgICAgICAg
ICAgIE5vZGVJbmRleCBjb25zdHJ1Y3QgPSBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIENvbnN0cnVjdCk7CisgICAgICAgICAgICBhbGlhc2VzLnJlY29yZENvbnN0cnVj
dChjb25zdHJ1Y3QpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbF9wdXRfcmVzdWx0OiB7
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGNhbGxJbnN0
cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiAtIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGNhbGxJbnN0cnVjdGlv
bi0+dS5vcGNvZGUpID09IG9wX2NhbGwpOwotI2VuZGlmCiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTA1
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NzAsNiArNDcwLDE4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6Y2FjaGVkR2V0TWV0aG9kKEcKIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChO
b2RlJiBub2RlKQogeworICAgIFBfREZHT3BlcmF0aW9uX0Ugc2xvd0NhbGxGdW5jdGlvbjsKKyAg
ICBib29sIGlzQ2FsbDsKKyAgICAKKyAgICBpZiAobm9kZS5vcCA9PSBDYWxsKSB7CisgICAgICAg
IHNsb3dDYWxsRnVuY3Rpb24gPSBvcGVyYXRpb25MaW5rQ2FsbDsKKyAgICAgICAgaXNDYWxsID0g
dHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBDb25zdHJ1Y3Qp
OworICAgICAgICBzbG93Q2FsbEZ1bmN0aW9uID0gb3BlcmF0aW9uTGlua0NvbnN0cnVjdDsKKyAg
ICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgfQorICAgIAogICAgIE5vZGVJbmRleCBjYWxsZWVO
b2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCldOwogICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVOb2RlSW5kZXgpOwog
ICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CkBAIC01MDEsMTQgKzUxMyw3IEBA
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoYXJnR1BSLCBhZGRyZXNzT2ZDYWxsRGF0YSgtY2FsbERhdGFTaXplICsgYXJnSWR4
KSk7CiAgICAgfQogICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgIGNhc2UgQ2FsbDoK
LSAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdp
c3RlckZpbGU6OkNhbGxlZSkpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQorICAgIG1faml0LnN0b3Jl
UHRyKGNhbGxlZUdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsK
ICAgICAKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIApAQCAtNTE4LDE2ICs1MjMsOSBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgSklUQ29tcGlsZXI6
OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoOwogICAgIAotICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgIGNhc2UgQ2FsbDoKLSAgICAg
ICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7Ci0gICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LnN0b3Jl
UHRyKHJlc3VsdEdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWlu
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9CisgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJX
aXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hl
Y2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVH
UFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVzdWx0R1BS
KTsKKyAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lz
dGVyRmlsZTo6U2NvcGVDaGFpbikpOwogCiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNv
ZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCkBAIC01MzksNyArNTM3LDcgQEAgdm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIHNsb3dQYXRoLmxpbmsoJm1f
aml0KTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVyOjpDYWxs
IHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uTGlua0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8p
OworICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhG
YXN0RXhjZXB0aW9uQ2hlY2soc2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBp
bGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CiAgICAgbV9qaXQubW92ZShJbW0zMihudW1BcmdzKSwg
R1BSSW5mbzo6cmVnVDEpOwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2so
KS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgIG1faml0Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiksIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlv
bkluZm8pOwpAQCAtNTUwLDcgKzU0OCw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdENh
bGwoTm9kZSYgbm8KICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAK
LSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCB0
cnVlLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBt
X2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGws
IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOwogfQogCiAjaWZu
ZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDkwNTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw2ICsxNDIsNyBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87
CiAgICAgXAogICAgIC8qIENhbGxzLiAqL1wKICAgICBtYWNybyhDYWxsLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhDb25zdHJ1
Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAog
ICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhC
cmVha3BvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTA1NDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA2OCw2ICsxMDY4LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShTcGVjdWxhdAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
YWxsOgorICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA5MDU0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMSw4NiArNDMxLDEyNCBA
QCBFbmNvZGVkSlNWYWx1ZSBnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShleGVjLT5nbG9iYWxEYXRhKCkuaG9zdENhbGxSZXR1cm5WYWx1ZSk7CiB9
CiAKLXN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpT
VmFsdWUgY2FsbGVlKQorc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgQ2FsbERh
dGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjYWxsZWUs
IGNhbGxEYXRhKTsKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKKyAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShj
YWxsZWUsIGNhbGxEYXRhKTsKICAgICAKLSAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVK
Uyk7CisgICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKICAgICAKLSAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coZXhlY0NhbGxlZS0+cmVnaXN0ZXJzKCkp
KSB7Ci0gICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlSG9zdCkgeworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5pbnRl
cnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdyhleGVjQ2FsbGVlLT5yZWdpc3RlcnMoKSkpIHsK
KyAgICAgICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihleGVjLT5z
Y29wZUNoYWluKCkpOworICAgICAgICAKKyAgICAgICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxs
UmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4
ZWNDYWxsZWUpKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOwogICAgICAgICB9Cisg
ICAgCisgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICAK
LSAgICAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWluKCkpOwor
ICAgICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CisgICAgICAgIENvbnN0cnVjdFR5
cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEoY2FsbGVlLCBjb25zdHJ1Y3REYXRh
KTsKICAgICAgICAgCi0gICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAg
ICAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPSBDb25zdHJ1Y3RUeXBlSlMpOwogICAgICAgICAK
LSAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1
cm5WYWx1ZSk7CisgICAgICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0
KSB7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmludGVycHJldGVyLT5yZWdpc3RlckZp
bGUoKS5ncm93KGV4ZWNDYWxsZWUtPnJlZ2lzdGVycygpKSkgeworICAgICAgICAgICAgICAgIGds
b2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWluKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBnbG9iYWxEYXRhLT5ob3N0Q2FsbFJldHVyblZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxs
ZWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlv
bikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUp
OwogICAgIH0KLSAgICAKLSAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKICAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3Io
ZXhlYywgY2FsbGVlKTsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCogb3BlcmF0aW9uTGlua0Nh
bGxXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKTsKLUZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9BUkcyX1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvbkxpbmtDYWxsKTsK
LXZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitpbmxpbmUgdm9pZCogbGlu
a0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVj
Q2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCA9IGdldEpTRnVuY3Rpb24oKmdsb2JhbERhdGEsIGNhbGxlZUFzVmFsdWUpOwogICAgIGlmICgh
Y2FsbGVlQXNGdW5jdGlvbkNlbGwpCi0gICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVj
Q2FsbGVlLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4
ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpOwogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9
IGFzRnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwogICAgIGlm
IChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpOworICAgICAg
ICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS5hZGRyZXNz
Rm9yQ2FsbCgpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBp
bGVGb3JDYWxsKGV4ZWMsIGNhbGxlZS0+c2NvcGUoKSk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJv
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihleGVjLCBjYWxsZWUtPnNjb3BlKCks
IGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGdsb2JhbERhdGEtPmV4
Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGNvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1dGFi
bGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ2FsbCgpOworICAgICAgICBjb2RlQmxvY2sgPSAmZnVu
Y3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihraW5kKTsKICAgICAgICAgaWYg
KGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPT0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpCi0gICAgICAgICAgICBjb2RlUHRy
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmFkZHJlc3NG
b3JDYWxsKCk7CisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5l
cmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4
ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKICAgICAg
ICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihjYWxsZWUtPnNjb3BlKCkpOwogICAgIH0KICAg
ICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxs
TGlua0luZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2Uo
KSkKICAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAgIGRm
Z0xpbmtDYWxsKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNv
ZGVQdHIpOworICAgICAgICBkZmdMaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29k
ZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQpOwogICAgIHJldHVybiBjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiB9CiAKLXZvaWQqIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSkKK3ZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cik7CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJH
Ml9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25MaW5rQ2FsbCk7Cit2b2lkKiBvcGVyYXRpb25MaW5r
Q2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIHJl
dHVybkFkZHJlc3MsIENvZGVGb3JDYWxsKTsKK30KKwordm9pZCogb3BlcmF0aW9uTGlua0NvbnN0
cnVjdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpOworRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX0FSRzJfUkVUVVJOX0FERFJFU1Mob3BlcmF0aW9uTGlua0NvbnN0
cnVjdCk7Cit2b2lkKiBvcGVyYXRpb25MaW5rQ29uc3RydWN0V2l0aFJldHVybkFkZHJlc3MoRXhl
Y1N0YXRlKiBleGVjQ2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7Cisg
ICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgcmV0dXJuQWRkcmVzcywgQ29kZUZvckNvbnN0
cnVjdCk7Cit9CisKK2lubGluZSB2b2lkKiB2aXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVj
Q2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCA9IGdldEpTRnVuY3Rpb24oKmdsb2JhbERhdGEsIGNhbGxlZUFzVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQotICAgICAgICByZXR1cm4gaGFuZGxlSG9z
dENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSk7CisgICAgICAgIHJldHVybiBoYW5kbGVI
b3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBraW5kKTsKICAgICAKICAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogICAg
IEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3JDYWxsKCkpKSB7CisgICAg
aWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewogICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3Ig
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4ZWMsIGZ1bmN0aW9uLT5zY29w
ZSgpKTsKICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC01MTksNyArNTU3LDE3IEBAIHZvaWQqIG9w
ZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgfQogICAgIH0KICAgICBl
eGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpKTsKLSAg
ICByZXR1cm4gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
aygpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgcmV0dXJuIGV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKS5leGVjdXRhYmxlQWRkcmVzcygpOworfQor
Cit2b2lkKiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7Cisg
ICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOworfQorCit2b2lk
KiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAg
ICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uSW5zdGFuY2VPZihFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTA1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBA
QCB0eXBlZGVmIHZvaWQgKCpWX0RGR09wZXJhdGlvbl9FSkpKKShFeGVjCiB0eXBlZGVmIHZvaWQg
KCpWX0RGR09wZXJhdGlvbl9FSkpQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIHZvaWQqKTsKIHR5cGVkZWYgdm9pZCAoKlZfREZHT3BlcmF0aW9uX0VKSkkpKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciopOwog
dHlwZWRlZiBkb3VibGUgKCpEX0RGR09wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwordHlw
ZWRlZiB2b2lkICooKlBfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogCiAvLyBUaGVzZSBy
b3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMg
b2Ygb3BlcmF0aW9ucyB0b28gY29tcGxleCB0byBKSVQuCiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRp
b25Db252ZXJ0VGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKTsKQEAg
LTgzLDYgKzg0LDggQEAgYm9vbCBvcGVyYXRpb25Db21wYXJlRXEoRXhlY1N0YXRlKiwgRW5jbwog
Ym9vbCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiB2b2lkKiBvcGVyYXRpb25W
aXJ0dWFsQ2FsbChFeGVjU3RhdGUqKTsKIHZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0
ZSopOwordm9pZCogb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqKTsKK3ZvaWQq
IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKik7CiAKIC8vIFRoaXMgbWV0aG9kIGlz
IHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRp
b24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxs
cyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gOTA1NDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzIsNyArNDMyLDcgQEAgdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IAogICAgICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5k
KSk7CiB9CiAKLXZvaWQgZGZnTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNh
bGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCit2b2lkIGRmZ0xpbmtGb3IoRXhl
Y1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxs
ZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBDb2RlQmxvY2sqIGNh
bGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwogICAgIApA
QCAtNDQ0LDcgKzQ0NCwxMiBAQCB2b2lkIGRmZ0xpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bExpCiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3Ro
ZXIsIGNvZGVQdHIpOwogICAgIH0KICAgICAKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2Rl
TG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLCBvcGVyYXRpb25W
aXJ0dWFsQ2FsbCk7CisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVy
bkxvY2F0aW9uKSwgb3BlcmF0aW9uVmlydHVhbENhbGwpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biksIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNp
b24gOTA1NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB2b2lkIGRmZ1JlcGF0Y2hHZXRCeUlEKEV4ZWNT
dGF0ZSosIEpTVmFsCiB2b2lkIGRmZ1JlcGF0Y2hHZXRNZXRob2QoRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIE1ldGhvZENhbGxMaW5r
SW5mbyYpOwogdm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owogdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRL
aW5kKTsKLXZvaWQgZGZnTGlua0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJs
b2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwordm9pZCBk
ZmdMaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rp
b24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTA1NDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0NSw2ICsxMTQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgor
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100583</attachid>
            <date>2011-07-12 16:22:05 -0700</date>
            <delta_ts>2011-07-12 17:13:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>construct_fix_patch_1.diff</filename>
            <type>text/plain</type>
            <size>22915</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA4NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAK
KzIwMTEtMDctMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGltcGxlbWVudCBvcF9jb25zdHJ1Y3QuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDA2NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIGZpeGVkIGlt
cGxlbWVudGF0aW9uIG9mIG9wX2NvbnN0cnVjdC4gIENvbnN0cnVjdG9yIGNhbGxzIGFyZSBpbXBs
ZW1lbnRlZAorICAgICAgICBieSByZXVzaW5nIGFsbW9zdCBhbGwgb2YgdGhlIGNvZGUgZm9yIENh
bGwsIHdpdGggY2FyZSB0YWtlbiB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgICB3aGVyZSB0aGUg
YXJlIGRpZmZlcmVuY2VzIChsaWtlIHNlbGVjdGluZyBkaWZmZXJlbnQgY29kZSBibG9ja3MpLCB0
aG9zZSBkaWZmZXJlbmNlcworICAgICAgICBhcmUgcmVzcGVjdGVkLiAgVGhlIHR3byBmaXhlcyBv
dmVyIHRoZSBsYXN0IHBhdGNoIGFyZTogKDEpIG1ha2Ugc3VyZSB0aGUKKyAgICAgICAgQ29kZUJs
b2NrOjp1bmxpbmtDYWxscyByZXNwZWN0cyBkaWZmZXJlbmNlcyBiZXR3ZWVuIENhbGwgYW5kIENv
bnN0cnVjdCwgYW5kICgyKQorICAgICAgICBtYWtlIHN1cmUgdGhhdCB2aXJ0dWFsRm9yKCkgaW4g
REZHT3BlcmF0aW9ucyByZXNwZWN0cyB0aGUgQ29kZVNwZWNpYWxpemF0aW9uS2luZAorICAgICAg
ICAoZWl0aGVyIENvZGVGb3JDYWxsIG9yIENvZGVGb3JDb25zdHJ1Y3QpIHdoZW4gaW52b2tpbmcg
dGhlIGNvbXBpbGVyLgorCisgICAgICAgICogZGZnL0RGR0FsaWFzVHJhY2tlci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6cmVjb3JkQ29uc3RydWN0KToKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAg
ICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkZmdMaW5rRm9yKToK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojp1bmxpbmtDYWxscyk6CisKIDIwMTEtMDctMTIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBDT0xMRUNUX09OX0VWRVJZX0FMTE9DQVRJT04gbm8gbG9uZ2VyIHdv
cmtzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDkwODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NTEsNyArMTc1MSw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtDYWxscygpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYg
KGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKSB7CiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25D
YWxsKG1fY2FsbExpbmtJbmZvc1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pLCBvcGVyYXRpb25MaW5r
Q2FsbCk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxs
KG1fY2FsbExpbmtJbmZvc1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pLCBtX2NhbGxMaW5rSW5mb3Nb
aV0uaXNDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsK
ICNlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCShyZXZpc2lvbiA5
MDg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsMTIgQEAgcHVibGljOgogICAgICAgICBtX2NhbmRp
ZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7CiAgICAgfQogCisgICAgdm9pZCByZWNvcmRDb25z
dHJ1Y3QoTm9kZUluZGV4IGNvbnN0cnVjdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y29uc3RydWN0LCBtX2dyYXBoW2NvbnN0cnVjdF0ub3AgPT0gQ29uc3RydWN0KTsKKyAgICAgICAg
bV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRydWUgZm9yIGFyZ3VtZW50czoKICAgICAvLyAgIC0g
KFgsIFgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gOTA4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExLDYgKzQxMSwyMyBA
QCBwcml2YXRlOgogICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKGNoaWxk
KTsKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CiAgICAgfQorICAgIAorICAgIE5vZGVJ
bmRleCBhZGRDYWxsKEludGVycHJldGVyKiBpbnRlcnByZXRlciwgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgTm9kZVR5cGUgb3ApCisgICAgeworICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICBpbnQgYXJn
Q291bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBp
bnQgZmlyc3RBcmcgPSByZWdpc3Rlck9mZnNldCAtIGFyZ0NvdW50IC0gUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICBmb3IgKGludCBhcmdJZHggPSBmaXJzdEFyZzsg
YXJnSWR4IDwgZmlyc3RBcmcgKyBhcmdDb3VudDsgYXJnSWR4KyspCisgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7CisgICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRkVG9H
cmFwaChOb2RlOjpWYXJBcmcsIG9wKTsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIHB1dEluc3RydWN0
aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKKyAgICAg
ICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUp
ID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKKyAgICAgICAgICAgIHNldChwdXRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAgICBpZiAoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplICsgKHVuc2lnbmVkKWFyZ0NvdW50ID4gbV9wYXJhbWV0ZXJTbG90cykKKyAgICAg
ICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUgKyBhcmdDb3VudDsKKyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgfQogCiAgICAgdm9pZCBw
cmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC0xMTAxLDI3ICsxMTE4
LDE4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbDogewotICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICAg
ICAgICAgIGludCBhcmdDb3VudCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IGZpcnN0QXJnID0gcmVnaXN0ZXJPZmZzZXQgLSBhcmdD
b3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAgIGZv
ciAoaW50IGFyZ0lkeCA9IGZpcnN0QXJnOyBhcmdJZHggPCBmaXJzdEFyZyArIGFyZ0NvdW50OyBh
cmdJZHgrKykKLSAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxs
KTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRkQ2FsbChpbnRlcnByZXRlciwgY3Vy
cmVudEluc3RydWN0aW9uLCBDYWxsKTsKICAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkQ2FsbChj
YWxsKTsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJ
bnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAgICAgICAgICBpZiAoaW50
ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2Fs
bF9wdXRfcmVzdWx0KQotICAgICAgICAgICAgICAgIHNldChwdXRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGNhbGwpOwotICAgICAgICAgICAgaWYgKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSArICh1bnNpZ25lZClhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMpCi0gICAgICAg
ICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSArIGFyZ0NvdW50OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbCk7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogeworICAgICAg
ICAgICAgTm9kZUluZGV4IGNvbnN0cnVjdCA9IGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgQ29uc3RydWN0KTsKKyAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkQ29uc3Ry
dWN0KGNvbnN0cnVjdCk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb25zdHJ1Y3QpOwor
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsX3B1dF9yZXN1bHQ6
IHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICAgICBJbnN0cnVjdGlvbiogY2FsbElu
c3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uIC0gT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsK
LSAgICAgICAgICAgIEFTU0VSVChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY2FsbEluc3RydWN0
aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbCk7Ci0jZW5kaWYKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5
MDg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MCw2ICs0NzAsMTggQEAgdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjpjYWNoZWRHZXRNZXRob2QoRwogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
KE5vZGUmIG5vZGUpCiB7CisgICAgUF9ERkdPcGVyYXRpb25fRSBzbG93Q2FsbEZ1bmN0aW9uOwor
ICAgIGJvb2wgaXNDYWxsOworICAgIAorICAgIGlmIChub2RlLm9wID09IENhbGwpIHsKKyAgICAg
ICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDYWxsOworICAgICAgICBpc0NhbGwg
PSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChub2RlLm9wID09IENvbnN0cnVj
dCk7CisgICAgICAgIHNsb3dDYWxsRnVuY3Rpb24gPSBvcGVyYXRpb25MaW5rQ29uc3RydWN0Owor
ICAgICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgTm9kZUluZGV4IGNhbGxl
ZU5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hp
bGQoKV07CiAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZU5vZGVJbmRleCk7
CiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKQEAgLTUwMSwxNCArNTEzLDcg
QEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgICAgICBtX2pp
dC5zdG9yZVB0cihhcmdHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKC1jYWxsRGF0YVNpemUgKyBhcmdJ
ZHgpKTsKICAgICB9CiAgICAgCi0gICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgY2FzZSBDYWxs
OgotICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWVHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9CisgICAgbV9qaXQuc3Rv
cmVQdHIoY2FsbGVlR1BSLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlZSkp
OwogICAgIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgCkBAIC01MTgsMTYgKzUyMyw5IEBA
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICBKSVRDb21waWxl
cjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGg7CiAgICAgCi0gICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgY2FzZSBDYWxsOgotICAg
ICAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihK
U0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQuc3Rv
cmVQdHIocmVzdWx0R1BSLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OlNjb3BlQ2hh
aW4pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKyAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0
cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9D
aGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpKTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxl
ZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRH
UFIpOworICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CiAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQu
Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAKQEAgLTUzOSw3ICs1MzcsNyBAQCB2b2lk
IEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgc2xvd1BhdGgubGluaygm
bV9qaXQpOwogICAgIAogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+
bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhvcGVy
YXRpb25MaW5rQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5m
byk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0
aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29t
cGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3Mp
LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0
aW9uSW5mbyk7CkBAIC01NTAsNyArNTQ4LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0
Q2FsbChOb2RlJiBubwogICAgIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBp
bGVJbmRleCwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAg
IAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ss
IHRydWUsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAg
IG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2Fs
bCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CiB9CiAKICNp
Zm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gOTA4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3IEBAIHR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9uSW5m
bzsKICAgICBcCiAgICAgLyogQ2FsbHMuICovXAogICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1hY3JvKENvbnN0
cnVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBc
CiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3Jv
KEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MDg2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDY4LDYgKzEwNjgsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDkwODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxLDk1ICs0MzEsMTQz
IEBAIEVuY29kZWRKU1ZhbHVlIGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXQKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPmdsb2JhbERhdGEoKS5ob3N0Q2FsbFJldHVyblZhbHVlKTsK
IH0KIAotc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
SlNWYWx1ZSBjYWxsZWUpCitzdGF0aWMgdm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQog
ewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxl
ZSwgY2FsbERhdGEpOworICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAgIENh
bGxEYXRhIGNhbGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KGNhbGxlZSwgY2FsbERhdGEpOwogICAgIAotICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlw
ZUpTKTsKKyAgICAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlSlMpOwogICAgIAotICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRh
LT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdyhleGVjQ2FsbGVlLT5yZWdpc3RlcnMo
KSkpIHsKLSAgICAgICAgICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmlu
dGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5ncm93KGV4ZWNDYWxsZWUtPnJlZ2lzdGVycygpKSkg
eworICAgICAgICAgICAgICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGV4ZWMt
PnNjb3BlQ2hhaW4oKSk7CisgICAgICAgIAorICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENh
bGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24o
ZXhlY0NhbGxlZSkpOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChnbG9iYWxEYXRhLT5leGNl
cHRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7CiAgICAgICAgIH0K
KyAgICAKKyAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAg
IAotICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKSk7
CisgICAgICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKKyAgICAgICAgQ29uc3RydWN0
VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShjYWxsZWUsIGNvbnN0cnVjdERh
dGEpOwogICAgICAgICAKLSAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwor
ICAgICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9IENvbnN0cnVjdFR5cGVKUyk7CiAgICAgICAg
IAotICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlKTsKKyAgICAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhv
c3QpIHsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVy
RmlsZSgpLmdyb3coZXhlY0NhbGxlZS0+cmVnaXN0ZXJzKCkpKSB7CisgICAgICAgICAgICAgICAg
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0Nh
bGxlZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9u
ZSk7CiAgICAgfQotICAgIAotICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOwog
ICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVOb3RBRnVuY3Rpb25FcnJv
cihleGVjLCBjYWxsZWUpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkKiBvcGVyYXRpb25MaW5r
Q2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpOwotRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX0FSRzJfUkVUVVJOX0FERFJFU1Mob3BlcmF0aW9uTGlua0NhbGwp
Owotdm9pZCogb3BlcmF0aW9uTGlua0NhbGxXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK2lubGluZSB2b2lkKiBs
aW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4
ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsID0gZ2V0SlNGdW5jdGlvbigqZ2xvYmFsRGF0YSwgY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYg
KCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4
ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUpOworICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwo
ZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCk7CiAgICAgSlNGdW5jdGlvbiogY2FsbGVl
ID0gYXNGdW5jdGlvbihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKICAgICAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAg
aWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVQdHIgPSBleGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmFkZHJlc3NGb3JDYWxsKCk7CisgICAg
ICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJl
c3NGb3JDYWxsKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29t
cGlsZUZvckNhbGwoZXhlYywgY2FsbGVlLT5zY29wZSgpKTsKKyAgICAgICAgSlNPYmplY3QqIGVy
cm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGV4ZWMsIGNhbGxlZS0+c2NvcGUo
KSwga2luZCk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+
ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgICAgIGNvZGVCbG9jayA9ICZm
dW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKGtpbmQpOwogICAgICAgICBp
ZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA9PSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkKLSAgICAgICAgICAgIGNvZGVQ
dHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVz
c0ZvckNhbGwoKTsKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdl
bmVyYXRlZEpJVENvZGVGb3Ioa2luZCkuYWRkcmVzc0ZvckNhbGwoKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpOworICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwogICAg
ICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGNhbGxlZS0+c2NvcGUoKSk7CiAgICAgfQog
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENh
bGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25j
ZSgpKQogICAgICAgICBjYWxsTGlua0luZm8uc2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAg
ZGZnTGlua0NhbGwoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwg
Y29kZVB0cik7CisgICAgICAgIGRmZ0xpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBj
b2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCk7CiAgICAgcmV0dXJuIGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKIH0KIAotdm9pZCogb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlKQordm9pZCogb3BlcmF0aW9uTGlua0NhbGxXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKTsKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9B
UkcyX1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvbkxpbmtDYWxsKTsKK3ZvaWQqIG9wZXJhdGlvbkxp
bmtDYWxsV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwg
cmV0dXJuQWRkcmVzcywgQ29kZUZvckNhbGwpOworfQorCit2b2lkKiBvcGVyYXRpb25MaW5rQ29u
c3RydWN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cik7CitG
VU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHMl9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25MaW5rQ29u
c3RydWN0KTsKK3ZvaWQqIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sK
KyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCByZXR1cm5BZGRyZXNzLCBDb2RlRm9yQ29u
c3RydWN0KTsKK30KKworaW5saW5lIHZvaWQqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4
ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsID0gZ2V0SlNGdW5jdGlvbigqZ2xvYmFsRGF0YSwgY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpCi0gICAgICAgIHJldHVybiBoYW5kbGVI
b3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGhhbmRs
ZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpOwogICAgIAogICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAg
ICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwot
ICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvckNhbGwoKSkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJv
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoZXhlYywgZnVuY3Rpb24tPnNj
b3BlKCkpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNv
bXBpbGVGb3IoZXhlYywgZnVuY3Rpb24tPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJy
b3IpIHsKICAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogICAgIGV4ZWNDYWxsZWUt
PnNldFNjb3BlQ2hhaW4oZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCkpOwotICAgIHJldHVybiBl
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICByZXR1cm4gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdp
dGhBcml0eUNoZWNrRm9yKGtpbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKK3ZvaWQqIG9w
ZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4g
dmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7Cit9CisKK3ZvaWQqIG9wZXJhdGlv
blZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIHJldHVybiB2
aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBvcGVyYXRpb25JbnN0YW5jZU9mKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiA5MDg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHR5cGVkZWYg
dm9pZCAoKlZfREZHT3BlcmF0aW9uX0VKSkopKEV4ZWMKIHR5cGVkZWYgdm9pZCAoKlZfREZHT3Bl
cmF0aW9uX0VKSlApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
dm9pZCopOwogdHlwZWRlZiB2b2lkICgqVl9ERkdPcGVyYXRpb25fRUpKSSkoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKik7CiB0eXBlZGVmIGRv
dWJsZSAoKkRfREZHT3BlcmF0aW9uX0REKShkb3VibGUsIGRvdWJsZSk7Cit0eXBlZGVmIHZvaWQg
KigqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFy
ZSBwcm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysrIGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRp
b25zIHRvbyBjb21wbGV4IHRvIEpJVC4KIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkNvbnZlcnRU
aGlzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpOwpAQCAtODMsNiArODQs
OCBAQCBib29sIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvCiBib29sIG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIHZvaWQqIG9wZXJhdGlvblZpcnR1YWxDYWxs
KEV4ZWNTdGF0ZSopOwogdm9pZCogb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKik7Cit2b2lk
KiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSopOwordm9pZCogb3BlcmF0aW9u
TGlua0NvbnN0cnVjdChFeGVjU3RhdGUqKTsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBs
b29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2gg
aXMKIC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBv
bmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5MDg2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0
MzQsNyBAQCB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgICAg
IGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIH0KIAot
dm9pZCBkZmdMaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKK3ZvaWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqIGV4
ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJs
b2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CiAgICAgCkBAIC00NDYsNyAr
NDQ2LDEyIEBAIHZvaWQgZGZnTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGkKICAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwgY29kZVB0
cik7CiAgICAgfQogICAgIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNh
bGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG9wZXJhdGlvblZpcnR1YWxDYWxs
KTsKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24p
LCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Q29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0
aW9uVmlydHVhbENvbnN0cnVjdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lvbiA5MDg2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBAIHZvaWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwgSlNW
YWwKIHZvaWQgZGZnUmVwYXRjaEdldE1ldGhvZChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgTWV0aG9kQ2FsbExpbmtJbmZvJik7CiB2
b2lkIGRmZ0J1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRm
Z1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwotdm9p
ZCBkZmdMaW5rQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1
bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7Cit2b2lkIGRmZ0xpbmtGb3Io
RXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MDg2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTQzLDYgKzExNDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENhbGw6CisgICAgY2FzZSBD
b25zdHJ1Y3Q6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
Cg==
</data>
<flag name="review"
          id="95254"
          type_id="1"
          status="-"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="95255"
          type_id="3"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100592</attachid>
            <date>2011-07-12 17:13:55 -0700</date>
            <delta_ts>2011-07-12 18:46:22 -0700</delta_ts>
            <desc>the patch (fix review)</desc>
            <filename>constructor_fix_patch_3.diff</filename>
            <type>text/plain</type>
            <size>26349</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAK
KzIwMTEtMDctMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGltcGxlbWVudCBvcF9jb25zdHJ1Y3QuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDA2NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIGZpeGVkIGlt
cGxlbWVudGF0aW9uIG9mIG9wX2NvbnN0cnVjdC4gIENvbnN0cnVjdG9yIGNhbGxzIGFyZSBpbXBs
ZW1lbnRlZAorICAgICAgICBieSByZXVzaW5nIGFsbW9zdCBhbGwgb2YgdGhlIGNvZGUgZm9yIENh
bGwsIHdpdGggY2FyZSB0YWtlbiB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgICB3aGVyZSB0aGUg
YXJlIGRpZmZlcmVuY2VzIChsaWtlIHNlbGVjdGluZyBkaWZmZXJlbnQgY29kZSBibG9ja3MpLCB0
aG9zZSBkaWZmZXJlbmNlcworICAgICAgICBhcmUgcmVzcGVjdGVkLiAgVGhlIHR3byBmaXhlcyBv
dmVyIHRoZSBsYXN0IHBhdGNoIGFyZTogKDEpIG1ha2Ugc3VyZSB0aGUKKyAgICAgICAgQ29kZUJs
b2NrOjp1bmxpbmtDYWxscyByZXNwZWN0cyBkaWZmZXJlbmNlcyBiZXR3ZWVuIENhbGwgYW5kIENv
bnN0cnVjdCwgYW5kICgyKQorICAgICAgICBtYWtlIHN1cmUgdGhhdCB2aXJ0dWFsRm9yKCkgaW4g
REZHT3BlcmF0aW9ucyByZXNwZWN0cyB0aGUgQ29kZVNwZWNpYWxpemF0aW9uS2luZAorICAgICAg
ICAoZWl0aGVyIENvZGVGb3JDYWxsIG9yIENvZGVGb3JDb25zdHJ1Y3QpIHdoZW4gaW52b2tpbmcg
dGhlIGNvbXBpbGVyLgorCisgICAgICAgICogZGZnL0RGR0FsaWFzVHJhY2tlci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6cmVjb3JkQ29uc3RydWN0KToKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAg
ICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkZmdMaW5rRm9yKToK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojp1bmxpbmtDYWxscyk6CisKIDIwMTEtMDctMTIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBDT0xMRUNUX09OX0VWRVJZX0FMTE9DQVRJT04gbm8gbG9uZ2VyIHdv
cmtzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDkwODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NTEsNyArMTc1MSw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtDYWxscygpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYg
KGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKSB7CiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25D
YWxsKG1fY2FsbExpbmtJbmZvc1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pLCBvcGVyYXRpb25MaW5r
Q2FsbCk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxs
KG1fY2FsbExpbmtJbmZvc1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pLCBtX2NhbGxMaW5rSW5mb3Nb
aV0uaXNDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsK
ICNlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCShyZXZpc2lvbiA5
MDg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsMTIgQEAgcHVibGljOgogICAgICAgICBtX2NhbmRp
ZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7CiAgICAgfQogCisgICAgdm9pZCByZWNvcmRDb25z
dHJ1Y3QoTm9kZUluZGV4IGNvbnN0cnVjdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y29uc3RydWN0LCBtX2dyYXBoW2NvbnN0cnVjdF0ub3AgPT0gQ29uc3RydWN0KTsKKyAgICAgICAg
bV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRydWUgZm9yIGFyZ3VtZW50czoKICAgICAvLyAgIC0g
KFgsIFgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gOTA4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExLDYgKzQxMSwyMyBA
QCBwcml2YXRlOgogICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKGNoaWxk
KTsKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CiAgICAgfQorICAgIAorICAgIE5vZGVJ
bmRleCBhZGRDYWxsKEludGVycHJldGVyKiBpbnRlcnByZXRlciwgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgTm9kZVR5cGUgb3ApCisgICAgeworICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICBpbnQgYXJn
Q291bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBp
bnQgZmlyc3RBcmcgPSByZWdpc3Rlck9mZnNldCAtIGFyZ0NvdW50IC0gUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICBmb3IgKGludCBhcmdJZHggPSBmaXJzdEFyZzsg
YXJnSWR4IDwgZmlyc3RBcmcgKyBhcmdDb3VudDsgYXJnSWR4KyspCisgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7CisgICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRkVG9H
cmFwaChOb2RlOjpWYXJBcmcsIG9wKTsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIHB1dEluc3RydWN0
aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKKyAgICAg
ICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUp
ID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKKyAgICAgICAgICAgIHNldChwdXRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAgICBpZiAoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplICsgKHVuc2lnbmVkKWFyZ0NvdW50ID4gbV9wYXJhbWV0ZXJTbG90cykKKyAgICAg
ICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUgKyBhcmdDb3VudDsKKyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgfQogCiAgICAgdm9pZCBw
cmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC0xMTAxLDI3ICsxMTE4
LDE4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbDogewotICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICAg
ICAgICAgIGludCBhcmdDb3VudCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IGZpcnN0QXJnID0gcmVnaXN0ZXJPZmZzZXQgLSBhcmdD
b3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAgIGZv
ciAoaW50IGFyZ0lkeCA9IGZpcnN0QXJnOyBhcmdJZHggPCBmaXJzdEFyZyArIGFyZ0NvdW50OyBh
cmdJZHgrKykKLSAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7Ci0g
ICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxs
KTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRkQ2FsbChpbnRlcnByZXRlciwgY3Vy
cmVudEluc3RydWN0aW9uLCBDYWxsKTsKICAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkQ2FsbChj
YWxsKTsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJ
bnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAgICAgICAgICBpZiAoaW50
ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2Fs
bF9wdXRfcmVzdWx0KQotICAgICAgICAgICAgICAgIHNldChwdXRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGNhbGwpOwotICAgICAgICAgICAgaWYgKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSArICh1bnNpZ25lZClhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMpCi0gICAgICAg
ICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSArIGFyZ0NvdW50OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbCk7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogeworICAgICAg
ICAgICAgTm9kZUluZGV4IGNvbnN0cnVjdCA9IGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgQ29uc3RydWN0KTsKKyAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkQ29uc3Ry
dWN0KGNvbnN0cnVjdCk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb25zdHJ1Y3QpOwor
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsX3B1dF9yZXN1bHQ6
IHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICAgICBJbnN0cnVjdGlvbiogY2FsbElu
c3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uIC0gT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsK
LSAgICAgICAgICAgIEFTU0VSVChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY2FsbEluc3RydWN0
aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbCk7Ci0jZW5kaWYKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5
MDg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MCw2ICs0NzAsMTggQEAgdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjpjYWNoZWRHZXRNZXRob2QoRwogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
KE5vZGUmIG5vZGUpCiB7CisgICAgUF9ERkdPcGVyYXRpb25fRSBzbG93Q2FsbEZ1bmN0aW9uOwor
ICAgIGJvb2wgaXNDYWxsOworICAgIAorICAgIGlmIChub2RlLm9wID09IENhbGwpIHsKKyAgICAg
ICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDYWxsOworICAgICAgICBpc0NhbGwg
PSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChub2RlLm9wID09IENvbnN0cnVj
dCk7CisgICAgICAgIHNsb3dDYWxsRnVuY3Rpb24gPSBvcGVyYXRpb25MaW5rQ29uc3RydWN0Owor
ICAgICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgTm9kZUluZGV4IGNhbGxl
ZU5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hp
bGQoKV07CiAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZU5vZGVJbmRleCk7
CiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKQEAgLTUwMSwxNCArNTEzLDcg
QEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgICAgICBtX2pp
dC5zdG9yZVB0cihhcmdHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKC1jYWxsRGF0YVNpemUgKyBhcmdJ
ZHgpKTsKICAgICB9CiAgICAgCi0gICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgY2FzZSBDYWxs
OgotICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWVHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9CisgICAgbV9qaXQuc3Rv
cmVQdHIoY2FsbGVlR1BSLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlZSkp
OwogICAgIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgCkBAIC01MTgsMTYgKzUyMyw5IEBA
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICBKSVRDb21waWxl
cjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGg7CiAgICAgCi0gICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgY2FzZSBDYWxsOgotICAg
ICAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihK
U0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQuc3Rv
cmVQdHIocmVzdWx0R1BSLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OlNjb3BlQ2hh
aW4pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKyAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0
cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9D
aGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpKTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxl
ZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRH
UFIpOworICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CiAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQu
Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAKQEAgLTUzOSw3ICs1MzcsNyBAQCB2b2lk
IEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgc2xvd1BhdGgubGluaygm
bV9qaXQpOwogICAgIAogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+
bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhvcGVy
YXRpb25MaW5rQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5m
byk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0
aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29t
cGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3Mp
LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0
aW9uSW5mbyk7CkBAIC01NTAsNyArNTQ4LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0
Q2FsbChOb2RlJiBubwogICAgIAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBp
bGVJbmRleCwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAg
IAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ss
IHRydWUsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAg
IG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2Fs
bCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CiB9CiAKICNp
Zm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gOTA4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3IEBAIHR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9uSW5m
bzsKICAgICBcCiAgICAgLyogQ2FsbHMuICovXAogICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1hY3JvKENvbnN0
cnVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBc
CiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3Jv
KEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MDg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDY4LDYgKzEwNjgsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDkwODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxLDk1ICs0MzEsMTQz
IEBAIEVuY29kZWRKU1ZhbHVlIGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXQKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPmdsb2JhbERhdGEoKS5ob3N0Q2FsbFJldHVyblZhbHVlKTsK
IH0KIAotc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
SlNWYWx1ZSBjYWxsZWUpCitzdGF0aWMgdm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQog
ewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxl
ZSwgY2FsbERhdGEpOworICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAgIENh
bGxEYXRhIGNhbGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KGNhbGxlZSwgY2FsbERhdGEpOwogICAgIAotICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlw
ZUpTKTsKKyAgICAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlSlMpOwogICAgIAotICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRh
LT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdyhleGVjQ2FsbGVlLT5yZWdpc3RlcnMo
KSkpIHsKLSAgICAgICAgICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmlu
dGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5ncm93KGV4ZWNDYWxsZWUtPnJlZ2lzdGVycygpKSkg
eworICAgICAgICAgICAgICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGV4ZWMt
PnNjb3BlQ2hhaW4oKSk7CisgICAgICAgIAorICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENh
bGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24o
ZXhlY0NhbGxlZSkpOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChnbG9iYWxEYXRhLT5leGNl
cHRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7CiAgICAgICAgIH0K
KyAgICAKKyAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAg
IAotICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKSk7
CisgICAgICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKKyAgICAgICAgQ29uc3RydWN0
VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShjYWxsZWUsIGNvbnN0cnVjdERh
dGEpOwogICAgICAgICAKLSAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwor
ICAgICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9IENvbnN0cnVjdFR5cGVKUyk7CiAgICAgICAg
IAotICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlKTsKKyAgICAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhv
c3QpIHsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVy
RmlsZSgpLmdyb3coZXhlY0NhbGxlZS0+cmVnaXN0ZXJzKCkpKSB7CisgICAgICAgICAgICAgICAg
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0Nh
bGxlZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9u
ZSk7CiAgICAgfQotICAgIAotICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOwog
ICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVOb3RBRnVuY3Rpb25FcnJv
cihleGVjLCBjYWxsZWUpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkKiBvcGVyYXRpb25MaW5r
Q2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpOwotRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX0FSRzJfUkVUVVJOX0FERFJFU1Mob3BlcmF0aW9uTGlua0NhbGwp
Owotdm9pZCogb3BlcmF0aW9uTGlua0NhbGxXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK2lubGluZSB2b2lkKiBs
aW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4
ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsID0gZ2V0SlNGdW5jdGlvbigqZ2xvYmFsRGF0YSwgY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYg
KCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4
ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUpOworICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwo
ZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCk7CiAgICAgSlNGdW5jdGlvbiogY2FsbGVl
ID0gYXNGdW5jdGlvbihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKICAgICAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAg
aWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVQdHIgPSBleGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmFkZHJlc3NGb3JDYWxsKCk7CisgICAg
ICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJl
c3NGb3JDYWxsKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29t
cGlsZUZvckNhbGwoZXhlYywgY2FsbGVlLT5zY29wZSgpKTsKKyAgICAgICAgSlNPYmplY3QqIGVy
cm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGV4ZWMsIGNhbGxlZS0+c2NvcGUo
KSwga2luZCk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+
ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgICAgIGNvZGVCbG9jayA9ICZm
dW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKGtpbmQpOwogICAgICAgICBp
ZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA9PSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkKLSAgICAgICAgICAgIGNvZGVQ
dHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVz
c0ZvckNhbGwoKTsKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdl
bmVyYXRlZEpJVENvZGVGb3Ioa2luZCkuYWRkcmVzc0ZvckNhbGwoKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpOworICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwogICAg
ICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGNhbGxlZS0+c2NvcGUoKSk7CiAgICAgfQog
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENh
bGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25j
ZSgpKQogICAgICAgICBjYWxsTGlua0luZm8uc2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAg
ZGZnTGlua0NhbGwoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwg
Y29kZVB0cik7CisgICAgICAgIGRmZ0xpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBj
b2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCk7CiAgICAgcmV0dXJuIGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKIH0KIAotdm9pZCogb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlKQordm9pZCogb3BlcmF0aW9uTGlua0NhbGxXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKTsKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9B
UkcyX1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvbkxpbmtDYWxsKTsKK3ZvaWQqIG9wZXJhdGlvbkxp
bmtDYWxsV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwg
cmV0dXJuQWRkcmVzcywgQ29kZUZvckNhbGwpOworfQorCit2b2lkKiBvcGVyYXRpb25MaW5rQ29u
c3RydWN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cik7CitG
VU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHMl9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25MaW5rQ29u
c3RydWN0KTsKK3ZvaWQqIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sK
KyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCByZXR1cm5BZGRyZXNzLCBDb2RlRm9yQ29u
c3RydWN0KTsKK30KKworaW5saW5lIHZvaWQqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4
ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsID0gZ2V0SlNGdW5jdGlvbigqZ2xvYmFsRGF0YSwgY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpCi0gICAgICAgIHJldHVybiBoYW5kbGVI
b3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGhhbmRs
ZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpOwogICAgIAogICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAg
ICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwot
ICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvckNhbGwoKSkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJv
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoZXhlYywgZnVuY3Rpb24tPnNj
b3BlKCkpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNv
bXBpbGVGb3IoZXhlYywgZnVuY3Rpb24tPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJy
b3IpIHsKICAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogICAgIGV4ZWNDYWxsZWUt
PnNldFNjb3BlQ2hhaW4oZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCkpOwotICAgIHJldHVybiBl
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICByZXR1cm4gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdp
dGhBcml0eUNoZWNrRm9yKGtpbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKK3ZvaWQqIG9w
ZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4g
dmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7Cit9CisKK3ZvaWQqIG9wZXJhdGlv
blZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIHJldHVybiB2
aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBvcGVyYXRpb25JbnN0YW5jZU9mKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiA5MDg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHR5cGVkZWYg
dm9pZCAoKlZfREZHT3BlcmF0aW9uX0VKSkopKEV4ZWMKIHR5cGVkZWYgdm9pZCAoKlZfREZHT3Bl
cmF0aW9uX0VKSlApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
dm9pZCopOwogdHlwZWRlZiB2b2lkICgqVl9ERkdPcGVyYXRpb25fRUpKSSkoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKik7CiB0eXBlZGVmIGRv
dWJsZSAoKkRfREZHT3BlcmF0aW9uX0REKShkb3VibGUsIGRvdWJsZSk7Cit0eXBlZGVmIHZvaWQg
KigqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFy
ZSBwcm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysrIGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRp
b25zIHRvbyBjb21wbGV4IHRvIEpJVC4KIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkNvbnZlcnRU
aGlzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpOwpAQCAtODMsNiArODQs
OCBAQCBib29sIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvCiBib29sIG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIHZvaWQqIG9wZXJhdGlvblZpcnR1YWxDYWxs
KEV4ZWNTdGF0ZSopOwogdm9pZCogb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKik7Cit2b2lk
KiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSopOwordm9pZCogb3BlcmF0aW9u
TGlua0NvbnN0cnVjdChFeGVjU3RhdGUqKTsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBs
b29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2gg
aXMKIC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBv
bmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5MDg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0
MzQsNyBAQCB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgICAg
IGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIH0KIAot
dm9pZCBkZmdMaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKK3ZvaWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqIGV4
ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJs
b2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CiAgICAgCkBAIC00NDYsNyAr
NDQ2LDEyIEBAIHZvaWQgZGZnTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGkKICAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwgY29kZVB0
cik7CiAgICAgfQogICAgIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNh
bGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG9wZXJhdGlvblZpcnR1YWxDYWxs
KTsKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24p
LCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Q29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0
aW9uVmlydHVhbENvbnN0cnVjdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lvbiA5MDg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBAIHZvaWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwgSlNW
YWwKIHZvaWQgZGZnUmVwYXRjaEdldE1ldGhvZChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgTWV0aG9kQ2FsbExpbmtJbmZvJik7CiB2
b2lkIGRmZ0J1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRm
Z1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwotdm9p
ZCBkZmdMaW5rQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1
bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7Cit2b2lkIGRmZ0xpbmtGb3Io
RXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MDg2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTQzLDYgKzExNDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENhbGw6CisgICAgY2FzZSBD
b25zdHJ1Y3Q6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA5MDg3MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDExLTA3LTEyICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgREZHIEpJVCBkb2VzIG5vdCBpbXBsZW1lbnQgb3Bf
Y29uc3RydWN0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjQwNjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBhIHRlc3QgZm9yIHRoZSBERkcgb3BfY29uc3RydWN0IHJlZ3Jlc3Npb24sIHdoZXJl
IHBvbHltb3JwaGljIGNvbnN0cnVjdG9yCisgICAgICAgIGNhbGxzIHdpbGwgcmVzdWx0IGluIHRo
ZSBjb2RlIGJlaW5nIGNvbXBpbGVkIGZvciBjYWxsIGJ1dCB0aGVuIGludm9rZWQgYXMgYQorICAg
ICAgICBjb25zdHJ1Y3Rvci4gIFRoaXMgdGVzdCB3aWxsIGZhaWwgaWYgdGhhdCBwYXJ0IG9mIHRo
ZSBwYXRjaCBpcyBvbWl0dGVkLgorCisgICAgICAgICogZmFzdC9qcy9wb2x5bW9ycGhpYy1jb25z
dHJ1Y3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3BvbHltb3JwaGlj
LWNvbnN0cnVjdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9w
b2x5bW9ycGhpYy1jb25zdHJ1Y3QuanM6IEFkZGVkLgorICAgICAgICAoRm9vKToKKyAgICAgICAg
KCk6CisKIDIwMTEtMDctMTIgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLiBTa2lwcGluZyBhIGZldyB0ZXN0cyB3aGljaCBmYWlsIGR1
ZSB0byBkaWZmZXJpbmcgb3V0cHV0CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3BvbHltb3Jw
aGljLWNvbnN0cnVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9qcy9wb2x5bW9ycGhpYy1jb25zdHJ1Y3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9wb2x5bW9ycGhpYy1jb25zdHJ1Y3QtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACitUaGlzIHRlc3RzIHRoYXQgcG9seW1vcnBoaWMg
Y29uc3RydWN0aW9uIHdvcmtzIGNvcnJlY3RseS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgY29uc3RydWN0KEZvbykuZmllbGQgaXMgJ2ZvbycKK1BBU1MgY29uc3RydWN0
KEZvbykuZmllbGQgaXMgJ2ZvbycKK1BBU1MgY29uc3RydWN0KEZvbykuZmllbGQgaXMgJ2ZvbycK
K1BBU1MgY29uc3RydWN0KEZvbykuZmllbGQgaXMgJ2ZvbycKK1BBU1MgY29uc3RydWN0KEJhciku
ZmllbGQgaXMgJ2JhcicKK1BBU1MgY29uc3RydWN0KEJheikuZmllbGQgaXMgJ2JheicKK1BBU1Mg
Y29uc3RydWN0KEZvbykuZmllbGQgaXMgJ2ZvbycKK1BBU1MgY29uc3RydWN0KEJhcikuZmllbGQg
aXMgJ2JhcicKK1BBU1MgY29uc3RydWN0KEJheikuZmllbGQgaXMgJ2JheicKK1BBU1MgY29uc3Ry
dWN0KEZvbykuZmllbGQgaXMgJ2ZvbycKK1BBU1MgY29uc3RydWN0KEJhcikuZmllbGQgaXMgJ2Jh
cicKK1BBU1MgY29uc3RydWN0KEJheikuZmllbGQgaXMgJ2JheicKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2pzL3BvbHltb3JwaGljLWNvbnN0cnVjdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvanMvcG9seW1vcnBoaWMtY29uc3RydWN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL3BvbHltb3JwaGljLWNvbnN0cnVjdC5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3Rz
L3BvbHltb3JwaGljLWNvbnN0cnVjdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1jb25zdHJ1Y3QuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvcG9seW1vcnBo
aWMtY29uc3RydWN0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3Jp
cHQtdGVzdHMvcG9seW1vcnBoaWMtY29uc3RydWN0LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMxIEBACitkZXNjcmlwdGlvbigKKyJUaGlzIHRlc3RzIHRoYXQgcG9seW1vcnBoaWMgY29uc3Ry
dWN0aW9uIHdvcmtzIGNvcnJlY3RseS4iCispOworCitmdW5jdGlvbiBGb28oKSB7CisgICAgdGhp
cy5maWVsZCA9ICJmb28iOworfQorCitmdW5jdGlvbiBCYXIoKSB7CisgICAgdGhpcy5maWVsZCA9
ICJiYXIiOworfQorCitmdW5jdGlvbiBCYXooKSB7CisgICAgdGhpcy5maWVsZCA9ICJiYXoiOwor
fQorCitmdW5jdGlvbiBjb25zdHJ1Y3Qod2hhdCkgeworICAgIHJldHVybiBuZXcgd2hhdCgpOwor
fQorCitmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkgeworICAgIHNob3VsZEJlKCJjb25zdHJ1
Y3QoRm9vKS5maWVsZCIsICInZm9vJyIpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsr
aSkgeworICAgIHNob3VsZEJlKCJjb25zdHJ1Y3QoRm9vKS5maWVsZCIsICInZm9vJyIpOworICAg
IHNob3VsZEJlKCJjb25zdHJ1Y3QoQmFyKS5maWVsZCIsICInYmFyJyIpOworICAgIHNob3VsZEJl
KCJjb25zdHJ1Y3QoQmF6KS5maWVsZCIsICInYmF6JyIpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>