<?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>30360</bug_id>
          
          <creation_ts>2009-10-14 10:59:34 -0700</creation_ts>
          <short_desc>[Chromium] Add &lt;keygen&gt; support</short_desc>
          <delta_ts>2009-10-22 10:56:00 -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>PC</rep_platform>
          <op_sys>Linux</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>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Gaurav Shah">gauravsh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fishd</cc>
    
    <cc>wtc</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>154609</commentid>
    <comment_count>0</comment_count>
    <who name="Gaurav Shah">gauravsh</who>
    <bug_when>2009-10-14 10:59:34 -0700</bug_when>
    <thetext>The patch replaces the temporary link stubs for &lt;keygen&gt; tag handler in Chromium with calls to the browser implementation via ChromiumBridge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154610</commentid>
    <comment_count>1</comment_count>
      <attachid>41170</attachid>
    <who name="Gaurav Shah">gauravsh</who>
    <bug_when>2009-10-14 11:00:44 -0700</bug_when>
    <thetext>Created attachment 41170
Chromium &lt;keygen&gt; handler patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154629</commentid>
    <comment_count>2</comment_count>
    <who name="Wan-Teh Chang">wtc</who>
    <bug_when>2009-10-14 12:27:20 -0700</bug_when>
    <thetext>In WebCore/platform/chromium/SSLKeyGeneratorChromium.cpp:

&gt; // Returns the key sizes supported by the HTML keygen tag.  The first string
&gt; // is displayed as the default key size in the keygen menu.
&gt;-Vector&lt;String&gt; supportedKeySizes()
&gt;+void getSupportedKeySizes(Vector&lt;String&gt;&amp; sizes)
&gt; {
&gt;-    Vector&lt;String&gt; sizes(2);
&gt;+    sizes.resize(2);
&gt;     sizes[0] = keygenMenuHighGradeKeySize();
&gt;     sizes[1] = keygenMenuMediumGradeKeySize();
&gt;-    return sizes;
&gt; }

Darin, please make sure we can set the size of a Vector
using the resize() method like this.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154630</commentid>
    <comment_count>3</comment_count>
      <attachid>41170</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-10-14 12:29:00 -0700</bug_when>
    <thetext>Comment on attachment 41170
Chromium &lt;keygen&gt; handler patch 

&gt; Index: WebCore/ChangeLog
...
&gt; +2009-10-14  Gaurav Shah  &lt;gauravsh@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +	Replaces temporary link stub for &lt;keygen&gt; tag handler for the Chromium
&gt; +	browser with a call via the Chromium Bridge.

nit: please replace tabs with spaces.


&gt; Index: WebCore/platform/SSLKeyGenerator.h

&gt; +    // Get set of strings denoting keystrength in the &lt;keygen&gt; menu.
&gt;      void getSupportedKeySizes(Vector&lt;String&gt;&amp;);

This comment doesn&apos;t seem to tell me much more than what the function
name already says.


&gt; +
&gt; +    // This function handles the &lt;keygen&gt; tag in form elements for
&gt; +    // requesting CAs to generate a client certificate from within
&gt; +    // the browser. Returns the signed public key and challenge string
&gt; +    // from a newly generated key pair.

It is probably not necessary to describe the keygen tag here.

The last sentence seems to suggest that the challenge string is a
returned value, but it appears to be a const reference type, so that
means that it must be an input value instead of a returned value.


&gt;      String signedPublicKeyAndChallengeString(unsigned keySizeIndex, const String&amp; challengeString, const KURL&amp;);

&gt; Index: WebCore/platform/chromium/ChromiumBridge.h
...
&gt; +        // Keygen -------------------------------------------------------------
&gt; +        static String genKeyAndSignChallenge(unsigned keySizeIndex, const String&amp; challenge, const KURL&amp; url);

nit: please insert this section in alphabetical order (i.e., just
after the &quot;JavaScript&quot; section).  Thanks!


&gt; Index: WebCore/platform/chromium/SSLKeyGeneratorChromium.cpp
...
&gt; +// These are defined in webkit/api/src//localized_strings.cpp.

s/localized_strings/LocalizedStrings/


&gt; +// For handling &lt;keygen&gt; form elements
&gt; +// Returns the signed public key and challenge string from a newly generated
&gt; +// key pair for creating client certificates from within the browser

