<?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>153023</bug_id>
          
          <creation_ts>2016-01-12 10:52:09 -0800</creation_ts>
          <short_desc>Cleanup in font loading code</short_desc>
          <delta_ts>2016-01-12 15:53:17 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1154764</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-01-12 10:52:09 -0800</bug_when>
    <thetext>Cleanup in font loading code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154770</commentid>
    <comment_count>1</comment_count>
      <attachid>268783</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-01-12 11:00:05 -0800</bug_when>
    <thetext>Created attachment 268783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154810</commentid>
    <comment_count>2</comment_count>
      <attachid>268794</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-01-12 11:56:40 -0800</bug_when>
    <thetext>Created attachment 268794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154875</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-01-12 13:36:57 -0800</bug_when>
    <thetext>Committed r194923: &lt;http://trac.webkit.org/changeset/194923&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154893</commentid>
    <comment_count>4</comment_count>
      <attachid>268794</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-01-12 14:21:58 -0800</bug_when>
    <thetext>Comment on attachment 268794
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=268794&amp;action=review

&gt; Source/WebCore/css/CSSFontFace.cpp:60
&gt;  void CSSFontFace::addedToSegmentedFontFace(CSSSegmentedFontFace* segmentedFontFace)

The name of this function is a little bit confusing. We have a CSSSegmentedFontFace and we are calling addToSegmentedFontFace to add it to a collection of CSSSegmentedFontFaces. right? Would not be clearer if this function is called

void CSSFontFace::addedToSegmentedFontFaces(CSSSegmentedFontFace* segmentedFontFace)

Since we are adding a singular to plural.

&gt; Source/WebCore/css/CSSFontFace.cpp:62
&gt; +    m_segmentedFontFace.add(segmentedFontFace);

I do not think this change makes the code clearer. m_segmentedFontFaces is a HashSet&lt;CSSSegmentedFontFace*&gt; which is a collection of CSSSegmentedFontFaces. How can it be called m_segmentedFontFace and it has a function to add a CSSSegmentedFontFace?

&gt; Source/WebCore/css/CSSFontSelector.cpp:451
&gt; +        }

Would not be cleaner if this loop is written like this:

for (unsigned w = 1 &lt;&lt; FontWeight100Bit; !(m_desiredTraitsMaskForComparison &amp; w); w &lt;&lt;= 1)
    ruleSetIndex++;

&gt; Source/WebCore/css/CSSFontSelector.cpp:453
&gt; +        ASSERT_WITH_SECURITY_IMPLICATION(ruleSetIndex &lt; fallbackRuleSets);

It is is weird to have this assertion here. Can&apos;t we check at the beginning of this function/class that m_desiredTraitsMaskForComparison will not end up firing this assertion; something like

unsigned mask = (1 &lt;&lt; fallbackRuleSets) - 1;
if (!(m_desiredTraitsMaskForComparison &amp; mask)) {
   ASSERT(false);
   return false;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154942</commentid>
    <comment_count>5</comment_count>
      <attachid>268794</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-01-12 15:53:17 -0800</bug_when>
    <thetext>Comment on attachment 268794
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=268794&amp;action=review

&gt;&gt; Source/WebCore/css/CSSFontFace.cpp:60
&gt;&gt;  void CSSFontFace::addedToSegmentedFontFace(CSSSegmentedFontFace* segmentedFontFace)
&gt; 
&gt; The name of this function is a little bit confusing. We have a CSSSegmentedFontFace and we are calling addToSegmentedFontFace to add it to a collection of CSSSegmentedFontFaces. right? Would not be clearer if this function is called
&gt; 
&gt; void CSSFontFace::addedToSegmentedFontFaces(CSSSegmentedFontFace* segmentedFontFace)
&gt; 
&gt; Since we are adding a singular to plural.

I think the existing name makes sense. The CSSSegmentedFontFace is a higher level object which can be thought of to own these CSSFontFace objects (though a particular CSSFontFace may be &quot;owned&quot; by multiple CSSSegmentedFontFaces). This function represents the handshake between when an owner gains an ownee. When this function is called, the lower-level object is being registered as having a new higher-level object which refers to itself. So, it is being added to the SegmentedFontFace.

&gt;&gt; Source/WebCore/css/CSSFontFace.cpp:62
&gt;&gt; +    m_segmentedFontFace.add(segmentedFontFace);
&gt; 
&gt; I do not think this change makes the code clearer. m_segmentedFontFaces is a HashSet&lt;CSSSegmentedFontFace*&gt; which is a collection of CSSSegmentedFontFaces. How can it be called m_segmentedFontFace and it has a function to add a CSSSegmentedFontFace?

Yes, you are right. I reverted this part of the patch before committing.

&gt;&gt; Source/WebCore/css/CSSFontSelector.cpp:451
&gt;&gt; +        }
&gt; 
&gt; Would not be cleaner if this loop is written like this:
&gt; 
&gt; for (unsigned w = 1 &lt;&lt; FontWeight100Bit; !(m_desiredTraitsMaskForComparison &amp; w); w &lt;&lt;= 1)
&gt;     ruleSetIndex++;

I just un-indented this code, but I think you&apos;re right. I&apos;ll make a follow-up patch.

How about:
unsigned ruleSetIndex = 0;
for (; !(m_desiredTraitsMaskForComparison &amp; (1 &lt;&lt; (FontWeight100Bit + ruleSetIndex))); ++ruleSetIndex) { }

&gt;&gt; Source/WebCore/css/CSSFontSelector.cpp:453
&gt;&gt; +        ASSERT_WITH_SECURITY_IMPLICATION(ruleSetIndex &lt; fallbackRuleSets);
&gt; 
&gt; It is is weird to have this assertion here. Can&apos;t we check at the beginning of this function/class that m_desiredTraitsMaskForComparison will not end up firing this assertion; something like
&gt; 
&gt; unsigned mask = (1 &lt;&lt; fallbackRuleSets) - 1;
&gt; if (!(m_desiredTraitsMaskForComparison &amp; mask)) {
&gt;    ASSERT(false);
&gt;    return false;
&gt; }

It seems to me that this could be simplified to just ASSERT_WITH_SECURITY_IMPLICATION(m_desiredTraitsMaskForComparison &amp; FontWeightMask) up in the constructor.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268783</attachid>
            <date>2016-01-12 11:00:05 -0800</date>
            <delta_ts>2016-01-12 11:56:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153023-20160112105941.patch</filename>
            <type>text/plain</type>
            <size>24192</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0NjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmQxZTE4MDliN2I1M2I1
