<?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>160241</bug_id>
          
          <creation_ts>2016-07-27 05:46:33 -0700</creation_ts>
          <short_desc>Parse the operator text on the MathMLOperatorElement class</short_desc>
          <delta_ts>2016-07-29 00:23:18 -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>MathML</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>160034</dependson>
          <blocked>156537</blocked>
    
    <blocked>160190</blocked>
    
    <blocked>160239</blocked>
    
    <blocked>160245</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>alex</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbarton</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rego</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1214858</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-27 05:46:33 -0700</bug_when>
    <thetext>Another step towards bug 156537. The MathML Operator UChar is necessary to find its entries in the operator dictionary and determine properties.

The case of anonymous mfenced operators still need to be handled specially. The idea will be to move them in a separate RenderMathMLFencedOperator class deriving from RenderMathMLOperator in a follow-up bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214860</commentid>
    <comment_count>1</comment_count>
      <attachid>284688</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-27 06:04:18 -0700</bug_when>
    <thetext>Created attachment 284688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215166</commentid>
    <comment_count>2</comment_count>
      <attachid>284688</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2016-07-28 00:52:57 -0700</bug_when>
    <thetext>Comment on attachment 284688
Patch

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

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.h:60
&gt; +    virtual UChar textContent() const;

Why virtual ? As far as I could see, this function is not override by any subclass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215168</commentid>
    <comment_count>3</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-28 01:01:19 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 284688 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=284688&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.h:60
&gt; &gt; +    virtual UChar textContent() const;
&gt; 
&gt; Why virtual ? As far as I could see, this function is not override by any
&gt; subclass.

Yes, this is a mistake. I was already thinking about the next patch where it is overridden (bug 160245) but did not wanted to do it here to make the patch too big.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215170</commentid>
    <comment_count>4</comment_count>
      <attachid>284688</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2016-07-28 01:01:39 -0700</bug_when>
    <thetext>Comment on attachment 284688
Patch

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

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.h:76
&gt; +    bool isInvisibleOperator() { return 0x2061 &lt;= textContent() &amp;&amp; textContent() &lt;= 0x2064; }

Perhaps not the time to think about performance, but I assume this change would make isInvisibleOperator considerably slower; instead of directly accessing an attribute, it will have to check for anonymity, accessing the associated html element and finally getting its attribute value (assumed not dirty). I make this observation just in case we may be interested on alternative implementation for this function, caching some values and making assumptions regarding anonymity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215172</commentid>
    <comment_count>5</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-28 01:13:26 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 284688 [details]
&gt; Perhaps not the time to think about performance, but I assume this change
&gt; would make isInvisibleOperator considerably slower; instead of directly
&gt; accessing an attribute, it will have to check for anonymity, accessing the
&gt; associated html element and finally getting its attribute value (assumed not
&gt; dirty). I make this observation just in case we may be interested on
&gt; alternative implementation for this function, caching some values and making
&gt; assumptions regarding anonymity.

I believe for this and other functions in RenderMathMLOperator calling textContent() the actual parsing will only be done once during the layout (if the content changes then the whole layout should be redone anyway). The idea here and later for other operator attributes will be to cache the data on the element class rather than having them on the render class. But yes, there may be a small performance drop do to more function calls. Maybe we should use local variables to reduce them, but I did not want to change too much code in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215176</commentid>
    <comment_count>6</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-28 02:00:57 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; 
&gt; Perhaps not the time to think about performance, but I assume this change
&gt; would make isInvisibleOperator considerably slower; instead of directly
&gt; accessing an attribute, it will have to check for anonymity, accessing the
&gt; associated html element and finally getting its attribute value (assumed not
&gt; dirty). I make this observation just in case we may be interested on
&gt; alternative implementation for this function, caching some values and making
&gt; assumptions regarding anonymity.

I just realized why you meant with this anonymity. As I said in comment 3, the plan is to move the code specific to anonymous fenced operator in a derived class so we will remove all the isAnonymous() check at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215440</commentid>
    <comment_count>7</comment_count>
      <attachid>284688</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-07-28 16:16:06 -0700</bug_when>
    <thetext>Comment on attachment 284688
Patch

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

&gt; Source/WebCore/mathml/MathMLOperatorElement.cpp:57
&gt; +    // We collapse the whitespace and replace the hyphens by minus signs.
&gt; +    AtomicString textContent = string.stripWhiteSpace().simplifyWhiteSpace().replace(hyphenMinus, minusSign).impl();
&gt; +
&gt; +    // We verify whether the operator text can be represented by a single UChar.
&gt; +    // FIXME: This does not handle surrogate pairs (https://bugs.webkit.org/show_bug.cgi?id=122296).
&gt; +    // FIXME: This does not handle &lt;mo&gt; operators with multiple characters (https://bugs.webkit.org/show_bug.cgi?id=124828).
&gt; +    return textContent.length() == 1 ? textContent[0] : 0;

