<?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>28701</bug_id>
          
          <creation_ts>2009-08-24 21:56:23 -0700</creation_ts>
          <short_desc>How many copies of the parameters do you need?</short_desc>
          <delta_ts>2009-09-01 03:04:28 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>142504</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-24 21:56:23 -0700</bug_when>
    <thetext>The function parameters in JSC get copied a lot - and unnecessarily so.

Originally this happened due to duplicating FunctionBodyNodes on recompilation, though the problem has been exacerbated by copying the parameters from the original function body onto the executable, then back onto the real body that will be generated (this happens on every function).  And this is all made worse since the data structures in question are a little ugly - C style arrays of C++ objects containing ref counts, so they need a full copy-construct (rather than a simple memcpy).

This can all be greatly simplified by just punting the parameters off into their own ref-counted object, and forgoing all the copying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142506</commentid>
    <comment_count>1</comment_count>
      <attachid>38523</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-24 22:03:09 -0700</bug_when>
    <thetext>Created attachment 38523
The Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142507</commentid>
    <comment_count>2</comment_count>
      <attachid>38524</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-24 22:09:59 -0700</bug_when>
    <thetext>Created attachment 38524
PassRefPtr != RefPtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142706</commentid>
    <comment_count>3</comment_count>
      <attachid>38524</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-25 15:10:51 -0700</bug_when>
    <thetext>Comment on attachment 38524
PassRefPtr != RefPtr

&gt; +    finishParsing(adoptRef(new FunctionParameters(firstParameter)), ident);

The usual idiom would be to make a create function instead of doing the adoptRef here. I&apos;d prefer to see it done that way.

I&apos;d like to see the same thing for FunctionExecutable too; lets keep those adoptRef inside create functions, and keep the constructors private.

&gt; +        void finishParsing(PassRefPtr&lt;FunctionParameters&gt; parameters, const Identifier&amp; ident);

You could omit both of these argument names.

&gt;  FunctionExecutable::~FunctionExecutable()
&gt;  {
&gt; -    for (int i = 0; i &lt; m_parameterCount; ++i)
&gt; -        m_parameters[i].~Identifier();
&gt; -    fastFree(m_parameters);
&gt;      delete m_codeBlock;
&gt;  }

Seems like we should use OwnPtr for m_codeBlock.

&gt; +    return adoptRef(new FunctionExecutable(functionName, body-&gt;source(), body-&gt;usesArguments(), body-&gt;parameters(), body-&gt;lineNo(), body-&gt;lastLine()));

See above comment about create.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142807</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-26 00:51:28 -0700</bug_when>
    <thetext>Fixed all review comments except the OwnPtr one.

The problem here is that CodeBlock includes Executable, not vice-versa.  Every CodeBlock has a pointer to its owner Executable, and contains inline methods that access the it.  The OwnPtr template is not satisfied by a forward declaration of the CodeBlock types, so manual deletion seemed the simplest solution.

(Though any suggestions as to how this can be resolved would be welcomed.)

Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
Sending        JavaScriptCore/bytecompiler/BytecodeGenerator.h
Sending        JavaScriptCore/parser/Nodes.cpp
Sending        JavaScriptCore/parser/Nodes.h
Sending        JavaScriptCore/runtime/Executable.cpp
Sending        JavaScriptCore/runtime/Executable.h
Transmitting file data .......
Committed revision 47775.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142817</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-26 03:10:31 -0700</bug_when>
    <thetext>Looks like this caused:
	ecma/Date/15.9.5.12-1.js

to fail on the bots.  I&apos;ll re-open this for now in case we decide to roll this out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143814</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-01 03:04:28 -0700</bug_when>
    <thetext>I guess the test got fixed later, since I see no indication of this being rolled out.  closing again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38523</attachid>
            <date>2009-08-24 22:03:09 -0700</date>
            <delta_ts>2009-08-24 22:09:59 -0700</delta_ts>
            <desc>The Patch</desc>
            <filename>patch.refparams.txt</filename>
            <type>text/plain</type>
            <size>13307</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzQwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMDktMDgtMjQgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIEhvdyBtYW55IGNv
