<?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>121822</bug_id>
          
          <creation_ts>2013-09-23 21:32:08 -0700</creation_ts>
          <short_desc>Move more style change code from RenderObject to RenderElement</short_desc>
          <delta_ts>2013-09-24 05:21:28 -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>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>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932421</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-23 21:32:08 -0700</bug_when>
    <thetext>Very little of it is needed for RenderText.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932422</commentid>
    <comment_count>1</comment_count>
      <attachid>212424</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-23 21:48:07 -0700</bug_when>
    <thetext>Created attachment 212424
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932434</commentid>
    <comment_count>2</comment_count>
      <attachid>212424</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-23 22:47:55 -0700</bug_when>
    <thetext>Comment on attachment 212424
patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +            RenderTexts are no longer registered as image clients. They don&apos;t need 

This sentence ends right in the middle of

&gt; Source/WebCore/rendering/RenderElement.h:36
&gt; +    virtual void setStyle(PassRefPtr&lt;RenderStyle&gt;);

I think you should mark this OVERRIDE, even though it’s &quot;= 0&quot; in the base class. Still useful to get an error if the function signatures don’t match. Like when we change from PassRefPtr to just RefPtr some day, if we do it wrong.

&gt; Source/WebCore/rendering/RenderElement.h:82
&gt; +    virtual void styleWillChange(StyleDifference, const RenderStyle*);
&gt; +    virtual void styleDidChange(StyleDifference, const RenderStyle*);

If not OVERRIDE then does this still need to be virtual? Do derived classes override this?

&gt; Source/WebCore/rendering/RenderElement.h:106
&gt; +    void updateFillImages(const FillLayer*, const FillLayer*);
&gt; +    void updateImage(StyleImage*, StyleImage*);
&gt; +#if ENABLE(CSS_SHAPES)
&gt; +    void updateShapeImage(const ShapeValue*, const ShapeValue*);
&gt; +#endif
&gt; +    StyleDifference adjustStyleDifference(StyleDifference, unsigned contextSensitiveProperties) const;

I’d like this better with a blank line after the #endif.

&gt; Source/WebCore/rendering/RenderText.cpp:203
&gt; +void RenderText::setStyle(PassRefPtr&lt;RenderStyle&gt; style)

Since RenderText objects inherit their style from their parents, isn’t there something even more efficient we can do?

&gt; Source/WebCore/rendering/RenderText.cpp:210
&gt; +    if (oldStyle.get())

Should not need a .get() here.

&gt; Source/WebCore/rendering/RenderText.h:154
&gt; +    virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);

Why is this still virtual, if it’s not an override? Are there classes derived from RenderText that override this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932496</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-24 04:44:48 -0700</bug_when>
    <thetext>&gt; This sentence ends right in the middle of

That&apos;s because I

&gt; I think you should mark this OVERRIDE, even though it’s &quot;= 0&quot; in the base class. Still useful to get an error if the function signatures don’t match. Like when we change from PassRefPtr to just RefPtr some day, if we do it wrong.

Yeah.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderElement.h:82
&gt; &gt; +    virtual void styleWillChange(StyleDifference, const RenderStyle*);
&gt; &gt; +    virtual void styleDidChange(StyleDifference, const RenderStyle*);
&gt; 
&gt; If not OVERRIDE then does this still need to be virtual? Do derived classes override this?

Yes, they have overrides.

&gt; Since RenderText objects inherit their style from their parents, isn’t there something even more efficient we can do?

The plan is to move m_style pointer to RenderElement and have RenderText just use the parent style. That will require a few more patches.

&gt; &gt; Source/WebCore/rendering/RenderText.h:154
&gt; &gt; +    virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
&gt; 
&gt; Why is this still virtual, if it’s not an override? Are there classes derived from RenderText that override this?

Surprisingly there are RenderText subclasses and there is an override for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932503</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-24 05:21:28 -0700</bug_when>
    <thetext>https://trac.webkit.org/r156325</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212424</attachid>
            <date>2013-09-23 21:48:07 -0700</date>
            <delta_ts>2013-09-23 22:47:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderelement-more-style.patch</filename>
            <type>text/plain</type>
            <size>27421</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjMxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEzLTA5LTIzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIG1vcmUgc3R5bGUgY2hh
