<?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>25869</bug_id>
          
          <creation_ts>2009-05-19 10:49:22 -0700</creation_ts>
          <short_desc>Upstream V8 bindings for V8DomWindow</short_desc>
          <delta_ts>2009-05-20 22:36:24 -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>WebCore Misc.</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>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>121937</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-05-19 10:49:22 -0700</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121938</commentid>
    <comment_count>1</comment_count>
      <attachid>30479</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-05-19 10:52:05 -0700</bug_when>
    <thetext>Created attachment 30479
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121945</commentid>
    <comment_count>2</comment_count>
      <attachid>30479</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-05-19 12:00:22 -0700</bug_when>
    <thetext>Comment on attachment 30479
patch

Lots of style nits. Please make sure this still compiles after addressing.

&gt; +v8::Handle&lt;v8::Value&gt; V8Custom::WindowSetTimeoutImpl(const v8::Arguments&amp; args, bool single_shot)

singleShot

&gt; +{
&gt; +    int num_arguments = args.Length();

argumentCount?

&gt; +    ScriptExecutionContext* script_context = static_cast&lt;ScriptExecutionContext*&gt;(imp-&gt;frame()-&gt;document());

scriptContext

&gt; +        WebCore::String string_function = ToWebCoreString(function);

functionString

&gt; +        int param_count = num_arguments &gt;= 2 ? num_arguments - 2 : 0;

paramCount

&gt; +static bool IsAscii(const String&amp; str)
&gt; +{
&gt; +    for (size_t i = 0; i &lt; str.length(); i++) {
&gt; +        if (str[i] &gt; 0xFF)
&gt; +            return false;
&gt; +    }
&gt; +    return true;
&gt; +}

I believe there&apos;s already an isAscii helper somewhere. Please look for it and reuse. At the very least, put a FIXME to do that :)

&gt; +    Vector&lt;char&gt; in(str.length());

inputCharacters

&gt; +    Vector&lt;char&gt; out;

outputCharacters

&gt; +// TODO(fqian): returning string is cheating, and we should

FIXME: is the WebKit-speak for TODO(name):

&gt; +static String EventNameFromAttributeName(const String&amp; name)

eventNameFromAttributeName

&gt; +    String event_type = name.substring(2);

eventType

&gt; +    String event_type = EventNameFromAttributeName(key);

eventType

&gt; +    if (value-&gt;IsNull())
&gt; +        // Clear the event listener
&gt; +        imp-&gt;clearAttributeEventListener(event_type);

Need braces. I know this is the opposite of what Darin said, but it&apos;s actually an amendment to the rule. No braces on one-liners UNLESS there are comments.

&gt; +    String event_type = EventNameFromAttributeName(key);

eventType

&gt; +    DOMWindow* target_win = V8Proxy::ToNativeObject&lt;DOMWindow&gt;(V8ClassIndex::DOMWINDOW, window);

targetWindow

&gt; +    DOMWindow* target_win = V8Proxy::ToNativeObject&lt;DOMWindow&gt;(V8ClassIndex::DOMWINDOW, window);

targetWindow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121985</commentid>
    <comment_count>3</comment_count>
      <attachid>30485</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-05-19 16:16:00 -0700</bug_when>
    <thetext>Created attachment 30485
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121986</commentid>
    <comment_count>4</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-05-19 16:17:03 -0700</bug_when>
    <thetext>All requested changes made, except that I couldn&apos;t find a suitable replacement for IsAscii().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122042</commentid>
    <comment_count>5</comment_count>
      <attachid>30485</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-05-19 21:17:19 -0700</bug_when>
    <thetext>Comment on attachment 30485
patch2

Darn it! One more round of laundering :-\

&gt; +            V8Proxy::ThrowError(V8Proxy::GENERAL_ERROR, &quot;Cannot decode base64&quot;);
&gt; +            return v8::Undefined();

One more! Use throwError helper from V8Proxy.h

&gt; +    if (args.Length() &lt; 1) {
&gt; +        V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, &quot;Not enough arguments&quot;);
&gt; +        return v8::Undefined();
&gt; +    }

Same here.

&gt; +    if (args.Length() &lt; 1) {
&gt; +        V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, &quot;Not enough arguments&quot;);
&gt; +        return v8::Undefined();
&gt; +    }

And here.

&gt; +    String str = ToWebCoreString(args[0]);

toWebCoreString

&gt; +    return Base64Convert(str, true);

Whoops. Functions should be camelCase. How did I miss this earlier? convertBase64?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122173</commentid>
    <comment_count>6</comment_count>
      <attachid>30511</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-05-20 09:01:44 -0700</bug_when>
    <thetext>Created attachment 30511
patch3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122178</commentid>
    <comment_count>7</comment_count>
      <attachid>30512</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-05-20 09:14:36 -0700</bug_when>
    <thetext>Created attachment 30512
patch4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122181</commentid>
    <comment_count>8</comment_count>
      <attachid>30512</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-05-20 09:26:51 -0700</bug_when>
    <thetext>Comment on attachment 30512
patch4

Wee!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122209</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-20 15:27:36 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/43936</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30479</attachid>
            <date>2009-05-19 10:52:05 -0700</date>
            <delta_ts>2009-05-19 16:16:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>10928</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQzODY0KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDIxIEBADQorMjAwOS0wNS0xOSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAZ29v