This is a really inefficient way to extract a character from a string. Skipping initial whitespace does not require calling stripWhiteSpace. Calling simplifyWhitespace has no effect here. Turning a hyphen into a minus sign would be more efficient after a single character is extracted. Handling surrogate pairs correctly is almost trivial if you use a StringView instead of a String, using the codePoints() function, but the return typeof this function would have to be UChar32, not Char.

I guess, though, that this code was just moved here, so none of those issues are new.

&gt; Source/WebCore/mathml/MathMLOperatorElement.h:49
&gt; +    struct OperatorText {
&gt; +        UChar value;
&gt; +        bool dirty { true };
&gt; +    };
&gt; +    OperatorText m_operatorText;

It would probably be cleaner to use Optional&lt;UChar&gt; here. No value means it needs to be computed. But also, should be UChar32, not Char.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215509</commentid>
    <comment_count>8</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-29 00:21:31 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 284688 [details]
&gt; I guess, though, that this code was just moved here, so none of those issues
&gt; are new.

That&apos;s true. The goal in my current set of patches is to move code from rendering to DOM classes for now, so I&apos;ll just add a FIXME comment and postpone this for a latter bug entry. Now that code is in its own parsing function so it should not interfere too much with the rest of my patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215510</commentid>
    <comment_count>9</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-29 00:23:18 -0700</bug_when>
    <thetext>Committed r203896: &lt;http://trac.webkit.org/changeset/203896&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284688</attachid>
            <date>2016-07-27 06:04:18 -0700</date>
            <delta_ts>2016-07-28 16:16:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160241-20160727150307.patch</filename>
            <type>text/plain</type>
            <size>16153</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzNzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2MxZWJjMTgxNzE2YjVj
