<?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>67634</bug_id>
          
          <creation_ts>2011-09-06 01:47:27 -0700</creation_ts>
          <short_desc>De-virtualize styleForRenderer()</short_desc>
          <delta_ts>2011-09-07 03:15:48 -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>DOM</component>
          <version>528+ (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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>hyatt</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>462426</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-06 01:47:27 -0700</bug_when>
    <thetext>This has performance and code clarity benefits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462429</commentid>
    <comment_count>1</comment_count>
      <attachid>106399</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-06 02:04:57 -0700</bug_when>
    <thetext>Created attachment 106399
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462520</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-06 08:03:27 -0700</bug_when>
    <thetext>What speedups did you see?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462533</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-06 08:25:57 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; What speedups did you see?

Together with the earlier recalcStyle() de-virtualization, this seems reduce self-time in recalcStyle() by ~30%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462553</commentid>
    <comment_count>4</comment_count>
      <attachid>106399</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-09-06 08:42:14 -0700</bug_when>
    <thetext>Comment on attachment 106399
patch

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

I am pretty sure cutomStyleForRenderer is killable too. It&apos;s definitely possible to kill custom style resolution on TextControlInnerElements. I should look at that.

&gt; Source/WebCore/dom/NodeRenderingContext.cpp:303
&gt; +    Element* element = node-&gt;isElementNode() ? toElement(node) : 0;
&gt; +    if (element)
&gt; +        m_context.setStyle(element-&gt;styleForRenderer());
&gt; +    else if (RenderObject* parentRenderer = m_context.parentRenderer())
&gt; +        m_context.setStyle(parentRenderer-&gt;style());

This is much cleaner, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462673</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-06 11:11:55 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I am pretty sure cutomStyleForRenderer is killable too. It&apos;s definitely possible to kill custom style resolution on TextControlInnerElements. I should look at that.

Yeah, it mostly looks like bs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463266</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-07 03:15:48 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/94659</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106399</attachid>
            <date>2011-09-06 02:04:57 -0700</date>
            <delta_ts>2011-09-06 08:42:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>devirtualize-styleforrenderer-1.patch</filename>
            <type>text/plain</type>
            <size>18851</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NTU4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDktMDYgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NzYzNAorICAgICAgICBEZS12aXJ0dWFsaXplIHN0eWxlRm9y
UmVuZGVyZXIoKQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBoYXMgcGVyZm9ybWFuY2UgYW5kIGNvZGUgY2xhcml0eSBiZW5lZml0
cy4KKworICAgICAgICAtIG1vdmUgc3R5bGVGb3JSZW5kZXJlciBmcm9tIE5vZGUgdG8gRWxlbWVu
dAorICAgICAgICAtIGdldCByaWQgb2YgdGhlIG5vdyB1bm5lY2Vzc2FyeSBOb2RlUmVuZGVyaW5n
Q29udGV4dCBwYXJhbWV0ZXIKKyAgICAgICAgLSBkZS12aXJ0dWFsaXplLCBhZGQgdmlydHVhbCBj
dXN0b21TdHlsZUZvclJlbmRlcmVyKCkKKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6c3R5bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6Omhhc0N1c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OnNldEhhc0N1c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6Omhhc0N1c3RvbVN0eWxlRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6c2V0SGFzQ3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6CisgICAgICAgIAorICAgICAg
ICAgICAgTW92ZSBzdHlsZUZvclJlbmRlcmVyLCBhZGQgY3VzdG9tU3R5bGVGb3JSZW5kZXJlciwg
YWRkIGEgYml0LgorICAgICAgICAKKyAgICAgICAgKiBkb20vTm9kZVJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmVyRmFjdG9yeTo6Y3JlYXRlUmVuZGVy
ZXJBbmRTdHlsZSk6IAorICAgICAgICAKKyAgICAgICAgICAgIEhhbmRsZSBub24tZWxlbWVudCBj
YXNlIHNlcGFyYXRlbHkgc2luY2Ugc3R5bGVGb3JSZW5kZXJlciB3YXMgbW92ZWQgZnJvbSBOb2Rl
IHRvIEVsZW1lbnQuCisKKyAgICAgICAgKiBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6SFRNTE5vU2NyaXB0RWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50OjpjdXN0b21TdHlsZUZv
clJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaDoKKyAgICAg
ICAgCisgICAgICAgICAgICBNb3ZlIGEgc3RyYW5nZSBYSFRNTE1QIHNwZWNpYWwgY2FzZSB0byB3
aGVyZSBpdCBiZWxvbmdzLgorCisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6OmF0dGFjaCk6CisgICAg
ICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudDo6YXR0YWNoKToKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6dGV4dFdpdGhEaXJlY3Rp
b24pOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbElubmVyRWxlbWVudDo6VGV4dENvbnRyb2xJ
bm5lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6
OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJ
bm5lclRleHRFbGVtZW50OjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRl
cmVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudDo6Y3VzdG9tU3R5bGVG
b3JSZW5kZXJlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVu
dHMuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50OjpTVkdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmN1
c3RvbVN0eWxlRm9yUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAg
ICAgIAorICAgICAgICAgICAgQWRvcHQgY3VzdG9tU3R5bGVGb3JSZW5kZXJlcigpLgorCiAyMDEx
LTA5LTA2ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV0dXJu
IHRvIHRyYW5zZm9ybSBtdWx0aXBsaWNhdGlvbjogbW90aW9uIHRyYW5zZm9ybSAqIG90aGVyIHRy
YW5zZm9ybXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDk0NTIxKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ2LDYg
KzEwNDYsMTkgQEAgYm9vbCBFbGVtZW50Ojpwc2V1ZG9TdHlsZUNhY2hlSXNJbnZhbGlkKAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gRWxlbWVudDo6Y3Vz
dG9tU3R5bGVGb3JSZW5kZXJlcigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IAorICAg
IHJldHVybiAwOyAKK30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gRWxlbWVudDo6c3R5bGVG
b3JSZW5kZXJlcigpCit7CisgICAgaWYgKGhhc0N1c3RvbVN0eWxlRm9yUmVuZGVyZXIoKSkKKyAg
ICAgICAgcmV0dXJuIGN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoKTsKKyAgICByZXR1cm4gZG9jdW1l
bnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KHRoaXMpLCAwLCB0cnVlLyphbGxvd1NoYXJpbmcqLyk7Cit9CisKIHZvaWQgRWxlbWVudDo6
cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQogewogICAgIGlmIChoYXNDdXN0b21XaWxs
T3JEaWRSZWNhbGNTdHlsZSgpKSB7CkBAIC0xMDY3LDcgKzEwODAsNyBAQCB2b2lkIEVsZW1lbnQ6
OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGhh
c1BhcmVudFN0eWxlICYmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBuZWVkc1N0eWxlUmVjYWxjKCkp
KSB7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBzdHlsZUZvclJlbmRl
cmVyKE5vZGVSZW5kZXJpbmdDb250ZXh0KHRoaXMsIDApKTsKKyAgICAgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBuZXdTdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIoKTsKICAgICAgICAgU3R5bGVDaGFu
Z2UgY2ggPSBkaWZmKGN1cnJlbnRTdHlsZS5nZXQoKSwgbmV3U3R5bGUuZ2V0KCkpOwogICAgICAg
ICBpZiAoY2ggPT0gRGV0YWNoIHx8ICFjdXJyZW50U3R5bGUpIHsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGUgc3R5bGUgZ2V0cyBjb21wdXRlZCB0d2ljZSBieSBjYWxsaW5nIGF0dGFjaC4gV2Ug
Y291bGQgZG8gYmV0dGVyIGlmIHdlIHBhc3NlZCB0aGUgc3R5bGUgYWxvbmcuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmgJKHJldmlzaW9uIDk0NTIxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDYgKzM1OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGNvbnN0OwogCiAgICAgUGFzc1JlZlB0
cjxXZWJLaXRBbmltYXRpb25MaXN0PiB3ZWJraXRHZXRBbmltYXRpb25zKCkgY29uc3Q7CisgICAg
CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5kZXJlcigpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKQEAgLTM3NSw2ICszNzcsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRC
eVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5n
ZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKICAgICB2aXJ0dWFsIGJvb2wgd2lsbFJl
Y2FsY1N0eWxlKFN0eWxlQ2hhbmdlKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKSB7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IGN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoKTsKIAogICAgIC8vIFRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiBFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKCkgY2FsbHMgdGhlIGZvbGxv
d2luZyB0d28gZnVuY3Rpb25zLgogICAgIC8vIFRoZXkgYXJlIHNlcGFyYXRlZCB0byBhbGxvdyBh
IGRpZmZlcmVudCBmbG93IG9mIGNvbnRyb2wgaW4gU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZCgpLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gOTQ1MjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjQsMjEgKzE0NjQsNiBA
QCB2b2lkIE5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKQogICAgIE5vZGVSZW5kZXJlckZh
Y3RvcnkodGhpcykuY3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpOwogfQogCi1QYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBOb2RlOjpzdHlsZUZvclJlbmRlcmVyKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250
ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChpc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgYm9v
bCBhbGxvd1NoYXJpbmcgPSB0cnVlOwotI2lmIEVOQUJMRShYSFRNTE1QKQotICAgICAgICAvLyBu
b3NjcmlwdCBuZWVkcyB0aGUgZGlzcGxheSBwcm9wZXJ0eSBwcm90ZWN0ZWQgLSBpdCdzIGEgc3Bl
Y2lhbCBjYXNlCi0gICAgICAgIGFsbG93U2hhcmluZyA9IGxvY2FsTmFtZSgpICE9IEhUTUxOYW1l
czo6bm9zY3JpcHRUYWcubG9jYWxOYW1lKCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1l
bnQqPih0aGlzKSwgMCwgYWxsb3dTaGFyaW5nKTsKLSAgICB9Ci0gICAgaWYgKFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBjb250ZXh0LnBhcmVudFJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBy
ZW5kZXJlci0+c3R5bGUoKTsKLSAgICByZXR1cm4gMDsKLX0KLQogYm9vbCBOb2RlOjpyZW5kZXJl
cklzTmVlZGVkKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJl
dHVybiAoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcykgfHwgKGNvbnRleHQu
c3R5bGUoKS0+ZGlzcGxheSgpICE9IE5PTkUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA5
NDUyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
NSw3ICs0NTUsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOwog
ICAgIHZvaWQgY3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5kZXJlcihjb25zdCBOb2RlUmVuZGVyaW5nQ29udGV4
dCYpOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IE5vZGVSZW5kZXJp
bmdDb250ZXh0Jik7CiAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIo
Tm9kZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCog
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwpAQCAtNjE1LDcgKzYx
NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIFN0eWxlQ2hhbmdlTWFzayA9IDEgPDwgbm9kZVN0eWxl
Q2hhbmdlU2hpZnQgfCAxIDw8IChub2RlU3R5bGVDaGFuZ2VTaGlmdCArIDEpLAogCiAgICAgICAg
IFNlbGZPckFuY2VzdG9ySGFzRGlyQXV0b0ZsYWcgPSAxIDw8IDI3LAotICAgICAgICBIYXNDdXN0
b21XaWxsT3JEaWRSZWNhbGNTdHlsZSA9IDEgPDwgMjgsCisgICAgICAgIEhhc0N1c3RvbVdpbGxP
ckRpZFJlY2FsY1N0eWxlRmxhZyA9IDEgPDwgMjgsCisgICAgICAgIEhhc0N1c3RvbVN0eWxlRm9y
UmVuZGVyZXJGbGFnID0gMSA8PCAyOSwKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIERlZmF1
bHROb2RlRmxhZ3MgPSBJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyB8IElzU3R5bGVBdHRy
aWJ1dGVWYWxpZEZsYWcgfCBBcmVTVkdBdHRyaWJ1dGVzVmFsaWRGbGFnCkBAIC02MjQsNyArNjI0
LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIH07CiAKLSAgICAvLyAzIGJpdHMgcmVtYWluaW5n
CisgICAgLy8gMiBiaXRzIHJlbWFpbmluZwogCiAgICAgYm9vbCBnZXRGbGFnKE5vZGVGbGFncyBt
YXNrKSBjb25zdCB7IHJldHVybiBtX25vZGVGbGFncyAmIG1hc2s7IH0KICAgICB2b2lkIHNldEZs
YWcoYm9vbCBmLCBOb2RlRmxhZ3MgbWFzaykgY29uc3QgeyBtX25vZGVGbGFncyA9IChtX25vZGVG
bGFncyAmIH5tYXNrKSB8ICgtKGludDMyX3QpZiAmIG1hc2spOyB9IApAQCAtNjU3LDggKzY1Nywx
MSBAQCBwcm90ZWN0ZWQ6CiAgICAgTm9kZVJhcmVEYXRhKiBlbnN1cmVSYXJlRGF0YSgpOwogICAg
IHZvaWQgY2xlYXJSYXJlRGF0YSgpOwogCi0gICAgYm9vbCBoYXNDdXN0b21XaWxsT3JEaWRSZWNh
bGNTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxj
U3R5bGUpOyB9Ci0gICAgdm9pZCBzZXRIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSgpIHsg
c2V0RmxhZyh0cnVlLCBIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSk7IH0KKyAgICBib29s
IGhhc0N1c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxlKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhI
YXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZUZsYWcpOyB9CisgICAgdm9pZCBzZXRIYXNDdXN0
b21XaWxsT3JEaWRSZWNhbGNTdHlsZSgpIHsgc2V0RmxhZyh0cnVlLCBIYXNDdXN0b21XaWxsT3JE
aWRSZWNhbGNTdHlsZUZsYWcpOyB9CisgICAgCisgICAgYm9vbCBoYXNDdXN0b21TdHlsZUZvclJl
bmRlcmVyKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhIYXNDdXN0b21TdHlsZUZvclJlbmRlcmVy
RmxhZyk7IH0KKyAgICB2b2lkIHNldEhhc0N1c3RvbVN0eWxlRm9yUmVuZGVyZXIoKSB7IHNldEZs
YWcodHJ1ZSwgSGFzQ3VzdG9tU3R5bGVGb3JSZW5kZXJlckZsYWcpOyB9IAogCiBwcml2YXRlOgog
ICAgIC8vIERvIG5vdCB1c2UgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoZSBkb2N1bWVudCBvZiBh
IG5vZGUgdW50aWwgYWZ0ZXIgdGhlIG5vZGUgaGFzIGJlZW4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTQ1MjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTYsMTMgKzI5NiwxNSBAQCBSZW5kZXJPYmplY3QqIE5vZGVSZW5kZXJlckZhY3Rvcnk6OmNy
ZWF0CiAgICAgaWYgKCFtX2NvbnRleHQuc2hvdWxkQ3JlYXRlUmVuZGVyZXIoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBtX2NvbnRleHQuc2V0U3R5bGUobm9kZS0+c3R5bGVGb3JSZW5kZXJl
cihtX2NvbnRleHQpKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpID8gdG9FbGVtZW50KG5vZGUpIDogMDsKKyAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgbV9j
b250ZXh0LnNldFN0eWxlKGVsZW1lbnQtPnN0eWxlRm9yUmVuZGVyZXIoKSk7CisgICAgZWxzZSBp
ZiAoUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IG1fY29udGV4dC5wYXJlbnRSZW5kZXJl
cigpKQorICAgICAgICBtX2NvbnRleHQuc2V0U3R5bGUocGFyZW50UmVuZGVyZXItPnN0eWxlKCkp
OworCiAgICAgaWYgKCFub2RlLT5yZW5kZXJlcklzTmVlZGVkKG1fY29udGV4dCkpIHsKLSAgICAg
ICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICAgICAgICAgIGlmIChtX2NvbnRleHQuc3R5bGUo
KS0+YWZmZWN0ZWRCeUVtcHR5KCkpCi0gICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0U3R5bGVB
ZmZlY3RlZEJ5RW1wdHkoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoZWxlbWVudCAmJiBtX2Nv
bnRleHQuc3R5bGUoKS0+YWZmZWN0ZWRCeUVtcHR5KCkpCisgICAgICAgICAgICBlbGVtZW50LT5z
ZXRTdHlsZUFmZmVjdGVkQnlFbXB0eSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNp
b24gOTQ1MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIGlubGluZSBIVE1MTm9TY3JpcHRFbGVt
ZW50OjpIVE1MTm9TY3JpcHQKICAgICBBU1NFUlQoaGFzVGFnTmFtZShub3NjcmlwdFRhZykpOwog
CiAgICAgc2V0SGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGUoKTsKKyNpZiBFTkFCTEUoWEhU
TUxNUCkKKyAgICBzZXRIYXNDdXN0b21TdHlsZUZvclJlbmRlcmVyKCk7CisjZW5kaWYKIH0KIAog
UGFzc1JlZlB0cjxIVE1MTm9TY3JpcHRFbGVtZW50PiBIVE1MTm9TY3JpcHRFbGVtZW50OjpjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAt
NzUsNiArNzgsMTUgQEAgYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bAog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CisgICAgCisjaWYgRU5BQkxFKFhIVE1MTVApCitQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBIVE1MTm9TY3JpcHRFbGVtZW50OjpjdXN0b21TdHlsZUZv
clJlbmRlcmVyKCkKK3sKKyAgICAvLyBub3NjcmlwdCBuZWVkcyB0aGUgZGlzcGxheSBwcm9wZXJ0
eSBwcm90ZWN0ZWQgLSBpdCdzIGEgc3BlY2lhbCBjYXNlCisgICAgLy8gRklYTUU6IFdoeT8KKyAg
ICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQoc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KHRoaXMpLCAwLCBmYWxzZS8qYWxsb3dTaGFyaW5nKi8pOworfQor
I2VuZGlmCiAKIGJvb2wgSFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5k
ZXJlcihOb2RlKikgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5vU2Ny
aXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5vU2Ny
aXB0RWxlbWVudC5oCShyZXZpc2lvbiA5NDUyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE5vU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBib29sIHdpbGxSZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CiAgICAg
dmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0
JikgeyAgcmV0dXJuIHRydWU7IH0KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IGN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoKTsKKyNlbmRpZgog
fTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3Jv
dXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRH
cm91cEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDUyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAg
dm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpyZWNhbGNTZWxlY3RPcAogdm9pZCBIVE1MT3B0R3Jv
dXBFbGVtZW50OjphdHRhY2goKQogewogICAgIGlmIChwYXJlbnROb2RlKCktPnJlbmRlclN0eWxl
KCkpCi0gICAgICAgIHNldFJlbmRlclN0eWxlKHN0eWxlRm9yUmVuZGVyZXIoTm9kZVJlbmRlcmlu
Z0NvbnRleHQodGhpcywgMCkpKTsKKyAgICAgICAgc2V0UmVuZGVyU3R5bGUoc3R5bGVGb3JSZW5k
ZXJlcigpKTsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdHRhY2goKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDk0
NTIxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgUGFzc1JlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4g
SFRNTE9wdGlvbgogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6YXR0YWNoKCkKIHsKICAgICBpZiAo
cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpKQotICAgICAgICBzZXRSZW5kZXJTdHlsZShzdHls
ZUZvclJlbmRlcmVyKE5vZGVSZW5kZXJpbmdDb250ZXh0KHRoaXMsIDApKSk7CisgICAgICAgIHNl
dFJlbmRlclN0eWxlKHN0eWxlRm9yUmVuZGVyZXIoKSk7CiAgICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6YXR0YWNoKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVF
bGVtZW50LmNwcAkocmV2aXNpb24gOTQ1MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
aXRsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIFN0cmluZ1dp
dGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxlbWVudDo6dGUKICAgICBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiA9IExUUjsKICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gY29tcHV0ZWRTdHlsZSgp
KQogICAgICAgICBkaXJlY3Rpb24gPSBzdHlsZS0+ZGlyZWN0aW9uKCk7Ci0gICAgZWxzZSBpZiAo
UmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIoTm9kZVJlbmRlcmlu
Z0NvbnRleHQodGhpcywgMCkpKQorICAgIGVsc2UgaWYgKFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5
bGUgPSBzdHlsZUZvclJlbmRlcmVyKCkpCiAgICAgICAgIGRpcmVjdGlvbiA9IHN0eWxlLT5kaXJl
Y3Rpb24oKTsKICAgICByZXR1cm4gU3RyaW5nV2l0aERpcmVjdGlvbih0ZXh0KCksIGRpcmVjdGlv
bik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHJldmlzaW9uIDk0NTIxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNiArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogVGV4dENv
bnRyb2xJbm5lckVsZW1lbnQ6OlRleHRDb250cm9sSW5uZXJFbGVtZW50KERvY3VtZW50KiBkb2N1
bWVudCkKICAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgZG9jdW1lbnQpCiB7CisgICAgc2V0
SGFzQ3VzdG9tU3R5bGVGb3JSZW5kZXJlcigpOwogfQogCiBQYXNzUmVmUHRyPFRleHRDb250cm9s
SW5uZXJFbGVtZW50PiBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCkKQEAgLTU4LDcgKzU5LDcgQEAgUGFzc1JlZlB0cjxUZXh0Q29udHJvbElubmVyRWxl
bWVudD4gVGV4dAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dENvbnRyb2xJbm5lckVsZW1l
bnQoZG9jdW1lbnQpKTsKIH0KIAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnQ6OnN0eWxlRm9yUmVuZGVyZXIoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRleHQm
KQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmN1c3Rv
bVN0eWxlRm9yUmVuZGVyZXIoKQogewogICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSog
cGFyZW50UmVuZGVyZXIgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShzaGFkb3dBbmNl
c3Rvck5vZGUoKS0+cmVuZGVyZXIoKSk7CiAgICAgcmV0dXJuIHBhcmVudFJlbmRlcmVyLT5jcmVh
dGVJbm5lckJsb2NrU3R5bGUocGFyZW50UmVuZGVyZXItPnN0eWxlKCkpOwpAQCAtNjksNiArNzAs
NyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBUZXh0Q29udHJvbElubmVyCiBpbmxpbmUgVGV4
dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KQogICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkK
IHsKKyAgICBzZXRIYXNDdXN0b21TdHlsZUZvclJlbmRlcmVyKCk7CiB9CiAKIFBhc3NSZWZQdHI8
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50PiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCkBAIC0xMDQsNyArMTA2LDcgQEAgUmVuZGVyT2Jq
ZWN0KiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbgogICAgIHJldHVybiBuZXcgKGFyZW5hKSBS
ZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sodGhpcywgbXVsdGlMaW5lKTsKIH0KIAotUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpzdHlsZUZvclJl
bmRlcmVyKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0JikKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcigp
CiB7CiAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHBhcmVudFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0
Q29udHJvbChzaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSk7CiAgICAgcmV0dXJuIHBh
cmVudFJlbmRlcmVyLT5jcmVhdGVJbm5lclRleHRTdHlsZShwYXJlbnRSZW5kZXJlci0+c3R5bGUo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxl
bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuaAkocmV2aXNpb24gOTQ1MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBUZXh0Q29udHJvbElubmVy
RWxlbWVudChEb2N1bWVudCopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGVGb3JSZW5kZXJlcihjb25zdCBOb2RlUmVuZGVyaW5nQ29udGV4dCYpOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3VzdG9tU3R5bGVGb3JSZW5kZXJlcigpOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBUZXh0
Q29udHJvbElubmVyVGV4dEVsZW1lbnQoRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5kZXJlcihjb25zdCBOb2Rl
UmVuZGVyaW5nQ29udGV4dCYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcigpOwogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNh
YmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAJKHJl
dmlzaW9uIDk0NTIxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dU
cmVlRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgU1ZH
U2hhZG93VHJlZVJvb3RFbGVtZW50OjpjbGVhclNWR1MKICAgICBzZXRQYXJlbnQoMCk7CiB9CiAK
LVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Ojpz
dHlsZUZvclJlbmRlcmVyKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0JikKK1Bhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50OjpjdXN0b21TdHlsZUZv
clJlbmRlcmVyKCkKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5z
dHlsZUZvckVsZW1lbnQodGhpcywgMCwgdHJ1ZS8qYWxsb3dTaGFyaW5nKi8pOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVt
ZW50cy5oCShyZXZpc2lvbiA5NDUyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAg
cHVibGljOgogICAgIGJvb2wgY29udGFpbmVyT2Zmc2V0Q2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGFpbmVyT2Zmc2V0Q2hhbmdlZDsgfQogICAgIHZvaWQgc2V0Q29udGFpbmVyT2Zmc2V0
Q2hhbmdlZChib29sIGNvbnRhaW5lck9mZnNldENoYW5nZWQpIHsgbV9jb250YWluZXJPZmZzZXRD
aGFuZ2VkID0gY29udGFpbmVyT2Zmc2V0Q2hhbmdlZDsgfQogCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclJlbmRlcmVyKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250
ZXh0Jik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjdXN0b21TdHlsZUZv
clJlbmRlcmVyKCk7CiAKIHByb3RlY3RlZDoKICAgICBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxl
bWVudChEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNp
b24gOTQ1MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDYgKzU4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFNWR0Vs
ZW1lbnQ6OlNWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvY3VtZW50KQogICAgIDogU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgQ3JlYXRl
U1ZHRWxlbWVudCkKIHsKKyAgICBzZXRIYXNDdXN0b21TdHlsZUZvclJlbmRlcmVyKCk7CiB9CiAK
IFBhc3NSZWZQdHI8U1ZHRWxlbWVudD4gU1ZHRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTQyNiwxMiArNDI3LDEyIEBA
IHZvaWQgU1ZHRWxlbWVudDo6c3luY2hyb25pemVTeXN0ZW1MYW5ndWEKICAgICBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4oY29udGV4dEVsZW1lbnQpLT5zeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFNWR0VsZW1lbnQ6OnN0eWxlRm9yUmVu
ZGVyZXIoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCitQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBTVkdFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVyKCkKIHsKICAgICBp
ZiAoY29ycmVzcG9uZGluZ0VsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGRvY3VtZW50KCktPnN0
eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KGNvcnJlc3BvbmRpbmdFbGVtZW50KCksIHBh
cmVudE5vZGUoKSA/IHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IDAsIGZhbHNl
LyphbGxvd1NoYXJpbmcqLyk7CiAKLSAgICByZXR1cm4gU3R5bGVkRWxlbWVudDo6c3R5bGVGb3JS
ZW5kZXJlcihjb250ZXh0KTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rvcigp
LT5zdHlsZUZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHRoaXMpLCAwLCB0cnVlKTsK
IH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiA5NDUyMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcg
Kzg5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGVkU1ZHQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUmVuZGVyZXIoY29uc3QgTm9kZVJlbmRlcmluZ0Nv
bnRleHQmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGN1c3RvbVN0eWxl
Rm9yUmVuZGVyZXIoKTsKIAogICAgIHN0YXRpYyB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRGZWF0
dXJlcyh2b2lkKiBjb250ZXh0RWxlbWVudCk7CiAgICAgc3RhdGljIHZvaWQgc3luY2hyb25pemVS
ZXF1aXJlZEV4dGVuc2lvbnModm9pZCogY29udGV4dEVsZW1lbnQpOwo=
</data>
<flag name="review"
          id="102821"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>