<?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>17284</bug_id>
          
          <creation_ts>2008-02-10 08:49:34 -0800</creation_ts>
          <short_desc>[CAIRO] Introduce single-pixel image optimizations</short_desc>
          <delta_ts>2009-03-11 10:48: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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Cairo, Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alp Toker">alp</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>70054</commentid>
    <comment_count>0</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-02-10 08:49:34 -0800</bug_when>
    <thetext>Single-pixel optimizations are not yet implemented and can be useful for speeding up pathological cases like single-pixel GIFs used as padding.

While at it, we can consider borrowing some of the techniques recently developed by these guys:

  https://bugzilla.mozilla.org/show_bug.cgi?id=371867
  https://bugzilla.mozilla.org/show_bug.cgi?id=415854</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111871</commentid>
    <comment_count>1</comment_count>
      <attachid>28192</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-03-02 12:11:44 -0800</bug_when>
    <thetext>Created attachment 28192
single pixel optimization

implementation of checkForSolidColor for Cairo after Adam Treat s patch: r41358.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111889</commentid>
    <comment_count>2</comment_count>
      <attachid>28192</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-02 13:21:30 -0800</bug_when>
    <thetext>Comment on attachment 28192
single pixel optimization

I don&apos;t really know enough about Cairo to know if your color extraction code is correct.  I think I would have abstracted it into a nice little static function though:

     uint32_t* pixel = reinterpret_cast&lt;uint32_t*&gt;(data);
 208     int alpha, red, green, blue;
 209 
 210     if (alpha = (*pixel &amp; 0xff000000) &gt;&gt; 24) {
 211         red = ((*pixel &amp; 0x00ff0000) &gt;&gt; 16) * 255 / alpha;
 212         green = ((*pixel &amp; 0x0000ff00) &gt;&gt; 8) * 255 / alpha;
 213         blue = (*pixel &amp; 0x000000ff) * 255 / alpha;
 214     } else {
 215         red = (*pixel &amp; 0x00ff0000) &gt;&gt; 16;
 216         green = (*pixel &amp; 0x0000ff00) &gt;&gt; 8;
 217         blue = (*pixel &amp; 0x000000ff);
 218     }

Color color = colorFromCairoPixel(*pixel);

I think someone who knows more about Cairo should comment before I can mark this r+.

Also... is (*pixel &amp; 0xff000000) &gt;&gt; 24) the cleanest way to get the alpha out of a cairo pixel?  Talk about ugly, error-prone math...

I think actually I&apos;m going to r- for the way you grab colors out of the pixel.  Even if that&apos;s the only way, we should make those static inlines so that they&apos;re not so error prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111994</commentid>
    <comment_count>3</comment_count>
      <attachid>28221</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-03-03 08:30:23 -0800</bug_when>
    <thetext>Created attachment 28221
single pixel optimization with CairoColor

I talked to eseidel in IRC and he mentioned to add a new typedef or somthing like that to avoid failured and make the code reading better.
I added a new color schema to Cairo: CairoColor. CairoColor attends to premultiplying and every other calculation. I added some small callers to have access to the color values of a pixel. You can easily get the unpremutiplied colors of a pixel or set them by adding unpremultiplied colors.
We just support image surfaces with 32bit for now. There are asserts before every direct manipulation of surfaces. But I don&apos;t see a problem to support other surfaces in the future if wanted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112258</commentid>
    <comment_count>4</comment_count>
      <attachid>28279</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-03-04 12:11:11 -0800</bug_when>
    <thetext>Created attachment 28279
single pixel optimization with CairoColor

this patch doesn&apos;t add a new class but uses Color.cpp instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112377</commentid>
    <comment_count>5</comment_count>
      <attachid>28302</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-03-05 08:33:29 -0800</bug_when>
    <thetext>Created attachment 28302
single pixel optimization with Color

just added two calls to premultiply or unpremultiply the color of a pixel to Color.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112422</commentid>
    <comment_count>6</comment_count>
      <attachid>28302</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-05 12:25:57 -0800</bug_when>
    <thetext>Comment on attachment 28302
single pixel optimization with Color

halves, not halfes

 148 Color colorFromPremultipliedARGB(RGBA32);

should use unsigned, not RGBA32

This looks good.  It would be nice if someone could check your pixel math before you land.  Like Oliver?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113031</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-03-10 11:48:12 -0700</bug_when>
    <thetext>landed in r41561.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113197</commentid>
    <comment_count>8</comment_count>
    <who name="Pam Greene (IRC:pamg)">pam</who>
    <bug_when>2009-03-11 10:48:00 -0700</bug_when>
    <thetext>Marking fixed so it drops out of the commit queue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28192</attachid>
            <date>2009-03-02 12:11:44 -0800</date>
            <delta_ts>2009-03-03 08:30:23 -0800</delta_ts>
            <desc>single pixel optimization</desc>
            <filename>cairo-singlePixel.patch</filename>
            <type>text/plain</type>
            <size>2626</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTM2MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDMtMDIgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBs
ZW1lbnQgdGhlIENhaXJvIHZlcnNpb24gb2YgdGhlIGNoZWNrRm9yU29saWRDb2xvcigpIG1ldGhv
ZC4gVGhpcyBoYWxmZXMgdGhlCisgICAgICAgIHRpbWUgdG8gZHJhdy4KKworICAgICAgICBbQ0FJ
Uk9dIEludHJvZHVjZSBzaW5nbGUtcGl4ZWwgaW1hZ2Ugb3B0aW1pemF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyODQKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisKIDIwMDktMDMtMDIgIE9qYW4g
VmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQ
ZXRlcnNvbi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWly
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUNhaXJvLmNwcAkocmV2aXNpb24gNDEzNjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODEsOSArMTgy
LDQyIEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKIAogdm9pZCBC
aXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKIHsKLSAgICAvLyBGSVhNRTogSXQncyBl
YXN5IHRvIGltcGxlbWVudCB0aGlzIG9wdGltaXphdGlvbi4gSnVzdCBuZWVkIHRvIGNoZWNrIHRo
ZSBSR0JBMzIgYnVmZmVyIHRvIHNlZSBpZiBpdCBpcyAxeDEuCiAgICAgbV9pc1NvbGlkQ29sb3Ig
PSBmYWxzZTsKICAgICBtX2NoZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1ZTsKKworICAgIGlmIChm
cmFtZUNvdW50KCkgPiAxKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShmcmFtZUF0SW5kZXgoMCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFH
RSk7CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIGZyYW1lU3VyZmFjZSA9IGZyYW1lQXRJbmRleCgw
KTsKKyAgICBpZiAoIWZyYW1lU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHdp
ZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoZnJhbWVTdXJmYWNlKTsKKyAgICBp
bnQgaGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGZyYW1lU3VyZmFjZSk7
CisKKyAgICBpZiAod2lkdGggIT0gMSB8fCBoZWlnaHQgIT0gMSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOworCisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoZnJhbWVTdXJmYWNlKTsKKworICAgIHVpbnQz
Ml90KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkYXRhKTsKKyAgICBpbnQg
YWxwaGEsIHJlZCwgZ3JlZW4sIGJsdWU7CisKKyAgICBpZiAoYWxwaGEgPSAoKnBpeGVsICYgMHhm
ZjAwMDAwMCkgPj4gMjQpIHsKKyAgICAgICAgcmVkID0gKCgqcGl4ZWwgJiAweDAwZmYwMDAwKSA+
PiAxNikgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgZ3JlZW4gPSAoKCpwaXhlbCAmIDB4MDAwMGZm
MDApID4+IDgpICogMjU1IC8gYWxwaGE7CisgICAgICAgIGJsdWUgPSAoKnBpeGVsICYgMHgwMDAw
MDBmZikgKiAyNTUgLyBhbHBoYTsKKyAgICB9IGVsc2UgeworICAgICAgICByZWQgPSAoKnBpeGVs
ICYgMHgwMGZmMDAwMCkgPj4gMTY7CisgICAgICAgIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMGZm
MDApID4+IDg7CisgICAgICAgIGJsdWUgPSAoKnBpeGVsICYgMHgwMDAwMDBmZik7CisgICAgfQor
CisgICAgbV9zb2xpZENvbG9yID0gQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQog
CiB9Cg==
</data>
<flag name="review"
          id="13779"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28221</attachid>
            <date>2009-03-03 08:30:23 -0800</date>
            <delta_ts>2009-03-04 12:11:11 -0800</delta_ts>
            <desc>single pixel optimization with CairoColor</desc>
            <filename>cairo-singlePixel-with-color.patch</filename>
            <type>text/plain</type>
            <size>12865</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTM3OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMDktMDMtMDIgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBs
ZW1lbnQgdGhlIENhaXJvIHZlcnNpb24gb2YgdGhlIGNoZWNrRm9yU29saWRDb2xvcigpIG1ldGhv
ZC4gVGhpcyBoYWxmZXMgdGhlCisgICAgICAgIHRpbWUgdG8gZHJhdy4KKyAgICAgICAgSSBhZGRl
ZCBhIG5ldyBjb2xvciBzY2hlbWEgZm9yIHRoZSB3b3JrIG9uIGNhaXJvIHdpdGggc3VyZmFjZXMu
IExvdyBsZXZlbCBncmFwaGljCisgICAgICAgIG1hbmlwdWxhdGlvbiBpcyBhIGJpdCB0cmlja3kg
aW4gQ2Fpcm8uIEFuZCB0aGlzIGNvbG9yIHNjaGVtYSBzaG91bGQgaGVscCB0byB1bmRlcnN0YW5k
IAorICAgICAgICB0aGUgY29kZSBiZXR0ZXIgYW5kIHRvIGF2b2lkIGVycm9ycy4KKworICAgICAg
ICBbQ0FJUk9dIEludHJvZHVjZSBzaW5nbGUtcGl4ZWwgaW1hZ2Ugb3B0aW1pemF0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyODQKKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvQ29sb3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvQ29sb3I6OkNh
aXJvQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm9Db2xvcjo6c2V0UmdiYSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlyb0NvbG9yOjpwcmVNdWxpdHBseUFSR0IpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvQ29sb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDYWlyb0NvbG9yOjpDYWlyb0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvQ29s
b3I6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvQ29sb3I6OnNldFJlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlyb0NvbG9yOjpzZXRHcmVlbik6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlyb0NvbG9yOjpzZXRCbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvQ29sb3I6OmNv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvQ29sb3I6OmFscGhhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhaXJvQ29sb3I6OnJlZCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlyb0NvbG9yOjpn
cmVlbik6CisgICAgICAgIChXZWJDb3JlOjpDYWlyb0NvbG9yOjpibHVlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2hlY2tG
b3JTb2xpZENvbG9yKToKKwogMjAwOS0wMy0wMiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQZXRlcnNvbgpJbmRleDog
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA0MTM2MSkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE3MjYsNiArMTcyNiw4IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS9wYWdlL2d0ay9EcmFnQ29udHJvbGxlckd0ay5jcHAgXAogCVdlYkNvcmUvcGFnZS9ndGsv
RXZlbnRIYW5kbGVyR3RrLmNwcCBcCiAJV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAgXAor
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9Db2xvci5jcHAgXAorCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9Db2xvci5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvUGF0aC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhZGllbnRDYWlyby5jcHAgXApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvQ29sb3IuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb0NvbG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNh
aXJvQ29sb3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWlyb0NvbG9yOjpDYWlyb0Nv
bG9yKGNvbnN0IEFSR0IzMiYgcGl4ZWxDb2xvcikKK3sKKyAgICBpZiAobV9hbHBoYSA9ICgqcGl4
ZWxDb2xvciAmIDB4ZmYwMDAwMDApID4+IDI0KSB7CisgICAgICAgIG1fcmVkID0gICAoKCpwaXhl
bENvbG9yICYgMHgwMGZmMDAwMCkgPj4gMTYpICogMjU1IC8gbV9hbHBoYTsKKyAgICAgICAgbV9n
cmVlbiA9ICgoKnBpeGVsQ29sb3IgJiAweDAwMDBmZjAwKSA+PiA4KSAqIDI1NSAvIG1fYWxwaGE7
CisgICAgICAgIG1fYmx1ZSA9ICAoKnBpeGVsQ29sb3IgJiAweDAwMDAwMGZmKSAqIDI1NSAvIG1f
YWxwaGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9yZWQgPSAgICgqcGl4ZWxDb2xvciAmIDB4
MDBmZjAwMDApID4+IDE2OworICAgICAgICBtX2dyZWVuID0gKCpwaXhlbENvbG9yICYgMHgwMDAw
ZmYwMCkgPj4gODsKKyAgICAgICAgbV9ibHVlID0gICgqcGl4ZWxDb2xvciAmIDB4MDAwMDAwZmYp
OworICAgIH0KK30KKwordm9pZCBDYWlyb0NvbG9yOjpzZXRSZ2JhKGNvbnN0IEFSR0IzMiYgcGl4
ZWxDb2xvcikKK3sKKyAgICBtX2FscGhhID0gKCpwaXhlbENvbG9yICYgMHhmZjAwMDAwMCkgPj4g
MjQ7CisgICAgbV9yZWQgPSAgICgqcGl4ZWxDb2xvciAmIDB4MDBmZjAwMDApID4+IDE2OworICAg
IG1fZ3JlZW4gPSAoKnBpeGVsQ29sb3IgJiAweDAwMDBmZjAwKSA+PiA4OworICAgIG1fYmx1ZSA9
ICAoKnBpeGVsQ29sb3IgJiAweDAwMDAwMGZmKTsKK30KKwordW5zaWduZWQgaW50IENhaXJvQ29s
b3I6OnByZU11bGl0cGx5QVJHQihBUkdCMzIgcGl4ZWwpCit7CisgICAgaWYgKG1fYWxwaGEgPiAw
KSB7CisgICAgICAgICpwaXhlbCA9IG1fYWxwaGEgPDwgMjQgfAorICAgICAgICAgICAgICgobV9y
ZWQgKiBtX2FscGhhICsgMjU0KSAvIDI1NSkgPDwgMTYgfCAKKyAgICAgICAgICAgICAoKG1fZ3Jl
ZW4gKiBtX2FscGhhICsgMjU0KSAvIDI1NSkgPDwgOCB8IAorICAgICAgICAgICAgICgobV9ibHVl
ICogbV9hbHBoYSArIDI1NCkgLyAyNTUpOworICAgIH0gZWxzZQorICAgICAgICAqcGl4ZWwgPSBt
X2FscGhhIDw8IDI0IHwgbV9yZWQgPDwgMTYgfCBtX2dyZWVuIDw8IDggfCBtX2JsdWU7CisKKyAg
ICByZXR1cm4gKnBpeGVsOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvQ29sb3IuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9Db2xvci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhaXJvQ29s
b3JfaAorI2RlZmluZSBDYWlyb0NvbG9yX2gKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIHVp
bnQzMl90KiBBUkdCMzI7CisKK2NsYXNzIENhaXJvQ29sb3IgeworcHVibGljOgorICAgIC8vIFdl
IG9ubHkgc3VwcG9ydCBpbWFnZSBzdXJmYWNlcyB3aXRoIDMyIGJpdCBmb3Igbm93LgorICAgIENh
aXJvQ29sb3IoKSA6IG1fcmVkKDApLCBtX2dyZWVuKDApLCBtX2JsdWUoMCksIG1fYWxwaGEoMCkg
eyB9CisgICAgQ2Fpcm9Db2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkgOiBtX3JlZChy
KSwgbV9ncmVlbihnKSwgbV9ibHVlKGIpLCBtX2FscGhhKGEpIHsgfQorICAgIENhaXJvQ29sb3Io
Y29uc3QgQVJHQjMyJik7CisKKyAgICB2b2lkIHNldFJnYmEoY29uc3QgQVJHQjMyJik7CisgICAg
dm9pZCBzZXRBbHBoYShpbnQgYSkgeyBtX2FscGhhID0gYTsgfQorICAgIHZvaWQgc2V0UmVkKGlu
dCByKSB7IG1fcmVkID0gcjsgfQorICAgIHZvaWQgc2V0R3JlZW4oaW50IGcpIHsgbV9ncmVlbiA9
IGc7IH0KKyAgICB2b2lkIHNldEJsdWUoaW50IGIpIHsgbV9hbHBoYSA9IGI7IH0KKworICAgIENv
bG9yIGNvbG9yKCkgeyByZXR1cm4gQ29sb3IobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBo
YSk7IH0KKyAgICB1bnNpZ25lZCBpbnQgcHJlTXVsaXRwbHlBUkdCKEFSR0IzMiBwaXhlbCk7Cisg
ICAgCisgICAgaW50IGFscGhhKCkgeyByZXR1cm4gbV9hbHBoYTsgfQorICAgIGludCByZWQoKSB7
IHJldHVybiBtX3JlZDsgfQorICAgIGludCBncmVlbigpIHsgcmV0dXJuIG1fZ3JlZW47IH0KKyAg
ICBpbnQgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsgfQorCitwcml2YXRlOgorICAgIC8vIFRoZSBj
b2xvcnMgYXJlIHNhdmVkIHVucHJlbXVsdGlwbGllZCB3aXRoIGEgcmFuZ2Ugb2YgMCB0byAyNTUK
KyAgICBpbnQgbV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBoYTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhaXJvQ29sb3JfaApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShy
ZXZpc2lvbiA0MTM2MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkJhc2U2NC5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9D
b2xvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKQEAgLTEyNiwyMSArMTI3LDE0IEBA
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW0KIAogICAgIHVuc2lnbmVk
IGNoYXIqIGRlc3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVz
dHggKiA0OwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAg
IHVuc2lnbmVkIGNoYXIgKnJvdyA9IGRhdGFTcmMgKyBzdHJpZGUgKiAoeSArIG9yaWdpbnkpOwor
ICAgICAgICB1aW50MzJfdCogcm93ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRhdGFT
cmMgKyBzdHJpZGUgKiAoeSArIG9yaWdpbnkpKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIHVpbnQzMl90ICpwaXhlbCA9ICh1aW50
MzJfdCAqKSByb3cgKyB4ICsgb3JpZ2lueDsKICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OwotICAgICAgICAgICAgaWYgKHVuc2lnbmVkIGludCBhbHBoYSA9ICgqcGl4ZWwgJiAweGZmMDAw
MDAwKSA+PiAyNCkgewotICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9ICgoKnBpeGVs
ICYgMHgwMGZmMDAwMCkgPj4gMTYpICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9ICgoKnBpeGVsICYgMHgwMDAwZmYwMCkgPj4gOCkgKiAyNTUgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKCpwaXhlbCAmIDB4
MDAwMDAwZmYpICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleF0gPSAoKnBpeGVsICYgMHgwMGZmMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9ICgqcGl4ZWwgJiAweDAwMDBmZjAwKSA+PiA4OwotICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoKnBpeGVsICYgMHgwMDAwMDBmZik7
Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgQ2Fpcm9Db2xvciBwaXhlbENvbG9yKHJvdyArIHggKyBvcmlnaW54
KTsKKyAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSAgICAgPSBwaXhlbENvbG9yLnJlZCgpOwor
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHBpeGVsQ29sb3IuZ3JlZW4oKTsKKyAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBwaXhlbENvbG9yLmJsdWUoKTsKKyAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBwaXhlbENvbG9yLmFscGhhKCk7CiAgICAgICAg
IH0KICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwogICAgIH0KQEAgLTE4NSwx
OCArMTc5LDEyIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShJbWFnZURhdGEKIAog
ICAgIHVuc2lnbmVkIGNoYXIqIHNyY1Jvd3MgPSBzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLT5kYXRh
KCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCBjaGFyICpyb3cg
PSBkYXRhRHN0ICsgc3RyaWRlICogKHkgKyBkZXN0eSk7CisgICAgICAgIHVpbnQzMl90KiByb3cg
PSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGF0YURzdCArIHN0cmlkZSAqICh5ICsgZGVz
dHkpKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAg
ICAgICAgICAgIHVpbnQzMl90ICpwaXhlbCA9ICh1aW50MzJfdCAqKSByb3cgKyB4ICsgZGVzdHg7
Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAy
NTUpIHsKLSAgICAgICAgICAgICAgICAqcGl4ZWwgPSBhbHBoYSA8PCAyNCB8IAotICAgICAgICAg
ICAgICAgICAgICAgICAgICgoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTUpIDw8
IDE2IHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBh
bHBoYSArIDI1NCkgLyAyNTUpIDw8IDggfCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKHNy
Y1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NSk7Ci0gICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAqcGl4ZWwgPSBhbHBoYSA8PCAyNCB8IHNyY1Jvd3NbYmFzZXhd
IDw8IDE2IHwgc3JjUm93c1tiYXNleCArIDFdIDw8IDggfCBzcmNSb3dzW2Jhc2V4ICsgMl07Cisg
ICAgICAgICAgICBBUkdCMzIgcGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7CisgICAgICAgICAgICBD
YWlyb0NvbG9yIHBpeGVsQ29sb3I7CisgICAgICAgICAgICBwaXhlbENvbG9yLnNldFJnYmEocmVp
bnRlcnByZXRfY2FzdDxBUkdCMzI+KCZzcmNSb3dzW3ggKiA0XSkpOworICAgICAgICAgICAgcGl4
ZWxDb2xvci5wcmVNdWxpdHBseUFSR0IocGl4ZWwpOwogICAgICAgICB9CiAgICAgICAgIHNyY1Jv
d3MgKz0gc3JjQnl0ZXNQZXJSb3c7CiAgICAgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiA0MTM2MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDYgKzMxLDcgQEAKICNpZiBQTEFURk9STShDQUlSTykKIAogI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiQ2Fpcm9Db2xvci5oIgogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlT2JzZXJ2ZXIuaCIKQEAgLTE4MSw5ICsxODMsMjkgQEAgdm9pZCBJbWFnZTo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KgogCiB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlk
Q29sb3IoKQogewotICAgIC8vIEZJWE1FOiBJdCdzIGVhc3kgdG8gaW1wbGVtZW50IHRoaXMgb3B0
aW1pemF0aW9uLiBKdXN0IG5lZWQgdG8gY2hlY2sgdGhlIFJHQkEzMiBidWZmZXIgdG8gc2VlIGlm
IGl0IGlzIDF4MS4KICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwogICAgIG1fY2hlY2tlZEZv
clNvbGlkQ29sb3IgPSB0cnVlOworCisgICAgaWYgKGZyYW1lQ291bnQoKSA+IDEpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKGZyYW1lQXRJbmRl
eCgwKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKKworICAgIGNhaXJvX3N1cmZhY2Vf
dCogZnJhbWVTdXJmYWNlID0gZnJhbWVBdEluZGV4KDApOworICAgIGlmICghZnJhbWVTdXJmYWNl
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChmcmFtZVN1cmZhY2UpOworICAgIGludCBoZWlnaHQgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9oZWlnaHQoZnJhbWVTdXJmYWNlKTsKKworICAgIGlmICh3aWR0aCAhPSAxIHx8
IGhlaWdodCAhPSAxKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzU29saWRDb2xvciA9IHRy
dWU7CisKKyAgICBDYWlyb0NvbG9yIHBpeGVsQ29sb3IocmVpbnRlcnByZXRfY2FzdDxBUkdCMzI+
KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoZnJhbWVTdXJmYWNlKSkpOworCisgICAgbV9z
b2xpZENvbG9yID0gcGl4ZWxDb2xvci5jb2xvcigpOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28279</attachid>
            <date>2009-03-04 12:11:11 -0800</date>
            <delta_ts>2009-03-05 08:33:29 -0800</delta_ts>
            <desc>single pixel optimization with CairoColor</desc>
            <filename>cairo-singlePixel2.patch</filename>
            <type>text/plain</type>
            <size>9939</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTQyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDMtMDQgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBs
ZW1lbnQgdGhlIENhaXJvIHZlcnNpb24gb2YgdGhlIGNoZWNrRm9yU29saWRDb2xvcigpIG1ldGhv
ZC4gVGhpcyBoYWxmZXMgdGhlCisgICAgICAgIHRpbWUgdG8gZHJhdy4KKyAgICAgICAgSSBhZGRl
ZCBzb21lIG5ldyBjYWxscyB0byBDb2xvciBmb3IgdGhlIHBpeGVsIG1hbmlwdWxhdGlvbiBvbiBj
YWlyb19zdXJmYWNlJ3MuCisKKyAgICAgICAgW0NBSVJPXSBJbnRyb2R1Y2Ugc2luZ2xlLXBpeGVs
IGltYWdlIG9wdGltaXphdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3Mjg0CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NvbG9yQ2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cHJlTXVsaXRwbHlBUkdCKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKToKKwogMjAwOS0wMy0wNCAgQnJhZHkgRWlkc29uICA8YmVpZHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIKSW5kZXg6IFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkocmV2aXNpb24gNDEzNjEpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzI3LDYgKzE3MjcsNyBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcCBcCiAJV2ViQ29yZS9wYWdlL2d0ay9GcmFt
ZUd0ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9QYXRoLmgg
XAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29sb3JDYWlyby5jcHAgXAogCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgXApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gNDEzNjEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDExIEBAIFFU
X0VORF9OQU1FU1BBQ0UKIHR5cGVkZWYgc3RydWN0IF9HZGtDb2xvciBHZGtDb2xvcjsKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oQ0FJUk8pCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKK3R5
cGVkZWYgdWludDMyX3QqIENhaXJvQ29sb3I7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdYKQog
Y2xhc3Mgd3hDb2xvdXI7CiAjZW5kaWYKQEAgLTExMSw2ICsxMTYsMTEgQEAgcHVibGljOgogICAg
IC8vIFdlIGNhbid0IHNlbnNpYmx5IGdvIGJhY2sgdG8gR2RrQ29sb3Igd2l0aG91dCBsb3Npbmcg
dGhlIGFscGhhIHZhbHVlCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENBSVJPKQorICAgIENvbG9y
KGNvbnN0IENhaXJvQ29sb3ImKTsKKyAgICB2b2lkIHByZU11bGl0cGx5QVJHQihDYWlyb0NvbG9y
IHBpeGVsKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV1gpCiAgICAgQ29sb3IoY29uc3Qgd3hD
b2xvdXImKTsKICAgICBvcGVyYXRvciB3eENvbG91cigpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db2xvckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbG9yQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db2xvckNhaXJvLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29sb3I6
OkNvbG9yKGNvbnN0IENhaXJvQ29sb3ImIHBpeGVsQ29sb3IpIDogbV92YWxpZCh0cnVlKQorewor
ICAgIGlmICh1bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWxDb2xvciAmIDB4ZmYwMDAwMDApID4+IDI0
KSB7CisgICAgICAgIG1fY29sb3IgPSBtYWtlUkdCQSgoKCpwaXhlbENvbG9yICYgMHgwMGZmMDAw
MCkgPj4gMTYpICogMjU1IC8gYWxwaGEsCisgICAgICAgICAgICAoKCpwaXhlbENvbG9yICYgMHgw
MDAwZmYwMCkgPj4gOCkgKiAyNTUgLyBhbHBoYSwKKyAgICAgICAgICAgICgqcGl4ZWxDb2xvciAm
IDB4MDAwMDAwZmYpICogMjU1IC8gYWxwaGEsCisgICAgICAgICAgICBhbHBoYSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9jb2xvciA9IG1ha2VSR0JBKCgqcGl4ZWxDb2xvciAmIDB4MDBmZjAw
MDApID4+IDE2LAorICAgICAgICAgICAgKCpwaXhlbENvbG9yICYgMHgwMDAwZmYwMCkgPj4gOCwK
KyAgICAgICAgICAgICgqcGl4ZWxDb2xvciAmIDB4MDAwMDAwZmYpLAorICAgICAgICAgICAgYWxw
aGEpOworICAgIH0KK30KKwordm9pZCBDb2xvcjo6cHJlTXVsaXRwbHlBUkdCKENhaXJvQ29sb3Ig
cGl4ZWwpCit7CisgICAgaWYgKGFscGhhKCkpIHsKKyAgICAgICAgKnBpeGVsID0gYWxwaGEoKSA8
PCAyNCB8CisgICAgICAgICAgICAgKChyZWQoKSAqIGFscGhhKCkgICsgMjU0KSAvIDI1NSkgPDwg
MTYgfCAKKyAgICAgICAgICAgICAoKGdyZWVuKCkgKiBhbHBoYSgpICArIDI1NCkgLyAyNTUpIDw8
IDggfCAKKyAgICAgICAgICAgICAoKGJsdWUoKSAqIGFscGhhKCkgICsgMjU0KSAvIDI1NSk7Cisg
ICAgfSBlbHNlCisgICAgICAgICpwaXhlbCA9IGFscGhhKCkgIDw8IDI0IHwgcmVkKCkgPDwgMTYg
fCBncmVlbigpIDw8IDggfCBibHVlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAkocmV2aXNpb24gNDEzNjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtMTI2LDIxICsx
MjcsMTQgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbQogCiAgICAg
dW5zaWduZWQgY2hhciogZGVzdFJvd3MgPSBkYXRhRHN0ICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJS
b3cgKyBkZXN0eCAqIDQ7CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsK
LSAgICAgICAgdW5zaWduZWQgY2hhciAqcm93ID0gZGF0YVNyYyArIHN0cmlkZSAqICh5ICsgb3Jp
Z2lueSk7CisgICAgICAgIHVpbnQzMl90KiByb3cgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oZGF0YVNyYyArIHN0cmlkZSAqICh5ICsgb3JpZ2lueSkpOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgdWludDMyX3QgKnBpeGVs
ID0gKHVpbnQzMl90ICopIHJvdyArIHggKyBvcmlnaW54OwogICAgICAgICAgICAgaW50IGJhc2V4
ID0geCAqIDQ7Ci0gICAgICAgICAgICBpZiAodW5zaWduZWQgaW50IGFscGhhID0gKCpwaXhlbCAm
IDB4ZmYwMDAwMDApID4+IDI0KSB7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0g
KCgqcGl4ZWwgJiAweDAwZmYwMDAwKSA+PiAxNikgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKCgqcGl4ZWwgJiAweDAwMDBmZjAwKSA+PiA4KSAq
IDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoKnBp
eGVsICYgMHgwMDAwMDBmZikgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4XSA9ICgqcGl4ZWwgJiAweDAwZmYwMDAwKSA+PiAxNjsKLSAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKCpwaXhlbCAmIDB4MDAwMGZmMDApID4+
IDg7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9ICgqcGl4ZWwgJiAweDAw
MDAwMGZmKTsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yKHJvdyArIHggKyBvcmln
aW54KTsKKyAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSAgICAgPSBwaXhlbENvbG9yLnJlZCgp
OworICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHBpeGVsQ29sb3IuZ3JlZW4oKTsK
KyAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBwaXhlbENvbG9yLmJsdWUoKTsKKyAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBwaXhlbENvbG9yLmFscGhhKCk7CiAgICAg
ICAgIH0KICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwogICAgIH0KQEAgLTE4
NSwxOCArMTc5LDEyIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShJbWFnZURhdGEK
IAogICAgIHVuc2lnbmVkIGNoYXIqIHNyY1Jvd3MgPSBzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLT5k
YXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCBjaGFyICpy
b3cgPSBkYXRhRHN0ICsgc3RyaWRlICogKHkgKyBkZXN0eSk7CisgICAgICAgIHVpbnQzMl90KiBy
b3cgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGF0YURzdCArIHN0cmlkZSAqICh5ICsg
ZGVzdHkpKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsK
LSAgICAgICAgICAgIHVpbnQzMl90ICpwaXhlbCA9ICh1aW50MzJfdCAqKSByb3cgKyB4ICsgZGVz
dHg7CiAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGludCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgIGlmIChhbHBoYSAh
PSAyNTUpIHsKLSAgICAgICAgICAgICAgICAqcGl4ZWwgPSBhbHBoYSA8PCAyNCB8IAotICAgICAg
ICAgICAgICAgICAgICAgICAgICgoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTUp
IDw8IDE2IHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKChzcmNSb3dzW2Jhc2V4ICsgMV0g
KiBhbHBoYSArIDI1NCkgLyAyNTUpIDw8IDggfCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAo
KHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NSk7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAqcGl4ZWwgPSBhbHBoYSA8PCAyNCB8IHNyY1Jvd3NbYmFz
ZXhdIDw8IDE2IHwgc3JjUm93c1tiYXNleCArIDFdIDw8IDggfCBzcmNSb3dzW2Jhc2V4ICsgMl07
CisgICAgICAgICAgICBDYWlyb0NvbG9yIHBpeGVsID0gcm93ICsgeCArIGRlc3R4OworICAgICAg
ICAgICAgQ29sb3IgcGl4ZWxDb2xvcihzcmNSb3dzW2Jhc2V4XSwgc3JjUm93c1tiYXNleCArIDFd
LCBzcmNSb3dzW2Jhc2V4ICsgMl0sIHNyY1Jvd3NbYmFzZXggKyAzXSk7CisgICAgICAgICAgICBw
aXhlbENvbG9yLnByZU11bGl0cGx5QVJHQihwaXhlbCk7CiAgICAgICAgIH0KICAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDQxMzYxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksMTAgKzMwLDExIEBACiAKICNpZiBQTEFURk9STShDQUlSTykKIAotI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbWFnZU9ic2VydmVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNp
bmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPG1hdGguaD4KIApAQCAtMTgxLDkgKzE4MywyNyBA
QCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAKIHZvaWQgQml0bWFw
SW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiB7Ci0gICAgLy8gRklYTUU6IEl0J3MgZWFzeSB0
byBpbXBsZW1lbnQgdGhpcyBvcHRpbWl6YXRpb24uIEp1c3QgbmVlZCB0byBjaGVjayB0aGUgUkdC
QTMyIGJ1ZmZlciB0byBzZWUgaWYgaXQgaXMgMXgxLgogICAgIG1faXNTb2xpZENvbG9yID0gZmFs
c2U7CiAgICAgbV9jaGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7CisKKyAgICBpZiAoZnJhbWVD
b3VudCgpID4gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vf
Z2V0X3R5cGUoZnJhbWVBdEluZGV4KDApKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOwor
CisgICAgY2Fpcm9fc3VyZmFjZV90KiBmcmFtZVN1cmZhY2UgPSBmcmFtZUF0SW5kZXgoMCk7Cisg
ICAgaWYgKCFmcmFtZVN1cmZhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB3aWR0aCA9
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGZyYW1lU3VyZmFjZSk7CisgICAgaW50IGhl
aWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChmcmFtZVN1cmZhY2UpOworCisg
ICAgaWYgKHdpZHRoICE9IDEgfHwgaGVpZ2h0ICE9IDEpCisgICAgICAgIHJldHVybjsKKworICAg
IG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKKworICAgIG1fc29saWRDb2xvciA9IENvbG9yKHJlaW50
ZXJwcmV0X2Nhc3Q8Q2Fpcm9Db2xvcj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShmcmFt
ZVN1cmZhY2UpKSk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28302</attachid>
            <date>2009-03-05 08:33:29 -0800</date>
            <delta_ts>2009-03-05 12:25:57 -0800</delta_ts>
            <desc>single pixel optimization with Color</desc>
            <filename>cairo-singlePixel3.patch</filename>
            <type>text/plain</type>
            <size>8314</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTQ0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDMtMDQgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBs
ZW1lbnQgdGhlIENhaXJvIHZlcnNpb24gb2YgdGhlIGNoZWNrRm9yU29saWRDb2xvcigpIG1ldGhv
ZC4gVGhpcyBoYWxmZXMgdGhlCisgICAgICAgIHRpbWUgdG8gZHJhdyBvbiAxeDEgcHggYmFja2dy
b3VuZCBpbWFnZXMuCisgICAgICAgIEkgYWRkZWQgdHdvIG5ldyBjYWxscyB0byBDb2xvciBmb3Ig
dGhlIHBpeGVsIG1hbmlwdWxhdGlvbiBvbiBjYWlyb19zdXJmYWNlJ3MuCisgICAgICAgIFRoZXkg
YXJlIG5lZWRlIHRvIHByZW11bHRpcGx5L3VucHJlbXVsdGlwbHkgdGhlIGNvbG9ycyBvZiB0aGUg
c3VyZmFjZS4KKworICAgICAgICBbQ0FJUk9dIEludHJvZHVjZSBzaW5nbGUtcGl4ZWwgaW1hZ2Ug
b3B0aW1pemF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyODQKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKToKKyAgICAgICAgKFdl
YkNvcmU6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IpOgorCiAyMDA5LTAzLTA1
ICBYYW4gTG9wZXogIDx4YW5AZ25vbWUub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsg
Um93ZS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiA0MTM2
MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjEsNCArMzIxLDM0IEBAIHZvaWQgQ29sb3I6OmdldFJHQkEoZG91YmxlJiByLCBkb3Vi
bGUmIGcKICAgICBhID0gYWxwaGEoKSAvIDI1NS4wOwogfQogCitDb2xvciBjb2xvckZyb21QcmVt
dWx0aXBsaWVkQVJHQih1bnNpZ25lZCBwaXhlbENvbG9yKQoreworICAgIFJHQkEzMiByZ2JhOwor
CisgICAgaWYgKHVuc2lnbmVkIGFscGhhID0gKHBpeGVsQ29sb3IgJiAweEZGMDAwMDAwKSA+PiAy
NCkgeworICAgICAgICByZ2JhID0gbWFrZVJHQkEoKChwaXhlbENvbG9yICYgMHgwMEZGMDAwMCkg
Pj4gMTYpICogMjU1IC8gYWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAoKHBpeGVsQ29s
b3IgJiAweDAwMDBGRjAwKSA+PiA4KSAqIDI1NSAvIGFscGhhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIChwaXhlbENvbG9yICYgMHgwMDAwMDBGRikgKiAyNTUgLyBhbHBoYSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWxwaGEpOworICAgIH0gZWxzZQorICAgICAgICByZ2JhID0gcGl4
ZWxDb2xvcjsKKworICAgIHJldHVybiBDb2xvcihyZ2JhKTsKK30KKwordW5zaWduZWQgcHJlbXVs
dGlwbGllZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIHVuc2lnbmVk
IHBpeGVsQ29sb3I7CisKKyAgICBpZiAodW5zaWduZWQgYWxwaGEgPSBjb2xvci5hbHBoYSgpKSB7
CisgICAgICAgIHBpeGVsQ29sb3IgPSBhbHBoYSA8PCAyNCB8CisgICAgICAgICAgICAgKChjb2xv
ci5yZWQoKSAqIGFscGhhICArIDI1NCkgLyAyNTUpIDw8IDE2IHwgCisgICAgICAgICAgICAgKChj
b2xvci5ncmVlbigpICogYWxwaGEgICsgMjU0KSAvIDI1NSkgPDwgOCB8IAorICAgICAgICAgICAg
ICgoY29sb3IuYmx1ZSgpICogYWxwaGEgICsgMjU0KSAvIDI1NSk7CisgICAgfSBlbHNlCisgICAg
ICAgICBwaXhlbENvbG9yID0gY29sb3IucmdiKCk7CisKKyAgICByZXR1cm4gcGl4ZWxDb2xvcjsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAkocmV2aXNpb24gNDEzNjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IENvbG9yJiBhLCBjCiB9CiAKIENvbG9yIGZvY3VzUmluZ0NvbG9yKCk7CitDb2xv
ciBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQihSR0JBMzIpOwordW5zaWduZWQgcHJlbXVsdGlw
bGllZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29sb3ImKTsKIAogI2lmIFBMQVRGT1JNKENHKQogQ0dD
b2xvclJlZiBjcmVhdGVDR0NvbG9yKGNvbnN0IENvbG9yJik7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHJldmlz
aW9uIDQxMzYxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZp
c2gub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IERpcmsgU2NodWx6ZSA8dmJzODVAZ214LmRl
PgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtMTI2LDIxICsxMjcsMTUg
QEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbQogCiAgICAgdW5zaWdu
ZWQgY2hhciogZGVzdFJvd3MgPSBkYXRhRHN0ICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBk
ZXN0eCAqIDQ7CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAg
ICAgdW5zaWduZWQgY2hhciAqcm93ID0gZGF0YVNyYyArIHN0cmlkZSAqICh5ICsgb3JpZ2lueSk7
CisgICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGF0
YVNyYyArIHN0cmlkZSAqICh5ICsgb3JpZ2lueSkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgdWludDMyX3QgKnBpeGVsID0gKHVp
bnQzMl90ICopIHJvdyArIHggKyBvcmlnaW54OwogICAgICAgICAgICAgaW50IGJhc2V4ID0geCAq
IDQ7Ci0gICAgICAgICAgICBpZiAodW5zaWduZWQgaW50IGFscGhhID0gKCpwaXhlbCAmIDB4ZmYw
MDAwMDApID4+IDI0KSB7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKCgqcGl4
ZWwgJiAweDAwZmYwMDAwKSA+PiAxNikgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gKCgqcGl4ZWwgJiAweDAwMDBmZjAwKSA+PiA4KSAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoKnBpeGVsICYg
MHgwMDAwMDBmZikgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4XSA9ICgqcGl4ZWwgJiAweDAwZmYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKCpwaXhlbCAmIDB4MDAwMGZmMDApID4+IDg7Ci0g
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9ICgqcGl4ZWwgJiAweDAwMDAwMGZm
KTsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsgb3JpZ2lueDsK
KyAgICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJH
QigqcGl4ZWwpOworICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdICAgICA9IHBpeGVsQ29sb3Iu
cmVkKCk7CisgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gcGl4ZWxDb2xvci5ncmVl
bigpOworICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHBpeGVsQ29sb3IuYmx1ZSgp
OworICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHBpeGVsQ29sb3IuYWxwaGEoKTsK
ICAgICAgICAgfQogICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgfQpA
QCAtMTg1LDE4ICsxODAsMTUgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdl
RGF0YQogCiAgICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRh
KCktPmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwogICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNo
YXIgKnJvdyA9IGRhdGFEc3QgKyBzdHJpZGUgKiAoeSArIGRlc3R5KTsKKyAgICAgICAgdW5zaWdu
ZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkYXRhRHN0ICsgc3RyaWRlICog
KHkgKyBkZXN0eSkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgr
KykgewotICAgICAgICAgICAgdWludDMyX3QgKnBpeGVsID0gKHVpbnQzMl90ICopIHJvdyArIHgg
KyBkZXN0eDsKICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5z
aWduZWQgaW50IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgaWYgKGFs
cGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICpwaXhlbCA9IGFscGhhIDw8IDI0IHwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgKChzcmNSb3dzW2Jhc2V4XSAqIGFscGhhICsgMjU0KSAv
IDI1NSkgPDwgMTYgfCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKHNyY1Jvd3NbYmFzZXgg
KyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NSkgPDwgOCB8IAotICAgICAgICAgICAgICAgICAgICAg
ICAgICgoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1KTsKLSAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICpwaXhlbCA9IGFscGhhIDw8IDI0IHwgc3JjUm93
c1tiYXNleF0gPDwgMTYgfCBzcmNSb3dzW2Jhc2V4ICsgMV0gPDwgOCB8IHNyY1Jvd3NbYmFzZXgg
KyAyXTsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHggKyBkZXN0eDsKKyAg
ICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3Ioc3JjUm93c1tiYXNleF0sCisgICAgICAgICAgICAg
ICAgICAgIHNyY1Jvd3NbYmFzZXggKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgc3JjUm93c1ti
YXNleCArIDJdLAorICAgICAgICAgICAgICAgICAgICBzcmNSb3dzW2Jhc2V4ICsgM10pOworICAg
ICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7
CiAgICAgICAgIH0KICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKICAgICB9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJ
KHJldmlzaW9uIDQxMzYxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTAgKzMwLDExIEBACiAKICNp
ZiBQTEFURk9STShDQUlSTykKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisj
aW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCisjaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPG1hdGgu
aD4KIApAQCAtMTgxLDkgKzE4MywyOCBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQqCiAKIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiB7Ci0g
ICAgLy8gRklYTUU6IEl0J3MgZWFzeSB0byBpbXBsZW1lbnQgdGhpcyBvcHRpbWl6YXRpb24uIEp1
c3QgbmVlZCB0byBjaGVjayB0aGUgUkdCQTMyIGJ1ZmZlciB0byBzZWUgaWYgaXQgaXMgMXgxLgog
ICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7CiAgICAgbV9jaGVja2VkRm9yU29saWRDb2xvciA9
IHRydWU7CisKKyAgICBpZiAoZnJhbWVDb3VudCgpID4gMSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoZnJhbWVBdEluZGV4KDApKSA9PSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpOworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBmcmFtZVN1cmZh
Y2UgPSBmcmFtZUF0SW5kZXgoMCk7CisgICAgaWYgKCFmcmFtZVN1cmZhY2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIGludCB3aWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGZy
YW1lU3VyZmFjZSk7CisgICAgaW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChmcmFtZVN1cmZhY2UpOworCisgICAgaWYgKHdpZHRoICE9IDEgfHwgaGVpZ2h0ICE9IDEp
CisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkKiBwaXhlbENvbG9yID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCo+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoZnJhbWVTdXJm
YWNlKSk7CisgICAgbV9zb2xpZENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBp
eGVsQ29sb3IpOworCisgICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOwogfQogCiB9Cg==
</data>
<flag name="review"
          id="13851"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>