nit: no need to repeat the comment from the header file here.


&gt; +String signedPublicKeyAndChallengeString(unsigned keySizeIndex,
&gt; +                                         const String&amp; challengeString,
&gt; +                                         const KURL&amp; url)
&gt; +{
&gt; +     return ChromiumBridge::genKeyAndSignChallenge(keySizeIndex, challengeString,
&gt; +                                                url);

since the ChromiumBridge method is just a 1-1 pass through, it would be nice
if it had exactly the same name, signedPublicKeyAndChallengeString.

or, do you think that signedPublicKeyAndChallengeString should have a better
name?


&gt; Index: WebCore/platform/chromium/TemporaryLinkStubs.cpp

thanks for cleaning up this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154638</commentid>
    <comment_count>4</comment_count>
    <who name="Gaurav Shah">gauravsh</who>
    <bug_when>2009-10-14 13:18:08 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 41170 [details])
&gt; &gt; Index: WebCore/ChangeLog
&gt; ...
&gt; &gt; +2009-10-14  Gaurav Shah  &lt;gauravsh@google.com&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +	Replaces temporary link stub for &lt;keygen&gt; tag handler for the Chromium
&gt; &gt; +	browser with a call via the Chromium Bridge.
&gt; 
&gt; nit: please replace tabs with spaces.

Fixed.

&gt; 
&gt; 
&gt; &gt; Index: WebCore/platform/SSLKeyGenerator.h
&gt; 
&gt; &gt; +    // Get set of strings denoting keystrength in the &lt;keygen&gt; menu.
&gt; &gt;      void getSupportedKeySizes(Vector&lt;String&gt;&amp;);
&gt; 
&gt; This comment doesn&apos;t seem to tell me much more than what the function
&gt; name already says.

It&apos;s not clear from the function name where and when it&apos;s used. I have tweaked the comment a little bit. 
 
&gt; 
&gt; 
&gt; &gt; +
&gt; &gt; +    // This function handles the &lt;keygen&gt; tag in form elements for
&gt; &gt; +    // requesting CAs to generate a client certificate from within
&gt; &gt; +    // the browser. Returns the signed public key and challenge string
&gt; &gt; +    // from a newly generated key pair.
&gt; 
&gt; It is probably not necessary to describe the keygen tag here.
&gt; 
&gt; The last sentence seems to suggest that the challenge string is a
&gt; returned value, but it appears to be a const reference type, so that
&gt; means that it must be an input value instead of a returned value.

Yes, I meant to say that both public key and challenge string combined together are signed. Will fix the comment.

&gt; 
&gt; 
&gt; &gt;      String signedPublicKeyAndChallengeString(unsigned keySizeIndex, const String&amp; challengeString, const KURL&amp;);
&gt; 
&gt; &gt; Index: WebCore/platform/chromium/ChromiumBridge.h
&gt; ...
&gt; &gt; +        // Keygen -------------------------------------------------------------
&gt; &gt; +        static String genKeyAndSignChallenge(unsigned keySizeIndex, const String&amp; challenge, const KURL&amp; url);
&gt; 
&gt; nit: please insert this section in alphabetical order (i.e., just
&gt; after the &quot;JavaScript&quot; section).  Thanks!

Fixed.

&gt; 
&gt; 
&gt; &gt; Index: WebCore/platform/chromium/SSLKeyGeneratorChromium.cpp
&gt; ...
&gt; &gt; +// These are defined in webkit/api/src//localized_strings.cpp.
&gt; 
&gt; s/localized_strings/LocalizedStrings/
&gt; 
&gt; 
&gt; &gt; +// For handling &lt;keygen&gt; form elements
&gt; &gt; +// Returns the signed public key and challenge string from a newly generated
&gt; &gt; +// key pair for creating client certificates from within the browser
&gt; 
&gt; nit: no need to repeat the comment from the header file here.

Fixed.