YThlNTAyNjJjYWUyMWEyNWY4MjAzYmU2Yi4uOWFlMjZjZmM1Y2MwNDJhZDA3NjNjMmQyMDM3MDc4
M2FkY2Q2MDkzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE2LTA3LTI3ICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBQYXJzZSB0aGUgb3BlcmF0
b3IgdGV4dCBvbiB0aGUgTWF0aE1MT3BlcmF0b3JFbGVtZW50IGNsYXNzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMjQxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHRleHQgb2YgdGhlIE1hdGhN
TCBvcGVyYXRvcnMgaXMgaW1wb3J0YW50IHRvIGRldGVybWluZSBmb3JtIG9yIGRpY3Rpb25hcnkg
cHJvcGVydGllcyBhbmQKKyAgICAgICAgaGVuY2UgcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyB3aGVu
IG5vIGV4cGxpY2l0IGF0dHJpYnV0ZXMgYXJlIHByaXZpZGVkLiBTaW5jZSB0aGF0IHRleHQgb25s
eQorICAgICAgICBkZXBlbmRzIG9uIHRoZSBNYXRoTUwgRE9NIGNvbnRlbnQsIGl0IG1ha2VzIHNl
bnNlIHRvIG1vdmUgaXRzIHBhcnNpbmcgaW50bworICAgICAgICBNYXRoTUxPcGVyYXRvckVsZW1l
bnQuIEFub255bW91cyBvcGVyYXRvcnMgY3JlYXRlZCBieSB0aGUgbWZlbmNlZCBlbGVtZW50cyBz
dGlsbCBuZWVkIHRvIGJlCisgICAgICAgIGhhbmRsZWQgc3BlY2lhbGx5IGFuZCB0aGlzIHdpbGwg
YmUgdHJ1ZSBmb3IgYWxsIHRoZSBvcGVyYXRvciBwcm9wZXJ0aWVzIHRoYXQgY2FuIGp1c3QgYmUK
KyAgICAgICAgZGV0ZXJtaW5lZCBpbiBNYXRoTUxPcGVyYXRvckVsZW1lbnQuIEhlbmNlIGluIGEg
Zm9sbG93LXVwIHBhdGNoIHdlIHdpbGwgaW50cm9kdWNlIGEgY2xhc3MKKyAgICAgICAgdG8gbW92
ZSBhbGwgdGhlIGNvZGUgc3BlY2lmaWMgdG8gbWZlbmNlZCBpbiBhIGNsYXNzIGRlcml2ZWQgZnJv
bSBSZW5kZXJNYXRoTUxPcGVyYXRvciB3aGlsZQorICAgICAgICB3ZSBjb250aW51ZSB0byBtb3Zl
IHRoZSBjb3JyZXNwb25kaW5nIGNvZGUgZm9yIG5vbi1hbm9ueW1vdXMgaW50byBNYXRoTUxPcGVy
YXRvckVsZW1lbnQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWhhdmlvciBpcyB1bmNoYW5n
ZWQuCisKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MT3BlcmF0b3JFbGVtZW50LmNwcDogSW5jbHVk
ZSBoZWFkZXIgZm9yIGh5cGhlbk1pbnVzL21pbnVzU2lnbiBjaGFyYWN0ZXJzLgorICAgICAgICAo
V2ViQ29yZTo6TWF0aE1MT3BlcmF0b3JFbGVtZW50OjpwYXJzZU9wZXJhdG9yVGV4dCk6IE1vdmUg
dGhhdCBjb2RlIGZyb20gcmVidWlsZFRva2VuQ29udGVudAorICAgICAgICAoV2ViQ29yZTo6TWF0
aE1MT3BlcmF0b3JFbGVtZW50OjpvcGVyYXRvclRleHQpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0
IHRoZSBjYWNoZWQgdGV4dC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTE9wZXJhdG9yRWxlbWVu
dDo6Y2hpbGRyZW5DaGFuZ2VkKTogTWFrZSB0aGUgY2FjaGVkIHRleHQgZGlydHkuCisgICAgICAg
ICogbWF0aG1sL01hdGhNTE9wZXJhdG9yRWxlbWVudC5oOiBVcGRhdGUgZGVmaXRpb25zIGFuZCBh
ZGQgYSBtZW1iZXIgZm9yIHRoZSBvcGVyYXRvciB0ZXh0LgorICAgICAgICAqIG1hdGhtbC9NYXRo
TUxUZXh0RWxlbWVudC5oOiBNYWtlIGNoaWxkcmVuQ2hhbmdlZCBvdmVycmlkYWJsZS4KKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjplbGVtZW50KTogSGVscGVyIGZ1bmN0aW9u
IHRvIGNhc3QgdG8gYSBNYXRoTUxPcGVyYXRvckVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6dGV4dENvbnRlbnQpOiBIZWxwZXIgZnVuY3Rpb24gdG8gY2Fs
bAorICAgICAgICBNYXRoTUxPcGVyYXRvckVsZW1lbnQ6Om9wZXJhdG9yVGV4dCBvciBmYWxsYmFj
ayB0byBtX3RleHRDb250ZW50IGZvciBhbm9ueW1vdXMgb3BlcmF0b3JzLgorICAgICAgICBtX3Rl
eHRDb250ZW50IGFuZCB0aGlzIHNwZWNpYWwgY2FzZSBjYW4gYmUgbW92ZWQgaW50byBhIGRlcml2
ZWQgY2xhc3MgbGF0ZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKTogQ2FsbCB0ZXh0Q29udGVudCgpLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cmVidWls
ZFRva2VuQ29udGVudCk6IFJlbW92ZSB0aGUgc3RyaW5nIHBhcmFtZXRlciBhbmQgdGhlCisgICAg
ICAgIHBhcnNpbmcgb2YgdGhlIG9wZXJhdG9yIHRleHQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlVG9rZW5Db250ZW50KTogQ2FsbCB0ZXh0Q29udGVudCgp
LiBUaGUgc3BlY2lhbCBmdW5jdGlvbgorICAgICAgICBmb3IgYW5vbnltb3VzIG9wZXJhdG9ycyBh
bHNvIHBhcnNlcyB0aGUgdGV4dCBjb250ZW50IGJ1dCB0aGlzIGNvdWxkIGJlIG1vdmVkIGludG8g
YSBkZXJpdmVkCisgICAgICAgIGNsYXNzIGxhdGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnNob3VsZEFsbG93U3RyZXRjaGluZyk6IENhbGwgdGV4dENvbnRlbnQo
KS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjp1c2VNYXRoT3BlcmF0
b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpSZW5k
ZXJNYXRoTUxPcGVyYXRvcik6IE5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBtX3RleHRDb250ZW50Cisg
ICAgICAgIGFzIGl0IGlzIG5vdCB1c2VkIGFueW1vcmUgZm9yIG5vbi1hbm9ueW1vdXMgcmVuZGVy
ZXJzLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaDog
VXBkYXRlIGRlZmluaXRpb25zIGFuZCBjYWxsIHRleHRDb250ZW50KCkuCisKIDIwMTYtMDctMjcg
IFJvbWFpbiBCZWxsZXNzb3J0ICA8cm9tYWluLmJlbGxlc3NvcnRAY3JmLmNhbm9uLmZyPgogCiAg
ICAgICAgIFtTdHJlYW1zIEFQSV0gUmVwbGFjZSBSZWFkYWJsZVN0cmVhbVJlYWRlciBieSBSZWFk
YWJsZVN0cmVhbURlZmF1bHRSZWFkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL21hdGht
bC9NYXRoTUxPcGVyYXRvckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhN
TE9wZXJhdG9yRWxlbWVudC5jcHAKaW5kZXggMzNmNGZmN2JjZGFkYmYzZTdiOWFmZGE5YTY4Y2E0
MDYwMDNkZTMzZi4uNGVjZmY2Mjc2OGNjM2JlZGUyY2E0MGYxMmY4YWYzMTNmMWM0OTU1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE9wZXJhdG9yRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE9wZXJhdG9yRWxlbWVudC5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJNYXRoTUxPcGVyYXRvckVsZW1lbnQuaCIKIAogI2lu
Y2x1ZGUgIlJlbmRlck1hdGhNTE9wZXJhdG9yLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hh
cmFjdGVyTmFtZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NSw2ICs0NiwzMyBA
QCBSZWY8TWF0aE1MT3BlcmF0b3JFbGVtZW50PiBNYXRoTUxPcGVyYXRvckVsZW1lbnQ6OmNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1hdGhN
TE9wZXJhdG9yRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCitVQ2hhciBNYXRoTUxP
cGVyYXRvckVsZW1lbnQ6OnBhcnNlT3BlcmF0b3JUZXh0KGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
eworICAgIC8vIFdlIGNvbGxhcHNlIHRoZSB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIHRoZSBoeXBo
ZW5zIGJ5IG1pbnVzIHNpZ25zLgorICAgIEF0b21pY1N0cmluZyB0ZXh0Q29udGVudCA9IHN0cmlu
Zy5zdHJpcFdoaXRlU3BhY2UoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKS5yZXBsYWNlKGh5cGhlbk1p
bnVzLCBtaW51c1NpZ24pLmltcGwoKTsKKworICAgIC8vIFdlIHZlcmlmeSB3aGV0aGVyIHRoZSBv
cGVyYXRvciB0ZXh0IGNhbiBiZSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBVQ2hhci4KKyAgICAv
LyBGSVhNRTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgc3Vycm9nYXRlIHBhaXJzIChodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMjk2KS4KKyAgICAvLyBGSVhNRTogVGhp
cyBkb2VzIG5vdCBoYW5kbGUgPG1vPiBvcGVyYXRvcnMgd2l0aCBtdWx0aXBsZSBjaGFyYWN0ZXJz
IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODI4KS4KKyAgICBy
ZXR1cm4gdGV4dENvbnRlbnQubGVuZ3RoKCkgPT0gMSA/IHRleHRDb250ZW50WzBdIDogMDsKK30K
KworVUNoYXIgTWF0aE1MT3BlcmF0b3JFbGVtZW50OjpvcGVyYXRvclRleHQoKQoreworICAgIGlm
ICghbV9vcGVyYXRvclRleHQuZGlydHkpCisgICAgICAgIHJldHVybiBtX29wZXJhdG9yVGV4dC52
YWx1ZTsKKworICAgIG1fb3BlcmF0b3JUZXh0LnZhbHVlID0gcGFyc2VPcGVyYXRvclRleHQodGV4
dENvbnRlbnQoKSk7CisgICAgbV9vcGVyYXRvclRleHQuZGlydHkgPSBmYWxzZTsKKyAgICByZXR1
cm4gbV9vcGVyYXRvclRleHQudmFsdWU7Cit9CisKK3ZvaWQgTWF0aE1MT3BlcmF0b3JFbGVtZW50
OjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoYW5nZSkKK3sKKyAgICBtX29w
ZXJhdG9yVGV4dC5kaXJ0eSA9IHRydWU7CisgICAgTWF0aE1MVGV4dEVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZChjaGFuZ2UpOworfQorCiB2b2lkIE1hdGhNTE9wZXJhdG9yRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSkKIHsKICAgICBpZiAoKG5hbWUgPT0gc3RyZXRjaHlBdHRyIHx8IG5hbWUgPT0gbHNwYWNl
QXR0ciB8fCBuYW1lID09IHJzcGFjZUF0dHIgfHwgbmFtZSA9PSBtb3ZhYmxlbGltaXRzQXR0cikg
JiYgcmVuZGVyZXIoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhN
TE9wZXJhdG9yRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE9wZXJhdG9y
RWxlbWVudC5oCmluZGV4IGU4NzdhMGY2Y2I5ZDQxNmI1OTBkYzM0N2Y2NGU2N2ViMzRlODc3OWYu
LjMwMWMzZDNhNmFjM2Q5MmZjYWQ3YWY4ZWM4ZTJhZGJjOWNjNGYxODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxPcGVyYXRvckVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MT3BlcmF0b3JFbGVtZW50LmgKQEAgLTMzLDEwICszMywyMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBNYXRoTUxPcGVyYXRvckVsZW1lbnQgZmluYWwg
OiBwdWJsaWMgTWF0aE1MVGV4dEVsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TWF0
aE1MT3BlcmF0b3JFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQmKTsKKyAgICBzdGF0aWMgVUNoYXIgcGFyc2VPcGVyYXRvclRleHQoY29uc3QgU3Ry
aW5nJik7CisgICAgVUNoYXIgb3BlcmF0b3JUZXh0KCk7CisKIHByaXZhdGU6CiAgICAgTWF0aE1M
T3BlcmF0b3JFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Jik7
CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5k
ZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBmaW5hbDsKKyAgICB2b2lkIGNo
aWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYpIGZpbmFsOwogICAgIHZvaWQgcGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFs
OworCisgICAgc3RydWN0IE9wZXJhdG9yVGV4dCB7CisgICAgICAgIFVDaGFyIHZhbHVlOworICAg
ICAgICBib29sIGRpcnR5IHsgdHJ1ZSB9OworICAgIH07CisgICAgT3BlcmF0b3JUZXh0IG1fb3Bl
cmF0b3JUZXh0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01h
dGhNTFRleHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MVGV4dEVsZW1l
bnQuaAppbmRleCA5OWFjZTcxYTBlOGI0YWRhMDRjZTQ0OTZiZjQ4OTBhMWM0NWNmMWViLi44NDQ5
ZDI0ZmJjNjE2YTIyNTYwMDBmOGUxNTkzZWMyNTk4YjViMDA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MVGV4dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9t
YXRobWwvTWF0aE1MVGV4dEVsZW1lbnQuaApAQCAtMzksMTMgKzM5LDEzIEBAIHB1YmxpYzoKIAog
cHJvdGVjdGVkOgogICAgIE1hdGhNTFRleHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50Jik7CisgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRD
aGFuZ2UmKSBvdmVycmlkZTsKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBS
ZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxl
JiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwogICAgIGJvb2wgY2hpbGRT
aG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBOb2RlJikgY29uc3QgZmluYWw7CiAKLSAgICB2b2lk
IGNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYpIGZpbmFsOwogICAgIHZvaWQgZGlk
QXR0YWNoUmVuZGVyZXJzKCkgZmluYWw7CiAKICAgICBib29sIGlzUHJlc2VudGF0aW9uTWF0aE1M
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAppbmRleCBlNWEx
YjE4YzZmMmJmZGNmOGMwZDIzZTUxOTRlOTk0YjJkMjEyM2ZmLi4yNjlhN2FmZDhhOGE2MWZiOTQ2
M2JjM2ZlMmMyOGVjMzE5YTE4Y2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcApAQCAtNTEsNyArNTEsNiBA
QCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6UmVuZGVyTWF0aE1MT3BlcmF0b3IoTWF0aE1MT3BlcmF0
b3JFbGVtZW50JiBlbGVtZW50LCBSZW5kZQogICAgIDogUmVuZGVyTWF0aE1MVG9rZW4oZWxlbWVu
dCwgV1RGTW92ZShzdHlsZSkpCiAgICAgLCBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKDAp
CiAgICAgLCBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUoMCkKLSAgICAsIG1fdGV4dENvbnRl
bnQoMCkKICAgICAsIG1faXNWZXJ0aWNhbCh0cnVlKQogewogICAgIHVwZGF0ZVRva2VuQ29udGVu
dCgpOwpAQCAtNjksNiArNjgsMTYgQEAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlJlbmRlck1hdGhN
TE9wZXJhdG9yKERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHkKICAgICB1cGRh
dGVUb2tlbkNvbnRlbnQob3BlcmF0b3JTdHJpbmcpOwogfQogCitNYXRoTUxPcGVyYXRvckVsZW1l
bnQmIFJlbmRlck1hdGhNTE9wZXJhdG9yOjplbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TWF0aE1MT3BlcmF0b3JFbGVtZW50Jj4obm9kZUZvck5vbkFub255bW91cygp
KTsKK30KKworVUNoYXIgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRleHRDb250ZW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaXNBbm9ueW1vdXMoKSA/IG1fdGV4dENvbnRlbnQgOiBlbGVtZW50KCku
b3BlcmF0b3JUZXh0KCk7Cit9CisKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJh
dG9yRmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnIGZsYWcs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7CiAgICAgc2V0T3BlcmF0b3JGbGFnRnJvbUF0
dHJpYnV0ZVZhbHVlKGZsYWcsIGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKG5hbWUpKTsKQEAgLTEwMSw3ICsxMTAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9y
OjpzZXRPcGVyYXRvclByb3BlcnRpZXNGcm9tT3BEaWN0RW50cnkoY29uc3QgTWF0aE1MT3Blcgog
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCkKIHsKICAg
ICAvLyBXZSBkZXRlcm1pbmUgdGhlIHN0cmV0Y2ggZGlyZWN0aW9uIChkZWZhdWx0IGlzIHZlcnRp
Y2FsKS4KLSAgICBtX2lzVmVydGljYWwgPSBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OmlzVmVy
dGljYWwobV90ZXh0Q29udGVudCk7CisgICAgbV9pc1ZlcnRpY2FsID0gTWF0aE1MT3BlcmF0b3JE
aWN0aW9uYXJ5Ojppc1ZlcnRpY2FsKHRleHRDb250ZW50KCkpOwogCiAgICAgLy8gV2UgZGV0ZXJt
aW5lIHRoZSBmb3JtIG9mIHRoZSBvcGVyYXRvci4KICAgICBib29sIGV4cGxpY2l0Rm9ybSA9IHRy
dWU7CkBAIC0xMzcsMTQgKzE0NiwxNCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRP
cGVyYXRvclByb3BlcnRpZXMoKQogICAgIG1fbWluU2l6ZSA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KS5zaXplKCk7IC8vIFRoaXMgc2V0cyBtaW5zaXplIHRvICIxZW0iLgogICAgIG1fbWF4U2l6ZSA9
IGludE1heEZvckxheW91dFVuaXQ7IC8vIFRoaXMgc2V0cyBtYXhzaXplIHRvICJpbmZpbml0eSIu
CiAKLSAgICBpZiAobV90ZXh0Q29udGVudCkgeworICAgIGlmICh0ZXh0Q29udGVudCgpKSB7CiAg
ICAgICAgIC8vIFRoZW4gd2UgdHJ5IHRvIGZpbmQgdGhlIGRlZmF1bHQgdmFsdWVzIGZyb20gdGhl
IG9wZXJhdG9yIGRpY3Rpb25hcnkuCi0gICAgICAgIGlmIChjb25zdCBNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OkVudHJ5KiBlbnRyeSA9IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Z2V0RW50
cnkobV90ZXh0Q29udGVudCwgbV9vcGVyYXRvckZvcm0pKQorICAgICAgICBpZiAoY29uc3QgTWF0
aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSogZW50cnkgPSBNYXRoTUxPcGVyYXRvckRpY3Rp
b25hcnk6OmdldEVudHJ5KHRleHRDb250ZW50KCksIG1fb3BlcmF0b3JGb3JtKSkKICAgICAgICAg
ICAgIHNldE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERpY3RFbnRyeShlbnRyeSk7CiAgICAgICAg
IGVsc2UgaWYgKCFleHBsaWNpdEZvcm0pIHsKICAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3Qg
ZmluZCB0aGUgZGVzaXJlZCBvcGVyYXRvciBmb3JtIGFuZCBpZiBpdCB3YXMgbm90IHNldCBleHBs
aWNpdGVseSwgd2UgdXNlIHRoZSBmaXJzdCBvbmUgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogSW5m
aXgsIFByZWZpeCwgUG9zdGZpeC4KICAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gaGFuZGxlIGJh
ZCBNYXRoTUwgbWFya3VwIHdpdGhvdXQgZXhwbGljaXQgPG1yb3c+IGRlbGltaXRlcnMgbGlrZSAi
PG1vPig8L21vPjxtaT5hPC9taT48bW8+KTwvbW8+PG1vPig8L21vPjxtaT5iPC9taT48bW8+KTwv
bW8+IiB3aGVyZSB0aGUgaW5uZXIgcGFyZW50aGVzaXMgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVk
IGluZml4LgotICAgICAgICAgICAgaWYgKGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
RW50cnkqIGVudHJ5ID0gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpnZXRFbnRyeShtX3RleHRD
b250ZW50KSkgeworICAgICAgICAgICAgaWYgKGNvbnN0IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFy
eTo6RW50cnkqIGVudHJ5ID0gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpnZXRFbnRyeSh0ZXh0
Q29udGVudCgpKSkgewogICAgICAgICAgICAgICAgIG1fb3BlcmF0b3JGb3JtID0gc3RhdGljX2Nh
c3Q8TWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGb3JtPihlbnRyeS0+Zm9ybSk7IC8vIFdlIG92
ZXJyaWRlIHRoZSBmb3JtIHByZXZpb3VzbHkgZGV0ZXJtaW5lZC4KICAgICAgICAgICAgICAgICBz
ZXRPcGVyYXRvclByb3BlcnRpZXNGcm9tT3BEaWN0RW50cnkoZW50cnkpOwogICAgICAgICAgICAg
fQpAQCAtMjQ2LDcgKzI1NSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAgcHJlZmVycmVkV2lkdGggPSBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aDsKICAgICAgICAgaWYgKGlzSW52aXNpYmxlT3BlcmF0b3IoKSkg
ewogICAgICAgICAgICAgLy8gSW4gc29tZSBmb250cywgZ2x5cGhzIGZvciBpbnZpc2libGUgb3Bl
cmF0b3JzIGhhdmUgbm9uemVybyB3aWR0aC4gQ29uc2VxdWVudGx5LCB3ZSBzdWJ0cmFjdCB0aGF0
IHdpZHRoIGhlcmUgdG8gYXZvaWQgd2lkZSBnYXBzLgotICAgICAgICAgICAgR2x5cGhEYXRhIGRh
dGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENv
bnRlbnQsIGZhbHNlKTsKKyAgICAgICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250
Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcih0ZXh0Q29udGVudCgpLCBmYWxzZSk7CiAg
ICAgICAgICAgICBmbG9hdCBnbHlwaFdpZHRoID0gZGF0YS5mb250ID8gZGF0YS5mb250LT53aWR0
aEZvckdseXBoKGRhdGEuZ2x5cGgpIDogMDsKICAgICAgICAgICAgIEFTU0VSVChnbHlwaFdpZHRo
IDw9IHByZWZlcnJlZFdpZHRoKTsKICAgICAgICAgICAgIHByZWZlcnJlZFdpZHRoIC09IGdseXBo
V2lkdGg7CkBAIC0yOTIsMTUgKzMwMSw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9nCiAgICAg
Y2xlYXJOZWVkc0xheW91dCgpOwogfQogCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpyZWJ1
aWxkVG9rZW5Db250ZW50KGNvbnN0IFN0cmluZyYgb3BlcmF0b3JTdHJpbmcpCit2b2lkIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpyZWJ1aWxkVG9rZW5Db250ZW50KCkKIHsKLSAgICAvLyBXZSBjb2xs
YXBzZSB0aGUgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSB0aGUgaHlwaGVucyBieSBtaW51cyBzaWdu
cy4KLSAgICBBdG9taWNTdHJpbmcgdGV4dENvbnRlbnQgPSBvcGVyYXRvclN0cmluZy5zdHJpcFdo
aXRlU3BhY2UoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKS5yZXBsYWNlKGh5cGhlbk1pbnVzLCBtaW51
c1NpZ24pLmltcGwoKTsKLQotICAgIC8vIFdlIHZlcmlmeSB3aGV0aGVyIHRoZSBvcGVyYXRvciB0
ZXh0IGNhbiBiZSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBVQ2hhci4KLSAgICAvLyBGSVhNRTog
VGhpcyBkb2VzIG5vdCBoYW5kbGUgc3Vycm9nYXRlIHBhaXJzIChodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMjk2KS4KLSAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5v
dCBoYW5kbGUgPG1vPiBvcGVyYXRvcnMgd2l0aCBtdWx0aXBsZSBjaGFyYWN0ZXJzIChodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODI4KS4KLSAgICBtX3RleHRDb250
ZW50ID0gdGV4dENvbnRlbnQubGVuZ3RoKCkgPT0gMSA/IHRleHRDb250ZW50WzBdIDogMDsKICAg
ICBzZXRPcGVyYXRvclByb3BlcnRpZXMoKTsKIAogICAgIGlmICh1c2VNYXRoT3BlcmF0b3IoKSkg
ewpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnJlYnVpbGRU
b2tlbkNvbnRlbnQoY29uc3QgU3RyaW5nJiBvcGVyYXRvclN0cmluZykKICAgICAgICAgICAgIHR5
cGUgPSBNYXRoT3BlcmF0b3I6OlR5cGU6OkRpc3BsYXlPcGVyYXRvcjsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgdHlwZSA9IG1faXNWZXJ0aWNhbCA/IE1hdGhPcGVyYXRvcjo6VHlwZTo6VmVy
dGljYWxPcGVyYXRvciA6IE1hdGhPcGVyYXRvcjo6VHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yOwot
ICAgICAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihzdHlsZSgpLCBtX3RleHRDb250ZW50
LCB0eXBlKTsKKyAgICAgICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3Ioc3R5bGUoKSwgdGV4
dENvbnRlbnQoKSwgdHlwZSk7CiAgICAgfQogCiAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7CkBAIC0zMjAsMTQgKzMyMiwxNSBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpyZWJ1aWxkVG9rZW5Db250ZW50KGNvbnN0IFN0cmluZyYgb3BlcmF0b3JTdHJpbmcpCiB2
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVUb2tlbkNvbnRlbnQoY29uc3QgU3RyaW5n
JiBvcGVyYXRvclN0cmluZykKIHsKICAgICBBU1NFUlQoaXNBbm9ueW1vdXMoKSk7Ci0gICAgcmVi
dWlsZFRva2VuQ29udGVudChvcGVyYXRvclN0cmluZyk7CisgICAgbV90ZXh0Q29udGVudCA9IE1h
dGhNTE9wZXJhdG9yRWxlbWVudDo6cGFyc2VPcGVyYXRvclRleHQob3BlcmF0b3JTdHJpbmcpOwor
ICAgIHJlYnVpbGRUb2tlbkNvbnRlbnQoKTsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6dXBkYXRlVG9rZW5Db250ZW50KCkKIHsKICAgICBBU1NFUlQoIWlzQW5vbnltb3VzKCkpOwog
ICAgIFJlbmRlck1hdGhNTFRva2VuOjp1cGRhdGVUb2tlbkNvbnRlbnQoKTsKLSAgICByZWJ1aWxk
VG9rZW5Db250ZW50KGVsZW1lbnQoKS50ZXh0Q29udGVudCgpKTsKKyAgICByZWJ1aWxkVG9rZW5D
b250ZW50KCk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZUZyb21FbGVt
ZW50KCkKQEAgLTM0Myw3ICszNDYsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRh
dGVPcGVyYXRvclByb3BlcnRpZXMoKQogCiBib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzaG91
bGRBbGxvd1N0cmV0Y2hpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtX3RleHRDb250ZW50ICYm
IChoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTdHJldGNoeSkgfHwg
aXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7CisgICAgcmV0dXJuIHRleHRDb250ZW50
KCkgJiYgKGhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlN0cmV0Y2h5
KSB8fCBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6dXNlTWF0aE9wZXJhdG9yKCkgY29uc3QKQEAgLTM1Miw3ICszNTUsNyBA
QCBib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1c2VNYXRoT3BlcmF0b3IoKSBjb25zdAogICAg
IC8vIDEpIFN0cmV0Y2h5IGFuZCBsYXJnZSBvcGVyYXRvcnMsIHNpbmNlIHRoZXkgcmVxdWlyZSBz
cGVjaWFsIHBhaW50aW5nLgogICAgIC8vIDIpIFRoZSBtaW51cyBzaWduLCBzaW5jZSBpdCBjYW4g
YmUgb2J0YWluZWQgZnJvbSBhIGh5cGhlbiBpbiB0aGUgRE9NLgogICAgIC8vIDMpIFRoZSBhbm9u
eW1vdXMgb3BlcmF0b3JzIGNyZWF0ZWQgYnkgbWZlbmNlZCwgc2luY2UgdGhleSBkbyBub3QgaGF2
ZSB0ZXh0IGNvbnRlbnQgaW4gdGhlIERPTS4KLSAgICByZXR1cm4gc2hvdWxkQWxsb3dTdHJldGNo
aW5nKCkgfHwgbV90ZXh0Q29udGVudCA9PSBtaW51c1NpZ24gfHwgaXNBbm9ueW1vdXMoKTsKKyAg
ICByZXR1cm4gc2hvdWxkQWxsb3dTdHJldGNoaW5nKCkgfHwgdGV4dENvbnRlbnQoKSA9PSBtaW51
c1NpZ24gfHwgaXNBbm9ueW1vdXMoKTsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuaAppbmRleCAwM2JjZTI3MWFhZTE0ZmI5N2I0MmM3YTc3NjA3MGU0
YmRmNzIwNWMxLi4yMDc1ZDIzMzE0ZmY2MzQ4ZWE1NWQ4MjUyMmNkNmYwZjc1YzlmNTdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxP
cGVyYXRvci5oCkBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIFJlbmRlck1hdGhNTE9wZXJhdG9yIGZp
bmFsIDogcHVibGljIFJlbmRlck1hdGhNTFRva2VuIHsKIHB1YmxpYzoKICAgICBSZW5kZXJNYXRo
TUxPcGVyYXRvcihNYXRoTUxPcGVyYXRvckVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKICAgICBS
ZW5kZXJNYXRoTUxPcGVyYXRvcihEb2N1bWVudCYsIFJlbmRlclN0eWxlJiYsIGNvbnN0IFN0cmlu
ZyYgb3BlcmF0b3JTdHJpbmcsIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Rm9ybSwgdW5zaWdu
ZWQgc2hvcnQgZmxhZ3MgPSAwKTsKKyAgICBNYXRoTUxPcGVyYXRvckVsZW1lbnQmIGVsZW1lbnQo
KSBjb25zdDsKIAogICAgIHZvaWQgc3RyZXRjaFRvKExheW91dFVuaXQgaGVpZ2h0QWJvdmVCYXNl
bGluZSwgTGF5b3V0VW5pdCBkZXB0aEJlbG93QmFzZWxpbmUpOwogICAgIHZvaWQgc3RyZXRjaFRv
KExheW91dFVuaXQgd2lkdGgpOwpAQCAtNTYsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1
cGRhdGVUb2tlbkNvbnRlbnQoKSBmaW5hbDsKICAgICB2b2lkIHVwZGF0ZU9wZXJhdG9yUHJvcGVy
dGllcygpOwogICAgIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKSBmaW5hbDsKLSAgICBVQ2hhciB0
ZXh0Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRlbnQ7IH0KKyAgICB2aXJ0dWFs
IFVDaGFyIHRleHRDb250ZW50KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHNldE9wZXJhdG9yUHJvcGVydGllcygpOwpAQCAtNzIsMTEgKzczLDExIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwYWludENoaWxkcmVuKFBhaW50SW5mbyYgZm9yU2VsZiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBQYWludEluZm8mIGZvckNoaWxkLCBib29sIHVzZVByaW50UmVjdCkgZmluYWw7CiAgICAg
Ym9vbCBpc1JlbmRlck1hdGhNTE9wZXJhdG9yKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIC8vIFRoZSBmb2xsb3dpbmcgb3BlcmF0b3JzIGFyZSBpbnZpc2libGU6IFUrMjA2MSBG
VU5DVElPTiBBUFBMSUNBVElPTiwgVSsyMDYyIElOVklTSUJMRSBUSU1FUywgVSsyMDYzIElOVklT
SUJMRSBTRVBBUkFUT1IsIFUrMjA2NCBJTlZJU0lCTEUgUExVUy4KLSAgICBib29sIGlzSW52aXNp
YmxlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiAweDIwNjEgPD0gbV90ZXh0Q29udGVudCAmJiBt
X3RleHRDb250ZW50IDw9IDB4MjA2NDsgfQorICAgIGJvb2wgaXNJbnZpc2libGVPcGVyYXRvcigp
IHsgcmV0dXJuIDB4MjA2MSA8PSB0ZXh0Q29udGVudCgpICYmIHRleHRDb250ZW50KCkgPD0gMHgy
MDY0OyB9CiAKICAgICBPcHRpb25hbDxpbnQ+IGZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QgZmlu
YWw7CiAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3IqIHVuZW1iZWxsaXNoZWRPcGVyYXRvcigpIGZp
bmFsIHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2b2lkIHJlYnVpbGRUb2tlbkNvbnRlbnQoY29uc3Qg
U3RyaW5nJiBvcGVyYXRvclN0cmluZyk7CisgICAgdm9pZCByZWJ1aWxkVG9rZW5Db250ZW50KCk7
CiAKICAgICBib29sIHNob3VsZEFsbG93U3RyZXRjaGluZygpIGNvbnN0OwogICAgIGJvb2wgdXNl
TWF0aE9wZXJhdG9yKCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="308326"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>