cGllcyBvZiB0aGUgcGFyYW1ldGVycyBkbyB5b3UgbmVlZD8KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzAxCisKKyAgICAgICAgVGhlIGZ1bmN0aW9u
IHBhcmFtZXRlcnMgaW4gSlNDIGdldCBjb3BpZWQgYSBsb3QgLSBhbmQgdW5uZWNlc3NhcmlseSBz
by4KKworICAgICAgICBPcmlnaW5hbGx5IHRoaXMgaGFwcGVuZWQgZHVlIHRvIGR1cGxpY2F0aW5n
IEZ1bmN0aW9uQm9keU5vZGVzIG9uIHJlY29tcGlsYXRpb24sCisgICAgICAgIHRob3VnaCB0aGUg
cHJvYmxlbSBoYXMgYmVlbiBleGFjZXJiYXRlZCBieSBjb3B5aW5nIHRoZSBwYXJhbWV0ZXJzIGZy
b20gdGhlCisgICAgICAgIG9yaWdpbmFsIGZ1bmN0aW9uIGJvZHkgb250byB0aGUgZXhlY3V0YWJs
ZSwgdGhlbiBiYWNrIG9udG8gdGhlIHJlYWwgYm9keSB0aGF0CisgICAgICAgIHdpbGwgYmUgZ2Vu
ZXJhdGVkICh0aGlzIGhhcHBlbnMgb24gZXZlcnkgZnVuY3Rpb24pLiAgQW5kIHRoaXMgaXMgYWxs
IG1hZGUgd29yc2UKKyAgICAgICAgc2luY2UgdGhlIGRhdGEgc3RydWN0dXJlcyBpbiBxdWVzdGlv
biBhcmUgYSBsaXR0bGUgdWdseSAtIEMgc3R5bGUgYXJyYXlzIG9mIEMrKworICAgICAgICBvYmpl
Y3RzIGNvbnRhaW5pbmcgcmVmIGNvdW50cywgc28gdGhleSBuZWVkIGEgZnVsbCBjb3B5LWNvbnN0
cnVjdCAocmF0aGVyIHRoYW4KKyAgICAgICAgYSBzaW1wbGUgbWVtY3B5KS4KKworICAgICAgICBU
aGlzIGNhbiBhbGwgYmUgZ3JlYXRseSBzaW1wbGlmaWVkIGJ5IGp1c3QgcHVudGluZyB0aGUgcGFy
YW1ldGVycyBvZmYgaW50bworICAgICAgICB0aGVpciBvd24gcmVmLWNvdW50ZWQgb2JqZWN0LCBh
bmQgZm9yZ29pbmcgYWxsIHRoZSBjb3B5aW5nLgorCisgICAgICAgIH5ubyBwZXJmb3JtYW5jZSBj
aGFuZ2UsIHBvc3NpYmxlIHNsaWdodCBwcm9ncmVzc2lvbi4KKworICAgICAgICAqIGJ5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjptYWtlRnVuY3Rp
b24pOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
UGFyYW1ldGVyczo6RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25C
b2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5v
ZGU6OmZpbmlzaFBhcnNpbmcpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25Cb2R5Tm9kZTo6cGFyYW1ldGVyQ291bnQpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6fkZ1bmN0aW9uRXhlY3V0
YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwYXJzZUV4Y2VwdGlvbkluZm8pOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbVN0cmluZyk6CisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rp
b25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbWV0
ZXJDb3VudCk6CisKIDIwMDktMDgtMjQgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBCdWlsZCBmaXg6IHN0YXJ0IG91dCB3aXRoIGEgMzItYml0IHZhbHVlIHRv
IGF2b2lkIGEgc2hvcnRlbmluZyB3YXJuaW5nLgpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA0Nzc0MCkKKysr
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0OSw4ICszNDksOCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoRnVuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7
ICsraSkKICAgICAgICAgYWRkVmFyKCp2YXJTdGFja1tpXS5maXJzdCwgdmFyU3RhY2tbaV0uc2Vj
b25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpOwogCi0gICAgY29uc3QgSWRlbnRp
ZmllciogcGFyYW1ldGVycyA9IGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwotICAgIHNpemVf
dCBwYXJhbWV0ZXJDb3VudCA9IGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVyQ291bnQoKTsKKyAgICBG
dW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJz
KCk7CisgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVycy5zaXplKCk7CiAgICAg
bV9uZXh0UGFyYW1ldGVySW5kZXggPSAtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
IC0gcGFyYW1ldGVyQ291bnQgLSAxOwogICAgIG1fcGFyYW1ldGVycy5ncm93KDEgKyBwYXJhbWV0
ZXJDb3VudCk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgogCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gNDc3
NDApCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDE5LDcgKzQxOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIFBhc3NSZWZQdHI8RnVuY3Rpb25FeGVjdXRhYmxlPiBtYWtlRnVuY3Rpb24oRnVuY3Rpb25C
b2R5Tm9kZSogYm9keSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGdW5jdGlvbkV4ZWN1dGFibGUoYm9keS0+aWRlbnQoKSwgYm9keS0+c291cmNlKCksIGJvZHkt
PnVzZXNBcmd1bWVudHMoKSwgYm9keS0+Y29weVBhcmFtZXRlcnMoKSwgYm9keS0+cGFyYW1ldGVy
Q291bnQoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpKTsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRnVuY3Rpb25FeGVjdXRhYmxlKGJvZHktPmlkZW50KCksIGJv
ZHktPnNvdXJjZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwg
Ym9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpKTsKICAgICAgICAgfQogCiAgICAgICAg
IFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKTsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lv
biA0Nzc0MCkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5ODAsNDMgKzE5ODAsMzIgQEAgUmVnaXN0ZXJJRCogRXZhbE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlYwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25C
b2R5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitGdW5jdGlvblBhcmFtZXRl
cnM6OkZ1bmN0aW9uUGFyYW1ldGVycyhQYXJhbWV0ZXJOb2RlKiBmaXJzdFBhcmFtZXRlcikKK3sK
KyAgICBmb3IgKFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlciA9IGZpcnN0UGFyYW1ldGVyOyBwYXJh
bWV0ZXI7IHBhcmFtZXRlciA9IHBhcmFtZXRlci0+bmV4dFBhcmFtKCkpCisgICAgICAgIGFwcGVu
ZChwYXJhbWV0ZXItPmlkZW50KCkpOworfQorCiBpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVu
Y3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgOiBTY29wZU5vZGUo
Z2xvYmFsRGF0YSkKLSAgICAsIG1fcGFyYW1ldGVycygwKQotICAgICwgbV9wYXJhbWV0ZXJDb3Vu
dCgwKQogewogfQogCiBpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3Rh
Y2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKICAg
ICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgdmFyU3RhY2ss
IGZ1bmNTdGFjaywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKLSAgICAsIG1fcGFyYW1ldGVycygw
KQotICAgICwgbV9wYXJhbWV0ZXJDb3VudCgwKQotewotfQotCi1GdW5jdGlvbkJvZHlOb2RlOjp+
RnVuY3Rpb25Cb2R5Tm9kZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhcmFt
ZXRlckNvdW50OyArK2kpCi0gICAgICAgIG1fcGFyYW1ldGVyc1tpXS5+SWRlbnRpZmllcigpOwot
ICAgIGZhc3RGcmVlKG1fcGFyYW1ldGVycyk7CiB9CiAKIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6
ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIGZp
cnN0UGFyYW1ldGVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKLSAgICBWZWN0b3I8SWRl
bnRpZmllcj4gcGFyYW1ldGVyczsKLSAgICBmb3IgKFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlciA9
IGZpcnN0UGFyYW1ldGVyOyBwYXJhbWV0ZXI7IHBhcmFtZXRlciA9IHBhcmFtZXRlci0+bmV4dFBh
cmFtKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlci0+aWRlbnQoKSk7Ci0g
ICAgc2l6ZV90IGNvdW50ID0gcGFyYW1ldGVycy5zaXplKCk7Ci0KICAgICBzZXRTb3VyY2Uoc291
cmNlKTsKLSAgICBmaW5pc2hQYXJzaW5nKHBhcmFtZXRlcnMucmVsZWFzZUJ1ZmZlcigpLCBjb3Vu
dCwgaWRlbnQpOworICAgIGZpbmlzaFBhcnNpbmcoYWRvcHRSZWYobmV3IEZ1bmN0aW9uUGFyYW1l
dGVycyhmaXJzdFBhcmFtZXRlcikpLCBpZGVudCk7CiB9CiAKLXZvaWQgRnVuY3Rpb25Cb2R5Tm9k
ZTo6ZmluaXNoUGFyc2luZyhJZGVudGlmaWVyKiBwYXJhbWV0ZXJzLCBzaXplX3QgcGFyYW1ldGVy
Q291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQordm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpm
aW5pc2hQYXJzaW5nKFBhc3NSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBBU1NFUlQoIXNvdXJjZSgpLmlzTnVsbCgp
KTsKICAgICBtX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgIG1fcGFyYW1ldGVyQ291bnQg
PSBwYXJhbWV0ZXJDb3VudDsKICAgICBtX2lkZW50ID0gaWRlbnQ7CiB9CiAKQEAgLTIwNTMsMTMg
KzIwNDIsNiBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvCiAgICAg
cmV0dXJuIDA7CiB9CiAKLUlkZW50aWZpZXIqIEZ1bmN0aW9uQm9keU5vZGU6OmNvcHlQYXJhbWV0
ZXJzKCkKLXsKLSAgICBJZGVudGlmaWVyKiBwYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8SWRlbnRp
Zmllcio+KGZhc3RNYWxsb2MobV9wYXJhbWV0ZXJDb3VudCAqIHNpemVvZihJZGVudGlmaWVyKSkp
OwotICAgIFZlY3RvckNvcGllcjxmYWxzZSwgSWRlbnRpZmllcj46OnVuaW5pdGlhbGl6ZWRDb3B5
KG1fcGFyYW1ldGVycywgbV9wYXJhbWV0ZXJzICsgbV9wYXJhbWV0ZXJDb3VudCwgcGFyYW1ldGVy
cyk7Ci0gICAgcmV0dXJuIHBhcmFtZXRlcnM7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBGdW5jRGVjbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIFJlZ2lzdGVySUQqIEZ1bmNEZWNsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5o
CShyZXZpc2lvbiA0Nzc0MCkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDQ1LDIxICsxNDQ1LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCk7CiAgICAgfTsKIAorICAgIGNsYXNzIEZ1bmN0aW9uUGFyYW1ldGVycyA6
IHB1YmxpYyBWZWN0b3I8SWRlbnRpZmllcj4sIHB1YmxpYyBSZWZDb3VudGVkPEZ1bmN0aW9uUGFy
YW1ldGVycz4geworICAgIHB1YmxpYzoKKyAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKFBhcmFt
ZXRlck5vZGUqKTsKKyAgICB9OworCiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZSA6IHB1Ymxp
YyBTY29wZU5vZGUgewotICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHB1YmxpYzoKICAg
ICAgICAgc3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqKTsKICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKEpTR2xvYmFs
RGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgY29uc3Qg
U291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7Ci0gICAgICAgIHZp
cnR1YWwgfkZ1bmN0aW9uQm9keU5vZGUoKTsKIAotICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBw
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9Ci0gICAgICAgIHNpemVf
dCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH0KLSAg
ICAgICAgSWRlbnRpZmllciogY29weVBhcmFtZXRlcnMoKTsKKyAgICAgICAgRnVuY3Rpb25QYXJh
bWV0ZXJzKiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9
CisgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1l
dGVycy0+c2l6ZSgpOyB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogCiAgICAgICAgIHZvaWQg
ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiwgUGFyYW1ldGVyTm9kZSosIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KTsKLSAgICAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKElkZW50aWZpZXIq
IHBhcmFtZXRlcnMsIHNpemVfdCBwYXJhbWV0ZXJDb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQpOworICAgICAgICB2b2lkIGZpbmlzaFBhcnNpbmcoUGFzc1JlZlB0cjxGdW5jdGlvblBhcmFt
ZXRlcnM+IHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KTsKICAgICAgICAgCiAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50KCkgeyByZXR1cm4gbV9pZGVudDsgfQogCkBA
IC0xNDcwLDggKzE0NzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRnVuY3Rpb25Cb2R5
Tm9kZShKU0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25T
dGFjayosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMp
OwogCiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKLSAgICAgICAgSWRlbnRpZmllciogbV9w
YXJhbWV0ZXJzOwotICAgICAgICBzaXplX3QgbV9wYXJhbWV0ZXJDb3VudDsKKyAgICAgICAgUGFz
c1JlZlB0cjxGdW5jdGlvblBhcmFtZXRlcnM+IG1fcGFyYW1ldGVyczsKICAgICB9OwogCiAgICAg
Y2xhc3MgRnVuY0V4cHJOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gNDc3NDApCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1
Niw2IEBAIFByb2dyYW1FeGVjdXRhYmxlOjp+UHJvZ3JhbUV4ZWN1dGFibGUoKQogCiBGdW5jdGlv
bkV4ZWN1dGFibGU6On5GdW5jdGlvbkV4ZWN1dGFibGUoKQogewotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbV9wYXJhbWV0ZXJDb3VudDsgKytpKQotICAgICAgICBtX3BhcmFtZXRlcnNbaV0ufklk
ZW50aWZpZXIoKTsKLSAgICBmYXN0RnJlZShtX3BhcmFtZXRlcnMpOwogICAgIGRlbGV0ZSBtX2Nv
ZGVCbG9jazsKIH0KIApAQCAtMTIwLDcgKzExNyw3IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlKEV4ZWNTdGEKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGds
b2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZ2xvYmFsRGF0YSwgMCwg
MCwgbV9zb3VyY2UpOwogICAgIGlmIChtX2ZvcmNlVXNlc0FyZ3VtZW50cykKICAgICAgICAgYm9k
eS0+c2V0VXNlc0FyZ3VtZW50cygpOwotICAgIGJvZHktPmZpbmlzaFBhcnNpbmcoY29weVBhcmFt
ZXRlcnMoKSwgbV9wYXJhbWV0ZXJDb3VudCwgbV9uYW1lKTsKKyAgICBib2R5LT5maW5pc2hQYXJz
aW5nKG1fcGFyYW1ldGVycywgbV9uYW1lKTsKICAgICByZWNvcmRQYXJzZShib2R5LT5mZWF0dXJl
cygpLCBib2R5LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7CiAKICAgICBTY29wZUNoYWlu
IHNjb3BlQ2hhaW4oc2NvcGVDaGFpbk5vZGUpOwpAQCAtMTg1LDcgKzE4Miw3IEBAIEV4Y2VwdGlv
bkluZm8qIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwYXIKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5
Tm9kZT4gbmV3RnVuY3Rpb25Cb2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlv
bkJvZHlOb2RlPihnbG9iYWxEYXRhLCAwLCAwLCBtX3NvdXJjZSk7CiAgICAgaWYgKG1fZm9yY2VV
c2VzQXJndW1lbnRzKQogICAgICAgICBuZXdGdW5jdGlvbkJvZHktPnNldFVzZXNBcmd1bWVudHMo
KTsKLSAgICBuZXdGdW5jdGlvbkJvZHktPmZpbmlzaFBhcnNpbmcoY29weVBhcmFtZXRlcnMoKSwg
bV9wYXJhbWV0ZXJDb3VudCwgbV9uYW1lKTsKKyAgICBuZXdGdW5jdGlvbkJvZHktPmZpbmlzaFBh
cnNpbmcobV9wYXJhbWV0ZXJzLCBtX25hbWUpOwogCiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWlu
KHNjb3BlQ2hhaW5Ob2RlKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2Nv
cGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKQEAgLTI2MiwyNSArMjU5LDE3IEBAIFBhc3NSZWZQdHI8
RnVuY3Rpb25FeGVjdXRhYmxlPiBGdW5jdGlvbkUKIAogICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJv
ZHkgPSBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihmdW5jRXhwciktPmJvZHkoKTsKICAgICBB
U1NFUlQoYm9keSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGdW5jdGlvbkV4ZWN1dGFibGUo
ZnVuY3Rpb25OYW1lLCBib2R5LT5zb3VyY2UoKSwgYm9keS0+dXNlc0FyZ3VtZW50cygpLCBib2R5
LT5jb3B5UGFyYW1ldGVycygpLCBib2R5LT5wYXJhbWV0ZXJDb3VudCgpLCBib2R5LT5saW5lTm8o
KSwgYm9keS0+bGFzdExpbmUoKSkpOwotfQotCi1JZGVudGlmaWVyKiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvcHlQYXJhbWV0ZXJzKCkKLXsKLSAgICAvLyBUaGlzIGNvZGUgdXNlcyB0aGUgaW50ZXJu
YWwgdmVjdG9yIGNvcGllciB0byBtYWtlIGNvcHktY29uc3RydWN0ZWQgY29waWVzIG9mIHRoZSBk
YXRhIGluIHRoZSBhcnJheQotICAgIC8vICh0aGUgYXJyYXkgY29udGFpbnMgSWRlbnRmaWVycyB3
aGljaCByZWZlcmVuY2UgY291bnQgVXN0cmluZzo6UmVwcywgd2hpY2ggbXVzdCBiZSByZWYnZWQg
Y29ycmVjdGx5KS4KLSAgICBJZGVudGlmaWVyKiBwYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8SWRl
bnRpZmllcio+KGZhc3RNYWxsb2MobV9wYXJhbWV0ZXJDb3VudCAqIHNpemVvZihJZGVudGlmaWVy
KSkpOwotICAgIFdURjo6VmVjdG9yQ29waWVyPGZhbHNlLCBJZGVudGlmaWVyPjo6dW5pbml0aWFs
aXplZENvcHkobV9wYXJhbWV0ZXJzLCBtX3BhcmFtZXRlcnMgKyBtX3BhcmFtZXRlckNvdW50LCBw
YXJhbWV0ZXJzKTsKLSAgICByZXR1cm4gcGFyYW1ldGVyczsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEZ1bmN0aW9uRXhlY3V0YWJsZShmdW5jdGlvbk5hbWUsIGJvZHktPnNvdXJjZSgpLCBib2R5
LT51c2VzQXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+bGluZU5vKCksIGJv
ZHktPmxhc3RMaW5lKCkpKTsKIH0KIAogVVN0cmluZyBGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFt
U3RyaW5nKCkgY29uc3QKIHsKKyAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAq
bV9wYXJhbWV0ZXJzOwogICAgIFVTdHJpbmcgcygiIik7Ci0gICAgZm9yIChpbnQgcG9zID0gMDsg
cG9zIDwgbV9wYXJhbWV0ZXJDb3VudDsgKytwb3MpIHsKKyAgICBmb3IgKHNpemVfdCBwb3MgPSAw
OyBwb3MgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytwb3MpIHsKICAgICAgICAgaWYgKCFzLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIHMgKz0gIiwgIjsKLSAgICAgICAgcyArPSBtX3BhcmFtZXRlcnNb
cG9zXS51c3RyaW5nKCk7CisgICAgICAgIHMgKz0gcGFyYW1ldGVyc1twb3NdLnVzdHJpbmcoKTsK
ICAgICB9CiAKICAgICByZXR1cm4gczsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiA0Nzc0MCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsMTEgKzIyMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGUgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgSWRlbnRpZmllciogcGFyYW1ldGVycywgaW50
IHBhcmFtZXRlckNvdW50LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCisgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKICAgICAgICAgICAgIDogU2Ny
aXB0RXhlY3V0YWJsZShzb3VyY2UpCiAgICAgICAgICAgICAsIG1fZm9yY2VVc2VzQXJndW1lbnRz
KGZvcmNlVXNlc0FyZ3VtZW50cykKICAgICAgICAgICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFtZXRl
cnMpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyQ291bnQocGFyYW1ldGVyQ291bnQpCiAgICAg
ICAgICAgICAsIG1fY29kZUJsb2NrKDApCiAgICAgICAgICAgICAsIG1fbmFtZShuYW1lKQogICAg
ICAgICAgICAgLCBtX251bVZhcmlhYmxlcygwKQpAQCAtMjYxLDcgKzI2MCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSgpIHsg
cmV0dXJuIG1fbmFtZTsgfQotICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX3BhcmFtZXRlckNvdW50OyB9CisgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6ZSgpOyB9CiAgICAgICAgIHNpemVf
dCB2YXJpYWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJpYWJsZXM7IH0KICAgICAg
ICAgVVN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwogCkBAIC0yNzIsMTEgKzI3MSw5IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBjb21waWxlKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7Ci0gICAgICAgIElkZW50aWZpZXIqIGNvcHlQYXJhbWV0
ZXJzKCk7CiAKICAgICAgICAgYm9vbCBtX2ZvcmNlVXNlc0FyZ3VtZW50czsKLSAgICAgICAgSWRl
bnRpZmllciogbV9wYXJhbWV0ZXJzOwotICAgICAgICBpbnQgbV9wYXJhbWV0ZXJDb3VudDsKKyAg
ICAgICAgUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOwogICAgICAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgICAgICBJZGVudGlmaWVyIG1fbmFtZTsKICAgICAg
ICAgc2l6ZV90IG1fbnVtVmFyaWFibGVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38524</attachid>
            <date>2009-08-24 22:09:59 -0700</date>
            <delta_ts>2009-08-25 15:10:51 -0700</delta_ts>
            <desc>PassRefPtr != RefPtr</desc>
            <filename>patch.refparams.2.txt</filename>
            <type>text/plain</type>
            <size>13303</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzQwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMDktMDgtMjQgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIEhvdyBtYW55IGNv
