<?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>24757</bug_id>
          
          <creation_ts>2009-03-23 08:01:41 -0700</creation_ts>
          <short_desc>Chromium port doesn&apos;t support opacity on complex text</short_desc>
          <delta_ts>2009-03-25 11:18:30 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</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="Brett Wilson (Google)">brettw</reporter>
          <assigned_to name="Brett Wilson (Google)">brettw</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>114766</commentid>
    <comment_count>0</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-03-23 08:01:41 -0700</bug_when>
    <thetext>It isn&apos;t hooked up to the TransparencyWin object which handles the text transparency.

Chromium bug: http://code.google.com/p/chromium/issues/detail?id=8768</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114767</commentid>
    <comment_count>1</comment_count>
      <attachid>28852</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-03-23 08:02:03 -0700</bug_when>
    <thetext>Created attachment 28852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114774</commentid>
    <comment_count>2</comment_count>
      <attachid>28852</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-23 08:52:00 -0700</bug_when>
    <thetext>Comment on attachment 28852
Patch

ChangeLog needed.

I&apos;m surprised there isn&apos;t a test to cover this already?

WK style is &quot;init()&quot;:
     void Init();

I&apos;m unclear as to why Init needs to be separate from construction?  (And I&apos;m also not sure why a generalized &quot;init&quot; function is preferred over the old initForGDI())

Otherwise this looks fine.  I think mostly it just needs a ChangeLog to document what you&apos;re doing (so the reviewer can more easily understand what you&apos;re doing). ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114775</commentid>
    <comment_count>3</comment_count>
      <attachid>28852</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-23 08:52:04 -0700</bug_when>
    <thetext>Comment on attachment 28852
Patch

This looks good, except for these nits:

Don&apos;t forget the ChangeLog entry.

&gt; +    TransparencyAwareFontPainter(GraphicsContext* context, const FloatPoint&amp; point);

No need for argument names in declaration unless they need additional explanation. 

&gt; +protected:
&gt; +    // Called by our subclass&apos; constructor to initialize GDI if necessary. This
&gt; +    // is a separate function so it can be called after the subclass finishes
&gt; +    // construction (it calls virtual functions).
&gt; +    void Init();

init();

&gt; + public:
&gt; +    TransparencyAwareGlyphPainter(GraphicsContext* context,
&gt; +                                  const SimpleFontData* font,
&gt; +                                  const GlyphBuffer&amp; glyphBuffer,
&gt; +                                  int from, int numGlyphs,
&gt; +                                  const FloatPoint&amp; point);

Same here, args don&apos;t need names, except for &quot;from&quot; and &quot;numGlyphs&quot;.

&gt; +    bool drawGlyphs(int numGlyphs, const WORD* glyphs, const int* advances,
&gt; +                    int startAdvance) const;

Ditto.
&gt; +    return IntRect(m_point.x() - (m_font-&gt;ascent() + m_font-&gt;descent()) / 2,
&gt; +                   m_point.y() - m_font-&gt;ascent() - m_font-&gt;lineGap(),
&gt; +                   totalWidth + m_font-&gt;ascent() + m_font-&gt;descent(),
&gt; +                   m_font-&gt;lineSpacing()); 

Is this computation the same for Uniscribe, just with different params? Maybe we could have a local static here to keep it in one place?

&gt; +    TransparencyAwareUniscribePainter(GraphicsContext* context,
&gt; +                                      const Font* font,
&gt; +                                      const TextRun&amp; run,
&gt; +                                      int from, int to,
&gt; +                                      const FloatPoint&amp; point);

Same here about args.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114782</commentid>
    <comment_count>4</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-03-23 09:09:36 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I&apos;m unclear as to why Init needs to be separate from construction?  (And I&apos;m
&gt; also not sure why a generalized &quot;init&quot; function is preferred over the old
&gt; initForGDI())

This is documented in the comment above the Init declaration:
+    // Called by our subclass&apos; constructor to initialize GDI if necessary. This
+    // is a separate function so it can be called after the subclass finishes
+    // construction (it calls virtual functions).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115181</commentid>
    <comment_count>5</comment_count>
      <attachid>28936</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-03-25 11:12:56 -0700</bug_when>
    <thetext>Created attachment 28936
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115183</commentid>
    <comment_count>6</comment_count>
      <attachid>28936</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-25 11:16:38 -0700</bug_when>
    <thetext>Comment on attachment 28936
Patch v2

Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115184</commentid>
    <comment_count>7</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-03-25 11:18:30 -0700</bug_when>
    <thetext>Fixed in r41978</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28852</attachid>
            <date>2009-03-23 08:02:03 -0700</date>
            <delta_ts>2009-03-25 11:12:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>complex.patch</filename>
            <type>text/plain</type>
            <size>19389</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9jb21wbGV4LXRleHQtb3BhY2l0eS5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2NvbXBsZXgtdGV4dC1vcGFjaXR5Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzg0YjhmZgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9jb21wbGV4LXRleHQtb3BhY2l0eS5odG1sCkBAIC0w