MjUyMmI1ZWYxNjJhZjIzMGQ0Y2M2ZTFkZC4uODM0ZmJjMzZiNDRhMjdjNTc0MmQyODhjYTQ5NmYx
ZGU5YThhZjFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTAxLTEyICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW51cCBp
biBmb250IGxvYWRpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUzMDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU2VlIGRldGFpbGVkIG5vdGVzIGJlbG93LgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNz
cy9DU1NGb250RmFjZS5jcHA6IFJlbmFtZSBtX3NlZ21lbnRlZEZvbnRGYWNlcyB0byBtX3NlZ21l
bnRlZEZvbnRGYWNlLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmFkZGVkVG9TZWdt
ZW50ZWRGb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6cmVtb3ZlZEZy
b21TZWdtZW50ZWRGb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9u
dExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250RmFjZTo6bm90aWZ5Rm9udExvYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZTo6bm90aWZ5TG9hZGluZ0RvbmUpOgorICAgICAgICAqIGNzcy9DU1NG
b250RmFjZS5oOiBEaXR0by4KKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkpOiBjb25zdHJ1
Y3RGYW1pbHlGb250RmFjZXMoKQorICAgICAgICBhbHdheXMgcmV0dXJucyBhbiBlbXB0eSBWZWN0
b3IuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIG9mIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgaXMg
dG8gcGVyZm9ybSB0aGUgYW5jaWxsYXJ5IHByb2Nlc3NpbmcgcmVsYXRlZCB0byB0aGUgY2FzZSB3
aGVyZSB0aGUgRmFjZXMKKyAgICAgICAgZG9uJ3QgYWxyZWFkeSBleGlzdC4gUmVuYW1lcyB0aGUg
ZnVuY3Rpb24gYW5kIHJlbW92ZXMgdGhlIGVtcHR5IHZlY3RvcgorICAgICAgICByZXR1cm4uCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6IFVwZGF0
ZSBmb3IKKyAgICAgICAgcmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseSgpLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udEZhY2VDb21wYXJhdG9yOjpGb250RmFjZUNvbXBhcmF0b3IpOiBJbnN0
ZWFkIG9mIHVzaW5nIGEgc3RhdGljLAorICAgICAgICBjb25zdHJ1Y3QgYSB3cmFwcGVyIGNsYXNz
IGFyb3VuZCB0aGUgY29tcGFyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFy
YXRvcjo6b3BlcmF0b3IoKSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVj
dG9yOjpnZXRGb250RmFjZSk6IFVuLWluZGVudCBjb2RlIGFuZCB1cGRhdGUgdG8gdXNlCisgICAg
ICAgIEZvbnRGYWNlQ29tcGFyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rv
cjo6ZmFsbGJhY2tGb250QXQpOiBNaWdyYXRlIG9mZiBQYXNzUmVmUHRyLgorICAgICAgICAoV2Vi
Q29yZTo6Y29uc3RydWN0RmFtaWx5Rm9udEZhY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbXBhcmVGb250RmFjZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9u
dFNlbGVjdG9yOjpyZXNvbHZlc0ZhbWlseUZvcik6IERlbGV0ZWQuIE5ldmVyIGNhbGxlZC4KKyAg
ICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmb250U2Vs
ZWN0b3IpOiBVc2UgbnVsbHB0ci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaDoKKwogMjAxNi0wMS0wNiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBw
bGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gVGlueSBjbGVhbnVwIGluIEZvbnRQbGF0Zm9ybURh
dGE6OmN0Rm9udCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAppbmRleCA2Nzg1NmVjNWI5
ZjAwZTE3NGJkMzA4MWU1Y2I1YmExNDVkOTkyOGRlLi42ZTMxZTg4NDJkMjFmOWRhZmZmMTcyY2Jk
NDE4NjkwNWRmZGIwMGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKQEAgLTU5LDEy
ICs1OSwxMiBAQCBib29sIENTU0ZvbnRGYWNlOjppc1ZhbGlkKCkgY29uc3QKIAogdm9pZCBDU1NG
b250RmFjZTo6YWRkZWRUb1NlZ21lbnRlZEZvbnRGYWNlKENTU1NlZ21lbnRlZEZvbnRGYWNlKiBz
ZWdtZW50ZWRGb250RmFjZSkKIHsKLSAgICBtX3NlZ21lbnRlZEZvbnRGYWNlcy5hZGQoc2VnbWVu
dGVkRm9udEZhY2UpOworICAgIG1fc2VnbWVudGVkRm9udEZhY2UuYWRkKHNlZ21lbnRlZEZvbnRG
YWNlKTsKIH0KIAogdm9pZCBDU1NGb250RmFjZTo6cmVtb3ZlZEZyb21TZWdtZW50ZWRGb250RmFj
ZShDU1NTZWdtZW50ZWRGb250RmFjZSogc2VnbWVudGVkRm9udEZhY2UpCiB7Ci0gICAgbV9zZWdt
ZW50ZWRGb250RmFjZXMucmVtb3ZlKHNlZ21lbnRlZEZvbnRGYWNlKTsKKyAgICBtX3NlZ21lbnRl
ZEZvbnRGYWNlLnJlbW92ZShzZWdtZW50ZWRGb250RmFjZSk7CiB9CiAKIHZvaWQgQ1NTRm9udEZh
Y2U6OmFkZFNvdXJjZShzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VTb3VyY2U+IHNvdXJjZSkK
QEAgLTc4LDE1ICs3OCwxNSBAQCB2b2lkIENTU0ZvbnRGYWNlOjpmb250TG9hZGVkKENTU0ZvbnRG
YWNlU291cmNlKiBzb3VyY2UpCiAgICAgaWYgKHNvdXJjZSAhPSBtX2FjdGl2ZVNvdXJjZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IENhbiB3ZSBhc3NlcnQgdGhhdCBtX3NlZ21l
bnRlZEZvbnRGYWNlcyBpcyBub3QgZW1wdHk/IFRoYXQgbWF5CisgICAgLy8gRklYTUU6IENhbiB3
ZSBhc3NlcnQgdGhhdCBtX3NlZ21lbnRlZEZvbnRGYWNlIGlzIG5vdCBlbXB0eT8gVGhhdCBtYXkK
ICAgICAvLyByZXF1aXJlIHN0b3BwaW5nIGluLXByb2dyZXNzIGZvbnQgbG9hZGluZyB3aGVuIHRo
ZSBsYXN0CiAgICAgLy8gQ1NTU2VnbWVudGVkRm9udEZhY2UgaXMgcmVtb3ZlZC4KLSAgICBpZiAo
bV9zZWdtZW50ZWRGb250RmFjZXMuaXNFbXB0eSgpKQorICAgIGlmIChtX3NlZ21lbnRlZEZvbnRG
YWNlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVXNlIG9uZSBvZiB0aGUg
Q1NTU2VnbWVudGVkRm9udEZhY2VzJyBmb250IHNlbGVjdG9yLiBUaGV5IGFsbCBoYXZlCiAgICAg
Ly8gdGhlIHNhbWUgZm9udCBzZWxlY3Rvciwgc28gaXQncyB3YXN0ZWZ1bCB0byBzdG9yZSBpdCBp
biB0aGUgQ1NTRm9udEZhY2UuCi0gICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IgPSAo
Km1fc2VnbWVudGVkRm9udEZhY2VzLmJlZ2luKCkpLT5mb250U2VsZWN0b3IoKTsKKyAgICBDU1NG
b250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9ICgqbV9zZWdtZW50ZWRGb250RmFjZS5iZWdpbigp
KS0+Zm9udFNlbGVjdG9yKCk7CiAgICAgZm9udFNlbGVjdG9yLT5mb250TG9hZGVkKCk7CiAKICNp
ZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBDU1NGb250
RmFjZTo6Zm9udExvYWRlZChDU1NGb250RmFjZVNvdXJjZSogc291cmNlKQogICAgIH0KICNlbmRp
ZgogCi0gICAgZm9yIChhdXRvKiBmYWNlIDogbV9zZWdtZW50ZWRGb250RmFjZXMpCisgICAgZm9y
IChhdXRvKiBmYWNlIDogbV9zZWdtZW50ZWRGb250RmFjZSkKICAgICAgICAgZmFjZS0+Zm9udExv
YWRlZCh0aGlzKTsKIAogI2lmIEVOQUJMRShGT05UX0xPQURfRVZFTlRTKQpAQCAtMTEzLDggKzEx
Myw4IEBAIFJlZlB0cjxGb250PiBDU1NGb250RmFjZTo6Zm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgQVNTRVJUKCFtX3NlZ21lbnRlZEZvbnRGYWNlcy5pc0VtcHR5
KCkpOwotICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gKCptX3NlZ21lbnRlZEZv
bnRGYWNlcy5iZWdpbigpKS0+Zm9udFNlbGVjdG9yKCk7CisgICAgQVNTRVJUKCFtX3NlZ21lbnRl
ZEZvbnRGYWNlLmlzRW1wdHkoKSk7CisgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3Ig
PSAoKm1fc2VnbWVudGVkRm9udEZhY2UuYmVnaW4oKSktPmZvbnRTZWxlY3RvcigpOwogCiAjaWYg
RU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuZm9udExvYWRFdmVudHNFbmFibGVkKCkgJiYgbV9sb2FkU3RhdGUg
PT0gTm90TG9hZGVkKQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6Om5vdGlm
eUZvbnRMb2FkZXIoTG9hZFN0YXRlIG5ld1N0YXRlKQogewogICAgIG1fbG9hZFN0YXRlID0gbmV3
U3RhdGU7CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSAoKm1fc2VnbWVudGVkRm9udEZhY2Vz
LmJlZ2luKCkpLT5mb250U2VsZWN0b3IoKS0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSAoKm1fc2VnbWVudGVkRm9udEZhY2UuYmVnaW4oKSktPmZvbnRTZWxlY3RvcigpLT5k
b2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTcw
LDcgKzE3MCw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6Om5vdGlmeUZvbnRMb2FkZXIoTG9hZFN0YXRl
IG5ld1N0YXRlKQogCiB2b2lkIENTU0ZvbnRGYWNlOjpub3RpZnlMb2FkaW5nRG9uZSgpCiB7Ci0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gKCptX3NlZ21lbnRlZEZvbnRGYWNlcy5iZWdpbigpKS0+
Zm9udFNlbGVjdG9yKCktPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gKCpt
X3NlZ21lbnRlZEZvbnRGYWNlLmJlZ2luKCkpLT5mb250U2VsZWN0b3IoKS0+ZG9jdW1lbnQoKTsK
ICAgICBpZiAoZG9jdW1lbnQpCiAgICAgICAgIGRvY3VtZW50LT5mb250cygpLT5sb2FkaW5nRG9u
ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAppbmRleCAxZDcyNTlmYzM3ODE3MDZiZGMx
NjNkYjI4YTE0YjZmMTRiYzJhYjA2Li5hMjlmZmFkNDQxNWVlNWJjMGIxMGQ2NzdiYWI5YTU4YzIz
MzgxM2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaApAQCAtMTI1LDcgKzEyNSw3IEBAIHBy
aXZhdGU6CiAKICAgICBGb250VHJhaXRzTWFzayBtX3RyYWl0c01hc2s7CiAgICAgVmVjdG9yPFVu
aWNvZGVSYW5nZT4gbV9yYW5nZXM7Ci0gICAgSGFzaFNldDxDU1NTZWdtZW50ZWRGb250RmFjZSo+
IG1fc2VnbWVudGVkRm9udEZhY2VzOworICAgIEhhc2hTZXQ8Q1NTU2VnbWVudGVkRm9udEZhY2Uq
PiBtX3NlZ21lbnRlZEZvbnRGYWNlOwogICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mZWF0dXJl
U2V0dGluZ3M7CiAgICAgRm9udFZhcmlhbnRTZXR0aW5ncyBtX3ZhcmlhbnRTZXR0aW5nczsKICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU0ZvbnRGYWNlU291cmNlPj4gbV9zb3VyY2VzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCBiOTkyODAxYmI4MWIzZWY2
ZDBiYTg3OTc3YWEwMjA1MzY4YmQyOGFmLi5iODljMjE4OGNjNGFkMDc2MmVkM2QzOWZmYTgxNDk2
N2I2MzM3MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcApAQCAtMjMx
LDI0ICsyMzEsMjIgQEAgc3RhdGljIFN0cmluZyBmYW1pbHlOYW1lRnJvbVByaW1pdGl2ZShjb25z
dCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCiAgICAgfQogfQogCi1zdGF0aWMgVmVjdG9yPFJl
ZjxDU1NGb250RmFjZT4+IGNvbnN0cnVjdEZhbWlseUZvbnRGYWNlcyhjb25zdCBTdHJpbmcmIGZh
bWlseU5hbWUsIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4sIENhc2VG
b2xkaW5nSGFzaD4mIGxvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMpCitzdGF0aWMgdm9pZCByZWdp
c3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgSGFz
aE1hcDxTdHJpbmcsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiwgQ2FzZUZvbGRpbmdIYXNoPiYg
bG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcykKIHsKLSAgICBhdXRvIHJlc3VsdCA9IFZlY3RvcjxS
ZWY8Q1NTRm9udEZhY2U+PigpOwotCiAgICAgQVNTRVJUKCFsb2NhbGx5SW5zdGFsbGVkRm9udEZh
Y2VzLmNvbnRhaW5zKGZhbWlseU5hbWUpKTsKIAogICAgIFZlY3RvcjxGb250VHJhaXRzTWFzaz4g
dHJhaXRzTWFza3MgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmdldFRyYWl0c0luRmFtaWx5KGZh
bWlseU5hbWUpOwotICAgIGlmICghdHJhaXRzTWFza3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFZl
Y3RvcjxSZWY8Q1NTRm9udEZhY2U+PiBmYWNlcyA9IHsgfTsKLSAgICAgICAgZm9yIChhdXRvIG1h
c2sgOiB0cmFpdHNNYXNrcykgewotICAgICAgICAgICAgUmVmPENTU0ZvbnRGYWNlPiBmYWNlID0g
Q1NTRm9udEZhY2U6OmNyZWF0ZShtYXNrLCBudWxscHRyLCB0cnVlKTsKLSAgICAgICAgICAgIGZh
Y2UtPmFkZFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmYW1pbHlO
YW1lKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZmFjZS0+aXNWYWxpZCgpKTsKLSAgICAgICAgICAg
IGZhY2VzLmFwcGVuZChXVEZNb3ZlKGZhY2UpKTsKLSAgICAgICAgfQotICAgICAgICBsb2NhbGx5
SW5zdGFsbGVkRm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBXVEZNb3ZlKGZhY2VzKSk7CisgICAg
aWYgKHRyYWl0c01hc2tzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9y
PFJlZjxDU1NGb250RmFjZT4+IGZhY2VzID0geyB9OworICAgIGZvciAoYXV0byBtYXNrIDogdHJh
aXRzTWFza3MpIHsKKyAgICAgICAgUmVmPENTU0ZvbnRGYWNlPiBmYWNlID0gQ1NTRm9udEZhY2U6
OmNyZWF0ZShtYXNrLCBudWxscHRyLCB0cnVlKTsKKyAgICAgICAgZmFjZS0+YWRkU291cmNlKHN0
ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGZhbWlseU5hbWUpKTsKKyAgICAgICAg
QVNTRVJUKGZhY2UtPmlzVmFsaWQoKSk7CisgICAgICAgIGZhY2VzLmFwcGVuZChXVEZNb3ZlKGZh
Y2UpKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBsb2NhbGx5SW5zdGFsbGVkRm9u
dEZhY2VzLmFkZChmYW1pbHlOYW1lLCBXVEZNb3ZlKGZhY2VzKSk7CiB9CiAKIHZvaWQgQ1NTRm9u
dFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRG
YWNlUnVsZSwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQpA
QCAtMzI2LDggKzMyNCwxMCBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxl
KGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUsIGJvbwogCiAgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIFZlY3RvcjxSZWY8Q1NT
Rm9udEZhY2U+PigpKTsKICAgICAgICAgYXV0byYgZmFtaWx5Rm9udEZhY2VzID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0gY29uc3RydWN0RmFtaWx5Rm9udEZhY2VzKGZhbWls
eU5hbWUsIG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcyk7CisgICAgICAgIGlmIChhZGRSZXN1
bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgcmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZh
bWlseShmYW1pbHlOYW1lLCBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMpOworICAgICAgICAg
ICAgZmFtaWx5Rm9udEZhY2VzID0geyB9OworICAgICAgICB9CiAKICAgICAgICAgZmFtaWx5Rm9u
dEZhY2VzLmFwcGVuZChmb250RmFjZS5jb3B5UmVmKCkpOwogICAgICAgICAKQEAgLTM5MSw3MSAr
MzkxLDgwIEBAIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHJlc29sdmVHZW5lcmljRmFtaWx5
KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRm9udERlCiAgICAgcmV0dXJuIGZhbWlseU5hbWU7
CiB9CiAKLXN0YXRpYyBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlz
b247Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKGNvbnN0IENTU0ZvbnRG
YWNlJiBmaXJzdCwgY29uc3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKLXsKLSAgICBGb250VHJhaXRz
TWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFpdHNNYXNrKCk7Ci0gICAgRm9udFRyYWl0
c01hc2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29uZC50cmFpdHNNYXNrKCk7Ci0KLSAgICBib29s
IGZpcnN0SGFzRGVzaXJlZFN0eWxlID0gZmlyc3RUcmFpdHNNYXNrICYgZGVzaXJlZFRyYWl0c01h
c2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKLSAgICBib29sIHNlY29uZEhhc0Rlc2ly
ZWRTdHlsZSA9IHNlY29uZFRyYWl0c01hc2sgJiBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlz
b24gJiBGb250U3R5bGVNYXNrOwotCi0gICAgaWYgKGZpcnN0SGFzRGVzaXJlZFN0eWxlICE9IHNl
Y29uZEhhc0Rlc2lyZWRTdHlsZSkKLSAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxl
OwotCi0gICAgaWYgKChkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJ
dGFsaWNNYXNrKSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2Fs
RmFsbGJhY2soKSkgewotICAgICAgICAvLyBQcmVmZXIgYSBmb250IHRoYXQgaGFzIGluZGljYXRl
ZCB0aGF0IGl0IGNhbiBvbmx5IHN1cHBvcnQgaXRhbGljcyB0byBhIGZvbnQgdGhhdCBjbGFpbXMg
dG8gc3VwcG9ydAotICAgICAgICAvLyBhbGwgc3R5bGVzLiAgVGhlIHNwZWNpYWxpemVkIGZvbnQg
aXMgbW9yZSBsaWtlbHkgdG8gYmUgdGhlIG9uZSB0aGUgYXV0aG9yIHdhbnRzIHVzZWQuCi0gICAg
ICAgIGJvb2wgZmlyc3RSZXF1aXJlc0l0YWxpY3MgPSAoZmlyc3RUcmFpdHNNYXNrICYgRm9udFN0
eWxlSXRhbGljTWFzaykgJiYgIShmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNr
KTsKLSAgICAgICAgYm9vbCBzZWNvbmRSZXF1aXJlc0l0YWxpY3MgPSAoc2Vjb25kVHJhaXRzTWFz
ayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoc2Vjb25kVHJhaXRzTWFzayAmIEZvbnRTdHls
ZU5vcm1hbE1hc2spOwotICAgICAgICBpZiAoZmlyc3RSZXF1aXJlc0l0YWxpY3MgIT0gc2Vjb25k
UmVxdWlyZXNJdGFsaWNzKQotICAgICAgICAgICAgcmV0dXJuIGZpcnN0UmVxdWlyZXNJdGFsaWNz
OworY2xhc3MgRm9udEZhY2VDb21wYXJhdG9yIHsKK3B1YmxpYzoKKyAgICBGb250RmFjZUNvbXBh
cmF0b3IoRm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uKQorICAg
ICAgICA6IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uKGRlc2lyZWRUcmFpdHNNYXNr
Rm9yQ29tcGFyaXNvbikKKyAgICB7CiAgICAgfQogCi0gICAgaWYgKHNlY29uZFRyYWl0c01hc2sg
JiBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzaykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChmaXJzdFRyYWl0c01hc2sgJiBkZXNpcmVkVHJhaXRz
TWFza0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzaykKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWNzczMtZm9udHMtMjAxMTEw
MDQvI2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtIHNheXMgOgotICAgIC8vICAgLSBJZiB0aGUgZGVz
aXJlZCB3ZWlnaHQgaXMgbGVzcyB0aGFuIDQwMCwgd2VpZ2h0cyBiZWxvdyB0aGUgZGVzaXJlZCB3
ZWlnaHQgYXJlIGNoZWNrZWQgaW4gZGVzY2VuZGluZyBvcmRlciBmb2xsb3dlZCBieSB3ZWlnaHRz
IGFib3ZlIHRoZSBkZXNpcmVkIHdlaWdodCBpbiBhc2NlbmRpbmcgb3JkZXIgdW50aWwgYSBtYXRj
aCBpcyBmb3VuZC4KLSAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIGdyZWF0ZXIg
dGhhbiA1MDAsIHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGlu
IGFzY2VuZGluZyBvcmRlciBmb2xsb3dlZCBieSB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdl
aWdodCBpbiBkZXNjZW5kaW5nIG9yZGVyIHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuCi0gICAgLy8g
ICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyA0MDAsIDUwMCBpcyBjaGVja2VkIGZpcnN0IGFu
ZCB0aGVuIHRoZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFuIDQwMCBpcyB1c2Vk
LgotICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgNTAwLCA0MDAgaXMgY2hlY2tl
ZCBmaXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBmb3IgZGVzaXJlZCB3ZWlnaHRzIGxlc3MgdGhhbiA0
MDAgaXMgdXNlZC4KLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYWxsYmFja1J1bGVTZXRz
ID0gOTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcnVsZXNQZXJTZXQgPSA4OwotICAgIHN0
YXRpYyBjb25zdCBGb250VHJhaXRzTWFzayB3ZWlnaHRGYWxsYmFja1J1bGVTZXRzW2ZhbGxiYWNr
UnVsZVNldHNdW3J1bGVzUGVyU2V0XSA9IHsKLSAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFzaywg
Rm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywg
Rm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywg
Rm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAgeyBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdl
aWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdl
aWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdl
aWdodDkwME1hc2sgfSwKLSAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEw
ME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDYw
ME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkw
ME1hc2sgfSwKLSAgICAgICAgeyBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDMwME1hc2ss
IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ss
IEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sg
fSwKLSAgICAgICAgeyBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRX
ZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRX
ZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAg
ICAgICAgeyBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5
MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQz
MDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKLSAgICAgICAg
eyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNr
LCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNr
LCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKLSAgICAgICAgeyBGb250
V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250
V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250
V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKLSAgICAgICAgeyBGb250V2VpZ2h0
ODAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0
NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0
MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfQotICAgIH07Ci0KLSAgICB1bnNpZ25lZCBydWxl
U2V0SW5kZXggPSAwOwotICAgIHVuc2lnbmVkIHcgPSBGb250V2VpZ2h0MTAwQml0OwotICAgIHdo
aWxlICghKGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmICgxIDw8IHcpKSkgewotICAg
ICAgICB3Kys7Ci0gICAgICAgIHJ1bGVTZXRJbmRleCsrOwotICAgIH0KKyAgICBib29sIG9wZXJh
dG9yKCkoY29uc3QgQ1NTRm9udEZhY2UmIGZpcnN0LCBjb25zdCBDU1NGb250RmFjZSYgc2Vjb25k
KQorICAgIHsKKyAgICAgICAgRm9udFRyYWl0c01hc2sgZmlyc3RUcmFpdHNNYXNrID0gZmlyc3Qu
dHJhaXRzTWFzaygpOworICAgICAgICBGb250VHJhaXRzTWFzayBzZWNvbmRUcmFpdHNNYXNrID0g
c2Vjb25kLnRyYWl0c01hc2soKTsKKworICAgICAgICBib29sIGZpcnN0SGFzRGVzaXJlZFN0eWxl
ID0gZmlyc3RUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBG
b250U3R5bGVNYXNrOworICAgICAgICBib29sIHNlY29uZEhhc0Rlc2lyZWRTdHlsZSA9IHNlY29u
ZFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRTdHls
ZU1hc2s7CiAKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihydWxlU2V0SW5k
ZXggPCBmYWxsYmFja1J1bGVTZXRzKTsKLSAgICBjb25zdCBGb250VHJhaXRzTWFzayogd2VpZ2h0
RmFsbGJhY2tSdWxlID0gd2VpZ2h0RmFsbGJhY2tSdWxlU2V0c1tydWxlU2V0SW5kZXhdOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlc1BlclNldDsgKytpKSB7Ci0gICAgICAgIGlm
IChzZWNvbmRUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tSdWxlW2ldKQorICAgICAgICBpZiAo
Zmlyc3RIYXNEZXNpcmVkU3R5bGUgIT0gc2Vjb25kSGFzRGVzaXJlZFN0eWxlKQorICAgICAgICAg
ICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOworCisgICAgICAgIGlmICgobV9kZXNpcmVk
VHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhZmlyc3Qu
aXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFsbGJhY2soKSkgeworICAgICAg
ICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhhdCBpdCBjYW4gb25s
eSBzdXBwb3J0IGl0YWxpY3MgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRvIHN1cHBvcnQKKyAgICAg
ICAgICAgIC8vIGFsbCBzdHlsZXMuIFRoZSBzcGVjaWFsaXplZCBmb250IGlzIG1vcmUgbGlrZWx5
IHRvIGJlIHRoZSBvbmUgdGhlIGF1dGhvciB3YW50cyB1c2VkLgorICAgICAgICAgICAgYm9vbCBm
aXJzdFJlcXVpcmVzSXRhbGljcyA9IChmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNN
YXNrKSAmJiAhKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spOworICAgICAg
ICAgICAgYm9vbCBzZWNvbmRSZXF1aXJlc0l0YWxpY3MgPSAoc2Vjb25kVHJhaXRzTWFzayAmIEZv
bnRTdHlsZUl0YWxpY01hc2spICYmICEoc2Vjb25kVHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1h
bE1hc2spOworICAgICAgICAgICAgaWYgKGZpcnN0UmVxdWlyZXNJdGFsaWNzICE9IHNlY29uZFJl
cXVpcmVzSXRhbGljcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RSZXF1aXJlc0l0YWxp
Y3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2Vjb25kVHJhaXRzTWFzayAmIG1fZGVzaXJl
ZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1hc2spCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChmaXJzdFRyYWl0c01hc2sgJiB3ZWlnaHRGYWxsYmFj
a1J1bGVbaV0pCisgICAgICAgIGlmIChmaXJzdFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNN
YXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1jc3MzLWZvbnRz
LTIwMTExMDA0LyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSBzYXlzIDoKKyAgICAgICAgLy8gICAt
IElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBsZXNzIHRoYW4gNDAwLCB3ZWlnaHRzIGJlbG93IHRo
ZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tlZCBpbiBkZXNjZW5kaW5nIG9yZGVyIGZvbGxvd2Vk
IGJ5IHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGluIGFzY2VuZGluZyBvcmRlciB1
bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgorICAgICAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2Vp
Z2h0IGlzIGdyZWF0ZXIgdGhhbiA1MDAsIHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0
IGFyZSBjaGVja2VkIGluIGFzY2VuZGluZyBvcmRlciBmb2xsb3dlZCBieSB3ZWlnaHRzIGJlbG93
IHRoZSBkZXNpcmVkIHdlaWdodCBpbiBkZXNjZW5kaW5nIG9yZGVyIHVudGlsIGEgbWF0Y2ggaXMg
Zm91bmQuCisgICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgNDAwLCA1MDAg
aXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBmb3IgZGVzaXJlZCB3ZWlnaHRzIGxl
c3MgdGhhbiA0MDAgaXMgdXNlZC4KKyAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdo
dCBpcyA1MDAsIDQwMCBpcyBjaGVja2VkIGZpcnN0IGFuZCB0aGVuIHRoZSBydWxlIGZvciBkZXNp
cmVkIHdlaWdodHMgbGVzcyB0aGFuIDQwMCBpcyB1c2VkLgorCisgICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBmYWxsYmFja1J1bGVTZXRzID0gOTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHJ1bGVzUGVyU2V0ID0gODsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvbnRUcmFpdHNN
YXNrIHdlaWdodEZhbGxiYWNrUnVsZVNldHNbZmFsbGJhY2tSdWxlU2V0c11bcnVsZXNQZXJTZXRd
ID0geworICAgICAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDMwME1hc2ss
IEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ss
IEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sg
fSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBG
b250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBG
b250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0s
CisgICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9u
dFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9u
dFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAor
ICAgICAgICAgICAgeyBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRX
ZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRX
ZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKKyAg
ICAgICAgICAgIHsgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2Vp
Z2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2Vp
Z2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCisgICAg
ICAgICAgICB7IEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdo
dDkwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdo
dDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9LAorICAgICAg
ICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ2
MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQz
MDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKKyAgICAgICAg
ICAgIHsgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0NjAw
TWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAw
TWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0sCisgICAgICAgICAg
ICB7IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDYwME1h
c2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1h
c2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9CisgICAgICAgIH07CisK
KyAgICAgICAgdW5zaWduZWQgcnVsZVNldEluZGV4ID0gMDsKKyAgICAgICAgdW5zaWduZWQgdyA9
IEZvbnRXZWlnaHQxMDBCaXQ7CisgICAgICAgIHdoaWxlICghKG1fZGVzaXJlZFRyYWl0c01hc2tG
b3JDb21wYXJpc29uICYgKDEgPDwgdykpKSB7CisgICAgICAgICAgICB3Kys7CisgICAgICAgICAg
ICBydWxlU2V0SW5kZXgrKzsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKHJ1bGVTZXRJbmRleCA8IGZhbGxiYWNrUnVsZVNldHMpOworICAgICAg
ICBjb25zdCBGb250VHJhaXRzTWFzayogd2VpZ2h0RmFsbGJhY2tSdWxlID0gd2VpZ2h0RmFsbGJh
Y2tSdWxlU2V0c1tydWxlU2V0SW5kZXhdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcnVsZXNQZXJTZXQ7ICsraSkgeworICAgICAgICAgICAgaWYgKHNlY29uZFRyYWl0c01hc2sg
JiB3ZWlnaHRGYWxsYmFja1J1bGVbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgaWYgKGZpcnN0VHJhaXRzTWFzayAmIHdlaWdodEZhbGxiYWNrUnVsZVtpXSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7Ci19Citwcml2YXRlOgorICAgIEZv
bnRUcmFpdHNNYXNrIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uOworfTsKIAogRm9u
dFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFt
ZSkKIHsKQEAgLTQ4NSwzMyArNDk0LDM0IEBAIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBDU1NGb250
U2VsZWN0b3I6OmdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlCiAgICAg
Rm9udFRyYWl0c01hc2sgdHJhaXRzTWFzayA9IGZvbnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7
CiAKICAgICBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+JiBmYWNlID0gc2VnbWVudGVkRm9u
dEZhY2VDYWNoZS5hZGQodHJhaXRzTWFzaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAg
IGlmICghZmFjZSkgewotICAgICAgICBmYWNlID0gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmNyZWF0
ZSh0aGlzKTsKKyAgICBpZiAoZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhY2UuZ2V0KCk7CisKKyAg
ICBmYWNlID0gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmNyZWF0ZSh0aGlzKTsKIAotICAgICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4sIDMyPiBjYW5kaWRhdGVG
b250RmFjZXM7Ci0gICAgICAgIGZvciAoaW50IGkgPSBmYW1pbHlGb250RmFjZXMuc2l6ZSgpIC0g
MTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIENTU0ZvbnRGYWNlJiBjYW5kaWRhdGUgPSBm
YW1pbHlGb250RmFjZXNbaV07Ci0gICAgICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNN
YXNrID0gY2FuZGlkYXRlLnRyYWl0c01hc2soKTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxDU1NGb250RmFjZT4sIDMyPiBjYW5kaWRhdGVGb250RmFjZXM7CisgICAgZm9yIChp
bnQgaSA9IGZhbWlseUZvbnRGYWNlcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAg
ICBDU1NGb250RmFjZSYgY2FuZGlkYXRlID0gZmFtaWx5Rm9udEZhY2VzW2ldOworICAgICAgICB1
bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNNYXNrID0gY2FuZGlkYXRlLnRyYWl0c01hc2soKTsKKyAg
ICAgICAgaWYgKCh0cmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykgJiYgIShjYW5kaWRh
dGVUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgY2FuZGlkYXRlRm9udEZhY2VzLmFwcGVuZChjYW5kaWRhdGUpOworICAgIH0K
KworICAgIGF1dG8gbG9jYWxJdGVyYXRvciA9IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5m
aW5kKGZhbWlseSk7CisgICAgaWYgKGxvY2FsSXRlcmF0b3IgIT0gbV9sb2NhbGx5SW5zdGFsbGVk
Rm9udEZhY2VzLmVuZCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbG9jYWxJ
dGVyYXRvci0+dmFsdWUpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0c01h
c2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2soKTsKICAgICAgICAgICAgIGlmICgodHJhaXRzTWFz
ayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRT
dHlsZU5vcm1hbE1hc2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Y2FuZGlkYXRlRm9udEZhY2VzLmFwcGVuZChjYW5kaWRhdGUpOwogICAgICAgICB9CisgICAgfQog
Ci0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMuZmlu
ZChmYW1pbHkpOwotICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9sb2NhbGx5SW5zdGFsbGVkRm9u
dEZhY2VzLmVuZCgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGl0ZXJh
dG9yLT52YWx1ZSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0c01h
c2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2soKTsKLSAgICAgICAgICAgICAgICBpZiAoKHRyYWl0
c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBG
b250U3R5bGVOb3JtYWxNYXNrKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgY2FuZGlkYXRlRm9udEZhY2VzLmFwcGVuZChjYW5kaWRhdGUpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgc3RkOjpzdGFibGVfc29ydChjYW5kaWRhdGVGb250RmFj
ZXMuYmVnaW4oKSwgY2FuZGlkYXRlRm9udEZhY2VzLmVuZCgpLCBGb250RmFjZUNvbXBhcmF0b3Io
dHJhaXRzTWFzaykpOworICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogY2FuZGlkYXRlRm9udEZh
Y2VzKQorICAgICAgICBmYWNlLT5hcHBlbmRGb250RmFjZShjYW5kaWRhdGUuZ2V0KCkpOwogCi0g
ICAgICAgIGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiA9IHRyYWl0c01hc2s7Ci0gICAg
ICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0
ZUZvbnRGYWNlcy5lbmQoKSwgY29tcGFyZUZvbnRGYWNlcyk7Ci0gICAgICAgIGZvciAoYXV0byYg
Y2FuZGlkYXRlIDogY2FuZGlkYXRlRm9udEZhY2VzKQotICAgICAgICAgICAgZmFjZS0+YXBwZW5k
Rm9udEZhY2UoY2FuZGlkYXRlLmdldCgpKTsKLSAgICB9CiAgICAgcmV0dXJuIGZhY2UuZ2V0KCk7
CiB9CiAKQEAgLTU3MCwyMSArNTgwLDYgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmJlZ2luTG9h
ZFRpbWVyRmlyZWQoKQogICAgICAgICBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS5jaGVj
a0xvYWRDb21wbGV0ZSgpOwogfQogCi1ib29sIENTU0ZvbnRTZWxlY3Rvcjo6cmVzb2x2ZXNGYW1p
bHlGb3IoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pIGNvbnN0Ci17
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7
ICsraSkgewotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUgPSBkZXNjcmlw
dGlvbi5mYW1pbHlBdChpKTsKLSAgICAgICAgaWYgKGZhbWlseU5hbWUuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChtX2ZvbnRGYWNlcy5jb250YWlucyhmYW1p
bHlOYW1lKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiB3ZWJraXRQcmVmaXgoIi13ZWJraXQtIik7Ci0gICAgICAgIGlmIChm
YW1pbHlOYW1lLnN0YXJ0c1dpdGgod2Via2l0UHJlZml4LmdldCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHNpemVfdCBDU1NGb250
U2VsZWN0b3I6OmZhbGxiYWNrRm9udENvdW50KCkKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpCkBA
IC01OTYsNyArNTkxLDcgQEAgc2l6ZV90IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250Q291
bnQoKQogICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPEZvbnQ+IENTU0ZvbnRTZWxlY3Rv
cjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IHNpemVfdCBpbmRleCkKK1JlZlB0cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9u
dEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgp
CiB7CiAgICAgQVNTRVJUX1VOVVNFRChpbmRleCwgIWluZGV4KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5oCmluZGV4IDZmMTMwZjc1OGE5NzYzOTVlNzkxYzNmMjQ0YmI3MGU1M2Vk
NzAzOGQuLjI2ZGVhZDE1YTg1YWZiNDA0MTRiYTMxMzdjMDMzODQ4ZWIyYmZjOGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTU5LDExICs1OSw5IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgRm9udFJhbmdlcyBmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgc2l6
ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBSZWZQdHI8Rm9udD4gZmFsbGJhY2tGb250QXQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgc2l6ZV90KSBvdmVycmlkZTsKICAgICBDU1NTZWdtZW50ZWRGb250RmFj
ZSogZ2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5n
JiBmYW1pbHkpOwogCi0gICAgdmlydHVhbCBib29sIHJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKLQogICAgIHZvaWQgY2xlYXJE
b2N1bWVudCgpOwogCiAgICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9u
dEZhY2UmLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKaW5kZXgg
MjEwOTBiM2JkM2UzMDJmOTEyNjQyYmVjYzI1ZWRkYzY4ZTY5ZWFkNS4uNzBhMTI3OTc0NDYzNmVi
OWE3OTRhYzIxZmE1ZmUwYzYwYWI1NjhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBAIC0zNjcsNyArMzY3LDcgQEAgaW5saW5lIGJvb2wg
Rm9udENhc2NhZGU6OmlzRml4ZWRQaXRjaCgpIGNvbnN0CiAKIGlubGluZSBGb250U2VsZWN0b3Iq
IEZvbnRDYXNjYWRlOjpmb250U2VsZWN0b3IoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZvbnRz
ID8gbV9mb250cy0+Zm9udFNlbGVjdG9yKCkgOiAwOworICAgIHJldHVybiBtX2ZvbnRzID8gbV9m
b250cy0+Zm9udFNlbGVjdG9yKCkgOiBudWxscHRyOwogfQogCiBpbmxpbmUgZmxvYXQgRm9udENh
c2NhZGU6OnRhYldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0
IHBvc2l0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250U2VsZWN0b3IuaAppbmRleCBkMjBiNThjM2E0MmRlNmJhNDQ2MTFjZWZkNGYwNjg1MzYxOThm
ZmVmLi43NGZmOTZhYzE2MTk2NDg4NzIyOTE5ZTJmNTY4YjJjOWM0ODljZGE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtNDIsMTAg
KzQyLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQogCiAgICAg
dmlydHVhbCBGb250UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxG
b250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpID0gMDsK
KyAgICB2aXJ0dWFsIFJlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBzaXplX3QpID0gMDsKIAogICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENv
dW50KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRD
YWNoZUludmFsaWRhdGVkKCkgeyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268794</attachid>
            <date>2016-01-12 11:56:40 -0800</date>
            <delta_ts>2016-01-12 13:09:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153023-20160112115609.patch</filename>
            <type>text/plain</type>
            <size>25924</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0OTA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODhmOTE1YWRkOWVkY2M3
