<?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>23687</bug_id>
          
          <creation_ts>2009-02-02 11:29:21 -0800</creation_ts>
          <short_desc>ImageBuffer::toDataURL not implemented for Skia</short_desc>
          <delta_ts>2009-02-10 00:23:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Scott Violet">sky</reporter>
          <assigned_to name="Scott Violet">sky</assigned_to>
          <cc>brettw</cc>
    
    <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>107987</commentid>
    <comment_count>0</comment_count>
    <who name="Scott Violet">sky</who>
    <bug_when>2009-02-02 11:29:21 -0800</bug_when>
    <thetext>At a minimum Skia should support PNG conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107990</commentid>
    <comment_count>1</comment_count>
      <attachid>27250</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2009-02-02 11:34:16 -0800</bug_when>
    <thetext>Created attachment 27250
Fix for 23687</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107992</commentid>
    <comment_count>2</comment_count>
      <attachid>27250</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-02 11:50:07 -0800</bug_when>
    <thetext>Comment on attachment 27250
Fix for 23687

The chromium license headers make little sense in the WebKit tree.  Also, the code from Mozilla is in Google style, not WebKIt style (at least in function naming), and it seems it&apos;s so litlte code we should just fix the style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108004</commentid>
    <comment_count>3</comment_count>
    <who name="Scott Violet">sky</who>
    <bug_when>2009-02-02 12:33:23 -0800</bug_when>
    <thetext>*** Bug 23692 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108006</commentid>
    <comment_count>4</comment_count>
      <attachid>27254</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2009-02-02 12:35:41 -0800</bug_when>
    <thetext>Created attachment 27254
Fix for 23687

Converts names to WebKit style and fixes license.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108008</commentid>
    <comment_count>5</comment_count>
      <attachid>27254</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-02-02 12:41:53 -0800</bug_when>
    <thetext>Comment on attachment 27254
Fix for 23687

some drive-by comments...


&gt;Index: WebCore/platform/graphics/skia/ImageBufferSkia.cpp

&gt;+    WTF::Vector&lt;unsigned char&gt; pngEncodedData;

It is more common to not specify the WTF:: namespace.  There is a using
WTF::Vector at the bottom of Vector.h.