cGllcyBvZiB0aGUgcGFyYW1ldGVycyBkbyB5b3UgbmVlZD8KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzAxCisKKyAgICAgICAgVGhlIGZ1bmN0aW9u
IHBhcmFtZXRlcnMgaW4gSlNDIGdldCBjb3BpZWQgYSBsb3QgLSBhbmQgdW5uZWNlc3NhcmlseSBz
by4KKworICAgICAgICBPcmlnaW5hbGx5IHRoaXMgaGFwcGVuZWQgZHVlIHRvIGR1cGxpY2F0aW5n
IEZ1bmN0aW9uQm9keU5vZGVzIG9uIHJlY29tcGlsYXRpb24sCisgICAgICAgIHRob3VnaCB0aGUg
cHJvYmxlbSBoYXMgYmVlbiBleGFjZXJiYXRlZCBieSBjb3B5aW5nIHRoZSBwYXJhbWV0ZXJzIGZy
b20gdGhlCisgICAgICAgIG9yaWdpbmFsIGZ1bmN0aW9uIGJvZHkgb250byB0aGUgZXhlY3V0YWJs
ZSwgdGhlbiBiYWNrIG9udG8gdGhlIHJlYWwgYm9keSB0aGF0CisgICAgICAgIHdpbGwgYmUgZ2Vu
ZXJhdGVkICh0aGlzIGhhcHBlbnMgb24gZXZlcnkgZnVuY3Rpb24pLiAgQW5kIHRoaXMgaXMgYWxs
IG1hZGUgd29yc2UKKyAgICAgICAgc2luY2UgdGhlIGRhdGEgc3RydWN0dXJlcyBpbiBxdWVzdGlv
biBhcmUgYSBsaXR0bGUgdWdseSAtIEMgc3R5bGUgYXJyYXlzIG9mIEMrKworICAgICAgICBvYmpl
Y3RzIGNvbnRhaW5pbmcgcmVmIGNvdW50cywgc28gdGhleSBuZWVkIGEgZnVsbCBjb3B5LWNvbnN0
cnVjdCAocmF0aGVyIHRoYW4KKyAgICAgICAgYSBzaW1wbGUgbWVtY3B5KS4KKworICAgICAgICBU
aGlzIGNhbiBhbGwgYmUgZ3JlYXRseSBzaW1wbGlmaWVkIGJ5IGp1c3QgcHVudGluZyB0aGUgcGFy
YW1ldGVycyBvZmYgaW50bworICAgICAgICB0aGVpciBvd24gcmVmLWNvdW50ZWQgb2JqZWN0LCBh
bmQgZm9yZ29pbmcgYWxsIHRoZSBjb3B5aW5nLgorCisgICAgICAgIH5ubyBwZXJmb3JtYW5jZSBj
aGFuZ2UsIHBvc3NpYmxlIHNsaWdodCBwcm9ncmVzc2lvbi4KKworICAgICAgICAqIGJ5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjptYWtlRnVuY3Rp
b24pOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
UGFyYW1ldGVyczo6RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25C
b2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5v
ZGU6OmZpbmlzaFBhcnNpbmcpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25Cb2R5Tm9kZTo6cGFyYW1ldGVyQ291bnQpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6fkZ1bmN0aW9uRXhlY3V0
YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwYXJzZUV4Y2VwdGlvbkluZm8pOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbVN0cmluZyk6CisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rp
b25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbWV0
ZXJDb3VudCk6CisKIDIwMDktMDgtMjQgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBCdWlsZCBmaXg6IHN0YXJ0IG91dCB3aXRoIGEgMzItYml0IHZhbHVlIHRv
IGF2b2lkIGEgc2hvcnRlbmluZyB3YXJuaW5nLgpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA0Nzc0MCkKKysr
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0OSw4ICszNDksOCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoRnVuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7
ICsraSkKICAgICAgICAgYWRkVmFyKCp2YXJTdGFja1tpXS5maXJzdCwgdmFyU3RhY2tbaV0uc2Vj
b25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpOwogCi0gICAgY29uc3QgSWRlbnRp
ZmllciogcGFyYW1ldGVycyA9IGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwotICAgIHNpemVf
dCBwYXJhbWV0ZXJDb3VudCA9IGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVyQ291bnQoKTsKKyAgICBG
dW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJz
KCk7CisgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVycy5zaXplKCk7CiAgICAg
bV9uZXh0UGFyYW1ldGVySW5kZXggPSAtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
IC0gcGFyYW1ldGVyQ291bnQgLSAxOwogICAgIG1fcGFyYW1ldGVycy5ncm93KDEgKyBwYXJhbWV0
ZXJDb3VudCk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgogCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gNDc3
NDApCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDE5LDcgKzQxOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIFBhc3NSZWZQdHI8RnVuY3Rpb25FeGVjdXRhYmxlPiBtYWtlRnVuY3Rpb24oRnVuY3Rpb25C
b2R5Tm9kZSogYm9keSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGdW5jdGlvbkV4ZWN1dGFibGUoYm9keS0+aWRlbnQoKSwgYm9keS0+c291cmNlKCksIGJvZHkt
PnVzZXNBcmd1bWVudHMoKSwgYm9keS0+Y29weVBhcmFtZXRlcnMoKSwgYm9keS0+cGFyYW1ldGVy
Q291bnQoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpKTsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRnVuY3Rpb25FeGVjdXRhYmxlKGJvZHktPmlkZW50KCksIGJv
ZHktPnNvdXJjZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwg
Ym9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpKTsKICAgICAgICAgfQogCiAgICAgICAg
IFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKTsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lv
biA0Nzc0MCkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5ODAsNDMgKzE5ODAsMzIgQEAgUmVnaXN0ZXJJRCogRXZhbE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlYwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25C
b2R5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitGdW5jdGlvblBhcmFtZXRl
cnM6OkZ1bmN0aW9uUGFyYW1ldGVycyhQYXJhbWV0ZXJOb2RlKiBmaXJzdFBhcmFtZXRlcikKK3sK
KyAgICBmb3IgKFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlciA9IGZpcnN0UGFyYW1ldGVyOyBwYXJh
bWV0ZXI7IHBhcmFtZXRlciA9IHBhcmFtZXRlci0+bmV4dFBhcmFtKCkpCisgICAgICAgIGFwcGVu
ZChwYXJhbWV0ZXItPmlkZW50KCkpOworfQorCiBpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVu
Y3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgOiBTY29wZU5vZGUo
Z2xvYmFsRGF0YSkKLSAgICAsIG1fcGFyYW1ldGVycygwKQotICAgICwgbV9wYXJhbWV0ZXJDb3Vu
dCgwKQogewogfQogCiBpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3Rh
Y2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKICAg
ICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgdmFyU3RhY2ss
IGZ1bmNTdGFjaywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKLSAgICAsIG1fcGFyYW1ldGVycygw
KQotICAgICwgbV9wYXJhbWV0ZXJDb3VudCgwKQotewotfQotCi1GdW5jdGlvbkJvZHlOb2RlOjp+
RnVuY3Rpb25Cb2R5Tm9kZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhcmFt
ZXRlckNvdW50OyArK2kpCi0gICAgICAgIG1fcGFyYW1ldGVyc1tpXS5+SWRlbnRpZmllcigpOwot
ICAgIGZhc3RGcmVlKG1fcGFyYW1ldGVycyk7CiB9CiAKIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6
ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIGZp
cnN0UGFyYW1ldGVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKLSAgICBWZWN0b3I8SWRl
bnRpZmllcj4gcGFyYW1ldGVyczsKLSAgICBmb3IgKFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlciA9
IGZpcnN0UGFyYW1ldGVyOyBwYXJhbWV0ZXI7IHBhcmFtZXRlciA9IHBhcmFtZXRlci0+bmV4dFBh
cmFtKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlci0+aWRlbnQoKSk7Ci0g
ICAgc2l6ZV90IGNvdW50ID0gcGFyYW1ldGVycy5zaXplKCk7Ci0KICAgICBzZXRTb3VyY2Uoc291
cmNlKTsKLSAgICBmaW5pc2hQYXJzaW5nKHBhcmFtZXRlcnMucmVsZWFzZUJ1ZmZlcigpLCBjb3Vu
dCwgaWRlbnQpOworICAgIGZpbmlzaFBhcnNpbmcoYWRvcHRSZWYobmV3IEZ1bmN0aW9uUGFyYW1l
dGVycyhmaXJzdFBhcmFtZXRlcikpLCBpZGVudCk7CiB9CiAKLXZvaWQgRnVuY3Rpb25Cb2R5Tm9k
ZTo6ZmluaXNoUGFyc2luZyhJZGVudGlmaWVyKiBwYXJhbWV0ZXJzLCBzaXplX3QgcGFyYW1ldGVy
Q291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQordm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpm
aW5pc2hQYXJzaW5nKFBhc3NSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBBU1NFUlQoIXNvdXJjZSgpLmlzTnVsbCgp
KTsKICAgICBtX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgIG1fcGFyYW1ldGVyQ291bnQg
PSBwYXJhbWV0ZXJDb3VudDsKICAgICBtX2lkZW50ID0gaWRlbnQ7CiB9CiAKQEAgLTIwNTMsMTMg
KzIwNDIsNiBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvCiAgICAg
cmV0dXJuIDA7CiB9CiAKLUlkZW50aWZpZXIqIEZ1bmN0aW9uQm9keU5vZGU6OmNvcHlQYXJhbWV0
ZXJzKCkKLXsKLSAgICBJZGVudGlmaWVyKiBwYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8SWRlbnRp
Zmllcio+KGZhc3RNYWxsb2MobV9wYXJhbWV0ZXJDb3VudCAqIHNpemVvZihJZGVudGlmaWVyKSkp
OwotICAgIFZlY3RvckNvcGllcjxmYWxzZSwgSWRlbnRpZmllcj46OnVuaW5pdGlhbGl6ZWRDb3B5
KG1fcGFyYW1ldGVycywgbV9wYXJhbWV0ZXJzICsgbV9wYXJhbWV0ZXJDb3VudCwgcGFyYW1ldGVy
cyk7Ci0gICAgcmV0dXJuIHBhcmFtZXRlcnM7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBGdW5jRGVjbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIFJlZ2lzdGVySUQqIEZ1bmNEZWNsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5o
CShyZXZpc2lvbiA0Nzc0MCkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDQ1LDIxICsxNDQ1LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCk7CiAgICAgfTsKIAorICAgIGNsYXNzIEZ1bmN0aW9uUGFyYW1ldGVycyA6
IHB1YmxpYyBWZWN0b3I8SWRlbnRpZmllcj4sIHB1YmxpYyBSZWZDb3VudGVkPEZ1bmN0aW9uUGFy
YW1ldGVycz4geworICAgIHB1YmxpYzoKKyAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKFBhcmFt
ZXRlck5vZGUqKTsKKyAgICB9OworCiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZSA6IHB1Ymxp
YyBTY29wZU5vZGUgewotICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHB1YmxpYzoKICAg
ICAgICAgc3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqKTsKICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKEpTR2xvYmFs
RGF0YSosIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgY29uc3Qg
U291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7Ci0gICAgICAgIHZp
cnR1YWwgfkZ1bmN0aW9uQm9keU5vZGUoKTsKIAotICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBw
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9Ci0gICAgICAgIHNpemVf
dCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH0KLSAg
ICAgICAgSWRlbnRpZmllciogY29weVBhcmFtZXRlcnMoKTsKKyAgICAgICAgRnVuY3Rpb25QYXJh
bWV0ZXJzKiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9
CisgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1l
dGVycy0+c2l6ZSgpOyB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogCiAgICAgICAgIHZvaWQg
ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiwgUGFyYW1ldGVyTm9kZSosIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KTsKLSAgICAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKElkZW50aWZpZXIq
IHBhcmFtZXRlcnMsIHNpemVfdCBwYXJhbWV0ZXJDb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQpOworICAgICAgICB2b2lkIGZpbmlzaFBhcnNpbmcoUGFzc1JlZlB0cjxGdW5jdGlvblBhcmFt
ZXRlcnM+IHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KTsKICAgICAgICAgCiAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50KCkgeyByZXR1cm4gbV9pZGVudDsgfQogCkBA
IC0xNDcwLDggKzE0NzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRnVuY3Rpb25Cb2R5
Tm9kZShKU0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25T
dGFjayosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMp
OwogCiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKLSAgICAgICAgSWRlbnRpZmllciogbV9w
YXJhbWV0ZXJzOwotICAgICAgICBzaXplX3QgbV9wYXJhbWV0ZXJDb3VudDsKKyAgICAgICAgUmVm
UHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOwogICAgIH07CiAKICAgICBjbGFz
cyBGdW5jRXhwck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiA0Nzc0MCkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDYg
QEAgUHJvZ3JhbUV4ZWN1dGFibGU6On5Qcm9ncmFtRXhlY3V0YWJsZSgpCiAKIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6fkZ1bmN0aW9uRXhlY3V0YWJsZSgpCiB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBtX3BhcmFtZXRlckNvdW50OyArK2kpCi0gICAgICAgIG1fcGFyYW1ldGVyc1tpXS5+SWRlbnRp
ZmllcigpOwotICAgIGZhc3RGcmVlKG1fcGFyYW1ldGVycyk7CiAgICAgZGVsZXRlIG1fY29kZUJs
b2NrOwogfQogCkBAIC0xMjAsNyArMTE3LDcgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
bXBpbGUoRXhlY1N0YQogICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0gZ2xvYmFs
RGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihnbG9iYWxEYXRhLCAwLCAwLCBt
X3NvdXJjZSk7CiAgICAgaWYgKG1fZm9yY2VVc2VzQXJndW1lbnRzKQogICAgICAgICBib2R5LT5z
ZXRVc2VzQXJndW1lbnRzKCk7Ci0gICAgYm9keS0+ZmluaXNoUGFyc2luZyhjb3B5UGFyYW1ldGVy
cygpLCBtX3BhcmFtZXRlckNvdW50LCBtX25hbWUpOworICAgIGJvZHktPmZpbmlzaFBhcnNpbmco
bV9wYXJhbWV0ZXJzLCBtX25hbWUpOwogICAgIHJlY29yZFBhcnNlKGJvZHktPmZlYXR1cmVzKCks
IGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKIAogICAgIFNjb3BlQ2hhaW4gc2Nv
cGVDaGFpbihzY29wZUNoYWluTm9kZSk7CkBAIC0xODUsNyArMTgyLDcgQEAgRXhjZXB0aW9uSW5m
byogRnVuY3Rpb25FeGVjdXRhYmxlOjpyZXBhcgogICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2Rl
PiBuZXdGdW5jdGlvbkJvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXItPnBhcnNlPEZ1bmN0aW9uQm9k
eU5vZGU+KGdsb2JhbERhdGEsIDAsIDAsIG1fc291cmNlKTsKICAgICBpZiAobV9mb3JjZVVzZXNB
cmd1bWVudHMpCiAgICAgICAgIG5ld0Z1bmN0aW9uQm9keS0+c2V0VXNlc0FyZ3VtZW50cygpOwot
ICAgIG5ld0Z1bmN0aW9uQm9keS0+ZmluaXNoUGFyc2luZyhjb3B5UGFyYW1ldGVycygpLCBtX3Bh
cmFtZXRlckNvdW50LCBtX25hbWUpOworICAgIG5ld0Z1bmN0aW9uQm9keS0+ZmluaXNoUGFyc2lu
ZyhtX3BhcmFtZXRlcnMsIG1fbmFtZSk7CiAKICAgICBTY29wZUNoYWluIHNjb3BlQ2hhaW4oc2Nv
cGVDaGFpbk5vZGUpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNo
YWluLmdsb2JhbE9iamVjdCgpOwpAQCAtMjYyLDI1ICsyNTksMTcgQEAgUGFzc1JlZlB0cjxGdW5j
dGlvbkV4ZWN1dGFibGU+IEZ1bmN0aW9uRQogCiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9
IHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGZ1bmNFeHByKS0+Ym9keSgpOwogICAgIEFTU0VS
VChib2R5KTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZ1bmN0aW9uRXhlY3V0YWJsZShmdW5j
dGlvbk5hbWUsIGJvZHktPnNvdXJjZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPmNv
cHlQYXJhbWV0ZXJzKCksIGJvZHktPnBhcmFtZXRlckNvdW50KCksIGJvZHktPmxpbmVObygpLCBi
b2R5LT5sYXN0TGluZSgpKSk7Ci19Ci0KLUlkZW50aWZpZXIqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29weVBhcmFtZXRlcnMoKQotewotICAgIC8vIFRoaXMgY29kZSB1c2VzIHRoZSBpbnRlcm5hbCB2
ZWN0b3IgY29waWVyIHRvIG1ha2UgY29weS1jb25zdHJ1Y3RlZCBjb3BpZXMgb2YgdGhlIGRhdGEg
aW4gdGhlIGFycmF5Ci0gICAgLy8gKHRoZSBhcnJheSBjb250YWlucyBJZGVudGZpZXJzIHdoaWNo
IHJlZmVyZW5jZSBjb3VudCBVc3RyaW5nOjpSZXBzLCB3aGljaCBtdXN0IGJlIHJlZidlZCBjb3Jy
ZWN0bHkpLgotICAgIElkZW50aWZpZXIqIHBhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxJZGVudGlm
aWVyKj4oZmFzdE1hbGxvYyhtX3BhcmFtZXRlckNvdW50ICogc2l6ZW9mKElkZW50aWZpZXIpKSk7
Ci0gICAgV1RGOjpWZWN0b3JDb3BpZXI8ZmFsc2UsIElkZW50aWZpZXI+Ojp1bmluaXRpYWxpemVk
Q29weShtX3BhcmFtZXRlcnMsIG1fcGFyYW1ldGVycyArIG1fcGFyYW1ldGVyQ291bnQsIHBhcmFt
ZXRlcnMpOwotICAgIHJldHVybiBwYXJhbWV0ZXJzOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RnVuY3Rpb25FeGVjdXRhYmxlKGZ1bmN0aW9uTmFtZSwgYm9keS0+c291cmNlKCksIGJvZHktPnVz
ZXNBcmd1bWVudHMoKSwgYm9keS0+cGFyYW1ldGVycygpLCBib2R5LT5saW5lTm8oKSwgYm9keS0+
bGFzdExpbmUoKSkpOwogfQogCiBVU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJp
bmcoKSBjb25zdAogeworICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICptX3Bh
cmFtZXRlcnM7CiAgICAgVVN0cmluZyBzKCIiKTsKLSAgICBmb3IgKGludCBwb3MgPSAwOyBwb3Mg
PCBtX3BhcmFtZXRlckNvdW50OyArK3BvcykgeworICAgIGZvciAoc2l6ZV90IHBvcyA9IDA7IHBv
cyA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK3BvcykgewogICAgICAgICBpZiAoIXMuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcyArPSAiLCAiOwotICAgICAgICBzICs9IG1fcGFyYW1ldGVyc1twb3Nd
LnVzdHJpbmcoKTsKKyAgICAgICAgcyArPSBwYXJhbWV0ZXJzW3Bvc10udXN0cmluZygpOwogICAg
IH0KIAogICAgIHJldHVybiBzOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDQ3NzQwKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyMSwxMSArMjIxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZSA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBJZGVudGlmaWVyKiBwYXJhbWV0ZXJzLCBpbnQgcGFy
YW1ldGVyQ291bnQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKKyAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1l
dGVycywgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQogICAgICAgICAgICAgOiBTY3JpcHRF
eGVjdXRhYmxlKHNvdXJjZSkKICAgICAgICAgICAgICwgbV9mb3JjZVVzZXNBcmd1bWVudHMoZm9y
Y2VVc2VzQXJndW1lbnRzKQogICAgICAgICAgICAgLCBtX3BhcmFtZXRlcnMocGFyYW1ldGVycykK
LSAgICAgICAgICAgICwgbV9wYXJhbWV0ZXJDb3VudChwYXJhbWV0ZXJDb3VudCkKICAgICAgICAg
ICAgICwgbV9jb2RlQmxvY2soMCkKICAgICAgICAgICAgICwgbV9uYW1lKG5hbWUpCiAgICAgICAg
ICAgICAsIG1fbnVtVmFyaWFibGVzKDApCkBAIC0yNjEsNyArMjYwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1
cm4gbV9uYW1lOyB9Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH0KKyAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0KICAgICAgICAgc2l6ZV90IHZh
cmlhYmxlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX251bVZhcmlhYmxlczsgfQogICAgICAgICBV
U3RyaW5nIHBhcmFtU3RyaW5nKCkgY29uc3Q7CiAKQEAgLTI3MiwxMSArMjcxLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGNvbXBpbGUoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKTsKLSAgICAgICAgSWRlbnRpZmllciogY29weVBhcmFtZXRlcnMo
KTsKIAogICAgICAgICBib29sIG1fZm9yY2VVc2VzQXJndW1lbnRzOwotICAgICAgICBJZGVudGlm
aWVyKiBtX3BhcmFtZXRlcnM7Ci0gICAgICAgIGludCBtX3BhcmFtZXRlckNvdW50OworICAgICAg
ICBSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CiAgICAgICAgIENvZGVC
bG9jayogbV9jb2RlQmxvY2s7CiAgICAgICAgIElkZW50aWZpZXIgbV9uYW1lOwogICAgICAgICBz
aXplX3QgbV9udW1WYXJpYWJsZXM7Cg==
</data>
<flag name="review"
          id="19536"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>