<?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>45174</bug_id>
          
          <creation_ts>2010-09-03 07:29:51 -0700</creation_ts>
          <short_desc>Freeze in VisiblePosition::leftVisuallyDistinctCandidate with ::first-letter</short_desc>
          <delta_ts>2024-05-10 09:14:53 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>58911</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Thaddee Tyl">thaddee.tyl</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>antaryami.pandia</cc>
    
    <cc>ap</cc>
    
    <cc>enrica</cc>
    
    <cc>hyatt</cc>
    
    <cc>leviw</cc>
    
    <cc>leviw</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>273935</commentid>
    <comment_count>0</comment_count>
      <attachid>66491</attachid>
    <who name="Thaddee Tyl">thaddee.tyl</who>
    <bug_when>2010-09-03 07:29:51 -0700</bug_when>
    <thetext>Created attachment 66491
WebPage with ::first-letter and contenteditable applied.

See attachment.

Steps to reproduce crash:

1. Open attachment in Webkit, Safari or Chrome.
2. Click on the right of the &apos;O&apos;.
3. Type a single space.
4. Press the left arrow key twice.
5. Now, it is too late. The browser (or the tab, in Chrome)
is no longer responding. It uses all the CPU until killed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274142</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-09-03 13:19:56 -0700</bug_when>
    <thetext>Hangs in VisiblePosition::leftVisuallyDistinctCandidate().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274143</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-09-03 13:20:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/8393558&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306903</commentid>
    <comment_count>3</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2010-11-09 11:47:05 -0800</bug_when>
    <thetext>This no longer hangs on TOT WebKit in Safari or Chrome. Instead, typing space causes all the text to be lost. Also, hitting the left arrow key causes the caret to keep jumping left and right to between the &apos;K&apos; and &apos;O&apos; and after the &apos;O&apos;, but never actually getting before the &apos;K&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306973</commentid>
    <comment_count>4</comment_count>
      <attachid>73413</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2010-11-09 14:11:34 -0800</bug_when>
    <thetext>Created attachment 73413
Removing leading space leads to hang

Removing the leading space before the &apos;K&apos; actually causes the hang to once-again manifest in TOT WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307461</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2010-11-10 11:46:54 -0800</bug_when>
    <thetext>The first-letter implementation seems to break assumptions made throughout WebKit. In our example, we end up with a render tree that looks something like this:

RenderBlock
- RenderInline
-- RenderTextFragment &quot;K&quot;
- RenderTextFragment &quot;O&quot;

where &quot;O&quot; is considered the renderer for the DOM text node &quot;KO&quot;. Breaking the RenderText into two RenderTextFragments who&apos;s first common ancestor is a renderer for a different node causes the first letter to be &quot;lost&quot; in visible units. It seems like we need to nest the RenderTextFragments and the RenderInline that contains the first-letter style inside of a new RenderObject that is considered the DOM node&apos;s renderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308231</commentid>
    <comment_count>6</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2010-11-11 15:50:20 -0800</bug_when>
    <thetext>I started working on a fix for this but unfortunately reached a bit of a head... Position and VisiblePosition code needs to be made entirely too aware of the atypical Renderer layout of text nodes with first-letter content for my fix to be clean.

First of all, it seems that Position shouldn&apos;t be aware of Renderer code, and should be able to get all it needs from the DOM. Furthermore, IMHO VisiblePosition could be cleaned up to push strange behavior like this into Renderer&apos;s own implementation, instead of trying to handle all cases in one class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309937</commentid>
    <comment_count>7</comment_count>
      <attachid>74042</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2010-11-16 14:34:09 -0800</bug_when>
    <thetext>Created attachment 74042
Patch

This patch solves a number of issues surrounding first-letter:
- leftVisuallyDistinctCandidate no longer hangs
- the caret can correctly be positioned in first-letter content
- typing at the end of an editable field with first-letter content no longer replaces the final character (Bug 26442)

There are still serious issues with selection and contenteditable, all stemming from the fundamental break from the rendering norm that first-letter presents by having part of a text node&apos;s rendered content in a fully separate renderer than the one it directly owns. Solving the remaining bugs involves making more parts of the code aware of this specific render-tree structure, which makes me uncomfortable.

I believe that having the text node&apos;s renderer be the parent (or grand-parent) of *all* associated RenderTextFragments would solve many of these problems, but I&apos;ll defer to those who better understand WebKit rendering. Feedback is very appreciated. I think this solution is not ideal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635480</commentid>
    <comment_count>8</comment_count>
    <who name="Antaryami Pandia (apandia)">antaryami.pandia</who>
    <bug_when>2012-05-28 17:58:38 -0700</bug_when>
    <thetext>I am currently working on html editing issues and found that with current implentation, there is a gap in how the offsets are calculated using RenderTextFragments (bug 58800). So I think there is a need to change the current working of RenderTextFragments.

Levi Weintraub: If you are not working on the issue, then I would like to take the issue forward.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636533</commentid>
    <comment_count>9</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-05-29 16:25:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I am currently working on html editing issues and found that with current implentation, there is a gap in how the offsets are calculated using RenderTextFragments (bug 58800). So I think there is a need to change the current working of RenderTextFragments.