bmdlIGNvZGUgZnJvbSBSZW5kZXJPYmplY3QgdG8gUmVuZGVyRWxlbWVudAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxODIyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp+UmVuZGVyRWxlbWVu
dCk6CisgICAgICAgIAorICAgICAgICAgICAgUmVuZGVyVGV4dHMgYXJlIG5vIGxvbmdlciByZWdp
c3RlcmVkIGFzIGltYWdlIGNsaWVudHMuIFRoZXkgZG9uJ3QgbmVlZCAKKworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRWxlbWVudDo6YWRqdXN0U3R5bGVEaWZmZXJlbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckVsZW1lbnQ6Omhhc0ltbWVkaWF0ZU5vbldoaXRlc3BhY2VUZXh0Q2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c2hvdWxkUmVwYWludEZvclN0eWxl
RGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp1cGRhdGVGaWxs
SW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnVwZGF0ZUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnVwZGF0ZVNoYXBlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c2V0U3R5bGUpOgorICAgICAgICAKKyAgICAg
ICAgICAgIE1vdmUgZnJvbSBSZW5kZXJPYmplY3QgYW5kIHJlbW92ZSB0aGUgdGV4dCBzcGVjaWZp
YyBiaXRzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphcmVuYURl
bGV0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAKKyAg
ICAgICAgICAgIFJlbW92ZSBzdHlsZVdpbGwvRGlkQ2hhbmdlIHdoaWNoIG1vdmUgdG8gc3ViY2xh
c3Nlcy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHQ6OnNldFN0eWxlKToKKyAgICAgICAgCisgICAgICAgICAgICBBZGQg
c2ltcGxlIHRleHQgc3BlY2lmaWMgc2V0U3R5bGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oOgorCiAyMDEzLTA5LTIzICBHdXJwcmVldCBLYXVyICA8ay5ndXJwcmVldEBzYW1z
dW5nLmNvbT4KIAogICAgICAgICBDU1MgVW5pdCB2aCwgdncsIHZtaW4gYW5kIHZtYXggaW4gYm94
LXNoYWRvdyBhcmUgbm90IGFwcGxpZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTYzMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDI3
IEBAIFJlbmRlckVsZW1lbnQ6OlJlbmRlckVsZW1lbnQoRWxlbWVudCogZWwKIAogUmVuZGVyRWxl
bWVudDo6flJlbmRlckVsZW1lbnQoKQogeworICAgIGlmIChtX3N0eWxlKSB7CisgICAgICAgIGZv
ciAoY29uc3QgRmlsbExheWVyKiBiZ0xheWVyID0gbV9zdHlsZS0+YmFja2dyb3VuZExheWVycygp
OyBiZ0xheWVyOyBiZ0xheWVyID0gYmdMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICBpZiAo
U3R5bGVJbWFnZSogYmFja2dyb3VuZEltYWdlID0gYmdMYXllci0+aW1hZ2UoKSkKKyAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBtX3N0eWxlLT5tYXNr
TGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsKKyAg
ICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBtYXNrSW1hZ2UgPSBtYXNrTGF5ZXItPmltYWdlKCkp
CisgICAgICAgICAgICAgICAgbWFza0ltYWdlLT5yZW1vdmVDbGllbnQodGhpcyk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoU3R5bGVJbWFnZSogYm9yZGVySW1hZ2UgPSBtX3N0eWxlLT5ib3Jk
ZXJJbWFnZSgpLmltYWdlKCkpCisgICAgICAgICAgICBib3JkZXJJbWFnZS0+cmVtb3ZlQ2xpZW50
KHRoaXMpOworCisgICAgICAgIGlmIChTdHlsZUltYWdlKiBtYXNrQm94SW1hZ2UgPSBtX3N0eWxl
LT5tYXNrQm94SW1hZ2UoKS5pbWFnZSgpKQorICAgICAgICAgICAgbWFza0JveEltYWdlLT5yZW1v
dmVDbGllbnQodGhpcyk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICAgICAgcmVtb3Zl
U2hhcGVJbWFnZUNsaWVudChtX3N0eWxlLT5zaGFwZUluc2lkZSgpKTsKKyNlbmRpZgorICAgIH0K
IH0KIAogUmVuZGVyRWxlbWVudCogUmVuZGVyRWxlbWVudDo6Y3JlYXRlRm9yKEVsZW1lbnQmIGVs
ZW1lbnQsIFJlbmRlclN0eWxlJiBzdHlsZSkKQEAgLTE1Miw2ICsxNzMsMTg2IEBAIFJlbmRlckVs
ZW1lbnQqIFJlbmRlckVsZW1lbnQ6OmNyZWF0ZUZvcigKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAorU3R5bGVEaWZmZXJlbmNlIFJlbmRlckVsZW1lbnQ6OmFkanVzdFN0eWxlRGlmZmVyZW5jZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgdW5zaWduZWQgY29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMp
IGNvbnN0Cit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIElmIHRy
YW5zZm9ybSBjaGFuZ2VkLCBhbmQgd2UgYXJlIG5vdCBjb21wb3NpdGVkLCBuZWVkIHRvIGRvIGEg
bGF5b3V0LgorICAgIGlmIChjb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyAmIENvbnRleHRTZW5z
aXRpdmVQcm9wZXJ0eVRyYW5zZm9ybSkgeworICAgICAgICAvLyBUZXh0IG5vZGVzIHNoYXJlIHN0
eWxlIHdpdGggdGhlaXIgcGFyZW50cyBidXQgdHJhbnNmb3JtcyBkb24ndCBhcHBseSB0byB0aGVt
LAorICAgICAgICAvLyBoZW5jZSB0aGUgIWlzVGV4dCgpIGNoZWNrLgorICAgICAgICAvLyBGSVhN
RTogd2hlbiB0cmFuc2Zvcm1zIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgZm9yIG92ZXJmbG93LCB3
ZSB3aWxsIG5lZWQgdG8gZG8gYSBsYXlvdXQuCisgICAgICAgIGlmICghaGFzTGF5ZXIoKSB8fCAh
dG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkg
eworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzZXQgYXQgbGVhc3QgU2ltcGxpZmllZExheW91
dCwgYnV0IGlmIFBvc2l0aW9uZWRNb3ZlbWVudE9ubHkgaXMgYWxyZWFkeSBzZXQKKyAgICAgICAg
ICAgIC8vIHRoZW4gd2UgYWN0dWFsbHkgbmVlZCBTaW1wbGlmaWVkTGF5b3V0QW5kUG9zaXRpb25l
ZE1vdmVtZW50LgorICAgICAgICAgICAgaWYgKCFoYXNMYXllcigpKQorICAgICAgICAgICAgICAg
IGRpZmYgPSBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7IC8vIEZJWE1FOiBEbyB0aGlzIGZvciBub3cg
c2luY2UgU2ltcGxpZmllZExheW91dCBjYW5ub3QgaGFuZGxlIHVwZGF0aW5nIGZsb2F0aW5nIG9i
amVjdHMgbGlzdHMuCisgICAgICAgICAgICBlbHNlIGlmIChkaWZmIDwgU3R5bGVEaWZmZXJlbmNl
TGF5b3V0UG9zaXRpb25lZE1vdmVtZW50T25seSkKKyAgICAgICAgICAgICAgICBkaWZmID0gU3R5
bGVEaWZmZXJlbmNlU2ltcGxpZmllZExheW91dDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRpZmYg
PCBTdHlsZURpZmZlcmVuY2VTaW1wbGlmaWVkTGF5b3V0KQorICAgICAgICAgICAgICAgIGRpZmYg
PSBTdHlsZURpZmZlcmVuY2VTaW1wbGlmaWVkTGF5b3V0QW5kUG9zaXRpb25lZE1vdmVtZW50Owor
ICAgICAgICB9IGVsc2UgaWYgKGRpZmYgPCBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxheWVy
KQorICAgICAgICAgICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXI7Cisg
ICAgfQorCisgICAgLy8gSWYgb3BhY2l0eSBjaGFuZ2VkLCBhbmQgd2UgYXJlIG5vdCBjb21wb3Np
dGVkLCBuZWVkIHRvIHJlcGFpbnQgKGFsc28KKyAgICAvLyBpZ25vcmluZyB0ZXh0IG5vZGVzKQor
ICAgIGlmIChjb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyAmIENvbnRleHRTZW5zaXRpdmVQcm9w
ZXJ0eU9wYWNpdHkpIHsKKyAgICAgICAgaWYgKCFoYXNMYXllcigpIHx8ICF0b1JlbmRlckxheWVy
TW9kZWxPYmplY3QodGhpcyktPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKQorICAgICAgICAgICAg
ZGlmZiA9IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnRMYXllcjsKKyAgICAgICAgZWxzZSBpZiAoZGlm
ZiA8IFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXIpCisgICAgICAgICAgICBkaWZmID0g
U3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVMYXllcjsKKyAgICB9CisgICAgCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorICAgIGlmICgoY29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMgJiBDb250
ZXh0U2Vuc2l0aXZlUHJvcGVydHlGaWx0ZXIpICYmIGhhc0xheWVyKCkpIHsKKyAgICAgICAgUmVu
ZGVyTGF5ZXIqIGxheWVyID0gdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigp
OworICAgICAgICBpZiAoIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSB8fCBsYXllci0+cGFpbnRzV2l0
aEZpbHRlcnMoKSkKKyAgICAgICAgICAgIGRpZmYgPSBTdHlsZURpZmZlcmVuY2VSZXBhaW50TGF5
ZXI7CisgICAgICAgIGVsc2UgaWYgKGRpZmYgPCBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxh
eWVyKQorICAgICAgICAgICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXI7
CisgICAgfQorI2VuZGlmCisgICAgCisgICAgLy8gVGhlIGFuc3dlciB0byByZXF1aXJlc0xheWVy
KCkgZm9yIHBsdWdpbnMsIGlmcmFtZXMsIGFuZCBjYW52YXMgY2FuIGNoYW5nZSB3aXRob3V0IHRo
ZSBhY3R1YWwKKyAgICAvLyBzdHlsZSBjaGFuZ2luZywgc2luY2UgaXQgZGVwZW5kcyBvbiB3aGV0
aGVyIHdlIGRlY2lkZSB0byBjb21wb3NpdGUgdGhlc2UgZWxlbWVudHMuIFdoZW4gdGhlCisgICAg
Ly8gbGF5ZXIgc3RhdHVzIG9mIG9uZSBvZiB0aGVzZSBlbGVtZW50cyBjaGFuZ2VzLCB3ZSBuZWVk
IHRvIGZvcmNlIGEgbGF5b3V0LgorICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUVxdWFs
ICYmIHN0eWxlKCkgJiYgaXNMYXllck1vZGVsT2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKGhhc0xh
eWVyKCkgIT0gdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5yZXF1aXJlc0xheWVyKCkp
CisgICAgICAgICAgICBkaWZmID0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OworICAgIH0KKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKTsKKyNlbmRpZgor
CisgICAgLy8gSWYgd2UgaGF2ZSBubyBsYXllcigpLCBqdXN0IHRyZWF0IGEgUmVwYWludExheWVy
IGhpbnQgYXMgYSBub3JtYWwgUmVwYWludC4KKyAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVu
Y2VSZXBhaW50TGF5ZXIgJiYgIWhhc0xheWVyKCkpCisgICAgICAgIGRpZmYgPSBTdHlsZURpZmZl
cmVuY2VSZXBhaW50OworCisgICAgcmV0dXJuIGRpZmY7Cit9CisKK2lubGluZSBib29sIFJlbmRl
ckVsZW1lbnQ6Omhhc0ltbWVkaWF0ZU5vbldoaXRlc3BhY2VUZXh0Q2hpbGQoKSBjb25zdAorewor
ICAgIGZvciAoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGZpcnN0Q2hpbGQoKTsgcmVu
ZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYg
KHJlbmRlcmVyLT5pc1RleHQoKSAmJiAhdG9SZW5kZXJUZXh0KHJlbmRlcmVyKS0+aXNBbGxDb2xs
YXBzaWJsZVdoaXRlc3BhY2UoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIFJlbmRlckVsZW1lbnQ6OnNob3VsZFJl
cGFpbnRGb3JTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlUmVwYWludCB8fCAoZGlmZiA9PSBTdHls
ZURpZmZlcmVuY2VSZXBhaW50SWZUZXh0ICYmIGhhc0ltbWVkaWF0ZU5vbldoaXRlc3BhY2VUZXh0
Q2hpbGQoKSk7Cit9CisKK3ZvaWQgUmVuZGVyRWxlbWVudDo6dXBkYXRlRmlsbEltYWdlcyhjb25z
dCBGaWxsTGF5ZXIqIG9sZExheWVycywgY29uc3QgRmlsbExheWVyKiBuZXdMYXllcnMpCit7Cisg
ICAgLy8gT3B0aW1pemUgdGhlIGNvbW1vbiBjYXNlCisgICAgaWYgKG9sZExheWVycyAmJiAhb2xk
TGF5ZXJzLT5uZXh0KCkgJiYgbmV3TGF5ZXJzICYmICFuZXdMYXllcnMtPm5leHQoKSAmJiAob2xk
TGF5ZXJzLT5pbWFnZSgpID09IG5ld0xheWVycy0+aW1hZ2UoKSkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBHbyB0aHJvdWdoIHRoZSBuZXcgbGF5ZXJzIGFuZCBhZGRDbGllbnRzIGZp
cnN0LCB0byBhdm9pZCByZW1vdmluZyBhbGwgY2xpZW50cyBvZiBhbiBpbWFnZS4KKyAgICBmb3Ig
KGNvbnN0IEZpbGxMYXllciogY3Vyck5ldyA9IG5ld0xheWVyczsgY3Vyck5ldzsgY3Vyck5ldyA9
IGN1cnJOZXctPm5leHQoKSkgeworICAgICAgICBpZiAoY3Vyck5ldy0+aW1hZ2UoKSkKKyAgICAg
ICAgICAgIGN1cnJOZXctPmltYWdlKCktPmFkZENsaWVudCh0aGlzKTsKKyAgICB9CisKKyAgICBm
b3IgKGNvbnN0IEZpbGxMYXllciogY3Vyck9sZCA9IG9sZExheWVyczsgY3Vyck9sZDsgY3Vyck9s
ZCA9IGN1cnJPbGQtPm5leHQoKSkgeworICAgICAgICBpZiAoY3Vyck9sZC0+aW1hZ2UoKSkKKyAg
ICAgICAgICAgIGN1cnJPbGQtPmltYWdlKCktPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICB9Cit9
CisKK3ZvaWQgUmVuZGVyRWxlbWVudDo6dXBkYXRlSW1hZ2UoU3R5bGVJbWFnZSogb2xkSW1hZ2Us
IFN0eWxlSW1hZ2UqIG5ld0ltYWdlKQoreworICAgIGlmIChvbGRJbWFnZSA9PSBuZXdJbWFnZSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChvbGRJbWFnZSkKKyAgICAgICAgb2xkSW1hZ2UtPnJl
bW92ZUNsaWVudCh0aGlzKTsKKyAgICBpZiAobmV3SW1hZ2UpCisgICAgICAgIG5ld0ltYWdlLT5h
ZGRDbGllbnQodGhpcyk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKK3ZvaWQgUmVuZGVy
RWxlbWVudDo6dXBkYXRlU2hhcGVJbWFnZShjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZVZhbHVl
LCBjb25zdCBTaGFwZVZhbHVlKiBuZXdTaGFwZVZhbHVlKQoreworICAgIGlmIChvbGRTaGFwZVZh
bHVlIHx8IG5ld1NoYXBlVmFsdWUpCisgICAgICAgIHVwZGF0ZUltYWdlKG9sZFNoYXBlVmFsdWUg
PyBvbGRTaGFwZVZhbHVlLT5pbWFnZSgpIDogMCwgbmV3U2hhcGVWYWx1ZSA/IG5ld1NoYXBlVmFs
dWUtPmltYWdlKCkgOiAwKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbmRlckVsZW1lbnQ6OnNldFN0
eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQoreworICAgIGlmIChtX3N0eWxlID09
IHN0eWxlKSB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICAgICAvLyBX
ZSBuZWVkIHRvIHJ1biB0aHJvdWdoIGFkanVzdFN0eWxlRGlmZmVyZW5jZSgpIGZvciBpZnJhbWVz
LCBwbHVnaW5zLCBhbmQgY2FudmFzIHNvCisgICAgICAgIC8vIHN0eWxlIHNoYXJpbmcgaXMgZGlz
YWJsZWQgZm9yIHRoZW0uIFRoYXQgc2hvdWxkIGVuc3VyZSB0aGF0IHdlIG5ldmVyIGhpdCB0aGlz
IGNvZGUgcGF0aC4KKyAgICAgICAgQVNTRVJUKCFpc1JlbmRlcklGcmFtZSgpICYmICFpc0VtYmVk
ZGVkT2JqZWN0KCkgJiYgIWlzQ2FudmFzKCkpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBTdHlsZURpZmZlcmVuY2UgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZUVxdWFsOwor
ICAgIHVuc2lnbmVkIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzID0gQ29udGV4dFNlbnNpdGl2
ZVByb3BlcnR5Tm9uZTsKKyAgICBpZiAobV9zdHlsZSkKKyAgICAgICAgZGlmZiA9IG1fc3R5bGUt
PmRpZmYoc3R5bGUuZ2V0KCksIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKTsKKworICAgIGRp
ZmYgPSBhZGp1c3RTdHlsZURpZmZlcmVuY2UoZGlmZiwgY29udGV4dFNlbnNpdGl2ZVByb3BlcnRp
ZXMpOworCisgICAgc3R5bGVXaWxsQ2hhbmdlKGRpZmYsIHN0eWxlLmdldCgpKTsKKyAgICAKKyAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9sZFN0eWxlID0gbV9zdHlsZS5yZWxlYXNlKCk7CisgICAg
c2V0U3R5bGVJbnRlcm5hbChzdHlsZSk7CisKKyAgICB1cGRhdGVGaWxsSW1hZ2VzKG9sZFN0eWxl
ID8gb2xkU3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5i
YWNrZ3JvdW5kTGF5ZXJzKCkgOiAwKTsKKyAgICB1cGRhdGVGaWxsSW1hZ2VzKG9sZFN0eWxlID8g
b2xkU3R5bGUtPm1hc2tMYXllcnMoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5tYXNrTGF5ZXJz
KCkgOiAwKTsKKworICAgIHVwZGF0ZUltYWdlKG9sZFN0eWxlID8gb2xkU3R5bGUtPmJvcmRlcklt
YWdlKCkuaW1hZ2UoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5ib3JkZXJJbWFnZSgpLmltYWdl
KCkgOiAwKTsKKyAgICB1cGRhdGVJbWFnZShvbGRTdHlsZSA/IG9sZFN0eWxlLT5tYXNrQm94SW1h
Z2UoKS5pbWFnZSgpIDogMCwgbV9zdHlsZSA/IG1fc3R5bGUtPm1hc2tCb3hJbWFnZSgpLmltYWdl
KCkgOiAwKTsKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgIHVwZGF0ZVNoYXBlSW1hZ2Uo
b2xkU3R5bGUgPyBvbGRTdHlsZS0+c2hhcGVJbnNpZGUoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxl
LT5zaGFwZUluc2lkZSgpIDogMCk7CisjZW5kaWYKKworICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJl
IHRoYXQgdmlldy0+bWF4aW1hbE91dGxpbmVTaXplKCkgaXMgdmFsaWQgZm9yIGFueSByZXBhaW50
cyB0aGF0IGhhcHBlbgorICAgIC8vIGR1cmluZyBzdHlsZURpZENoYW5nZSAoaXQncyB1c2VkIGJ5
IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KCkpLgorICAgIGlmIChtX3N0eWxlLT5vdXRs
aW5lV2lkdGgoKSA+IDAgJiYgbV9zdHlsZS0+b3V0bGluZVNpemUoKSA+IG1heGltYWxPdXRsaW5l
U2l6ZShQYWludFBoYXNlT3V0bGluZSkpCisgICAgICAgIHZpZXcoKS5zZXRNYXhpbWFsT3V0bGlu
ZVNpemUobV9zdHlsZS0+b3V0bGluZVNpemUoKSk7CisKKyAgICBib29sIGRvZXNOb3ROZWVkTGF5
b3V0ID0gIXBhcmVudCgpOworCisgICAgc3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUuZ2V0
KCkpOworCisgICAgLy8gRklYTUU6IHx0aGlzfCBtaWdodCBiZSBkZXN0cm95ZWQgaGVyZS4gVGhp
cyBjYW4gY3VycmVudGx5IGhhcHBlbiBmb3IgYSBSZW5kZXJUZXh0RnJhZ21lbnQgd2hlbgorICAg
IC8vIGl0cyBmaXJzdC1sZXR0ZXIgYmxvY2sgZ2V0cyBhbiB1cGRhdGUgaW4gUmVuZGVyVGV4dEZy
YWdtZW50OjpzdHlsZURpZENoYW5nZS4gRm9yIFJlbmRlclRleHRGcmFnbWVudChzKSwKKyAgICAv
LyB3ZSB3aWxsIHNhZmVseSBiYWlsIG91dCB3aXRoIHRoZSBkb2VzTm90TmVlZExheW91dCBmbGFn
LiBXZSBtaWdodCB3YW50IHRvIGJyb2FkZW4gdGhpcyBjb25kaXRpb24KKyAgICAvLyBpbiB0aGUg
ZnV0dXJlIGFzIHdlIG1vdmUgcmVuZGVyZXIgY2hhbmdlcyBvdXQgb2YgbGF5b3V0IGFuZCBpbnRv
IHN0eWxlIGNoYW5nZXMuCisgICAgaWYgKGRvZXNOb3ROZWVkTGF5b3V0KQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBOb3cgdGhhdCB0aGUgbGF5ZXIgKGlmIGFueSkgaGFzIGJlZW4gdXBkYXRl
ZCwgd2UgbmVlZCB0byBhZGp1c3QgdGhlIGRpZmYgYWdhaW4sCisgICAgLy8gY2hlY2sgd2hldGhl
ciB3ZSBzaG91bGQgbGF5b3V0IG5vdywgYW5kIGRlY2lkZSBpZiB3ZSBuZWVkIHRvIHJlcGFpbnQu
CisgICAgU3R5bGVEaWZmZXJlbmNlIHVwZGF0ZWREaWZmID0gYWRqdXN0U3R5bGVEaWZmZXJlbmNl
KGRpZmYsIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKTsKKyAgICAKKyAgICBpZiAoZGlmZiA8
PSBTdHlsZURpZmZlcmVuY2VMYXlvdXRQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KSB7CisgICAgICAg
IGlmICh1cGRhdGVkRGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQpCisgICAgICAgICAgICBz
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICAgICAgZWxzZSBpZiAodXBk
YXRlZERpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0UG9zaXRpb25lZE1vdmVtZW50T25seSkK
KyAgICAgICAgICAgIHNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KG9sZFN0eWxlLmdl
dCgpKTsKKyAgICAgICAgZWxzZSBpZiAodXBkYXRlZERpZmYgPT0gU3R5bGVEaWZmZXJlbmNlU2lt
cGxpZmllZExheW91dEFuZFBvc2l0aW9uZWRNb3ZlbWVudCkgeworICAgICAgICAgICAgc2V0TmVl
ZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQob2xkU3R5bGUuZ2V0KCkpOworICAgICAgICAgICAg
c2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOworICAgICAgICB9IGVsc2UgaWYg
KHVwZGF0ZWREaWZmID09IFN0eWxlRGlmZmVyZW5jZVNpbXBsaWZpZWRMYXlvdXQpCisgICAgICAg
ICAgICBzZXROZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCk7CisgICAgfQorCisgICAg
aWYgKHVwZGF0ZWREaWZmID09IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnRMYXllciB8fCBzaG91bGRS
ZXBhaW50Rm9yU3R5bGVEaWZmZXJlbmNlKHVwZGF0ZWREaWZmKSkgeworICAgICAgICAvLyBEbyBh
IHJlcGFpbnQgd2l0aCB0aGUgbmV3IHN0eWxlIG5vdywgZS5nLiwgZm9yIGV4YW1wbGUgaWYgd2Ug
Z28gZnJvbQorICAgICAgICAvLyBub3QgaGF2aW5nIGFuIG91dGxpbmUgdG8gaGF2aW5nIGFuIG91
dGxpbmUuCisgICAgICAgIHJlcGFpbnQoKTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyRWxlbWVu
dDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCkKIHsKICAgICBib29sIG5lZWRzVGFibGUgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkocmV2aXNpb24gMTU2MzEyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVuZGVyRWxlbWVudCogY3JlYXRlRm9y
KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYpOwogCisgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsKKwogICAgIC8vIFRoaXMgaXMgbnVsbCBmb3IgYW5vbnlt
b3VzIHJlbmRlcmVycy4KICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9F
bGVtZW50KFJlbmRlck9iamVjdDo6bm9kZSgpKTsgfQogICAgIEVsZW1lbnQqIG5vblBzZXVkb0Vs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQoUmVuZGVyT2JqZWN0Ojpub25Qc2V1ZG9O
b2RlKCkpOyB9CkBAIC03Niw4ICs3OCw5IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldExhc3RD
aGlsZChSZW5kZXJPYmplY3QqIGNoaWxkKSB7IG1fbGFzdENoaWxkID0gY2hpbGQ7IH0KICAgICB2
b2lkIGRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVX
aWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwgdm9pZCBz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKik7CisKICAg
ICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbEJlRGVzdHJveWVkKCkgT1ZFUlJJREU7CkBAIC05Miw2ICs5NSwxNiBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkU2xvdygpIGNvbnN0IE9WRVJSSURF
IEZJTkFMIHsgcmV0dXJuIGZpcnN0Q2hpbGQoKTsgfQogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
KiBsYXN0Q2hpbGRTbG93KCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gbGFzdENoaWxk
KCk7IH0KIAorICAgIGJvb2wgc2hvdWxkUmVwYWludEZvclN0eWxlRGlmZmVyZW5jZShTdHlsZURp
ZmZlcmVuY2UpIGNvbnN0OworICAgIGJvb2wgaGFzSW1tZWRpYXRlTm9uV2hpdGVzcGFjZVRleHRD
aGlsZCgpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVGaWxsSW1hZ2VzKGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IEZpbGxMYXllciopOworICAgIHZvaWQgdXBkYXRlSW1hZ2UoU3R5bGVJbWFnZSos
IFN0eWxlSW1hZ2UqKTsKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICB2b2lkIHVwZGF0ZVNo
YXBlSW1hZ2UoY29uc3QgU2hhcGVWYWx1ZSosIGNvbnN0IFNoYXBlVmFsdWUqKTsKKyNlbmRpZgor
ICAgIFN0eWxlRGlmZmVyZW5jZSBhZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNl
LCB1bnNpZ25lZCBjb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcykgY29uc3Q7CisKICAgICBSZW5k
ZXJPYmplY3QqIG1fZmlyc3RDaGlsZDsKICAgICBSZW5kZXJPYmplY3QqIG1fbGFzdENoaWxkOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNp
b24gMTU2MzEyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NzIsNjQgKzE2NzIsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6
c2V0QW5pbWF0YWJsZVN0eWxlKFBhCiAgICAgICAgIHNldFN0eWxlKHN0eWxlKTsKIH0KIAotU3R5
bGVEaWZmZXJlbmNlIFJlbmRlck9iamVjdDo6YWRqdXN0U3R5bGVEaWZmZXJlbmNlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCB1bnNpZ25lZCBjb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcykgY29uc3QK
LXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLy8gSWYgdHJhbnNmb3Jt
IGNoYW5nZWQsIGFuZCB3ZSBhcmUgbm90IGNvbXBvc2l0ZWQsIG5lZWQgdG8gZG8gYSBsYXlvdXQu
Ci0gICAgaWYgKGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzICYgQ29udGV4dFNlbnNpdGl2ZVBy
b3BlcnR5VHJhbnNmb3JtKSB7Ci0gICAgICAgIC8vIFRleHQgbm9kZXMgc2hhcmUgc3R5bGUgd2l0
aCB0aGVpciBwYXJlbnRzIGJ1dCB0cmFuc2Zvcm1zIGRvbid0IGFwcGx5IHRvIHRoZW0sCi0gICAg
ICAgIC8vIGhlbmNlIHRoZSAhaXNUZXh0KCkgY2hlY2suCi0gICAgICAgIC8vIEZJWE1FOiB3aGVu
IHRyYW5zZm9ybXMgYXJlIHRha2VuIGludG8gYWNjb3VudCBmb3Igb3ZlcmZsb3csIHdlIHdpbGwg
bmVlZCB0byBkbyBhIGxheW91dC4KLSAgICAgICAgaWYgKCFpc1RleHQoKSAmJiAoIWhhc0xheWVy
KCkgfHwgIXRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKS0+aXNDb21wb3Np
dGVkKCkpKSB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCBhdCBsZWFzdCBTaW1wbGlm
aWVkTGF5b3V0LCBidXQgaWYgUG9zaXRpb25lZE1vdmVtZW50T25seSBpcyBhbHJlYWR5IHNldAot
ICAgICAgICAgICAgLy8gdGhlbiB3ZSBhY3R1YWxseSBuZWVkIFNpbXBsaWZpZWRMYXlvdXRBbmRQ
b3NpdGlvbmVkTW92ZW1lbnQuCi0gICAgICAgICAgICBpZiAoIWhhc0xheWVyKCkpCi0gICAgICAg
ICAgICAgICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZUxheW91dDsgLy8gRklYTUU6IERvIHRoaXMg
Zm9yIG5vdyBzaW5jZSBTaW1wbGlmaWVkTGF5b3V0IGNhbm5vdCBoYW5kbGUgdXBkYXRpbmcgZmxv
YXRpbmcgb2JqZWN0cyBsaXN0cy4KLSAgICAgICAgICAgIGVsc2UgaWYgKGRpZmYgPCBTdHlsZURp
ZmZlcmVuY2VMYXlvdXRQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KQotICAgICAgICAgICAgICAgIGRp
ZmYgPSBTdHlsZURpZmZlcmVuY2VTaW1wbGlmaWVkTGF5b3V0OwotICAgICAgICAgICAgZWxzZSBp
ZiAoZGlmZiA8IFN0eWxlRGlmZmVyZW5jZVNpbXBsaWZpZWRMYXlvdXQpCi0gICAgICAgICAgICAg
ICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZVNpbXBsaWZpZWRMYXlvdXRBbmRQb3NpdGlvbmVkTW92
ZW1lbnQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA8IFN0eWxlRGlmZmVyZW5jZVJlY29tcG9z
aXRlTGF5ZXIpCi0gICAgICAgICAgICBkaWZmID0gU3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVM
YXllcjsKLSAgICB9Ci0KLSAgICAvLyBJZiBvcGFjaXR5IGNoYW5nZWQsIGFuZCB3ZSBhcmUgbm90
IGNvbXBvc2l0ZWQsIG5lZWQgdG8gcmVwYWludCAoYWxzbwotICAgIC8vIGlnbm9yaW5nIHRleHQg
bm9kZXMpCi0gICAgaWYgKGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzICYgQ29udGV4dFNlbnNp
dGl2ZVByb3BlcnR5T3BhY2l0eSkgewotICAgICAgICBpZiAoIWlzVGV4dCgpICYmICghaGFzTGF5
ZXIoKSB8fCAhdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KHRoaXMpLT5sYXllcigpLT5pc0NvbXBv
c2l0ZWQoKSkpCi0gICAgICAgICAgICBkaWZmID0gU3R5bGVEaWZmZXJlbmNlUmVwYWludExheWVy
OwotICAgICAgICBlbHNlIGlmIChkaWZmIDwgU3R5bGVEaWZmZXJlbmNlUmVjb21wb3NpdGVMYXll
cikKLSAgICAgICAgICAgIGRpZmYgPSBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxheWVyOwot
ICAgIH0KLSAgICAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgaWYgKChjb250ZXh0U2Vu
c2l0aXZlUHJvcGVydGllcyAmIENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eUZpbHRlcikgJiYgaGFz
TGF5ZXIoKSkgewotICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckxheWVyTW9k
ZWxPYmplY3QodGhpcyktPmxheWVyKCk7Ci0gICAgICAgIGlmICghbGF5ZXItPmlzQ29tcG9zaXRl
ZCgpIHx8IGxheWVyLT5wYWludHNXaXRoRmlsdGVycygpKQotICAgICAgICAgICAgZGlmZiA9IFN0
eWxlRGlmZmVyZW5jZVJlcGFpbnRMYXllcjsKLSAgICAgICAgZWxzZSBpZiAoZGlmZiA8IFN0eWxl
RGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXIpCi0gICAgICAgICAgICBkaWZmID0gU3R5bGVEaWZm
ZXJlbmNlUmVjb21wb3NpdGVMYXllcjsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICAvLyBUaGUg
YW5zd2VyIHRvIHJlcXVpcmVzTGF5ZXIoKSBmb3IgcGx1Z2lucywgaWZyYW1lcywgYW5kIGNhbnZh
cyBjYW4gY2hhbmdlIHdpdGhvdXQgdGhlIGFjdHVhbAotICAgIC8vIHN0eWxlIGNoYW5naW5nLCBz
aW5jZSBpdCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UgZGVjaWRlIHRvIGNvbXBvc2l0ZSB0aGVzZSBl
bGVtZW50cy4gV2hlbiB0aGUKLSAgICAvLyBsYXllciBzdGF0dXMgb2Ygb25lIG9mIHRoZXNlIGVs
ZW1lbnRzIGNoYW5nZXMsIHdlIG5lZWQgdG8gZm9yY2UgYSBsYXlvdXQuCi0gICAgaWYgKGRpZmYg
PT0gU3R5bGVEaWZmZXJlbmNlRXF1YWwgJiYgc3R5bGUoKSAmJiBpc0xheWVyTW9kZWxPYmplY3Qo
KSkgewotICAgICAgICBpZiAoaGFzTGF5ZXIoKSAhPSB0b1JlbmRlckxheWVyTW9kZWxPYmplY3Qo
dGhpcyktPnJlcXVpcmVzTGF5ZXIoKSkKLSAgICAgICAgICAgIGRpZmYgPSBTdHlsZURpZmZlcmVu
Y2VMYXlvdXQ7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dFNlbnNpdGl2
ZVByb3BlcnRpZXMpOwotI2VuZGlmCi0KLSAgICAvLyBJZiB3ZSBoYXZlIG5vIGxheWVyKCksIGp1
c3QgdHJlYXQgYSBSZXBhaW50TGF5ZXIgaGludCBhcyBhIG5vcm1hbCBSZXBhaW50LgotICAgIGlm
IChkaWZmID09IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnRMYXllciAmJiAhaGFzTGF5ZXIoKSkKLSAg
ICAgICAgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQ7Ci0KLSAgICByZXR1cm4gZGlmZjsK
LX0KLQogdm9pZCBSZW5kZXJPYmplY3Q6OnNldFBzZXVkb1N0eWxlKFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHBzZXVkb1N0eWxlKQogewogICAgIEFTU0VSVChwc2V1ZG9TdHlsZS0+c3R5bGVUeXBl
KCkgPT0gQkVGT1JFIHx8IHBzZXVkb1N0eWxlLT5zdHlsZVR5cGUoKSA9PSBBRlRFUik7CkBAIC0x
NzQ3LDEzMCArMTY4OSw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRQc2V1ZG9TdHlsZShQYXNz
UmUKICAgICBzZXRTdHlsZShwc2V1ZG9TdHlsZSk7CiB9CiAKLWlubGluZSBib29sIFJlbmRlck9i
amVjdDo6aGFzSW1tZWRpYXRlTm9uV2hpdGVzcGFjZVRleHRDaGlsZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzVGV4dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChjb25zdCBSZW5k
ZXJPYmplY3QqIHIgPSB0b1JlbmRlckVsZW1lbnQodGhpcyktPmZpcnN0Q2hpbGQoKTsgcjsgciA9
IHItPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKHItPmlzVGV4dCgpICYmICF0b1JlbmRl
clRleHQociktPmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlck9iamVj
dDo6c2hvdWxkUmVwYWludEZvclN0eWxlRGlmZmVyZW5jZShTdHlsZURpZmZlcmVuY2UgZGlmZikg
Y29uc3QKLXsKLSAgICByZXR1cm4gZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VSZXBhaW50IHx8IChk
aWZmID09IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnRJZlRleHQgJiYgaGFzSW1tZWRpYXRlTm9uV2hp
dGVzcGFjZVRleHRDaGlsZCgpKTsKLX0KLQotdm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQotewotICAgIGlmIChtX3N0eWxlID09IHN0eWxl
KSB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICAvLyBXZSBuZWVk
IHRvIHJ1biB0aHJvdWdoIGFkanVzdFN0eWxlRGlmZmVyZW5jZSgpIGZvciBpZnJhbWVzLCBwbHVn
aW5zLCBhbmQgY2FudmFzIHNvCi0gICAgICAgIC8vIHN0eWxlIHNoYXJpbmcgaXMgZGlzYWJsZWQg
Zm9yIHRoZW0uIFRoYXQgc2hvdWxkIGVuc3VyZSB0aGF0IHdlIG5ldmVyIGhpdCB0aGlzIGNvZGUg
cGF0aC4KLSAgICAgICAgQVNTRVJUKCFpc1JlbmRlcklGcmFtZSgpICYmICFpc0VtYmVkZGVkT2Jq
ZWN0KCkgJiYgIWlzQ2FudmFzKCkpOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBTdHlsZURpZmZlcmVuY2UgZGlmZiA9IFN0eWxlRGlmZmVyZW5jZUVxdWFsOwotICAgIHVu
c2lnbmVkIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzID0gQ29udGV4dFNlbnNpdGl2ZVByb3Bl
cnR5Tm9uZTsKLSAgICBpZiAobV9zdHlsZSkKLSAgICAgICAgZGlmZiA9IG1fc3R5bGUtPmRpZmYo
c3R5bGUuZ2V0KCksIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKTsKLQotICAgIGRpZmYgPSBh
ZGp1c3RTdHlsZURpZmZlcmVuY2UoZGlmZiwgY29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpOwot
Ci0gICAgc3R5bGVXaWxsQ2hhbmdlKGRpZmYsIHN0eWxlLmdldCgpKTsKLSAgICAKLSAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IG9sZFN0eWxlID0gbV9zdHlsZS5yZWxlYXNlKCk7Ci0gICAgc2V0U3R5
bGVJbnRlcm5hbChzdHlsZSk7Ci0KLSAgICB1cGRhdGVGaWxsSW1hZ2VzKG9sZFN0eWxlID8gb2xk
U3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5iYWNrZ3Jv
dW5kTGF5ZXJzKCkgOiAwKTsKLSAgICB1cGRhdGVGaWxsSW1hZ2VzKG9sZFN0eWxlID8gb2xkU3R5
bGUtPm1hc2tMYXllcnMoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5tYXNrTGF5ZXJzKCkgOiAw
KTsKLQotICAgIHVwZGF0ZUltYWdlKG9sZFN0eWxlID8gb2xkU3R5bGUtPmJvcmRlckltYWdlKCku
aW1hZ2UoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5ib3JkZXJJbWFnZSgpLmltYWdlKCkgOiAw
KTsKLSAgICB1cGRhdGVJbWFnZShvbGRTdHlsZSA/IG9sZFN0eWxlLT5tYXNrQm94SW1hZ2UoKS5p
bWFnZSgpIDogMCwgbV9zdHlsZSA/IG1fc3R5bGUtPm1hc2tCb3hJbWFnZSgpLmltYWdlKCkgOiAw
KTsKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIHVwZGF0ZVNoYXBlSW1hZ2Uob2xkU3R5
bGUgPyBvbGRTdHlsZS0+c2hhcGVJbnNpZGUoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5zaGFw
ZUluc2lkZSgpIDogMCk7Ci0jZW5kaWYKLQotICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQg
dmlldy0+bWF4aW1hbE91dGxpbmVTaXplKCkgaXMgdmFsaWQgZm9yIGFueSByZXBhaW50cyB0aGF0
IGhhcHBlbgotICAgIC8vIGR1cmluZyBzdHlsZURpZENoYW5nZSAoaXQncyB1c2VkIGJ5IGNsaXBw
ZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KCkpLgotICAgIGlmIChtX3N0eWxlLT5vdXRsaW5lV2lk
dGgoKSA+IDAgJiYgbV9zdHlsZS0+b3V0bGluZVNpemUoKSA+IG1heGltYWxPdXRsaW5lU2l6ZShQ
YWludFBoYXNlT3V0bGluZSkpCi0gICAgICAgIHZpZXcoKS5zZXRNYXhpbWFsT3V0bGluZVNpemUo
bV9zdHlsZS0+b3V0bGluZVNpemUoKSk7Ci0KLSAgICBib29sIGRvZXNOb3ROZWVkTGF5b3V0ID0g
IW1fcGFyZW50IHx8IGlzVGV4dCgpOwotCi0gICAgc3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5
bGUuZ2V0KCkpOwotCi0gICAgLy8gRklYTUU6IHx0aGlzfCBtaWdodCBiZSBkZXN0cm95ZWQgaGVy
ZS4gVGhpcyBjYW4gY3VycmVudGx5IGhhcHBlbiBmb3IgYSBSZW5kZXJUZXh0RnJhZ21lbnQgd2hl
bgotICAgIC8vIGl0cyBmaXJzdC1sZXR0ZXIgYmxvY2sgZ2V0cyBhbiB1cGRhdGUgaW4gUmVuZGVy
VGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5nZS4gRm9yIFJlbmRlclRleHRGcmFnbWVudChzKSwK
LSAgICAvLyB3ZSB3aWxsIHNhZmVseSBiYWlsIG91dCB3aXRoIHRoZSBkb2VzTm90TmVlZExheW91
dCBmbGFnLiBXZSBtaWdodCB3YW50IHRvIGJyb2FkZW4gdGhpcyBjb25kaXRpb24KLSAgICAvLyBp
biB0aGUgZnV0dXJlIGFzIHdlIG1vdmUgcmVuZGVyZXIgY2hhbmdlcyBvdXQgb2YgbGF5b3V0IGFu
ZCBpbnRvIHN0eWxlIGNoYW5nZXMuCi0gICAgaWYgKGRvZXNOb3ROZWVkTGF5b3V0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGUgbGF5ZXIgKGlmIGFueSkgaGFzIGJlZW4g
dXBkYXRlZCwgd2UgbmVlZCB0byBhZGp1c3QgdGhlIGRpZmYgYWdhaW4sCi0gICAgLy8gY2hlY2sg
d2hldGhlciB3ZSBzaG91bGQgbGF5b3V0IG5vdywgYW5kIGRlY2lkZSBpZiB3ZSBuZWVkIHRvIHJl
cGFpbnQuCi0gICAgU3R5bGVEaWZmZXJlbmNlIHVwZGF0ZWREaWZmID0gYWRqdXN0U3R5bGVEaWZm
ZXJlbmNlKGRpZmYsIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKTsKLSAgICAKLSAgICBpZiAo
ZGlmZiA8PSBTdHlsZURpZmZlcmVuY2VMYXlvdXRQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KSB7Ci0g
ICAgICAgIGlmICh1cGRhdGVkRGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQpCi0gICAgICAg
ICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICAgICAgZWxzZSBp
ZiAodXBkYXRlZERpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0UG9zaXRpb25lZE1vdmVtZW50
T25seSkKLSAgICAgICAgICAgIHNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KG9sZFN0
eWxlLmdldCgpKTsKLSAgICAgICAgZWxzZSBpZiAodXBkYXRlZERpZmYgPT0gU3R5bGVEaWZmZXJl
bmNlU2ltcGxpZmllZExheW91dEFuZFBvc2l0aW9uZWRNb3ZlbWVudCkgewotICAgICAgICAgICAg
c2V0TmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQob2xkU3R5bGUuZ2V0KCkpOwotICAgICAg
ICAgICAgc2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOwotICAgICAgICB9IGVs
c2UgaWYgKHVwZGF0ZWREaWZmID09IFN0eWxlRGlmZmVyZW5jZVNpbXBsaWZpZWRMYXlvdXQpCi0g
ICAgICAgICAgICBzZXROZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCk7Ci0gICAgfQot
Ci0gICAgaWYgKHVwZGF0ZWREaWZmID09IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnRMYXllciB8fCBz
aG91bGRSZXBhaW50Rm9yU3R5bGVEaWZmZXJlbmNlKHVwZGF0ZWREaWZmKSkgewotICAgICAgICAv
LyBEbyBhIHJlcGFpbnQgd2l0aCB0aGUgbmV3IHN0eWxlIG5vdywgZS5nLiwgZm9yIGV4YW1wbGUg
aWYgd2UgZ28gZnJvbQotICAgICAgICAvLyBub3QgaGF2aW5nIGFuIG91dGxpbmUgdG8gaGF2aW5n
IGFuIG91dGxpbmUuCi0gICAgICAgIHJlcGFpbnQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVy
T2JqZWN0Ojp1cGRhdGVGaWxsSW1hZ2VzKGNvbnN0IEZpbGxMYXllciogb2xkTGF5ZXJzLCBjb25z
dCBGaWxsTGF5ZXIqIG5ld0xheWVycykKLXsKLSAgICAvLyBPcHRpbWl6ZSB0aGUgY29tbW9uIGNh
c2UKLSAgICBpZiAob2xkTGF5ZXJzICYmICFvbGRMYXllcnMtPm5leHQoKSAmJiBuZXdMYXllcnMg
JiYgIW5ld0xheWVycy0+bmV4dCgpICYmIChvbGRMYXllcnMtPmltYWdlKCkgPT0gbmV3TGF5ZXJz
LT5pbWFnZSgpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEdvIHRocm91Z2ggdGhl
IG5ldyBsYXllcnMgYW5kIGFkZENsaWVudHMgZmlyc3QsIHRvIGF2b2lkIHJlbW92aW5nIGFsbCBj
bGllbnRzIG9mIGFuIGltYWdlLgotICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJyTmV3ID0g
bmV3TGF5ZXJzOyBjdXJyTmV3OyBjdXJyTmV3ID0gY3Vyck5ldy0+bmV4dCgpKSB7Ci0gICAgICAg
IGlmIChjdXJyTmV3LT5pbWFnZSgpKQotICAgICAgICAgICAgY3Vyck5ldy0+aW1hZ2UoKS0+YWRk
Q2xpZW50KHRoaXMpOwotICAgIH0KLQotICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJyT2xk
ID0gb2xkTGF5ZXJzOyBjdXJyT2xkOyBjdXJyT2xkID0gY3Vyck9sZC0+bmV4dCgpKSB7Ci0gICAg
ICAgIGlmIChjdXJyT2xkLT5pbWFnZSgpKQotICAgICAgICAgICAgY3Vyck9sZC0+aW1hZ2UoKS0+
cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJPYmplY3Q6OnVwZGF0
ZUltYWdlKFN0eWxlSW1hZ2UqIG9sZEltYWdlLCBTdHlsZUltYWdlKiBuZXdJbWFnZSkKLXsKLSAg
ICBpZiAob2xkSW1hZ2UgIT0gbmV3SW1hZ2UpIHsKLSAgICAgICAgaWYgKG9sZEltYWdlKQotICAg
ICAgICAgICAgb2xkSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLSAgICAgICAgaWYgKG5ld0lt
YWdlKQotICAgICAgICAgICAgbmV3SW1hZ2UtPmFkZENsaWVudCh0aGlzKTsKLSAgICB9Ci19Ci0K
LSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVTaGFwZUlt
YWdlKGNvbnN0IFNoYXBlVmFsdWUqIG9sZFNoYXBlVmFsdWUsIGNvbnN0IFNoYXBlVmFsdWUqIG5l
d1NoYXBlVmFsdWUpCi17Ci0gICAgaWYgKG9sZFNoYXBlVmFsdWUgfHwgbmV3U2hhcGVWYWx1ZSkK
LSAgICAgICAgdXBkYXRlSW1hZ2Uob2xkU2hhcGVWYWx1ZSA/IG9sZFNoYXBlVmFsdWUtPmltYWdl
KCkgOiAwLCBuZXdTaGFwZVZhbHVlID8gbmV3U2hhcGVWYWx1ZS0+aW1hZ2UoKSA6IDApOwotfQot
I2VuZGlmCi0KIExheW91dFJlY3QgUmVuZGVyT2JqZWN0Ojp2aWV3UmVjdCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHZpZXcoKS52aWV3UmVjdCgpOwpAQCAtMjMzMywyOCArMjE1MSw2IEBAIHZvaWQg
UmVuZGVyT2JqZWN0OjpyZW1vdmVTaGFwZUltYWdlQ2xpZW4KIAogdm9pZCBSZW5kZXJPYmplY3Q6
OmFyZW5hRGVsZXRlKFJlbmRlckFyZW5hJiBhcmVuYSwgdm9pZCogYmFzZSkKIHsKLSAgICBpZiAo
bV9zdHlsZSkgewotICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogYmdMYXllciA9IG1fc3R5
bGUtPmJhY2tncm91bmRMYXllcnMoKTsgYmdMYXllcjsgYmdMYXllciA9IGJnTGF5ZXItPm5leHQo
KSkgewotICAgICAgICAgICAgaWYgKFN0eWxlSW1hZ2UqIGJhY2tncm91bmRJbWFnZSA9IGJnTGF5
ZXItPmltYWdlKCkpCi0gICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlLT5yZW1vdmVDbGll
bnQodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogbWFz
a0xheWVyID0gbV9zdHlsZS0+bWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1h
c2tMYXllci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogbWFza0ltYWdl
ID0gbWFza0xheWVyLT5pbWFnZSgpKQotICAgICAgICAgICAgICAgIG1hc2tJbWFnZS0+cmVtb3Zl
Q2xpZW50KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFN0eWxlSW1hZ2UqIGJvcmRl
ckltYWdlID0gbV9zdHlsZS0+Ym9yZGVySW1hZ2UoKS5pbWFnZSgpKQotICAgICAgICAgICAgYm9y
ZGVySW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLQotICAgICAgICBpZiAoU3R5bGVJbWFnZSog
bWFza0JveEltYWdlID0gbV9zdHlsZS0+bWFza0JveEltYWdlKCkuaW1hZ2UoKSkKLSAgICAgICAg
ICAgIG1hc2tCb3hJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotCi0jaWYgRU5BQkxFKENTU19T
SEFQRVMpCi0gICAgICAgIHJlbW92ZVNoYXBlSW1hZ2VDbGllbnQobV9zdHlsZS0+c2hhcGVJbnNp
ZGUoKSk7Ci0jZW5kaWYKLSAgICB9Ci0KICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCogc2F2ZWRC
YXNlID0gYmFzZU9mUmVuZGVyT2JqZWN0QmVpbmdEZWxldGVkOwogICAgIGJhc2VPZlJlbmRlck9i
amVjdEJlaW5nRGVsZXRlZCA9IGJhc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCShyZXZpc2lvbiAxNTYzMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3NywxMiArNjc3LDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzY2hlZHVsZVJlbGF5b3V0KCk7CiAKLSAgICB2b2lkIHVwZGF0ZUZp
bGxJbWFnZXMoY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKik7Ci0gICAgdm9pZCB1
cGRhdGVJbWFnZShTdHlsZUltYWdlKiwgU3R5bGVJbWFnZSopOwotI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQotICAgIHZvaWQgdXBkYXRlU2hhcGVJbWFnZShjb25zdCBTaGFwZVZhbHVlKiwgY29uc3Qg
U2hhcGVWYWx1ZSopOwotI2VuZGlmCi0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAogICAgIC8vIFJlY3Vyc2l2ZSBmdW5jdGlvbiB0aGF0
IGNvbXB1dGVzIHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdCBhbmQgYWxsIGl0
cyBkZXNjZW5kYW50cy4KQEAgLTcxOCw3ICs3MTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRB
bmltYXRhYmxlU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4pOwogCiAgICAgLy8gU2V0IHRo
ZSBzdHlsZSBvZiB0aGUgb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3Qg
YWNjb3JkaW5nbHkuCi0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4pID0gMDsKIAogICAgIC8vIFNldCB0aGUgc3R5bGUgb2YgdGhlIG9iamVjdCBpZiBpdCdzIGdl
bmVyYXRlZCBjb250ZW50LgogICAgIHZvaWQgc2V0UHNldWRvU3R5bGUoUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4pOwpAQCAtOTY1LDExICs5NTksNiBAQCBwdWJsaWM6CiAgICAgUmVzcGVjdEltYWdl
T3JpZW50YXRpb25FbnVtIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgY29uc3Q7CiAK
IHByb3RlY3RlZDoKLSAgICAvLyBPdmVycmlkZXMgc2hvdWxkIGNhbGwgdGhlIHN1cGVyY2xhc3Mg
YXQgdGhlIGVuZAotICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSopIHsgfQotICAgIC8vIE92ZXJyaWRlcyBzaG91bGQgY2Fs
bCB0aGUgc3VwZXJjbGFzcyBhdCB0aGUgc3RhcnQKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSopIHsgfQotCiAgICAgdm9p
ZCBkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHgxLCBpbnQgeTEsIGlu
dCB4MiwgaW50IHkyLCBCb3hTaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9y
LCBFQm9yZGVyU3R5bGUsIGludCBhZGpidzEsIGludCBhZGpidzIsIGJvb2wgYW50aWFsaWFzID0g
ZmFsc2UpOwogCkBAIC05OTksMTEgKzk4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVG
cm9tUmVuZGVyRmxvd1RocmVhZCgpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJl
YWRSZWN1cnNpdmUoUmVuZGVyRmxvd1RocmVhZCopOwogCi0gICAgYm9vbCBzaG91bGRSZXBhaW50
Rm9yU3R5bGVEaWZmZXJlbmNlKFN0eWxlRGlmZmVyZW5jZSkgY29uc3Q7Ci0gICAgYm9vbCBoYXNJ
bW1lZGlhdGVOb25XaGl0ZXNwYWNlVGV4dENoaWxkKCkgY29uc3Q7Ci0KICAgICBSZW5kZXJTdHls
ZSogY2FjaGVkRmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKLSAgICBTdHlsZURpZmZlcmVuY2UgYWRq
dXN0U3R5bGVEaWZmZXJlbmNlKFN0eWxlRGlmZmVyZW5jZSwgdW5zaWduZWQgY29udGV4dFNlbnNp
dGl2ZVByb3BlcnRpZXMpIGNvbnN0OwogCiAgICAgQ29sb3Igc2VsZWN0aW9uQ29sb3IoaW50IGNv
bG9yUHJvcGVydHkpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCShyZXZpc2lvbiAxNTYzMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsMTkgQEAgYm9vbCBS
ZW5kZXJUZXh0Ojppc1RleHRGcmFnbWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Cit2b2lkIFJlbmRlclRleHQ6OnNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
KQoreworICAgIGlmIChzdHlsZSA9PSB0aGlzLT5zdHlsZSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgU3R5bGVEaWZmZXJlbmNlIGRpZmYgPSBTdHlsZURpZmZlcmVuY2VFcXVhbDsKKyAgICB1bnNp
Z25lZCBjb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyA9IENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0
eU5vbmU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvbGRTdHlsZSA9IHRoaXMtPnN0eWxlKCk7
CisgICAgaWYgKG9sZFN0eWxlLmdldCgpKQorICAgICAgICBkaWZmID0gb2xkU3R5bGUtPmRpZmYo
c3R5bGUuZ2V0KCksIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKTsKKyAgICBzZXRTdHlsZUlu
dGVybmFsKHN0eWxlKTsKKyAgICBzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZS5nZXQoKSk7
Cit9CisKIHZvaWQgUmVuZGVyVGV4dDo6dXBkYXRlTmVlZHNUcmFuc2NvZGluZygpCiB7CiAgICAg
Y29uc3QgVGV4dEVuY29kaW5nKiBlbmNvZGluZyA9IGRvY3VtZW50KCkuZGVjb2RlcigpID8gJmRv
Y3VtZW50KCkuZGVjb2RlcigpLT5lbmNvZGluZygpIDogMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTU2MzExKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RnJhZ21lbnQoKSBjb25zdDsKIAorICAg
IHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4pOworCiAgICAgdmlydHVhbCBT
dHJpbmcgb3JpZ2luYWxUZXh0KCkgY29uc3Q7CiAKICAgICB2b2lkIGV4dHJhY3RUZXh0Qm94KElu
bGluZVRleHRCb3gqKTsKQEAgLTE0OSw4ICsxNTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCk7CiAg
ICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIE9WRVJSSURFOwogCi0gICAgdmlydHVh
bCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxl
KikgT1ZFUlJJREUgRklOQUwgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFRleHRJbnRlcm5hbChj
b25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIFVDaGFyIHByZXZpb3VzQ2hhcmFjdGVyKCkgY29u
c3Q7Cg==
</data>
<flag name="review"
          id="234643"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>