<?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>17396</bug_id>
          
          <creation_ts>2008-02-16 15:15:58 -0800</creation_ts>
          <short_desc>[wx] wx has no mechanism for drawing unkerned text</short_desc>
          <delta_ts>2008-02-23 21:39:49 -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>WebKit wx</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>Wx</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kevin Ollivier">kevino</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>70887</commentid>
    <comment_count>0</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-02-16 15:15:58 -0800</bug_when>
    <thetext>Our current text drawing implementation using only wx APIs gives bad results on Windows and GTK, because it only offers the option of drawing text kerned, and we need non-kerned drawing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70888</commentid>
    <comment_count>1</comment_count>
      <attachid>19160</attachid>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-02-16 15:27:38 -0800</bug_when>
    <thetext>Created attachment 19160
Create a platform-dependent method that draws text without kerning</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71596</commentid>
    <comment_count>2</comment_count>
      <attachid>19160</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-23 09:33:41 -0800</bug_when>
    <thetext>Comment on attachment 19160
Create a platform-dependent method that draws text without kerning

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71671</commentid>
    <comment_count>3</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-02-23 21:39:49 -0800</bug_when>
    <thetext>Applied in r30539, thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19160</attachid>
            <date>2008-02-16 15:27:38 -0800</date>
            <delta_ts>2008-02-23 09:33:41 -0800</delta_ts>
            <desc>Create a platform-dependent method that draws text without kerning</desc>
            <filename>non-kerned-drawing.patch</filename>
            <type>text/plain</type>
            <size>18269</size>
            <attacher name="Kevin Ollivier">kevino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5n