LDAgKzEsMTYgQEAKK++7vzxodG1sPjxib2R5PgorUGl4ZWwgdGVzdCBmb3IgY29tcGxleCB0ZXh0
IHJlbmRlcmluZyB3aXRoIG9wYWNpdHkgKENocm9taXVtIGJ1ZyA8YSBocmVmPSJodHRwOi8vY29k
ZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04NzY4Ij44NzY4PC9hPiku
PHA+Cis8ZGl2IHN0eWxlPSJmb250LXNpemU6MjVweDsiPgorPHNwYW4+4KSW4KWL4KSc4KWH4KSC
PC9zcGFuPgorPHNwYW4gc3R5bGU9Im9wYWNpdHk6MC45OyI+4KSW4KWL4KSc4KWH4KSCPC9zcGFu
PgorPHNwYW4gc3R5bGU9Im9wYWNpdHk6MC44OyI+4KSW4KWL4KSc4KWH4KSCPC9zcGFuPgorPHNw
YW4gc3R5bGU9Im9wYWNpdHk6MC43OyI+4KSW4KWL4KSc4KWH4KSCPC9zcGFuPgorPHNwYW4gc3R5
bGU9Im9wYWNpdHk6MC42OyI+4KSW4KWL4KSc4KWH4KSCPC9zcGFuPgorPHNwYW4gc3R5bGU9Im9w
YWNpdHk6MC41OyI+4KSW4KWL4KSc4KWH4KSCPC9zcGFuPgorPHNwYW4gc3R5bGU9Im9wYWNpdHk6
MC40OyI+4KSW4KWL4KSc4KWH4KSCPC9zcGFuPgorPHNwYW4gc3R5bGU9Im9wYWNpdHk6MC4zOyI+
4KSW4KWL4KSc4KWH4KSCPC9zcGFuPgorPHNwYW4gc3R5bGU9Im9wYWNpdHk6MC4yOyI+4KSW4KWL
4KSc4KWH4KSCPC9zcGFuPgorPHNwYW4gc3R5bGU9Im9wYWNpdHk6MC4xOyI+4KSW4KWL4KSc4KWH
4KSCPC9zcGFuPgorPHNwYW4gc3R5bGU9Im9wYWNpdHk6MC4wOyI+4KSW4KWL4KSc4KWH4KSCPC9z
cGFuPgorPC9kaXY+Cis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2Zhc3QvdGV4dC9jb21wbGV4LXRleHQtb3BhY2l0eS1leHBlY3RlZC5jaGVja3N1
bSBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3RleHQvY29tcGxleC10ZXh0LW9wYWNp
dHktZXhwZWN0ZWQuY2hlY2tzdW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YzhlNTM5NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0
L3RleHQvY29tcGxleC10ZXh0LW9wYWNpdHktZXhwZWN0ZWQuY2hlY2tzdW0KQEAgLTAsMCArMSBA
QAorMDI0NDgxNDhmOTY1N2ZhZTM3ZTY5NWEyZDg3NWJlNjcKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L2Nv
bXBsZXgtdGV4dC1vcGFjaXR5LWV4cGVjdGVkLnBuZyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9mYXN0L3RleHQvY29tcGxleC10ZXh0LW9wYWNpdHktZXhwZWN0ZWQucG5nCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNGY3OWQKQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBh
bmQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L2NvbXBsZXgtdGV4dC1vcGFj
aXR5LWV4cGVjdGVkLnBuZyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9mYXN0L3RleHQvY29tcGxleC10ZXh0LW9wYWNpdHktZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvdGV4dC9jb21wbGV4LXRleHQtb3BhY2l0eS1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2ZWM4MgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3RleHQvY29tcGxleC10
ZXh0LW9wYWNpdHktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNzkgQEAKK2xheWVyIGF0ICgwLDAp
IHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKKyAg
ICAgIFJlbmRlckJsb2NrIChhbm9ueW1vdXMpIGF0ICgwLDApIHNpemUgNzg0eDE4CisgICAgICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDQxOXgxOAorICAgICAgICAgIHRleHQg
cnVuIGF0ICgwLDApIHdpZHRoIDQxOTogIlBpeGVsIHRlc3QgZm9yIGNvbXBsZXggdGV4dCByZW5k
ZXJpbmcgd2l0aCBvcGFjaXR5IChDaHJvbWl1bSBidWcgIgorICAgICAgICBSZW5kZXJJbmxpbmUg
e0F9IGF0ICgwLDApIHNpemUgMzJ4MTggW2NvbG9yPSMwMDAwRUVdCisgICAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICg0MTksMCkgc2l6ZSAzMngxOAorICAgICAgICAgICAgdGV4dCBydW4g
YXQgKDQxOSwwKSB3aWR0aCAzMjogIjg3NjgiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoNDUxLDApIHNpemUgOXgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICg0NTEsMCkgd2lkdGgg
OTogIikuIgorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDM0KSBzaXplIDc4NHgwCisgICAg
ICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwzNCkgc2l6ZSA3ODR4MjkKKyAgICAgICAgUmVuZGVy
SW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDQzeDI5CisgICAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgNDN4MjkKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDAp
IHdpZHRoIDQzOiAiXHh7OTE2fVx4ezk0Qn1ceHs5MUN9XHh7OTQ3fVx4ezkwMn0iCisgICAgICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNDMsMCkgc2l6ZSA2eDI5CisgICAgICAgICAgdGV4dCBy
dW4gYXQgKDQzLDApIHdpZHRoIDY6ICIgIgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDkyLDApIHNpemUgNngyOQorICAgICAgICAgIHRleHQgcnVuIGF0ICg5MiwwKSB3aWR0aCA2OiAi
ICIKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgxNDEsMCkgc2l6ZSA2eDI5CisgICAg
ICAgICAgdGV4dCBydW4gYXQgKDE0MSwwKSB3aWR0aCA2OiAiICIKKyAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgxOTAsMCkgc2l6ZSA2eDI5CisgICAgICAgICAgdGV4dCBydW4gYXQgKDE5
MCwwKSB3aWR0aCA2OiAiICIKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgyMzksMCkg
c2l6ZSA2eDI5CisgICAgICAgICAgdGV4dCBydW4gYXQgKDIzOSwwKSB3aWR0aCA2OiAiICIKKyAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgyODgsMCkgc2l6ZSA2eDI5CisgICAgICAgICAg
dGV4dCBydW4gYXQgKDI4OCwwKSB3aWR0aCA2OiAiICIKKyAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgzMzcsMCkgc2l6ZSA2eDI5CisgICAgICAgICAgdGV4dCBydW4gYXQgKDMzNywwKSB3
aWR0aCA2OiAiICIKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgzODYsMCkgc2l6ZSA2
eDI5CisgICAgICAgICAgdGV4dCBydW4gYXQgKDM4NiwwKSB3aWR0aCA2OiAiICIKKyAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICg0MzUsMCkgc2l6ZSA2eDI5CisgICAgICAgICAgdGV4dCBy
dW4gYXQgKDQzNSwwKSB3aWR0aCA2OiAiICIKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICg0ODQsMCkgc2l6ZSA2eDI5CisgICAgICAgICAgdGV4dCBydW4gYXQgKDQ4NCwwKSB3aWR0aCA2
OiAiICIKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCitsYXll
ciBhdCAoOCw0Mikgc2l6ZSA0M3gyOQorICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNp
emUgNDN4MjkKKyAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDQ5LDApIHNpemUgNDN4MjkKKyAg
ICAgIHRleHQgcnVuIGF0ICg0OSwwKSB3aWR0aCA0MzogIlx4ezkxNn1ceHs5NEJ9XHh7OTFDfVx4
ezk0N31ceHs5MDJ9IgorbGF5ZXIgYXQgKDgsNDIpIHNpemUgNDN4MjkKKyAgUmVuZGVySW5saW5l
IHtTUEFOfSBhdCAoMCwwKSBzaXplIDQzeDI5CisgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg5
OCwwKSBzaXplIDQzeDI5CisgICAgICB0ZXh0IHJ1biBhdCAoOTgsMCkgd2lkdGggNDM6ICJceHs5
MTZ9XHh7OTRCfVx4ezkxQ31ceHs5NDd9XHh7OTAyfSIKK2xheWVyIGF0ICg4LDQyKSBzaXplIDQz
eDI5CisgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0M3gyOQorICAgIFJlbmRl
clRleHQgeyN0ZXh0fSBhdCAoMTQ3LDApIHNpemUgNDN4MjkKKyAgICAgIHRleHQgcnVuIGF0ICgx
NDcsMCkgd2lkdGggNDM6ICJceHs5MTZ9XHh7OTRCfVx4ezkxQ31ceHs5NDd9XHh7OTAyfSIKK2xh
eWVyIGF0ICg4LDQyKSBzaXplIDQzeDI5CisgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkg
c2l6ZSA0M3gyOQorICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMTk2LDApIHNpemUgNDN4MjkK
KyAgICAgIHRleHQgcnVuIGF0ICgxOTYsMCkgd2lkdGggNDM6ICJceHs5MTZ9XHh7OTRCfVx4ezkx
Q31ceHs5NDd9XHh7OTAyfSIKK2xheWVyIGF0ICg4LDQyKSBzaXplIDQzeDI5CisgIFJlbmRlcklu
bGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0M3gyOQorICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoMjQ1LDApIHNpemUgNDN4MjkKKyAgICAgIHRleHQgcnVuIGF0ICgyNDUsMCkgd2lkdGggNDM6
ICJceHs5MTZ9XHh7OTRCfVx4ezkxQ31ceHs5NDd9XHh7OTAyfSIKK2xheWVyIGF0ICg4LDQyKSBz
aXplIDQzeDI5CisgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0M3gyOQorICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMjk0LDApIHNpemUgNDN4MjkKKyAgICAgIHRleHQgcnVu
IGF0ICgyOTQsMCkgd2lkdGggNDM6ICJceHs5MTZ9XHh7OTRCfVx4ezkxQ31ceHs5NDd9XHh7OTAy
fSIKK2xheWVyIGF0ICg4LDQyKSBzaXplIDQzeDI5CisgIFJlbmRlcklubGluZSB7U1BBTn0gYXQg
KDAsMCkgc2l6ZSA0M3gyOQorICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMzQzLDApIHNpemUg
NDN4MjkKKyAgICAgIHRleHQgcnVuIGF0ICgzNDMsMCkgd2lkdGggNDM6ICJceHs5MTZ9XHh7OTRC
fVx4ezkxQ31ceHs5NDd9XHh7OTAyfSIKK2xheWVyIGF0ICg4LDQyKSBzaXplIDQzeDI5CisgIFJl
bmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0M3gyOQorICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMzkyLDApIHNpemUgNDN4MjkKKyAgICAgIHRleHQgcnVuIGF0ICgzOTIsMCkgd2lk
dGggNDM6ICJceHs5MTZ9XHh7OTRCfVx4ezkxQ31ceHs5NDd9XHh7OTAyfSIKK2xheWVyIGF0ICg4
LDQyKSBzaXplIDQzeDI5CisgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0M3gy
OQorICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNDQxLDApIHNpemUgNDN4MjkKKyAgICAgIHRl
eHQgcnVuIGF0ICg0NDEsMCkgd2lkdGggNDM6ICJceHs5MTZ9XHh7OTRCfVx4ezkxQ31ceHs5NDd9
XHh7OTAyfSIKK2xheWVyIGF0ICg4LDQyKSBzaXplIDQzeDI5CisgIFJlbmRlcklubGluZSB7U1BB
Tn0gYXQgKDAsMCkgc2l6ZSA0M3gyOQorICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNDkwLDAp
IHNpemUgNDN4MjkKKyAgICAgIHRleHQgcnVuIGF0ICg0OTAsMCkgd2lkdGggNDM6ICJceHs5MTZ9
XHh7OTRCfVx4ezkxQ31ceHs5NDd9XHh7OTAyfSIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAppbmRleCA3ZDNiZmQzLi5j
ZWYyNjY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRDaHJvbWl1bVdpbi5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2hyb21pdW1XaW4uY3BwCkBAIC01OCw1MyArNTgsMjQgQEAgYm9vbCBjYW52YXNIYXNN
dWx0aXBsZUxheWVycyhjb25zdCBTa0NhbnZhcyogY2FudmFzKQogICAgIHJldHVybiAhaXRlci5k
b25lKCk7ICAvLyBUaGVyZSBpcyA+IDEgbGF5ZXIgaWYgdGhlIHRoZSBpdGVyYXRvciBjYW4gc3Rp
bCBhZHZhbmNlLgogfQogCi0vLyBFc3RpbWF0ZXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgZ2l2
ZW4gdGV4dC4gVGhpcyBpcyBjb3BpZWQgZnJvbQotLy8gRm9udENHV2luLmNwcCwgaXQgaXMgcG9z
c2libGUsIGJ1dCBhIGxvdCBtb3JlIHdvcmssIHRvIGdldCB0aGUgcHJlY2lkZQotLy8gYm91bmRz
LgotSW50UmVjdCBlc3RpbWF0ZVRleHRCb3VuZHMoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewot
ICAgIGludCB0b3RhbFdpZHRoID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBo
czsgaSsrKQotICAgICAgICB0b3RhbFdpZHRoICs9IGxyb3VuZGYoZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KGZyb20gKyBpKSk7Ci0KLSAgICByZXR1cm4gSW50UmVjdChwb2ludC54KCkgLSAoZm9udC0+
YXNjZW50KCkgKyBmb250LT5kZXNjZW50KCkpIC8gMiwKLSAgICAgICAgICAgICAgICAgICBwb2lu
dC55KCkgLSBmb250LT5hc2NlbnQoKSAtIGZvbnQtPmxpbmVHYXAoKSwKLSAgICAgICAgICAgICAg
ICAgICB0b3RhbFdpZHRoICsgZm9udC0+YXNjZW50KCkgKyBmb250LT5kZXNjZW50KCksCi0gICAg
ICAgICAgICAgICAgICAgZm9udC0+bGluZVNwYWNpbmcoKSk7IAotfQotCiBjbGFzcyBUcmFuc3Bh
cmVuY3lBd2FyZUZvbnRQYWludGVyIHsKIHB1YmxpYzoKLSAgICBUcmFuc3BhcmVuY3lBd2FyZUZv
bnRQYWludGVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCk7Ci0g
ICAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCk7CisgICAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KTsKICAgICB+VHJhbnNwYXJlbmN5QXdh
cmVGb250UGFpbnRlcigpOwogCi0gICAgLy8gRHJhd3MgdGhlIHBhcnRpYWwgc3RyaW5nIG9mIGds
eXBocywgc3RhcnRpbmcgYXQgfHN0YXJ0QWR2YW5jZXwgdG8gdGhlCi0gICAgLy8gbGVmdCBvZiBt
X3BvaW50LiBXZSBleHByZXNzIGl0IHRoaXMgd2F5IHNvIHRoYXQgaWYgd2UncmUgdXNpbmcgdGhl
IFNraWEKLSAgICAvLyBkcmF3aW5nIHBhdGggd2UgY2FuIHVzZSBmbG9hdGluZy1wb2ludCBwb3Np
dGlvbmluZywgZXZlbiB0aG91Z2ggd2UgaGF2ZQotICAgIC8vIHRvIHVzZSBpbnRlZ2VyIHBvc2l0
aW9uaW5nIGluIHRoZSBHREkgcGF0aC4KLSAgICBib29sIGRyYXdHbHlwaHMoaW50IG51bUdseXBo
cywgY29uc3QgV09SRCogZ2x5cGhzLCBjb25zdCBpbnQqIGFkdmFuY2VzLAotICAgICAgICAgICAg
ICAgICAgICBpbnQgc3RhcnRBZHZhbmNlKSBjb25zdDsKK3Byb3RlY3RlZDoKKyAgICAvLyBDYWxs
ZWQgYnkgb3VyIHN1YmNsYXNzJyBjb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIEdESSBpZiBuZWNl
c3NhcnkuIFRoaXMKKyAgICAvLyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBj
YWxsZWQgYWZ0ZXIgdGhlIHN1YmNsYXNzIGZpbmlzaGVzCisgICAgLy8gY29uc3RydWN0aW9uIChp
dCBjYWxscyB2aXJ0dWFsIGZ1bmN0aW9ucykuCisgICAgdm9pZCBJbml0KCk7CiAKLXByaXZhdGU6
Ci0gICAgLy8gQ2FsbCB3aGVuIHdlJ3JlIHVzaW5nIEdESSBtb2RlIHRvIGluaXRpYWxpemUgdGhl
IFRyYW5zcGFyZW5jeVdpbiB0byBoZWxwCi0gICAgLy8gdXMgZHJhdyBHREkgdGV4dC4KLSAgICB2
b2lkIGluaXRpYWxpemVGb3JHREkoY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQg
ZnJvbSwgaW50IG51bUdseXBocyk7CisgICAgdmlydHVhbCBJbnRSZWN0IGVzdGltYXRlVGV4dEJv
dW5kcygpID0gMDsKIAogICAgIC8vIFVzZSB0aGUgY29udGV4dCBmcm9tIHRoZSB0cmFuc3BhcmVu
Y3kgaGVscGVyIHdoZW4gZHJhd2luZyB3aXRoIEdESS4gSXQKICAgICAvLyBtYXkgcG9pbnQgdG8g
YSB0ZW1wb3Jhcnkgb25lLgogICAgIEdyYXBoaWNzQ29udGV4dCogbV9ncmFwaGljc0NvbnRleHQ7
CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIG1fcGxhdGZvcm1Db250ZXh0OwogCi0gICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udDsKICAgICBGbG9hdFBvaW50IG1fcG9pbnQ7CiAK
ICAgICAvLyBTZXQgd2hlbiBXaW5kb3dzIGNhbiBoYW5kbGUgdGhlIHR5cGUgb2YgZHJhd2luZyB3
ZSdyZSBkb2luZy4KQEAgLTExMiwzMiArODMsMzQgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZXNl
IG1lbWJlcnMgYXJlIHZhbGlkIG9ubHkgd2hlbiBtX3VzZUdESSBpcyBzZXQuCiAgICAgSERDIG1f
aGRjOwotICAgIEhHRElPQkogbV9vbGRGb250OyAgLy8gRm9yIHJlc3RvcmluZyB0aGUgREMgdG8g
aXRzIG9yaWdpbmFsIHN0YXRlLgogICAgIFRyYW5zcGFyZW5jeVdpbiBtX3RyYW5zcGFyZW5jeTsK
KworcHJpdmF0ZToKKyAgICAvLyBDYWxsIHdoZW4gd2UncmUgdXNpbmcgR0RJIG1vZGUgdG8gaW5p
dGlhbGl6ZSB0aGUgVHJhbnNwYXJlbmN5V2luIHRvIGhlbHAKKyAgICAvLyB1cyBkcmF3IEdESSB0
ZXh0LgorICAgIHZvaWQgaW5pdGlhbGl6ZUZvckdESSgpOworCiAgICAgYm9vbCBtX2NyZWF0ZWRU
cmFuc3BhcmVuY3lMYXllcjsgIC8vIFdlIGNyZWF0ZWQgYSBsYXllciB0byBnaXZlIHRoZSBmb250
IHNvbWUgYWxwaGEuCiB9OwogCi1UcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3Bh
cmVuY3lBd2FyZUZvbnRQYWludGVyKAotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKLSAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKLSAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsCi0gICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCi0gICAgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCitUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lB
d2FyZUZvbnRQYWludGVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCiAgICAgOiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQogICAgICwgbV9w
bGF0Zm9ybUNvbnRleHQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCi0gICAgLCBtX2ZvbnQo
Zm9udCkKICAgICAsIG1fcG9pbnQocG9pbnQpCiAgICAgLCBtX3VzZUdESSh3aW5kb3dzQ2FuSGFu
ZGxlVGV4dERyYXdpbmcoY29udGV4dCkpCiAgICAgLCBtX2hkYygwKQotICAgICwgbV9vbGRGb250
KDApCiAgICAgLCBtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllcihmYWxzZSkKIHsKK30KKwordm9p
ZCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpJbml0KCkKK3sKICAgICBpZiAobV91c2VH
REkpCi0gICAgICAgIGluaXRpYWxpemVGb3JHREkoZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBo
cyk7CisgICAgICAgIGluaXRpYWxpemVGb3JHREkoKTsKIH0KIAotdm9pZCBUcmFuc3BhcmVuY3lB
d2FyZUZvbnRQYWludGVyOjppbml0aWFsaXplRm9yR0RJKGNvbnN0IEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocykKK3ZvaWQgVHJhbnNwYXJlbmN5QXdhcmVGb250
UGFpbnRlcjo6aW5pdGlhbGl6ZUZvckdESSgpCiB7CiAgICAgU2tDb2xvciBjb2xvciA9IG1fcGxh
dGZvcm1Db250ZXh0LT5lZmZlY3RpdmVGaWxsQ29sb3IoKTsKICAgICBpZiAoU2tDb2xvckdldEEo
Y29sb3IpICE9IDB4RkYpIHsKQEAgLTE1Nyw3ICsxMzAsNyBAQCB2b2lkIFRyYW5zcGFyZW5jeUF3
YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkoY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZgogICAgICAgICAvLyBlbmhhbmNlIHRoaXMgdG8gYWN0dWFsbHkgY2hlY2ssIHNpbmNlIGl0
IHdpbGwgb2Z0ZW4gYmUgb3BhcXVlCiAgICAgICAgIC8vIGFuZCB3ZSBjb3VsZCBkbyBDbGVhclR5
cGUgaW4gdGhhdCBjYXNlLgogICAgICAgICBsYXllck1vZGUgPSBUcmFuc3BhcmVuY3lXaW46OlRl
eHRDb21wb3NpdGU7Ci0gICAgICAgIGxheWVyUmVjdCA9IGVzdGltYXRlVGV4dEJvdW5kcyhtX2Zv
bnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIG1fcG9pbnQpOworICAgICAgICBsYXll
clJlY3QgPSBlc3RpbWF0ZVRleHRCb3VuZHMoKTsKIAogICAgICAgICAvLyBUaGUgdHJhbnNwYXJl
bmN5IGhlbHBlciByZXF1aXJlcyB0aGF0IHdlIGRyYXcgdGV4dCBpbiBibGFjayBpbgogICAgICAg
ICAvLyB0aGlzIG1vZGUgYW5kIGl0IHdpbGwgYXBwbHkgdGhlIGNvbG9yLgpAQCAtMTY3LDcgKzE0
MCw3IEBAIHZvaWQgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGlhbGl6ZUZvckdE
SShjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmCiAgICAgICAgIC8vIFdoZW4gd2UncmUgZHJh
d2luZyBhIHdlYiBwYWdlLCB3ZSBrbm93IHRoZSBiYWNrZ3JvdW5kIGlzIG9wYXF1ZSwKICAgICAg
ICAgLy8gYnV0IGlmIHdlJ3JlIGRyYXdpbmcgdG8gYSBsYXllciwgd2Ugc3RpbGwgbmVlZCBleHRy
YSB3b3JrLgogICAgICAgICBsYXllck1vZGUgPSBUcmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBv
c2l0ZUxheWVyOwotICAgICAgICBsYXllclJlY3QgPSBlc3RpbWF0ZVRleHRCb3VuZHMobV9mb250
LCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBtX3BvaW50KTsKKyAgICAgICAgbGF5ZXJS
ZWN0ID0gZXN0aW1hdGVUZXh0Qm91bmRzKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ29t
bW9uIGNhc2Ugb2YgZHJhd2luZyBvbnRvIHRoZSBib3R0b20gbGF5ZXIgb2YgYSB3ZWIgcGFnZTog
d2UKICAgICAgICAgLy8ga25vdyBldmVyeXRoaW5nIGlzIG9wYXF1ZSBzbyBkb24ndCBuZWVkIHRv
IGRvIGFueXRoaW5nIHNwZWNpYWwuCkBAIC0xNzcsNyArMTUwLDYgQEAgdm9pZCBUcmFuc3BhcmVu
Y3lBd2FyZUZvbnRQYWludGVyOjppbml0aWFsaXplRm9yR0RJKGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmYKIAogICAgIC8vIFNldCB1cCB0aGUgREMsIHVzaW5nIHRoZSBvbmUgZnJvbSB0aGUg
dHJhbnNwYXJlbmN5IGhlbHBlci4KICAgICBtX2hkYyA9IG1fdHJhbnNwYXJlbmN5LnBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKS0+YmVnaW5QbGF0Zm9ybVBhaW50KCk7Ci0gICAgbV9vbGRGb250
ID0gOjpTZWxlY3RPYmplY3QobV9oZGMsIG1fZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSk7
CiAgICAgU2V0VGV4dENvbG9yKG1faGRjLCBza2lhOjpTa0NvbG9yVG9DT0xPUlJFRihjb2xvcikp
OwogICAgIFNldEJrTW9kZShtX2hkYywgVFJBTlNQQVJFTlQpOwogfQpAQCAtMTg5LDE1ICsxNjEs
ODMgQEAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6flRyYW5zcGFyZW5jeUF3YXJlRm9u
dFBhaW50ZXIoKQogICAgIG1fdHJhbnNwYXJlbmN5LmNvbXBvc2l0ZSgpOwogICAgIGlmIChtX2Ny
ZWF0ZWRUcmFuc3BhcmVuY3lMYXllcikKICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQtPmVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7Ci0KLSAgICA6OlNlbGVjdE9iamVjdChtX2hkYywgbV9vbGRGb250
KTsKICAgICBtX3BsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCktPmVuZFBsYXRmb3JtUGFpbnQoKTsK
IH0KIAotYm9vbCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpkcmF3R2x5cGhzKGludCBu
dW1HbHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV09SRCogZ2x5cGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGludCogYWR2YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0QWR2YW5jZSkgY29uc3QKKy8vIFNwZWNpYWxp
emF0aW9uIGZvciBzaW1wbGUgR2x5cGhCdWZmZXIgcGFpbnRpbmcuCitjbGFzcyBUcmFuc3BhcmVu
Y3lBd2FyZUdseXBoUGFpbnRlciA6IHB1YmxpYyBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVy
IHsKKyBwdWJsaWM6CisgICAgVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCk7CisgICAgflRyYW5zcGFyZW5j
eUF3YXJlR2x5cGhQYWludGVyKCk7CisKKyAgICAvLyBEcmF3cyB0aGUgcGFydGlhbCBzdHJpbmcg
b2YgZ2x5cGhzLCBzdGFydGluZyBhdCB8c3RhcnRBZHZhbmNlfCB0byB0aGUKKyAgICAvLyBsZWZ0
IG9mIG1fcG9pbnQuIFdlIGV4cHJlc3MgaXQgdGhpcyB3YXkgc28gdGhhdCBpZiB3ZSdyZSB1c2lu
ZyB0aGUgU2tpYQorICAgIC8vIGRyYXdpbmcgcGF0aCB3ZSBjYW4gdXNlIGZsb2F0aW5nLXBvaW50
IHBvc2l0aW9uaW5nLCBldmVuIHRob3VnaCB3ZSBoYXZlCisgICAgLy8gdG8gdXNlIGludGVnZXIg
cG9zaXRpb25pbmcgaW4gdGhlIEdESSBwYXRoLgorICAgIGJvb2wgZHJhd0dseXBocyhpbnQgbnVt
R2x5cGhzLCBjb25zdCBXT1JEKiBnbHlwaHMsIGNvbnN0IGludCogYWR2YW5jZXMsCisgICAgICAg
ICAgICAgICAgICAgIGludCBzdGFydEFkdmFuY2UpIGNvbnN0OworCisgcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIEludFJlY3QgZXN0aW1hdGVUZXh0Qm91bmRzKCk7CisKKyAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogbV9mb250OworICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwor
ICAgIGludCBtX2Zyb207CisgICAgaW50IG1fbnVtR2x5cGhzOworCisgICAgLy8gV2hlbiBtX3Vz
ZUdkaSBpcyBzZXQsIHRoaXMgc3RvcmVzIHRoZSBwcmV2aW91cyBIRk9OVCBzZWxlY3RlZCBpbnRv
IHRoZQorICAgIC8vIG1faGRjIHNvIHdlIGNhbiByZXN0b3JlIGl0LgorICAgIEhHRElPQkogbV9v
bGRGb250OyAgLy8gRm9yIHJlc3RvcmluZyB0aGUgREMgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLgor
fTsKKworVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlR2x5
cGhQYWludGVyKAorICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udCwKKyAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCisg
ICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCisgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
CisgICAgOiBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKGNvbnRleHQsIHBvaW50KQorICAg
ICwgbV9mb250KGZvbnQpCisgICAgLCBtX2dseXBoQnVmZmVyKGdseXBoQnVmZmVyKQorICAgICwg
bV9mcm9tKGZyb20pCisgICAgLCBtX251bUdseXBocyhudW1HbHlwaHMpCisgICAgLCBtX29sZEZv
bnQoMCkKK3sKKyAgICBJbml0KCk7CisKKyAgICBtX29sZEZvbnQgPSA6OlNlbGVjdE9iamVjdCht
X2hkYywgbV9mb250LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKTsKK30KKworVHJhbnNwYXJlbmN5
QXdhcmVHbHlwaFBhaW50ZXI6On5UcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcigpCit7Cisg
ICAgaWYgKG1fdXNlR0RJKQorICAgICAgICA6OlNlbGVjdE9iamVjdChtX2hkYywgbV9vbGRGb250
KTsKK30KKworCisvLyBFc3RpbWF0ZXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgZ2l2ZW4gdGV4
dC4gVGhpcyBpcyBjb3BpZWQgZnJvbQorLy8gRm9udENHV2luLmNwcCwgaXQgaXMgcG9zc2libGUs
IGJ1dCBhIGxvdCBtb3JlIHdvcmssIHRvIGdldCB0aGUgcHJlY2lkZQorLy8gYm91bmRzLgorSW50
UmVjdCBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZXN0aW1hdGVUZXh0Qm91bmRzKCkK
K3sKKyAgICBpbnQgdG90YWxXaWR0aCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251
bUdseXBoczsgaSsrKQorICAgICAgICB0b3RhbFdpZHRoICs9IGxyb3VuZGYobV9nbHlwaEJ1ZmZl
ci5hZHZhbmNlQXQobV9mcm9tICsgaSkpOworCisgICAgcmV0dXJuIEludFJlY3QobV9wb2ludC54
KCkgLSAobV9mb250LT5hc2NlbnQoKSArIG1fZm9udC0+ZGVzY2VudCgpKSAvIDIsCisgICAgICAg
ICAgICAgICAgICAgbV9wb2ludC55KCkgLSBtX2ZvbnQtPmFzY2VudCgpIC0gbV9mb250LT5saW5l
R2FwKCksCisgICAgICAgICAgICAgICAgICAgdG90YWxXaWR0aCArIG1fZm9udC0+YXNjZW50KCkg
KyBtX2ZvbnQtPmRlc2NlbnQoKSwKKyAgICAgICAgICAgICAgICAgICBtX2ZvbnQtPmxpbmVTcGFj
aW5nKCkpOyAKK30KKworYm9vbCBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZHJhd0ds
eXBocyhpbnQgbnVtR2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXT1JEKiBnbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCogYWR2YW5jZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydEFkdmFuY2UpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX3VzZUdESSkgewogICAgICAgICBTa1BvaW50IG9yaWdpbiA9IG1fcG9p
bnQ7CkBAIC0yMTMsNiArMjUzLDY5IEBAIGJvb2wgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cjo6ZHJhd0dseXBocyhpbnQgbnVtR2x5cGhzLAogICAgIHJldHVybiAhIUV4dFRleHRPdXQobV9o
ZGMsIHgsIHksIEVUT19HTFlQSF9JTkRFWCwgMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB3Y2hh
cl90Kj4oJmdseXBoc1swXSksIG51bUdseXBocywgJmFkdmFuY2VzWzBdKTsKIH0KIAorCitjbGFz
cyBUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIgOiBwdWJsaWMgVHJhbnNwYXJlbmN5
QXdhcmVGb250UGFpbnRlciB7CisgcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2Ny
aWJlUGFpbnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRSdW4mIHJ1biwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOworICAgIH5UcmFu
c3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIoKTsKKworICAgIC8vIFVuaXNjaWJlIHdpbGwg
ZHJhdyBkaXJlY3RseSBpbnRvIG91ciBidWZmZXIsIHNvIHdlIG5lZWQgdG8gZXhwb3NlIG91ciBE
Qy4KKyAgICBIREMgaGRjKCkgY29uc3QgeyByZXR1cm4gbV9oZGM7IH0KKworIHByaXZhdGU6Cisg
ICAgdmlydHVhbCBJbnRSZWN0IGVzdGltYXRlVGV4dEJvdW5kcygpOworCisgICAgY29uc3QgRm9u
dCogbV9mb250OworICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOworICAgIGludCBtX2Zyb207Cisg
ICAgaW50IG1fdG87Cit9OworCitUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXI6OlRy
YW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigKKyAgICBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsCisgICAgY29uc3QgRm9udCogZm9udCwKKyAgICBjb25zdCBUZXh0UnVuJiBydW4sCisg
ICAgaW50IGZyb20sIGludCB0bywKKyAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICA6
IFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoY29udGV4dCwgcG9pbnQpCisgICAgLCBtX2Zv
bnQoZm9udCkKKyAgICAsIG1fcnVuKHJ1bikKKyAgICAsIG1fZnJvbShmcm9tKQorICAgICwgbV90
byh0bykKK3sKKyAgICBJbml0KCk7Cit9CisKK1RyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFp
bnRlcjo6flRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigpCit7Cit9CisKK0ludFJl
Y3QgVHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjplc3RpbWF0ZVRleHRCb3VuZHMo
KQoreworICAgIC8vIFRoaXMgY2FzZSByZWFsbHkgcmVhbGx5IHN1Y2tzLiBUaGVyZSBpcyBubyBj
b252ZW5pZW50IHdheSB0byBlc3RpbWF0ZQorICAgIC8vIHRoZSBib3VuZGluZyBib3guIFNvIHdl
IHJ1biBVbmlzY3JpYmUgdHdpY2UuIElmIHdlIGZpbmQgdGhpcyBoYXBwZW5zIGEKKyAgICAvLyBs
b3QsIHRoZSB3YXkgdG8gZml4IGl0IGlzIHRvIG1ha2UgdGhlIGV4dHJhIGxheWVyIGFmdGVyIHRo
ZQorICAgIC8vIFVuaXNjcmliZUhlbHBlciBoYXMgbWVhc3VyZWQgdGhlIHRleHQuCisgICAgSW50
UG9pbnQgaW50UG9pbnQobHJvdW5kZihtX3BvaW50LngoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgbHJvdW5kZihtX3BvaW50LnkoKSkpOworCisgICAgVW5pc2NyaWJlSGVscGVyVGV4dFJ1biBz
dGF0ZShtX3J1biwgKm1fZm9udCk7CisgICAgaW50IGxlZnQgPSBscm91bmRmKG1fcG9pbnQueCgp
KSArIHN0YXRlLmNoYXJhY3RlclRvWChtX2Zyb20pOworICAgIGludCByaWdodCA9IGxyb3VuZGYo
bV9wb2ludC54KCkpICsgc3RhdGUuY2hhcmFjdGVyVG9YKG1fdG8pOworCisgICAgLy8gVGhpcyBh
bGdvcml0aG0gZm9yIGVzdGltYXRpbmcgaG93IG11Y2ggZXh0cmEgc3BhY2Ugd2UgbmVlZCAodGhl
IHRleHQgbWF5CisgICAgLy8gZ28gb3V0c2lkZSB0aGUgc2VsZWN0aW9uIHJlY3QpIGlzIGJhc2Vk
IHJvdWdobHkgb24KKyAgICAvLyBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZXN0aW1h
dGVUZXh0Qm91bmRzIGFib3ZlLgorICAgIHJldHVybiBJbnRSZWN0KGxlZnQgLSAobV9mb250LT5h
c2NlbnQoKSArIG1fZm9udC0+ZGVzY2VudCgpKSAvIDIsCisgICAgICAgICAgICAgICAgICAgbV9w
b2ludC55KCkgLSBtX2ZvbnQtPmFzY2VudCgpIC0gbV9mb250LT5saW5lR2FwKCksCisgICAgICAg
ICAgICAgICAgICAgKHJpZ2h0IC0gbGVmdCkgKyBtX2ZvbnQtPmFzY2VudCgpICsgbV9mb250LT5k
ZXNjZW50KCksCisgICAgICAgICAgICAgICAgICAgbV9mb250LT5saW5lU3BhY2luZygpKTsKK30K
KwogfSAgLy8gbmFtZXNwYWNlCiAKIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwKQEAgLTIyOCw3ICszMzEsNyBAQCB2b2lkIEZvbnQ6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgaWYgKCFhbHBoYSAm
JiBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VTdHlsZSgpID09
IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQ
YWludGVyIHBhaW50ZXIoZ3JhcGhpY3NDb250ZXh0LCBmb250LCBnbHlwaEJ1ZmZlciwgZnJvbSwg
bnVtR2x5cGhzLCBwb2ludCk7CisgICAgVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIgcGFp
bnRlcihncmFwaGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMs
IHBvaW50KTsKIAogICAgIC8vIFdlIGRyYXcgdGhlIGdseXBocyBpbiBjaHVua3MgdG8gYXZvaWQg
aGF2aW5nIHRvIGRvIGEgaGVhcCBhbGxvY2F0aW9uIGZvcgogICAgIC8vIHRoZSBhcnJheXMgb2Yg
Y2hhcmFjdGVycyBhbmQgYWR2YW5jZXMuIFNpbmNlIEV4dFRleHRPdXQgaXMgdGhlCkBAIC0yOTgs
MTMgKzQwMSwxNSBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9
IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgVW5pc2NyaWJlSGVscGVy
VGV4dFJ1biBzdGF0ZShydW4sICp0aGlzKTsKIAotICAgIFNrQ29sb3IgY29sb3IgPSBjb250ZXh0
LT5lZmZlY3RpdmVGaWxsQ29sb3IoKTsKKyAgICBTa0NvbG9yIGNvbG9yID0gZ3JhcGhpY3NDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZWZmZWN0aXZlRmlsbENvbG9yKCk7CiAgICAgdW5zaWdu
ZWQgY2hhciBhbHBoYSA9IFNrQ29sb3JHZXRBKGNvbG9yKTsKICAgICAvLyBTa2lwIDEwMCUgdHJh
bnNwYXJlbnQgdGV4dDsgbm8gbmVlZCB0byBkcmF3IGFueXRoaW5nLgotICAgIGlmICghYWxwaGEp
CisgICAgaWYgKCFhbHBoYSAmJiBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5n
ZXRTdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBIREMg
aGRjID0gY29udGV4dC0+Y2FudmFzKCktPmJlZ2luUGxhdGZvcm1QYWludCgpOworICAgIFRyYW5z
cGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlciBwYWludGVyKGdyYXBoaWNzQ29udGV4dCwgdGhp
cywgcnVuLCBmcm9tLCB0bywgcG9pbnQpOworCisgICAgSERDIGhkYyA9IHBhaW50ZXIuaGRjKCk7
CiAKICAgICAvLyBUT0RPKG1hcnVlbCk6IGh0dHA6Ly9iLzcwMDQ2NCBTZXRUZXh0Q29sb3IgZG9l
c24ndCBzdXBwb3J0IHRyYW5zcGFyZW5jeS4KICAgICAvLyBFbmZvcmNlIG5vbi10cmFuc3BhcmVu
dCBjb2xvci4K
</data>
<flag name="review"
          id="14245"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28936</attachid>
            <date>2009-03-25 11:12:56 -0700</date>
            <delta_ts>2009-03-25 11:16:38 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>complex.diff</filename>
            <type>text/plain</type>
            <size>22009</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwZDkwNTdiLi4zNDNkMDg2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDMt
MjUgIEJyZXR0IFdpbHNvbiAgPGJyZXR0d0BkaGNwLTE3Mi0yMi03MS0xOTEubXR2LmNvcnAuZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAg
ICAgRml4IGNvbXBsZXggdGV4dCBvcGFjaXR5IG9uIHRoZSBDaHJvbWl1bSBXaW5kb3dzIHBvcnQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDc1Nwor
CisgICAgICAgICogZmFzdC90ZXh0L2NvbXBsZXgtdGV4dC1vcGFjaXR5Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L3RleHQvY29tcGxleC10ZXh0LW9wYWNpdHktZXhw
ZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L3RleHQv
Y29tcGxleC10ZXh0LW9wYWNpdHktZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvZmFzdC90ZXh0L2NvbXBsZXgtdGV4dC1vcGFjaXR5LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisKIDIwMDktMDMtMjUgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L3RleHQvY29tcGxleC10ZXh0LW9wYWNpdHkuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9j
b21wbGV4LXRleHQtb3BhY2l0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAuLmM4NGI4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvY29t
cGxleC10ZXh0LW9wYWNpdHkuaHRtbApAQCAtMCwwICsxLDE2IEBACivvu788aHRtbD48Ym9keT4K
K1BpeGVsIHRlc3QgZm9yIGNvbXBsZXggdGV4dCByZW5kZXJpbmcgd2l0aCBvcGFjaXR5IChDaHJv
bWl1bSBidWcgPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vl
cy9kZXRhaWw/aWQ9ODc2OCI+ODc2ODwvYT4pLjxwPgorPGRpdiBzdHlsZT0iZm9udC1zaXplOjI1
cHg7Ij4KKzxzcGFuPuCkluCli+CknOClh+Ckgjwvc3Bhbj4KKzxzcGFuIHN0eWxlPSJvcGFjaXR5
OjAuOTsiPuCkluCli+CknOClh+Ckgjwvc3Bhbj4KKzxzcGFuIHN0eWxlPSJvcGFjaXR5OjAuODsi
PuCkluCli+CknOClh+Ckgjwvc3Bhbj4KKzxzcGFuIHN0eWxlPSJvcGFjaXR5OjAuNzsiPuCkluCl
i+CknOClh+Ckgjwvc3Bhbj4KKzxzcGFuIHN0eWxlPSJvcGFjaXR5OjAuNjsiPuCkluCli+CknOCl
h+Ckgjwvc3Bhbj4KKzxzcGFuIHN0eWxlPSJvcGFjaXR5OjAuNTsiPuCkluCli+CknOClh+Ckgjwv
c3Bhbj4KKzxzcGFuIHN0eWxlPSJvcGFjaXR5OjAuNDsiPuCkluCli+CknOClh+Ckgjwvc3Bhbj4K
KzxzcGFuIHN0eWxlPSJvcGFjaXR5OjAuMzsiPuCkluCli+CknOClh+Ckgjwvc3Bhbj4KKzxzcGFu
IHN0eWxlPSJvcGFjaXR5OjAuMjsiPuCkluCli+CknOClh+Ckgjwvc3Bhbj4KKzxzcGFuIHN0eWxl
PSJvcGFjaXR5OjAuMTsiPuCkluCli+CknOClh+Ckgjwvc3Bhbj4KKzxzcGFuIHN0eWxlPSJvcGFj
aXR5OjAuMDsiPuCkluCli+CknOClh+Ckgjwvc3Bhbj4KKzwvZGl2PgorPC9ib2R5PjwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3RleHQvY29tcGxleC10
ZXh0LW9wYWNpdHktZXhwZWN0ZWQuY2hlY2tzdW0gYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZmFzdC90ZXh0L2NvbXBsZXgtdGV4dC1vcGFjaXR5LWV4cGVjdGVkLmNoZWNrc3VtCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTUzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L2NvbXBsZXgtdGV4dC1vcGFjaXR5LWV4
cGVjdGVkLmNoZWNrc3VtCkBAIC0wLDAgKzEgQEAKKzAyNDQ4MTQ4Zjk2NTdmYWUzN2U2OTVhMmQ4
NzViZTY3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvdGV4dC9jb21wbGV4LXRleHQtb3BhY2l0eS1leHBlY3RlZC5w
bmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L2NvbXBsZXgtdGV4dC1vcGFj
aXR5LWV4cGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjRm
NzlkCkJpbmFyeSBmaWxlcyAvZGV2L251bGwgYW5kIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3QvdGV4dC9jb21wbGV4LXRleHQtb3BhY2l0eS1leHBlY3RlZC5wbmcgZGlmZmVyCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L2NvbXBsZXgtdGV4dC1v
cGFjaXR5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3RleHQv
Y29tcGxleC10ZXh0LW9wYWNpdHktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjExNmVjODIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZmFzdC90ZXh0L2NvbXBsZXgtdGV4dC1vcGFjaXR5LWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDc5IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5k
ZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9E
WX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAgICBSZW5kZXJCbG9jayAoYW5vbnltb3VzKSBh
dCAoMCwwKSBzaXplIDc4NHgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSA0MTl4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA0MTk6ICJQaXhl
bCB0ZXN0IGZvciBjb21wbGV4IHRleHQgcmVuZGVyaW5nIHdpdGggb3BhY2l0eSAoQ2hyb21pdW0g
YnVnICIKKyAgICAgICAgUmVuZGVySW5saW5lIHtBfSBhdCAoMCwwKSBzaXplIDMyeDE4IFtjb2xv
cj0jMDAwMEVFXQorICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNDE5LDApIHNpemUg
MzJ4MTgKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICg0MTksMCkgd2lkdGggMzI6ICI4NzY4Igor
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDQ1MSwwKSBzaXplIDl4MTgKKyAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoNDUxLDApIHdpZHRoIDk6ICIpLiIKKyAgICAgIFJlbmRlckJsb2NrIHtQ
fSBhdCAoMCwzNCkgc2l6ZSA3ODR4MAorICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDAsMzQp
IHNpemUgNzg0eDI5CisgICAgICAgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0
M3gyOQorICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDQzeDI5Cisg
ICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA0MzogIlx4ezkxNn1ceHs5NEJ9XHh7
OTFDfVx4ezk0N31ceHs5MDJ9IgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDQzLDAp
IHNpemUgNngyOQorICAgICAgICAgIHRleHQgcnVuIGF0ICg0MywwKSB3aWR0aCA2OiAiICIKKyAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg5MiwwKSBzaXplIDZ4MjkKKyAgICAgICAgICB0
ZXh0IHJ1biBhdCAoOTIsMCkgd2lkdGggNjogIiAiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0
fSBhdCAoMTQxLDApIHNpemUgNngyOQorICAgICAgICAgIHRleHQgcnVuIGF0ICgxNDEsMCkgd2lk
dGggNjogIiAiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMTkwLDApIHNpemUgNngy
OQorICAgICAgICAgIHRleHQgcnVuIGF0ICgxOTAsMCkgd2lkdGggNjogIiAiCisgICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMjM5LDApIHNpemUgNngyOQorICAgICAgICAgIHRleHQgcnVu
IGF0ICgyMzksMCkgd2lkdGggNjogIiAiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
Mjg4LDApIHNpemUgNngyOQorICAgICAgICAgIHRleHQgcnVuIGF0ICgyODgsMCkgd2lkdGggNjog
IiAiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMzM3LDApIHNpemUgNngyOQorICAg
ICAgICAgIHRleHQgcnVuIGF0ICgzMzcsMCkgd2lkdGggNjogIiAiCisgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMzg2LDApIHNpemUgNngyOQorICAgICAgICAgIHRleHQgcnVuIGF0ICgz
ODYsMCkgd2lkdGggNjogIiAiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNDM1LDAp
IHNpemUgNngyOQorICAgICAgICAgIHRleHQgcnVuIGF0ICg0MzUsMCkgd2lkdGggNjogIiAiCisg
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNDg0LDApIHNpemUgNngyOQorICAgICAgICAg
IHRleHQgcnVuIGF0ICg0ODQsMCkgd2lkdGggNjogIiAiCisgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAorbGF5ZXIgYXQgKDgsNDIpIHNpemUgNDN4MjkKKyAgUmVu
ZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDQzeDI5CisgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICg0OSwwKSBzaXplIDQzeDI5CisgICAgICB0ZXh0IHJ1biBhdCAoNDksMCkgd2lkdGgg
NDM6ICJceHs5MTZ9XHh7OTRCfVx4ezkxQ31ceHs5NDd9XHh7OTAyfSIKK2xheWVyIGF0ICg4LDQy
KSBzaXplIDQzeDI5CisgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0M3gyOQor
ICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoOTgsMCkgc2l6ZSA0M3gyOQorICAgICAgdGV4dCBy
dW4gYXQgKDk4LDApIHdpZHRoIDQzOiAiXHh7OTE2fVx4ezk0Qn1ceHs5MUN9XHh7OTQ3fVx4ezkw
Mn0iCitsYXllciBhdCAoOCw0Mikgc2l6ZSA0M3gyOQorICBSZW5kZXJJbmxpbmUge1NQQU59IGF0
ICgwLDApIHNpemUgNDN4MjkKKyAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDE0NywwKSBzaXpl
IDQzeDI5CisgICAgICB0ZXh0IHJ1biBhdCAoMTQ3LDApIHdpZHRoIDQzOiAiXHh7OTE2fVx4ezk0
Qn1ceHs5MUN9XHh7OTQ3fVx4ezkwMn0iCitsYXllciBhdCAoOCw0Mikgc2l6ZSA0M3gyOQorICBS
ZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNpemUgNDN4MjkKKyAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDE5NiwwKSBzaXplIDQzeDI5CisgICAgICB0ZXh0IHJ1biBhdCAoMTk2LDApIHdp
ZHRoIDQzOiAiXHh7OTE2fVx4ezk0Qn1ceHs5MUN9XHh7OTQ3fVx4ezkwMn0iCitsYXllciBhdCAo
OCw0Mikgc2l6ZSA0M3gyOQorICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNpemUgNDN4
MjkKKyAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDI0NSwwKSBzaXplIDQzeDI5CisgICAgICB0
ZXh0IHJ1biBhdCAoMjQ1LDApIHdpZHRoIDQzOiAiXHh7OTE2fVx4ezk0Qn1ceHs5MUN9XHh7OTQ3
fVx4ezkwMn0iCitsYXllciBhdCAoOCw0Mikgc2l6ZSA0M3gyOQorICBSZW5kZXJJbmxpbmUge1NQ
QU59IGF0ICgwLDApIHNpemUgNDN4MjkKKyAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDI5NCww
KSBzaXplIDQzeDI5CisgICAgICB0ZXh0IHJ1biBhdCAoMjk0LDApIHdpZHRoIDQzOiAiXHh7OTE2
fVx4ezk0Qn1ceHs5MUN9XHh7OTQ3fVx4ezkwMn0iCitsYXllciBhdCAoOCw0Mikgc2l6ZSA0M3gy
OQorICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNpemUgNDN4MjkKKyAgICBSZW5kZXJU
ZXh0IHsjdGV4dH0gYXQgKDM0MywwKSBzaXplIDQzeDI5CisgICAgICB0ZXh0IHJ1biBhdCAoMzQz
LDApIHdpZHRoIDQzOiAiXHh7OTE2fVx4ezk0Qn1ceHs5MUN9XHh7OTQ3fVx4ezkwMn0iCitsYXll
ciBhdCAoOCw0Mikgc2l6ZSA0M3gyOQorICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNp
emUgNDN4MjkKKyAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDM5MiwwKSBzaXplIDQzeDI5Cisg
ICAgICB0ZXh0IHJ1biBhdCAoMzkyLDApIHdpZHRoIDQzOiAiXHh7OTE2fVx4ezk0Qn1ceHs5MUN9
XHh7OTQ3fVx4ezkwMn0iCitsYXllciBhdCAoOCw0Mikgc2l6ZSA0M3gyOQorICBSZW5kZXJJbmxp
bmUge1NQQU59IGF0ICgwLDApIHNpemUgNDN4MjkKKyAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDQ0MSwwKSBzaXplIDQzeDI5CisgICAgICB0ZXh0IHJ1biBhdCAoNDQxLDApIHdpZHRoIDQzOiAi
XHh7OTE2fVx4ezk0Qn1ceHs5MUN9XHh7OTQ3fVx4ezkwMn0iCitsYXllciBhdCAoOCw0Mikgc2l6
ZSA0M3gyOQorICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNpemUgNDN4MjkKKyAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDQ5MCwwKSBzaXplIDQzeDI5CisgICAgICB0ZXh0IHJ1biBh
dCAoNDkwLDApIHdpZHRoIDQzOiAiXHh7OTE2fVx4ezk0Qn1ceHs5MUN9XHh7OTQ3fVx4ezkwMn0i
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDJmNWQ3OTIuLmU4ODI4OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMDktMDMtMjUgIEJyZXR0IFdpbHNv
biAgPGJyZXR0d0BkaGNwLTE3Mi0yMi03MS0xOTEubXR2LmNvcnAuZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAgRml4IGNvbXBsZXgg
dGV4dCBvcGFjaXR5IG9uIHRoZSBDaHJvbWl1bSBXaW5kb3dzIHBvcnQuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDc1NworCisgICAgICAgIFRlc3Q6
IGZhc3QvdGV4dC9jb21wbGV4LXRleHQtb3BhY2l0eS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OlRy
YW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3Bh
cmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjppbml0
aWFsaXplRm9yR0RJKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBh
aW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6On5UcmFuc3BhcmVuY3lBd2FyZUZv
bnRQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50
ZXI6OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUdseXBo
UGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVy
OjpUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6flRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQ
YWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6
OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjplc3RpbWF0ZVRleHRCb3VuZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5
QXdhcmVHbHlwaFBhaW50ZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVy
OjpoZGMpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6
VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZVVuaXNj
cmliZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdh
cmVVbmlzY3JpYmVQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJl
Rm9udFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcjo6ZXN0aW1hdGVU
ZXh0Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKwogMjAwOS0wMy0yNSAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENo
cm9taXVtV2luLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENo
cm9taXVtV2luLmNwcAppbmRleCA3ZDNiZmQzLi4xYjcxOTQ2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCkBAIC01
OCw1MyArNTgsMjQgQEAgYm9vbCBjYW52YXNIYXNNdWx0aXBsZUxheWVycyhjb25zdCBTa0NhbnZh
cyogY2FudmFzKQogICAgIHJldHVybiAhaXRlci5kb25lKCk7ICAvLyBUaGVyZSBpcyA+IDEgbGF5
ZXIgaWYgdGhlIHRoZSBpdGVyYXRvciBjYW4gc3RpbCBhZHZhbmNlLgogfQogCi0vLyBFc3RpbWF0
ZXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgZ2l2ZW4gdGV4dC4gVGhpcyBpcyBjb3BpZWQgZnJv
bQotLy8gRm9udENHV2luLmNwcCwgaXQgaXMgcG9zc2libGUsIGJ1dCBhIGxvdCBtb3JlIHdvcmss
IHRvIGdldCB0aGUgcHJlY2lkZQotLy8gYm91bmRzLgotSW50UmVjdCBlc3RpbWF0ZVRleHRCb3Vu
ZHMoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIGludCB0b3RhbFdpZHRoID0gMDsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKQotICAgICAgICB0b3RhbFdpZHRo
ICs9IGxyb3VuZGYoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20gKyBpKSk7Ci0KLSAgICByZXR1
cm4gSW50UmVjdChwb2ludC54KCkgLSAoZm9udC0+YXNjZW50KCkgKyBmb250LT5kZXNjZW50KCkp
IC8gMiwKLSAgICAgICAgICAgICAgICAgICBwb2ludC55KCkgLSBmb250LT5hc2NlbnQoKSAtIGZv
bnQtPmxpbmVHYXAoKSwKLSAgICAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICsgZm9udC0+YXNj
ZW50KCkgKyBmb250LT5kZXNjZW50KCksCi0gICAgICAgICAgICAgICAgICAgZm9udC0+bGluZVNw
YWNpbmcoKSk7IAotfQotCiBjbGFzcyBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyIHsKIHB1
YmxpYzoKLSAgICBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGZyb20sIGludCBudW1HbHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCk7Ci0gICAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCk7CisgICAgVHJhbnNwYXJlbmN5QXdh
cmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAg
flRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoKTsKIAotICAgIC8vIERyYXdzIHRoZSBwYXJ0
aWFsIHN0cmluZyBvZiBnbHlwaHMsIHN0YXJ0aW5nIGF0IHxzdGFydEFkdmFuY2V8IHRvIHRoZQot
ICAgIC8vIGxlZnQgb2YgbV9wb2ludC4gV2UgZXhwcmVzcyBpdCB0aGlzIHdheSBzbyB0aGF0IGlm
IHdlJ3JlIHVzaW5nIHRoZSBTa2lhCi0gICAgLy8gZHJhd2luZyBwYXRoIHdlIGNhbiB1c2UgZmxv
YXRpbmctcG9pbnQgcG9zaXRpb25pbmcsIGV2ZW4gdGhvdWdoIHdlIGhhdmUKLSAgICAvLyB0byB1
c2UgaW50ZWdlciBwb3NpdGlvbmluZyBpbiB0aGUgR0RJIHBhdGguCi0gICAgYm9vbCBkcmF3R2x5
cGhzKGludCBudW1HbHlwaHMsIGNvbnN0IFdPUkQqIGdseXBocywgY29uc3QgaW50KiBhZHZhbmNl
cywKLSAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0QWR2YW5jZSkgY29uc3Q7Citwcm90ZWN0
ZWQ6CisgICAgLy8gQ2FsbGVkIGJ5IG91ciBzdWJjbGFzcycgY29uc3RydWN0b3IgdG8gaW5pdGlh
bGl6ZSBHREkgaWYgbmVjZXNzYXJ5LiBUaGlzCisgICAgLy8gaXMgYSBzZXBhcmF0ZSBmdW5jdGlv
biBzbyBpdCBjYW4gYmUgY2FsbGVkIGFmdGVyIHRoZSBzdWJjbGFzcyBmaW5pc2hlcworICAgIC8v
IGNvbnN0cnVjdGlvbiAoaXQgY2FsbHMgdmlydHVhbCBmdW5jdGlvbnMpLgorICAgIHZvaWQgaW5p
dCgpOwogCi1wcml2YXRlOgotICAgIC8vIENhbGwgd2hlbiB3ZSdyZSB1c2luZyBHREkgbW9kZSB0
byBpbml0aWFsaXplIHRoZSBUcmFuc3BhcmVuY3lXaW4gdG8gaGVscAotICAgIC8vIHVzIGRyYXcg
R0RJIHRleHQuCi0gICAgdm9pZCBpbml0aWFsaXplRm9yR0RJKGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMpOworICAgIHZpcnR1YWwgSW50UmVj
dCBlc3RpbWF0ZVRleHRCb3VuZHMoKSA9IDA7CiAKICAgICAvLyBVc2UgdGhlIGNvbnRleHQgZnJv
bSB0aGUgdHJhbnNwYXJlbmN5IGhlbHBlciB3aGVuIGRyYXdpbmcgd2l0aCBHREkuIEl0CiAgICAg
Ly8gbWF5IHBvaW50IHRvIGEgdGVtcG9yYXJ5IG9uZS4KICAgICBHcmFwaGljc0NvbnRleHQqIG1f
Z3JhcGhpY3NDb250ZXh0OwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBtX3BsYXRmb3Jt
Q29udGV4dDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2ZvbnQ7CiAgICAgRmxvYXRQ
b2ludCBtX3BvaW50OwogCiAgICAgLy8gU2V0IHdoZW4gV2luZG93cyBjYW4gaGFuZGxlIHRoZSB0
eXBlIG9mIGRyYXdpbmcgd2UncmUgZG9pbmcuCkBAIC0xMTIsMzIgKzgzLDM0IEBAIHByaXZhdGU6
CiAKICAgICAvLyBUaGVzZSBtZW1iZXJzIGFyZSB2YWxpZCBvbmx5IHdoZW4gbV91c2VHREkgaXMg
c2V0LgogICAgIEhEQyBtX2hkYzsKLSAgICBIR0RJT0JKIG1fb2xkRm9udDsgIC8vIEZvciByZXN0
b3JpbmcgdGhlIERDIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS4KICAgICBUcmFuc3BhcmVuY3lXaW4g
bV90cmFuc3BhcmVuY3k7CisKK3ByaXZhdGU6CisgICAgLy8gQ2FsbCB3aGVuIHdlJ3JlIHVzaW5n
IEdESSBtb2RlIHRvIGluaXRpYWxpemUgdGhlIFRyYW5zcGFyZW5jeVdpbiB0byBoZWxwCisgICAg
Ly8gdXMgZHJhdyBHREkgdGV4dC4KKyAgICB2b2lkIGluaXRpYWxpemVGb3JHREkoKTsKKwogICAg
IGJvb2wgbV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXI7ICAvLyBXZSBjcmVhdGVkIGEgbGF5ZXIg
dG8gZ2l2ZSB0aGUgZm9udCBzb21lIGFscGhhLgogfTsKIAotVHJhbnNwYXJlbmN5QXdhcmVGb250
UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcigKLSAgICBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCi0gICAgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLAot
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogICAgIDogbV9ncmFwaGljc0NvbnRleHQoY29u
dGV4dCkKICAgICAsIG1fcGxhdGZvcm1Db250ZXh0KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
KQotICAgICwgbV9mb250KGZvbnQpCiAgICAgLCBtX3BvaW50KHBvaW50KQogICAgICwgbV91c2VH
REkod2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKGNvbnRleHQpKQogICAgICwgbV9oZGMoMCkK
LSAgICAsIG1fb2xkRm9udCgwKQogICAgICwgbV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIoZmFs
c2UpCiB7Cit9CisKK3ZvaWQgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdCgpCit7
CiAgICAgaWYgKG1fdXNlR0RJKQotICAgICAgICBpbml0aWFsaXplRm9yR0RJKGdseXBoQnVmZmVy
LCBmcm9tLCBudW1HbHlwaHMpOworICAgICAgICBpbml0aWFsaXplRm9yR0RJKCk7CiB9CiAKLXZv
aWQgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGlhbGl6ZUZvckdESShjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMpCit2b2lkIFRyYW5z
cGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkoKQogewogICAgIFNrQ29s
b3IgY29sb3IgPSBtX3BsYXRmb3JtQ29udGV4dC0+ZWZmZWN0aXZlRmlsbENvbG9yKCk7CiAgICAg
aWYgKFNrQ29sb3JHZXRBKGNvbG9yKSAhPSAweEZGKSB7CkBAIC0xNTcsNyArMTMwLDcgQEAgdm9p
ZCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjppbml0aWFsaXplRm9yR0RJKGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmYKICAgICAgICAgLy8gZW5oYW5jZSB0aGlzIHRvIGFjdHVhbGx5
IGNoZWNrLCBzaW5jZSBpdCB3aWxsIG9mdGVuIGJlIG9wYXF1ZQogICAgICAgICAvLyBhbmQgd2Ug
Y291bGQgZG8gQ2xlYXJUeXBlIGluIHRoYXQgY2FzZS4KICAgICAgICAgbGF5ZXJNb2RlID0gVHJh
bnNwYXJlbmN5V2luOjpUZXh0Q29tcG9zaXRlOwotICAgICAgICBsYXllclJlY3QgPSBlc3RpbWF0
ZVRleHRCb3VuZHMobV9mb250LCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBtX3BvaW50
KTsKKyAgICAgICAgbGF5ZXJSZWN0ID0gZXN0aW1hdGVUZXh0Qm91bmRzKCk7CiAKICAgICAgICAg
Ly8gVGhlIHRyYW5zcGFyZW5jeSBoZWxwZXIgcmVxdWlyZXMgdGhhdCB3ZSBkcmF3IHRleHQgaW4g
YmxhY2sgaW4KICAgICAgICAgLy8gdGhpcyBtb2RlIGFuZCBpdCB3aWxsIGFwcGx5IHRoZSBjb2xv
ci4KQEAgLTE2Nyw3ICsxNDAsNyBAQCB2b2lkIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6
OmluaXRpYWxpemVGb3JHREkoY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZgogICAgICAgICAv
LyBXaGVuIHdlJ3JlIGRyYXdpbmcgYSB3ZWIgcGFnZSwgd2Uga25vdyB0aGUgYmFja2dyb3VuZCBp
cyBvcGFxdWUsCiAgICAgICAgIC8vIGJ1dCBpZiB3ZSdyZSBkcmF3aW5nIHRvIGEgbGF5ZXIsIHdl
IHN0aWxsIG5lZWQgZXh0cmEgd29yay4KICAgICAgICAgbGF5ZXJNb2RlID0gVHJhbnNwYXJlbmN5
V2luOjpPcGFxdWVDb21wb3NpdGVMYXllcjsKLSAgICAgICAgbGF5ZXJSZWN0ID0gZXN0aW1hdGVU
ZXh0Qm91bmRzKG1fZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBocywgbV9wb2ludCk7
CisgICAgICAgIGxheWVyUmVjdCA9IGVzdGltYXRlVGV4dEJvdW5kcygpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIENvbW1vbiBjYXNlIG9mIGRyYXdpbmcgb250byB0aGUgYm90dG9tIGxheWVy
IG9mIGEgd2ViIHBhZ2U6IHdlCiAgICAgICAgIC8vIGtub3cgZXZlcnl0aGluZyBpcyBvcGFxdWUg
c28gZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgpAQCAtMTc3LDcgKzE1MCw2IEBA
IHZvaWQgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGlhbGl6ZUZvckdESShjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmCiAKICAgICAvLyBTZXQgdXAgdGhlIERDLCB1c2luZyB0
aGUgb25lIGZyb20gdGhlIHRyYW5zcGFyZW5jeSBoZWxwZXIuCiAgICAgbV9oZGMgPSBtX3RyYW5z
cGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmJlZ2luUGxhdGZvcm1QYWludCgp
OwotICAgIG1fb2xkRm9udCA9IDo6U2VsZWN0T2JqZWN0KG1faGRjLCBtX2ZvbnQtPnBsYXRmb3Jt
RGF0YSgpLmhmb250KCkpOwogICAgIFNldFRleHRDb2xvcihtX2hkYywgc2tpYTo6U2tDb2xvclRv
Q09MT1JSRUYoY29sb3IpKTsKICAgICBTZXRCa01vZGUobV9oZGMsIFRSQU5TUEFSRU5UKTsKIH0K
QEAgLTE4OSwxNSArMTYxLDgyIEBAIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6On5UcmFu
c3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKCkKICAgICBtX3RyYW5zcGFyZW5jeS5jb21wb3NpdGUo
KTsKICAgICBpZiAobV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIpCiAgICAgICAgIG1fZ3JhcGhp
Y3NDb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgOjpTZWxlY3RPYmplY3Qo
bV9oZGMsIG1fb2xkRm9udCk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpLT5lbmRQ
bGF0Zm9ybVBhaW50KCk7CiB9CiAKLWJvb2wgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6
ZHJhd0dseXBocyhpbnQgbnVtR2x5cGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdPUkQqIGdseXBocywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQqIGFkdmFuY2VzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydEFkdmFuY2UpIGNv
bnN0CisvLyBTcGVjaWFsaXphdGlvbiBmb3Igc2ltcGxlIEdseXBoQnVmZmVyIHBhaW50aW5nLgor
Y2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIgOiBwdWJsaWMgVHJhbnNwYXJlbmN5
QXdhcmVGb250UGFpbnRlciB7CisgcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQ
YWludGVyKEdyYXBoaWNzQ29udGV4dCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdseXBoQnVmZmVyJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZnJvbSwgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgflRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWlu
dGVyKCk7CisKKyAgICAvLyBEcmF3cyB0aGUgcGFydGlhbCBzdHJpbmcgb2YgZ2x5cGhzLCBzdGFy
dGluZyBhdCB8c3RhcnRBZHZhbmNlfCB0byB0aGUKKyAgICAvLyBsZWZ0IG9mIG1fcG9pbnQuIFdl
IGV4cHJlc3MgaXQgdGhpcyB3YXkgc28gdGhhdCBpZiB3ZSdyZSB1c2luZyB0aGUgU2tpYQorICAg
IC8vIGRyYXdpbmcgcGF0aCB3ZSBjYW4gdXNlIGZsb2F0aW5nLXBvaW50IHBvc2l0aW9uaW5nLCBl
dmVuIHRob3VnaCB3ZSBoYXZlCisgICAgLy8gdG8gdXNlIGludGVnZXIgcG9zaXRpb25pbmcgaW4g
dGhlIEdESSBwYXRoLgorICAgIGJvb2wgZHJhd0dseXBocyhpbnQgbnVtR2x5cGhzLCBjb25zdCBX
T1JEKiBnbHlwaHMsIGNvbnN0IGludCogYWR2YW5jZXMsIGludCBzdGFydEFkdmFuY2UpIGNvbnN0
OworCisgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEludFJlY3QgZXN0aW1hdGVUZXh0Qm91bmRzKCk7
CisKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9mb250OworICAgIGNvbnN0IEdseXBoQnVm
ZmVyJiBtX2dseXBoQnVmZmVyOworICAgIGludCBtX2Zyb207CisgICAgaW50IG1fbnVtR2x5cGhz
OworCisgICAgLy8gV2hlbiBtX3VzZUdkaSBpcyBzZXQsIHRoaXMgc3RvcmVzIHRoZSBwcmV2aW91
cyBIRk9OVCBzZWxlY3RlZCBpbnRvIHRoZQorICAgIC8vIG1faGRjIHNvIHdlIGNhbiByZXN0b3Jl
IGl0LgorICAgIEhHRElPQkogbV9vbGRGb250OyAgLy8gRm9yIHJlc3RvcmluZyB0aGUgREMgdG8g
aXRzIG9yaWdpbmFsIHN0YXRlLgorfTsKKworVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6
OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKAorICAgIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKKyAgICBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsCisgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCisgICAgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgOiBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVy
KGNvbnRleHQsIHBvaW50KQorICAgICwgbV9mb250KGZvbnQpCisgICAgLCBtX2dseXBoQnVmZmVy
KGdseXBoQnVmZmVyKQorICAgICwgbV9mcm9tKGZyb20pCisgICAgLCBtX251bUdseXBocyhudW1H
bHlwaHMpCisgICAgLCBtX29sZEZvbnQoMCkKK3sKKyAgICBpbml0KCk7CisKKyAgICBtX29sZEZv
bnQgPSA6OlNlbGVjdE9iamVjdChtX2hkYywgbV9mb250LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgp
KTsKK30KKworVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6On5UcmFuc3BhcmVuY3lBd2Fy
ZUdseXBoUGFpbnRlcigpCit7CisgICAgaWYgKG1fdXNlR0RJKQorICAgICAgICA6OlNlbGVjdE9i
amVjdChtX2hkYywgbV9vbGRGb250KTsKK30KKworCisvLyBFc3RpbWF0ZXMgdGhlIGJvdW5kaW5n
IGJveCBvZiB0aGUgZ2l2ZW4gdGV4dC4gVGhpcyBpcyBjb3BpZWQgZnJvbQorLy8gRm9udENHV2lu
LmNwcCwgaXQgaXMgcG9zc2libGUsIGJ1dCBhIGxvdCBtb3JlIHdvcmssIHRvIGdldCB0aGUgcHJl
Y2lkZQorLy8gYm91bmRzLgorSW50UmVjdCBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6
ZXN0aW1hdGVUZXh0Qm91bmRzKCkKK3sKKyAgICBpbnQgdG90YWxXaWR0aCA9IDA7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX251bUdseXBoczsgaSsrKQorICAgICAgICB0b3RhbFdpZHRoICs9
IGxyb3VuZGYobV9nbHlwaEJ1ZmZlci5hZHZhbmNlQXQobV9mcm9tICsgaSkpOworCisgICAgcmV0
dXJuIEludFJlY3QobV9wb2ludC54KCkgLSAobV9mb250LT5hc2NlbnQoKSArIG1fZm9udC0+ZGVz
Y2VudCgpKSAvIDIsCisgICAgICAgICAgICAgICAgICAgbV9wb2ludC55KCkgLSBtX2ZvbnQtPmFz
Y2VudCgpIC0gbV9mb250LT5saW5lR2FwKCksCisgICAgICAgICAgICAgICAgICAgdG90YWxXaWR0
aCArIG1fZm9udC0+YXNjZW50KCkgKyBtX2ZvbnQtPmRlc2NlbnQoKSwKKyAgICAgICAgICAgICAg
ICAgICBtX2ZvbnQtPmxpbmVTcGFjaW5nKCkpOyAKK30KKworYm9vbCBUcmFuc3BhcmVuY3lBd2Fy
ZUdseXBoUGFpbnRlcjo6ZHJhd0dseXBocyhpbnQgbnVtR2x5cGhzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT1JEKiBnbHlwaHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCogYWR2
YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBzdGFydEFkdmFuY2UpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3VzZUdESSkgewogICAgICAgICBT
a1BvaW50IG9yaWdpbiA9IG1fcG9pbnQ7CkBAIC0yMTMsNiArMjUyLDY5IEBAIGJvb2wgVHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcjo6ZHJhd0dseXBocyhpbnQgbnVtR2x5cGhzLAogICAgIHJl
dHVybiAhIUV4dFRleHRPdXQobV9oZGMsIHgsIHksIEVUT19HTFlQSF9JTkRFWCwgMCwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB3Y2hhcl90Kj4oJmdseXBoc1swXSksIG51bUdseXBocywgJmFkdmFu
Y2VzWzBdKTsKIH0KIAorCitjbGFzcyBUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIg
OiBwdWJsaWMgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlciB7CisgcHVibGljOgorICAgIFRy
YW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcihHcmFwaGljc0NvbnRleHQqLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb250KiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dFJ1biYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB+VHJhbnNw
YXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyKCk7CisKKyAgICAvLyBVbmlzY2liZSB3aWxsIGRy
YXcgZGlyZWN0bHkgaW50byBvdXIgYnVmZmVyLCBzbyB3ZSBuZWVkIHRvIGV4cG9zZSBvdXIgREMu
CisgICAgSERDIGhkYygpIGNvbnN0IHsgcmV0dXJuIG1faGRjOyB9CisKKyBwcml2YXRlOgorICAg
IHZpcnR1YWwgSW50UmVjdCBlc3RpbWF0ZVRleHRCb3VuZHMoKTsKKworICAgIGNvbnN0IEZvbnQq
IG1fZm9udDsKKyAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKKyAgICBpbnQgbV9mcm9tOworICAg
IGludCBtX3RvOworfTsKKworVHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjpUcmFu
c3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIoCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LAorICAgIGNvbnN0IEZvbnQqIGZvbnQsCisgICAgY29uc3QgVGV4dFJ1biYgcnVuLAorICAg
IGludCBmcm9tLCBpbnQgdG8sCisgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgOiBU
cmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKGNvbnRleHQsIHBvaW50KQorICAgICwgbV9mb250
KGZvbnQpCisgICAgLCBtX3J1bihydW4pCisgICAgLCBtX2Zyb20oZnJvbSkKKyAgICAsIG1fdG8o
dG8pCit7CisgICAgaW5pdCgpOworfQorCitUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50
ZXI6On5UcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIoKQoreworfQorCitJbnRSZWN0
IFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcjo6ZXN0aW1hdGVUZXh0Qm91bmRzKCkK
K3sKKyAgICAvLyBUaGlzIGNhc2UgcmVhbGx5IHJlYWxseSBzdWNrcy4gVGhlcmUgaXMgbm8gY29u
dmVuaWVudCB3YXkgdG8gZXN0aW1hdGUKKyAgICAvLyB0aGUgYm91bmRpbmcgYm94LiBTbyB3ZSBy
dW4gVW5pc2NyaWJlIHR3aWNlLiBJZiB3ZSBmaW5kIHRoaXMgaGFwcGVucyBhCisgICAgLy8gbG90
LCB0aGUgd2F5IHRvIGZpeCBpdCBpcyB0byBtYWtlIHRoZSBleHRyYSBsYXllciBhZnRlciB0aGUK
KyAgICAvLyBVbmlzY3JpYmVIZWxwZXIgaGFzIG1lYXN1cmVkIHRoZSB0ZXh0LgorICAgIEludFBv
aW50IGludFBvaW50KGxyb3VuZGYobV9wb2ludC54KCkpLAorICAgICAgICAgICAgICAgICAgICAg
IGxyb3VuZGYobV9wb2ludC55KCkpKTsKKworICAgIFVuaXNjcmliZUhlbHBlclRleHRSdW4gc3Rh
dGUobV9ydW4sICptX2ZvbnQpOworICAgIGludCBsZWZ0ID0gbHJvdW5kZihtX3BvaW50LngoKSkg
KyBzdGF0ZS5jaGFyYWN0ZXJUb1gobV9mcm9tKTsKKyAgICBpbnQgcmlnaHQgPSBscm91bmRmKG1f
cG9pbnQueCgpKSArIHN0YXRlLmNoYXJhY3RlclRvWChtX3RvKTsKKworICAgIC8vIFRoaXMgYWxn
b3JpdGhtIGZvciBlc3RpbWF0aW5nIGhvdyBtdWNoIGV4dHJhIHNwYWNlIHdlIG5lZWQgKHRoZSB0
ZXh0IG1heQorICAgIC8vIGdvIG91dHNpZGUgdGhlIHNlbGVjdGlvbiByZWN0KSBpcyBiYXNlZCBy
b3VnaGx5IG9uCisgICAgLy8gVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6OmVzdGltYXRl
VGV4dEJvdW5kcyBhYm92ZS4KKyAgICByZXR1cm4gSW50UmVjdChsZWZ0IC0gKG1fZm9udC0+YXNj
ZW50KCkgKyBtX2ZvbnQtPmRlc2NlbnQoKSkgLyAyLAorICAgICAgICAgICAgICAgICAgIG1fcG9p
bnQueSgpIC0gbV9mb250LT5hc2NlbnQoKSAtIG1fZm9udC0+bGluZUdhcCgpLAorICAgICAgICAg
ICAgICAgICAgIChyaWdodCAtIGxlZnQpICsgbV9mb250LT5hc2NlbnQoKSArIG1fZm9udC0+ZGVz
Y2VudCgpLAorICAgICAgICAgICAgICAgICAgIG1fZm9udC0+bGluZVNwYWNpbmcoKSk7Cit9CisK
IH0gIC8vIG5hbWVzcGFjZQogCiB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsCkBAIC0yMjgsNyArMzMwLDcgQEAgdm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LAogICAgIGlmICghYWxwaGEgJiYg
Z3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0U3Ryb2tlU3R5bGUoKSA9PSBO
b1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlciBwYWludGVyKGdyYXBoaWNzQ29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51
bUdseXBocywgcG9pbnQpOworICAgIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyIHBhaW50
ZXIoZ3JhcGhpY3NDb250ZXh0LCBmb250LCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBw
b2ludCk7CiAKICAgICAvLyBXZSBkcmF3IHRoZSBnbHlwaHMgaW4gY2h1bmtzIHRvIGF2b2lkIGhh
dmluZyB0byBkbyBhIGhlYXAgYWxsb2NhdGlvbiBmb3IKICAgICAvLyB0aGUgYXJyYXlzIG9mIGNo
YXJhY3RlcnMgYW5kIGFkdmFuY2VzLiBTaW5jZSBFeHRUZXh0T3V0IGlzIHRoZQpAQCAtMjk4LDEz
ICs0MDAsMTUgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBn
cmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIFVuaXNjcmliZUhlbHBlclRl
eHRSdW4gc3RhdGUocnVuLCAqdGhpcyk7CiAKLSAgICBTa0NvbG9yIGNvbG9yID0gY29udGV4dC0+
ZWZmZWN0aXZlRmlsbENvbG9yKCk7CisgICAgU2tDb2xvciBjb2xvciA9IGdyYXBoaWNzQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmVmZmVjdGl2ZUZpbGxDb2xvcigpOwogICAgIHVuc2lnbmVk
IGNoYXIgYWxwaGEgPSBTa0NvbG9yR2V0QShjb2xvcik7CiAgICAgLy8gU2tpcCAxMDAlIHRyYW5z
cGFyZW50IHRleHQ7IG5vIG5lZWQgdG8gZHJhdyBhbnl0aGluZy4KLSAgICBpZiAoIWFscGhhKQor
ICAgIGlmICghYWxwaGEgJiYgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0
U3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSERDIGhk
YyA9IGNvbnRleHQtPmNhbnZhcygpLT5iZWdpblBsYXRmb3JtUGFpbnQoKTsKKyAgICBUcmFuc3Bh
cmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIgcGFpbnRlcihncmFwaGljc0NvbnRleHQsIHRoaXMs
IHJ1biwgZnJvbSwgdG8sIHBvaW50KTsKKworICAgIEhEQyBoZGMgPSBwYWludGVyLmhkYygpOwog
CiAgICAgLy8gVE9ETyhtYXJ1ZWwpOiBodHRwOi8vYi83MDA0NjQgU2V0VGV4dENvbG9yIGRvZXNu
J3Qgc3VwcG9ydCB0cmFuc3BhcmVuY3kuCiAgICAgLy8gRW5mb3JjZSBub24tdHJhbnNwYXJlbnQg
Y29sb3IuCg==
</data>
<flag name="review"
          id="14307"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>