&gt; 
&gt; Levi Weintraub: If you are not working on the issue, then I would like to take the issue forward.
&gt; 
&gt; Thanks.

Hi Antaryami!

I&apos;d love to have your patch. I haven&apos;t been thinking about this problem for quite some time and would be happy to take a look at any patches you have :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636884</commentid>
    <comment_count>10</comment_count>
    <who name="Antaryami Pandia (apandia)">antaryami.pandia</who>
    <bug_when>2012-05-29 23:01:48 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; 
&gt; Hi Antaryami!
&gt; 
&gt; I&apos;d love to have your patch. I haven&apos;t been thinking about this problem for quite some time and would be happy to take a look at any patches you have :)

Thanks Levi.
I don&apos;t have a patch ready with me. But while working on editing issues I also found same issue that you have analyzed. There is an issue how the offsets are calculated and used using RenderTextFragment.

I am working on to make editing works with first letter.
I will also appreciate any direction/guide from you.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>66491</attachid>
            <date>2010-09-03 07:29:51 -0700</date>
            <delta_ts>2010-09-03 07:29:51 -0700</delta_ts>
            <desc>WebPage with ::first-letter and contenteditable applied.</desc>
            <filename>bug.html</filename>
            <type>text/html</type>
            <size>99</size>
            <attacher name="Thaddee Tyl">thaddee.tyl</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxzdHlsZT5kaXY6OmZpcnN0LWxldHRlcntjb2xvcjpibGFjazt9PC9z
dHlsZT4KPGRpdiBjb250ZW50ZWRpdGFibGU9dHJ1ZT4gS088L2Rpdj4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>73413</attachid>
            <date>2010-11-09 14:11:34 -0800</date>
            <delta_ts>2010-11-09 14:11:34 -0800</delta_ts>
            <desc>Removing leading space leads to hang</desc>
            <filename>45174.html</filename>
            <type>text/html</type>
            <size>97</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+IAo8c3R5bGU+ZGl2OjpmaXJzdC1sZXR0ZXJ7Y29sb3I6cmVkO308L3N0
eWxlPiAKPGRpdiBjb250ZW50ZWRpdGFibGU9dHJ1ZT5LTzwvZGl2Pg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74042</attachid>
            <date>2010-11-16 14:34:09 -0800</date>
            <delta_ts>2010-11-16 14:34:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>PositioningInFirstLetter.patch</filename>
            <type>text/plain</type>
            <size>17629</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDcxNTkxKQorKysgV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIlBvc2l0aW9uSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5o