Y2RmODEyZWY2ZWQ4MWU0MWYyMWI3OTBkNi4uNzRmMmQ2Zjg2MzI3ZDUwMTMwZGViN2JlZTYwMDc5
YmVlOWNmOWZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTAxLTEyICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW51cCBp
biBmb250IGxvYWRpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUzMDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU2VlIGRldGFpbGVkIG5vdGVzIGJlbG93LgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNz
cy9DU1NGb250RmFjZS5jcHA6IFJlbmFtZSBtX3NlZ21lbnRlZEZvbnRGYWNlcyB0byBtX3NlZ21l
bnRlZEZvbnRGYWNlLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmFkZGVkVG9TZWdt
ZW50ZWRGb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6cmVtb3ZlZEZy
b21TZWdtZW50ZWRGb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9u
dExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250RmFjZTo6bm90aWZ5Rm9udExvYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZTo6bm90aWZ5TG9hZGluZ0RvbmUpOgorICAgICAgICAqIGNzcy9DU1NG
b250RmFjZS5oOiBEaXR0by4KKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkpOiBjb25zdHJ1
Y3RGYW1pbHlGb250RmFjZXMoKQorICAgICAgICBhbHdheXMgcmV0dXJucyBhbiBlbXB0eSBWZWN0
b3IuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIG9mIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgaXMg
dG8gcGVyZm9ybSB0aGUgYW5jaWxsYXJ5IHByb2Nlc3NpbmcgcmVsYXRlZCB0byB0aGUgY2FzZSB3
aGVyZSB0aGUgRmFjZXMKKyAgICAgICAgZG9uJ3QgYWxyZWFkeSBleGlzdC4gUmVuYW1lcyB0aGUg
ZnVuY3Rpb24gYW5kIHJlbW92ZXMgdGhlIGVtcHR5IHZlY3RvcgorICAgICAgICByZXR1cm4uCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6IFVwZGF0
ZSBmb3IKKyAgICAgICAgcmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseSgpLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udEZhY2VDb21wYXJhdG9yOjpGb250RmFjZUNvbXBhcmF0b3IpOiBJbnN0
ZWFkIG9mIHVzaW5nIGEgc3RhdGljLAorICAgICAgICBjb25zdHJ1Y3QgYSB3cmFwcGVyIGNsYXNz
IGFyb3VuZCB0aGUgY29tcGFyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFy
YXRvcjo6b3BlcmF0b3IoKSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVj
dG9yOjpnZXRGb250RmFjZSk6IFVuLWluZGVudCBjb2RlIGFuZCB1cGRhdGUgdG8gdXNlCisgICAg
ICAgIEZvbnRGYWNlQ29tcGFyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rv
cjo6ZmFsbGJhY2tGb250QXQpOiBNaWdyYXRlIG9mZiBQYXNzUmVmUHRyLgorICAgICAgICAoV2Vi
Q29yZTo6Y29uc3RydWN0RmFtaWx5Rm9udEZhY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbXBhcmVGb250RmFjZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9u
dFNlbGVjdG9yOjpyZXNvbHZlc0ZhbWlseUZvcik6IERlbGV0ZWQuIE5ldmVyIGNhbGxlZC4KKyAg
ICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmb250U2Vs
ZWN0b3IpOiBVc2UgbnVsbHB0ci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaDoKKwogMjAxNi0wMS0xMiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgTW9kZXJuIElEQjogc3RvcmFnZS9pbmRleGVkZGIvZG9udC13ZWRnZS5odG1s
IGlzIGZsYWt5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKaW5kZXggNjc4NTZlYzViOWYw
MGUxNzRiZDMwODFlNWNiNWJhMTQ1ZDk5MjhkZS4uNmUzMWU4ODQyZDIxZjlkYWZmZjE3MmNiZDQx
ODY5MDVkZmRiMDBlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCkBAIC01OSwxMiAr
NTksMTIgQEAgYm9vbCBDU1NGb250RmFjZTo6aXNWYWxpZCgpIGNvbnN0CiAKIHZvaWQgQ1NTRm9u
dEZhY2U6OmFkZGVkVG9TZWdtZW50ZWRGb250RmFjZShDU1NTZWdtZW50ZWRGb250RmFjZSogc2Vn
bWVudGVkRm9udEZhY2UpCiB7Ci0gICAgbV9zZWdtZW50ZWRGb250RmFjZXMuYWRkKHNlZ21lbnRl
ZEZvbnRGYWNlKTsKKyAgICBtX3NlZ21lbnRlZEZvbnRGYWNlLmFkZChzZWdtZW50ZWRGb250RmFj
ZSk7CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2U6OnJlbW92ZWRGcm9tU2VnbWVudGVkRm9udEZhY2Uo
Q1NTU2VnbWVudGVkRm9udEZhY2UqIHNlZ21lbnRlZEZvbnRGYWNlKQogewotICAgIG1fc2VnbWVu
dGVkRm9udEZhY2VzLnJlbW92ZShzZWdtZW50ZWRGb250RmFjZSk7CisgICAgbV9zZWdtZW50ZWRG
b250RmFjZS5yZW1vdmUoc2VnbWVudGVkRm9udEZhY2UpOwogfQogCiB2b2lkIENTU0ZvbnRGYWNl
OjphZGRTb3VyY2Uoc3RkOjp1bmlxdWVfcHRyPENTU0ZvbnRGYWNlU291cmNlPiBzb3VyY2UpCkBA
IC03OCwxNSArNzgsMTUgQEAgdm9pZCBDU1NGb250RmFjZTo6Zm9udExvYWRlZChDU1NGb250RmFj
ZVNvdXJjZSogc291cmNlKQogICAgIGlmIChzb3VyY2UgIT0gbV9hY3RpdmVTb3VyY2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBDYW4gd2UgYXNzZXJ0IHRoYXQgbV9zZWdtZW50
ZWRGb250RmFjZXMgaXMgbm90IGVtcHR5PyBUaGF0IG1heQorICAgIC8vIEZJWE1FOiBDYW4gd2Ug
YXNzZXJ0IHRoYXQgbV9zZWdtZW50ZWRGb250RmFjZSBpcyBub3QgZW1wdHk/IFRoYXQgbWF5CiAg
ICAgLy8gcmVxdWlyZSBzdG9wcGluZyBpbi1wcm9ncmVzcyBmb250IGxvYWRpbmcgd2hlbiB0aGUg
bGFzdAogICAgIC8vIENTU1NlZ21lbnRlZEZvbnRGYWNlIGlzIHJlbW92ZWQuCi0gICAgaWYgKG1f
c2VnbWVudGVkRm9udEZhY2VzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9zZWdtZW50ZWRGb250RmFj
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSBvbmUgb2YgdGhlIENT
U1NlZ21lbnRlZEZvbnRGYWNlcycgZm9udCBzZWxlY3Rvci4gVGhleSBhbGwgaGF2ZQogICAgIC8v
IHRoZSBzYW1lIGZvbnQgc2VsZWN0b3IsIHNvIGl0J3Mgd2FzdGVmdWwgdG8gc3RvcmUgaXQgaW4g
dGhlIENTU0ZvbnRGYWNlLgotICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gKCpt
X3NlZ21lbnRlZEZvbnRGYWNlcy5iZWdpbigpKS0+Zm9udFNlbGVjdG9yKCk7CisgICAgQ1NTRm9u
dFNlbGVjdG9yKiBmb250U2VsZWN0b3IgPSAoKm1fc2VnbWVudGVkRm9udEZhY2UuYmVnaW4oKSkt
PmZvbnRTZWxlY3RvcigpOwogICAgIGZvbnRTZWxlY3Rvci0+Zm9udExvYWRlZCgpOwogCiAjaWYg
RU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgQ1NTRm9udEZh
Y2U6OmZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqIHNvdXJjZSkKICAgICB9CiAjZW5kaWYK
IAotICAgIGZvciAoYXV0byogZmFjZSA6IG1fc2VnbWVudGVkRm9udEZhY2VzKQorICAgIGZvciAo
YXV0byogZmFjZSA6IG1fc2VnbWVudGVkRm9udEZhY2UpCiAgICAgICAgIGZhY2UtPmZvbnRMb2Fk
ZWQodGhpcyk7CiAKICNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykKQEAgLTExMyw4ICsxMTMs
OCBAQCBSZWZQdHI8Rm9udD4gQ1NTRm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGJvb2wgc3ludAogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIEFTU0VSVCghbV9zZWdtZW50ZWRGb250RmFjZXMuaXNFbXB0eSgp
KTsKLSAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9ICgqbV9zZWdtZW50ZWRGb250
RmFjZXMuYmVnaW4oKSktPmZvbnRTZWxlY3RvcigpOworICAgIEFTU0VSVCghbV9zZWdtZW50ZWRG
b250RmFjZS5pc0VtcHR5KCkpOworICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0g
KCptX3NlZ21lbnRlZEZvbnRGYWNlLmJlZ2luKCkpLT5mb250U2VsZWN0b3IoKTsKIAogI2lmIEVO
QUJMRShGT05UX0xPQURfRVZFTlRTKQogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLmZvbnRMb2FkRXZlbnRzRW5hYmxlZCgpICYmIG1fbG9hZFN0YXRlID09
IE5vdExvYWRlZCkKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIENTU0ZvbnRGYWNlOjpub3RpZnlG
b250TG9hZGVyKExvYWRTdGF0ZSBuZXdTdGF0ZSkKIHsKICAgICBtX2xvYWRTdGF0ZSA9IG5ld1N0
YXRlOwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gKCptX3NlZ21lbnRlZEZvbnRGYWNlcy5i
ZWdpbigpKS0+Zm9udFNlbGVjdG9yKCktPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gKCptX3NlZ21lbnRlZEZvbnRGYWNlLmJlZ2luKCkpLT5mb250U2VsZWN0b3IoKS0+ZG9j
dW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKQEAgLTE3MCw3
ICsxNzAsNyBAQCB2b2lkIENTU0ZvbnRGYWNlOjpub3RpZnlGb250TG9hZGVyKExvYWRTdGF0ZSBu
ZXdTdGF0ZSkKIAogdm9pZCBDU1NGb250RmFjZTo6bm90aWZ5TG9hZGluZ0RvbmUoKQogewotICAg
IERvY3VtZW50KiBkb2N1bWVudCA9ICgqbV9zZWdtZW50ZWRGb250RmFjZXMuYmVnaW4oKSktPmZv
bnRTZWxlY3RvcigpLT5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9ICgqbV9z
ZWdtZW50ZWRGb250RmFjZS5iZWdpbigpKS0+Zm9udFNlbGVjdG9yKCktPmRvY3VtZW50KCk7CiAg
ICAgaWYgKGRvY3VtZW50KQogICAgICAgICBkb2N1bWVudC0+Zm9udHMoKS0+bG9hZGluZ0RvbmUo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKaW5kZXggMWQ3MjU5ZmMzNzgxNzA2YmRjMTYz
ZGIyOGExNGI2ZjE0YmMyYWIwNi4uYTI5ZmZhZDQ0MTVlZTViYzBiMTBkNjc3YmFiOWE1OGMyMzM4
MTNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2
YXRlOgogCiAgICAgRm9udFRyYWl0c01hc2sgbV90cmFpdHNNYXNrOwogICAgIFZlY3RvcjxVbmlj
b2RlUmFuZ2U+IG1fcmFuZ2VzOwotICAgIEhhc2hTZXQ8Q1NTU2VnbWVudGVkRm9udEZhY2UqPiBt
X3NlZ21lbnRlZEZvbnRGYWNlczsKKyAgICBIYXNoU2V0PENTU1NlZ21lbnRlZEZvbnRGYWNlKj4g
bV9zZWdtZW50ZWRGb250RmFjZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVyZVNl
dHRpbmdzOwogICAgIEZvbnRWYXJpYW50U2V0dGluZ3MgbV92YXJpYW50U2V0dGluZ3M7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NGb250RmFjZVNvdXJjZT4+IG1fc291cmNlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAppbmRleCBhMmQwYWZhNDVl
YzMwYWM1OWU3ODVkOWVhOTkxOTBkZTI1ZjhhYThmLi5lYjBlZjEyNmU1ODRkYzFlNWQ5MzQ2YjAw
MDk4ZDBjNzAxN2I5OWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTcmNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFs
dWUuY3BwCkBAIC0xMDAsMTQgKzEwMCwxNSBAQCBib29sIENTU0ZvbnRGYWNlU3JjVmFsdWU6OnRy
YXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoY29uc3QgQwogCiBD
YWNoZWRGb250KiBDU1NGb250RmFjZVNyY1ZhbHVlOjpjYWNoZWRGb250KERvY3VtZW50KiBkb2N1
bWVudCwgYm9vbCBpc1NWRywgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFk
b3dUcmVlKQogewotICAgIGlmICghbV9jYWNoZWRGb250KSB7Ci0gICAgICAgIFJlc291cmNlTG9h
ZGVyT3B0aW9ucyBvcHRpb25zID0gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRS
ZXNvdXJjZU9wdGlvbnMoKTsKLSAgICAgICAgb3B0aW9ucy5zZXRDb250ZW50U2VjdXJpdHlQb2xp
Y3lJbXBvc2l0aW9uKGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUgPyBD
b250ZW50U2VjdXJpdHlQb2xpY3lJbXBvc2l0aW9uOjpTa2lwUG9saWN5Q2hlY2sgOiBDb250ZW50
U2VjdXJpdHlQb2xpY3lJbXBvc2l0aW9uOjpEb1BvbGljeUNoZWNrKTsKKyAgICBpZiAobV9jYWNo
ZWRGb250KQorICAgICAgICByZXR1cm4gbV9jYWNoZWRGb250LmdldCgpOwogCi0gICAgICAgIENh
Y2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChkb2N1bWVudC0+Y29t
cGxldGVVUkwobV9yZXNvdXJjZSkpLCBvcHRpb25zKTsKLSAgICAgICAgcmVxdWVzdC5zZXRJbml0
aWF0b3IoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycygpLmNzcyk7Ci0gICAgICAgIG1f
Y2FjaGVkRm9udCA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnJlcXVlc3RGb250
KHJlcXVlc3QsIGlzU1ZHKTsKLSAgICB9CisgICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlv
bnMgPSBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygp
OworICAgIG9wdGlvbnMuc2V0Q29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbihpc0luaXRp
YXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlID8gQ29udGVudFNlY3VyaXR5UG9saWN5
SW1wb3NpdGlvbjo6U2tpcFBvbGljeUNoZWNrIDogQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3Np
dGlvbjo6RG9Qb2xpY3lDaGVjayk7CisKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QoZG9jdW1lbnQtPmNvbXBsZXRlVVJMKG1fcmVzb3VyY2UpKSwgb3B0
aW9ucyk7CisgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5p
dGlhdG9ycygpLmNzcyk7CisgICAgbV9jYWNoZWRGb250ID0gZG9jdW1lbnQtPmNhY2hlZFJlc291
cmNlTG9hZGVyKCkucmVxdWVzdEZvbnQocmVxdWVzdCwgaXNTVkcpOwogICAgIHJldHVybiBtX2Nh
Y2hlZEZvbnQuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAK
aW5kZXggYjk5MjgwMWJiODFiM2VmNmQwYmE4Nzk3N2FhMDIwNTM2OGJkMjhhZi4uYjg5YzIxODhj
YzRhZDA3NjJlZDNkMzlmZmE4MTQ5NjdiNjMzNzE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5jcHAKQEAgLTIzMSwyNCArMjMxLDIyIEBAIHN0YXRpYyBTdHJpbmcgZmFtaWx5
TmFtZUZyb21QcmltaXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQogICAgIH0K
IH0KIAotc3RhdGljIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiBjb25zdHJ1Y3RGYW1pbHlGb250
RmFjZXMoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJl
ZjxDU1NGb250RmFjZT4+LCBDYXNlRm9sZGluZ0hhc2g+JiBsb2NhbGx5SW5zdGFsbGVkRm9udEZh
Y2VzKQorc3RhdGljIHZvaWQgcmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseShjb25zdCBT
dHJpbmcmIGZhbWlseU5hbWUsIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNl
Pj4sIENhc2VGb2xkaW5nSGFzaD4mIGxvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMpCiB7Ci0gICAg
YXV0byByZXN1bHQgPSBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4oKTsKLQogICAgIEFTU0VSVCgh
bG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5jb250YWlucyhmYW1pbHlOYW1lKSk7CiAKICAgICBW
ZWN0b3I8Rm9udFRyYWl0c01hc2s+IHRyYWl0c01hc2tzID0gRm9udENhY2hlOjpzaW5nbGV0b24o
KS5nZXRUcmFpdHNJbkZhbWlseShmYW1pbHlOYW1lKTsKLSAgICBpZiAoIXRyYWl0c01hc2tzLmlz
RW1wdHkoKSkgewotICAgICAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4gZmFjZXMgPSB7IH07
Ci0gICAgICAgIGZvciAoYXV0byBtYXNrIDogdHJhaXRzTWFza3MpIHsKLSAgICAgICAgICAgIFJl
ZjxDU1NGb250RmFjZT4gZmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUobWFzaywgbnVsbHB0ciwg
dHJ1ZSk7Ci0gICAgICAgICAgICBmYWNlLT5hZGRTb3VyY2Uoc3RkOjptYWtlX3VuaXF1ZTxDU1NG
b250RmFjZVNvdXJjZT4oZmFtaWx5TmFtZSkpOwotICAgICAgICAgICAgQVNTRVJUKGZhY2UtPmlz
VmFsaWQoKSk7Ci0gICAgICAgICAgICBmYWNlcy5hcHBlbmQoV1RGTW92ZShmYWNlKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwg
V1RGTW92ZShmYWNlcykpOworICAgIGlmICh0cmFpdHNNYXNrcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiBmYWNlcyA9IHsgfTsKKyAg
ICBmb3IgKGF1dG8gbWFzayA6IHRyYWl0c01hc2tzKSB7CisgICAgICAgIFJlZjxDU1NGb250RmFj
ZT4gZmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUobWFzaywgbnVsbHB0ciwgdHJ1ZSk7CisgICAg
ICAgIGZhY2UtPmFkZFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihm
YW1pbHlOYW1lKSk7CisgICAgICAgIEFTU0VSVChmYWNlLT5pc1ZhbGlkKCkpOworICAgICAgICBm
YWNlcy5hcHBlbmQoV1RGTW92ZShmYWNlKSk7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgV1RGTW92ZShmYWNl
cykpOwogfQogCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0
eWxlUnVsZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSkKQEAgLTMyNiw4ICszMjQsMTAgQEAgdm9pZCBDU1NGb250U2Vs
ZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VS
dWxlLCBib28KIAogICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udEZhY2VzLmFkZChmYW1p
bHlOYW1lLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4oKSk7CiAgICAgICAgIGF1dG8mIGZhbWls
eUZvbnRGYWNlcyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIGZhbWlseUZvbnRGYWNlcyA9IGNvbnN0cnVj
dEZhbWlseUZvbnRGYWNlcyhmYW1pbHlOYW1lLCBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMp
OworICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIHJlZ2lz
dGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoZmFtaWx5TmFtZSwgbV9sb2NhbGx5SW5zdGFsbGVk
Rm9udEZhY2VzKTsKKyAgICAgICAgICAgIGZhbWlseUZvbnRGYWNlcyA9IHsgfTsKKyAgICAgICAg
fQogCiAgICAgICAgIGZhbWlseUZvbnRGYWNlcy5hcHBlbmQoZm9udEZhY2UuY29weVJlZigpKTsK
ICAgICAgICAgCkBAIC0zOTEsNzEgKzM5MSw4MCBAQCBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
JiByZXNvbHZlR2VuZXJpY0ZhbWlseShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEZvbnREZQog
ICAgIHJldHVybiBmYW1pbHlOYW1lOwogfQogCi1zdGF0aWMgRm9udFRyYWl0c01hc2sgZGVzaXJl
ZFRyYWl0c01hc2tGb3JDb21wYXJpc29uOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUZv
bnRGYWNlcyhjb25zdCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNv
bmQpCi17Ci0gICAgRm9udFRyYWl0c01hc2sgZmlyc3RUcmFpdHNNYXNrID0gZmlyc3QudHJhaXRz
TWFzaygpOwotICAgIEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQudHJh
aXRzTWFzaygpOwotCi0gICAgYm9vbCBmaXJzdEhhc0Rlc2lyZWRTdHlsZSA9IGZpcnN0VHJhaXRz
TWFzayAmIGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRTdHlsZU1hc2s7Ci0g
ICAgYm9vbCBzZWNvbmRIYXNEZXNpcmVkU3R5bGUgPSBzZWNvbmRUcmFpdHNNYXNrICYgZGVzaXJl
ZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKLQotICAgIGlmIChmaXJz
dEhhc0Rlc2lyZWRTdHlsZSAhPSBzZWNvbmRIYXNEZXNpcmVkU3R5bGUpCi0gICAgICAgIHJldHVy
biBmaXJzdEhhc0Rlc2lyZWRTdHlsZTsKLQotICAgIGlmICgoZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgIWZpcnN0LmlzTG9jYWxGYWxsYmFj
aygpICYmICFzZWNvbmQuaXNMb2NhbEZhbGxiYWNrKCkpIHsKLSAgICAgICAgLy8gUHJlZmVyIGEg
Zm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhhdCBpdCBjYW4gb25seSBzdXBwb3J0IGl0YWxpY3Mg
dG8gYSBmb250IHRoYXQgY2xhaW1zIHRvIHN1cHBvcnQKLSAgICAgICAgLy8gYWxsIHN0eWxlcy4g
IFRoZSBzcGVjaWFsaXplZCBmb250IGlzIG1vcmUgbGlrZWx5IHRvIGJlIHRoZSBvbmUgdGhlIGF1
dGhvciB3YW50cyB1c2VkLgotICAgICAgICBib29sIGZpcnN0UmVxdWlyZXNJdGFsaWNzID0gKGZp
cnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoZmlyc3RUcmFpdHNNYXNr
ICYgRm9udFN0eWxlTm9ybWFsTWFzayk7Ci0gICAgICAgIGJvb2wgc2Vjb25kUmVxdWlyZXNJdGFs
aWNzID0gKHNlY29uZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhKHNlY29u
ZFRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKTsKLSAgICAgICAgaWYgKGZpcnN0UmVx
dWlyZXNJdGFsaWNzICE9IHNlY29uZFJlcXVpcmVzSXRhbGljcykKLSAgICAgICAgICAgIHJldHVy
biBmaXJzdFJlcXVpcmVzSXRhbGljczsKK2NsYXNzIEZvbnRGYWNlQ29tcGFyYXRvciB7CitwdWJs
aWM6CisgICAgRm9udEZhY2VDb21wYXJhdG9yKEZvbnRUcmFpdHNNYXNrIGRlc2lyZWRUcmFpdHNN
YXNrRm9yQ29tcGFyaXNvbikKKyAgICAgICAgOiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFy
aXNvbihkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24pCisgICAgewogICAgIH0KIAotICAg
IGlmIChzZWNvbmRUcmFpdHNNYXNrICYgZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYg
Rm9udFdlaWdodE1hc2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZmlyc3RUcmFp
dHNNYXNrICYgZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1hc2sp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAx
MS9XRC1jc3MzLWZvbnRzLTIwMTExMDA0LyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSBzYXlzIDoK
LSAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIGxlc3MgdGhhbiA0MDAsIHdlaWdo
dHMgYmVsb3cgdGhlIGRlc2lyZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGRlc2NlbmRpbmcgb3Jk
ZXIgZm9sbG93ZWQgYnkgd2VpZ2h0cyBhYm92ZSB0aGUgZGVzaXJlZCB3ZWlnaHQgaW4gYXNjZW5k
aW5nIG9yZGVyIHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuCi0gICAgLy8gICAtIElmIHRoZSBkZXNp
cmVkIHdlaWdodCBpcyBncmVhdGVyIHRoYW4gNTAwLCB3ZWlnaHRzIGFib3ZlIHRoZSBkZXNpcmVk
IHdlaWdodCBhcmUgY2hlY2tlZCBpbiBhc2NlbmRpbmcgb3JkZXIgZm9sbG93ZWQgYnkgd2VpZ2h0
cyBiZWxvdyB0aGUgZGVzaXJlZCB3ZWlnaHQgaW4gZGVzY2VuZGluZyBvcmRlciB1bnRpbCBhIG1h
dGNoIGlzIGZvdW5kLgotICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgNDAwLCA1
MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBmb3IgZGVzaXJlZCB3ZWlnaHRz
IGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4KLSAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0
IGlzIDUwMCwgNDAwIGlzIGNoZWNrZWQgZmlyc3QgYW5kIHRoZW4gdGhlIHJ1bGUgZm9yIGRlc2ly
ZWQgd2VpZ2h0cyBsZXNzIHRoYW4gNDAwIGlzIHVzZWQuCi0KLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZmFsbGJhY2tSdWxlU2V0cyA9IDk7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJ1
bGVzUGVyU2V0ID0gODsKLSAgICBzdGF0aWMgY29uc3QgRm9udFRyYWl0c01hc2sgd2VpZ2h0RmFs
bGJhY2tSdWxlU2V0c1tmYWxsYmFja1J1bGVTZXRzXVtydWxlc1BlclNldF0gPSB7Ci0gICAgICAg
IHsgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFz
aywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFz
aywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgIHsgRm9u
dFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9u
dFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9u
dFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgIHsgRm9udFdlaWdo
dDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdo
dDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdo
dDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgIHsgRm9udFdlaWdodDUwME1h
c2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1h
c2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1h
c2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgIHsgRm9udFdlaWdodDQwME1hc2ssIEZv
bnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZv
bnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZv
bnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgIHsgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWln
aHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWln
aHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWln
aHQxMDBNYXNrIH0sCi0gICAgICAgIHsgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBN
YXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBN
YXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBN
YXNrIH0sCi0gICAgICAgIHsgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBG
b250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBG
b250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0s
Ci0gICAgICAgIHsgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2Vp
Z2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2Vp
Z2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0KLSAgICB9
OwotCi0gICAgdW5zaWduZWQgcnVsZVNldEluZGV4ID0gMDsKLSAgICB1bnNpZ25lZCB3ID0gRm9u
dFdlaWdodDEwMEJpdDsKLSAgICB3aGlsZSAoIShkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlz
b24gJiAoMSA8PCB3KSkpIHsKLSAgICAgICAgdysrOwotICAgICAgICBydWxlU2V0SW5kZXgrKzsK
LSAgICB9CisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENTU0ZvbnRGYWNlJiBmaXJzdCwgY29u
c3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKKyAgICB7CisgICAgICAgIEZvbnRUcmFpdHNNYXNrIGZp
cnN0VHJhaXRzTWFzayA9IGZpcnN0LnRyYWl0c01hc2soKTsKKyAgICAgICAgRm9udFRyYWl0c01h
c2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29uZC50cmFpdHNNYXNrKCk7CisKKyAgICAgICAgYm9v
bCBmaXJzdEhhc0Rlc2lyZWRTdHlsZSA9IGZpcnN0VHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0
c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKKyAgICAgICAgYm9vbCBzZWNvbmRI
YXNEZXNpcmVkU3R5bGUgPSBzZWNvbmRUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0Zv
ckNvbXBhcmlzb24gJiBGb250U3R5bGVNYXNrOwogCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04ocnVsZVNldEluZGV4IDwgZmFsbGJhY2tSdWxlU2V0cyk7Ci0gICAgY29uc3Qg
Rm9udFRyYWl0c01hc2sqIHdlaWdodEZhbGxiYWNrUnVsZSA9IHdlaWdodEZhbGxiYWNrUnVsZVNl
dHNbcnVsZVNldEluZGV4XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXNQZXJT
ZXQ7ICsraSkgewotICAgICAgICBpZiAoc2Vjb25kVHJhaXRzTWFzayAmIHdlaWdodEZhbGxiYWNr
UnVsZVtpXSkKKyAgICAgICAgaWYgKGZpcnN0SGFzRGVzaXJlZFN0eWxlICE9IHNlY29uZEhhc0Rl
c2lyZWRTdHlsZSkKKyAgICAgICAgICAgIHJldHVybiBmaXJzdEhhc0Rlc2lyZWRTdHlsZTsKKwor
ICAgICAgICBpZiAoKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxl
SXRhbGljTWFzaykgJiYgIWZpcnN0LmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQuaXNMb2Nh
bEZhbGxiYWNrKCkpIHsKKyAgICAgICAgICAgIC8vIFByZWZlciBhIGZvbnQgdGhhdCBoYXMgaW5k
aWNhdGVkIHRoYXQgaXQgY2FuIG9ubHkgc3VwcG9ydCBpdGFsaWNzIHRvIGEgZm9udCB0aGF0IGNs
YWltcyB0byBzdXBwb3J0CisgICAgICAgICAgICAvLyBhbGwgc3R5bGVzLiBUaGUgc3BlY2lhbGl6
ZWQgZm9udCBpcyBtb3JlIGxpa2VseSB0byBiZSB0aGUgb25lIHRoZSBhdXRob3Igd2FudHMgdXNl
ZC4KKyAgICAgICAgICAgIGJvb2wgZmlyc3RSZXF1aXJlc0l0YWxpY3MgPSAoZmlyc3RUcmFpdHNN
YXNrICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgIShmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5
bGVOb3JtYWxNYXNrKTsKKyAgICAgICAgICAgIGJvb2wgc2Vjb25kUmVxdWlyZXNJdGFsaWNzID0g
KHNlY29uZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhKHNlY29uZFRyYWl0
c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKTsKKyAgICAgICAgICAgIGlmIChmaXJzdFJlcXVp
cmVzSXRhbGljcyAhPSBzZWNvbmRSZXF1aXJlc0l0YWxpY3MpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZpcnN0UmVxdWlyZXNJdGFsaWNzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlY29u
ZFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWln
aHRNYXNrKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoZmlyc3RUcmFp
dHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tSdWxlW2ldKQorICAgICAgICBpZiAoZmlyc3RUcmFpdHNN
YXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzaykK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMTEvV0QtY3NzMy1mb250cy0yMDExMTAwNC8jZm9udC1tYXRjaGluZy1hbGdvcml0aG0g
c2F5cyA6CisgICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgbGVzcyB0aGFu
IDQwMCwgd2VpZ2h0cyBiZWxvdyB0aGUgZGVzaXJlZCB3ZWlnaHQgYXJlIGNoZWNrZWQgaW4gZGVz
Y2VuZGluZyBvcmRlciBmb2xsb3dlZCBieSB3ZWlnaHRzIGFib3ZlIHRoZSBkZXNpcmVkIHdlaWdo
dCBpbiBhc2NlbmRpbmcgb3JkZXIgdW50aWwgYSBtYXRjaCBpcyBmb3VuZC4KKyAgICAgICAgLy8g
ICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBncmVhdGVyIHRoYW4gNTAwLCB3ZWlnaHRzIGFi
b3ZlIHRoZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tlZCBpbiBhc2NlbmRpbmcgb3JkZXIgZm9s
bG93ZWQgYnkgd2VpZ2h0cyBiZWxvdyB0aGUgZGVzaXJlZCB3ZWlnaHQgaW4gZGVzY2VuZGluZyBv
cmRlciB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgorICAgICAgICAvLyAgIC0gSWYgdGhlIGRlc2ly
ZWQgd2VpZ2h0IGlzIDQwMCwgNTAwIGlzIGNoZWNrZWQgZmlyc3QgYW5kIHRoZW4gdGhlIHJ1bGUg
Zm9yIGRlc2lyZWQgd2VpZ2h0cyBsZXNzIHRoYW4gNDAwIGlzIHVzZWQuCisgICAgICAgIC8vICAg
LSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgNTAwLCA0MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQg
dGhlbiB0aGUgcnVsZSBmb3IgZGVzaXJlZCB3ZWlnaHRzIGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4K
KworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFsbGJhY2tSdWxlU2V0cyA9IDk7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBydWxlc1BlclNldCA9IDg7CisgICAgICAgIHN0
YXRpYyBjb25zdCBGb250VHJhaXRzTWFzayB3ZWlnaHRGYWxsYmFja1J1bGVTZXRzW2ZhbGxiYWNr
UnVsZVNldHNdW3J1bGVzUGVyU2V0XSA9IHsKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDIwME1h
c2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUwME1h
c2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1h
c2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQxMDBNYXNr
LCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNr
LCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNr
LCBGb250V2VpZ2h0OTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFzaywg
Rm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywg
Rm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywg
Rm9udFdlaWdodDkwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDUwME1hc2ssIEZv
bnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZv
bnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZv
bnRXZWlnaHQ5MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250
V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250
V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250
V2VpZ2h0OTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdl
aWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdl
aWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdl
aWdodDEwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWln
aHQ5MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWln
aHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWln
aHQxMDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ5MDBNYXNrLCBGb250V2VpZ2h0
NzAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0
NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0
MTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDcw
ME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQw
ME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEw
ME1hc2sgfQorICAgICAgICB9OworCisgICAgICAgIHVuc2lnbmVkIHJ1bGVTZXRJbmRleCA9IDA7
CisgICAgICAgIHVuc2lnbmVkIHcgPSBGb250V2VpZ2h0MTAwQml0OworICAgICAgICB3aGlsZSAo
IShtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmICgxIDw8IHcpKSkgeworICAgICAg
ICAgICAgdysrOworICAgICAgICAgICAgcnVsZVNldEluZGV4Kys7CisgICAgICAgIH0KKworICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihydWxlU2V0SW5kZXggPCBmYWxs
YmFja1J1bGVTZXRzKTsKKyAgICAgICAgY29uc3QgRm9udFRyYWl0c01hc2sqIHdlaWdodEZhbGxi
YWNrUnVsZSA9IHdlaWdodEZhbGxiYWNrUnVsZVNldHNbcnVsZVNldEluZGV4XTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzUGVyU2V0OyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChzZWNvbmRUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tSdWxlW2ldKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChmaXJzdFRyYWl0c01hc2sgJiB3
ZWlnaHRGYWxsYmFja1J1bGVbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNl
OwotfQorcHJpdmF0ZToKKyAgICBGb250VHJhaXRzTWFzayBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9y
Q29tcGFyaXNvbjsKK307CiAKIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2Vz
Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCiB7CkBAIC00ODUsMzMgKzQ5NCwzNCBAQCBDU1NTZWdt
ZW50ZWRGb250RmFjZSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZQogICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2sgPSBmb250RGVz
Y3JpcHRpb24udHJhaXRzTWFzaygpOwogCiAgICAgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNl
PiYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUuYWRkKHRyYWl0c01hc2ssIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIWZhY2UpIHsKLSAgICAgICAgZmFjZSA9IENTU1Nl
Z21lbnRlZEZvbnRGYWNlOjpjcmVhdGUodGhpcyk7CisgICAgaWYgKGZhY2UpCisgICAgICAgIHJl
dHVybiBmYWNlLmdldCgpOworCisgICAgZmFjZSA9IENTU1NlZ21lbnRlZEZvbnRGYWNlOjpjcmVh
dGUodGhpcyk7CiAKLSAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9u
dEZhY2U+LCAzMj4gY2FuZGlkYXRlRm9udEZhY2VzOwotICAgICAgICBmb3IgKGludCBpID0gZmFt
aWx5Rm9udEZhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBDU1NG
b250RmFjZSYgY2FuZGlkYXRlID0gZmFtaWx5Rm9udEZhY2VzW2ldOwotICAgICAgICAgICAgdW5z
aWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS50cmFpdHNNYXNrKCk7CisgICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+LCAzMj4gY2FuZGlkYXRl
Rm9udEZhY2VzOworICAgIGZvciAoaW50IGkgPSBmYW1pbHlGb250RmFjZXMuc2l6ZSgpIC0gMTsg
aSA+PSAwOyAtLWkpIHsKKyAgICAgICAgQ1NTRm9udEZhY2UmIGNhbmRpZGF0ZSA9IGZhbWlseUZv
bnRGYWNlc1tpXTsKKyAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRp
ZGF0ZS50cmFpdHNNYXNrKCk7CisgICAgICAgIGlmICgodHJhaXRzTWFzayAmIEZvbnRTdHlsZU5v
cm1hbE1hc2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2sp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNlcy5hcHBl
bmQoY2FuZGlkYXRlKTsKKyAgICB9CisKKyAgICBhdXRvIGxvY2FsSXRlcmF0b3IgPSBtX2xvY2Fs
bHlJbnN0YWxsZWRGb250RmFjZXMuZmluZChmYW1pbHkpOworICAgIGlmIChsb2NhbEl0ZXJhdG9y
ICE9IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5lbmQoKSkgeworICAgICAgICBmb3IgKGF1
dG8mIGNhbmRpZGF0ZSA6IGxvY2FsSXRlcmF0b3ItPnZhbHVlKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBjYW5kaWRhdGVUcmFpdHNNYXNrID0gY2FuZGlkYXRlLT50cmFpdHNNYXNrKCk7CiAgICAg
ICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRp
ZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRl
KTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9sb2NhbGx5
SW5zdGFsbGVkRm9udEZhY2VzLmZpbmQoZmFtaWx5KTsKLSAgICAgICAgaWYgKGl0ZXJhdG9yICE9
IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5lbmQoKSkgewotICAgICAgICAgICAgZm9yIChh
dXRvJiBjYW5kaWRhdGUgOiBpdGVyYXRvci0+dmFsdWUpIHsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjYW5kaWRhdGVUcmFpdHNNYXNrID0gY2FuZGlkYXRlLT50cmFpdHNNYXNrKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCh0cmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykgJiYgIShj
YW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNlcy5hcHBl
bmQoY2FuZGlkYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIHN0ZDo6c3RhYmxl
X3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5lbmQo
KSwgRm9udEZhY2VDb21wYXJhdG9yKHRyYWl0c01hc2spKTsKKyAgICBmb3IgKGF1dG8mIGNhbmRp
ZGF0ZSA6IGNhbmRpZGF0ZUZvbnRGYWNlcykKKyAgICAgICAgZmFjZS0+YXBwZW5kRm9udEZhY2Uo
Y2FuZGlkYXRlLmdldCgpKTsKIAotICAgICAgICBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlz
b24gPSB0cmFpdHNNYXNrOwotICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KGNhbmRpZGF0ZUZvbnRG
YWNlcy5iZWdpbigpLCBjYW5kaWRhdGVGb250RmFjZXMuZW5kKCksIGNvbXBhcmVGb250RmFjZXMp
OwotICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZUZvbnRGYWNlcykKLSAg
ICAgICAgICAgIGZhY2UtPmFwcGVuZEZvbnRGYWNlKGNhbmRpZGF0ZS5nZXQoKSk7Ci0gICAgfQog
ICAgIHJldHVybiBmYWNlLmdldCgpOwogfQogCkBAIC01NzAsMjEgKzU4MCw2IEBAIHZvaWQgQ1NT
Rm9udFNlbGVjdG9yOjpiZWdpbkxvYWRUaW1lckZpcmVkKCkKICAgICAgICAgbV9kb2N1bWVudC0+
ZnJhbWUoKS0+bG9hZGVyKCkuY2hlY2tMb2FkQ29tcGxldGUoKTsKIH0KIAotYm9vbCBDU1NGb250
U2VsZWN0b3I6OnJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXNj
cmlwdGlvbi5mYW1pbHlDb3VudCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBmYW1pbHlOYW1lID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7Ci0gICAgICAgIGlmIChmYW1p
bHlOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAobV9m
b250RmFjZXMuY29udGFpbnMoZmFtaWx5TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gd2Via2l0UHJlZml4KCItd2Vi
a2l0LSIpOwotICAgICAgICBpZiAoZmFtaWx5TmFtZS5zdGFydHNXaXRoKHdlYmtpdFByZWZpeC5n
ZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRDb3VudCgpCiB7CiAg
ICAgaWYgKCFtX2RvY3VtZW50KQpAQCAtNTk2LDcgKzU5MSw3IEBAIHNpemVfdCBDU1NGb250U2Vs
ZWN0b3I6OmZhbGxiYWNrRm9udENvdW50KCkKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0
cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCitSZWZQdHI8Rm9udD4gQ1NTRm9u
dFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgc2l6ZV90IGluZGV4KQogewogICAgIEFTU0VSVF9VTlVTRUQoaW5kZXgsICFpbmRl
eCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAppbmRleCA2ZjEzMGY3NThhOTc2
Mzk1ZTc5MWMzZjI0NGJiNzBlNTNlZDcwMzhkLi4yNmRlYWQxNWE4NWFmYjQwNDE0YmEzMTM3YzAz
Mzg0OGViMmJmYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCkBAIC01OSwx
MSArNTksOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEZvbnRSYW5nZXMgZm9udFJhbmdlc0Zv
ckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3VudCgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBzaXplX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmVmUHRyPEZvbnQ+IGZh
bGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CiAg
ICAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIGdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKIAotICAgIHZpcnR1YWwgYm9vbCByZXNv
bHZlc0ZhbWlseUZvcihjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KICAgICB2b2lkIGNsZWFyRG9jdW1lbnQoKTsKIAogICAgIHZvaWQgYWRkRm9udEZhY2VS
dWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlJiwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5V
c2VyQWdlbnRTaGFkb3dUcmVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5oCmluZGV4IDIxMDkwYjNiZDNlMzAyZjkxMjY0MmJlY2MyNWVkZGM2OGU2
OWVhZDUuLjcwYTEyNzk3NDQ2MzZlYjlhNzk0YWMyMWZhNWZlMGM2MGFiNTY4ZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaApAQCAtMzY3LDcg
KzM2Nyw3IEBAIGlubGluZSBib29sIEZvbnRDYXNjYWRlOjppc0ZpeGVkUGl0Y2goKSBjb25zdAog
CiBpbmxpbmUgRm9udFNlbGVjdG9yKiBGb250Q2FzY2FkZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9mb250cyA/IG1fZm9udHMtPmZvbnRTZWxlY3RvcigpIDogMDsKKyAg
ICByZXR1cm4gbV9mb250cyA/IG1fZm9udHMtPmZvbnRTZWxlY3RvcigpIDogbnVsbHB0cjsKIH0K
IAogaW5saW5lIGZsb2F0IEZvbnRDYXNjYWRlOjp0YWJXaWR0aChjb25zdCBGb250JiBmb250LCB1
bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKaW5kZXggZDIwYjU4YzNhNDJkZTZi
YTQ0NjExY2VmZDRmMDY4NTM2MTk4ZmZlZi4uNzRmZjk2YWMxNjE5NjQ4ODcyMjkxOWUyZjU2OGIy
YzljNDg5Y2RhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdG9yLmgKQEAgLTQyLDEwICs0Miw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Gb250
U2VsZWN0b3IoKSB7IH0KIAogICAgIHZpcnR1YWwgRm9udFJhbmdlcyBmb250UmFuZ2VzRm9yRmFt
aWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYpID0gMDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Rm9udD4gZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgc2l6ZV90KSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8Rm9udD4gZmFsbGJhY2tG
b250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSA9IDA7CiAKICAgICB2aXJ0dWFs
IHNpemVfdCBmYWxsYmFja0ZvbnRDb3VudCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2
ZXNGYW1pbHlGb3IoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0ID0gMDsKIAog
ICAgIHZpcnR1YWwgdm9pZCBmb250Q2FjaGVJbnZhbGlkYXRlZCgpIHsgfQogCg==
</data>
<flag name="review"
          id="293774"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>