<?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>39050</bug_id>
          
          <creation_ts>2010-05-12 23:37:46 -0700</creation_ts>
          <short_desc>Move transient glyph overflow and fallback font data from a global to the stack</short_desc>
          <delta_ts>2010-05-16 21:06:01 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>225159</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-05-12 23:37:46 -0700</bug_when>
    <thetext>The way the lifetime of fallback font vectors and glyph overflow structures associated with text boxes is managed during layout is quite fragile. The data are inserted into a global map by one method, then consumed and removed by other methods. Instead, the map can be kept on the stack for the duration of line layout. Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225164</commentid>
    <comment_count>1</comment_count>
      <attachid>55950</attachid>
    <who name="">mitz</who>
    <bug_when>2010-05-12 23:47:31 -0700</bug_when>
    <thetext>Created attachment 55950
Use a stack-based GlyphOverflowAndFallbackFontsMap</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225503</commentid>
    <comment_count>2</comment_count>
      <attachid>55950</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-13 14:19:05 -0700</bug_when>
    <thetext>Comment on attachment 55950
Use a stack-based GlyphOverflowAndFallbackFontsMap

&gt; +                                             int&amp; maxAscent, int&amp; maxDescent, bool strictMode, GlyphOverflowAndFallbackFontsMap&amp; glyphOverflowAndFallbackFontsMap)

Can we give this argument a shorter less-precise name, perhaps overflowMap or fallbackMap or extrasMap or exceptionsMap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226159</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-14 23:31:32 -0700</bug_when>
    <thetext>Attachment 55950 was posted by a committer and has review+, assigning to Dan Bernstein for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226586</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-05-16 18:45:09 -0700</bug_when>
    <thetext>Fixed in &lt;http://trac.webkit.org/projects/webkit/changeset/59588&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226587</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-16 18:58:09 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/59588 might have broken Qt Windows 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226591</commentid>
    <comment_count>6</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-05-16 19:33:32 -0700</bug_when>
    <thetext>This is causing 2 tests to fail on the mac bots and the chromium bots:
svg/custom/pointer-events-text.svg
svg/custom/use-events-crash.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226593</commentid>
    <comment_count>7</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-05-16 19:51:17 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; This is causing 2 tests to fail on the mac bots and the chromium bots:
&gt; svg/custom/pointer-events-text.svg
&gt; svg/custom/use-events-crash.svg

I’ll fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226595</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-05-16 20:04:08 -0700</bug_when>
    <thetext>in r59589</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226603</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-16 21:06:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; http://trac.webkit.org/changeset/59588 might have broken Qt Windows 32-bit Release

Looks like a compile failure due to an ICE:


..\..\..\WebCore\dom\Document.cpp: In member function &apos;void WebCore::Document::addElementById(const WebCore::AtomicString&amp;, WebCore::Element*)&apos;:
..\..\..\WebCore\dom\Document.cpp:1074:6: internal compiler error: Segmentation fault</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55950</attachid>
            <date>2010-05-12 23:47:31 -0700</date>
            <delta_ts>2010-05-13 14:19:05 -0700</delta_ts>
            <desc>Use a stack-based GlyphOverflowAndFallbackFontsMap</desc>
            <filename>stack-based-overflow-and-fallback-map_r1.diff</filename>
            <type>text/plain</type>
            <size>22135</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTM0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDUtMTIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IHRyYW5zaWVudCBnbHlwaCBvdmVyZmxvdyBhbmQgZmFsbGJhY2sgZm9udCBkYXRhIGZyb20gYSBn