Z2xlLmNvbT4NCisNCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0KKw0KKyAg
ICAgICAgVXBzdHJlYW0gVjggYmluZGluZ3MgZm9yIFY4RG9tV2luZG93Lg0KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODY5DQorDQorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6DQorICAgICAgICAoV2Vi
Q29yZTo6VjhDdXN0b206OldpbmRvd1NldFRpbWVvdXRJbXBsKTogTW92ZWQgZnJvbSB2OF9jdXN0
b20uY3BwLg0KKyAgICAgICAgKFdlYkNvcmU6OklzQXNjaWkpOiBNb3ZlZCBmcm9tIHY4X2N1c3Rv
bS5jcHAuDQorICAgICAgICAoV2ViQ29yZTo6QmFzZTY0Q29udmVydCk6IE1vdmVkIGZyb20gdjhf
Y3VzdG9tLmNwcC4NCisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOiBNb3Zl
ZCBmcm9tIHY4X2N1c3RvbS5jcHAuDQorICAgICAgICAoV2ViQ29yZTo6RXZlbnROYW1lRnJvbUF0
dHJpYnV0ZU5hbWUpOiBNb3ZlZCBmcm9tIHY4X2N1c3RvbS5jcHAuDQorICAgICAgICAoV2ViQ29y
ZTo6QUNDRVNTT1JfU0VUVEVSKTogTW92ZWQgZnJvbSB2OF9jdXN0b20uY3BwLg0KKyAgICAgICAg
KFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6IE1vdmVkIGZyb20gdjhfY3VzdG9tLmNwcC4NCisg
ICAgICAgIChXZWJDb3JlOjpOQU1FRF9BQ0NFU1NfQ0hFQ0spOiBNb3ZlZCBmcm9tIHY4X2N1c3Rv
bS5jcHAuDQorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOiBNb3ZlZCBm
cm9tIHY4X2N1c3RvbS5jcHAuDQorDQogMjAwOS0wNS0xOSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGNocm9taXVtLm9yZz4NCiANCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hl
ci4NCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5j
cHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRv
d0N1c3RvbS5jcHAJKHJldmlzaW9uIDQzODY0KQ0KKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTM2LDYgKzM2LDgg
QEANCiAjaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiDQogI2luY2x1ZGUgIlY4UHJv
eHkuaCINCiANCisjaW5jbHVkZSAiQmFzZTY0LmgiDQorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCINCiAjaW5jbHVkZSAiRE9NVGltZXIuaCINCiAjaW5jbHVkZSAiRnJhbWUuaCINCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkUmVxdWVzdC5oIg0KQEAgLTQzLDYgKzQ1LDcgQEANCiAjaW5jbHVkZSAiSFRN
TENvbGxlY3Rpb24uaCINCiAjaW5jbHVkZSAiUGFnZS5oIg0KICNpbmNsdWRlICJQbGF0Zm9ybVNj
cmVlbi5oIg0KKyNpbmNsdWRlICJTY2hlZHVsZWRBY3Rpb24uaCINCiAjaW5jbHVkZSAiU2NyaXB0
U291cmNlQ29kZS5oIg0KICNpbmNsdWRlICJTZXR0aW5ncy5oIg0KICNpbmNsdWRlICJXaW5kb3dG
ZWF0dXJlcy5oIg0KQEAgLTU0LDYgKzU3LDk0IEBAIHN0YXRpYyBjb25zdCBpbnQgcG9wdXBUaWxl
UGl4ZWxzID0gMTA7DQogDQogbmFtZXNwYWNlIFdlYkNvcmUgew0KIA0KK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEN1c3RvbTo6V2luZG93U2V0VGltZW91dEltcGwoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncywgYm9vbCBzaW5nbGVfc2hvdCkNCit7DQorICAgIGludCBudW1fYXJndW1lbnRzID0g
YXJncy5MZW5ndGgoKTsNCisNCisgICAgaWYgKG51bV9hcmd1bWVudHMgPCAxKQ0KKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsNCisNCisgICAgRE9NV2luZG93KiBpbXAgPSBWOFByb3h5
OjpUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdz
LkhvbGRlcigpKTsNCisNCisgICAgaWYgKCFpbXAtPmZyYW1lKCkpDQorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOw0KKw0KKyAgICBpZiAoIVY4UHJveHk6OkNhbkFjY2Vzc0ZyYW1lKGlt
cC0+ZnJhbWUoKSwgdHJ1ZSkpDQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOw0KKw0K
KyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRfY29udGV4dCA9IHN0YXRpY19jYXN0
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqPihpbXAtPmZyYW1lKCktPmRvY3VtZW50KCkpOw0KKw0K
KyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZnVuY3Rpb24gPSBhcmdzWzBdOw0KKw0KKyAgICBp
bnQzMl90IHRpbWVvdXQgPSAwOw0KKyAgICBpZiAobnVtX2FyZ3VtZW50cyA+PSAyKSANCisgICAg
ICAgIHRpbWVvdXQgPSBhcmdzWzFdLT5JbnQzMlZhbHVlKCk7DQorDQorICAgIGludCBpZDsNCisg
ICAgaWYgKGZ1bmN0aW9uLT5Jc1N0cmluZygpKSB7DQorICAgICAgICAvLyBEb24ndCBhbGxvdyBz
ZXR0aW5nIHRpbWVvdXRzIHRvIHJ1biBlbXB0eSBmdW5jdGlvbnMhDQorICAgICAgICAvLyAoQnVn
IDEwMDk1OTcpDQorICAgICAgICBXZWJDb3JlOjpTdHJpbmcgc3RyaW5nX2Z1bmN0aW9uID0gVG9X
ZWJDb3JlU3RyaW5nKGZ1bmN0aW9uKTsNCisgICAgICAgIGlmIChzdHJpbmdfZnVuY3Rpb24ubGVu
Z3RoKCkgPT0gMCkNCisgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOw0KKw0KKyAg
ICAgICAgaWQgPSBET01UaW1lcjo6aW5zdGFsbChzY3JpcHRfY29udGV4dCwgbmV3IFNjaGVkdWxl
ZEFjdGlvbihzdHJpbmdfZnVuY3Rpb24pLCB0aW1lb3V0LCBzaW5nbGVfc2hvdCk7DQorICAgIH0g
ZWxzZSBpZiAoZnVuY3Rpb24tPklzRnVuY3Rpb24oKSkgew0KKyAgICAgICAgaW50IHBhcmFtX2Nv
dW50ID0gbnVtX2FyZ3VtZW50cyA+PSAyID8gbnVtX2FyZ3VtZW50cyAtIDIgOiAwOw0KKyAgICAg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4qIHBhcmFtcyA9IDA7DQorICAgICAgICBpZiAocGFyYW1f
Y291bnQgPiAwKSB7DQorICAgICAgICAgICAgcGFyYW1zID0gbmV3IHY4OjpMb2NhbDx2ODo6VmFs
dWU+W3BhcmFtX2NvdW50XTsNCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFt
X2NvdW50OyBpKyspDQorICAgICAgICAgICAgICAgIC8vIHBhcmFtZXRlcnMgbXVzdCBiZSBnbG9i
YWxpemVkDQorICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGFyZ3NbaSsyXTsNCisgICAgICAg
IH0NCisNCisgICAgICAgIC8vIHBhcmFtcyBpcyBwYXNzZWQgdG8gYWN0aW9uLCBhbmQgcmVsZWFz
ZWQgaW4gYWN0aW9uJ3MgZGVzdHJ1Y3Rvcg0KKyAgICAgICAgU2NoZWR1bGVkQWN0aW9uKiBhY3Rp
b24gPSBuZXcgU2NoZWR1bGVkQWN0aW9uKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChm
dW5jdGlvbiksIHBhcmFtX2NvdW50LCBwYXJhbXMpOw0KKw0KKyAgICAgICAgZGVsZXRlW10gcGFy
YW1zOw0KKw0KKyAgICAgICAgaWQgPSBET01UaW1lcjo6aW5zdGFsbChzY3JpcHRfY29udGV4dCwg
YWN0aW9uLCB0aW1lb3V0LCBzaW5nbGVfc2hvdCk7DQorICAgIH0gZWxzZQ0KKyAgICAgICAgLy8g
VE9ETyhmcWlhbik6IHdoYXQncyB0aGUgcmlnaHQgcmV0dXJuIHZhbHVlIGlmIGZhaWxlZC4NCisg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7DQorDQorICAgIHJldHVybiB2ODo6SW50ZWdl
cjo6TmV3KGlkKTsNCit9DQorDQorc3RhdGljIGJvb2wgSXNBc2NpaShjb25zdCBTdHJpbmcmIHN0
cikNCit7DQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyBpKyspIHsN
CisgICAgICAgIGlmIChzdHJbaV0gPiAweEZGKQ0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsN
CisgICAgfQ0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBCYXNlNjRDb252ZXJ0KGNvbnN0IFN0cmluZyYgc3RyLCBib29sIGVuY29kZSkNCit7
DQorICAgIGlmICghSXNBc2NpaShzdHIpKSB7DQorICAgICAgICBWOFByb3h5OjpTZXRET01FeGNl
cHRpb24oSU5WQUxJRF9DSEFSQUNURVJfRVJSKTsNCisgICAgICAgIHJldHVybiBub3RIYW5kbGVk
QnlJbnRlcmNlcHRvcigpOw0KKyAgICB9DQorDQorICAgIFZlY3RvcjxjaGFyPiBpbihzdHIubGVu
Z3RoKCkpOw0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQ0K
KyAgICAgICAgaW5baV0gPSBzdGF0aWNfY2FzdDxjaGFyPihzdHJbaV0pOw0KKyAgICBWZWN0b3I8
Y2hhcj4gb3V0Ow0KKw0KKyAgICBpZiAoZW5jb2RlKQ0KKyAgICAgICAgYmFzZTY0RW5jb2RlKGlu
LCBvdXQpOw0KKyAgICBlbHNlIHsNCisgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGluLCBvdXQp
KSB7DQorICAgICAgICAgICAgVjhQcm94eTo6VGhyb3dFcnJvcihWOFByb3h5OjpHRU5FUkFMX0VS
Uk9SLCAiQ2Fubm90IGRlY29kZSBiYXNlNjQiKTsNCisgICAgICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiB2OFN0cmluZyhT
dHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSkpOw0KK30NCisNCiBBQ0NFU1NPUl9HRVRURVIo
RE9NV2luZG93RXZlbnQpDQogew0KICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gZXZlbnRTeW1i
b2wgPSB2ODo6U3RyaW5nOjpOZXdTeW1ib2woImV2ZW50Iik7DQpAQCAtMjA1LDYgKzI5NiwxNDAg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1Bvc3RNZXNzYWdlKQ0KICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOw0KIH0NCiANCitDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93QXRv
YikNCit7DQorICAgIElOQ19TVEFUUygiRE9NLkRPTVdpbmRvdy5hdG9iKCkiKTsNCisgICAgRE9N
V2luZG93KiBpbXAgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJ
bmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsNCisNCisgICAgaWYgKCFWOFByb3h5OjpD
YW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQ0KKyAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsNCisNCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKSB7DQorICAgICAgICBW
OFByb3h5OjpUaHJvd0Vycm9yKFY4UHJveHk6OlNZTlRBWF9FUlJPUiwgIk5vdCBlbm91Z2ggYXJn
dW1lbnRzIik7DQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOw0KKyAgICB9DQorDQor
ICAgIGlmIChhcmdzWzBdLT5Jc051bGwoKSkNCisgICAgICAgIHJldHVybiB2OFN0cmluZygiIik7
DQorDQorICAgIFN0cmluZyBzdHIgPSBUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7DQorICAgIHJl
dHVybiBCYXNlNjRDb252ZXJ0KHN0ciwgZmFsc2UpOw0KK30NCisNCitDQUxMQkFDS19GVU5DX0RF
Q0woRE9NV2luZG93QnRvYSkNCit7DQorICAgIElOQ19TVEFUUygiRE9NLkRPTVdpbmRvdy5idG9h
KCkiKTsNCisgICAgRE9NV2luZG93KiBpbXAgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01X
aW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsNCisNCisgICAg
aWYgKCFWOFByb3h5OjpDYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQ0KKyAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsNCisNCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAx
KSB7DQorICAgICAgICBWOFByb3h5OjpUaHJvd0Vycm9yKFY4UHJveHk6OlNZTlRBWF9FUlJPUiwg
Ik5vdCBlbm91Z2ggYXJndW1lbnRzIik7DQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
Ow0KKyAgICB9DQorDQorICAgIGlmIChhcmdzWzBdLT5Jc051bGwoKSkNCisgICAgICAgIHJldHVy
biB2OFN0cmluZygiIik7DQorDQorICAgIFN0cmluZyBzdHIgPSBUb1dlYkNvcmVTdHJpbmcoYXJn
c1swXSk7DQorICAgIHJldHVybiBCYXNlNjRDb252ZXJ0KHN0ciwgdHJ1ZSk7DQorfQ0KKw0KKy8v
IFRPRE8oZnFpYW4pOiByZXR1cm5pbmcgc3RyaW5nIGlzIGNoZWF0aW5nLCBhbmQgd2Ugc2hvdWxk
DQorLy8gZml4IHRoaXMgYnkgY2FsbGluZyB0b1N0cmluZyBmdW5jdGlvbiBvbiB0aGUgcmVjZWl2
ZXIuDQorLy8gSG93ZXZlciwgVjggaW1wbGVtZW50cyB0b1N0cmluZyBpbiBKYXZhU2NyaXB0LCB3
aGljaCByZXF1aXJlcw0KKy8vIHN3aXRjaGluZyBjb250ZXh0IG9mIHJlY2VpdmVyLiBJIGNvbnNp
ZGVyIGl0IGlzIGRhbmdlcm91cy4NCitDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93VG9TdHJp
bmcpDQorew0KKyAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cudG9TdHJpbmcoKSIpOw0KKyAg
ICByZXR1cm4gYXJncy5UaGlzKCktPk9iamVjdFByb3RvVG9TdHJpbmcoKTsNCit9DQorDQorQ0FM
TEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd05PUCkNCit7DQorICAgIElOQ19TVEFUUygiRE9NLkRP
TVdpbmRvdy5ub3AoKSIpOw0KKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOw0KK30NCisNCitz
dGF0aWMgU3RyaW5nIEV2ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkNCit7DQorICAgIEFTU0VSVChuYW1lLnN0YXJ0c1dpdGgoIm9uIikpOw0KKyAgICBTdHJpbmcg
ZXZlbnRfdHlwZSA9IG5hbWUuc3Vic3RyaW5nKDIpOw0KKw0KKyAgICBpZiAoZXZlbnRfdHlwZS5z
dGFydHNXaXRoKCJ3IikpIHsNCisgICAgICAgIHN3aXRjaChldmVudF90eXBlW2V2ZW50X3R5cGUu
bGVuZ3RoKCkgLSAxXSkgew0KKyAgICAgICAgY2FzZSAndCc6DQorICAgICAgICAgICAgZXZlbnRf
dHlwZSA9ICJ3ZWJraXRBbmltYXRpb25TdGFydCI7DQorICAgICAgICAgICAgYnJlYWs7DQorICAg
ICAgICBjYXNlICduJzoNCisgICAgICAgICAgICBldmVudF90eXBlID0gIndlYmtpdEFuaW1hdGlv
bkl0ZXJhdGlvbiI7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlICdkJzoNCisg
ICAgICAgICAgICBBU1NFUlQoZXZlbnRfdHlwZS5sZW5ndGgoKSA+IDcpOw0KKyAgICAgICAgICAg
IGlmIChldmVudF90eXBlWzddID09ICdhJykNCisgICAgICAgICAgICAgICAgZXZlbnRfdHlwZSA9
ICJ3ZWJraXRBbmltYXRpb25FbmQiOw0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAg
ICAgZXZlbnRfdHlwZSA9ICJ3ZWJraXRUcmFuc2l0aW9uRW5kIjsNCisgICAgICAgICAgICBicmVh
azsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gZXZlbnRfdHlwZTsNCit9DQor
DQorQUNDRVNTT1JfU0VUVEVSKERPTVdpbmRvd0V2ZW50SGFuZGxlcikNCit7DQorICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6TG9va3VwRE9NV3JhcHBlcihWOENs
YXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOw0KKyAgICBpZiAoaG9sZGVyLklzRW1w
dHkoKSkNCisgICAgICAgIHJldHVybjsNCisNCisgICAgRE9NV2luZG93KiBpbXAgPSBWOFByb3h5
OjpUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xk
ZXIpOw0KKyAgICBpZiAoIWltcC0+ZnJhbWUoKSkNCisgICAgICAgIHJldHVybjsNCisNCisgICAg
RG9jdW1lbnQqIGRvYyA9IGltcC0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsNCisgICAgaWYgKCFkb2Mp
DQorICAgICAgICByZXR1cm47DQorDQorICAgIFN0cmluZyBrZXkgPSBUb1dlYkNvcmVTdHJpbmco
bmFtZSk7DQorICAgIFN0cmluZyBldmVudF90eXBlID0gRXZlbnROYW1lRnJvbUF0dHJpYnV0ZU5h
bWUoa2V5KTsNCisNCisgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkNCisgICAgICAgIC8vIENsZWFy
IHRoZSBldmVudCBsaXN0ZW5lcg0KKyAgICAgICAgaW1wLT5jbGVhckF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnRfdHlwZSk7DQorICAgIGVsc2Ugew0KKyAgICAgICAgVjhQcm94eSogcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZShpbXAtPmZyYW1lKCkpOw0KKyAgICAgICAgaWYgKCFwcm94eSkN
CisgICAgICAgICAgICByZXR1cm47DQorDQorICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bGlzdGVuZXIgPQ0KKyAgICAgICAgICAgIHByb3h5LT5GaW5kT3JDcmVhdGVWOEV2ZW50TGlzdGVu
ZXIodmFsdWUsIHRydWUpOw0KKyAgICAgICAgaWYgKGxpc3RlbmVyKQ0KKyAgICAgICAgICAgIGlt
cC0+c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudF90eXBlLCBsaXN0ZW5lcik7DQorICAg
IH0NCit9DQorDQorQUNDRVNTT1JfR0VUVEVSKERPTVdpbmRvd0V2ZW50SGFuZGxlcikNCit7DQor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6TG9va3VwRE9NV3Jh
cHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOw0KKyAgICBpZiAoaG9s
ZGVyLklzRW1wdHkoKSkNCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7DQorDQorICAg
IERPTVdpbmRvdyogaW1wID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENs
YXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKTsNCisgICAgaWYgKCFpbXAtPmZyYW1lKCkpDQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOw0KKw0KKyAgICBEb2N1bWVudCogZG9jID0g
aW1wLT5mcmFtZSgpLT5kb2N1bWVudCgpOw0KKyAgICBpZiAoIWRvYykNCisgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7DQorDQorICAgIFN0cmluZyBrZXkgPSBUb1dlYkNvcmVTdHJpbmco
bmFtZSk7DQorICAgIFN0cmluZyBldmVudF90eXBlID0gRXZlbnROYW1lRnJvbUF0dHJpYnV0ZU5h
bWUoa2V5KTsNCisNCisgICAgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBpbXAtPmdldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRfdHlwZSk7DQorICAgIHJldHVybiBWOFByb3h5OjpFdmVu
dExpc3RlbmVyVG9WOE9iamVjdChsaXN0ZW5lcik7DQorfQ0KIA0KIHN0YXRpYyBib29sIGNhblNo
b3dNb2RhbERpYWxvZ05vdyhjb25zdCBGcmFtZSogZnJhbWUpDQogew0KQEAgLTY0OCw0ICs4NzMs
NTMgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0NsZWFySW50ZXJ2YQ0KICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOw0KIH0NCiANCitOQU1FRF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93
KQ0KK3sNCisgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVl
KCkpID09IFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKTsNCisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdpbmRvdyA9IFY4UHJveHk6Okxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01X
SU5ET1csIGhvc3QpOw0KKyAgICBpZiAod2luZG93LklzRW1wdHkoKSkNCisgICAgICAgIHJldHVy
biBmYWxzZTsgIC8vIHRoZSBmcmFtZSBpcyBnb25lLg0KKw0KKyAgICBET01XaW5kb3cqIHRhcmdl
dF93aW4gPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCB3aW5kb3cpOw0KKw0KKyAgICBBU1NFUlQodGFyZ2V0X3dpbik7DQorDQorICAg
IEZyYW1lKiB0YXJnZXQgPSB0YXJnZXRfd2luLT5mcmFtZSgpOw0KKyAgICBpZiAoIXRhcmdldCkN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisNCisgICAgaWYgKGtleS0+SXNTdHJpbmcoKSkgew0K
KyAgICAgICAgU3RyaW5nIG5hbWUgPSBUb1dlYkNvcmVTdHJpbmcoa2V5KTsNCisNCisgICAgICAg
IC8vIEFsbG93IGFjY2VzcyBvZiBHRVQgYW5kIEhBUyBpZiBpbmRleCBpcyBhIHN1YmZyYW1lLg0K
KyAgICAgICAgaWYgKCh0eXBlID09IHY4OjpBQ0NFU1NfR0VUIHx8IHR5cGUgPT0gdjg6OkFDQ0VT
U19IQVMpICYmIHRhcmdldC0+dHJlZSgpLT5jaGlsZChuYW1lKSkNCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gVjhQcm94eTo6Q2FuQWNjZXNzRnJhbWUo
dGFyZ2V0LCBmYWxzZSk7DQorfQ0KKw0KK0lOREVYRURfQUNDRVNTX0NIRUNLKERPTVdpbmRvdykN
Cit7DQorICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJWYWx1ZSgp
KSA9PSBWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyk7DQorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB3aW5kb3cgPSBWOFByb3h5OjpMb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lO
RE9XLCBob3N0KTsNCisgICAgaWYgKHdpbmRvdy5Jc0VtcHR5KCkpDQorICAgICAgICByZXR1cm4g
ZmFsc2U7DQorDQorICAgIERPTVdpbmRvdyogdGFyZ2V0X3dpbiA9IFY4UHJveHk6OlRvTmF0aXZl
T2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIHdpbmRvdyk7DQorDQor
ICAgIEFTU0VSVCh0YXJnZXRfd2luKTsNCisNCisgICAgRnJhbWUqIHRhcmdldCA9IHRhcmdldF93
aW4tPmZyYW1lKCk7DQorICAgIGlmICghdGFyZ2V0KQ0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0K
Kw0KKyAgICAvLyBBbGxvdyBhY2Nlc3Mgb2YgR0VUIGFuZCBIQVMgaWYgaW5kZXggaXMgYSBzdWJm
cmFtZS4NCisgICAgaWYgKCh0eXBlID09IHY4OjpBQ0NFU1NfR0VUIHx8IHR5cGUgPT0gdjg6OkFD
Q0VTU19IQVMpICYmIHRhcmdldC0+dHJlZSgpLT5jaGlsZChpbmRleCkpDQorICAgICAgICByZXR1
cm4gdHJ1ZTsNCisNCisgICAgcmV0dXJuIFY4UHJveHk6OkNhbkFjY2Vzc0ZyYW1lKHRhcmdldCwg
ZmFsc2UpOw0KK30NCisNCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQo=
</data>
<flag name="review"
          id="15384"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30485</attachid>
            <date>2009-05-19 16:16:00 -0700</date>
            <delta_ts>2009-05-20 09:01:44 -0700</delta_ts>
            <desc>patch2</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>11675</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQzODY0KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDIxIEBADQorMjAwOS0wNS0xOSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAZ29v