ZUxvZwkocmV2aXNpb24gMzAzNDEpCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDgtMDItMTQgIEtldmluIE9sbGl2aWVyICA8a2V2aW5v
QHRoZW9sbGl2aWVycy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZSB0ZXh0IGRyYXdpbmcgaW50byB3eGNvZGUsIGFzIHdlIG5lZWQgcGxh
dGZvcm0tZGVwZW5kZW50CisgICAgICAgIEFQSXMgZm9yIGRyYXdpbmcgbm9uLWtlcm5lZCB0ZXh0
LCB3aGljaCB3eCBkb2Vzbid0IHlldCBoYXZlLgorICAgICAgICAoQnV0IGhvcGVmdWxseSB3aWxs
LCBvbmNlIHRoZXNlIEFQSXMgYXJlIGZsZXNoZWQgb3V0IG9uIGFsbCAKKyAgICAgICAgcGxhdGZv
cm1zISkKKworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzM5NgorCisgICAgICAgICogd3h3ZWJraXQuYmtsOgorICAgICAgICBXZSBuZWVkIHRvIGRpcmVj
dGx5IGxpbmsgYWdhaW5zdCBHREkrIG9uIFdpbmRvd3Mgc2luY2Ugd2Ugbm93CisgICAgICAgIGRp
cmVjdGx5IGNhbGwgR0RJKyBBUElzLgorCiAyMDA4LTAyLTE0ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICAqIFdlYlZpZXcuY3BwOiBSZW1vdmVkIHVzZSBvZiBEZXBy
ZWNhdGVkU3RyaW5nIHRvIGtlZXAgdGhpcyBjb21waWxpbmcuCkluZGV4OiBXZWJLaXQvd3gvd3h3
ZWJraXQuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC93eHdlYmtpdC5ia2wJKHJldmlzaW9u
IDMwMzQxKQorKysgV2ViS2l0L3d4L3d4d2Via2l0LmJrbAkod29ya2luZyBjb3B5KQpAQCAtNjks
NiArNjksNyBAQAogICAgICAgICA8L2lmPgogICAgICAgICA8aWYgY29uZD0iRk9STUFUIGluIFsn
bXN2YycsJ21zdnMyMDA1cHJqJ10iPgogICAgICAgICAgICAgPHN5cy1saWI+d2lubW08L3N5cy1s
aWI+IDwhLS0gZm9yIHRpbWVHZXRUaW1lIC0tPgorICAgICAgICAgICAgPHN5cy1saWI+Z2RpcGx1
czwvc3lzLWxpYj4KICAgICAgICAgICAgIDxzeXMtbGliPmxpYnBuZzwvc3lzLWxpYj4KICAgICAg
ICAgICAgIDxzeXMtbGliPmxpYmpwZWc8L3N5cy1saWI+CiAgICAgICAgIDwvaWY+CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250V3guY3BwCShyZXZpc2lvbiAzMDM0MSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFd4LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsOSArMzMsOSBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
U2ltcGxlRm9udERhdGEuaCIKIAotI2luY2x1ZGUgImZvbnRwcm9wcy5oIgotI2luY2x1ZGUgPHd4
L2RlZnMuaD4KICNpbmNsdWRlIDx3eC9kY2NsaWVudC5oPgorI2luY2x1ZGUgImZvbnRwcm9wcy5o
IgorI2luY2x1ZGUgIm5vbi1rZXJuZWQtZHJhd2luZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQ1LDMzICs0NSwxMSBAQAogICAgIC8vIHByZXBhcmUgREMKICAgICBDb2xvciBjb2xv
ciA9IGdyYXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yKCk7CiAKLSNpZiBVU0UoV1hHQykKLSAgICB3
eEdDREMqIGRjID0gKHd4R0NEQyopZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICB3eEZvbnQgd3hmb250ID0gZm9udC0+Z2V0V3hGb250KCk7Ci0gICAgaWYgKHd4Zm9udC5J
c09rKCkpCi0gICAgICAgIGRjLT5TZXRGb250KHd4Zm9udCk7Ci0gICAgZGMtPlNldFRleHRGb3Jl
Z3JvdW5kKGNvbG9yKTsKLSNlbHNlCi0gICAgd3hEQyogZGMgPSBncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwotICAgIGRjLT5TZXRUZXh0QmFja2dyb3VuZChjb2xvcik7Ci0gICAg
ZGMtPlNldFRleHRGb3JlZ3JvdW5kKGNvbG9yKTsKLSAgICBkYy0+U2V0Rm9udChmb250LT5nZXRX
eEZvbnQoKSk7Ci0jZW5kaWYKLQotICAgIC8vIGNvbnZlcnQgZ2x5cGhzIHRvIHd4U3RyaW5nCi0g
ICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29uc3RfY2FzdDxHbHlwaEJ1ZmZlckdseXBo
Kj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKLSAgICBpbnQgb2Zmc2V0ID0gcG9pbnQueCgp
OwotICAgIHd4U3RyaW5nIHRleHQgPSB3eEVtcHR5U3RyaW5nOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAgICB0ZXh0ID0gdGV4dC5BcHBlbmQo
KHd4Q2hhcilnbHlwaHNbaV0pOwotICAgICAgICBvZmZzZXQgKz0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KGZyb20gKyBpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gdGhlIHkgcG9pbnQgaXMgYWN0dWFs
bHkgdGhlIGJvdHRvbSBwb2ludCBvZiB0aGUgdGV4dCwgdHVybiBpdCBpbnRvIHRoZSB0b3AKLSAg
ICBmbG9hdCBoZWlnaHQgPSBmb250LT5hc2NlbnQoKSAtIGZvbnQtPmRlc2NlbnQoKTsKLSAgICB3
eENvb3JkIHlwb2ludCA9ICh3eENvb3JkKSAocG9pbnQueSgpIC0gaGVpZ2h0KTsKLSAgICAgCi0g
ICAgZGMtPkRyYXdUZXh0KHRleHQsICh3eENvb3JkKXBvaW50LngoKSwgeXBvaW50KTsKKyAgICAv
LyBXZSBjYW4ndCB1c2Ugd3ggZHJhd2luZyBtZXRob2RzIG9uIFdpbi9MaW51eCBiZWNhdXNlIHRo
ZXkgYXV0b21hdGljYWxseSBrZXJuIHRleHQKKyAgICAvLyBzbyB3ZSd2ZSBjcmVhdGVkIGEgZnVu
Y3Rpb24gd2l0aCBwbGF0Zm9ybSBkZXBlbmRlbnQgZHJhd2luZyBpbXBsZW1lbnRhdGlvbnMgdGhh
dAorICAgIC8vIHdpbGwgaG9wZWZ1bGx5IGJlIGZvbGRlZCBpbnRvIHd4IG9uY2UgdGhlIEFQSSBo
YXMgc29saWRpZmllZC4KKyAgICAvLyBzZWUgcGxhdGZvcm0vd3gvd3hjb2RlLzxwbGF0Zm9ybT4g
Zm9yIHRoZSBpbXBsZW1lbnRhdGlvbnMuCisgICAgZHJhd1RleHRXaXRoU3BhY2luZyhncmFwaGlj
c0NvbnRleHQsIGZvbnQsIGNvbG9yLCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2lu
dCk7CiB9CiAKIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvbm9uLWtlcm5l
ZC1kcmF3aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvbm9u
LWtlcm5lZC1kcmF3aW5nLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4
Y29kZS9ub24ta2VybmVkLWRyYXdpbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBXYXR0ZXJzLCBLZXZpbiBPbGxpdmllci4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8NCisNCisjaW5jbHVkZSAiRm9udC5oIg0KKyNpbmNs
dWRlICJHbHlwaEJ1ZmZlci5oIg0KKw0KKyNpbmNsdWRlIDx3eC9kZWZzLmg+DQorI2luY2x1ZGUg
PHd4L2RjY2xpZW50Lmg+DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KKw0KK2V4dGVybiB2b2lk
IGRyYXdUZXh0V2l0aFNwYWNpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCB3eENvbG91ciYgY29sb3IsIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KTsNCisgICAgDQorfQ0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gv
d3hjb2RlL21hYy9jYXJib24vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL25vbi1rZXJuZWQtZHJhd2luZy5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9u
L25vbi1rZXJuZWQtZHJhd2luZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gV2F0dGVycywgS2V2aW4gT2xsaXZpZXIuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlIDx3eC9kZWZzLmg+CisjaW5jbHVkZSA8d3gv
ZGNjbGllbnQuaD4KKyNpbmNsdWRlIDx3eC9nZGljbW4uaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBkcmF3VGV4dFdpdGhTcGFjaW5nKEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29u
c3Qgd3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBm
cm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyNpZiBVU0Uo
V1hHQykKKyAgICB3eEdDREMqIGRjID0gc3RhdGljX2Nhc3Q8d3hHQ0RDKj4oZ3JhcGhpY3NDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisjZWxzZQorICAgIHd4REMqIGRjID0gZ3JhcGhpY3ND
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbmRpZgorCisgICAgd3hGb250IHd4Zm9udCA9
IGZvbnQtPmdldFd4Rm9udCgpOworICAgIGlmICh3eGZvbnQuSXNPaygpKQorICAgICAgICBkYy0+
U2V0Rm9udCh3eGZvbnQpOworICAgIGRjLT5TZXRUZXh0Rm9yZWdyb3VuZChjb2xvcik7CisKKyAg
ICAvLyBjb252ZXJ0IGdseXBocyB0byB3eFN0cmluZworICAgIEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocyA9IGNvbnN0X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVmZmVyLmdseXBocyhm
cm9tKSk7CisgICAgaW50IG9mZnNldCA9IHBvaW50LngoKTsKKyAgICB3eFN0cmluZyB0ZXh0ID0g
d3hFbXB0eVN0cmluZzsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBp
KyspIHsKKyAgICAgICAgdGV4dCA9IHRleHQuQXBwZW5kKCh3eENoYXIpZ2x5cGhzW2ldKTsKKyAg
ICAgICAgb2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9tICsgaSk7CisgICAgfQor
ICAgIAorICAgIC8vIHRoZSB5IHBvaW50IGlzIGFjdHVhbGx5IHRoZSBib3R0b20gcG9pbnQgb2Yg
dGhlIHRleHQsIHR1cm4gaXQgaW50byB0aGUgdG9wCisgICAgZmxvYXQgaGVpZ2h0ID0gZm9udC0+
YXNjZW50KCkgLSBmb250LT5kZXNjZW50KCk7CisgICAgd3hDb29yZCB5cG9pbnQgPSAod3hDb29y
ZCkgKHBvaW50LnkoKSAtIGhlaWdodCk7CisgICAgIAorICAgIGRjLT5EcmF3VGV4dCh0ZXh0LCAo
d3hDb29yZClwb2ludC54KCksIHlwb2ludCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vd3gvd3hjb2RlL2d0ay9ub24ta2VybmVkLWRyYXdpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2d0ay9ub24ta2VybmVkLWRyYXdpbmcuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvZ3RrL25vbi1rZXJuZWQtZHJh
d2luZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgS2V2aW4gV2F0dGVycywgS2V2aW4gT2xsaXZpZXIuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCisKKyNpbmNsdWRlIDx3eC9kZWZzLmg+CisjaW5jbHVkZSA8d3gvZGNjbGllbnQuaD4KKyNp
bmNsdWRlIDx3eC9nZGljbW4uaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBkcmF3VGV4dFdpdGhTcGFjaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3Qgd3hDb2xvdXImIGNv
bG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyNpZiBVU0UoV1hHQykKKyAgICB3eEdD
REMqIGRjID0gc3RhdGljX2Nhc3Q8d3hHQ0RDKj4oZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSk7CisjZWxzZQorICAgIHd4REMqIGRjID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKKyNlbmRpZgorCisgICAgd3hGb250IHd4Zm9udCA9IGZvbnQtPmdldFd4Rm9u
dCgpOworICAgIGlmICh3eGZvbnQuSXNPaygpKQorICAgICAgICBkYy0+U2V0Rm9udCh3eGZvbnQp
OworICAgIGRjLT5TZXRUZXh0Rm9yZWdyb3VuZChjb2xvcik7CisKKyAgICAvLyBjb252ZXJ0IGds
eXBocyB0byB3eFN0cmluZworICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGNvbnN0X2Nh
c3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSk7CisgICAgaW50
IG9mZnNldCA9IHBvaW50LngoKTsKKyAgICB3eFN0cmluZyB0ZXh0ID0gd3hFbXB0eVN0cmluZzsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBpKyspIHsKKyAgICAgICAg
dGV4dCA9IHRleHQuQXBwZW5kKCh3eENoYXIpZ2x5cGhzW2ldKTsKKyAgICAgICAgb2Zmc2V0ICs9
IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9tICsgaSk7CisgICAgfQorICAgIAorICAgIC8vIHRo
ZSB5IHBvaW50IGlzIGFjdHVhbGx5IHRoZSBib3R0b20gcG9pbnQgb2YgdGhlIHRleHQsIHR1cm4g
aXQgaW50byB0aGUgdG9wCisgICAgZmxvYXQgaGVpZ2h0ID0gZm9udC0+YXNjZW50KCkgLSBmb250
LT5kZXNjZW50KCk7CisgICAgd3hDb29yZCB5cG9pbnQgPSAod3hDb29yZCkgKHBvaW50LnkoKSAt
IGhlaWdodCk7CisgICAgIAorICAgIGRjLT5EcmF3VGV4dCh0ZXh0LCAod3hDb29yZClwb2ludC54
KCksIHlwb2ludCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3dp
bi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
d3gvd3hjb2RlL3dpbi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS93eC93eGNvZGUvd2luL25vbi1rZXJuZWQtZHJhd2luZy5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEtldmlu
IFdhdHRlcnMsIEtldmluIE9sbGl2aWVyLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVk
ZSA8d3gvZGVmcy5oPgorI2luY2x1ZGUgPHd4L2RjY2xpZW50Lmg+CisjaW5jbHVkZSA8d3gvZ2Rp
Y21uLmg+CisjaW5jbHVkZSA8dmVjdG9yPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBjb25zdGFudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworY29uc3QgZG91YmxlIFJBRDJERUcgPSAxODAuMCAvIE1fUEk7CisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIExvY2FsIGZ1bmN0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitz
dGF0aWMgaW5saW5lIGRvdWJsZSBkbWluKGRvdWJsZSBhLCBkb3VibGUgYikgeyByZXR1cm4gYSA8
IGIgPyBhIDogYjsgfQorc3RhdGljIGlubGluZSBkb3VibGUgZG1heChkb3VibGUgYSwgZG91Ymxl
IGIpIHsgcmV0dXJuIGEgPiBiID8gYSA6IGI7IH0KKworc3RhdGljIGlubGluZSBkb3VibGUgRGVn
VG9SYWQoZG91YmxlIGRlZykgeyByZXR1cm4gKGRlZyAqIE1fUEkpIC8gMTgwLjA7IH0KK3N0YXRp
YyBpbmxpbmUgZG91YmxlIFJhZFRvRGVnKGRvdWJsZSBkZWcpIHsgcmV0dXJuIChkZWcgKiAxODAu
MCkgLyBNX1BJOyB9CisKKyNpbmNsdWRlICJ3eC9tc3cvcHJpdmF0ZS5oIgorCisvLyBUT0RPIHJl
bW92ZSB0aGlzIGRlcGVuZGVuY3kgKGdkaXBsdXMgbmVlZHMgdGhlIG1hY3JvcykKKworI2lmbmRl
ZiBtYXgKKyNkZWZpbmUgbWF4KGEsYikgICAgICAgICAgICAoKChhKSA+IChiKSkgPyAoYSkgOiAo
YikpCisjZW5kaWYKKworI2lmbmRlZiBtaW4KKyNkZWZpbmUgbWluKGEsYikgICAgICAgICAgICAo
KChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisjZW5kaWYKKworI2luY2x1ZGUgImdkaXBsdXMuaCIK
KyAKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIGRyYXdUZXh0V2l0aFNwYWNpbmcoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
LCBjb25zdCB3eENvbG91ciYgY29sb3IsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworI2lm
IFVTRShXWEdDKQorICAgIHd4R0NEQyogZGMgPSBzdGF0aWNfY2FzdDx3eEdDREMqPihncmFwaGlj
c0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyNlbHNlCisgICAgd3hEQyogZGMgPSBncmFw
aGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCisKKyAgICAvLyBnZXQgdGhl
IG5hdGl2ZSBIREMgaGFuZGxlIHRvIGRyYXcgdXNpbmcgbmF0aXZlIEFQSXMKKyAgICBIREMgaGRj
ID0gMDsKKyNpZiBVU0UoV1hHQykKKyAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBkYy0+R2V0
R3JhcGhpY3NDb250ZXh0KCk7CisgICAgR2RpcGx1czo6R3JhcGhpY3MqIGc7CisgICAgaWYgKGdj
KSB7CisgICAgICAgIGcgPSAoR2RpcGx1czo6R3JhcGhpY3MqKWdjLT5HZXROYXRpdmVDb250ZXh0
KCk7CisgICAgICAgIGhkYyA9IGctPkdldEhEQygpOworICAgIH0KKyNlbHNlCisgICAgaGRjID0g
c3RhdGljX2Nhc3Q8SERDPihkYy0+R2V0SERDKCkpOworI2VuZGlmCisKKyAgICAvLyBFeHRUZXh0
T3V0IHdhbnRzIHRoZSBvZmZzZXRzIGFzIGFuIGFycmF5IG9mIGludHMsIHNvIGV4dHJhY3QgdGhl
bQorICAgIC8vIGZyb20gdGhlIGdseXBoIGJ1ZmZlcgorICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqICAgZ2x5cGhzICAgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSk7CisgICAgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pOwor
CisgICAgZmxvYXQgeSA9IHBvaW50LnkoKSAtIGZvbnQtPmFzY2VudCgpOworICAgIGZsb2F0IHgg
PSBwb2ludC54KCk7CisKKyAgICBpbnQqIHNwYWNpbmcgPSBuZXcgaW50W251bUdseXBocyAtIGZy
b21dOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkKKyAgICAg
ICAgc3BhY2luZ1tpXSA9IGFkdmFuY2VzW2ldLndpZHRoKCk7CisKKyAgICA6OlNlbGVjdE9iamVj
dChoZGMsIEdldEhmb250T2YoZm9udC0+Z2V0V3hGb250KCkpKTsKKworICAgIGlmIChjb2xvci5P
aygpKQorICAgICAgICA6OlNldFRleHRDb2xvcihoZGMsIGNvbG9yLkdldFBpeGVsKCkpOworCisg
ICAgLy8gZG8gbm90IGRyYXcgYmFja2dyb3VuZCBiZWhpbmQgY2hhcmFjdGVycworICAgIDo6U2V0
QmtNb2RlKGhkYywgVFJBTlNQQVJFTlQpOworCisgICAgLy8gZHJhdyB0ZXh0IHdpdGggb3B0aW9u
YWwgY2hhcmFjdGVyIHdpZHRocyBhcnJheQorICAgIHd4U3RyaW5nIHN0cmluZyA9IHd4U3RyaW5n
KCh3eENoYXIqKSgmZ2x5cGhzW2Zyb21dKSwgbnVtR2x5cGhzKTsKKyAgICA6OkV4dFRleHRPdXQo
aGRjLCB4LCB5LCAwLCBOVUxMLCBzdHJpbmcuY19zdHIoKSwgc3RyaW5nLmxlbmd0aCgpLCBzcGFj
aW5nKTsKKworICAgIDo6U2V0QmtNb2RlKGhkYywgVFJBTlNQQVJFTlQpOworCisgICAgI2lmIFVT
RShXWEdDKQorICAgICAgICBnLT5SZWxlYXNlSERDKGhkYyk7CisgICAgI2VuZGlmCisKKyAgICBk
ZWxldGUgW10gc3BhY2luZzsKK30KKworfQpJbmRleDogV2ViQ29yZS93ZWJjb3JlLXd4LmJrbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmNvcmUtd3guYmtsCShyZXZpc2lvbiAzMDM0MSkKKysr
IFdlYkNvcmUvd2ViY29yZS13eC5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxNCArMTAxLDE3
IEBACiAgICAgICAgIDxzZXQgdmFyPSJFWFRfU09VUkNFUyI+CiAgICAgICAgICAgICA8aWYgY29u
ZD0iV1hfUE9SVD09J2d0azInIj4KICAgICAgICAgICAgICAgICBwbGF0Zm9ybS93eC93eGNvZGUv
Z3RrL2ZvbnRwcm9wcy5jcHAKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS93eC93eGNvZGUvZ3Rr
L25vbi1rZXJuZWQtZHJhd2luZy5jcHAKICAgICAgICAgICAgICAgICBwbGF0Zm9ybS93eC9TaGFy
ZWRUaW1lcld4LmNwcAogICAgICAgICAgICAgPC9pZj4KICAgICAgICAgICAgIDxpZiBjb25kPSJX
WF9QT1JUPT0nbWFjJyI+CiAgICAgICAgICAgICAgICAgcGxhdGZvcm0vd3gvd3hjb2RlL21hYy9j
YXJib24vZm9udHByb3BzLmNwcAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL3d4L3d4Y29kZS9t
YWMvY2FyYm9uL25vbi1rZXJuZWQtZHJhd2luZy5jcHAKICAgICAgICAgICAgICAgICBwbGF0Zm9y
bS93eC9TaGFyZWRUaW1lcld4LmNwcAogICAgICAgICAgICAgPC9pZj4KICAgICAgICAgICAgIDxp
ZiBjb25kPSJXWF9QT1JUPT0nbXN3JyI+CiAgICAgICAgICAgICAgICAgcGxhdGZvcm0vd3gvd3hj
b2RlL3dpbi9mb250cHJvcHMuY3BwCisgICAgICAgICAgICAgICAgcGxhdGZvcm0vd3gvd3hjb2Rl
L3dpbi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCiAgICAgICAgICAgICAgICAgPCEtLSBncmFiIHRo
ZSB3aW5kb3dzIHBvcnQncyBTaGFyZWRUaW1lciBpbXBsZW1lbnRhdGlvbiAtLT4KICAgICAgICAg
ICAgICAgICBwbGF0Zm9ybS93aW4vU2hhcmVkVGltZXJXaW4uY3BwCiAgICAgICAgICAgICAgICAg
YnJpZGdlL3dpbi9QYWdlV2luLmNwcApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwMzQxKQorKysgV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSwyNyBAQAogMjAwOC0wMi0xNiAgS2V2aW4g
T2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRleHQgZHJhd2luZyBpbnRvIHd4Y29k
ZSwgYXMgd2UgbmVlZCBwbGF0Zm9ybS1kZXBlbmRlbnQKKyAgICAgICAgQVBJcyBmb3IgZHJhd2lu
ZyBub24ta2VybmVkIHRleHQsIHdoaWNoIHd4IGRvZXNuJ3QgeWV0IGhhdmUuCisgICAgICAgIChC
dXQgaG9wZWZ1bGx5IHdpbGwsIG9uY2UgdGhlc2UgQVBJcyBhcmUgZmxlc2hlZCBvdXQgb24gYWxs
IAorICAgICAgICBwbGF0Zm9ybXMhKQorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3Mzk2CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9G
b250V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAg
ICogcGxhdGZvcm0vd3gvd3hjb2RlL2d0ay9ub24ta2VybmVkLWRyYXdpbmcuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmRyYXdUZXh0V2l0aFNwYWNpbmcpOgorICAgICAgICAqIHBsYXRm
b3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL25vbi1rZXJuZWQtZHJhd2luZy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZHJhd1RleHRXaXRoU3BhY2luZyk6CisgICAgICAgICogcGxhdGZv
cm0vd3gvd3hjb2RlL25vbi1rZXJuZWQtZHJhd2luZy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS93eC93eGNvZGUvd2luL25vbi1rZXJuZWQtZHJhd2luZy5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6ZHJhd1RleHRXaXRoU3BhY2luZyk6CisgICAgICAgICogd2ViY29yZS13eC5i
a2w6CisKKzIwMDgtMDItMTYgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5j
b20+CisKICAgICAgICAgd3ggYnVpbGQgZml4LgogCiAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgo=
</data>
<flag name="review"
          id="8367"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>