bG9iYWwgdG8gdGhlIHN0YWNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zOTA1MAorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6b250YWxs
eSk6IEFkZGVkIGEgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAKKyAgICAgICAgcGFy
YW1ldGVyLiBSZWFkIGdseXBoIG92ZXJmbG93IGZyb20gdGhlIG1hcC4KKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUZsb3dCb3g6OmNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyk6IEFkZGVkIGEgR2x5
cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAKKyAgICAgICAgcGFyYW1ldGVyLiBSZWFkIGZh
bGxiYWNrIGZvbnRzIGZyb20gdGhlIG1hcC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dC
b3g6OmNvbXB1dGVWZXJ0aWNhbE92ZXJmbG93KTogQWRkZWQgYSBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcAorICAgICAgICBwYXJhbWV0ZXIuIFJlYWQgZ2x5cGggb3ZlcmZsb3cgZnJv
bSB0aGUgbWFwLgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOiBSZW1vdmVkIHNldEZhbGxiYWNrRm9udHMo
KSwgZmFsbGJhY2tGb250cygpLCBzZXRHbHlwaE92ZXJmbG93KCksCisgICAgICAgIGFuZCBnbHlw
aE92ZXJmbG93KCkuIFJlbW92ZWQgc19nbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcC4K
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9udGFs
UG9zaXRpb25zRm9yTGluZSk6IEFkZGVkIGEgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXAKKyAgICAgICAgcGFyYW1ldGVyLiBXcml0ZSBmYWxsYmFjayBmb250cyBhbmQgZ2x5cGggb3Zl
cmZsb3cgaW50byB0aGUgbWFwLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1
dGVWZXJ0aWNhbFBvc2l0aW9uc0ZvckxpbmUpOiBBZGRlZCBhIEdseXBoT3ZlcmZsb3dBbmRGYWxs
YmFja0ZvbnRzTWFwCisgICAgICAgIHBhcmFtZXRlci4gUGFzcyBpdCBkb3duIHRvIHZlcnRpY2Fs
bHlBbGlnbkJveGVzKCkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0SW5s
aW5lQ2hpbGRyZW4pOiBDcmVhdGUgYSBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCBv
biB0aGUKKyAgICAgICAgc3RhY2sgYW5kIHBhc3MgaXQgZG93biB0byBjb21wdXRlSG9yaXpvbnRh
bFBvc2l0aW9uc0ZvckxpbmUoKSwgY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25zRm9yTGluZSgpLAor
ICAgICAgICBhbmQgdmVydGljYWxseUFsaWduQm94ZXMoKS4KKyAgICAgICAgKiByZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojp2ZXJ0
aWNhbGx5QWxpZ25Cb3hlcyk6IEFkZGVkIGEgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXAgcGFyYW1ldGVyLgorICAgICAgICBQYXNzIGl0IGRvd24gdG8gY29tcHV0ZUxvZ2ljYWxCb3hI
ZWlnaHRzKCkgYW5kIGNvbXB1dGVWZXJ0aWNhbE92ZXJmbG93KCkuCisgICAgICAgICogcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpsYXlvdXRJbmxpbmVC
b3hlcyk6IFVwZGF0ZWQuCisKIDIwMTAtMDUtMTIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDU5MjYwKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIs
NyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmRldGVybWluZVNwYWNpbmdGb3JGCiAgICAgfQogfQog
Ci1pbnQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6b250YWxseShpbnQgeFBvcywgYm9v
bCYgbmVlZHNXb3JkU3BhY2luZykKK2ludCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpv
bnRhbGx5KGludCB4UG9zLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nLCBHbHlwaE92ZXJmbG93QW5k
RmFsbGJhY2tGb250c01hcCYgZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXApCiB7CiAg
ICAgLy8gU2V0IG91ciB4IHBvc2l0aW9uLgogICAgIHNldFgoeFBvcyk7CkBAIC0yODksNyArMjg5
LDggQEAgaW50IElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbAogICAgICAgICAg
ICAgaW50IGxldHRlclNwYWNpbmcgPSBtaW4oMCwgKGludClydC0+c3R5bGUobV9maXJzdExpbmUp
LT5mb250KCkubGV0dGVyU3BhY2luZygpKTsKICAgICAgICAgICAgIHJpZ2h0TGF5b3V0T3ZlcmZs
b3cgPSBtYXgoeFBvcyArIHRleHQtPndpZHRoKCkgLSBsZXR0ZXJTcGFjaW5nLCByaWdodExheW91
dE92ZXJmbG93KTsKIAotICAgICAgICAgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9
IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihjdXJyKS0+Z2x5cGhPdmVyZmxvdygpOworICAg
ICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0g
Z2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAuZmluZChzdGF0aWNfY2FzdDxJbmxpbmVU
ZXh0Qm94Kj4oY3VycikpOworICAgICAgICAgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxv
dyA9IGl0ID09IGdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwLmVuZCgpID8gMCA6ICZp
dC0+c2Vjb25kLnNlY29uZDsKIAogICAgICAgICAgICAgaW50IGxlZnRHbHlwaE92ZXJmbG93ID0g
LXN0cm9rZU92ZXJmbG93IC0gKGdseXBoT3ZlcmZsb3cgPyBnbHlwaE92ZXJmbG93LT5sZWZ0IDog
MCk7CiAgICAgICAgICAgICBpbnQgcmlnaHRHbHlwaE92ZXJmbG93ID0gc3Ryb2tlT3ZlcmZsb3cg
LSBsZXR0ZXJTcGFjaW5nICsgKGdseXBoT3ZlcmZsb3cgPyBnbHlwaE92ZXJmbG93LT5yaWdodCA6
IDApOwpAQCAtMzE5LDcgKzMyMCw3IEBAIGludCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9y
aXpvbnRhbGwKICAgICAgICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLT5pc1JlbmRlcklubGlu
ZSgpKSB7CiAgICAgICAgICAgICAgICAgSW5saW5lRmxvd0JveCogZmxvdyA9IHN0YXRpY19jYXN0
PElubGluZUZsb3dCb3gqPihjdXJyKTsKICAgICAgICAgICAgICAgICB4UG9zICs9IGZsb3ctPm1h
cmdpbkxlZnQoKTsKLSAgICAgICAgICAgICAgICB4UG9zID0gZmxvdy0+cGxhY2VCb3hlc0hvcml6
b250YWxseSh4UG9zLCBuZWVkc1dvcmRTcGFjaW5nKTsKKyAgICAgICAgICAgICAgICB4UG9zID0g
Zmxvdy0+cGxhY2VCb3hlc0hvcml6b250YWxseSh4UG9zLCBuZWVkc1dvcmRTcGFjaW5nLCBnbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCk7CiAgICAgICAgICAgICAgICAgeFBvcyArPSBm
bG93LT5tYXJnaW5SaWdodCgpOwogICAgICAgICAgICAgICAgIGxlZnRMYXlvdXRPdmVyZmxvdyA9
IG1pbihsZWZ0TGF5b3V0T3ZlcmZsb3csIGZsb3ctPmxlZnRMYXlvdXRPdmVyZmxvdygpKTsKICAg
ICAgICAgICAgICAgICByaWdodExheW91dE92ZXJmbG93ID0gbWF4KHJpZ2h0TGF5b3V0T3ZlcmZs
b3csIGZsb3ctPnJpZ2h0TGF5b3V0T3ZlcmZsb3coKSk7CkBAIC0zOTEsNyArMzkyLDcgQEAgc3Rh
dGljIGludCB2ZXJ0aWNhbFBvc2l0aW9uRm9yQm94KElubGluZQogfQogCiB2b2lkIElubGluZUZs
b3dCb3g6OmNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhpbnQmIG1heFBvc2l0aW9uVG9wLCBpbnQm
IG1heFBvc2l0aW9uQm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwgYm9vbCBzdHJpY3RNb2Rl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYXhB
c2NlbnQsIGludCYgbWF4RGVzY2VudCwgYm9vbCBzdHJpY3RNb2RlLCBHbHlwaE92ZXJmbG93QW5k
RmFsbGJhY2tGb250c01hcCYgZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXApCiB7CiAg
ICAgaWYgKGlzUm9vdElubGluZUJveCgpKSB7CiAgICAgICAgIC8vIEV4YW1pbmUgb3VyIHJvb3Qg
Ym94LgpAQCAtNDE2LDggKzQxNywxMCBAQCB2b2lkIElubGluZUZsb3dCb3g6OmNvbXB1dGVMb2dp
Y2FsQm94SGVpCiAgICAgICAgIGludCBsaW5lSGVpZ2h0OwogICAgICAgICBpbnQgYmFzZWxpbmU7
CiAgICAgICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMgPSAwOwot
ICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVUZXh0Qm94KCkpCi0gICAgICAgICAgICB1c2VkRm9u
dHMgPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4oY3VyciktPmZhbGxiYWNrRm9udHMoKTsK
KyAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lVGV4dEJveCgpKSB7CisgICAgICAgICAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSBnbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcC5maW5kKHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihjdXJy
KSk7CisgICAgICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSBnbHlwaE92ZXJmbG93QW5kRmFsbGJh
Y2tGb250c01hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5maXJzdDsKKyAgICAgICAgfQogCiAg
ICAgICAgIGlmICh1c2VkRm9udHMpIHsKICAgICAgICAgICAgIHVzZWRGb250cy0+YXBwZW5kKGN1
cnItPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLnByaW1hcnlGb250KCkp
OwpAQCAtNDY4LDcgKzQ3MSw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZUxvZ2ljYWxC
b3hIZWkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZUZsb3dCb3goKSkK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKS0+Y29tcHV0ZUxv
Z2ljYWxCb3hIZWlnaHRzKG1heFBvc2l0aW9uVG9wLCBtYXhQb3NpdGlvbkJvdHRvbSwgbWF4QXNj
ZW50LCBtYXhEZXNjZW50LCBzdHJpY3RNb2RlKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PElu
bGluZUZsb3dCb3gqPihjdXJyKS0+Y29tcHV0ZUxvZ2ljYWxCb3hIZWlnaHRzKG1heFBvc2l0aW9u
VG9wLCBtYXhQb3NpdGlvbkJvdHRvbSwgbWF4QXNjZW50LCBtYXhEZXNjZW50LCBzdHJpY3RNb2Rl
LCBnbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCk7CiAgICAgfQogfQogCkBAIC01Mjks
NyArNTMyLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzVmVydGljYWxseQogICAg
IH0KIH0KIAotdm9pZCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlVmVydGljYWxPdmVyZmxvdyhpbnQg
bGluZVRvcCwgaW50IGxpbmVCb3R0b20sIGJvb2wgc3RyaWN0TW9kZSkKK3ZvaWQgSW5saW5lRmxv
d0JveDo6Y29tcHV0ZVZlcnRpY2FsT3ZlcmZsb3coaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
LCBib29sIHN0cmljdE1vZGUsIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiBnbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCkKIHsKICAgICBpbnQgYm94SGVpZ2h0ID0gaGVp
Z2h0KCk7CiAKQEAgLTU2Niw3ICs1NjksOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OmNvbXB1dGVW
ZXJ0aWNhbE92ZXJmCiAKICAgICAgICAgICAgIGludCBzdHJva2VPdmVyZmxvdyA9IHN0YXRpY19j
YXN0PGludD4oY2VpbGYocnQtPnN0eWxlKCktPnRleHRTdHJva2VXaWR0aCgpIC8gMi4wZikpOwog
Ci0gICAgICAgICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gc3RhdGljX2Nhc3Q8
SW5saW5lVGV4dEJveCo+KGN1cnIpLT5nbHlwaE92ZXJmbG93KCk7CisgICAgICAgICAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSBnbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcC5maW5kKHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihjdXJy
KSk7CisgICAgICAgICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0gZ2x5
cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuc2Vj
b25kOwogCiAgICAgICAgICAgICBpbnQgdG9wR2x5cGhPdmVyZmxvdyA9IC1zdHJva2VPdmVyZmxv
dyAtIChnbHlwaE92ZXJmbG93ID8gZ2x5cGhPdmVyZmxvdy0+dG9wIDogMCk7CiAgICAgICAgICAg
ICBpbnQgYm90dG9tR2x5cGhPdmVyZmxvdyA9IHN0cm9rZU92ZXJmbG93ICsgKGdseXBoT3ZlcmZs
b3cgPyBnbHlwaE92ZXJmbG93LT5ib3R0b20gOiAwKTsKQEAgLTU4Miw3ICs1ODYsNyBAQCB2b2lk
IElubGluZUZsb3dCb3g6OmNvbXB1dGVWZXJ0aWNhbE92ZXJmCiAgICAgICAgICAgICBib3R0b21W
aXN1YWxPdmVyZmxvdyA9IG1heChjdXJyLT55KCkgKyB0ZXh0LT5oZWlnaHQoKSArIGNoaWxkT3Zl
cmZsb3dCb3R0b20sIGJvdHRvbVZpc3VhbE92ZXJmbG93KTsKICAgICAgICAgfSBlbHNlICBpZiAo
Y3Vyci0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICAgICAgSW5saW5l
Rmxvd0JveCogZmxvdyA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKTsKLSAgICAg
ICAgICAgIGZsb3ctPmNvbXB1dGVWZXJ0aWNhbE92ZXJmbG93KGxpbmVUb3AsIGxpbmVCb3R0b20s
IHN0cmljdE1vZGUpOworICAgICAgICAgICAgZmxvdy0+Y29tcHV0ZVZlcnRpY2FsT3ZlcmZsb3co
bGluZVRvcCwgbGluZUJvdHRvbSwgc3RyaWN0TW9kZSwgZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNr
Rm9udHNNYXApOwogICAgICAgICAgICAgdG9wTGF5b3V0T3ZlcmZsb3cgPSBtaW4odG9wTGF5b3V0
T3ZlcmZsb3csIGZsb3ctPnRvcExheW91dE92ZXJmbG93KCkpOwogICAgICAgICAgICAgYm90dG9t
TGF5b3V0T3ZlcmZsb3cgPSBtYXgoYm90dG9tTGF5b3V0T3ZlcmZsb3csIGZsb3ctPmJvdHRvbUxh
eW91dE92ZXJmbG93KCkpOwogICAgICAgICAgICAgdG9wVmlzdWFsT3ZlcmZsb3cgPSBtaW4odG9w
VmlzdWFsT3ZlcmZsb3csIGZsb3ctPnRvcFZpc3VhbE92ZXJmbG93KCkpOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gNTkyNjApCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSGl0VGVzdFJlcXVlc3Q7CiBjbGFzcyBIaXRUZXN0UmVz
dWx0OworY2xhc3MgSW5saW5lVGV4dEJveDsKIGNsYXNzIFJlbmRlckxpbmVCb3hMaXN0OwogCit0
eXBlZGVmIEhhc2hNYXA8Y29uc3QgSW5saW5lVGV4dEJveCosIHBhaXI8VmVjdG9yPGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4sIEdseXBoT3ZlcmZsb3c+ID4gR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNr
Rm9udHNNYXA7CisKIGNsYXNzIElubGluZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lQm94IHsKIHB1
YmxpYzoKICAgICBJbmxpbmVGbG93Qm94KFJlbmRlck9iamVjdCogb2JqKQpAQCAtMTI0LDEzICsx
MjcsMTMgQEAgcHVibGljOgogICAgIHZvaWQgZGV0ZXJtaW5lU3BhY2luZ0ZvckZsb3dCb3hlcyhi
b29sIGxhc3RMaW5lLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCk7CiAgICAgaW50IGdldEZsb3dT
cGFjaW5nV2lkdGgoKTsKICAgICBib29sIG9uRW5kQ2hhaW4oUmVuZGVyT2JqZWN0KiBlbmRPYmpl
Y3QpOwotICAgIHZpcnR1YWwgaW50IHBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGJvb2wm
IG5lZWRzV29yZFNwYWNpbmcpOworICAgIHZpcnR1YWwgaW50IHBsYWNlQm94ZXNIb3Jpem9udGFs
bHkoaW50IHgsIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcsIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFj
a0ZvbnRzTWFwJik7CiAgICAgdm9pZCBjb21wdXRlTG9naWNhbEJveEhlaWdodHMoaW50JiBtYXhQ
b3NpdGlvblRvcCwgaW50JiBtYXhQb3NpdGlvbkJvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQmIG1heEFzY2VudCwgaW50JiBtYXhEZXNjZW50LCBib29sIHN0cmlj
dE1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWF4QXNjZW50
LCBpbnQmIG1heERlc2NlbnQsIGJvb2wgc3RyaWN0TW9kZSwgR2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXAmKTsKICAgICB2b2lkIGFkanVzdE1heEFzY2VudEFuZERlc2NlbnQoaW50JiBt
YXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG1heFBvc2l0aW9uVG9wLCBpbnQgbWF4UG9zaXRpb25Cb3R0b20pOwogICAgIHZv
aWQgcGxhY2VCb3hlc1ZlcnRpY2FsbHkoaW50IHksIGludCBtYXhIZWlnaHQsIGludCBtYXhBc2Nl
bnQsIGJvb2wgc3RyaWN0TW9kZSwgaW50JiBsaW5lVG9wLCBpbnQmIGxpbmVCb3R0b20pOwotICAg
IHZvaWQgY29tcHV0ZVZlcnRpY2FsT3ZlcmZsb3coaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
LCBib29sIHN0cmljdE1vZGUpOworICAgIHZvaWQgY29tcHV0ZVZlcnRpY2FsT3ZlcmZsb3coaW50
IGxpbmVUb3AsIGludCBsaW5lQm90dG9tLCBib29sIHN0cmljdE1vZGUsIEdseXBoT3ZlcmZsb3dB
bmRGYWxsYmFja0ZvbnRzTWFwJik7CiAKICAgICB2b2lkIHJlbW92ZUNoaWxkKElubGluZUJveCog
Y2hpbGQpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24g
NTkyNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAyNSw0OCArMTAyNSw0IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6Y29udGFpbnND
YXJldE9mZnNldCgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94Ojpz
ZXRGYWxsYmFja0ZvbnRzKGNvbnN0IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFs
bGJhY2tGb250cykKLXsKLSAgICBpZiAoIXNfZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXApCi0gICAgICAgIHNfZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAgPSBuZXcgR2x5
cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA7Ci0KLSAgICBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSBzX2dseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwLT5hZGQodGhpcywgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+
KCksIEdseXBoT3ZlcmZsb3coKSkpLmZpcnN0OwotICAgIEFTU0VSVChpdC0+c2Vjb25kLmZpcnN0
LmlzRW1wdHkoKSk7Ci0gICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT5zZWNvbmQu
Zmlyc3QpOwotfQotCi1WZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogSW5saW5lVGV4dEJv
eDo6ZmFsbGJhY2tGb250cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzX2dseXBoT3ZlcmZsb3dBbmRG
YWxsYmFja0ZvbnRzTWFwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEdseXBoT3ZlcmZsb3dB
bmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHNfZ2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXAtPmZpbmQodGhpcyk7Ci0gICAgaWYgKGl0ID09IHNfZ2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biAmaXQtPnNlY29uZC5maXJzdDsKLX0KLQotSW5saW5lVGV4dEJveDo6R2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXAqIElubGluZVRleHRCb3g6OnNfZ2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXAgPSAwOwotCi12b2lkIElubGluZVRleHRCb3g6OnNldEdseXBoT3ZlcmZsb3co
Y29uc3QgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKLXsKLSAgICBpZiAoIXNfZ2x5cGhP
dmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXApCi0gICAgICAgIHNfZ2x5cGhPdmVyZmxvd0FuZEZh
bGxiYWNrRm9udHNNYXAgPSBuZXcgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA7Ci0K
LSAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSBzX2ds
eXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwLT5hZGQodGhpcywgbWFrZV9wYWlyKFZlY3Rv
cjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLmZpcnN0OwotICAg
IGl0LT5zZWNvbmQuc2Vjb25kID0gZ2x5cGhPdmVyZmxvdzsKLX0KLQotR2x5cGhPdmVyZmxvdyog
SW5saW5lVGV4dEJveDo6Z2x5cGhPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzX2dseXBo
T3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSBzX2dseXBoT3ZlcmZs
b3dBbmRGYWxsYmFja0ZvbnRzTWFwLT5maW5kKHRoaXMpOwotICAgIGlmIChpdCA9PSBzX2dseXBo
T3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICByZXR1cm4gJml0LT5zZWNvbmQuc2Vjb25kOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA1OTI2MCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
MTggKzYzLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBvZmZzZXRSdW4oaW50IGQpIHsgbV9zdGFy
dCArPSBkOyB9CiAKLSAgICB2b2lkIHNldEZhbGxiYWNrRm9udHMoY29uc3QgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+Jik7Ci0gICAgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0R2x5cGhPdmVyZmxvdyhjb25z
dCBHbHlwaE92ZXJmbG93Jik7Ci0gICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdygpIGNv
bnN0OwotCi0gICAgc3RhdGljIHZvaWQgY2xlYXJHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
TWFwKCkKLSAgICB7Ci0gICAgICAgIGlmIChzX2dseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRz
TWFwKQotICAgICAgICAgICAgc19nbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcC0+Y2xl
YXIoKTsKLSAgICB9Ci0KICAgICB1bnNpZ25lZCBzaG9ydCB0cnVuY2F0aW9uKCkgeyByZXR1cm4g
bV90cnVuY2F0aW9uOyB9CiAKIHByaXZhdGU6CkBAIC0xMzgsOSArMTI2LDYgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBzaG9ydCBtX3RydW5jYXRpb247IC8vIFdoZXJlIHRvIHRydW5jYXRlIHdo
ZW4gdGV4dCBvdmVyZmxvdyBpcyBhcHBsaWVkLiAgV2UgdXNlIHNwZWNpYWwgY29uc3RhbnRzIHRv
CiAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVub3RlIG5vIHRydW5jYXRpb24gKHRoZSB3aG9s
ZSBydW4gcGFpbnRzKSBhbmQgZnVsbCB0cnVuY2F0aW9uIChub3RoaW5nIHBhaW50cyBhdCBhbGwp
LgogCi0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IElubGluZVRleHRCb3gqLCBwYWlyPFZlY3Rv
cjxjb25zdCBTaW1wbGVGb250RGF0YSo+LCBHbHlwaE92ZXJmbG93PiA+IEdseXBoT3ZlcmZsb3dB
bmRGYWxsYmFja0ZvbnRzTWFwOwotICAgIHN0YXRpYyBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tG
b250c01hcCogc19nbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDsKLQogcHJvdGVjdGVk
OgogICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0Kiwg
aW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGludCBzdGFydFBvcywg
aW50IGVuZFBvcyk7CiAgICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRl
eHQqLCBpbnQgdHgsIGludCB0eSwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBiYWNr
Z3JvdW5kKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gNTkyNjApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQs
OCArMjY0LDggQEAgcHJpdmF0ZToKICAgICBJbmxpbmVJdGVyYXRvciBmaW5kTmV4dExpbmVCcmVh
ayhJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwgYm9vbCYgaXNMaW5lRW1wdHks
IGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgRUNsZWFyKiBjbGVhciA9IDApOwogICAg
IFJvb3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUodW5zaWduZWQgcnVuQ291bnQsIEJpZGlSdW4q
IGZpcnN0UnVuLCBCaWRpUnVuKiBsYXN0UnVuLCBib29sIGZpcnN0TGluZSwgYm9vbCBsYXN0TGlu
ZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpOwogICAgIElubGluZUZsb3dCb3gqIGNyZWF0ZUxp
bmVCb3hlcyhSZW5kZXJPYmplY3QqLCBib29sIGZpcnN0TGluZSk7Ci0gICAgdm9pZCBjb21wdXRl
SG9yaXpvbnRhbFBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJveCosIGJvb2wgZmlyc3RMaW5l
LCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgYm9vbCByZWFj
aGVkRW5kKTsKLSAgICB2b2lkIGNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uc0ZvckxpbmUoUm9vdElu
bGluZUJveCosIEJpZGlSdW4qKTsKKyAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsUG9zaXRpb25z
Rm9yTGluZShSb290SW5saW5lQm94KiwgYm9vbCBmaXJzdExpbmUsIEJpZGlSdW4qIGZpcnN0UnVu
LCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBib29sIHJlYWNoZWRFbmQsIEdseXBoT3ZlcmZs
b3dBbmRGYWxsYmFja0ZvbnRzTWFwJik7CisgICAgdm9pZCBjb21wdXRlVmVydGljYWxQb3NpdGlv
bnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gqLCBCaWRpUnVuKiwgR2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXAmKTsKICAgICB2b2lkIGRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKCk7CiAgICAg
dm9pZCBjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KCk7CiAgICAgdm9pZCBhZGRPdmVyZmxvd0Zy
b21JbmxpbmVDaGlsZHJlbigpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA1OTI2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw3ICszMTAsNyBA
QCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6Y29uc3RydWN0TGluCiAgICAgcmV0dXJuIGxh
c3RSb290Qm94KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9udGFsUG9z
aXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiBsaW5lQm94LCBib29sIGZpcnN0TGluZSwgQmlk
aVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVu
ZCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9udGFsUG9zaXRpb25zRm9yTGluZShS
b290SW5saW5lQm94KiBsaW5lQm94LCBib29sIGZpcnN0TGluZSwgQmlkaVJ1biogZmlyc3RSdW4s
IEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVuZCwgR2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udHNNYXAmIGdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwKQog
ewogICAgIC8vIEZpcnN0IGRldGVybWluZSBvdXIgdG90YWwgd2lkdGguCiAgICAgaW50IGF2YWls
YWJsZVdpZHRoID0gbGluZVdpZHRoKGhlaWdodCgpLCBmaXJzdExpbmUpOwpAQCAtMzUwLDcgKzM1
MCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9udGFsUG9zaXQKICNlbmRpZgog
ICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHItPm1fYm94LT5pc1RleHQo
KSk7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KHItPm1fYm94
KS0+c2V0RmFsbGJhY2tGb250cyhmYWxsYmFja0ZvbnRzKTsKKyAgICAgICAgICAgICAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSBnbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcC5hZGQoc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KHItPm1f
Ym94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3Zl
cmZsb3coKSkpLmZpcnN0OworICAgICAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kLmZpcnN0
LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMs
IGl0LT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKChnbHlw
aE92ZXJmbG93LnRvcCB8fCBnbHlwaE92ZXJmbG93LmJvdHRvbSB8fCBnbHlwaE92ZXJmbG93Lmxl
ZnQgfHwgZ2x5cGhPdmVyZmxvdy5yaWdodCkKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMzU4LDcgKzM2
MCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9udGFsUG9zaXQKICNlbmRpZgog
ICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHItPm1fYm94LT5pc1RleHQo
KSk7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KHItPm1fYm94
KS0+c2V0R2x5cGhPdmVyZmxvdyhnbHlwaE92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSBnbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcC5hZGQoc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KHItPm1f
Ym94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3Zl
cmZsb3coKSkpLmZpcnN0OworICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuc2Vjb25kID0gZ2x5
cGhPdmVyZmxvdzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICghci0+bV9vYmpl
Y3QtPmlzUmVuZGVySW5saW5lKCkpIHsKICAgICAgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94
ID0gdG9SZW5kZXJCb3goci0+bV9vYmplY3QpOwpAQCAtNDc1LDEyICs0NzgsMTIgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQb3NpdAogICAgIC8vIFRoZSB3aWR0aHMgb2Yg
YWxsIHJ1bnMgYXJlIG5vdyBrbm93bi4gIFdlIGNhbiBub3cgcGxhY2UgZXZlcnkgaW5saW5lIGJv
eCAoYW5kCiAgICAgLy8gY29tcHV0ZSBhY2N1cmF0ZSB3aWR0aHMgZm9yIHRoZSBpbmxpbmUgZmxv
dyBib3hlcykuCiAgICAgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOwotICAgIGxpbmVCb3gtPnBs
YWNlQm94ZXNIb3Jpem9udGFsbHkoeCwgbmVlZHNXb3JkU3BhY2luZyk7CisgICAgbGluZUJveC0+
cGxhY2VCb3hlc0hvcml6b250YWxseSh4LCBuZWVkc1dvcmRTcGFjaW5nLCBnbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVWZXJ0
aWNhbFBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biogZmly
c3RSdW4pCit2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlVmVydGljYWxQb3NpdGlvbnNGb3JMaW5l
KFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIEJpZGlSdW4qIGZpcnN0UnVuLCBHbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcCYgZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXApCiB7
Ci0gICAgc2V0SGVpZ2h0KGxpbmVCb3gtPnZlcnRpY2FsbHlBbGlnbkJveGVzKGhlaWdodCgpKSk7
CisgICAgc2V0SGVpZ2h0KGxpbmVCb3gtPnZlcnRpY2FsbHlBbGlnbkJveGVzKGhlaWdodCgpLCBn
bHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCkpOwogICAgIGxpbmVCb3gtPnNldEJsb2Nr
SGVpZ2h0KGhlaWdodCgpKTsKIAogICAgIC8vIE5vdyBtYWtlIHN1cmUgd2UgcGxhY2UgcmVwbGFj
ZWQgcmVuZGVyIG9iamVjdHMgY29ycmVjdGx5LgpAQCAtNzM5LDExICs3NDIsMTEgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZUJveC0+c2V0RW5kc1dpdGhCcmVhayhwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOwog
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgd2UgcG9zaXRpb24gYWxsIG9mIG91ciB0
ZXh0IHJ1bnMgaG9yaXpvbnRhbGx5LgotICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZUhv
cml6b250YWxQb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gsIGZpcnN0TGluZSwgcmVzb2x2ZXIuZmly
c3RSdW4oKSwgdHJhaWxpbmdTcGFjZVJ1biwgZW5kLmF0RW5kKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAgZ2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlSG9yaXpv
bnRhbFBvc2l0aW9uc0ZvckxpbmUobGluZUJveCwgZmlyc3RMaW5lLCByZXNvbHZlci5maXJzdFJ1
bigpLCB0cmFpbGluZ1NwYWNlUnVuLCBlbmQuYXRFbmQoKSwgZ2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXApOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgcG9zaXRpb24g
b3VyIHRleHQgcnVucyB2ZXJ0aWNhbGx5LgotICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0
ZVZlcnRpY2FsUG9zaXRpb25zRm9yTGluZShsaW5lQm94LCByZXNvbHZlci5maXJzdFJ1bigpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIElubGluZVRleHRCb3g6OmNsZWFyR2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udE1hcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVZl
cnRpY2FsUG9zaXRpb25zRm9yTGluZShsaW5lQm94LCByZXNvbHZlci5maXJzdFJ1bigpLCBnbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCk7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBTVkcgdGV4dCBsYXlvdXQgY29kZQpAQCAtODM5
LDcgKzg0Miw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAg
ICAgICAgICAgICAgICBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3gqIHRyYWlsaW5nRmxvYXRz
TGluZUJveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94
KHRoaXMpOwogICAgICAgICAgICAgICAgIG1fbGluZUJveGVzLmFwcGVuZExpbmVCb3godHJhaWxp
bmdGbG9hdHNMaW5lQm94KTsKICAgICAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gt
PnNldENvbnN0cnVjdGVkKCk7Ci0gICAgICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94
LT52ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhoZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgR2x5cGhP
dmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAgZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXA7CisgICAgICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT52ZXJ0aWNhbGx5QWxp
Z25Cb3hlcyhoZWlnaHQoKSwgZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXApOwogICAg
ICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+c2V0VmVydGljYWxPdmVyZmxvd1Bv
c2l0aW9ucyhoZWlnaHQoKSwgYm90dG9tTGF5b3V0T3ZlcmZsb3csIGhlaWdodCgpLCBib3R0b21W
aXN1YWxPdmVyZmxvdywgMCk7CiAgICAgICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94
LT5zZXRCbG9ja0hlaWdodChoZWlnaHQoKSk7CiAgICAgICAgICAgICB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gNTkyNjApCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw3IEBA
IHZvaWQgUm9vdElubGluZUJveDo6Y2hpbGRSZW1vdmVkKElubGluZUIKICAgICB9CiB9CiAKLWlu
dCBSb290SW5saW5lQm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQgaGVpZ2h0T2ZCbG9jaykK
K2ludCBSb290SW5saW5lQm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQgaGVpZ2h0T2ZCbG9j
aywgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmIGdseXBoT3ZlcmZsb3dBbmRGYWxs
YmFja0ZvbnRzTWFwKQogewogICAgIGludCBtYXhQb3NpdGlvblRvcCA9IDA7CiAgICAgaW50IG1h
eFBvc2l0aW9uQm90dG9tID0gMDsKQEAgLTIxNiw3ICsyMTYsNyBAQCBpbnQgUm9vdElubGluZUJv
eDo6dmVydGljYWxseUFsaWduQm94ZXMoCiAgICAgICAgIGN1cnIgPSBjdXJyLT5jb250YWluZXIo
KTsKICAgICBib29sIHN0cmljdE1vZGUgPSAoY3VyciAmJiBjdXJyLT5kb2N1bWVudCgpLT5pblN0
cmljdE1vZGUoKSk7CiAKLSAgICBjb21wdXRlTG9naWNhbEJveEhlaWdodHMobWF4UG9zaXRpb25U
b3AsIG1heFBvc2l0aW9uQm90dG9tLCBtYXhBc2NlbnQsIG1heERlc2NlbnQsIHN0cmljdE1vZGUp
OworICAgIGNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhtYXhQb3NpdGlvblRvcCwgbWF4UG9zaXRp
b25Cb3R0b20sIG1heEFzY2VudCwgbWF4RGVzY2VudCwgc3RyaWN0TW9kZSwgZ2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udHNNYXApOwogCiAgICAgaWYgKG1heEFzY2VudCArIG1heERlc2NlbnQg
PCBtYXgobWF4UG9zaXRpb25Ub3AsIG1heFBvc2l0aW9uQm90dG9tKSkKICAgICAgICAgYWRqdXN0
TWF4QXNjZW50QW5kRGVzY2VudChtYXhBc2NlbnQsIG1heERlc2NlbnQsIG1heFBvc2l0aW9uVG9w
LCBtYXhQb3NpdGlvbkJvdHRvbSk7CkBAIC0yMjUsNyArMjI1LDcgQEAgaW50IFJvb3RJbmxpbmVC
b3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKAogICAgIGludCBsaW5lVG9wID0gaGVpZ2h0T2ZCbG9j
azsKICAgICBpbnQgbGluZUJvdHRvbSA9IGhlaWdodE9mQmxvY2s7CiAgICAgcGxhY2VCb3hlc1Zl
cnRpY2FsbHkoaGVpZ2h0T2ZCbG9jaywgbWF4SGVpZ2h0LCBtYXhBc2NlbnQsIHN0cmljdE1vZGUs
IGxpbmVUb3AsIGxpbmVCb3R0b20pOwotICAgIGNvbXB1dGVWZXJ0aWNhbE92ZXJmbG93KGxpbmVU
b3AsIGxpbmVCb3R0b20sIHN0cmljdE1vZGUpOworICAgIGNvbXB1dGVWZXJ0aWNhbE92ZXJmbG93
KGxpbmVUb3AsIGxpbmVCb3R0b20sIHN0cmljdE1vZGUsIGdseXBoT3ZlcmZsb3dBbmRGYWxsYmFj
a0ZvbnRzTWFwKTsKICAgICBzZXRMaW5lVG9wQm90dG9tUG9zaXRpb25zKGxpbmVUb3AsIGxpbmVC
b3R0b20pOwogICAgIAogICAgIGhlaWdodE9mQmxvY2sgKz0gbWF4SGVpZ2h0OwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gNTkyNjApCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVi
bGljOgogICAgIGludCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdCB7IHJldHVybiBsaW5lQm90dG9t
KCk7IH0KICAgICBpbnQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbWF4KDAsIHNl
bGVjdGlvbkJvdHRvbSgpIC0gc2VsZWN0aW9uVG9wKCkpOyB9CiAKLSAgICB2aXJ0dWFsIGludCB2
ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQgaGVpZ2h0T2ZCbG9jayk7CisgICAgdmlydHVhbCBpbnQg
dmVydGljYWxseUFsaWduQm94ZXMoaW50IGhlaWdodE9mQmxvY2ssIEdseXBoT3ZlcmZsb3dBbmRG
YWxsYmFja0ZvbnRzTWFwJik7CiAgICAgdm9pZCBzZXRMaW5lVG9wQm90dG9tUG9zaXRpb25zKGlu
dCB0b3AsIGludCBib3R0b20pOwogCiAgICAgdmlydHVhbCBSZW5kZXJMaW5lQm94TGlzdCogcmVu
ZGVyZXJMaW5lQm94ZXMoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJ
bmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxp
bmVCb3guY3BwCShyZXZpc2lvbiA1OTI2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJ
bmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTUsNyArODk1LDggQEAgdm9pZCBTVkdS
b290SW5saW5lQm94OjpsYXlvdXRJbmxpbmVCb3hlcwogICAgICAgICBzdGFydC0+c2V0V2lkdGgo
aGlnaFggLSBsb3dYKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHUm9vdElubGluZUJveCo+KHN0
YXJ0KS0+c2V0SGVpZ2h0KGhpZ2hZIC0gbG93WSk7CiAKLSAgICAgICAgc3RhcnQtPmNvbXB1dGVW
ZXJ0aWNhbE92ZXJmbG93KHRvcCwgYm90dG9tLCB0cnVlKTsKKyAgICAgICAgR2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udHNNYXAgZ2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA7Cisg
ICAgICAgIHN0YXJ0LT5jb21wdXRlVmVydGljYWxPdmVyZmxvdyh0b3AsIGJvdHRvbSwgdHJ1ZSwg
Z2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXApOwogICAgICAgICBzdGF0aWNfY2FzdDxT
VkdSb290SW5saW5lQm94Kj4oc3RhcnQpLT5zZXRMaW5lVG9wQm90dG9tUG9zaXRpb25zKHRvcCwg
Ym90dG9tKTsKICAgICB9CiB9Cg==
</data>
<flag name="review"
          id="40270"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>