Z2xlLmNvbT4NCisNCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0KKw0KKyAg
ICAgICAgVXBzdHJlYW0gVjggYmluZGluZ3MgZm9yIFY4RG9tV2luZG93Lg0KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODY5DQorDQorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6DQorICAgICAgICAoV2Vi
Q29yZTo6VjhDdXN0b206OldpbmRvd1NldFRpbWVvdXRJbXBsKTogTW92ZWQgZnJvbSB2OF9jdXN0
b20uY3BwLg0KKyAgICAgICAgKFdlYkNvcmU6OklzQXNjaWkpOiBNb3ZlZCBmcm9tIHY4X2N1c3Rv
bS5jcHAuDQorICAgICAgICAoV2ViQ29yZTo6QmFzZTY0Q29udmVydCk6IE1vdmVkIGZyb20gdjhf
Y3VzdG9tLmNwcC4NCisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOiBNb3Zl
ZCBmcm9tIHY4X2N1c3RvbS5jcHAuDQorICAgICAgICAoV2ViQ29yZTo6RXZlbnROYW1lRnJvbUF0
dHJpYnV0ZU5hbWUpOiBNb3ZlZCBmcm9tIHY4X2N1c3RvbS5jcHAuDQorICAgICAgICAoV2ViQ29y
ZTo6QUNDRVNTT1JfU0VUVEVSKTogTW92ZWQgZnJvbSB2OF9jdXN0b20uY3BwLg0KKyAgICAgICAg
KFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6IE1vdmVkIGZyb20gdjhfY3VzdG9tLmNwcC4NCisg
ICAgICAgIChXZWJDb3JlOjpOQU1FRF9BQ0NFU1NfQ0hFQ0spOiBNb3ZlZCBmcm9tIHY4X2N1c3Rv
bS5jcHAuDQorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOiBNb3ZlZCBm
cm9tIHY4X2N1c3RvbS5jcHAuDQorDQogMjAwOS0wNS0xOSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGNocm9taXVtLm9yZz4NCiANCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hl
ci4NCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5j
cHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRv
d0N1c3RvbS5jcHAJKHJldmlzaW9uIDQzODY0KQ0KKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTM2LDYgKzM2LDgg
QEANCiAjaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiDQogI2luY2x1ZGUgIlY4UHJv
eHkuaCINCiANCisjaW5jbHVkZSAiQmFzZTY0LmgiDQorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCINCiAjaW5jbHVkZSAiRE9NVGltZXIuaCINCiAjaW5jbHVkZSAiRnJhbWUuaCINCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkUmVxdWVzdC5oIg0KQEAgLTQzLDE3ICs0NSwxMDUgQEANCiAjaW5jbHVkZSAi
SFRNTENvbGxlY3Rpb24uaCINCiAjaW5jbHVkZSAiUGFnZS5oIg0KICNpbmNsdWRlICJQbGF0Zm9y
bVNjcmVlbi5oIg0KKyNpbmNsdWRlICJTY2hlZHVsZWRBY3Rpb24uaCINCiAjaW5jbHVkZSAiU2Ny
aXB0U291cmNlQ29kZS5oIg0KICNpbmNsdWRlICJTZXR0aW5ncy5oIg0KICNpbmNsdWRlICJXaW5k
b3dGZWF0dXJlcy5oIg0KIA0KDQogLy8gSG9yaXpvbnRhbCBhbmQgdmVydGljYWwgb2Zmc2V0LCBm
cm9tIHRoZSBwYXJlbnQgY29udGVudCBhcmVhLCBhcm91bmQgbmV3bHkNCiAvLyBvcGVuZWQgcG9w
dXBzIHRoYXQgZG9uJ3Qgc3BlY2lmeSBhIGxvY2F0aW9uLg0KIHN0YXRpYyBjb25zdCBpbnQgcG9w
dXBUaWxlUGl4ZWxzID0gMTA7DQogDQogbmFtZXNwYWNlIFdlYkNvcmUgew0KIA0KK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEN1c3RvbTo6V2luZG93U2V0VGltZW91dEltcGwoY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncywgYm9vbCBzaW5nbGVTaG90KQ0KK3sNCisgICAgaW50IGFyZ3VtZW50Q291
bnQgPSBhcmdzLkxlbmd0aCgpOw0KKw0KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpDQorICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOw0KKw0KKyAgICBET01XaW5kb3cqIGltcCA9IFY4
UHJveHk6OlRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1cs
IGFyZ3MuSG9sZGVyKCkpOw0KKw0KKyAgICBpZiAoIWltcC0+ZnJhbWUoKSkNCisgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7DQorDQorICAgIGlmICghVjhQcm94eTo6Q2FuQWNjZXNzRnJh
bWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkNCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
DQorDQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNf
Y2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4oaW1wLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsN
CisNCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZ1bmN0aW9uID0gYXJnc1swXTsNCisNCisg
ICAgaW50MzJfdCB0aW1lb3V0ID0gMDsNCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMikgDQor
ICAgICAgICB0aW1lb3V0ID0gYXJnc1sxXS0+SW50MzJWYWx1ZSgpOw0KKw0KKyAgICBpbnQgaWQ7
DQorICAgIGlmIChmdW5jdGlvbi0+SXNTdHJpbmcoKSkgew0KKyAgICAgICAgLy8gRG9uJ3QgYWxs
b3cgc2V0dGluZyB0aW1lb3V0cyB0byBydW4gZW1wdHkgZnVuY3Rpb25zIQ0KKyAgICAgICAgLy8g
KEJ1ZyAxMDA5NTk3KQ0KKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nIGZ1bmN0aW9uU3RyaW5nID0g
VG9XZWJDb3JlU3RyaW5nKGZ1bmN0aW9uKTsNCisgICAgICAgIGlmIChmdW5jdGlvblN0cmluZy5s
ZW5ndGgoKSA9PSAwKQ0KKyAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7DQorDQor
ICAgICAgICBpZCA9IERPTVRpbWVyOjppbnN0YWxsKHNjcmlwdENvbnRleHQsIG5ldyBTY2hlZHVs
ZWRBY3Rpb24oZnVuY3Rpb25TdHJpbmcpLCB0aW1lb3V0LCBzaW5nbGVTaG90KTsNCisgICAgfSBl
bHNlIGlmIChmdW5jdGlvbi0+SXNGdW5jdGlvbigpKSB7DQorICAgICAgICBpbnQgcGFyYW1Db3Vu
dCA9IGFyZ3VtZW50Q291bnQgPj0gMiA/IGFyZ3VtZW50Q291bnQgLSAyIDogMDsNCisgICAgICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+KiBwYXJhbXMgPSAwOw0KKyAgICAgICAgaWYgKHBhcmFtQ291
bnQgPiAwKSB7DQorICAgICAgICAgICAgcGFyYW1zID0gbmV3IHY4OjpMb2NhbDx2ODo6VmFsdWU+
W3BhcmFtQ291bnRdOw0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1Db3Vu
dDsgaSsrKQ0KKyAgICAgICAgICAgICAgICAvLyBwYXJhbWV0ZXJzIG11c3QgYmUgZ2xvYmFsaXpl
ZA0KKyAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBhcmdzW2krMl07DQorICAgICAgICB9DQor
DQorICAgICAgICAvLyBwYXJhbXMgaXMgcGFzc2VkIHRvIGFjdGlvbiwgYW5kIHJlbGVhc2VkIGlu
IGFjdGlvbidzIGRlc3RydWN0b3INCisgICAgICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uID0g
bmV3IFNjaGVkdWxlZEFjdGlvbih2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QoZnVuY3Rp
b24pLCBwYXJhbUNvdW50LCBwYXJhbXMpOw0KKw0KKyAgICAgICAgZGVsZXRlW10gcGFyYW1zOw0K
Kw0KKyAgICAgICAgaWQgPSBET01UaW1lcjo6aW5zdGFsbChzY3JpcHRDb250ZXh0LCBhY3Rpb24s
IHRpbWVvdXQsIHNpbmdsZVNob3QpOw0KKyAgICB9IGVsc2UNCisgICAgICAgIC8vIEZJWE1FKGZx
aWFuKTogd2hhdCdzIHRoZSByaWdodCByZXR1cm4gdmFsdWUgaWYgZmFpbGVkLg0KKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsNCisNCisgICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXco
aWQpOw0KK30NCisNCitzdGF0aWMgYm9vbCBJc0FzY2lpKGNvbnN0IFN0cmluZyYgc3RyKQ0KK3sN
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykgew0KKyAgICAg
ICAgaWYgKHN0cltpXSA+IDB4RkYpDQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9
DQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IEJhc2U2NENvbnZlcnQoY29uc3QgU3RyaW5nJiBzdHIsIGJvb2wgZW5jb2RlKQ0KK3sNCisgICAg
aWYgKCFpc0FTQ0lJKHN0cikpIHsNCisgICAgICAgIFY4UHJveHk6OlNldERPTUV4Y2VwdGlvbihJ
TlZBTElEX0NIQVJBQ1RFUl9FUlIpOw0KKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVy
Y2VwdG9yKCk7DQorICAgIH0NCisNCisgICAgVmVjdG9yPGNoYXI+IGlucHV0Q2hhcmFjdGVycyhz
dHIubGVuZ3RoKCkpOw0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsg
aSsrKQ0KKyAgICAgICAgaW5wdXRDaGFyYWN0ZXJzW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oc3Ry
W2ldKTsNCisgICAgVmVjdG9yPGNoYXI+IG91dHB1dENoYXJhY3RlcnM7DQorDQorICAgIGlmIChl
bmNvZGUpDQorICAgICAgICBiYXNlNjRFbmNvZGUoaW5wdXRDaGFyYWN0ZXJzLCBvdXRwdXRDaGFy
YWN0ZXJzKTsNCisgICAgZWxzZSB7DQorICAgICAgICBpZiAoIWJhc2U2NERlY29kZShpbnB1dENo
YXJhY3RlcnMsIG91dHB1dENoYXJhY3RlcnMpKSB7DQorICAgICAgICAgICAgVjhQcm94eTo6VGhy
b3dFcnJvcihWOFByb3h5OjpHRU5FUkFMX0VSUk9SLCAiQ2Fubm90IGRlY29kZSBiYXNlNjQiKTsN
CisgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOw0KKyAgICAgICAgfQ0KKyAgICB9
DQorDQorICAgIHJldHVybiB2OFN0cmluZyhTdHJpbmcob3V0cHV0Q2hhcmFjdGVycy5kYXRhKCks
IG91dHB1dENoYXJhY3RlcnMuc2l6ZSgpKSk7DQorfQ0KKw0KIEFDQ0VTU09SX0dFVFRFUihET01X
aW5kb3dFdmVudCkNCiB7DQogICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBldmVudFN5bWJvbCA9
IHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiZXZlbnQiKTsNCkBAIC02Niw3ICsxNTYsNyBAQCBBQ0NF
U1NPUl9HRVRURVIoRE9NV2luZG93RXZlbnQpDQogDQogQUNDRVNTT1JfR0VUVEVSKERPTVdpbmRv
d0NyeXB0bykNCiB7DQotICAgIC8vIFRPRE86IEltcGxlbWVudCBtZS4NCisgICAgLy8gRklYTUU6
IEltcGxlbWVudCBtZS4NCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsNCiB9DQogDQpAQCAt
MTIwLDcgKzIxMCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dBZGRFdmVudExpc3QN
CiAgICAgaWYgKCFkb2MpDQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOw0KIA0KLSAg
ICAvLyBUT0RPOiBDaGVjayBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIGFyZ3VtZW50cw0KKyAgICAv
LyBGSVhNRTogQ2hlY2sgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBhcmd1bWVudHMNCiAgICAgVjhQ
cm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShpbXAtPmZyYW1lKCkpOw0KICAgICBpZiAo
IXByb3h5KQ0KICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsNCkBAIC0yMDUsNiArMjk1
LDE0MCBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93UG9zdE1lc3NhZ2UpDQogICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7DQogfQ0KIA0KK0NBTExCQUNLX0ZVTkNfREVDTChET01XaW5k
b3dBdG9iKQ0KK3sNCisgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93LmF0b2IoKSIpOw0KKyAg
ICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOw0KKw0KKyAgICBpZiAoIVY4UHJv
eHk6OkNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpDQorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOw0KKw0KKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpIHsNCisgICAg
ICAgIFY4UHJveHk6OlRocm93RXJyb3IoVjhQcm94eTo6U1lOVEFYX0VSUk9SLCAiTm90IGVub3Vn
aCBhcmd1bWVudHMiKTsNCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7DQorICAgIH0N
CisNCisgICAgaWYgKGFyZ3NbMF0tPklzTnVsbCgpKQ0KKyAgICAgICAgcmV0dXJuIHY4U3RyaW5n
KCIiKTsNCisNCisgICAgU3RyaW5nIHN0ciA9IFRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsNCisg
ICAgcmV0dXJuIEJhc2U2NENvbnZlcnQoc3RyLCBmYWxzZSk7DQorfQ0KKw0KK0NBTExCQUNLX0ZV
TkNfREVDTChET01XaW5kb3dCdG9hKQ0KK3sNCisgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93
LmJ0b2EoKSIpOw0KKyAgICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0
PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOw0KKw0K
KyAgICBpZiAoIVY4UHJveHk6OkNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpDQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOw0KKw0KKyAgICBpZiAoYXJncy5MZW5ndGgo
KSA8IDEpIHsNCisgICAgICAgIFY4UHJveHk6OlRocm93RXJyb3IoVjhQcm94eTo6U1lOVEFYX0VS
Uk9SLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsNCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7DQorICAgIH0NCisNCisgICAgaWYgKGFyZ3NbMF0tPklzTnVsbCgpKQ0KKyAgICAgICAg
cmV0dXJuIHY4U3RyaW5nKCIiKTsNCisNCisgICAgU3RyaW5nIHN0ciA9IFRvV2ViQ29yZVN0cmlu
ZyhhcmdzWzBdKTsNCisgICAgcmV0dXJuIEJhc2U2NENvbnZlcnQoc3RyLCB0cnVlKTsNCit9DQor
DQorLy8gRklYTUUoZnFpYW4pOiByZXR1cm5pbmcgc3RyaW5nIGlzIGNoZWF0aW5nLCBhbmQgd2Ug
c2hvdWxkDQorLy8gZml4IHRoaXMgYnkgY2FsbGluZyB0b1N0cmluZyBmdW5jdGlvbiBvbiB0aGUg
cmVjZWl2ZXIuDQorLy8gSG93ZXZlciwgVjggaW1wbGVtZW50cyB0b1N0cmluZyBpbiBKYXZhU2Ny
aXB0LCB3aGljaCByZXF1aXJlcw0KKy8vIHN3aXRjaGluZyBjb250ZXh0IG9mIHJlY2VpdmVyLiBJ
IGNvbnNpZGVyIGl0IGlzIGRhbmdlcm91cy4NCitDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93
VG9TdHJpbmcpDQorew0KKyAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cudG9TdHJpbmcoKSIp
Ow0KKyAgICByZXR1cm4gYXJncy5UaGlzKCktPk9iamVjdFByb3RvVG9TdHJpbmcoKTsNCit9DQor
DQorQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd05PUCkNCit7DQorICAgIElOQ19TVEFUUygi
RE9NLkRPTVdpbmRvdy5ub3AoKSIpOw0KKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOw0KK30N
CisNCitzdGF0aWMgU3RyaW5nIGV2ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1lKGNvbnN0IFN0cmlu
ZyYgbmFtZSkNCit7DQorICAgIEFTU0VSVChuYW1lLnN0YXJ0c1dpdGgoIm9uIikpOw0KKyAgICBT
dHJpbmcgZXZlbnRUeXBlID0gbmFtZS5zdWJzdHJpbmcoMik7DQorDQorICAgIGlmIChldmVudFR5
cGUuc3RhcnRzV2l0aCgidyIpKSB7DQorICAgICAgICBzd2l0Y2goZXZlbnRUeXBlW2V2ZW50VHlw
ZS5sZW5ndGgoKSAtIDFdKSB7DQorICAgICAgICBjYXNlICd0JzoNCisgICAgICAgICAgICBldmVu
dFR5cGUgPSAid2Via2l0QW5pbWF0aW9uU3RhcnQiOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgICAgY2FzZSAnbic6DQorICAgICAgICAgICAgZXZlbnRUeXBlID0gIndlYmtpdEFuaW1hdGlv
bkl0ZXJhdGlvbiI7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlICdkJzoNCisg
ICAgICAgICAgICBBU1NFUlQoZXZlbnRUeXBlLmxlbmd0aCgpID4gNyk7DQorICAgICAgICAgICAg
aWYgKGV2ZW50VHlwZVs3XSA9PSAnYScpDQorICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9ICJ3
ZWJraXRBbmltYXRpb25FbmQiOw0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAg
ZXZlbnRUeXBlID0gIndlYmtpdFRyYW5zaXRpb25FbmQiOw0KKyAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiBldmVudFR5cGU7DQorfQ0KKw0KK0FD
Q0VTU09SX1NFVFRFUihET01XaW5kb3dFdmVudEhhbmRsZXIpDQorew0KKyAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4UHJveHk6Okxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0lu
ZGV4OjpET01XSU5ET1csIGluZm8uVGhpcygpKTsNCisgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkp
DQorICAgICAgICByZXR1cm47DQorDQorICAgIERPTVdpbmRvdyogaW1wID0gVjhQcm94eTo6VG9O
YXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKTsN
CisgICAgaWYgKCFpbXAtPmZyYW1lKCkpDQorICAgICAgICByZXR1cm47DQorDQorICAgIERvY3Vt
ZW50KiBkb2MgPSBpbXAtPmZyYW1lKCktPmRvY3VtZW50KCk7DQorICAgIGlmICghZG9jKQ0KKyAg
ICAgICAgcmV0dXJuOw0KKw0KKyAgICBTdHJpbmcga2V5ID0gVG9XZWJDb3JlU3RyaW5nKG5hbWUp
Ow0KKyAgICBTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnROYW1lRnJvbUF0dHJpYnV0ZU5hbWUoa2V5
KTsNCisNCisgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgew0KKyAgICAgICAgLy8gQ2xlYXIgdGhl
IGV2ZW50IGxpc3RlbmVyDQorICAgICAgICBpbXAtPmNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudFR5cGUpOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZShpbXAtPmZyYW1lKCkpOw0KKyAgICAgICAgaWYgKCFwcm94eSkNCisg
ICAgICAgICAgICByZXR1cm47DQorDQorICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIgPQ0KKyAgICAgICAgICAgIHByb3h5LT5GaW5kT3JDcmVhdGVWOEV2ZW50TGlzdGVuZXIo
dmFsdWUsIHRydWUpOw0KKyAgICAgICAgaWYgKGxpc3RlbmVyKQ0KKyAgICAgICAgICAgIGltcC0+
c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyKTsNCisgICAgfQ0K
K30NCisNCitBQ0NFU1NPUl9HRVRURVIoRE9NV2luZG93RXZlbnRIYW5kbGVyKQ0KK3sNCisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5OjpMb29rdXBET01XcmFwcGVy
KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLlRoaXMoKSk7DQorICAgIGlmIChob2xkZXIu
SXNFbXB0eSgpKQ0KKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsNCisNCisgICAgRE9N
V2luZG93KiBpbXAgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJ
bmRleDo6RE9NV0lORE9XLCBob2xkZXIpOw0KKyAgICBpZiAoIWltcC0+ZnJhbWUoKSkNCisgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7DQorDQorICAgIERvY3VtZW50KiBkb2MgPSBpbXAt
PmZyYW1lKCktPmRvY3VtZW50KCk7DQorICAgIGlmICghZG9jKQ0KKyAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsNCisNCisgICAgU3RyaW5nIGtleSA9IFRvV2ViQ29yZVN0cmluZyhuYW1l
KTsNCisgICAgU3RyaW5nIGV2ZW50VHlwZSA9IGV2ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1lKGtl
eSk7DQorDQorICAgIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gaW1wLT5nZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50VHlwZSk7DQorICAgIHJldHVybiBWOFByb3h5OjpFdmVudExpc3Rl
bmVyVG9WOE9iamVjdChsaXN0ZW5lcik7DQorfQ0KIA0KIHN0YXRpYyBib29sIGNhblNob3dNb2Rh
bERpYWxvZ05vdyhjb25zdCBGcmFtZSogZnJhbWUpDQogew0KQEAgLTY0OCw0ICs4NzIsNTIgQEAg
Q0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0NsZWFySW50ZXJ2YQ0KICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOw0KIH0NCiANCitOQU1FRF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93KQ0KK3sN
CisgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09
IFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKTsNCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdp
bmRvdyA9IFY4UHJveHk6Okxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1cs
IGhvc3QpOw0KKyAgICBpZiAod2luZG93LklzRW1wdHkoKSkNCisgICAgICAgIHJldHVybiBmYWxz
ZTsgIC8vIHRoZSBmcmFtZSBpcyBnb25lLg0KKw0KKyAgICBET01XaW5kb3cqIHRhcmdldFdpbmRv
dyA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01X
SU5ET1csIHdpbmRvdyk7DQorDQorICAgIEFTU0VSVCh0YXJnZXRXaW5kb3cpOw0KKw0KKyAgICBG
cmFtZSogdGFyZ2V0ID0gdGFyZ2V0V2luZG93LT5mcmFtZSgpOw0KKyAgICBpZiAoIXRhcmdldCkN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisNCisgICAgaWYgKGtleS0+SXNTdHJpbmcoKSkgew0K
KyAgICAgICAgU3RyaW5nIG5hbWUgPSBUb1dlYkNvcmVTdHJpbmcoa2V5KTsNCisNCisgICAgICAg
IC8vIEFsbG93IGFjY2VzcyBvZiBHRVQgYW5kIEhBUyBpZiBpbmRleCBpcyBhIHN1YmZyYW1lLg0K
KyAgICAgICAgaWYgKCh0eXBlID09IHY4OjpBQ0NFU1NfR0VUIHx8IHR5cGUgPT0gdjg6OkFDQ0VT
U19IQVMpICYmIHRhcmdldC0+dHJlZSgpLT5jaGlsZChuYW1lKSkNCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gVjhQcm94eTo6Q2FuQWNjZXNzRnJhbWUo
dGFyZ2V0LCBmYWxzZSk7DQorfQ0KKw0KK0lOREVYRURfQUNDRVNTX0NIRUNLKERPTVdpbmRvdykN
Cit7DQorICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJWYWx1ZSgp
KSA9PSBWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyk7DQorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB3aW5kb3cgPSBWOFByb3h5OjpMb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lO
RE9XLCBob3N0KTsNCisgICAgaWYgKHdpbmRvdy5Jc0VtcHR5KCkpDQorICAgICAgICByZXR1cm4g
ZmFsc2U7DQorDQorICAgIERPTVdpbmRvdyogdGFyZ2V0V2luZG93ID0gVjhQcm94eTo6VG9OYXRp
dmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgd2luZG93KTsNCisN
CisgICAgQVNTRVJUKHRhcmdldFdpbmRvdyk7DQorDQorICAgIEZyYW1lKiB0YXJnZXQgPSB0YXJn
ZXRXaW5kb3ctPmZyYW1lKCk7DQorICAgIGlmICghdGFyZ2V0KQ0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKw0KKyAgICAvLyBBbGxvdyBhY2Nlc3Mgb2YgR0VUIGFuZCBIQVMgaWYgaW5kZXggaXMg
YSBzdWJmcmFtZS4NCisgICAgaWYgKCh0eXBlID09IHY4OjpBQ0NFU1NfR0VUIHx8IHR5cGUgPT0g
djg6OkFDQ0VTU19IQVMpICYmIHRhcmdldC0+dHJlZSgpLT5jaGlsZChpbmRleCkpDQorICAgICAg
ICByZXR1cm4gdHJ1ZTsNCisNCisgICAgcmV0dXJuIFY4UHJveHk6OkNhbkFjY2Vzc0ZyYW1lKHRh
cmdldCwgZmFsc2UpOw0KK30NCisNCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQo=
</data>
<flag name="review"
          id="15390"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30511</attachid>
            <date>2009-05-20 09:01:44 -0700</date>
            <delta_ts>2009-05-20 09:14:36 -0700</delta_ts>
            <desc>patch3</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>11178</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mzg2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDktMDUtMTkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBz
dHJlYW0gVjggYmluZGluZ3MgZm9yIFY4RG9tV2luZG93LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4NjkKKworICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3Rv
bTo6V2luZG93U2V0VGltZW91dEltcGwpOiBNb3ZlZCBmcm9tIHY4X2N1c3RvbS5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpJc0FzY2lpKTogTW92ZWQgZnJvbSB2OF9jdXN0b20uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6QmFzZTY0Q29udmVydCk6IE1vdmVkIGZyb20gdjhfY3VzdG9tLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6IE1vdmVkIGZyb20gdjhfY3VzdG9t
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1lKTogTW92
ZWQgZnJvbSB2OF9jdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVS
KTogTW92ZWQgZnJvbSB2OF9jdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1Jf
R0VUVEVSKTogTW92ZWQgZnJvbSB2OF9jdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29yZTo6TkFN
RURfQUNDRVNTX0NIRUNLKTogTW92ZWQgZnJvbSB2OF9jdXN0b20uY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOiBNb3ZlZCBmcm9tIHY4X2N1c3RvbS5jcHAuCisK
IDIwMDktMDUtMTkgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDM4NjQp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJWOEN1c3RvbUV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKQEAgLTQzLDE3ICs0NSwx
MDMgQEAKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgog
I2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAKLQogLy8gSG9yaXpvbnRhbCBhbmQgdmVydGljYWwg
b2Zmc2V0LCBmcm9tIHRoZSBwYXJlbnQgY29udGVudCBhcmVhLCBhcm91bmQgbmV3bHkKIC8vIG9w
ZW5lZCBwb3B1cHMgdGhhdCBkb24ndCBzcGVjaWZ5IGEgbG9jYXRpb24uCiBzdGF0aWMgY29uc3Qg
aW50IHBvcHVwVGlsZVBpeGVscyA9IDEwOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOEN1c3RvbTo6V2luZG93U2V0VGltZW91dEltcGwoY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncywgYm9vbCBzaW5nbGVTaG90KQoreworICAgIGludCBhcmd1bWVudENv
dW50ID0gYXJncy5MZW5ndGgoKTsKKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIERPTVdpbmRvdyogaW1wID0gVjhQcm94
eTo6VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJn
cy5Ib2xkZXIoKSk7CisKKyAgICBpZiAoIWltcC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKKworICAgIGlmICghVjhQcm94eTo6Q2FuQWNjZXNzRnJhbWUoaW1wLT5m
cmFtZSgpLCB0cnVlKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kj4oaW1wLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKworICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBmdW5jdGlvbiA9IGFyZ3NbMF07CisKKyAgICBpbnQzMl90IHRpbWVv
dXQgPSAwOworICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIAorICAgICAgICB0aW1lb3V0ID0g
YXJnc1sxXS0+SW50MzJWYWx1ZSgpOworCisgICAgaW50IGlkOworICAgIGlmIChmdW5jdGlvbi0+
SXNTdHJpbmcoKSkgeworICAgICAgICAvLyBEb24ndCBhbGxvdyBzZXR0aW5nIHRpbWVvdXRzIHRv
IHJ1biBlbXB0eSBmdW5jdGlvbnMhCisgICAgICAgIC8vIChCdWcgMTAwOTU5NykKKyAgICAgICAg
V2ViQ29yZTo6U3RyaW5nIGZ1bmN0aW9uU3RyaW5nID0gdG9XZWJDb3JlU3RyaW5nKGZ1bmN0aW9u
KTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uU3RyaW5nLmxlbmd0aCgpID09IDApCisgICAgICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgICAgIGlkID0gRE9NVGltZXI6Omluc3Rh
bGwoc2NyaXB0Q29udGV4dCwgbmV3IFNjaGVkdWxlZEFjdGlvbihmdW5jdGlvblN0cmluZyksIHRp
bWVvdXQsIHNpbmdsZVNob3QpOworICAgIH0gZWxzZSBpZiAoZnVuY3Rpb24tPklzRnVuY3Rpb24o
KSkgeworICAgICAgICBpbnQgcGFyYW1Db3VudCA9IGFyZ3VtZW50Q291bnQgPj0gMiA/IGFyZ3Vt
ZW50Q291bnQgLSAyIDogMDsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4qIHBhcmFtcyA9
IDA7CisgICAgICAgIGlmIChwYXJhbUNvdW50ID4gMCkgeworICAgICAgICAgICAgcGFyYW1zID0g
bmV3IHY4OjpMb2NhbDx2ODo6VmFsdWU+W3BhcmFtQ291bnRdOworICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgLy8gcGFyYW1l
dGVycyBtdXN0IGJlIGdsb2JhbGl6ZWQKKyAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBhcmdz
W2krMl07CisgICAgICAgIH0KKworICAgICAgICAvLyBwYXJhbXMgaXMgcGFzc2VkIHRvIGFjdGlv
biwgYW5kIHJlbGVhc2VkIGluIGFjdGlvbidzIGRlc3RydWN0b3IKKyAgICAgICAgU2NoZWR1bGVk
QWN0aW9uKiBhY3Rpb24gPSBuZXcgU2NoZWR1bGVkQWN0aW9uKHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPjo6Q2FzdChmdW5jdGlvbiksIHBhcmFtQ291bnQsIHBhcmFtcyk7CisKKyAgICAgICAgZGVs
ZXRlW10gcGFyYW1zOworCisgICAgICAgIGlkID0gRE9NVGltZXI6Omluc3RhbGwoc2NyaXB0Q29u
dGV4dCwgYWN0aW9uLCB0aW1lb3V0LCBzaW5nbGVTaG90KTsKKyAgICB9IGVsc2UKKyAgICAgICAg
Ly8gRklYTUUoZnFpYW4pOiB3aGF0J3MgdGhlIHJpZ2h0IHJldHVybiB2YWx1ZSBpZiBmYWlsZWQu
CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICByZXR1cm4gdjg6OkludGVn
ZXI6Ok5ldyhpZCk7Cit9CisKK3N0YXRpYyBib29sIElzQXNjaWkoY29uc3QgU3RyaW5nJiBzdHIp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykgeworICAg
ICAgICBpZiAoc3RyW2ldID4gMHhGRikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29u
dmVydEJhc2U2NChjb25zdCBTdHJpbmcmIHN0ciwgYm9vbCBlbmNvZGUpCit7CisgICAgaWYgKCFJ
c0FzY2lpKHN0cikpIHsKKyAgICAgICAgVjhQcm94eTo6U2V0RE9NRXhjZXB0aW9uKElOVkFMSURf
Q0hBUkFDVEVSX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigp
OworICAgIH0KKworICAgIFZlY3RvcjxjaGFyPiBpbnB1dENoYXJhY3RlcnMoc3RyLmxlbmd0aCgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQorICAgICAg
ICBpbnB1dENoYXJhY3RlcnNbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihzdHJbaV0pOworICAgIFZl
Y3RvcjxjaGFyPiBvdXRwdXRDaGFyYWN0ZXJzOworCisgICAgaWYgKGVuY29kZSkKKyAgICAgICAg
YmFzZTY0RW5jb2RlKGlucHV0Q2hhcmFjdGVycywgb3V0cHV0Q2hhcmFjdGVycyk7CisgICAgZWxz
ZSB7CisgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGlucHV0Q2hhcmFjdGVycywgb3V0cHV0Q2hh
cmFjdGVycykpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ2Fubm90IGRlY29kZSBi
YXNlNjQiLCBWOFByb3h5OjpHRU5FUkFMX0VSUk9SKTsKKyAgICB9CisKKyAgICByZXR1cm4gdjhT
dHJpbmcoU3RyaW5nKG91dHB1dENoYXJhY3RlcnMuZGF0YSgpLCBvdXRwdXRDaGFyYWN0ZXJzLnNp
emUoKSkpOworfQorCiBBQ0NFU1NPUl9HRVRURVIoRE9NV2luZG93RXZlbnQpCiB7CiAgICAgdjg6
OkxvY2FsPHY4OjpTdHJpbmc+IGV2ZW50U3ltYm9sID0gdjg6OlN0cmluZzo6TmV3U3ltYm9sKCJl
dmVudCIpOwpAQCAtNjYsNyArMTU0LDcgQEAgQUNDRVNTT1JfR0VUVEVSKERPTVdpbmRvd0V2ZW50
KQogCiBBQ0NFU1NPUl9HRVRURVIoRE9NV2luZG93Q3J5cHRvKQogewotICAgIC8vIFRPRE86IElt
cGxlbWVudCBtZS4KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lLgogICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CiB9CiAKQEAgLTEyMCw3ICsyMDgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0wo
RE9NV2luZG93QWRkRXZlbnRMaXN0CiAgICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CiAKLSAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGVyZSBpcyBub3QgZW5vdWdo
IGFyZ3VtZW50cworICAgIC8vIEZJWE1FOiBDaGVjayBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIGFy
Z3VtZW50cwogICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoaW1wLT5mcmFt
ZSgpKTsKICAgICBpZiAoIXByb3h5KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpA
QCAtMjA1LDYgKzI5MywxMzYgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1Bvc3RNZXNz
YWdlKQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK0NBTExCQUNLX0ZVTkNfREVD
TChET01XaW5kb3dBdG9iKQoreworICAgIElOQ19TVEFUUygiRE9NLkRPTVdpbmRvdy5hdG9iKCki
KTsKKyAgICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PERPTVdpbmRv
dz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOworCisgICAgaWYgKCFW
OFByb3h5OjpDYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpTWU5U
QVhfRVJST1IpOworCisgICAgaWYgKGFyZ3NbMF0tPklzTnVsbCgpKQorICAgICAgICByZXR1cm4g
djhTdHJpbmcoIiIpOworCisgICAgU3RyaW5nIHN0ciA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKKyAgICByZXR1cm4gY29udmVydEJhc2U2NChzdHIsIGZhbHNlKTsKK30KKworQ0FMTEJBQ0tf
RlVOQ19ERUNMKERPTVdpbmRvd0J0b2EpCit7CisgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93
LmJ0b2EoKSIpOworICAgIERPTVdpbmRvdyogaW1wID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8
RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CisKKyAg
ICBpZiAoIVY4UHJveHk6OkNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEp
CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJv
eHk6OlNZTlRBWF9FUlJPUik7CisKKyAgICBpZiAoYXJnc1swXS0+SXNOdWxsKCkpCisgICAgICAg
IHJldHVybiB2OFN0cmluZygiIik7CisKKyAgICBTdHJpbmcgc3RyID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pOworICAgIHJldHVybiBjb252ZXJ0QmFzZTY0KHN0ciwgdHJ1ZSk7Cit9CisKKy8v
IEZJWE1FKGZxaWFuKTogcmV0dXJuaW5nIHN0cmluZyBpcyBjaGVhdGluZywgYW5kIHdlIHNob3Vs
ZAorLy8gZml4IHRoaXMgYnkgY2FsbGluZyB0b1N0cmluZyBmdW5jdGlvbiBvbiB0aGUgcmVjZWl2
ZXIuCisvLyBIb3dldmVyLCBWOCBpbXBsZW1lbnRzIHRvU3RyaW5nIGluIEphdmFTY3JpcHQsIHdo
aWNoIHJlcXVpcmVzCisvLyBzd2l0Y2hpbmcgY29udGV4dCBvZiByZWNlaXZlci4gSSBjb25zaWRl
ciBpdCBpcyBkYW5nZXJvdXMuCitDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93VG9TdHJpbmcp
Cit7CisgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93LnRvU3RyaW5nKCkiKTsKKyAgICByZXR1
cm4gYXJncy5UaGlzKCktPk9iamVjdFByb3RvVG9TdHJpbmcoKTsKK30KKworQ0FMTEJBQ0tfRlVO
Q19ERUNMKERPTVdpbmRvd05PUCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cubm9w
KCkiKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitzdGF0aWMgU3RyaW5nIGV2
ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NF
UlQobmFtZS5zdGFydHNXaXRoKCJvbiIpKTsKKyAgICBTdHJpbmcgZXZlbnRUeXBlID0gbmFtZS5z
dWJzdHJpbmcoMik7CisKKyAgICBpZiAoZXZlbnRUeXBlLnN0YXJ0c1dpdGgoInciKSkgeworICAg
ICAgICBzd2l0Y2goZXZlbnRUeXBlW2V2ZW50VHlwZS5sZW5ndGgoKSAtIDFdKSB7CisgICAgICAg
IGNhc2UgJ3QnOgorICAgICAgICAgICAgZXZlbnRUeXBlID0gIndlYmtpdEFuaW1hdGlvblN0YXJ0
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgIGV2
ZW50VHlwZSA9ICJ3ZWJraXRBbmltYXRpb25JdGVyYXRpb24iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgQVNTRVJUKGV2ZW50VHlwZS5sZW5ndGgo
KSA+IDcpOworICAgICAgICAgICAgaWYgKGV2ZW50VHlwZVs3XSA9PSAnYScpCisgICAgICAgICAg
ICAgICAgZXZlbnRUeXBlID0gIndlYmtpdEFuaW1hdGlvbkVuZCI7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gIndlYmtpdFRyYW5zaXRpb25FbmQiOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXZlbnRUeXBl
OworfQorCitBQ0NFU1NPUl9TRVRURVIoRE9NV2luZG93RXZlbnRIYW5kbGVyKQoreworICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6TG9va3VwRE9NV3JhcHBlcihW
OENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOworICAgIGlmIChob2xkZXIuSXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6
OlRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRl
cik7CisgICAgaWYgKCFpbXAtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIERvY3Vt
ZW50KiBkb2MgPSBpbXAtPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2MpCisgICAg
ICAgIHJldHVybjsKKworICAgIFN0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmcobmFtZSk7Cisg
ICAgU3RyaW5nIGV2ZW50VHlwZSA9IGV2ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1lKGtleSk7CisK
KyAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CisgICAgICAgIC8vIENsZWFyIHRoZSBldmVudCBs
aXN0ZW5lcgorICAgICAgICBpbXAtPmNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudFR5
cGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0
cmlldmUoaW1wLT5mcmFtZSgpKTsKKyAgICAgICAgaWYgKCFwcm94eSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPQorICAgICAg
ICAgICAgcHJveHktPkZpbmRPckNyZWF0ZVY4RXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSk7Cisg
ICAgICAgIGlmIChsaXN0ZW5lcikKKyAgICAgICAgICAgIGltcC0+c2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyKTsKKyAgICB9Cit9CisKK0FDQ0VTU09SX0dFVFRF
UihET01XaW5kb3dFdmVudEhhbmRsZXIpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBo
b2xkZXIgPSBWOFByb3h5OjpMb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9X
LCBpbmZvLlRoaXMoKSk7CisgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6OlRvTmF0
aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRlcik7Cisg
ICAgaWYgKCFpbXAtPmZyYW1lKCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisK
KyAgICBEb2N1bWVudCogZG9jID0gaW1wLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgIGlmICgh
ZG9jKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgU3RyaW5nIGtleSA9
IHRvV2ViQ29yZVN0cmluZyhuYW1lKTsKKyAgICBTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnROYW1l
RnJvbUF0dHJpYnV0ZU5hbWUoa2V5KTsKKworICAgIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
aW1wLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7CisgICAgcmV0dXJuIFY4
UHJveHk6OkV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KGxpc3RlbmVyKTsKK30KIAogc3RhdGljIGJv
b2wgY2FuU2hvd01vZGFsRGlhbG9nTm93KGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKQEAgLTY0OCw0
ICs4NjYsNTIgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0NsZWFySW50ZXJ2YQogICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK05BTUVEX0FDQ0VTU19DSEVDSyhET01XaW5k
b3cpCit7CisgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVl
KCkpID09IFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gd2luZG93ID0gVjhQcm94eTo6TG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJ
TkRPVywgaG9zdCk7CisgICAgaWYgKHdpbmRvdy5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsgIC8vIHRoZSBmcmFtZSBpcyBnb25lLgorCisgICAgRE9NV2luZG93KiB0YXJnZXRXaW5k
b3cgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XLCB3aW5kb3cpOworCisgICAgQVNTRVJUKHRhcmdldFdpbmRvdyk7CisKKyAgICBGcmFt
ZSogdGFyZ2V0ID0gdGFyZ2V0V2luZG93LT5mcmFtZSgpOworICAgIGlmICghdGFyZ2V0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoa2V5LT5Jc1N0cmluZygpKSB7CisgICAgICAg
IFN0cmluZyBuYW1lID0gdG9XZWJDb3JlU3RyaW5nKGtleSk7CisKKyAgICAgICAgLy8gQWxsb3cg
YWNjZXNzIG9mIEdFVCBhbmQgSEFTIGlmIGluZGV4IGlzIGEgc3ViZnJhbWUuCisgICAgICAgIGlm
ICgodHlwZSA9PSB2ODo6QUNDRVNTX0dFVCB8fCB0eXBlID09IHY4OjpBQ0NFU1NfSEFTKSAmJiB0
YXJnZXQtPnRyZWUoKS0+Y2hpbGQobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gVjhQcm94eTo6Q2FuQWNjZXNzRnJhbWUodGFyZ2V0LCBmYWxzZSk7
Cit9CisKK0lOREVYRURfQUNDRVNTX0NIRUNLKERPTVdpbmRvdykKK3sKKyAgICBBU1NFUlQoVjhD
bGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4OjpE
T01XSU5ET1cpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5kb3cgPSBWOFByb3h5OjpM
b29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKKyAgICBpZiAo
d2luZG93LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRE9NV2luZG93
KiB0YXJnZXRXaW5kb3cgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XLCB3aW5kb3cpOworCisgICAgQVNTRVJUKHRhcmdldFdpbmRvdyk7
CisKKyAgICBGcmFtZSogdGFyZ2V0ID0gdGFyZ2V0V2luZG93LT5mcmFtZSgpOworICAgIGlmICgh
dGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBbGxvdyBhY2Nlc3Mgb2Yg
R0VUIGFuZCBIQVMgaWYgaW5kZXggaXMgYSBzdWJmcmFtZS4KKyAgICBpZiAoKHR5cGUgPT0gdjg6
OkFDQ0VTU19HRVQgfHwgdHlwZSA9PSB2ODo6QUNDRVNTX0hBUykgJiYgdGFyZ2V0LT50cmVlKCkt
PmNoaWxkKGluZGV4KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gVjhQcm94
eTo6Q2FuQWNjZXNzRnJhbWUodGFyZ2V0LCBmYWxzZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30512</attachid>
            <date>2009-05-20 09:14:36 -0700</date>
            <delta_ts>2009-05-20 09:26:51 -0700</delta_ts>
            <desc>patch4</desc>
            <filename>patch4.txt</filename>
            <type>text/plain</type>
            <size>11178</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mzg2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDktMDUtMTkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBz
dHJlYW0gVjggYmluZGluZ3MgZm9yIFY4RG9tV2luZG93LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4NjkKKworICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3Rv
bTo6V2luZG93U2V0VGltZW91dEltcGwpOiBNb3ZlZCBmcm9tIHY4X2N1c3RvbS5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjppc0FzY2lpKTogTW92ZWQgZnJvbSB2OF9jdXN0b20uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6Y29udmVydEJhc2U2NCk6IE1vdmVkIGZyb20gdjhfY3VzdG9tLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6IE1vdmVkIGZyb20gdjhfY3VzdG9t
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1lKTogTW92
ZWQgZnJvbSB2OF9jdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVS
KTogTW92ZWQgZnJvbSB2OF9jdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1Jf
R0VUVEVSKTogTW92ZWQgZnJvbSB2OF9jdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29yZTo6TkFN
RURfQUNDRVNTX0NIRUNLKTogTW92ZWQgZnJvbSB2OF9jdXN0b20uY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOiBNb3ZlZCBmcm9tIHY4X2N1c3RvbS5jcHAuCisK
IDIwMDktMDUtMTkgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDM4NjQp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJWOEN1c3RvbUV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKQEAgLTQzLDE3ICs0NSwx
MDMgQEAKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgog
I2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAKLQogLy8gSG9yaXpvbnRhbCBhbmQgdmVydGljYWwg
b2Zmc2V0LCBmcm9tIHRoZSBwYXJlbnQgY29udGVudCBhcmVhLCBhcm91bmQgbmV3bHkKIC8vIG9w
ZW5lZCBwb3B1cHMgdGhhdCBkb24ndCBzcGVjaWZ5IGEgbG9jYXRpb24uCiBzdGF0aWMgY29uc3Qg
aW50IHBvcHVwVGlsZVBpeGVscyA9IDEwOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOEN1c3RvbTo6V2luZG93U2V0VGltZW91dEltcGwoY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncywgYm9vbCBzaW5nbGVTaG90KQoreworICAgIGludCBhcmd1bWVudENv
dW50ID0gYXJncy5MZW5ndGgoKTsKKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIERPTVdpbmRvdyogaW1wID0gVjhQcm94
eTo6VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJn
cy5Ib2xkZXIoKSk7CisKKyAgICBpZiAoIWltcC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKKworICAgIGlmICghVjhQcm94eTo6Q2FuQWNjZXNzRnJhbWUoaW1wLT5m
cmFtZSgpLCB0cnVlKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kj4oaW1wLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKworICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBmdW5jdGlvbiA9IGFyZ3NbMF07CisKKyAgICBpbnQzMl90IHRpbWVv
dXQgPSAwOworICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIAorICAgICAgICB0aW1lb3V0ID0g
YXJnc1sxXS0+SW50MzJWYWx1ZSgpOworCisgICAgaW50IGlkOworICAgIGlmIChmdW5jdGlvbi0+
SXNTdHJpbmcoKSkgeworICAgICAgICAvLyBEb24ndCBhbGxvdyBzZXR0aW5nIHRpbWVvdXRzIHRv
IHJ1biBlbXB0eSBmdW5jdGlvbnMhCisgICAgICAgIC8vIChCdWcgMTAwOTU5NykKKyAgICAgICAg
V2ViQ29yZTo6U3RyaW5nIGZ1bmN0aW9uU3RyaW5nID0gdG9XZWJDb3JlU3RyaW5nKGZ1bmN0aW9u
KTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uU3RyaW5nLmxlbmd0aCgpID09IDApCisgICAgICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgICAgIGlkID0gRE9NVGltZXI6Omluc3Rh
bGwoc2NyaXB0Q29udGV4dCwgbmV3IFNjaGVkdWxlZEFjdGlvbihmdW5jdGlvblN0cmluZyksIHRp
bWVvdXQsIHNpbmdsZVNob3QpOworICAgIH0gZWxzZSBpZiAoZnVuY3Rpb24tPklzRnVuY3Rpb24o
KSkgeworICAgICAgICBpbnQgcGFyYW1Db3VudCA9IGFyZ3VtZW50Q291bnQgPj0gMiA/IGFyZ3Vt
ZW50Q291bnQgLSAyIDogMDsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4qIHBhcmFtcyA9
IDA7CisgICAgICAgIGlmIChwYXJhbUNvdW50ID4gMCkgeworICAgICAgICAgICAgcGFyYW1zID0g
bmV3IHY4OjpMb2NhbDx2ODo6VmFsdWU+W3BhcmFtQ291bnRdOworICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgLy8gcGFyYW1l
dGVycyBtdXN0IGJlIGdsb2JhbGl6ZWQKKyAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBhcmdz
W2krMl07CisgICAgICAgIH0KKworICAgICAgICAvLyBwYXJhbXMgaXMgcGFzc2VkIHRvIGFjdGlv
biwgYW5kIHJlbGVhc2VkIGluIGFjdGlvbidzIGRlc3RydWN0b3IKKyAgICAgICAgU2NoZWR1bGVk
QWN0aW9uKiBhY3Rpb24gPSBuZXcgU2NoZWR1bGVkQWN0aW9uKHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPjo6Q2FzdChmdW5jdGlvbiksIHBhcmFtQ291bnQsIHBhcmFtcyk7CisKKyAgICAgICAgZGVs
ZXRlW10gcGFyYW1zOworCisgICAgICAgIGlkID0gRE9NVGltZXI6Omluc3RhbGwoc2NyaXB0Q29u
dGV4dCwgYWN0aW9uLCB0aW1lb3V0LCBzaW5nbGVTaG90KTsKKyAgICB9IGVsc2UKKyAgICAgICAg
Ly8gRklYTUUoZnFpYW4pOiB3aGF0J3MgdGhlIHJpZ2h0IHJldHVybiB2YWx1ZSBpZiBmYWlsZWQu
CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICByZXR1cm4gdjg6OkludGVn
ZXI6Ok5ldyhpZCk7Cit9CisKK3N0YXRpYyBib29sIGlzQXNjaWkoY29uc3QgU3RyaW5nJiBzdHIp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykgeworICAg
ICAgICBpZiAoc3RyW2ldID4gMHhGRikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29u
dmVydEJhc2U2NChjb25zdCBTdHJpbmcmIHN0ciwgYm9vbCBlbmNvZGUpCit7CisgICAgaWYgKCFp
c0FzY2lpKHN0cikpIHsKKyAgICAgICAgVjhQcm94eTo6U2V0RE9NRXhjZXB0aW9uKElOVkFMSURf
Q0hBUkFDVEVSX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigp
OworICAgIH0KKworICAgIFZlY3RvcjxjaGFyPiBpbnB1dENoYXJhY3RlcnMoc3RyLmxlbmd0aCgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQorICAgICAg
ICBpbnB1dENoYXJhY3RlcnNbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihzdHJbaV0pOworICAgIFZl
Y3RvcjxjaGFyPiBvdXRwdXRDaGFyYWN0ZXJzOworCisgICAgaWYgKGVuY29kZSkKKyAgICAgICAg
YmFzZTY0RW5jb2RlKGlucHV0Q2hhcmFjdGVycywgb3V0cHV0Q2hhcmFjdGVycyk7CisgICAgZWxz
ZSB7CisgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGlucHV0Q2hhcmFjdGVycywgb3V0cHV0Q2hh
cmFjdGVycykpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ2Fubm90IGRlY29kZSBi
YXNlNjQiLCBWOFByb3h5OjpHRU5FUkFMX0VSUk9SKTsKKyAgICB9CisKKyAgICByZXR1cm4gdjhT
dHJpbmcoU3RyaW5nKG91dHB1dENoYXJhY3RlcnMuZGF0YSgpLCBvdXRwdXRDaGFyYWN0ZXJzLnNp
emUoKSkpOworfQorCiBBQ0NFU1NPUl9HRVRURVIoRE9NV2luZG93RXZlbnQpCiB7CiAgICAgdjg6
OkxvY2FsPHY4OjpTdHJpbmc+IGV2ZW50U3ltYm9sID0gdjg6OlN0cmluZzo6TmV3U3ltYm9sKCJl
dmVudCIpOwpAQCAtNjYsNyArMTU0LDcgQEAgQUNDRVNTT1JfR0VUVEVSKERPTVdpbmRvd0V2ZW50
KQogCiBBQ0NFU1NPUl9HRVRURVIoRE9NV2luZG93Q3J5cHRvKQogewotICAgIC8vIFRPRE86IElt
cGxlbWVudCBtZS4KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lLgogICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CiB9CiAKQEAgLTEyMCw3ICsyMDgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0wo
RE9NV2luZG93QWRkRXZlbnRMaXN0CiAgICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CiAKLSAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGVyZSBpcyBub3QgZW5vdWdo
IGFyZ3VtZW50cworICAgIC8vIEZJWE1FOiBDaGVjayBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIGFy
Z3VtZW50cwogICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoaW1wLT5mcmFt
ZSgpKTsKICAgICBpZiAoIXByb3h5KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpA
QCAtMjA1LDYgKzI5MywxMzYgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1Bvc3RNZXNz
YWdlKQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK0NBTExCQUNLX0ZVTkNfREVD
TChET01XaW5kb3dBdG9iKQoreworICAgIElOQ19TVEFUUygiRE9NLkRPTVdpbmRvdy5hdG9iKCki
KTsKKyAgICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PERPTVdpbmRv
dz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOworCisgICAgaWYgKCFW
OFByb3h5OjpDYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQorICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpTWU5U
QVhfRVJST1IpOworCisgICAgaWYgKGFyZ3NbMF0tPklzTnVsbCgpKQorICAgICAgICByZXR1cm4g
djhTdHJpbmcoIiIpOworCisgICAgU3RyaW5nIHN0ciA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKKyAgICByZXR1cm4gY29udmVydEJhc2U2NChzdHIsIGZhbHNlKTsKK30KKworQ0FMTEJBQ0tf
RlVOQ19ERUNMKERPTVdpbmRvd0J0b2EpCit7CisgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93
LmJ0b2EoKSIpOworICAgIERPTVdpbmRvdyogaW1wID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8
RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CisKKyAg
ICBpZiAoIVY4UHJveHk6OkNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEp
CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJv
eHk6OlNZTlRBWF9FUlJPUik7CisKKyAgICBpZiAoYXJnc1swXS0+SXNOdWxsKCkpCisgICAgICAg
IHJldHVybiB2OFN0cmluZygiIik7CisKKyAgICBTdHJpbmcgc3RyID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pOworICAgIHJldHVybiBjb252ZXJ0QmFzZTY0KHN0ciwgdHJ1ZSk7Cit9CisKKy8v
IEZJWE1FKGZxaWFuKTogcmV0dXJuaW5nIHN0cmluZyBpcyBjaGVhdGluZywgYW5kIHdlIHNob3Vs
ZAorLy8gZml4IHRoaXMgYnkgY2FsbGluZyB0b1N0cmluZyBmdW5jdGlvbiBvbiB0aGUgcmVjZWl2
ZXIuCisvLyBIb3dldmVyLCBWOCBpbXBsZW1lbnRzIHRvU3RyaW5nIGluIEphdmFTY3JpcHQsIHdo
aWNoIHJlcXVpcmVzCisvLyBzd2l0Y2hpbmcgY29udGV4dCBvZiByZWNlaXZlci4gSSBjb25zaWRl
ciBpdCBpcyBkYW5nZXJvdXMuCitDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93VG9TdHJpbmcp
Cit7CisgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93LnRvU3RyaW5nKCkiKTsKKyAgICByZXR1
cm4gYXJncy5UaGlzKCktPk9iamVjdFByb3RvVG9TdHJpbmcoKTsKK30KKworQ0FMTEJBQ0tfRlVO
Q19ERUNMKERPTVdpbmRvd05PUCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cubm9w
KCkiKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitzdGF0aWMgU3RyaW5nIGV2
ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NF
UlQobmFtZS5zdGFydHNXaXRoKCJvbiIpKTsKKyAgICBTdHJpbmcgZXZlbnRUeXBlID0gbmFtZS5z
dWJzdHJpbmcoMik7CisKKyAgICBpZiAoZXZlbnRUeXBlLnN0YXJ0c1dpdGgoInciKSkgeworICAg
ICAgICBzd2l0Y2goZXZlbnRUeXBlW2V2ZW50VHlwZS5sZW5ndGgoKSAtIDFdKSB7CisgICAgICAg
IGNhc2UgJ3QnOgorICAgICAgICAgICAgZXZlbnRUeXBlID0gIndlYmtpdEFuaW1hdGlvblN0YXJ0
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgIGV2
ZW50VHlwZSA9ICJ3ZWJraXRBbmltYXRpb25JdGVyYXRpb24iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgQVNTRVJUKGV2ZW50VHlwZS5sZW5ndGgo
KSA+IDcpOworICAgICAgICAgICAgaWYgKGV2ZW50VHlwZVs3XSA9PSAnYScpCisgICAgICAgICAg
ICAgICAgZXZlbnRUeXBlID0gIndlYmtpdEFuaW1hdGlvbkVuZCI7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gIndlYmtpdFRyYW5zaXRpb25FbmQiOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXZlbnRUeXBl
OworfQorCitBQ0NFU1NPUl9TRVRURVIoRE9NV2luZG93RXZlbnRIYW5kbGVyKQoreworICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6TG9va3VwRE9NV3JhcHBlcihW
OENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOworICAgIGlmIChob2xkZXIuSXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6
OlRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRl
cik7CisgICAgaWYgKCFpbXAtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIERvY3Vt
ZW50KiBkb2MgPSBpbXAtPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2MpCisgICAg
ICAgIHJldHVybjsKKworICAgIFN0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmcobmFtZSk7Cisg
ICAgU3RyaW5nIGV2ZW50VHlwZSA9IGV2ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1lKGtleSk7CisK
KyAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CisgICAgICAgIC8vIENsZWFyIHRoZSBldmVudCBs
aXN0ZW5lcgorICAgICAgICBpbXAtPmNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudFR5
cGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0
cmlldmUoaW1wLT5mcmFtZSgpKTsKKyAgICAgICAgaWYgKCFwcm94eSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPQorICAgICAg
ICAgICAgcHJveHktPkZpbmRPckNyZWF0ZVY4RXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSk7Cisg
ICAgICAgIGlmIChsaXN0ZW5lcikKKyAgICAgICAgICAgIGltcC0+c2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyKTsKKyAgICB9Cit9CisKK0FDQ0VTU09SX0dFVFRF
UihET01XaW5kb3dFdmVudEhhbmRsZXIpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBo
b2xkZXIgPSBWOFByb3h5OjpMb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9X
LCBpbmZvLlRoaXMoKSk7CisgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6OlRvTmF0
aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRlcik7Cisg
ICAgaWYgKCFpbXAtPmZyYW1lKCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisK
KyAgICBEb2N1bWVudCogZG9jID0gaW1wLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgIGlmICgh
ZG9jKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgU3RyaW5nIGtleSA9
IHRvV2ViQ29yZVN0cmluZyhuYW1lKTsKKyAgICBTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnROYW1l
RnJvbUF0dHJpYnV0ZU5hbWUoa2V5KTsKKworICAgIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
aW1wLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7CisgICAgcmV0dXJuIFY4
UHJveHk6OkV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KGxpc3RlbmVyKTsKK30KIAogc3RhdGljIGJv
b2wgY2FuU2hvd01vZGFsRGlhbG9nTm93KGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKQEAgLTY0OCw0
ICs4NjYsNTIgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0NsZWFySW50ZXJ2YQogICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK05BTUVEX0FDQ0VTU19DSEVDSyhET01XaW5k
b3cpCit7CisgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVl
KCkpID09IFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gd2luZG93ID0gVjhQcm94eTo6TG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJ
TkRPVywgaG9zdCk7CisgICAgaWYgKHdpbmRvdy5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsgIC8vIHRoZSBmcmFtZSBpcyBnb25lLgorCisgICAgRE9NV2luZG93KiB0YXJnZXRXaW5k
b3cgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XLCB3aW5kb3cpOworCisgICAgQVNTRVJUKHRhcmdldFdpbmRvdyk7CisKKyAgICBGcmFt
ZSogdGFyZ2V0ID0gdGFyZ2V0V2luZG93LT5mcmFtZSgpOworICAgIGlmICghdGFyZ2V0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoa2V5LT5Jc1N0cmluZygpKSB7CisgICAgICAg
IFN0cmluZyBuYW1lID0gdG9XZWJDb3JlU3RyaW5nKGtleSk7CisKKyAgICAgICAgLy8gQWxsb3cg
YWNjZXNzIG9mIEdFVCBhbmQgSEFTIGlmIGluZGV4IGlzIGEgc3ViZnJhbWUuCisgICAgICAgIGlm
ICgodHlwZSA9PSB2ODo6QUNDRVNTX0dFVCB8fCB0eXBlID09IHY4OjpBQ0NFU1NfSEFTKSAmJiB0
YXJnZXQtPnRyZWUoKS0+Y2hpbGQobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gVjhQcm94eTo6Q2FuQWNjZXNzRnJhbWUodGFyZ2V0LCBmYWxzZSk7
Cit9CisKK0lOREVYRURfQUNDRVNTX0NIRUNLKERPTVdpbmRvdykKK3sKKyAgICBBU1NFUlQoVjhD
bGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4OjpE
T01XSU5ET1cpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5kb3cgPSBWOFByb3h5OjpM
b29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKKyAgICBpZiAo
d2luZG93LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRE9NV2luZG93
KiB0YXJnZXRXaW5kb3cgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XLCB3aW5kb3cpOworCisgICAgQVNTRVJUKHRhcmdldFdpbmRvdyk7
CisKKyAgICBGcmFtZSogdGFyZ2V0ID0gdGFyZ2V0V2luZG93LT5mcmFtZSgpOworICAgIGlmICgh
dGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBbGxvdyBhY2Nlc3Mgb2Yg
R0VUIGFuZCBIQVMgaWYgaW5kZXggaXMgYSBzdWJmcmFtZS4KKyAgICBpZiAoKHR5cGUgPT0gdjg6
OkFDQ0VTU19HRVQgfHwgdHlwZSA9PSB2ODo6QUNDRVNTX0hBUykgJiYgdGFyZ2V0LT50cmVlKCkt
PmNoaWxkKGluZGV4KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gVjhQcm94
eTo6Q2FuQWNjZXNzRnJhbWUodGFyZ2V0LCBmYWxzZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>
<flag name="review"
          id="15412"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>