&gt; 
&gt; 
&gt; &gt; +String signedPublicKeyAndChallengeString(unsigned keySizeIndex,
&gt; &gt; +                                         const String&amp; challengeString,
&gt; &gt; +                                         const KURL&amp; url)
&gt; &gt; +{
&gt; &gt; +     return ChromiumBridge::genKeyAndSignChallenge(keySizeIndex, challengeString,
&gt; &gt; +                                                url);
&gt; 
&gt; since the ChromiumBridge method is just a 1-1 pass through, it would be nice
&gt; if it had exactly the same name, signedPublicKeyAndChallengeString.
&gt; 
&gt; or, do you think that signedPublicKeyAndChallengeString should have a better
&gt; name?

genKeyAndSignChallenge() is what the WebKit layer is asking the browser to do, so more accurate IMO. But WebCore uses signedPublicKeyAndChallenge() at various places (incl. html/HTMLKeygenElement.cpp), so I didn&apos;t change it. 

Maybe, we can make it signedPublicKeyAndChallengeString for ChromiumBridge but keep genKeyAndSignChallenge in the Chromium portion? 

&gt; 
&gt; 
&gt; &gt; Index: WebCore/platform/chromium/TemporaryLinkStubs.cpp
&gt; 
&gt; thanks for cleaning up this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154639</commentid>
    <comment_count>5</comment_count>
      <attachid>41183</attachid>
    <who name="Gaurav Shah">gauravsh</who>
    <bug_when>2009-10-14 13:19:37 -0700</bug_when>
    <thetext>Created attachment 41183
Updated Chromium &lt;keygen&gt; handler patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154949</commentid>
    <comment_count>6</comment_count>
    <who name="Wan-Teh Chang">wtc</who>
    <bug_when>2009-10-15 16:54:42 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt;
&gt; Maybe, we can make it signedPublicKeyAndChallengeString for ChromiumBridge but
&gt; keep genKeyAndSignChallenge in the Chromium portion?

Darin, signedPublicKeyAndChallengeString does more than signing;
it also generates a new key pair.  This is why I suggested the
genKeyAndSignChallenge function name to Gaurav.

But I agree that the since ChromiumBridge method is just a 1-1
pass through, it should have the same name.  Gaurav, let&apos;s do
what you suggested above.  The signedPublicKeyAndChallengeString
name should extend all the way to
chrome/renderer/renderer_webkitclient_impl.cc in the Chromium
source tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154981</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-10-15 20:31:18 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Darin, signedPublicKeyAndChallengeString does more than signing;
&gt; it also generates a new key pair.  This is why I suggested the
&gt; genKeyAndSignChallenge function name to Gaurav.

That makes sense.  My point was that if the WebCore name is poor, then let&apos;s fix it :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154984</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-10-15 20:44:53 -0700</bug_when>
    <thetext>One note about naming:  In WebKit, the style is to avoid abbreviations when naming methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155123</commentid>
    <comment_count>9</comment_count>
    <who name="Gaurav Shah">gauravsh</who>
    <bug_when>2009-10-16 10:28:08 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt;
&gt; &gt; Maybe, we can make it signedPublicKeyAndChallengeString for ChromiumBridge but
&gt; &gt; keep genKeyAndSignChallenge in the Chromium portion?
&gt; 
&gt; Darin, signedPublicKeyAndChallengeString does more than signing;
&gt; it also generates a new key pair.  This is why I suggested the
&gt; genKeyAndSignChallenge function name to Gaurav.
&gt; 
&gt; But I agree that the since ChromiumBridge method is just a 1-1
&gt; pass through, it should have the same name.  Gaurav, let&apos;s do
&gt; what you suggested above.  The signedPublicKeyAndChallengeString
&gt; name should extend all the way to
&gt; chrome/renderer/renderer_webkitclient_impl.cc in the Chromium
&gt; source tree.

Ok, I made the change to make it a 1-1 pass through.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155124</commentid>
    <comment_count>10</comment_count>
      <attachid>41294</attachid>
    <who name="Gaurav Shah">gauravsh</who>
    <bug_when>2009-10-16 10:29:11 -0700</bug_when>
    <thetext>Created attachment 41294
Chromium &lt;keygen&gt; handler patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156927</commentid>
    <comment_count>11</comment_count>
      <attachid>41294</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-10-22 10:47:09 -0700</bug_when>
    <thetext>Comment on attachment 41294
Chromium &lt;keygen&gt; handler patch 

&gt; Index: WebCore/ChangeLog
...
&gt; +        Replaces temporary link stub for &lt;keygen&gt; tag handler for the Chromium
&gt; +        browser with a call via the Chromium Bridge.

nit: there should be a bug link here.  i&apos;ll add that before committing.

-darin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156932</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-10-22 10:49:53 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/49947</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156936</commentid>
    <comment_count>13</comment_count>
    <who name="Gaurav Shah">gauravsh</who>
    <bug_when>2009-10-22 10:56:00 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Landed as http://trac.webkit.org/changeset/49947

Thanks Darin!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41170</attachid>
            <date>2009-10-14 11:00:44 -0700</date>
            <delta_ts>2009-10-14 13:19:37 -0700</delta_ts>
            <desc>Chromium &lt;keygen&gt; handler patch </desc>
            <filename>chromium-keygen.patch</filename>
            <type>text/plain</type>
            <size>6801</size>
            <attacher name="Gaurav Shah">gauravsh</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTU3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMTAtMTQgIEdhdXJhdiBTaGFoICA8Z2F1cmF2c2hAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCVJlcGxhY2Vz
IHRlbXBvcmFyeSBsaW5rIHN0dWIgZm9yIDxrZXlnZW4+IHRhZyBoYW5kbGVyIGZvciB0aGUgQ2hy
b21pdW0KKwlicm93c2VyIHdpdGggYSBjYWxsIHZpYSB0aGUgQ2hyb21pdW0gQnJpZGdlLgorCisg
ICAgICAgICogcGxhdGZvcm0vU1NMS2V5R2VuZXJhdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9T
U0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdXBwb3J0
ZWRLZXlTaXplcyk6CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2VTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpmaWxlU3lzdGVtUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZSk6CisKIDIw
MDktMTAtMTQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1v
cmUgY2hhbmdlcyB0byBmaWd1cmUgb3V0IHdoeSB0aGUgd2ViZ2wgdGVzdHMgYXJlIGNyYXNoaW5n
IG9uIHRoZSBidWlsZCBib3QuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1NTTEtleUdlbmVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU1NMS2V5R2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDQ5NTcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgS1VSTDsKIAorICAgIC8vIEdldCBzZXQgb2Ygc3RyaW5ncyBkZW5vdGluZyBrZXlzdHJl
bmd0aCBpbiB0aGUgPGtleWdlbj4gbWVudS4KICAgICB2b2lkIGdldFN1cHBvcnRlZEtleVNpemVz
KFZlY3RvcjxTdHJpbmc+Jik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIDxr
ZXlnZW4+IHRhZyBpbiBmb3JtIGVsZW1lbnRzIGZvcgorICAgIC8vIHJlcXVlc3RpbmcgQ0FzIHRv
IGdlbmVyYXRlIGEgY2xpZW50IGNlcnRpZmljYXRlIGZyb20gd2l0aGluCisgICAgLy8gdGhlIGJy
b3dzZXIuIFJldHVybnMgdGhlIHNpZ25lZCBwdWJsaWMga2V5IGFuZCBjaGFsbGVuZ2Ugc3RyaW5n
CisgICAgLy8gZnJvbSBhIG5ld2x5IGdlbmVyYXRlZCBrZXkgcGFpci4KICAgICBTdHJpbmcgc2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29u
c3QgU3RyaW5nJiBjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwmKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaAkocmV2aXNpb24gNDk1NzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlY3JlbWVudFN0YXRzQ291bnRlcihjb25z
dCBjaGFyKiBuYW1lKTsKICAgICAgICAgc3RhdGljIHZvaWQgaW5jcmVtZW50U3RhdHNDb3VudGVy
KGNvbnN0IGNoYXIqIG5hbWUpOwogCisgICAgICAgIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHN0
YXRpYyBTdHJpbmcgZ2VuS2V5QW5kU2lnbkNoYWxsZW5nZSh1bnNpZ25lZCBrZXlTaXplSW5kZXgs
IGNvbnN0IFN0cmluZyYgY2hhbGxlbmdlLCBjb25zdCBLVVJMJiB1cmwpOworCiAgICAgICAgIC8v
IFN1ZGRlbiBUZXJtaW5hdGlvbgogICAgICAgICBzdGF0aWMgdm9pZCBzdWRkZW5UZXJtaW5hdGlv
bkNoYW5nZWQoYm9vbCBlbmFibGVkKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDQ5NTcx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKQEAgLTMxLDIyICszMSwzMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlNTTEtleUdlbmVyYXRvci5oIgogCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRo
ZXNlIGFyZSBkZWZpbmVkIGluIHdlYmtpdC9nbHVlL2xvY2FsaXplZF9zdHJpbmdzLmNwcC4KKy8v
IFRoZXNlIGFyZSBkZWZpbmVkIGluIHdlYmtpdC9hcGkvc3JjLy9sb2NhbGl6ZWRfc3RyaW5ncy5j
cHAuCiBTdHJpbmcga2V5Z2VuTWVudUhpZ2hHcmFkZUtleVNpemUoKTsKIFN0cmluZyBrZXlnZW5N
ZW51TWVkaXVtR3JhZGVLZXlTaXplKCk7CiAKIC8vIFJldHVybnMgdGhlIGtleSBzaXplcyBzdXBw
b3J0ZWQgYnkgdGhlIEhUTUwga2V5Z2VuIHRhZy4gIFRoZSBmaXJzdCBzdHJpbmcKIC8vIGlzIGRp
c3BsYXllZCBhcyB0aGUgZGVmYXVsdCBrZXkgc2l6ZSBpbiB0aGUga2V5Z2VuIG1lbnUuCi1WZWN0
b3I8U3RyaW5nPiBzdXBwb3J0ZWRLZXlTaXplcygpCit2b2lkIGdldFN1cHBvcnRlZEtleVNpemVz
KFZlY3RvcjxTdHJpbmc+JiBzaXplcykKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBzaXplcygyKTsK
KyAgICBzaXplcy5yZXNpemUoMik7CiAgICAgc2l6ZXNbMF0gPSBrZXlnZW5NZW51SGlnaEdyYWRl
S2V5U2l6ZSgpOwogICAgIHNpemVzWzFdID0ga2V5Z2VuTWVudU1lZGl1bUdyYWRlS2V5U2l6ZSgp
OwotICAgIHJldHVybiBzaXplczsKIH0KIAotLy8gRklYTUU6IGltcGxlbWVudCBzaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcgaGVyZS4KKy8vIEZvciBoYW5kbGluZyA8a2V5Z2VuPiBm
b3JtIGVsZW1lbnRzCisvLyBSZXR1cm5zIHRoZSBzaWduZWQgcHVibGljIGtleSBhbmQgY2hhbGxl
bmdlIHN0cmluZyBmcm9tIGEgbmV3bHkgZ2VuZXJhdGVkCisvLyBrZXkgcGFpciBmb3IgY3JlYXRp
bmcgY2xpZW50IGNlcnRpZmljYXRlcyBmcm9tIHdpdGhpbiB0aGUgYnJvd3NlcgorU3RyaW5nIHNp
Z25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgY2hh
bGxlbmdlU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBLVVJMJiB1cmwpCit7CisgICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Z2VuS2V5QW5k
U2lnbkNoYWxsZW5nZShrZXlTaXplSW5kZXgsIGNoYWxsZW5nZVN0cmluZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCk7Cit9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDQ5NTcxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEw
ICsxLDEwIEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCiAgKiBtZXQ6Ci0gKiAKKyAqCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpA
QCAtMTQsNyArMTQsNyBAQAogICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zNiwxMSArMzYsMTYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hh
bGxlbmdlU3RyaW5nKHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJikgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLXZvaWQgZ2V0U3VwcG9ydGVkS2V5U2l6
ZXMoVmVjdG9yPFN0cmluZz4mKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQotU3RyaW5nIEtVUkw6
OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5n
KCk7IH0KLQotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0
aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KK1N0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJp
bmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="22507"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41183</attachid>
            <date>2009-10-14 13:19:37 -0700</date>
            <delta_ts>2009-10-16 10:29:11 -0700</delta_ts>
            <desc>Updated Chromium &lt;keygen&gt; handler patch</desc>
            <filename>chromium-keygen-2.patch</filename>
            <type>text/plain</type>
            <size>6765</size>
            <attacher name="Gaurav Shah">gauravsh</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTU3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMTAtMTQgIEdhdXJhdiBTaGFoICA8Z2F1cmF2c2hAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZXBsYWNlcyB0ZW1wb3JhcnkgbGluayBzdHViIGZvciA8a2V5Z2VuPiB0YWcgaGFuZGxlciBmb3Ig
dGhlIENocm9taXVtCisgICAgICAgIGJyb3dzZXIgd2l0aCBhIGNhbGwgdmlhIHRoZSBDaHJvbWl1
bSBCcmlkZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdldFN1cHBvcnRlZEtleVNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmZpbGVTeXN0ZW1Q
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRz
T2ZGaWxlKToKKwogMjAwOS0xMC0xNCAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgTW9yZSBjaGFuZ2VzIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZSB3ZWJnbCB0ZXN0
cyBhcmUgY3Jhc2hpbmcgb24gdGhlIGJ1aWxkIGJvdC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
U1NMS2V5R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlH
ZW5lcmF0b3IuaAkocmV2aXNpb24gNDk1NzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1NTTEtleUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMywxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBLVVJMOwogCi0gICAgdm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXpl
cyhWZWN0b3I8U3RyaW5nPiYpOworICAgIC8vIFJldHVybnMgc3RyaW5ncyByZXByZXNlbnRpbmcg
a2V5IHNpemVzIHRoYXQgbWF5IGJlIHVzZWQKKyAgICAvLyBmb3IgdGhlIDxrZXlnZW4+IHRhZy4g
VGhlIGZpcnN0IHN0cmluZyBpcyBkaXNwbGF5ZWQgYXMgdGhlIGRlZmF1bHQKKyAgICAvLyBrZXkg
c2l6ZSBpbiB0aGUgPGtleWdlbj4gbWVudS4KKyAgICB2b2lkIGdldFN1cHBvcnRlZEtleVNpemVz
KFZlY3RvcjxTdHJpbmc+JiBzaXplcyk7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMg
dGhlIDxrZXlnZW4+IHRhZyBpbiBmb3JtIGVsZW1lbnRzLgorICAgIC8vIFJldHVybnMgYSBzaWdu
ZWQgY29weSBvZiB0aGUgY29tYmluZWQgY2hhbGxlbmdlIHN0cmluZyBhbmQgcHVibGljCisgICAg
Ly8ga2V5IChmcm9tIGEgbmV3bHkgZ2VuZXJhdGVkIGtleSBwYWlyKS4KICAgICBTdHJpbmcgc2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29u
c3QgU3RyaW5nJiBjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwmKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaAkocmV2aXNpb24gNDk1NzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIG5vdGlmeUpTT3V0T2ZNZW1vcnkoRnJhbWUq
KTsKICAgICAgICAgc3RhdGljIGJvb2wgYWxsb3dTY3JpcHREZXNwaXRlU2V0dGluZ3MoY29uc3Qg
S1VSTCYgZG9jdW1lbnRVUkwpOwogCisgICAgICAgIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHN0
YXRpYyBTdHJpbmcgZ2VuS2V5QW5kU2lnbkNoYWxsZW5nZSh1bnNpZ25lZCBrZXlTaXplSW5kZXgs
IGNvbnN0IFN0cmluZyYgY2hhbGxlbmdlLCBjb25zdCBLVVJMJiB1cmwpOworCiAgICAgICAgIC8v
IExhbmd1YWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAgICAgICAgIHN0YXRpYyBTdHJpbmcgY29tcHV0ZWREZWZhdWx0TGFuZ3Vh
Z2UoKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TU0xL
ZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDQ5NTcxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAor
ICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTMxLDIy
ICszMSwyOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNTTEtleUdlbmVyYXRv
ci5oIgogCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRoZXNlIGFyZSBkZWZpbmVkIGlu
IHdlYmtpdC9nbHVlL2xvY2FsaXplZF9zdHJpbmdzLmNwcC4KKy8vIFRoZXNlIGFyZSBkZWZpbmVk
IGluIHdlYmtpdC9hcGkvc3JjL0xvY2FsaXplZFN0cmluZ3MuY3BwLgogU3RyaW5nIGtleWdlbk1l
bnVIaWdoR3JhZGVLZXlTaXplKCk7CiBTdHJpbmcga2V5Z2VuTWVudU1lZGl1bUdyYWRlS2V5U2l6
ZSgpOwogCi0vLyBSZXR1cm5zIHRoZSBrZXkgc2l6ZXMgc3VwcG9ydGVkIGJ5IHRoZSBIVE1MIGtl
eWdlbiB0YWcuICBUaGUgZmlyc3Qgc3RyaW5nCi0vLyBpcyBkaXNwbGF5ZWQgYXMgdGhlIGRlZmF1
bHQga2V5IHNpemUgaW4gdGhlIGtleWdlbiBtZW51LgotVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVk
S2V5U2l6ZXMoKQordm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYgc2l6
ZXMpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gc2l6ZXMoMik7CisgICAgc2l6ZXMucmVzaXplKDIp
OwogICAgIHNpemVzWzBdID0ga2V5Z2VuTWVudUhpZ2hHcmFkZUtleVNpemUoKTsKICAgICBzaXpl
c1sxXSA9IGtleWdlbk1lbnVNZWRpdW1HcmFkZUtleVNpemUoKTsKLSAgICByZXR1cm4gc2l6ZXM7
CiB9CiAKLS8vIEZJWE1FOiBpbXBsZW1lbnQgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3Ry
aW5nIGhlcmUuCitTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2ln
bmVkIGtleVNpemVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2VTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gQ2hyb21p
dW1CcmlkZ2U6OmdlbktleUFuZFNpZ25DaGFsbGVuZ2Uoa2V5U2l6ZUluZGV4LCBjaGFsbGVuZ2VT
dHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVybCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDQ5NTcx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA4
LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAgKiBtZXQ6Ci0gKiAKKyAqCiAgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAogICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgogICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAtMTQsNyArMTQsNyBAQAogICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KICAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCkBAIC0zNiwxMSArMzYsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdHJpbmcg
c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBLVVJMJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLXZv
aWQgZ2V0U3VwcG9ydGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4mKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLQotU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLQotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK1N0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250
ZW50c09mRmlsZShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41294</attachid>
            <date>2009-10-16 10:29:11 -0700</date>
            <delta_ts>2009-10-22 10:47:09 -0700</delta_ts>
            <desc>Chromium &lt;keygen&gt; handler patch </desc>
            <filename>chromium-keygen-3.patch</filename>
            <type>text/plain</type>
            <size>6860</size>
            <attacher name="Gaurav Shah">gauravsh</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTU3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMTAtMTQgIEdhdXJhdiBTaGFoICA8Z2F1cmF2c2hAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZXBsYWNlcyB0ZW1wb3JhcnkgbGluayBzdHViIGZvciA8a2V5Z2VuPiB0YWcgaGFuZGxlciBmb3Ig
dGhlIENocm9taXVtCisgICAgICAgIGJyb3dzZXIgd2l0aCBhIGNhbGwgdmlhIHRoZSBDaHJvbWl1
bSBCcmlkZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdldFN1cHBvcnRlZEtleVNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmZpbGVTeXN0ZW1Q
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRz
T2ZGaWxlKToKKwogMjAwOS0xMC0xNCAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgTW9yZSBjaGFuZ2VzIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZSB3ZWJnbCB0ZXN0
cyBhcmUgY3Jhc2hpbmcgb24gdGhlIGJ1aWxkIGJvdC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
U1NMS2V5R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlH
ZW5lcmF0b3IuaAkocmV2aXNpb24gNDk1NzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1NTTEtleUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMywxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBLVVJMOwogCi0gICAgdm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXpl
cyhWZWN0b3I8U3RyaW5nPiYpOworICAgIC8vIFJldHVybnMgc3RyaW5ncyByZXByZXNlbnRpbmcg
a2V5IHNpemVzIHRoYXQgbWF5IGJlIHVzZWQKKyAgICAvLyBmb3IgdGhlIDxrZXlnZW4+IHRhZy4g
VGhlIGZpcnN0IHN0cmluZyBpcyBkaXNwbGF5ZWQgYXMgdGhlIGRlZmF1bHQKKyAgICAvLyBrZXkg
c2l6ZSBpbiB0aGUgPGtleWdlbj4gbWVudS4KKyAgICB2b2lkIGdldFN1cHBvcnRlZEtleVNpemVz
KFZlY3RvcjxTdHJpbmc+JiBzaXplcyk7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMg
dGhlIDxrZXlnZW4+IHRhZyBpbiBmb3JtIGVsZW1lbnRzLgorICAgIC8vIFJldHVybnMgYSBzaWdu
ZWQgY29weSBvZiB0aGUgY29tYmluZWQgY2hhbGxlbmdlIHN0cmluZyBhbmQgcHVibGljCisgICAg
Ly8ga2V5IChmcm9tIGEgbmV3bHkgZ2VuZXJhdGVkIGtleSBwYWlyKS4KICAgICBTdHJpbmcgc2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29u
c3QgU3RyaW5nJiBjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwmKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaAkocmV2aXNpb24gNDk1NzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIG5vdGlmeUpTT3V0T2ZNZW1vcnkoRnJhbWUq
KTsKICAgICAgICAgc3RhdGljIGJvb2wgYWxsb3dTY3JpcHREZXNwaXRlU2V0dGluZ3MoY29uc3Qg
S1VSTCYgZG9jdW1lbnRVUkwpOwogCisgICAgICAgIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHN0
YXRpYyBTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtl
eVNpemVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2UsIGNvbnN0IEtVUkwmIHVybCk7CisK
ICAgICAgICAgLy8gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgc3RhdGljIFN0cmluZyBjb21wdXRlZERl
ZmF1bHRMYW5ndWFnZSgpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1NTTEtl
eUdlbmVyYXRvckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcAkocmV2aXNpb24gNDk1NzEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMCBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwOCwg
MjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQogICogbWV0OgotICogCisgKgogICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
ICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CiAgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgpAQCAtMzEsMjIgKzMxLDI5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1NM
S2V5R2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gVGhlc2UgYXJl
IGRlZmluZWQgaW4gd2Via2l0L2dsdWUvbG9jYWxpemVkX3N0cmluZ3MuY3BwLgorLy8gVGhlc2Ug
YXJlIGRlZmluZWQgaW4gd2Via2l0L2FwaS9zcmMvTG9jYWxpemVkU3RyaW5ncy5jcHAuCiBTdHJp
bmcga2V5Z2VuTWVudUhpZ2hHcmFkZUtleVNpemUoKTsKIFN0cmluZyBrZXlnZW5NZW51TWVkaXVt
R3JhZGVLZXlTaXplKCk7CiAKLS8vIFJldHVybnMgdGhlIGtleSBzaXplcyBzdXBwb3J0ZWQgYnkg
dGhlIEhUTUwga2V5Z2VuIHRhZy4gIFRoZSBmaXJzdCBzdHJpbmcKLS8vIGlzIGRpc3BsYXllZCBh
cyB0aGUgZGVmYXVsdCBrZXkgc2l6ZSBpbiB0aGUga2V5Z2VuIG1lbnUuCi1WZWN0b3I8U3RyaW5n
PiBzdXBwb3J0ZWRLZXlTaXplcygpCit2b2lkIGdldFN1cHBvcnRlZEtleVNpemVzKFZlY3RvcjxT
dHJpbmc+JiBzaXplcykKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBzaXplcygyKTsKKyAgICBzaXpl
cy5yZXNpemUoMik7CiAgICAgc2l6ZXNbMF0gPSBrZXlnZW5NZW51SGlnaEdyYWRlS2V5U2l6ZSgp
OwogICAgIHNpemVzWzFdID0ga2V5Z2VuTWVudU1lZGl1bUdyYWRlS2V5U2l6ZSgpOwotICAgIHJl
dHVybiBzaXplczsKIH0KIAotLy8gRklYTUU6IGltcGxlbWVudCBzaWduZWRQdWJsaWNLZXlBbmRD
aGFsbGVuZ2VTdHJpbmcgaGVyZS4KK1N0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VT
dHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZVN0cmluZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJl
dHVybiBDaHJvbWl1bUJyaWRnZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtl
eVNpemVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFsbGVuZ2VTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsKTsKK30KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
VGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gNDk1NzEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTM2LDExICszNiwx
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRD
aGFsbGVuZ2VTdHJpbmcodW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IEtVUkwmKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQotdm9pZCBnZXRTdXBwb3J0ZWRLZXlT
aXplcyhWZWN0b3I8U3RyaW5nPiYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCi1TdHJpbmcgS1VS
TDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJp
bmcoKTsgfQotCi1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVX
aXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQorU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0
cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="22650"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>