IgorI2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNp
bmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAg
LTU1OCwxNCArNTU5LDIxIEBACiAgICAgICAgICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3Vy
cmVudFBvcy5vZmZzZXRJbkxlYWZOb2RlKCk7CiAgICAgICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0
UmVuZGVyZXIgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOwogICAgICAgICAgICAgSW5saW5lVGV4
dEJveCogbGFzdFRleHRCb3ggPSB0ZXh0UmVuZGVyZXItPmxhc3RUZXh0Qm94KCk7CisgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXRGb3JGaXJzdExldHRlciA9IDA7CisgICAgICAgICAgICBpZiAo
dGV4dFJlbmRlcmVyLT5pc1RleHRGcmFnbWVudCgpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVy
VGV4dEZyYWdtZW50KiB0ZXh0RnJhZ21lbnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0RnJhZ21l
bnQqPih0ZXh0UmVuZGVyZXIpOworICAgICAgICAgICAgICAgIG9mZnNldEZvckZpcnN0TGV0dGVy
ID0gdGV4dEZyYWdtZW50LT5zdGFydCgpOworICAgICAgICAgICAgICAgIGlmIChvZmZzZXRGb3JG
aXJzdExldHRlciAmJiB0ZXh0T2Zmc2V0IDw9IG9mZnNldEZvckZpcnN0TGV0dGVyKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3go
KTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
dGV4dE9mZnNldCA8PSBib3gtPnN0YXJ0KCkgKyBib3gtPmxlbigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXh0T2Zmc2V0ID4gYm94LT5zdGFydCgpKQorICAgICAgICAgICAgICAgIGlm
ICh0ZXh0T2Zmc2V0IDw9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkgKyBvZmZzZXRGb3JGaXJz
dExldHRlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA+IGJveC0+c3Rh
cnQoKSArIG9mZnNldEZvckZpcnN0TGV0dGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGN1cnJlbnRQb3M7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChib3ggPT0gbGFzdFRleHRCb3ggfHwgdGV4
dE9mZnNldCAhPSBib3gtPnN0YXJ0KCkgKyBib3gtPmxlbigpICsgMSkKKyAgICAgICAgICAgICAg
ICBpZiAoYm94ID09IGxhc3RUZXh0Qm94IHx8IHRleHRPZmZzZXQgIT0gYm94LT5zdGFydCgpICsg
Ym94LT5sZW4oKSArIG9mZnNldEZvckZpcnN0TGV0dGVyICsgMSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAvLyBUaGUgdGV4dCBjb250aW51ZXMgb24g
dGhlIG5leHQgbGluZSBvbmx5IGlmIHRoZSBsYXN0IHRleHQgYm94IGlzIG5vdCBvbiB0aGlzIGxp
bmUgYW5kCkBAIC02ODAsMTQgKzY4OCwyMSBAQAogICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9m
ZnNldCA9IGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFmTm9kZSgpOwogICAgICAgICAgICAgUmVuZGVy
VGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKTsKICAgICAgICAgICAg
IElubGluZVRleHRCb3gqIGxhc3RUZXh0Qm94ID0gdGV4dFJlbmRlcmVyLT5sYXN0VGV4dEJveCgp
OworICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0Rm9yRmlyc3RMZXR0ZXIgPSAwOworICAgICAg
ICAgICAgaWYgKHRleHRSZW5kZXJlci0+aXNUZXh0RnJhZ21lbnQoKSkgeworICAgICAgICAgICAg
ICAgIFJlbmRlclRleHRGcmFnbWVudCogdGV4dEZyYWdtZW50ID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dEZyYWdtZW50Kj4odGV4dFJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRGb3JG
aXJzdExldHRlciA9IHRleHRGcmFnbWVudC0+c3RhcnQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
dGV4dE9mZnNldCA8IG9mZnNldEZvckZpcnN0TGV0dGVyKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudFBvczsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoSW5saW5l
VGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBi
b3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA8PSBi
b3gtPmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0T2Zmc2V0ID49IGJveC0+
c3RhcnQoKSkKKyAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA8PSBib3gtPmVuZCgpICsg
b2Zmc2V0Rm9yRmlyc3RMZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRPZmZz
ZXQgPj0gYm94LT5zdGFydCgpICsgb2Zmc2V0Rm9yRmlyc3RMZXR0ZXIpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGJveCA9PSBsYXN0
VGV4dEJveCB8fCB0ZXh0T2Zmc2V0ICE9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkpCisgICAg
ICAgICAgICAgICAgaWYgKGJveCA9PSBsYXN0VGV4dEJveCB8fCB0ZXh0T2Zmc2V0ICE9IGJveC0+
c3RhcnQoKSArIGJveC0+bGVuKCkgKyBvZmZzZXRGb3JGaXJzdExldHRlcikKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAvLyBUaGUgdGV4dCBjb250aW51
ZXMgb24gdGhlIG5leHQgbGluZSBvbmx5IGlmIHRoZSBsYXN0IHRleHQgYm94IGlzIG5vdCBvbiB0
aGlzIGxpbmUgYW5kCkBAIC03ODMsMTcgKzc5OCwzMSBAQAogICAgIGlmICghcmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKKyAgICBpbnQgb2Zmc2V0ID0gbV9vZmZzZXQ7CiAg
ICAgUmVuZGVyVGV4dCAqdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKTsKKyAg
ICAKKyAgICAvLyBJZiB0aGVyZSdzIGZpcnN0LWxldHRlciBjb250ZW50LCB3ZSBuZWVkIHRvIGVp
dGhlciBzZWUgaWYgdGhlIHBvc2l0aW9uIGlzIHJlbmRlcmVkIGluIHRoZQorICAgIC8vIGZpcnN0
LWxldHRlcidzIHJlbmRlcmVyLCBvciBzdWJ0cmFjdCB0aGUgb2Zmc2V0IGZvciB0aGF0IGNvbnRl
bnQuCisgICAgaWYgKHRleHRSZW5kZXJlci0+aXNUZXh0RnJhZ21lbnQoKSkgeworICAgICAgICBS
ZW5kZXJUZXh0RnJhZ21lbnQgKnRleHRGcmFnbWVudFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGV4dEZyYWdtZW50Kj4odGV4dFJlbmRlcmVyKTsKKyAgICAgICAgaWYgKG9mZnNldCA8IHN0
YXRpY19jYXN0PGludD4odGV4dEZyYWdtZW50UmVuZGVyZXItPnN0YXJ0KCkpICYmIAorICAgICAg
ICAgICAgdGV4dEZyYWdtZW50UmVuZGVyZXItPmZpcnN0TGV0dGVyKCkgJiYgdGV4dEZyYWdtZW50
UmVuZGVyZXItPmZpcnN0TGV0dGVyKCktPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHRleHRS
ZW5kZXJlciA9IHRvUmVuZGVyVGV4dChzdGF0aWNfY2FzdDxSZW5kZXJUZXh0RnJhZ21lbnQqPih0
ZXh0UmVuZGVyZXIpLT5maXJzdExldHRlcigpLT5maXJzdENoaWxkKCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICAvLyBPbmx5IHNldCBvZmZzZXRGb3JGaXJzdExldHRlciB3aGVuIHdlJ3Jl
IGxvb2tpbmcgYXQgdGhlIHRyYWlsaW5nIHRleHQgZnJhZ21lbnQKKyAgICAgICAgICAgIG9mZnNl
dCAtPSB0ZXh0RnJhZ21lbnRSZW5kZXJlci0+c3RhcnQoKTsKKyAgICB9CisgICAgCiAgICAgZm9y
IChJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7
IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICBpZiAobV9vZmZzZXQgPCBzdGF0
aWNfY2FzdDxpbnQ+KGJveC0+c3RhcnQoKSkgJiYgIXRleHRSZW5kZXJlci0+Y29udGFpbnNSZXZl
cnNlZFRleHQoKSkgeworICAgICAgICBpZiAob2Zmc2V0IDwgc3RhdGljX2Nhc3Q8aW50Pihib3gt
PnN0YXJ0KCkpICYmICF0ZXh0UmVuZGVyZXItPmNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkpIHsKICAg
ICAgICAgICAgIC8vIFRoZSBvZmZzZXQgd2UncmUgbG9va2luZyBmb3IgaXMgYmVmb3JlIHRoaXMg
bm9kZQogICAgICAgICAgICAgLy8gdGhpcyBtZWFucyB0aGUgb2Zmc2V0IG11c3QgYmUgaW4gY29u
dGVudCB0aGF0IGlzCiAgICAgICAgICAgICAvLyBub3QgcmVuZGVyZWQuIFJldHVybiBmYWxzZS4K
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBpZiAoYm94LT5j
b250YWluc0NhcmV0T2Zmc2V0KG1fb2Zmc2V0KSkKLSAgICAgICAgICAgIC8vIFJldHVybiBmYWxz
ZSBmb3Igb2Zmc2V0cyBpbnNpZGUgY29tcG9zZWQgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIHJl
dHVybiBtX29mZnNldCA9PSAwIHx8IG1fb2Zmc2V0ID09IHRleHRSZW5kZXJlci0+bmV4dE9mZnNl
dCh0ZXh0UmVuZGVyZXItPnByZXZpb3VzT2Zmc2V0KG1fb2Zmc2V0KSk7CisgICAgICAgIGlmIChi
b3gtPmNvbnRhaW5zQ2FyZXRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAvLyBSZXR1cm4g
ZmFsc2UgZm9yIG9mZnNldHMgaW5zaWRlIGNvbXBvc2VkIGNoYXJhY3RlcnMuCisgICAgICAgICAg
ICByZXR1cm4gb2Zmc2V0ID09IDAgfHwgb2Zmc2V0ID09IHRleHRSZW5kZXJlci0+bmV4dE9mZnNl
dCh0ZXh0UmVuZGVyZXItPnByZXZpb3VzT2Zmc2V0KG9mZnNldCkpOwogICAgIH0KICAgICAKICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xMDUyLDEwICsxMDgxLDIwIEBACiAKICAgICAgICAgSW5saW5l
VGV4dEJveCogYm94OwogICAgICAgICBJbmxpbmVUZXh0Qm94KiBjYW5kaWRhdGUgPSAwOworICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0Rm9yRmlyc3RMZXR0ZXIgPSAwOworICAgICAg
ICBpZiAodGV4dFJlbmRlcmVyLT5pc1RleHRGcmFnbWVudCgpKSB7CisgICAgICAgICAgICBSZW5k
ZXJUZXh0RnJhZ21lbnQgKnRleHRGcmFnbWVudFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dEZyYWdtZW50Kj4odGV4dFJlbmRlcmVyKTsKKyAgICAgICAgICAgIGlmIChjYXJldE9mZnNl
dCA8IHN0YXRpY19jYXN0PGludD4odGV4dEZyYWdtZW50UmVuZGVyZXItPnN0YXJ0KCkpICYmIAor
ICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudFJlbmRlcmVyLT5maXJzdExldHRlcigpICYmIHRl
eHRGcmFnbWVudFJlbmRlcmVyLT5maXJzdExldHRlcigpLT5maXJzdENoaWxkKCkpCisgICAgICAg
ICAgICAgICAgdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KHN0YXRpY19jYXN0PFJlbmRlclRl
eHRGcmFnbWVudCo+KHRleHRSZW5kZXJlciktPmZpcnN0TGV0dGVyKCktPmZpcnN0Q2hpbGQoKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb2Zmc2V0Rm9yRmlyc3RMZXR0ZXIg
PSB0ZXh0RnJhZ21lbnRSZW5kZXJlci0+c3RhcnQoKTsKKyAgICAgICAgfQogCiAgICAgICAgIGZv
ciAoYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5l
eHRUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgIGludCBjYXJldE1pbk9mZnNldCA9IGJveC0+Y2Fy
ZXRNaW5PZmZzZXQoKTsKLSAgICAgICAgICAgIGludCBjYXJldE1heE9mZnNldCA9IGJveC0+Y2Fy
ZXRNYXhPZmZzZXQoKTsKKyAgICAgICAgICAgIGludCBjYXJldE1pbk9mZnNldCA9IGJveC0+Y2Fy
ZXRNaW5PZmZzZXQoKSArIG9mZnNldEZvckZpcnN0TGV0dGVyOworICAgICAgICAgICAgaW50IGNh
cmV0TWF4T2Zmc2V0ID0gYm94LT5jYXJldE1heE9mZnNldCgpICsgb2Zmc2V0Rm9yRmlyc3RMZXR0
ZXI7CiAKICAgICAgICAgICAgIGlmIChjYXJldE9mZnNldCA8IGNhcmV0TWluT2Zmc2V0IHx8IGNh
cmV0T2Zmc2V0ID4gY2FyZXRNYXhPZmZzZXQgfHwgKGNhcmV0T2Zmc2V0ID09IGNhcmV0TWF4T2Zm
c2V0ICYmIGJveC0+aXNMaW5lQnJlYWsoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBA
IC0xMDc0LDcgKzExMTMsNyBAQAogICAgICAgICBpZiAoY2FuZGlkYXRlICYmIGNhbmRpZGF0ZSA9
PSB0ZXh0UmVuZGVyZXItPmxhc3RUZXh0Qm94KCkgJiYgYWZmaW5pdHkgPT0gRE9XTlNUUkVBTSkg
ewogICAgICAgICAgICAgYm94ID0gc2VhcmNoQWhlYWRGb3JCZXR0ZXJNYXRjaCh0ZXh0UmVuZGVy
ZXIpOwogICAgICAgICAgICAgaWYgKGJveCkKLSAgICAgICAgICAgICAgICBjYXJldE9mZnNldCA9
IGJveC0+Y2FyZXRNaW5PZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBjYXJldE9mZnNldCA9IGJv
eC0+Y2FyZXRNaW5PZmZzZXQoKSArIG9mZnNldEZvckZpcnN0TGV0dGVyOwogICAgICAgICB9CiAg
ICAgICAgIGlubGluZUJveCA9IGJveCA/IGJveCA6IGNhbmRpZGF0ZTsKICAgICB9CkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gNzE1OTEpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKICNpbmNs
dWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxl
X3VuaXRzLmgiCkBAIC0xMjYsOSArMTI3LDE2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGJv
eC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2Fu
ZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1f
ZGVlcFBvc2l0aW9uKTsKIAogICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyByZW5kZXJlci0+cHJldmlvdXNPZmZzZXQob2Zmc2V0KSA6IHJlbmRlcmVy
LT5uZXh0T2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBvZmZz
ZXRGb3JGaXJzdExldHRlciA9IDA7CisgICAgICAgICAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgp
ICYmIHRvUmVuZGVyVGV4dChyZW5kZXJlciktPmlzVGV4dEZyYWdtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBvZmZzZXRGb3JGaXJzdExldHRlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHRGcmFn
bWVudCo+KHJlbmRlcmVyKS0+c3RhcnQoKTsKKyAgICAgICAgICAgICAgICBpZiAob2Zmc2V0IDwg
b2Zmc2V0Rm9yRmlyc3RMZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpbnQgY2FyZXRNaW5PZmZzZXQgPSBib3gtPmNhcmV0TWlu
T2Zmc2V0KCk7Ci0gICAgICAgICAgICBpbnQgY2FyZXRNYXhPZmZzZXQgPSBib3gtPmNhcmV0TWF4
T2Zmc2V0KCk7CisgICAgICAgICAgICBpbnQgY2FyZXRNaW5PZmZzZXQgPSBib3gtPmNhcmV0TWlu
T2Zmc2V0KCkgKyBvZmZzZXRGb3JGaXJzdExldHRlcjsKKyAgICAgICAgICAgIGludCBjYXJldE1h
eE9mZnNldCA9IGJveC0+Y2FyZXRNYXhPZmZzZXQoKSArIG9mZnNldEZvckZpcnN0TGV0dGVyOwog
CiAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gY2FyZXRNaW5PZmZzZXQgJiYgb2Zmc2V0IDwgY2Fy
ZXRNYXhPZmZzZXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDYsNyArMTU0LDcgQEAK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
QVNTRVJUKG9mZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSk7CisgICAgICAgICAg
ICBBU1NFUlQob2Zmc2V0ID09IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpICsgb2Zmc2V0Rm9y
Rmlyc3RMZXR0ZXIpOwogCiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxldmVsID0gYm94LT5i
aWRpTGV2ZWwoKTsKICAgICAgICAgICAgIElubGluZUJveCogcHJldkJveCA9IGJveC0+cHJldkxl
YWZDaGlsZCgpOwpAQCAtMjUyLDIwICsyNjAsMjUgQEAKICAgICAgICAgSW5saW5lQm94KiBib3g7
CiAgICAgICAgIGludCBvZmZzZXQ7CiAgICAgICAgIHAuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1f
YWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24sIGJveCwgb2Zmc2V0KTsKKyAgICAgICAgb2Zmc2V0
ID0gcC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKICAgICAgICAgaWYgKCFib3gpCiAgICAgICAg
ICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUobV9kZWVwUG9zaXRpb24pOwogCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBib3gtPnJlbmRlcmVyKCk7CisgICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0Rm9yRmlyc3RM
ZXR0ZXIgPSAwOworICAgICAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4
dChyZW5kZXJlciktPmlzVGV4dEZyYWdtZW50KCkpCisgICAgICAgICAgICBvZmZzZXRGb3JGaXJz
dExldHRlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHRGcmFnbWVudCo+KHJlbmRlcmVyKS0+c3Rh
cnQoKTsKIAogICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgaWYgKChyZW5kZXJl
ci0+aXNSZXBsYWNlZCgpIHx8IHJlbmRlcmVyLT5pc0JSKCkpICYmIG9mZnNldCA9PSBib3gtPmNh
cmV0TGVmdG1vc3RPZmZzZXQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYm94LT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQ
b3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRp
b24pOwogCiAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IHJlbmRlcmVyLT5uZXh0T2Zmc2V0KG9mZnNldCkgOiByZW5kZXJlci0+cHJldmlvdXNPZmZz
ZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGNhcmV0TWluT2Zmc2V0
ID0gYm94LT5jYXJldE1pbk9mZnNldCgpICsgb2Zmc2V0Rm9yRmlyc3RMZXR0ZXI7CisgICAgICAg
ICAgICBpbnQgY2FyZXRNYXhPZmZzZXQgPSBib3gtPmNhcmV0TWF4T2Zmc2V0KCkgKyBvZmZzZXRG
b3JGaXJzdExldHRlcjsKIAotICAgICAgICAgICAgaW50IGNhcmV0TWluT2Zmc2V0ID0gYm94LT5j
YXJldE1pbk9mZnNldCgpOwotICAgICAgICAgICAgaW50IGNhcmV0TWF4T2Zmc2V0ID0gYm94LT5j
YXJldE1heE9mZnNldCgpOwotCiAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gY2FyZXRNaW5PZmZz
ZXQgJiYgb2Zmc2V0IDwgY2FyZXRNYXhPZmZzZXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
QEAgLTI4Miw3ICsyOTUsNyBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGJveC0+Y2FyZXRSaWdodG1vc3RP
ZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGJveC0+Y2FyZXRSaWdodG1v
c3RPZmZzZXQoKSArIG9mZnNldEZvckZpcnN0TGV0dGVyKTsKIAogICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBsZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7CiAgICAgICAgICAgICBJbmxpbmVCb3gq
IG5leHRCb3ggPSBib3gtPm5leHRMZWFmQ2hpbGQoKTsKQEAgLTM1MSw3ICszNjQsMTEgQEAKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KKyAgICAgICAgCisg
ICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXQgdG8gdGFrZSBpbnRvIGFjY291
bnQgZmlyc3QtbGV0dGVyIGNvbnRlbnQKKyAgICAgICAvLyBpZiAocmVuZGVyZXItPmlzVGV4dCgp
ICYmIHRvUmVuZGVyVGV4dChyZW5kZXJlciktPmlzVGV4dEZyYWdtZW50KCkpCisvLyAgICAgICAg
ICAgIG9mZnNldCArPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0RnJhZ21lbnQqPihyZW5kZXJlcikt
PnN0YXJ0KCk7CisgICAgICAgIAogICAgICAgICBwID0gUG9zaXRpb24ocmVuZGVyZXItPm5vZGUo
KSwgb2Zmc2V0KTsKIAogICAgICAgICBpZiAoKHAuaXNDYW5kaWRhdGUoKSAmJiBwLmRvd25zdHJl
YW0oKSAhPSBkb3duc3RyZWFtU3RhcnQpIHx8IHAuYXRTdGFydE9mVHJlZSgpIHx8IHAuYXRFbmRP
ZlRyZWUoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA3MTU5MSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTIsMTEgKzQxMiwxOCBAQAogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25G
b3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CisgICAgcmV0dXJuIHBvc2l0aW9uRm9y
UG9pbnRBZGRpbmdNb2RpZmllcihwb2ludCwgMCk7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBSZW5k
ZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50QWRkaW5nTW9kaWZpZXIoY29uc3QgSW50UG9pbnQmIHBv
aW50LCB1bnNpZ25lZCBtb2RpZmllcikKK3sKICAgICBpZiAoIWZpcnN0VGV4dEJveCgpIHx8IHRl
eHRMZW5ndGgoKSA9PSAwKQogICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAs
IERPV05TVFJFQU0pOwogCiAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZm9yIHRoZSBwb3NpdGlvbiwg
c2luY2UgdGhpcyB3aWxsIHRha2UgcnRsIHRleHQgaW50byBhY2NvdW50LgogICAgIGludCBvZmZz
ZXQ7CisgICAgCisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBuZWVkIHRvIAogCiAgICAgaW50
IHBvaW50TGluZURpcmVjdGlvbiA9IGZpcnN0VGV4dEJveCgpLT5pc0hvcml6b250YWwoKSA/IHBv
aW50LngoKSA6IHBvaW50LnkoKTsKICAgICBpbnQgcG9pbnRCbG9ja0RpcmVjdGlvbiA9IGZpcnN0
VGV4dEJveCgpLT5pc0hvcml6b250YWwoKSA/IHBvaW50LnkoKSA6IHBvaW50LngoKTsKQEAgLTQy
NiwxMyArNDMzLDEzIEBACiAgICAgICAgIC8vIGF0IHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGZp
cnN0IGxpbmUgb3IgYWJvdmUKICAgICAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMgdG8g
dGhlIGxlZnQgb2YgdGhlIGZpcnN0IHRleHQgYm94IGxlZnQgZWRnZQogICAgICAgICBvZmZzZXQg
PSBmaXJzdFRleHRCb3goKS0+b2Zmc2V0Rm9yUG9zaXRpb24ocG9pbnRMaW5lRGlyZWN0aW9uKTsK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQgKyBmaXJzdFRleHRC
b3goKS0+c3RhcnQoKSwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxl
UG9zaXRpb24ob2Zmc2V0ICsgbW9kaWZpZXIgKyBmaXJzdFRleHRCb3goKS0+c3RhcnQoKSwgRE9X
TlNUUkVBTSk7CiAgICAgfQogICAgIGlmIChsYXN0VGV4dEJveCgpICYmIHBvaW50QmxvY2tEaXJl
Y3Rpb24gPj0gbGFzdFRleHRCb3goKS0+cm9vdCgpLT5zZWxlY3Rpb25Ub3AoKSAmJiBwb2ludExp
bmVEaXJlY3Rpb24gPj0gbGFzdFRleHRCb3goKS0+bG9naWNhbFJpZ2h0KCkpIHsKICAgICAgICAg
Ly8gYXQgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGFzdCBsaW5lIG9yIGJlbG93CiAgICAgICAg
IC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSByaWdodCBvZiB0aGUgbGFzdCB0ZXh0
IGJveCByaWdodCBlZGdlCiAgICAgICAgIG9mZnNldCA9IGxhc3RUZXh0Qm94KCktPm9mZnNldEZv
clBvc2l0aW9uKHBvaW50TGluZURpcmVjdGlvbik7Ci0gICAgICAgIHJldHVybiBjcmVhdGVWaXNp
YmxlUG9zaXRpb24ob2Zmc2V0ICsgbGFzdFRleHRCb3goKS0+c3RhcnQoKSwgVlBfVVBTVFJFQU1f
SUZfUE9TU0lCTEUpOworICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNl
dCArIG1vZGlmaWVyICsgbGFzdFRleHRCb3goKS0+c3RhcnQoKSwgVlBfVVBTVFJFQU1fSUZfUE9T
U0lCTEUpOwogICAgIH0KIAogICAgIElubGluZVRleHRCb3gqIGxhc3RCb3hBYm92ZSA9IDA7CkBA
IC00NDgsMjkgKzQ1NSwyOSBAQAogICAgICAgICAgICAgICAgIGlmIChwb2ludExpbmVEaXJlY3Rp
b24gPT0gYm94LT5sb2dpY2FsTGVmdCgpKQogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgeCBj
b29yZGluYXRlIGlzIGVxdWFsIHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhpcyBib3gKICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIGFmZmluaXR5IG11c3QgYmUgZG93bnN0cmVhbSBzbyB0aGUgcG9z
aXRpb24gZG9lc24ndCBqdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIGxpbmUKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQgKyBib3gtPnN0YXJ0
KCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJs
ZVBvc2l0aW9uKG9mZnNldCArIG1vZGlmaWVyICsgYm94LT5zdGFydCgpLCBET1dOU1RSRUFNKTsK
IAogICAgICAgICAgICAgICAgIGlmIChwb2ludExpbmVEaXJlY3Rpb24gPCBib3gtPmxvZ2ljYWxS
aWdodCgpKQogICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0
byB0aGUgbGVmdCBvZiB0aGUgcmlnaHQgZWRnZSBvZiB0aGlzIGJveAogICAgICAgICAgICAgICAg
ICAgICAvLyBjaGVjayB0byBzZWUgaWYgcG9zaXRpb24gZ29lcyBpbiB0aGlzIGJveAotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNldCArIGJveC0+
c3RhcnQoKSwgb2Zmc2V0ID4gMCA/IFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFIDogRE9XTlNUUkVB
TSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24ob2Zm
c2V0ICsgbW9kaWZpZXIgKyBib3gtPnN0YXJ0KCksIG9mZnNldCA+IDAgPyBWUF9VUFNUUkVBTV9J
Rl9QT1NTSUJMRSA6IERPV05TVFJFQU0pOwogCiAgICAgICAgICAgICAgICAgaWYgKCFib3gtPnBy
ZXZPbkxpbmUoKSAmJiBwb2ludExpbmVEaXJlY3Rpb24gPCBib3gtPmxvZ2ljYWxMZWZ0KCkpCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGJveCBpcyBmaXJzdCBvbiBsaW5lCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJz
dCB0ZXh0IGJveCBsZWZ0IGVkZ2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZp
c2libGVQb3NpdGlvbihvZmZzZXQgKyBib3gtPnN0YXJ0KCksIERPV05TVFJFQU0pOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNldCArIG1vZGlm
aWVyICsgYm94LT5zdGFydCgpLCBET1dOU1RSRUFNKTsKIAogICAgICAgICAgICAgICAgIGlmICgh
Ym94LT5uZXh0T25MaW5lKCkpCiAgICAgICAgICAgICAgICAgICAgIC8vIGJveCBpcyBsYXN0IG9u
IGxpbmUKICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMgdG8g
dGhlIHJpZ2h0IG9mIHRoZSBsYXN0IHRleHQgYm94IHJpZ2h0IGVkZ2UKICAgICAgICAgICAgICAg
ICAgICAgLy8gZ2VuZXJhdGUgVmlzaWJsZVBvc2l0aW9uLCB1c2UgVVBTVFJFQU0gYWZmaW5pdHkg
aWYgcG9zc2libGUKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3Np
dGlvbihvZmZzZXQgKyBib3gtPnN0YXJ0KCksIG9mZnNldCA+IDAgPyBWUF9VUFNUUkVBTV9JRl9Q
T1NTSUJMRSA6IERPV05TVFJFQU0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
VmlzaWJsZVBvc2l0aW9uKG9mZnNldCArIG1vZGlmaWVyICsgYm94LT5zdGFydCgpLCBvZmZzZXQg
PiAwID8gVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUgOiBET1dOU1RSRUFNKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGxhc3RCb3hBYm92ZSA9IGJveDsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24obGFzdEJveEFib3ZlID8gbGFzdEJveEFi
b3ZlLT5zdGFydCgpICsgbGFzdEJveEFib3ZlLT5sZW4oKSA6IDAsIERPV05TVFJFQU0pOworICAg
IHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24obGFzdEJveEFib3ZlID8gbGFzdEJveEFib3Zl
LT5zdGFydCgpICsgbGFzdEJveEFib3ZlLT5sZW4oKSArIG1vZGlmaWVyIDogbW9kaWZpZXIsIERP
V05TVFJFQU0pOwogfQogCiBJbnRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KElubGlu
ZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZM
aW5lKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCShyZXZp
c2lvbiA3MTU5MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIlJlbmRlckJsb2Nr
LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDcgKzU4LDI1IEBACiAgICAgICAgIHJldHVybiAw
OwogICAgIHJldHVybiByZXN1bHQtPnN1YnN0cmluZyhzdGFydCgpLCBlbmQoKSk7CiB9Ci0KKyAg
ICAKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0RnJhZ21lbnQ6OnBvc2l0aW9uRm9yUG9pbnQo
Y29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIGlmIChtX2ZpcnN0TGV0dGVyICYmIG1fZmly
c3RMZXR0ZXItPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAvL0ZJWE1FOiB0aGlzIHNvbHV0aW9u
IGlzIHNsb3cKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uSW5GaXJzdExldHRlciA9
IG1fZmlyc3RMZXR0ZXItPmZpcnN0Q2hpbGQoKS0+cG9zaXRpb25Gb3JQb2ludChwb2ludCk7Cisg
ICAgICAgIGlmIChwb3NpdGlvbkluRmlyc3RMZXR0ZXIuZGVlcEVxdWl2YWxlbnQoKS5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSAhPSAoaW50KSBtX3N0YXJ0KQorICAgICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uSW5GaXJzdExldHRlcjsKKyAgICB9CisgICAgcmV0dXJuIFJlbmRlclRleHQ6OnBvc2l0
aW9uRm9yUG9pbnRBZGRpbmdNb2RpZmllcihwb2ludCwgbV9zdGFydCk7Cit9CisgICAgCitJbnRS
ZWN0IFJlbmRlclRleHRGcmFnbWVudDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVC
b3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCit7CisgICAg
aWYgKGNhcmV0T2Zmc2V0IDwgKGludCkgbV9zdGFydCAmJiBtX2ZpcnN0TGV0dGVyICYmIG1fZmly
c3RMZXR0ZXItPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIG1fZmlyc3RMZXR0ZXItPmZp
cnN0Q2hpbGQoKS0+bG9jYWxDYXJldFJlY3QoaW5saW5lQm94LCBjYXJldE9mZnNldCwgZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lKTsKKyAgICByZXR1cm4gUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3Qo
aW5saW5lQm94LCBjYXJldE9mZnNldCAtIG1fc3RhcnQsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7
Cit9CisgICAgCiB2b2lkIFJlbmRlclRleHRGcmFnbWVudDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBSZW5k
ZXJUZXh0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaAkocmV2aXNpb24gNzE1OTEpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
MTAgQEAKICAgICBTdHJpbmdJbXBsKiBjb250ZW50U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZW50U3RyaW5nLmdldCgpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IG9yaWdpbmFsVGV4dCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9z
aXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOworCisgICAgdmlydHVhbCBJbnRSZWN0IGxv
Y2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUgPSAwKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDcxNTkxKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDggQEAK
ICAgICBib29sIGlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCk7CiAgICAgCiBwcm90ZWN0ZWQ6
CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRBZGRpbmdNb2RpZmllcihjb25z
dCBJbnRQb2ludCYsIHVuc2lnbmVkKTsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxs
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>