&gt;Index: WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp
...
&gt;+/*
&gt;+* Copyright (c) 2006-2009, Google Inc. All rights reserved.
&gt;+* 

nit: comment block needs to be indented by one space


needs #include &quot;config.h&quot; at the top.


&gt;+
&gt;+#include &quot;PNGImageEncoder.h&quot;
&gt;+#include &quot;Vector.h&quot;


&gt;+namespace WebCore {
&gt;+
&gt;+namespace {

nit: the convention in webcore seems to be to use the &apos;static&apos; keyword
instead of anonymous namespaces.


&gt;+
&gt;+// Converts BGRA-&gt;RGBA and RGBA-&gt;BGRA.
&gt;+void convertBetweenBGRAandRGBA(const unsigned char* input, int pixel_width,

so this would stay in the WebCore namespace but be given a &apos;static&apos; keyword

&gt;+namespace {
&gt;+
&gt;+// Passed around as the io_ptr in the png structs so our callbacks know where
&gt;+// to write data.
&gt;+struct PngEncoderState {

and then for structs like this they just put them in the WebCore namespace.
since you have the Png prefix, you shouldn&apos;t have to worry about name conflicts.


&gt;Index: WebCore/platform/image-encoders/skia/PNGImageEncoder.h
...
&gt;+/*
&gt;+* Copyright (c) 2006-2009, Google Inc. All rights reserved.
&gt;+* 

nit: needs another space of indent

&gt;+};  // namespace WebCore

nit: extraneous &apos;;&apos; at close of namespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108015</commentid>
    <comment_count>6</comment_count>
      <attachid>27256</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2009-02-02 12:59:13 -0800</bug_when>
    <thetext>Created attachment 27256
Fix for 23687

Incorporates changes from Darin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108019</commentid>
    <comment_count>7</comment_count>
      <attachid>27254</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-02 13:03:22 -0800</bug_when>
    <thetext>Comment on attachment 27254
Fix for 23687

pixel_width should be pixelWidth

Since we seem to use PNGFoo we should use: PngEncoderState PNGEncoderState

int w, int h should be int width int height, or even better an IntSize.  New functions generally use the IntSize/IntPoint types, we&apos;ve been slowly converting the old ones over.  If it doesn&apos;t make sense for this function to use IntSize, that&apos;s fine, but I figured it should at least be mentioned. (Skia doesn&apos;t spit out IntSize objects, so it&apos;s probably easiest to keep using separate ints for Skia.)

Likewise bytes_per_row bytesPerRow

We should give these good names:
99     png_struct** m_ps;
 100     png_info** m_pi;

m_pngStruct;
m_pngInfo; would be more clear, even though the original libpng type names are pretty useless to begin with.

WebKit uses 0 instead of NULL:
 127     void (*converter)(const unsigned char* in, int w, unsigned char* out) = NULL;

Seems silly to have a converter local variable, instead of just using convertBetweenBGRAandRGBA in the one place it&apos;s actually needed.

If ints are not required by libpng (which they may be), you might consider using size_t or unsigned for these width/height values (unless you need a special -1 value?)

this is in general pretty gnarly code.  But that seems to be libpng&apos;s fault rather than yours.

I&apos;d like to see a final version of this patch, but otherwise this looks sane enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108035</commentid>
    <comment_count>8</comment_count>
      <attachid>27259</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2009-02-02 14:04:13 -0800</bug_when>
    <thetext>Created attachment 27259
Fix for 23687

Addresses issues raised in last round. I went with IntSize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108047</commentid>
    <comment_count>9</comment_count>
      <attachid>27259</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-02 15:30:10 -0800</bug_when>
    <thetext>Comment on attachment 27259
Fix for 23687

 46 static void convertBetweenBGRAandRGBA(const unsigned char* input, int pixelWidth,
Having read the rest of your code, I understand what pixelWidth means, but I think numberOfPixels would be clearer in the local context of that function.

Still has WTF::, which can be removed per darin&apos;s comment.

PngWriteStructDestroyer should be PNGWriteStructDestroyer to match PNGImageEncoder

likewise PngEncoderState should be PNGEncoderState

You could actually use an OwnArrayPtr here:
 162     unsigned char* row = new unsigned char[imageSize.width() * outputColorComponents];

    OwnArrayPtr&lt;unsigned char&gt; rowPixels(new unsigned char[width * height]);

I&apos;m not sure it&apos;s super-useful here, but it does save you the delete[] at the end (which is more useful when there is lots of code in between the initialization and the delete).

Thanks for all your corrections.  I&apos;m ready to land this for you after this last round of nits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108056</commentid>
    <comment_count>10</comment_count>
      <attachid>27265</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2009-02-02 16:25:47 -0800</bug_when>
    <thetext>Created attachment 27265
Fix for 23687</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108448</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-05 09:12:54 -0800</bug_when>
    <thetext>Eric, if you r+, I&apos;ll land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108493</commentid>
    <comment_count>12</comment_count>
      <attachid>27265</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 13:05:32 -0800</bug_when>
    <thetext>Comment on attachment 27265
Fix for 23687

Looks good.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109096</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-02-10 00:23:04 -0800</bug_when>
    <thetext>Looks like this patch was landed:
http://trac.webkit.org/changeset/40692</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27250</attachid>
            <date>2009-02-02 11:34:16 -0800</date>
            <delta_ts>2009-02-02 12:36:51 -0800</delta_ts>
            <desc>Fix for 23687</desc>
            <filename>23687.patch</filename>
            <type>text/plain</type>
            <size>10902</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDQ4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDItMDIgIFNjb3R0IFZpb2xldCAgPHNreUBnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVz
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NworCisgICAgICAg
IFdpcmVzIHVwIFNraWEnYSBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMIHRvIHN1cHBvcnQgcG5ncy4K
KworICAgICAgICBUaGlzIGhlbHBzIENocm9taXVtIHBhc3MgYSBjb3VwbGUgb2YgbGF5b3V0IHRl
c3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnM6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWVuY29kZXJzL3NraWE6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29k
ZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjop
OgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5jb2RlclN0YXRlOjpFbmNvZGVyV3JpdGVDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpQbmdFbmNvZGVyU3RhdGU6OkNvbnZlcnRCR1JBdG9SR0Ip
OgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5jb2RlclN0YXRlOjpQbmdXcml0ZVN0cnVjdERlc3Ry
b3llcjo6UG5nV3JpdGVTdHJ1Y3REZXN0cm95ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5j
b2RlclN0YXRlOjpQbmdXcml0ZVN0cnVjdERlc3Ryb3llcjo6flBuZ1dyaXRlU3RydWN0RGVzdHJv
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oOiBBZGRl
ZC4KKwogMjAwOS0wMi0wMiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQnVpbGQgZml4IG9ubHksIG5vIHJldmlldy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA0
MDQ3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTQgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCisjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgorI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5oIgogI2luY2x1ZGUgIlNraWFVdGls
cy5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMjA2LDggKzIwOCwxOCBAQCB2b2lkIElt
YWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhCiAKIFN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgLy8gRW5jb2RlIHRoZSBpbWFnZSBpbnRvIGEgdmVj
dG9yLgorICAgIFdURjo6VmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBuZ0VuY29kZWREYXRhOworICAg
IFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKCpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5i
aXRtYXAoKSwgJnBuZ0VuY29kZWREYXRhKTsKKworICAgIC8vIENvbnZlcnQgaXQgaW50byBiYXNl
NjQuCisgICAgV1RGOjpWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlZERhdGE7CisgICAgYmFzZTY0
RW5jb2RlKCpyZWludGVycHJldF9jYXN0PFdURjo6VmVjdG9yPGNoYXI+Kj4oJnBuZ0VuY29kZWRE
YXRhKSwgYmFzZTY0RW5jb2RlZERhdGEpOworICAgIC8vIEFwcGVuZCB3aXRoIGEgXDAgc28gdGhh
dCBpdCdzIGEgdmFsaWQgc3RyaW5nLgorICAgIGJhc2U2NEVuY29kZWREYXRhLmFwcGVuZCgnXDAn
KTsKKworICAgIC8vIEFuZCB0aGUgcmVzdWx0aW5nIHN0cmluZy4KKyAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwlcyIsIGJhc2U2NEVuY29kZWREYXRhLmRh
dGEoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BO
R0ltYWdlRW5jb2Rlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY3IEBACisvLyBDb3B5
cmlnaHQgKGMpIDIwMDYtMjAwOCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisK
KyNpbmNsdWRlICJQTkdJbWFnZUVuY29kZXIuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKworI2lu
Y2x1ZGUgIlNrQml0bWFwLmgiCisKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgInBuZy5oIgorfQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKKy8vIENvbnZlcnRzIEJHUkEt
PlJHQkEgYW5kIFJHQkEtPkJHUkEuCit2b2lkIENvbnZlcnRCZXR3ZWVuQkdSQWFuZFJHQkEoY29u
c3QgdW5zaWduZWQgY2hhciogaW5wdXQsIGludCBwaXhlbF93aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXRwdXQpCit7CisgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBwaXhlbF93aWR0aDsgeCsrKSB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIHBpeGVsSW4gPSAmaW5wdXRbeCAqIDRdOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhl
bE91dCA9ICZvdXRwdXRbeCAqIDRdOworICAgICAgICBwaXhlbE91dFswXSA9IHBpeGVsSW5bMl07
CisgICAgICAgIHBpeGVsT3V0WzFdID0gcGl4ZWxJblsxXTsKKyAgICAgICAgcGl4ZWxPdXRbMl0g
PSBwaXhlbEluWzBdOworICAgICAgICBwaXhlbE91dFszXSA9IHBpeGVsSW5bM107CisgICAgfQor
fQorCit9ICAvLyBuYW1lc3BhY2UKKworLy8gRW5jb2RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIFRo
aXMgc2VjdGlvbiBvZiB0aGUgY29kZSBpcyBiYXNlZCBvbiBuc1BOR0VuY29kZXIuY3BwIGluIE1v
emlsbGEKKy8vIChDb3B5cmlnaHQgMjAwNSBHb29nbGUgSW5jLikKKworbmFtZXNwYWNlIHsKKwor
Ly8gUGFzc2VkIGFyb3VuZCBhcyB0aGUgaW9fcHRyIGluIHRoZSBwbmcgc3RydWN0cyBzbyBvdXIg
Y2FsbGJhY2tzIGtub3cgd2hlcmUKKy8vIHRvIHdyaXRlIGRhdGEuCitzdHJ1Y3QgUG5nRW5jb2Rl
clN0YXRlIHsKKyAgICBQbmdFbmNvZGVyU3RhdGUoV1RGOjpWZWN0b3I8dW5zaWduZWQgY2hhcj4q
IG8pIDogbV9vdXQobykge30KKyAgICBXVEY6OlZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogbV9vdXQ7
Cit9OworCisvLyBDYWxsZWQgYnkgbGlicG5nIHRvIGZsdXNoIGl0cyBpbnRlcm5hbCBidWZmZXIg
dG8gb3Vycy4KK3ZvaWQgRW5jb2RlcldyaXRlQ2FsbGJhY2socG5nX3N0cnVjdHAgcG5nLCBwbmdf
Ynl0ZXAgZGF0YSwgcG5nX3NpemVfdCBzaXplKQoreworICAgIFBuZ0VuY29kZXJTdGF0ZSogc3Rh
dGUgPSBzdGF0aWNfY2FzdDxQbmdFbmNvZGVyU3RhdGUqPihwbmdfZ2V0X2lvX3B0cihwbmcpKTsK
KyAgICBBU1NFUlQoc3RhdGUtPm1fb3V0KTsKKworICAgIHNpemVfdCBvbGRTaXplID0gc3RhdGUt
Pm1fb3V0LT5zaXplKCk7CisgICAgc3RhdGUtPm1fb3V0LT5yZXNpemUob2xkU2l6ZSArIHNpemUp
OworICAgIG1lbWNweSgmKCpzdGF0ZS0+bV9vdXQpW29sZFNpemVdLCBkYXRhLCBzaXplKTsKK30K
Kwordm9pZCBDb252ZXJ0QkdSQXRvUkdCKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJncmEsIGludCBw
aXhlbF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByZ2IpCit7
CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwaXhlbF93aWR0aDsgeCsrKSB7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIHBpeGVsSW4gPSAmYmdyYVt4ICogNF07CisgICAgICAgIHVuc2ln
bmVkIGNoYXIqIHBpeGVsT3V0ID0gJnJnYlt4ICogM107CisgICAgICAgIHBpeGVsT3V0WzBdID0g
cGl4ZWxJblsyXTsKKyAgICAgICAgcGl4ZWxPdXRbMV0gPSBwaXhlbEluWzFdOworICAgICAgICBw
aXhlbE91dFsyXSA9IHBpeGVsSW5bMF07CisgICAgfQorfQorCisvLyBBdXRvbWF0aWNhbGx5IGRl
c3Ryb3lzIHRoZSBnaXZlbiB3cml0ZSBzdHJ1Y3RzIG9uIGRlc3RydWN0aW9uIHRvIG1ha2UKKy8v
IGNsZWFudXAgYW5kIGVycm9yIGhhbmRsaW5nIGNvZGUgY2xlYW5lci4KK2NsYXNzIFBuZ1dyaXRl
U3RydWN0RGVzdHJveWVyIHsKK3B1YmxpYzoKKyAgICBQbmdXcml0ZVN0cnVjdERlc3Ryb3llcihw
bmdfc3RydWN0KiogcHMsIHBuZ19pbmZvKiogcGkpCisgICAgICAgIDogbV9wcyhwcykKKyAgICAg
ICAgLCBtX3BpKHBpKSB7CisgICAgfQorCisgICAgflBuZ1dyaXRlU3RydWN0RGVzdHJveWVyKCkg
eworICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QobV9wcywgbV9waSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIHBuZ19zdHJ1Y3QqKiBtX3BzOworICAgIHBuZ19pbmZvKiogbV9waTsK
K307CisKK30gIC8vIG5hbWVzcGFjZQorCisvLyBzdGF0aWMKK2Jvb2wgUE5HSW1hZ2VFbmNvZGVy
OjplbmNvZGUoY29uc3QgU2tCaXRtYXAmIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXVEY6OlZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQoreworICAgIGlmIChpbWFn
ZS5jb25maWcoKSAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCisgICAgICAgIHJldHVy
biBmYWxzZTsgIC8vIE9ubHkgc3VwcG9ydCBBUkdCIGF0IDggYnBwIG5vdy4KKworICAgIGltYWdl
LmxvY2tQaXhlbHMoKTsKKyAgICBib29sIHJlc3VsdCA9IFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2Rl
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPigKKyAgICAgICAgaW1hZ2UuZ2V0UGl4ZWxzKCkp
LCBpbWFnZS53aWR0aCgpLCBpbWFnZS5oZWlnaHQoKSwgaW1hZ2Uucm93Qnl0ZXMoKSwKKyAgICAg
ICAgb3V0cHV0KTsKKyAgICBpbWFnZS51bmxvY2tQaXhlbHMoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisvLyBzdGF0aWMKK2Jvb2wgUE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUoY29uc3QgdW5z
aWduZWQgY2hhciogaW5wdXQsIGludCB3LCBpbnQgaCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGJ5dGVzUGVyUm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXVEY6
OlZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQoreworICAgIC8vIFJ1biB0byBjb252ZXJ0
IGFuIGlucHV0IHJvdyBpbnRvIHRoZSBvdXRwdXQgcm93IGZvcm1hdCwgTlVMTCBtZWFucyBubwor
ICAgIC8vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LgorICAgIHZvaWQgKCpjb252ZXJ0ZXIpKGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGluLCBpbnQgdywgdW5zaWduZWQgY2hhciogb3V0KSA9IE5VTEw7
CisKKyAgICBpbnQgaW5wdXRDb2xvckNvbXBvbmVudHMgPSA0OworICAgIGludCBvdXRwdXRDb2xv
ckNvbXBvbmVudHMgPSA0OworICAgIGludCBwbmdPdXRwdXRDb2xvclR5cGUgPSBQTkdfQ09MT1Jf
VFlQRV9SR0JfQUxQSEE7CisgICAgY29udmVydGVyID0gQ29udmVydEJldHdlZW5CR1JBYW5kUkdC
QTsKKworICAgIC8vIFJvdyBzdHJpZGUgc2hvdWxkIGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhl
IGxlbmd0aCBvZiB0aGUgZGF0YS4KKyAgICBpZiAoaW5wdXRDb2xvckNvbXBvbmVudHMgKiB3ID4g
Ynl0ZXNQZXJSb3cpIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHBuZ19zdHJ1Y3QqIHBuZ1B0ciA9IHBuZ19jcmVhdGVfd3JpdGVf
c3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwbmdfdm9pZHBfTlVMTCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfZXJyb3JfcHRyX05VTEwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2Vycm9yX3B0
cl9OVUxMKTsKKyAgICBpZiAoIXBuZ1B0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cG5nX2luZm8qIGluZm9QdHIgPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KHBuZ1B0cik7CisgICAg
aWYgKCFpbmZvUHRyKSB7CisgICAgICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdCgmcG5nUHRy
LCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBQbmdXcml0ZVN0cnVj
dERlc3Ryb3llciBkZXN0cm95ZXIoJnBuZ1B0ciwgJmluZm9QdHIpOworCisgICAgaWYgKHNldGpt
cChwbmdfam1wYnVmKHBuZ1B0cikpKSB7CisgICAgICAgIC8vIFRoZSBkZXN0cm95ZXIgd2lsbCBl
bnN1cmUgdGhhdCB0aGUgc3RydWN0dXJlcyBhcmUgY2xlYW5lZCB1cCBpbiB0aGlzCisgICAgICAg
IC8vIGNhc2UsIGV2ZW4gdGhvdWdoIHdlIG1heSBnZXQgaGVyZSBhcyBhIGp1bXAgZnJvbSByYW5k
b20gcGFydHMgb2YgdGhlCisgICAgICAgIC8vIFBORyBsaWJyYXJ5IGNhbGxlZCBiZWxvdy4KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFNldCBvdXIgY2FsbGJhY2sgZm9y
IGxpYnBuZyB0byBnaXZlIHVzIHRoZSBkYXRhLgorICAgIFBuZ0VuY29kZXJTdGF0ZSBzdGF0ZShv
dXRwdXQpOworICAgIHBuZ19zZXRfd3JpdGVfZm4ocG5nUHRyLCAmc3RhdGUsIEVuY29kZXJXcml0
ZUNhbGxiYWNrLCBOVUxMKTsKKworICAgIHBuZ19zZXRfSUhEUihwbmdQdHIsIGluZm9QdHIsIHcs
IGgsIDgsIHBuZ091dHB1dENvbG9yVHlwZSwKKyAgICAgICAgICAgICAgICAgUE5HX0lOVEVSTEFD
RV9OT05FLCBQTkdfQ09NUFJFU1NJT05fVFlQRV9ERUZBVUxULAorICAgICAgICAgICAgICAgICBQ
TkdfRklMVEVSX1RZUEVfREVGQVVMVCk7CisgICAgcG5nX3dyaXRlX2luZm8ocG5nUHRyLCBpbmZv
UHRyKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIHJvdyA9IG5ldyB1bnNpZ25lZCBjaGFyW3cgKiBv
dXRwdXRDb2xvckNvbXBvbmVudHNdOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSArKykg
eworICAgICAgICBjb252ZXJ0ZXIoJmlucHV0W3kgKiBieXRlc1BlclJvd10sIHcsIHJvdyk7Cisg
ICAgICAgIHBuZ193cml0ZV9yb3cocG5nUHRyLCByb3cpOworICAgIH0KKyAgICBkZWxldGVbXSBy
b3c7CisKKyAgICBwbmdfd3JpdGVfZW5kKHBuZ1B0ciwgaW5mb1B0cik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdl
RW5jb2Rlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorKiBDb3B5cmlnaHQg
KGMpIDIwMDYtMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogCisqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisqIG1ldDoKKyogCisqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyogZGlzdHJpYnV0aW9uLgorKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisqIAorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisqLworLy8gQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjaWZuZGVmIFBOR0ltYWdlRW5jb2Rlcl9oCisjZGVm
aW5lIFBOR0ltYWdlRW5jb2Rlcl9oCisKKyNpbmNsdWRlICJWZWN0b3IuaCIKKworY2xhc3MgU2tC
aXRtYXA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIEludGVyZmFjZSBmb3IgZW5j
b2RpbmcgUE5HIGRhdGEuIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBsaWJwbmcuCisgICAgY2xh
c3MgUE5HSW1hZ2VFbmNvZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIEVuY29kZXMgdGhl
IHNwZWNpZmljIFNrQml0bWFwIGludG8gdGhlIHN1cHBsaWVkIHZlY3Rvci4KKyAgICAgICAgc3Rh
dGljIGJvb2wgZW5jb2RlKGNvbnN0IFNrQml0bWFwJiwgV1RGOjpWZWN0b3I8dW5zaWduZWQgY2hh
cj4qIG91dHB1dCk7CisKKyAgICAgICAgLy8gRW5jb2RlcyB0aGUgc3BlY2lmaWVkIGltYWdlIGRh
dGEgaW50byB0aGUgc3VwcGxpZWQgdmVjdG9yLgorICAgICAgICAvLyB3LCBoIGdpdmUgdGhlIHNp
emUgb2YgdGhlIGltYWdlIGFuZCBieXRlc19wZXJfcm93IGdpdmVzIHRoZSBieXRlcworICAgICAg
ICAvLyBwZXIgcm93LgorICAgICAgICBzdGF0aWMgYm9vbCBlbmNvZGUoY29uc3QgdW5zaWduZWQg
Y2hhciogaW5wdXQsIGludCB3LCBpbnQgaCwgaW50IGJ5dGVzX3Blcl9yb3csIFdURjo6VmVjdG9y
PHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQpOworICAgIH07CisKK307ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYK
</data>
<flag name="review"
          id="13127"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27254</attachid>
            <date>2009-02-02 12:35:41 -0800</date>
            <delta_ts>2009-02-02 13:03:31 -0800</delta_ts>
            <desc>Fix for 23687</desc>
            <filename>23687.patch</filename>
            <type>text/plain</type>
            <size>11744</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDQ4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDItMDIgIFNjb3R0IFZpb2xldCAgPHNreUBnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVz
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NworCisgICAgICAg
IFdpcmVzIHVwIFNraWEnYSBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMIHRvIHN1cHBvcnQgcG5ncy4K
KworICAgICAgICBUaGlzIGhlbHBzIENocm9taXVtIHBhc3MgYSBjb3VwbGUgb2YgbGF5b3V0IHRl
c3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnM6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWVuY29kZXJzL3NraWE6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29k
ZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjop
OgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5jb2RlclN0YXRlOjpFbmNvZGVyV3JpdGVDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpQbmdFbmNvZGVyU3RhdGU6OkNvbnZlcnRCR1JBdG9SR0Ip
OgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5jb2RlclN0YXRlOjpQbmdXcml0ZVN0cnVjdERlc3Ry
b3llcjo6UG5nV3JpdGVTdHJ1Y3REZXN0cm95ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5j
b2RlclN0YXRlOjpQbmdXcml0ZVN0cnVjdERlc3Ryb3llcjo6flBuZ1dyaXRlU3RydWN0RGVzdHJv
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oOiBBZGRl
ZC4KKwogMjAwOS0wMi0wMiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQnVpbGQgZml4IG9ubHksIG5vIHJldmlldy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA0
MDQ3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTQgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCisjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgorI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5oIgogI2luY2x1ZGUgIlNraWFVdGls
cy5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMjA2LDggKzIwOCwxOCBAQCB2b2lkIElt
YWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhCiAKIFN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgLy8gRW5jb2RlIHRoZSBpbWFnZSBpbnRvIGEgdmVj
dG9yLgorICAgIFdURjo6VmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBuZ0VuY29kZWREYXRhOworICAg
IFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKCpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5i
aXRtYXAoKSwgJnBuZ0VuY29kZWREYXRhKTsKKworICAgIC8vIENvbnZlcnQgaXQgaW50byBiYXNl
NjQuCisgICAgV1RGOjpWZWN0b3I8Y2hhcj4gYmFzZTY0RW5jb2RlZERhdGE7CisgICAgYmFzZTY0
RW5jb2RlKCpyZWludGVycHJldF9jYXN0PFdURjo6VmVjdG9yPGNoYXI+Kj4oJnBuZ0VuY29kZWRE
YXRhKSwgYmFzZTY0RW5jb2RlZERhdGEpOworICAgIC8vIEFwcGVuZCB3aXRoIGEgXDAgc28gdGhh
dCBpdCdzIGEgdmFsaWQgc3RyaW5nLgorICAgIGJhc2U2NEVuY29kZWREYXRhLmFwcGVuZCgnXDAn
KTsKKworICAgIC8vIEFuZCB0aGUgcmVzdWx0aW5nIHN0cmluZy4KKyAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwlcyIsIGJhc2U2NEVuY29kZWREYXRhLmRh
dGEoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BO
R0ltYWdlRW5jb2Rlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgxIEBACisvKgorKiBD
b3B5cmlnaHQgKGMpIDIwMDYtMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyogCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisqIG1ldDoKKyogCisqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyogZGlzdHJpYnV0
aW9uLgorKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqIAorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiUE5HSW1hZ2VFbmNvZGVyLmgi
CisjaW5jbHVkZSAiVmVjdG9yLmgiCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorCitleHRlcm4g
IkMiIHsKKyNpbmNsdWRlICJwbmcuaCIKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgeworCisvLyBDb252ZXJ0cyBCR1JBLT5SR0JBIGFuZCBSR0JBLT5CR1JBLgordm9pZCBj
b252ZXJ0QmV0d2VlbkJHUkFhbmRSR0JBKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0LCBpbnQg
cGl4ZWxfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciogb3V0cHV0KQoreworICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGl4ZWxfd2lkdGg7IHgrKykg
eworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwaXhlbEluID0gJmlucHV0W3ggKiA0XTsK
KyAgICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxPdXQgPSAmb3V0cHV0W3ggKiA0XTsKKyAgICAg
ICAgcGl4ZWxPdXRbMF0gPSBwaXhlbEluWzJdOworICAgICAgICBwaXhlbE91dFsxXSA9IHBpeGVs
SW5bMV07CisgICAgICAgIHBpeGVsT3V0WzJdID0gcGl4ZWxJblswXTsKKyAgICAgICAgcGl4ZWxP
dXRbM10gPSBwaXhlbEluWzNdOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlCisKKy8vIEVu
Y29kZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyBUaGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUgaXMgYmFz
ZWQgb24gbnNQTkdFbmNvZGVyLmNwcCBpbiBNb3ppbGxhCisvLyAoQ29weXJpZ2h0IDIwMDUgR29v
Z2xlIEluYy4pCisKK25hbWVzcGFjZSB7CisKKy8vIFBhc3NlZCBhcm91bmQgYXMgdGhlIGlvX3B0
ciBpbiB0aGUgcG5nIHN0cnVjdHMgc28gb3VyIGNhbGxiYWNrcyBrbm93IHdoZXJlCisvLyB0byB3
cml0ZSBkYXRhLgorc3RydWN0IFBuZ0VuY29kZXJTdGF0ZSB7CisgICAgUG5nRW5jb2RlclN0YXRl
KFdURjo6VmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvKSA6IG1fb3V0KG8pIHt9CisgICAgV1RGOjpW
ZWN0b3I8dW5zaWduZWQgY2hhcj4qIG1fb3V0OworfTsKKworLy8gQ2FsbGVkIGJ5IGxpYnBuZyB0
byBmbHVzaCBpdHMgaW50ZXJuYWwgYnVmZmVyIHRvIG91cnMuCit2b2lkIGVuY29kZXJXcml0ZUNh
bGxiYWNrKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2J5dGVwIGRhdGEsIHBuZ19zaXplX3Qgc2l6ZSkK
K3sKKyAgICBQbmdFbmNvZGVyU3RhdGUqIHN0YXRlID0gc3RhdGljX2Nhc3Q8UG5nRW5jb2RlclN0
YXRlKj4ocG5nX2dldF9pb19wdHIocG5nKSk7CisgICAgQVNTRVJUKHN0YXRlLT5tX291dCk7CisK
KyAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0YXRlLT5tX291dC0+c2l6ZSgpOworICAgIHN0YXRlLT5t
X291dC0+cmVzaXplKG9sZFNpemUgKyBzaXplKTsKKyAgICBtZW1jcHkoJigqc3RhdGUtPm1fb3V0
KVtvbGRTaXplXSwgZGF0YSwgc2l6ZSk7Cit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZGVzdHJveXMg
dGhlIGdpdmVuIHdyaXRlIHN0cnVjdHMgb24gZGVzdHJ1Y3Rpb24gdG8gbWFrZQorLy8gY2xlYW51
cCBhbmQgZXJyb3IgaGFuZGxpbmcgY29kZSBjbGVhbmVyLgorY2xhc3MgUG5nV3JpdGVTdHJ1Y3RE
ZXN0cm95ZXIgeworcHVibGljOgorICAgIFBuZ1dyaXRlU3RydWN0RGVzdHJveWVyKHBuZ19zdHJ1
Y3QqKiBwcywgcG5nX2luZm8qKiBwaSkKKyAgICAgICAgOiBtX3BzKHBzKQorICAgICAgICAsIG1f
cGkocGkpIHsKKyAgICB9CisKKyAgICB+UG5nV3JpdGVTdHJ1Y3REZXN0cm95ZXIoKSB7CisgICAg
ICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdChtX3BzLCBtX3BpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgcG5nX3N0cnVjdCoqIG1fcHM7CisgICAgcG5nX2luZm8qKiBtX3BpOworfTsKKwor
fSAgLy8gbmFtZXNwYWNlCisKKy8vIHN0YXRpYworYm9vbCBQTkdJbWFnZUVuY29kZXI6OmVuY29k
ZShjb25zdCBTa0JpdG1hcCYgaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdU
Rjo6VmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQpCit7CisgICAgaWYgKGltYWdlLmNvbmZp
ZygpICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OyAgLy8gT25seSBzdXBwb3J0IEFSR0IgYXQgOCBicHAgbm93LgorCisgICAgaW1hZ2UubG9ja1Bp
eGVscygpOworICAgIGJvb2wgcmVzdWx0ID0gUE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KAorICAgICAgICBpbWFnZS5nZXRQaXhlbHMoKSksIGltYWdl
LndpZHRoKCksIGltYWdlLmhlaWdodCgpLCBpbWFnZS5yb3dCeXRlcygpLAorICAgICAgICBvdXRw
dXQpOworICAgIGltYWdlLnVubG9ja1BpeGVscygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
Ky8vIHN0YXRpYworYm9vbCBQTkdJbWFnZUVuY29kZXI6OmVuY29kZShjb25zdCB1bnNpZ25lZCBj
aGFyKiBpbnB1dCwgaW50IHcsIGludCBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYnl0ZXNQZXJSb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6VmVjdG9y
PHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQpCit7CisgICAgLy8gUnVuIHRvIGNvbnZlcnQgYW4gaW5w
dXQgcm93IGludG8gdGhlIG91dHB1dCByb3cgZm9ybWF0LCBOVUxMIG1lYW5zIG5vCisgICAgLy8g
Y29udmVyc2lvbiBpcyBuZWNlc3NhcnkuCisgICAgdm9pZCAoKmNvbnZlcnRlcikoY29uc3QgdW5z
aWduZWQgY2hhciogaW4sIGludCB3LCB1bnNpZ25lZCBjaGFyKiBvdXQpID0gTlVMTDsKKworICAg
IGludCBpbnB1dENvbG9yQ29tcG9uZW50cyA9IDQ7CisgICAgaW50IG91dHB1dENvbG9yQ29tcG9u
ZW50cyA9IDQ7CisgICAgaW50IHBuZ091dHB1dENvbG9yVHlwZSA9IFBOR19DT0xPUl9UWVBFX1JH
Ql9BTFBIQTsKKyAgICBjb252ZXJ0ZXIgPSBjb252ZXJ0QmV0d2VlbkJHUkFhbmRSR0JBOworCisg
ICAgLy8gUm93IHN0cmlkZSBzaG91bGQgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgbGVuZ3Ro
IG9mIHRoZSBkYXRhLgorICAgIGlmIChpbnB1dENvbG9yQ29tcG9uZW50cyAqIHcgPiBieXRlc1Bl
clJvdykgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcG5nX3N0cnVjdCogcG5nUHRyID0gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3Qo
UE5HX0xJQlBOR19WRVJfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBuZ192b2lkcF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19lcnJvcl9wdHJfTlVMTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfZXJyb3JfcHRyX05VTEwp
OworICAgIGlmICghcG5nUHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwbmdfaW5m
byogaW5mb1B0ciA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QocG5nUHRyKTsKKyAgICBpZiAoIWlu
Zm9QdHIpIHsKKyAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZwbmdQdHIsIE5VTEwp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFBuZ1dyaXRlU3RydWN0RGVzdHJv
eWVyIGRlc3Ryb3llcigmcG5nUHRyLCAmaW5mb1B0cik7CisKKyAgICBpZiAoc2V0am1wKHBuZ19q
bXBidWYocG5nUHRyKSkpIHsKKyAgICAgICAgLy8gVGhlIGRlc3Ryb3llciB3aWxsIGVuc3VyZSB0
aGF0IHRoZSBzdHJ1Y3R1cmVzIGFyZSBjbGVhbmVkIHVwIGluIHRoaXMKKyAgICAgICAgLy8gY2Fz
ZSwgZXZlbiB0aG91Z2ggd2UgbWF5IGdldCBoZXJlIGFzIGEganVtcCBmcm9tIHJhbmRvbSBwYXJ0
cyBvZiB0aGUKKyAgICAgICAgLy8gUE5HIGxpYnJhcnkgY2FsbGVkIGJlbG93LgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gU2V0IG91ciBjYWxsYmFjayBmb3IgbGlicG5n
IHRvIGdpdmUgdXMgdGhlIGRhdGEuCisgICAgUG5nRW5jb2RlclN0YXRlIHN0YXRlKG91dHB1dCk7
CisgICAgcG5nX3NldF93cml0ZV9mbihwbmdQdHIsICZzdGF0ZSwgZW5jb2RlcldyaXRlQ2FsbGJh
Y2ssIE5VTEwpOworCisgICAgcG5nX3NldF9JSERSKHBuZ1B0ciwgaW5mb1B0ciwgdywgaCwgOCwg
cG5nT3V0cHV0Q29sb3JUeXBlLAorICAgICAgICAgICAgICAgICBQTkdfSU5URVJMQUNFX05PTkUs
IFBOR19DT01QUkVTU0lPTl9UWVBFX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgIFBOR19GSUxU
RVJfVFlQRV9ERUZBVUxUKTsKKyAgICBwbmdfd3JpdGVfaW5mbyhwbmdQdHIsIGluZm9QdHIpOwor
CisgICAgdW5zaWduZWQgY2hhciogcm93ID0gbmV3IHVuc2lnbmVkIGNoYXJbdyAqIG91dHB1dENv
bG9yQ29tcG9uZW50c107CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5ICsrKSB7CisgICAg
ICAgIGNvbnZlcnRlcigmaW5wdXRbeSAqIGJ5dGVzUGVyUm93XSwgdywgcm93KTsKKyAgICAgICAg
cG5nX3dyaXRlX3JvdyhwbmdQdHIsIHJvdyk7CisgICAgfQorICAgIGRlbGV0ZVtdIHJvdzsKKwor
ICAgIHBuZ193cml0ZV9lbmQocG5nUHRyLCBpbmZvUHRyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisqIENvcHlyaWdodCAoYykgMjAw
Ni0yMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiAKKyogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyogbWV0OgorKiAKKyogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKiBkaXN0cmlidXRpb24uCisqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyogCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyovCisKKyNpZm5kZWYgUE5HSW1hZ2VFbmNvZGVyX2gKKyNkZWZpbmUgUE5HSW1hZ2VF
bmNvZGVyX2gKKworI2luY2x1ZGUgIlZlY3Rvci5oIgorCitjbGFzcyBTa0JpdG1hcDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gSW50ZXJmYWNlIGZvciBlbmNvZGluZyBQTkcgZGF0
YS4gVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGxpYnBuZy4KKyAgICBjbGFzcyBQTkdJbWFnZUVu
Y29kZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gRW5jb2RlcyB0aGUgc3BlY2lmaWMgU2tC
aXRtYXAgaW50byB0aGUgc3VwcGxpZWQgdmVjdG9yLgorICAgICAgICBzdGF0aWMgYm9vbCBlbmNv
ZGUoY29uc3QgU2tCaXRtYXAmLCBXVEY6OlZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KTsK
KworICAgICAgICAvLyBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgaW1hZ2UgZGF0YSBpbnRvIHRoZSBz
dXBwbGllZCB2ZWN0b3IuCisgICAgICAgIC8vIHcsIGggZ2l2ZSB0aGUgc2l6ZSBvZiB0aGUgaW1h
Z2UgYW5kIGJ5dGVzX3Blcl9yb3cgZ2l2ZXMgdGhlIGJ5dGVzCisgICAgICAgIC8vIHBlciByb3cu
CisgICAgICAgIHN0YXRpYyBib29sIGVuY29kZShjb25zdCB1bnNpZ25lZCBjaGFyKiBpbnB1dCwg
aW50IHcsIGludCBoLCBpbnQgYnl0ZXNfcGVyX3JvdywgV1RGOjpWZWN0b3I8dW5zaWduZWQgY2hh
cj4qIG91dHB1dCk7CisgICAgfTsKKworfTsgIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
Zgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>27256</attachid>
            <date>2009-02-02 12:59:13 -0800</date>
            <delta_ts>2009-02-02 14:00:23 -0800</delta_ts>
            <desc>Fix for 23687</desc>
            <filename>23687.patch</filename>
            <type>text/plain</type>
            <size>11753</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDQ4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDItMDIgIFNjb3R0IFZpb2xldCAgPHNreUBnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVz
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NworCisgICAgICAg
IFdpcmVzIHVwIFNraWEnYSBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMIHRvIHN1cHBvcnQgcG5ncy4K
KworICAgICAgICBUaGlzIGhlbHBzIENocm9taXVtIHBhc3MgYSBjb3VwbGUgb2YgbGF5b3V0IHRl
c3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnM6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWVuY29kZXJzL3NraWE6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29k
ZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjop
OgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5jb2RlclN0YXRlOjpFbmNvZGVyV3JpdGVDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpQbmdFbmNvZGVyU3RhdGU6OkNvbnZlcnRCR1JBdG9SR0Ip
OgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5jb2RlclN0YXRlOjpQbmdXcml0ZVN0cnVjdERlc3Ry
b3llcjo6UG5nV3JpdGVTdHJ1Y3REZXN0cm95ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5j
b2RlclN0YXRlOjpQbmdXcml0ZVN0cnVjdERlc3Ryb3llcjo6flBuZ1dyaXRlU3RydWN0RGVzdHJv
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oOiBBZGRl
ZC4KKwogMjAwOS0wMi0wMiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQnVpbGQgZml4IG9ubHksIG5vIHJldmlldy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA0
MDQ3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTQgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCisjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgorI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5oIgogI2luY2x1ZGUgIlNraWFVdGls
cy5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMjA2LDggKzIwOCwxOCBAQCB2b2lkIElt
YWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhCiAKIFN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgLy8gRW5jb2RlIHRoZSBpbWFnZSBpbnRvIGEgdmVj
dG9yLgorICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdFbmNvZGVkRGF0YTsKKyAgICBQTkdJ
bWFnZUVuY29kZXI6OmVuY29kZSgqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFw
KCksICZwbmdFbmNvZGVkRGF0YSk7CisKKyAgICAvLyBDb252ZXJ0IGl0IGludG8gYmFzZTY0Lgor
ICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGVkRGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoKnJl
aW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4oJnBuZ0VuY29kZWREYXRhKSwgYmFzZTY0RW5j
b2RlZERhdGEpOworICAgIC8vIEFwcGVuZCB3aXRoIGEgXDAgc28gdGhhdCBpdCdzIGEgdmFsaWQg
c3RyaW5nLgorICAgIGJhc2U2NEVuY29kZWREYXRhLmFwcGVuZCgnXDAnKTsKKworICAgIC8vIEFu
ZCB0aGUgcmVzdWx0aW5nIHN0cmluZy4KKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoImRhdGE6
aW1hZ2UvcG5nO2Jhc2U2NCwlcyIsIGJhc2U2NEVuY29kZWREYXRhLmRhdGEoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDA2LTIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiUE5HSW1hZ2VFbmNvZGVyLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgi
CisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJwbmcu
aCIKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJ0cyBCR1JBLT5SR0JBIGFu
ZCBSR0JBLT5CR1JBLgorc3RhdGljIHZvaWQgY29udmVydEJldHdlZW5CR1JBYW5kUkdCQShjb25z
dCB1bnNpZ25lZCBjaGFyKiBpbnB1dCwgaW50IHBpeGVsX3dpZHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXRwdXQpCit7CisgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBwaXhlbF93aWR0aDsgeCsrKSB7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIHBpeGVsSW4gPSAmaW5wdXRbeCAqIDRdOworICAgICAgICB1bnNpZ25lZCBjaGFy
KiBwaXhlbE91dCA9ICZvdXRwdXRbeCAqIDRdOworICAgICAgICBwaXhlbE91dFswXSA9IHBpeGVs
SW5bMl07CisgICAgICAgIHBpeGVsT3V0WzFdID0gcGl4ZWxJblsxXTsKKyAgICAgICAgcGl4ZWxP
dXRbMl0gPSBwaXhlbEluWzBdOworICAgICAgICBwaXhlbE91dFszXSA9IHBpeGVsSW5bM107Cisg
ICAgfQorfQorCisvLyBFbmNvZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhpcyBzZWN0aW9uIG9m
IHRoZSBjb2RlIGlzIGJhc2VkIG9uIG5zUE5HRW5jb2Rlci5jcHAgaW4gTW96aWxsYQorLy8gKENv
cHlyaWdodCAyMDA1IEdvb2dsZSBJbmMuKQorCisvLyBQYXNzZWQgYXJvdW5kIGFzIHRoZSBpb19w
dHIgaW4gdGhlIHBuZyBzdHJ1Y3RzIHNvIG91ciBjYWxsYmFja3Mga25vdyB3aGVyZQorLy8gdG8g
d3JpdGUgZGF0YS4KK3N0cnVjdCBQbmdFbmNvZGVyU3RhdGUgeworICAgIFBuZ0VuY29kZXJTdGF0
ZShXVEY6OlZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogbykgOiBtX291dChvKSB7fQorICAgIFdURjo6
VmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBtX291dDsKK307CisKKy8vIENhbGxlZCBieSBsaWJwbmcg
dG8gZmx1c2ggaXRzIGludGVybmFsIGJ1ZmZlciB0byBvdXJzLgordm9pZCBlbmNvZGVyV3JpdGVD
YWxsYmFjayhwbmdfc3RydWN0cCBwbmcsIHBuZ19ieXRlcCBkYXRhLCBwbmdfc2l6ZV90IHNpemUp
Cit7CisgICAgUG5nRW5jb2RlclN0YXRlKiBzdGF0ZSA9IHN0YXRpY19jYXN0PFBuZ0VuY29kZXJT
dGF0ZSo+KHBuZ19nZXRfaW9fcHRyKHBuZykpOworICAgIEFTU0VSVChzdGF0ZS0+bV9vdXQpOwor
CisgICAgc2l6ZV90IG9sZFNpemUgPSBzdGF0ZS0+bV9vdXQtPnNpemUoKTsKKyAgICBzdGF0ZS0+
bV9vdXQtPnJlc2l6ZShvbGRTaXplICsgc2l6ZSk7CisgICAgbWVtY3B5KCYoKnN0YXRlLT5tX291
dClbb2xkU2l6ZV0sIGRhdGEsIHNpemUpOworfQorCisvLyBBdXRvbWF0aWNhbGx5IGRlc3Ryb3lz
IHRoZSBnaXZlbiB3cml0ZSBzdHJ1Y3RzIG9uIGRlc3RydWN0aW9uIHRvIG1ha2UKKy8vIGNsZWFu
dXAgYW5kIGVycm9yIGhhbmRsaW5nIGNvZGUgY2xlYW5lci4KK2NsYXNzIFBuZ1dyaXRlU3RydWN0
RGVzdHJveWVyIHsKK3B1YmxpYzoKKyAgICBQbmdXcml0ZVN0cnVjdERlc3Ryb3llcihwbmdfc3Ry
dWN0KiogcHMsIHBuZ19pbmZvKiogcGkpCisgICAgICAgIDogbV9wcyhwcykKKyAgICAgICAgLCBt
X3BpKHBpKSB7CisgICAgfQorCisgICAgflBuZ1dyaXRlU3RydWN0RGVzdHJveWVyKCkgeworICAg
ICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QobV9wcywgbV9waSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIHBuZ19zdHJ1Y3QqKiBtX3BzOworICAgIHBuZ19pbmZvKiogbV9waTsKK307CisK
Ky8vIHN0YXRpYworYm9vbCBQTkdJbWFnZUVuY29kZXI6OmVuY29kZShjb25zdCBTa0JpdG1hcCYg
aW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6VmVjdG9yPHVuc2lnbmVk
IGNoYXI+KiBvdXRwdXQpCit7CisgICAgaWYgKGltYWdlLmNvbmZpZygpICE9IFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gT25seSBzdXBwb3J0
IEFSR0IgYXQgOCBicHAgbm93LgorCisgICAgaW1hZ2UubG9ja1BpeGVscygpOworICAgIGJvb2wg
cmVzdWx0ID0gUE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KAorICAgICAgICBpbWFnZS5nZXRQaXhlbHMoKSksIGltYWdlLndpZHRoKCksIGltYWdlLmhl
aWdodCgpLCBpbWFnZS5yb3dCeXRlcygpLAorICAgICAgICBvdXRwdXQpOworICAgIGltYWdlLnVu
bG9ja1BpeGVscygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIHN0YXRpYworYm9vbCBQ
TkdJbWFnZUVuY29kZXI6OmVuY29kZShjb25zdCB1bnNpZ25lZCBjaGFyKiBpbnB1dCwgaW50IHcs
IGludCBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZXNQZXJSb3csCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6VmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBv
dXRwdXQpCit7CisgICAgLy8gUnVuIHRvIGNvbnZlcnQgYW4gaW5wdXQgcm93IGludG8gdGhlIG91
dHB1dCByb3cgZm9ybWF0LCBOVUxMIG1lYW5zIG5vCisgICAgLy8gY29udmVyc2lvbiBpcyBuZWNl
c3NhcnkuCisgICAgdm9pZCAoKmNvbnZlcnRlcikoY29uc3QgdW5zaWduZWQgY2hhciogaW4sIGlu
dCB3LCB1bnNpZ25lZCBjaGFyKiBvdXQpID0gTlVMTDsKKworICAgIGludCBpbnB1dENvbG9yQ29t
cG9uZW50cyA9IDQ7CisgICAgaW50IG91dHB1dENvbG9yQ29tcG9uZW50cyA9IDQ7CisgICAgaW50
IHBuZ091dHB1dENvbG9yVHlwZSA9IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQTsKKyAgICBjb252
ZXJ0ZXIgPSBjb252ZXJ0QmV0d2VlbkJHUkFhbmRSR0JBOworCisgICAgLy8gUm93IHN0cmlkZSBz
aG91bGQgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhLgorICAg
IGlmIChpbnB1dENvbG9yQ29tcG9uZW50cyAqIHcgPiBieXRlc1BlclJvdykgeworICAgICAgICBB
U1NFUlQoZmFsc2UpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcG5nX3N0
cnVjdCogcG5nUHRyID0gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RS
SU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBu
Z192b2lkcF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBuZ19lcnJvcl9wdHJfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwbmdfZXJyb3JfcHRyX05VTEwpOworICAgIGlmICghcG5nUHRy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwbmdfaW5mbyogaW5mb1B0ciA9IHBuZ19j
cmVhdGVfaW5mb19zdHJ1Y3QocG5nUHRyKTsKKyAgICBpZiAoIWluZm9QdHIpIHsKKyAgICAgICAg
cG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZwbmdQdHIsIE5VTEwpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIFBuZ1dyaXRlU3RydWN0RGVzdHJveWVyIGRlc3Ryb3llcigmcG5n
UHRyLCAmaW5mb1B0cik7CisKKyAgICBpZiAoc2V0am1wKHBuZ19qbXBidWYocG5nUHRyKSkpIHsK
KyAgICAgICAgLy8gVGhlIGRlc3Ryb3llciB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzdHJ1Y3R1cmVz
IGFyZSBjbGVhbmVkIHVwIGluIHRoaXMKKyAgICAgICAgLy8gY2FzZSwgZXZlbiB0aG91Z2ggd2Ug
bWF5IGdldCBoZXJlIGFzIGEganVtcCBmcm9tIHJhbmRvbSBwYXJ0cyBvZiB0aGUKKyAgICAgICAg
Ly8gUE5HIGxpYnJhcnkgY2FsbGVkIGJlbG93LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gU2V0IG91ciBjYWxsYmFjayBmb3IgbGlicG5nIHRvIGdpdmUgdXMgdGhlIGRh
dGEuCisgICAgUG5nRW5jb2RlclN0YXRlIHN0YXRlKG91dHB1dCk7CisgICAgcG5nX3NldF93cml0
ZV9mbihwbmdQdHIsICZzdGF0ZSwgZW5jb2RlcldyaXRlQ2FsbGJhY2ssIE5VTEwpOworCisgICAg
cG5nX3NldF9JSERSKHBuZ1B0ciwgaW5mb1B0ciwgdywgaCwgOCwgcG5nT3V0cHV0Q29sb3JUeXBl
LAorICAgICAgICAgICAgICAgICBQTkdfSU5URVJMQUNFX05PTkUsIFBOR19DT01QUkVTU0lPTl9U
WVBFX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgIFBOR19GSUxURVJfVFlQRV9ERUZBVUxUKTsK
KyAgICBwbmdfd3JpdGVfaW5mbyhwbmdQdHIsIGluZm9QdHIpOworCisgICAgdW5zaWduZWQgY2hh
ciogcm93ID0gbmV3IHVuc2lnbmVkIGNoYXJbdyAqIG91dHB1dENvbG9yQ29tcG9uZW50c107Cisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5ICsrKSB7CisgICAgICAgIGNvbnZlcnRlcigmaW5w
dXRbeSAqIGJ5dGVzUGVyUm93XSwgdywgcm93KTsKKyAgICAgICAgcG5nX3dyaXRlX3JvdyhwbmdQ
dHIsIHJvdyk7CisgICAgfQorICAgIGRlbGV0ZVtdIHJvdzsKKworICAgIHBuZ193cml0ZV9lbmQo
cG5nUHRyLCBpbmZvUHRyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJ
bWFnZUVuY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29k
ZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBOR0ltYWdlRW5jb2Rlcl9oCisjZGVmaW5l
IFBOR0ltYWdlRW5jb2Rlcl9oCisKKyNpbmNsdWRlICJWZWN0b3IuaCIKKworY2xhc3MgU2tCaXRt
YXA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIEludGVyZmFjZSBmb3IgZW5jb2Rp
bmcgUE5HIGRhdGEuIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBsaWJwbmcuCisgICAgY2xhc3Mg
UE5HSW1hZ2VFbmNvZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIEVuY29kZXMgdGhlIHNw
ZWNpZmljIFNrQml0bWFwIGludG8gdGhlIHN1cHBsaWVkIHZlY3Rvci4KKyAgICAgICAgc3RhdGlj
IGJvb2wgZW5jb2RlKGNvbnN0IFNrQml0bWFwJiwgV1RGOjpWZWN0b3I8dW5zaWduZWQgY2hhcj4q
IG91dHB1dCk7CisKKyAgICAgICAgLy8gRW5jb2RlcyB0aGUgc3BlY2lmaWVkIGltYWdlIGRhdGEg
aW50byB0aGUgc3VwcGxpZWQgdmVjdG9yLgorICAgICAgICAvLyB3LCBoIGdpdmUgdGhlIHNpemUg
b2YgdGhlIGltYWdlIGFuZCBieXRlc19wZXJfcm93IGdpdmVzIHRoZSBieXRlcworICAgICAgICAv
LyBwZXIgcm93LgorICAgICAgICBzdGF0aWMgYm9vbCBlbmNvZGUoY29uc3QgdW5zaWduZWQgY2hh
ciogaW5wdXQsIGludCB3LCBpbnQgaCwgaW50IGJ5dGVzX3Blcl9yb3csIFdURjo6VmVjdG9yPHVu
c2lnbmVkIGNoYXI+KiBvdXRwdXQpOworICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27259</attachid>
            <date>2009-02-02 14:04:13 -0800</date>
            <delta_ts>2009-02-02 16:25:26 -0800</delta_ts>
            <desc>Fix for 23687</desc>
            <filename>23687.patch</filename>
            <type>text/plain</type>
            <size>11788</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDQ4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDItMDIgIFNjb3R0IFZpb2xldCAgPHNreUBnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVz
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NworCisgICAgICAg
IFdpcmVzIHVwIFNraWEnYSBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMIHRvIHN1cHBvcnQgcG5ncy4K
KworICAgICAgICBUaGlzIGhlbHBzIENocm9taXVtIHBhc3MgYSBjb3VwbGUgb2YgbGF5b3V0IHRl
c3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnM6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWVuY29kZXJzL3NraWE6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29k
ZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjop
OgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5jb2RlclN0YXRlOjpFbmNvZGVyV3JpdGVDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpQbmdFbmNvZGVyU3RhdGU6OkNvbnZlcnRCR1JBdG9SR0Ip
OgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5jb2RlclN0YXRlOjpQbmdXcml0ZVN0cnVjdERlc3Ry
b3llcjo6UG5nV3JpdGVTdHJ1Y3REZXN0cm95ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5j
b2RlclN0YXRlOjpQbmdXcml0ZVN0cnVjdERlc3Ryb3llcjo6flBuZ1dyaXRlU3RydWN0RGVzdHJv
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oOiBBZGRl
ZC4KKwogMjAwOS0wMi0wMiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQnVpbGQgZml4IG9ubHksIG5vIHJldmlldy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA0
MDQ3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTQgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCisjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgorI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5oIgogI2luY2x1ZGUgIlNraWFVdGls
cy5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMjA2LDggKzIwOCwxOCBAQCB2b2lkIElt
YWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhCiAKIFN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgLy8gRW5jb2RlIHRoZSBpbWFnZSBpbnRvIGEgdmVj
dG9yLgorICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdFbmNvZGVkRGF0YTsKKyAgICBQTkdJ
bWFnZUVuY29kZXI6OmVuY29kZSgqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFw
KCksICZwbmdFbmNvZGVkRGF0YSk7CisKKyAgICAvLyBDb252ZXJ0IGl0IGludG8gYmFzZTY0Lgor
ICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGVkRGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoKnJl
aW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4oJnBuZ0VuY29kZWREYXRhKSwgYmFzZTY0RW5j
b2RlZERhdGEpOworICAgIC8vIEFwcGVuZCB3aXRoIGEgXDAgc28gdGhhdCBpdCdzIGEgdmFsaWQg
c3RyaW5nLgorICAgIGJhc2U2NEVuY29kZWREYXRhLmFwcGVuZCgnXDAnKTsKKworICAgIC8vIEFu
ZCB0aGUgcmVzdWx0aW5nIHN0cmluZy4KKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoImRhdGE6
aW1hZ2UvcG5nO2Jhc2U2NCwlcyIsIGJhc2U2NEVuY29kZWREYXRhLmRhdGEoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDA2LTIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5o
IgorI2luY2x1ZGUgIlZlY3Rvci5oIgorCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKworZXh0ZXJu
ICJDIiB7CisjaW5jbHVkZSAicG5nLmgiCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
Q29udmVydHMgQkdSQS0+UkdCQSBhbmQgUkdCQS0+QkdSQS4KK3N0YXRpYyB2b2lkIGNvbnZlcnRC
ZXR3ZWVuQkdSQWFuZFJHQkEoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXQsIGludCBwaXhlbFdp
ZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
KiBvdXRwdXQpCit7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwaXhlbFdpZHRoOyB4KyspIHsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcGl4ZWxJbiA9ICZpbnB1dFt4ICogNF07Cisg
ICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVsT3V0ID0gJm91dHB1dFt4ICogNF07CisgICAgICAg
IHBpeGVsT3V0WzBdID0gcGl4ZWxJblsyXTsKKyAgICAgICAgcGl4ZWxPdXRbMV0gPSBwaXhlbElu
WzFdOworICAgICAgICBwaXhlbE91dFsyXSA9IHBpeGVsSW5bMF07CisgICAgICAgIHBpeGVsT3V0
WzNdID0gcGl4ZWxJblszXTsKKyAgICB9Cit9CisKKy8vIEVuY29kZXIgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
CisvLyBUaGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUgaXMgYmFzZWQgb24gbnNQTkdFbmNvZGVyLmNw
cCBpbiBNb3ppbGxhCisvLyAoQ29weXJpZ2h0IDIwMDUgR29vZ2xlIEluYy4pCisKKy8vIFBhc3Nl
ZCBhcm91bmQgYXMgdGhlIGlvX3B0ciBpbiB0aGUgcG5nIHN0cnVjdHMgc28gb3VyIGNhbGxiYWNr
cyBrbm93IHdoZXJlCisvLyB0byB3cml0ZSBkYXRhLgorc3RydWN0IFBuZ0VuY29kZXJTdGF0ZSB7
CisgICAgUG5nRW5jb2RlclN0YXRlKFdURjo6VmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvKSA6IG1f
b3V0KG8pIHt9CisgICAgV1RGOjpWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG1fb3V0OworfTsKKwor
Ly8gQ2FsbGVkIGJ5IGxpYnBuZyB0byBmbHVzaCBpdHMgaW50ZXJuYWwgYnVmZmVyIHRvIG91cnMu
Cit2b2lkIGVuY29kZXJXcml0ZUNhbGxiYWNrKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2J5dGVwIGRh
dGEsIHBuZ19zaXplX3Qgc2l6ZSkKK3sKKyAgICBQbmdFbmNvZGVyU3RhdGUqIHN0YXRlID0gc3Rh
dGljX2Nhc3Q8UG5nRW5jb2RlclN0YXRlKj4ocG5nX2dldF9pb19wdHIocG5nKSk7CisgICAgQVNT
RVJUKHN0YXRlLT5tX291dCk7CisKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0YXRlLT5tX291dC0+
c2l6ZSgpOworICAgIHN0YXRlLT5tX291dC0+cmVzaXplKG9sZFNpemUgKyBzaXplKTsKKyAgICBt
ZW1jcHkoJigqc3RhdGUtPm1fb3V0KVtvbGRTaXplXSwgZGF0YSwgc2l6ZSk7Cit9CisKKy8vIEF1
dG9tYXRpY2FsbHkgZGVzdHJveXMgdGhlIGdpdmVuIHdyaXRlIHN0cnVjdHMgb24gZGVzdHJ1Y3Rp
b24gdG8gbWFrZQorLy8gY2xlYW51cCBhbmQgZXJyb3IgaGFuZGxpbmcgY29kZSBjbGVhbmVyLgor
Y2xhc3MgUG5nV3JpdGVTdHJ1Y3REZXN0cm95ZXIgeworcHVibGljOgorICAgIFBuZ1dyaXRlU3Ry
dWN0RGVzdHJveWVyKHBuZ19zdHJ1Y3QqKiBwcywgcG5nX2luZm8qKiBwaSkKKyAgICAgICAgOiBt
X3BuZ1N0cnVjdChwcykKKyAgICAgICAgLCBtX3BuZ0luZm8ocGkpIHsKKyAgICB9CisKKyAgICB+
UG5nV3JpdGVTdHJ1Y3REZXN0cm95ZXIoKSB7CisgICAgICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0
cnVjdChtX3BuZ1N0cnVjdCwgbV9wbmdJbmZvKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgcG5n
X3N0cnVjdCoqIG1fcG5nU3RydWN0OworICAgIHBuZ19pbmZvKiogbV9wbmdJbmZvOworfTsKKwor
Ly8gc3RhdGljCitib29sIFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBp
bWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1RGOjpWZWN0b3I8dW5zaWduZWQg
Y2hhcj4qIG91dHB1dCkKK3sKKyAgICBpZiAoaW1hZ2UuY29uZmlnKCkgIT0gU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnKQorICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBPbmx5IHN1cHBvcnQg
QVJHQiBhdCA4IGJwcCBub3cuCisKKyAgICBpbWFnZS5sb2NrUGl4ZWxzKCk7CisgICAgYm9vbCBy
ZXN1bHQgPSBQTkdJbWFnZUVuY29kZXI6OmVuY29kZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oCisgICAgICAgIGltYWdlLmdldFBpeGVscygpKSwgSW50U2l6ZShpbWFnZS53aWR0aCgpLCBp
bWFnZS5oZWlnaHQoKSksCisgICAgICAgIGltYWdlLnJvd0J5dGVzKCksIG91dHB1dCk7CisgICAg
aW1hZ2UudW5sb2NrUGl4ZWxzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gc3RhdGlj
Citib29sIFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0
LCBjb25zdCBJbnRTaXplJiBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Ynl0ZXNQZXJSb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6VmVjdG9yPHVu
c2lnbmVkIGNoYXI+KiBvdXRwdXQpCit7CisgICAgaW50IGlucHV0Q29sb3JDb21wb25lbnRzID0g
NDsKKyAgICBpbnQgb3V0cHV0Q29sb3JDb21wb25lbnRzID0gNDsKKyAgICBpbnQgcG5nT3V0cHV0
Q29sb3JUeXBlID0gUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBOworICAgIEludFNpemUgaW1hZ2VT
aXplKHNpemUpOworICAgIGltYWdlU2l6ZS5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisKKyAgICAv
LyBSb3cgc3RyaWRlIHNob3VsZCBiZSBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZSBsZW5ndGggb2Yg
dGhlIGRhdGEuCisgICAgaWYgKGlucHV0Q29sb3JDb21wb25lbnRzICogaW1hZ2VTaXplLndpZHRo
KCkgPiBieXRlc1BlclJvdykgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcG5nX3N0cnVjdCogcG5nUHRyID0gcG5nX2NyZWF0ZV93
cml0ZV9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ192b2lkcF9OVUxMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19lcnJvcl9wdHJfTlVMTCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfZXJy
b3JfcHRyX05VTEwpOworICAgIGlmICghcG5nUHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBwbmdfaW5mbyogaW5mb1B0ciA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QocG5nUHRyKTsK
KyAgICBpZiAoIWluZm9QdHIpIHsKKyAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZw
bmdQdHIsIE5VTEwpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFBuZ1dyaXRl
U3RydWN0RGVzdHJveWVyIGRlc3Ryb3llcigmcG5nUHRyLCAmaW5mb1B0cik7CisKKyAgICBpZiAo
c2V0am1wKHBuZ19qbXBidWYocG5nUHRyKSkpIHsKKyAgICAgICAgLy8gVGhlIGRlc3Ryb3llciB3
aWxsIGVuc3VyZSB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGFyZSBjbGVhbmVkIHVwIGluIHRoaXMKKyAg
ICAgICAgLy8gY2FzZSwgZXZlbiB0aG91Z2ggd2UgbWF5IGdldCBoZXJlIGFzIGEganVtcCBmcm9t
IHJhbmRvbSBwYXJ0cyBvZiB0aGUKKyAgICAgICAgLy8gUE5HIGxpYnJhcnkgY2FsbGVkIGJlbG93
LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gU2V0IG91ciBjYWxsYmFj
ayBmb3IgbGlicG5nIHRvIGdpdmUgdXMgdGhlIGRhdGEuCisgICAgUG5nRW5jb2RlclN0YXRlIHN0
YXRlKG91dHB1dCk7CisgICAgcG5nX3NldF93cml0ZV9mbihwbmdQdHIsICZzdGF0ZSwgZW5jb2Rl
cldyaXRlQ2FsbGJhY2ssIE5VTEwpOworCisgICAgcG5nX3NldF9JSERSKHBuZ1B0ciwgaW5mb1B0
ciwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgOCwgcG5nT3V0cHV0Q29s
b3JUeXBlLAorICAgICAgICAgICAgICAgICBQTkdfSU5URVJMQUNFX05PTkUsIFBOR19DT01QUkVT
U0lPTl9UWVBFX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgIFBOR19GSUxURVJfVFlQRV9ERUZB
VUxUKTsKKyAgICBwbmdfd3JpdGVfaW5mbyhwbmdQdHIsIGluZm9QdHIpOworCisgICAgdW5zaWdu
ZWQgY2hhciogcm93ID0gbmV3IHVuc2lnbmVkIGNoYXJbaW1hZ2VTaXplLndpZHRoKCkgKiBvdXRw
dXRDb2xvckNvbXBvbmVudHNdOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VTaXplLmhl
aWdodCgpOyB5ICsrKSB7CisgICAgICAgIGNvbnZlcnRCZXR3ZWVuQkdSQWFuZFJHQkEoJmlucHV0
W3kgKiBieXRlc1BlclJvd10sIGltYWdlU2l6ZS53aWR0aCgpLCByb3cpOworICAgICAgICBwbmdf
d3JpdGVfcm93KHBuZ1B0ciwgcm93KTsKKyAgICB9CisgICAgZGVsZXRlW10gcm93OworCisgICAg
cG5nX3dyaXRlX2VuZChwbmdQdHIsIGluZm9QdHIpOworICAgIHJldHVybiB0cnVlOworfQorCit9
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNv
ZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0y
MDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUE5HSW1hZ2VFbmNv
ZGVyX2gKKyNkZWZpbmUgUE5HSW1hZ2VFbmNvZGVyX2gKKworI2luY2x1ZGUgIlZlY3Rvci5oIgor
CitjbGFzcyBJbnRTaXplOworY2xhc3MgU2tCaXRtYXA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIC8vIEludGVyZmFjZSBmb3IgZW5jb2RpbmcgUE5HIGRhdGEuIFRoaXMgaXMgYSB3cmFw
cGVyIGFyb3VuZCBsaWJwbmcuCisgICAgY2xhc3MgUE5HSW1hZ2VFbmNvZGVyIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIC8vIEVuY29kZXMgdGhlIHNwZWNpZmljIFNrQml0bWFwIGludG8gdGhlIHN1
cHBsaWVkIHZlY3Rvci4KKyAgICAgICAgc3RhdGljIGJvb2wgZW5jb2RlKGNvbnN0IFNrQml0bWFw
JiwgV1RGOjpWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCk7CisKKyAgICAgICAgLy8gRW5j
b2RlcyB0aGUgc3BlY2lmaWVkIGltYWdlIGRhdGEgaW50byB0aGUgc3VwcGxpZWQgdmVjdG9yLgor
ICAgICAgICAvLyB3LCBoIGdpdmUgdGhlIHNpemUgb2YgdGhlIGltYWdlIGFuZCBieXRlc19wZXJf
cm93IGdpdmVzIHRoZSBieXRlcworICAgICAgICAvLyBwZXIgcm93LgorICAgICAgICBzdGF0aWMg
Ym9vbCBlbmNvZGUoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXQsIGNvbnN0IEludFNpemUmIHNp
emUsIGludCBieXRlc1BlclJvdywgV1RGOjpWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCk7
CisgICAgfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCg==
</data>
<flag name="review"
          id="13134"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27265</attachid>
            <date>2009-02-02 16:25:47 -0800</date>
            <delta_ts>2009-02-05 13:05:32 -0800</delta_ts>
            <desc>Fix for 23687</desc>
            <filename>23687.patch</filename>
            <type>text/plain</type>
            <size>11794</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDQ4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDItMDIgIFNjb3R0IFZpb2xldCAgPHNreUBnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVz
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NworCisgICAgICAg
IFdpcmVzIHVwIFNraWEnYSBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMIHRvIHN1cHBvcnQgcG5ncy4K
KworICAgICAgICBUaGlzIGhlbHBzIENocm9taXVtIHBhc3MgYSBjb3VwbGUgb2YgbGF5b3V0IHRl
c3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnM6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWVuY29kZXJzL3NraWE6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29k
ZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjop
OgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5jb2RlclN0YXRlOjpFbmNvZGVyV3JpdGVDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpQbmdFbmNvZGVyU3RhdGU6OkNvbnZlcnRCR1JBdG9SR0Ip
OgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5jb2RlclN0YXRlOjpQbmdXcml0ZVN0cnVjdERlc3Ry
b3llcjo6UG5nV3JpdGVTdHJ1Y3REZXN0cm95ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UG5nRW5j
b2RlclN0YXRlOjpQbmdXcml0ZVN0cnVjdERlc3Ryb3llcjo6flBuZ1dyaXRlU3RydWN0RGVzdHJv
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oOiBBZGRl
ZC4KKwogMjAwOS0wMi0wMiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQnVpbGQgZml4IG9ubHksIG5vIHJldmlldy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA0
MDQ3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTQgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCisjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgorI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5oIgogI2luY2x1ZGUgIlNraWFVdGls
cy5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMjA2LDggKzIwOCwxOCBAQCB2b2lkIElt
YWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhCiAKIFN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgLy8gRW5jb2RlIHRoZSBpbWFnZSBpbnRvIGEgdmVj
dG9yLgorICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdFbmNvZGVkRGF0YTsKKyAgICBQTkdJ
bWFnZUVuY29kZXI6OmVuY29kZSgqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFw
KCksICZwbmdFbmNvZGVkRGF0YSk7CisKKyAgICAvLyBDb252ZXJ0IGl0IGludG8gYmFzZTY0Lgor
ICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGVkRGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoKnJl
aW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4oJnBuZ0VuY29kZWREYXRhKSwgYmFzZTY0RW5j
b2RlZERhdGEpOworICAgIC8vIEFwcGVuZCB3aXRoIGEgXDAgc28gdGhhdCBpdCdzIGEgdmFsaWQg
c3RyaW5nLgorICAgIGJhc2U2NEVuY29kZWREYXRhLmFwcGVuZCgnXDAnKTsKKworICAgIC8vIEFu
ZCB0aGUgcmVzdWx0aW5nIHN0cmluZy4KKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoImRhdGE6
aW1hZ2UvcG5nO2Jhc2U2NCwlcyIsIGJhc2U2NEVuY29kZWREYXRhLmRhdGEoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDA2LTIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk93bkFycmF5UHRyLmgiCisj
aW5jbHVkZSAiUE5HSW1hZ2VFbmNvZGVyLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisKKyNpbmNs
dWRlICJTa0JpdG1hcC5oIgorCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJwbmcuaCIKK30KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJ0cyBCR1JBLT5SR0JBIGFuZCBSR0JBLT5C
R1JBLgorc3RhdGljIHZvaWQgY29udmVydEJldHdlZW5CR1JBYW5kUkdCQShjb25zdCB1bnNpZ25l
ZCBjaGFyKiBpbnB1dCwgaW50IG51bWJlck9mUGl4ZWxzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBvdXRwdXQpCit7CisgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBudW1iZXJPZlBpeGVsczsgeCsrKSB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIHBpeGVsSW4gPSAmaW5wdXRbeCAqIDRdOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBw
aXhlbE91dCA9ICZvdXRwdXRbeCAqIDRdOworICAgICAgICBwaXhlbE91dFswXSA9IHBpeGVsSW5b
Ml07CisgICAgICAgIHBpeGVsT3V0WzFdID0gcGl4ZWxJblsxXTsKKyAgICAgICAgcGl4ZWxPdXRb
Ml0gPSBwaXhlbEluWzBdOworICAgICAgICBwaXhlbE91dFszXSA9IHBpeGVsSW5bM107CisgICAg
fQorfQorCisvLyBFbmNvZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhpcyBzZWN0aW9uIG9mIHRo
ZSBjb2RlIGlzIGJhc2VkIG9uIG5zUE5HRW5jb2Rlci5jcHAgaW4gTW96aWxsYQorLy8gKENvcHly
aWdodCAyMDA1IEdvb2dsZSBJbmMuKQorCisvLyBQYXNzZWQgYXJvdW5kIGFzIHRoZSBpb19wdHIg
aW4gdGhlIHBuZyBzdHJ1Y3RzIHNvIG91ciBjYWxsYmFja3Mga25vdyB3aGVyZQorLy8gdG8gd3Jp
dGUgZGF0YS4KK3N0cnVjdCBQTkdFbmNvZGVyU3RhdGUgeworICAgIFBOR0VuY29kZXJTdGF0ZShW
ZWN0b3I8dW5zaWduZWQgY2hhcj4qIG8pIDogbV9vdXQobykge30KKyAgICBWZWN0b3I8dW5zaWdu
ZWQgY2hhcj4qIG1fb3V0OworfTsKKworLy8gQ2FsbGVkIGJ5IGxpYnBuZyB0byBmbHVzaCBpdHMg
aW50ZXJuYWwgYnVmZmVyIHRvIG91cnMuCit2b2lkIGVuY29kZXJXcml0ZUNhbGxiYWNrKHBuZ19z
dHJ1Y3RwIHBuZywgcG5nX2J5dGVwIGRhdGEsIHBuZ19zaXplX3Qgc2l6ZSkKK3sKKyAgICBQTkdF
bmNvZGVyU3RhdGUqIHN0YXRlID0gc3RhdGljX2Nhc3Q8UE5HRW5jb2RlclN0YXRlKj4ocG5nX2dl
dF9pb19wdHIocG5nKSk7CisgICAgQVNTRVJUKHN0YXRlLT5tX291dCk7CisKKyAgICBzaXplX3Qg
b2xkU2l6ZSA9IHN0YXRlLT5tX291dC0+c2l6ZSgpOworICAgIHN0YXRlLT5tX291dC0+cmVzaXpl
KG9sZFNpemUgKyBzaXplKTsKKyAgICBtZW1jcHkoJigqc3RhdGUtPm1fb3V0KVtvbGRTaXplXSwg
ZGF0YSwgc2l6ZSk7Cit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZGVzdHJveXMgdGhlIGdpdmVuIHdy
aXRlIHN0cnVjdHMgb24gZGVzdHJ1Y3Rpb24gdG8gbWFrZQorLy8gY2xlYW51cCBhbmQgZXJyb3Ig
aGFuZGxpbmcgY29kZSBjbGVhbmVyLgorY2xhc3MgUE5HV3JpdGVTdHJ1Y3REZXN0cm95ZXIgewor
cHVibGljOgorICAgIFBOR1dyaXRlU3RydWN0RGVzdHJveWVyKHBuZ19zdHJ1Y3QqKiBwcywgcG5n
X2luZm8qKiBwaSkKKyAgICAgICAgOiBtX3BuZ1N0cnVjdChwcykKKyAgICAgICAgLCBtX3BuZ0lu
Zm8ocGkpIHsKKyAgICB9CisKKyAgICB+UE5HV3JpdGVTdHJ1Y3REZXN0cm95ZXIoKSB7CisgICAg
ICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdChtX3BuZ1N0cnVjdCwgbV9wbmdJbmZvKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgcG5nX3N0cnVjdCoqIG1fcG5nU3RydWN0OworICAgIHBuZ19p
bmZvKiogbV9wbmdJbmZvOworfTsKKworLy8gc3RhdGljCitib29sIFBOR0ltYWdlRW5jb2Rlcjo6
ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBpbWFnZSwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRw
dXQpCit7CisgICAgaWYgKGltYWdlLmNvbmZpZygpICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gT25seSBzdXBwb3J0IEFSR0IgYXQgOCBi
cHAgbm93LgorCisgICAgaW1hZ2UubG9ja1BpeGVscygpOworICAgIGJvb2wgcmVzdWx0ID0gUE5H
SW1hZ2VFbmNvZGVyOjplbmNvZGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KAorICAgICAg
ICBpbWFnZS5nZXRQaXhlbHMoKSksIEludFNpemUoaW1hZ2Uud2lkdGgoKSwgaW1hZ2UuaGVpZ2h0
KCkpLAorICAgICAgICBpbWFnZS5yb3dCeXRlcygpLCBvdXRwdXQpOworICAgIGltYWdlLnVubG9j
a1BpeGVscygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIHN0YXRpYworYm9vbCBQTkdJ
bWFnZUVuY29kZXI6OmVuY29kZShjb25zdCB1bnNpZ25lZCBjaGFyKiBpbnB1dCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzUGVyUm93
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91
dHB1dCkKK3sKKyAgICBpbnQgaW5wdXRDb2xvckNvbXBvbmVudHMgPSA0OworICAgIGludCBvdXRw
dXRDb2xvckNvbXBvbmVudHMgPSA0OworICAgIGludCBwbmdPdXRwdXRDb2xvclR5cGUgPSBQTkdf
Q09MT1JfVFlQRV9SR0JfQUxQSEE7CisgICAgSW50U2l6ZSBpbWFnZVNpemUoc2l6ZSk7CisgICAg
aW1hZ2VTaXplLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgIC8vIFJvdyBzdHJpZGUgc2hv
dWxkIGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YS4KKyAgICBp
ZiAoaW5wdXRDb2xvckNvbXBvbmVudHMgKiBpbWFnZVNpemUud2lkdGgoKSA+IGJ5dGVzUGVyUm93
KSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBwbmdfc3RydWN0KiBwbmdQdHIgPSBwbmdfY3JlYXRlX3dyaXRlX3N0cnVjdChQTkdf
TElCUE5HX1ZFUl9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG5nX3ZvaWRwX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG5nX2Vycm9yX3B0cl9OVUxMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19lcnJvcl9wdHJfTlVMTCk7Cisg
ICAgaWYgKCFwbmdQdHIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBuZ19pbmZvKiBp
bmZvUHRyID0gcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdChwbmdQdHIpOworICAgIGlmICghaW5mb1B0
cikgeworICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJnBuZ1B0ciwgTlVMTCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgUE5HV3JpdGVTdHJ1Y3REZXN0cm95ZXIg
ZGVzdHJveWVyKCZwbmdQdHIsICZpbmZvUHRyKTsKKworICAgIGlmIChzZXRqbXAocG5nX2ptcGJ1
ZihwbmdQdHIpKSkgeworICAgICAgICAvLyBUaGUgZGVzdHJveWVyIHdpbGwgZW5zdXJlIHRoYXQg
dGhlIHN0cnVjdHVyZXMgYXJlIGNsZWFuZWQgdXAgaW4gdGhpcworICAgICAgICAvLyBjYXNlLCBl
dmVuIHRob3VnaCB3ZSBtYXkgZ2V0IGhlcmUgYXMgYSBqdW1wIGZyb20gcmFuZG9tIHBhcnRzIG9m
IHRoZQorICAgICAgICAvLyBQTkcgbGlicmFyeSBjYWxsZWQgYmVsb3cuCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTZXQgb3VyIGNhbGxiYWNrIGZvciBsaWJwbmcgdG8g
Z2l2ZSB1cyB0aGUgZGF0YS4KKyAgICBQTkdFbmNvZGVyU3RhdGUgc3RhdGUob3V0cHV0KTsKKyAg
ICBwbmdfc2V0X3dyaXRlX2ZuKHBuZ1B0ciwgJnN0YXRlLCBlbmNvZGVyV3JpdGVDYWxsYmFjaywg
TlVMTCk7CisKKyAgICBwbmdfc2V0X0lIRFIocG5nUHRyLCBpbmZvUHRyLCBpbWFnZVNpemUud2lk
dGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCBwbmdPdXRwdXRDb2xvclR5cGUsCisgICAgICAg
ICAgICAgICAgIFBOR19JTlRFUkxBQ0VfTk9ORSwgUE5HX0NPTVBSRVNTSU9OX1RZUEVfREVGQVVM
VCwKKyAgICAgICAgICAgICAgICAgUE5HX0ZJTFRFUl9UWVBFX0RFRkFVTFQpOworICAgIHBuZ193
cml0ZV9pbmZvKHBuZ1B0ciwgaW5mb1B0cik7CisKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBj
aGFyPiByb3dQaXhlbHMobmV3IHVuc2lnbmVkIGNoYXJbaW1hZ2VTaXplLndpZHRoKCkgKiBvdXRw
dXRDb2xvckNvbXBvbmVudHNdKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdlU2l6ZS5o
ZWlnaHQoKTsgeSArKykgeworICAgICAgICBjb252ZXJ0QmV0d2VlbkJHUkFhbmRSR0JBKCZpbnB1
dFt5ICogYnl0ZXNQZXJSb3ddLCBpbWFnZVNpemUud2lkdGgoKSwgcm93UGl4ZWxzLmdldCgpKTsK
KyAgICAgICAgcG5nX3dyaXRlX3JvdyhwbmdQdHIsIHJvd1BpeGVscy5nZXQoKSk7CisgICAgfQor
CisgICAgcG5nX3dyaXRlX2VuZChwbmdQdHIsIGluZm9QdHIpOworICAgIHJldHVybiB0cnVlOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29k
ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAwNi0yMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUE5HSW1h
Z2VFbmNvZGVyX2gKKyNkZWZpbmUgUE5HSW1hZ2VFbmNvZGVyX2gKKworI2luY2x1ZGUgIlZlY3Rv
ci5oIgorCitjbGFzcyBJbnRTaXplOworY2xhc3MgU2tCaXRtYXA7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIC8vIEludGVyZmFjZSBmb3IgZW5jb2RpbmcgUE5HIGRhdGEuIFRoaXMgaXMg
YSB3cmFwcGVyIGFyb3VuZCBsaWJwbmcuCisgICAgY2xhc3MgUE5HSW1hZ2VFbmNvZGVyIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIC8vIEVuY29kZXMgdGhlIHNwZWNpZmljIFNrQml0bWFwIGludG8g
dGhlIHN1cHBsaWVkIHZlY3Rvci4KKyAgICAgICAgc3RhdGljIGJvb2wgZW5jb2RlKGNvbnN0IFNr
Qml0bWFwJiwgV1RGOjpWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCk7CisKKyAgICAgICAg
Ly8gRW5jb2RlcyB0aGUgc3BlY2lmaWVkIGltYWdlIGRhdGEgaW50byB0aGUgc3VwcGxpZWQgdmVj
dG9yLgorICAgICAgICAvLyB3LCBoIGdpdmUgdGhlIHNpemUgb2YgdGhlIGltYWdlIGFuZCBieXRl
c19wZXJfcm93IGdpdmVzIHRoZSBieXRlcworICAgICAgICAvLyBwZXIgcm93LgorICAgICAgICBz
dGF0aWMgYm9vbCBlbmNvZGUoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXQsIGNvbnN0IEludFNp
emUmIHNpemUsIGludCBieXRlc1BlclJvdywgV1RGOjpWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91
dHB1dCk7CisgICAgfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCg==
</data>
<flag name="review"
          id="13140"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>