<?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>155107</bug_id>
          
          <creation_ts>2016-03-07 03:04:57 -0800</creation_ts>
          <short_desc>defineElement should upgrade existing unresolved custom elements</short_desc>
          <delta_ts>2016-03-09 18:32:59 -0800</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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>154907</blocked>
    
    <blocked>155108</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1171553</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-07 03:04:57 -0800</bug_when>
    <thetext>We should queue up the existing unresolved elements and upgrade them when defineElement is called asynchronously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171554</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-03-07 03:06:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/25004535&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171555</commentid>
    <comment_count>2</comment_count>
      <attachid>273170</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-07 03:23:27 -0800</bug_when>
    <thetext>Created attachment 273170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171558</commentid>
    <comment_count>3</comment_count>
      <attachid>273170</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-07 03:32:46 -0800</bug_when>
    <thetext>Comment on attachment 273170
Patch

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        exclusive with isUnresolvedCustomElement().

This Node flag will be used in the bug 155108 when I implement :unresolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172059</commentid>
    <comment_count>4</comment_count>
      <attachid>273170</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-08 09:38:07 -0800</bug_when>
    <thetext>Comment on attachment 273170
Patch

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

&gt; Source/WebCore/dom/CustomElementDefinitions.cpp:84
&gt; +    Vector&lt;RefPtr&lt;Element&gt;&gt; list;
&gt; +    list.swap(candidateList-&gt;value);

I think we now prefer to use WTFMove instead of swapping for the “take” idiom in cases like this.

&gt; Source/WebCore/dom/CustomElementDefinitions.cpp:94
&gt; +    ASSERT(m_upgradeCandidatesMap.find(localName) == m_upgradeCandidatesMap.end());

More elegant to use &quot;contains&quot; here.

&gt; Source/WebCore/dom/CustomElementDefinitions.cpp:99
&gt; +    auto addResult = m_upgradeCandidatesMap.add(candidate.localName(), Vector&lt;RefPtr&lt;Element&gt;&gt;());

May be more efficient to use ensure instead of add here.

&gt; Source/WebCore/dom/Document.cpp:1099
&gt; +    // FIXME: Should we check the non-existance of prefix?

Type &quot;existence&quot; is the correct spelling.

Would be nicer for the comment to be a little more explicit about what this is. Is it a performance optimization comment? A correctness comment?

&gt; Source/WebCore/dom/Node.h:277
&gt; +    void setCustomElementIsResolved()
&gt; +    {
&gt; +        clearFlag(IsEditingTextOrUnresolvedCustomElementFlag);
&gt; +        setFlag(IsCustomElement);
&gt; +    }

Unpleasant to have these multi-line functions in the class definition. Makes it harder and harder to read it and get the overview. I prefer to put the inline function bodies outside the class definition to make the class easier to read.

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:676
&gt; +        auto* definitions = ownerDocument.customElementDefinitions();

I suggest moving this inside the if, after checking customElementInterface for null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172888</commentid>
    <comment_count>5</comment_count>
      <attachid>273170</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-09 16:58:39 -0800</bug_when>
    <thetext>Comment on attachment 273170
Patch

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

&gt;&gt; Source/WebCore/dom/CustomElementDefinitions.cpp:84
&gt;&gt; +    list.swap(candidateList-&gt;value);
&gt; 
&gt; I think we now prefer to use WTFMove instead of swapping for the “take” idiom in cases like this.

Fixed.

&gt;&gt; Source/WebCore/dom/CustomElementDefinitions.cpp:94
&gt;&gt; +    ASSERT(m_upgradeCandidatesMap.find(localName) == m_upgradeCandidatesMap.end());
&gt; 
&gt; More elegant to use &quot;contains&quot; here.

Fixed.

&gt;&gt; Source/WebCore/dom/CustomElementDefinitions.cpp:99
&gt;&gt; +    auto addResult = m_upgradeCandidatesMap.add(candidate.localName(), Vector&lt;RefPtr&lt;Element&gt;&gt;());
&gt; 
&gt; May be more efficient to use ensure instead of add here.

Fixed.

&gt;&gt; Source/WebCore/dom/Document.cpp:1099
&gt;&gt; +    // FIXME: Should we check the non-existance of prefix?
&gt; 
&gt; Type &quot;existence&quot; is the correct spelling.
&gt; 
&gt; Would be nicer for the comment to be a little more explicit about what this is. Is it a performance optimization comment? A correctness comment?

Revised the comment to: &quot;should we also check the equality of prefix between the custom element and name?&quot;

&gt;&gt; Source/WebCore/dom/Node.h:277
&gt;&gt; +    }
&gt; 
&gt; Unpleasant to have these multi-line functions in the class definition. Makes it harder and harder to read it and get the overview. I prefer to put the inline function bodies outside the class definition to make the class easier to read.

Moved to the end of the file.

&gt;&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:676
&gt;&gt; +        auto* definitions = ownerDocument.customElementDefinitions();
&gt; 
&gt; I suggest moving this inside the if, after checking customElementInterface for null.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172938</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-09 18:32:59 -0800</bug_when>
    <thetext>Committed r197917: &lt;http://trac.webkit.org/changeset/197917&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273170</attachid>
            <date>2016-03-07 03:23:27 -0800</date>
            <delta_ts>2016-03-08 09:38:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155107-20160307032313.patch</filename>
            <type>text/plain</type>
            <size>23583</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzY3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDE2LTAzLTA3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIGRlZmluZUVsZW1lbnQgc2hvdWxk
IHVwZ3JhZGUgZXhpc3RpbmcgdW5yZXNvbHZlZCBjdXN0b20gZWxlbWVudHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTEwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRoZSBzdXBwb3J0IGZv
ciB1cGdyYWRpbmcgZXhpc3RpbmcgdW5yZXNvbHZlZCBjdXN0b20gZWxlbWVudHMgd2hlbiBkZWZp
bmVFbGVtZW50IGlzIGNhbGxlZC4KKworICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlv
biB1cGdyYWRlcyBlbGVtZW50cyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGNyZWF0ZWQgYW5kIGhh
cyB0aGUgaXNzdWUgdGhhdAorICAgICAgICBpdCBrZWVwcyBhY2N1bXVsYXRpbmcgYWxsIGVsZW1l
bnRzIHdpdGggYSBoeXBoZW4gaW4gaXRzIG5hbWUgdW50aWwgZGVmaW5lRWxlbWVudCBpcyBjYWxs
ZWQgYXMKKyAgICAgICAgZG9jdW1lbnRlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYmNv
bXBvbmVudHMvaXNzdWVzLzQxOQorCisgICAgICAgIFRoaXMgcGF0Y2ggcmUtcHVycG9zZXMgSXNF
ZGl0aW5nVGV4dEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSBpcyBhbiB1bnJlc29sdmVk
IGN1c3RvbSBlbGVtZW50LgorICAgICAgICBTaW5jZSBpc0VkaXRpbmdUZXh0KCkgaXMgb25seSBj
YWxsZWQgaW4gdGV4dFJlbmRlcmVySXNOZWVkZWQgb25seSBvbiBUZXh0IG5vZGVzLCBpdCdzIG11
dHVhbGx5CisgICAgICAgIGV4Y2x1c2l2ZSB3aXRoIGlzVW5yZXNvbHZlZEN1c3RvbUVsZW1lbnQo
KS4KKworICAgICAgICBUaGUgbGlzdCBvZiB1bnJlc29sdmVkIGN1c3RvbSBlbGVtZW50cyBpcyBr
ZXB0IGluIG1fdXBncmFkZUNhbmRpZGF0ZXNNYXAsIGEgaGFzaCBtYXAgb2YgZWxlbWVudCBuYW1l
cworICAgICAgICB0byB0aGUgbGlzdCBvZiB1bnJlc29sdmVkIGVsZW1lbnRzIHdpdGggdGhhdCBu
YW1lLgorCisgICAgICAgIEluIGFkZGl0aW9uLCBhZGRlZCB0aGUgbG9naWMgdG8gdXNlIEhUTUxF
bGVtZW50IGFzIHRoZSBpbnRlcmZhY2UgZm9yIHVucmVzb2x2ZWQgY3VzdG9tIGVsZW1lbnQgaW5z
dGVhZAorICAgICAgICBvZiBIVE1MVW5rbm93bkVsZW1lbnQuCisKKyAgICAgICAgVGVzdDogZmFz
dC9jdXN0b20tZWxlbWVudHMvdXBncmFkaW5nL3VwZ3JhZGluZy1wYXJzZXItY3JlYXRlZC1lbGVt
ZW50Lmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFj
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnVwZ3Jh
ZGVFbGVtZW50KTogQ2xlYXIgdGhlIGZsYWcuCisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1
bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RvY3VtZW50OjpkZWZpbmVFbGVt
ZW50KTogU2V0IHRoZSB1bmlxdWUgcHJpdmF0ZSBuYW1lIHRvIGtlZXAgdGhlIGludGVyZmFjZSBh
bGl2ZSBiZWZvcmUKKyAgICAgICAgY2FsbGluZyBhZGRFbGVtZW50RGVmaW5pdGlvbiBhcyB0aGUg
Y2FsbCBjYW4gbm93IGludm9rZSBhdXRob3Igc2NyaXB0cy4KKyAgICAgICAgKiBkb20vQ3VzdG9t
RWxlbWVudERlZmluaXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRE
ZWZpbml0aW9uczo6YWRkRWxlbWVudERlZmluaXRpb24pOiBVcGdyYWRlIGV4aXN0aW5nIHVucmVz
b2x2ZWQgZWxlbWVudHMga2VwdAorICAgICAgICBpbiBtX3VwZ3JhZGVDYW5kaWRhdGVzTWFwLgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudERlZmluaXRpb25zOjphZGRVcGdyYWRlQ2Fu
ZGlkYXRlKTogQWRkZWQuCisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnREZWZpbml0aW9ucy5o
OgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVI
VE1MRWxlbWVudFdpdGhOYW1lVmFsaWRhdGlvbik6IEFkZGVkIHRoZSBjb2RlIHRvIGFkZCB0aGUg
dW5yZXNvbHZlZCBjdXN0b20gZWxlbWVudHMKKyAgICAgICAgdG8gdGhlIHVwZ3JhZGUgY2FuZGlk
YXRlcyBtYXAuIEFsc28gaW5zdGFudGlhdGUgaXQgYXMgSFRNTEVsZW1lbnQgaW5zdGVhZCBvZiBI
VE1MVW5rbm93bkVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGYWxsYmFja0hUTUxF
bGVtZW50KTogRGl0dG8uCisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnNldElzQ3VzdG9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc1Vu
cmVzb2x2ZWRDdXN0b21FbGVtZW50KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpz
ZXRJc1VucmVzb2x2ZWRDdXN0b21FbGVtZW50KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpzZXRDdXN0b21FbGVtZW50SXNSZXNvbHZlZCk6IEFkZGVkLiBDbGVhcnMgSXNFZGl0aW5n
VGV4dE9yVW5yZXNvbHZlZEN1c3RvbUVsZW1lbnRGbGFnCisgICAgICAgIGFuZCBzZXRzIElzQ3Vz
dG9tRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRWRpdGluZ1RleHQpOiBDaGVj
ayBib3RoIElzRWRpdGluZ1RleHRPclVucmVzb2x2ZWRDdXN0b21FbGVtZW50RmxhZyBhbmQgSXNU
ZXh0RmxhZworICAgICAgICBmb3Igc2FmZXR5IGV2ZW4gdGhvdWdoIGl0J3MgY3VycmVudGx5IG9u
bHkgdXNlZCBpbiB0ZXh0UmVuZGVyZXJJc05lZWRlZCB3aGljaCB0YWtlcyBUZXh0Ji4KKyAgICAg
ICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKGRlZmF1bHRQYXJhbWV0ZXJzSGFzaCk6
IEFkZGVkIGN1c3RvbUVsZW1lbnRJbnRlcmZhY2VOYW1lIGFzIGEgcGFyYW1ldGVyLgorICAgICAg
ICAocHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGUpOiBHZW5lcmF0ZSB0aGUgY29kZSB0byB1c2Ug
Y3VzdG9tRWxlbWVudEludGVyZmFjZU5hbWUgd2hlbiB0aGUgZWxlbWVudAorICAgICAgICBmb3Ig
d2hpY2ggdGhlIHdyYXBwZXIgaXMgY3JlYXRlZCBoYXMgaXNVbnJlc29sdmVkQ3VzdG9tRWxlbWVu
dCBmbGFnIHNldC4KKyAgICAgICAgKiBodG1sL0hUTUxUYWdOYW1lcy5pbjogVXNlIEhUTUxFbGVt
ZW50IGZvciB1bnJlc29sdmVkIGN1c3RvbSBlbGVtZW50cy4KKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJmYWNl
KTogQWRkZWQgdGhlIGNvZGUgdG8gYWRkCisgICAgICAgIHRoZSB1bnJlc29sdmVkIGN1c3RvbSBl
bGVtZW50cyB0byB0aGUgdXBncmFkZSBjYW5kaWRhdGVzIG1hcC4gQWxzbyBpbnN0YW50aWF0ZSBp
dCBhcyBIVE1MRWxlbWVudCBpbnN0ZWFkCisgICAgICAgIG9mIEhUTUxVbmtub3duRWxlbWVudC4g
CisKIDIwMTYtMDMtMDYgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0pTQ10gSW1wcm92ZSBjb2RlZ2VuIG9mIENvbXBhcmUgYW5kIFRlc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50
SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMTk3NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDcgKzEwNCw3IEBAIFJlZlB0cjxFbGVtZW50PiBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UKIAog
dm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnVwZ3JhZGVFbGVtZW50KEVsZW1lbnQmIGVs
ZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQuaXNDdXN0b21FbGVtZW50KCkpOworICAgIEFT
U0VSVChlbGVtZW50LmlzVW5yZXNvbHZlZEN1c3RvbUVsZW1lbnQoKSk7CiAgICAgaWYgKCFjYW5J
bnZva2VDYWxsYmFjaygpKQogICAgICAgICByZXR1cm47CiAKQEAgLTE0Nyw2ICsxNDcsNyBAQCB2
b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6dXBncmFkZUVsCiAgICAgICAgIHRocm93SW52
YWxpZFN0YXRlRXJyb3IoKnN0YXRlLCAiQ3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3IgZmFpbGVk
IHRvIHVwZ3JhZGUgYW4gZWxlbWVudCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIHdy
YXBwZWRFbGVtZW50LT5zZXRDdXN0b21FbGVtZW50SXNSZXNvbHZlZCgpOwogICAgIEFTU0VSVCh3
cmFwcGVkRWxlbWVudC0+aXNDdXN0b21FbGVtZW50KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTk3
NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMSArMTgwLDEyIEBAIEpTVmFsdWUgSlNEb2N1bWVudDo6
ZGVmaW5lRWxlbWVudChFeGVjU3QKICAgICAvLyBGSVhNRTogMTMuIExldCBkZXRhY2hlZENhbGxi
YWNrIGJlIEdldChwcm90b3R5cGUsICJkZXRhY2hlZENhbGxiYWNrIikuIFJldGhyb3cgYW55IGV4
Y2VwdGlvbnMuCiAgICAgLy8gRklYTUU6IDE0LiBMZXQgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNr
IGJlIEdldChwcm90b3R5cGUsICJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siKS4gUmV0aHJvdyBh
bnkgZXhjZXB0aW9ucy4KIAotICAgIFF1YWxpZmllZE5hbWUgbmFtZShudWxsQXRvbSwgdGFnTmFt
ZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSk7Ci0gICAgZGVmaW5pdGlvbnMuYWRkRWxl
bWVudERlZmluaXRpb24oSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpjcmVhdGUobmFtZSwgb2Jq
ZWN0LCBnbG9iYWxPYmplY3QoKSkpOwogICAgIFByaXZhdGVOYW1lIHVuaXF1ZVByaXZhdGVOYW1l
OwogICAgIGdsb2JhbE9iamVjdCgpLT5wdXREaXJlY3QoZ2xvYmFsT2JqZWN0KCktPnZtKCksIHVu
aXF1ZVByaXZhdGVOYW1lLCBvYmplY3QpOwogCisgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxB
dG9tLCB0YWdOYW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKKyAgICBkZWZpbml0
aW9ucy5hZGRFbGVtZW50RGVmaW5pdGlvbihKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OmNyZWF0
ZShuYW1lLCBvYmplY3QsIGdsb2JhbE9iamVjdCgpKSk7CisKICAgICAvLyBGSVhNRTogMTcuIExl
dCBtYXAgYmUgcmVnaXN0cnkncyB1cGdyYWRlIGNhbmRpZGF0ZXMgbWFwLgogICAgIC8vIEZJWE1F
OiAxOC4gVXBncmFkZSBhIG5ld2x5LWRlZmluZWQgZWxlbWVudCBnaXZlbiBtYXAgYW5kIGRlZmlu
aXRpb24uCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50RGVmaW5pdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50RGVm
aW5pdGlvbnMuY3BwCShyZXZpc2lvbiAxOTc2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudERlZmluaXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsMzIg
QEAgdm9pZCBDdXN0b21FbGVtZW50RGVmaW5pdGlvbnM6OmFkZEVsZW1lbgogICAgIEF0b21pY1N0
cmluZyBsb2NhbE5hbWUgPSBpbnRlcmZhY2UtPm5hbWUoKS5sb2NhbE5hbWUoKTsKICAgICBBU1NF
UlQoIW1fbmFtZU1hcC5jb250YWlucyhsb2NhbE5hbWUpKTsKICAgICBtX2NvbnN0cnVjdG9yTWFw
LmFkZChpbnRlcmZhY2UtPmNvbnN0cnVjdG9yKCksIGludGVyZmFjZS5wdHIoKSk7Ci0gICAgbV9u
YW1lTWFwLmFkZChsb2NhbE5hbWUsIFdURk1vdmUoaW50ZXJmYWNlKSk7CisgICAgbV9uYW1lTWFw
LmFkZChsb2NhbE5hbWUsIGludGVyZmFjZS5jb3B5UmVmKCkpOworCisgICAgYXV0byBjYW5kaWRh
dGVMaXN0ID0gbV91cGdyYWRlQ2FuZGlkYXRlc01hcC5maW5kKGxvY2FsTmFtZSk7CisgICAgaWYg
KGNhbmRpZGF0ZUxpc3QgPT0gbV91cGdyYWRlQ2FuZGlkYXRlc01hcC5lbmQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gbGlzdDsKKyAgICBsaXN0LnN3
YXAoY2FuZGlkYXRlTGlzdC0+dmFsdWUpOworCisgICAgbV91cGdyYWRlQ2FuZGlkYXRlc01hcC5y
ZW1vdmUobG9jYWxOYW1lKTsKKworICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbGlzdCkgewor
ICAgICAgICBBU1NFUlQoY2FuZGlkYXRlKTsKKyAgICAgICAgaW50ZXJmYWNlLT51cGdyYWRlRWxl
bWVudCgqY2FuZGlkYXRlKTsKKyAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgbm90IGJlIGFkZGlu
ZyBtb3JlIHVwZ3JhZGUgY2FuZGlkYXRlIGZvciB0aGlzIGxvY2FsIG5hbWUuCisgICAgQVNTRVJU
KG1fdXBncmFkZUNhbmRpZGF0ZXNNYXAuZmluZChsb2NhbE5hbWUpID09IG1fdXBncmFkZUNhbmRp
ZGF0ZXNNYXAuZW5kKCkpOworfQorCit2b2lkIEN1c3RvbUVsZW1lbnREZWZpbml0aW9uczo6YWRk
VXBncmFkZUNhbmRpZGF0ZShFbGVtZW50JiBjYW5kaWRhdGUpCit7CisgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3VwZ3JhZGVDYW5kaWRhdGVzTWFwLmFkZChjYW5kaWRhdGUubG9jYWxOYW1lKCksIFZl
Y3RvcjxSZWZQdHI8RWxlbWVudD4+KCkpOworICAgIGF1dG8mIG5vZGVWZWN0b3IgPSBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIEFTU0VSVCghbm9kZVZlY3Rvci5jb250YWlucygmY2Fu
ZGlkYXRlKSk7CisgICAgbm9kZVZlY3Rvci5hcHBlbmQoJmNhbmRpZGF0ZSk7CiB9CiAKIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZSogQ3VzdG9tRWxlbWVudERlZmluaXRpb25zOjpmaW5kSW50ZXJm
YWNlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRWxlbWVudERlZmluaXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUVsZW1lbnREZWZpbml0aW9ucy5oCShyZXZpc2lvbiAxOTc2MzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudERlZmluaXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgY2xhc3MgQ3VzdG9tRWxlbWVudERlZmluaXRpb25zIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB2b2lkIGFkZEVsZW1l
bnREZWZpbml0aW9uKFJlZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+JiYpOworICAgIHZvaWQg
YWRkVXBncmFkZUNhbmRpZGF0ZShFbGVtZW50Jik7CiAKICAgICBKU0N1c3RvbUVsZW1lbnRJbnRl
cmZhY2UqIGZpbmRJbnRlcmZhY2UoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIEpT
Q3VzdG9tRWxlbWVudEludGVyZmFjZSogZmluZEludGVyZmFjZShjb25zdCBBdG9taWNTdHJpbmcm
KSBjb25zdDsKQEAgLTU5LDYgKzYwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBOYW1lU3RhdHVz
IGNoZWNrTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogCiBwcml2YXRlOgorICAg
IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+Pj4gbV91cGdyYWRl
Q2FuZGlkYXRlc01hcDsKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEpTQ3VzdG9t
RWxlbWVudEludGVyZmFjZT4+IG1fbmFtZU1hcDsKICAgICBIYXNoTWFwPGNvbnN0IEpTQzo6SlNP
YmplY3QqLCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UqPiBtX2NvbnN0cnVjdG9yTWFwOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTk3NjM0KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk5LDcgKzg5OSwx
OCBAQCBzdGF0aWMgUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUhUTUxFbGVtZW50CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBIVE1MVW5rbm93bkVsZW1lbnQ6OmNy
ZWF0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIHhodG1sTmFtZXNwYWNlVVJJ
KSwgZG9jdW1lbnQpOworICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
bG9jYWxOYW1lLCB4aHRtbE5hbWVzcGFjZVVSSSk7CisKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1F
TlRTKQorICAgIGlmIChDdXN0b21FbGVtZW50RGVmaW5pdGlvbnM6OmNoZWNrTmFtZShsb2NhbE5h
bWUpID09IEN1c3RvbUVsZW1lbnREZWZpbml0aW9uczo6TmFtZVN0YXR1czo6VmFsaWQpIHsKKyAg
ICAgICAgUmVmPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gSFRNTEVsZW1lbnQ6OmNyZWF0ZShxdWFs
aWZpZWROYW1lLCBkb2N1bWVudCk7CisgICAgICAgIGVsZW1lbnQtPnNldElzVW5yZXNvbHZlZEN1
c3RvbUVsZW1lbnQoKTsKKyAgICAgICAgZG9jdW1lbnQuZW5zdXJlQ3VzdG9tRWxlbWVudERlZmlu
aXRpb25zKCkuYWRkVXBncmFkZUNhbmRpZGF0ZShlbGVtZW50LmdldCgpKTsKKyAgICAgICAgcmV0
dXJuIFdURk1vdmUoZWxlbWVudCk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gSFRNTFVu
a25vd25FbGVtZW50OjpjcmVhdGUocXVhbGlmaWVkTmFtZSwgZG9jdW1lbnQpOwogfQogCiBSZWZQ
dHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnRGb3JCaW5kaW5ncyhjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTA4MCwxMSArMTA5MSwxOCBA
QCBzdGF0aWMgUmVmPEhUTUxFbGVtZW50PiBjcmVhdGVGYWxsYmFja0hUCiAgICAgaWYgKFVOTElL
RUxZKGRlZmluaXRpb25zKSkgewogICAgICAgICBpZiAoYXV0byogaW50ZXJmYWNlID0gZGVmaW5p
dGlvbnMtPmZpbmRJbnRlcmZhY2UobmFtZSkpIHsKICAgICAgICAgICAgIFJlZjxIVE1MRWxlbWVu
dD4gZWxlbWVudCA9IEhUTUxFbGVtZW50OjpjcmVhdGUobmFtZSwgZG9jdW1lbnQpOwotICAgICAg
ICAgICAgZWxlbWVudC0+c2V0SXNDdXN0b21FbGVtZW50KCk7IC8vIFByZS11cGdyYWRlIGVsZW1l
bnQgaXMgc3RpbGwgY29uc2lkZXJlZCBhIGN1c3RvbSBlbGVtZW50LgorICAgICAgICAgICAgZWxl
bWVudC0+c2V0SXNVbnJlc29sdmVkQ3VzdG9tRWxlbWVudCgpOwogICAgICAgICAgICAgTGlmZWN5
Y2xlQ2FsbGJhY2tRdWV1ZTo6ZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKGVsZW1lbnQuZ2V0KCksICpp
bnRlcmZhY2UpOwogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0KICAgICB9
CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjaGVjayB0aGUgbm9uLWV4aXN0YW5jZSBvZiBwcmVm
aXg/CisgICAgaWYgKEN1c3RvbUVsZW1lbnREZWZpbml0aW9uczo6Y2hlY2tOYW1lKG5hbWUubG9j
YWxOYW1lKCkpID09IEN1c3RvbUVsZW1lbnREZWZpbml0aW9uczo6TmFtZVN0YXR1czo6VmFsaWQp
IHsKKyAgICAgICAgUmVmPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gSFRNTEVsZW1lbnQ6OmNyZWF0
ZShuYW1lLCBkb2N1bWVudCk7CisgICAgICAgIGVsZW1lbnQtPnNldElzVW5yZXNvbHZlZEN1c3Rv
bUVsZW1lbnQoKTsKKyAgICAgICAgZG9jdW1lbnQuZW5zdXJlQ3VzdG9tRWxlbWVudERlZmluaXRp
b25zKCkuYWRkVXBncmFkZUNhbmRpZGF0ZShlbGVtZW50LmdldCgpKTsKKyAgICAgICAgcmV0dXJu
IGVsZW1lbnQ7CisgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIEhUTUxVbmtub3duRWxlbWVudDo6
Y3JlYXRlKG5hbWUsIGRvY3VtZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTk3
NjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2
LDcgKzI2NiwxNSBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQogICAg
IGJvb2wgaXNDdXN0b21FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc0N1c3RvbUVs
ZW1lbnQpOyB9Ci0gICAgdm9pZCBzZXRJc0N1c3RvbUVsZW1lbnQoKSB7IHJldHVybiBzZXRGbGFn
KElzQ3VzdG9tRWxlbWVudCk7IH0KKyAgICB2b2lkIHNldElzQ3VzdG9tRWxlbWVudCgpIHsgc2V0
RmxhZyhJc0N1c3RvbUVsZW1lbnQpOyB9CisKKyAgICBib29sIGlzVW5yZXNvbHZlZEN1c3RvbUVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBpc0VsZW1lbnROb2RlKCkgJiYgZ2V0RmxhZyhJc0VkaXRp
bmdUZXh0T3JVbnJlc29sdmVkQ3VzdG9tRWxlbWVudEZsYWcpOyB9CisgICAgdm9pZCBzZXRJc1Vu
cmVzb2x2ZWRDdXN0b21FbGVtZW50KCkgeyBzZXRGbGFnKElzRWRpdGluZ1RleHRPclVucmVzb2x2
ZWRDdXN0b21FbGVtZW50RmxhZyk7IH0KKyAgICB2b2lkIHNldEN1c3RvbUVsZW1lbnRJc1Jlc29s
dmVkKCkKKyAgICB7CisgICAgICAgIGNsZWFyRmxhZyhJc0VkaXRpbmdUZXh0T3JVbnJlc29sdmVk
Q3VzdG9tRWxlbWVudEZsYWcpOworICAgICAgICBzZXRGbGFnKElzQ3VzdG9tRWxlbWVudCk7Cisg
ICAgfQogI2VuZGlmCiAKICAgICAvLyBSZXR1cm5zIG51bGwsIGEgY2hpbGQgb2YgU2hhZG93Um9v
dCwgb3IgYSBsZWdhY3kgc2hhZG93IHJvb3QuCkBAIC0zMjAsNyArMzI4LDcgQEAgcHVibGljOgog
ICAgIFN0eWxlQ2hhbmdlVHlwZSBzdHlsZUNoYW5nZVR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxTdHlsZUNoYW5nZVR5cGU+KG1fbm9kZUZsYWdzICYgU3R5bGVDaGFuZ2VNYXNrKTsg
fQogICAgIGJvb2wgY2hpbGROZWVkc1N0eWxlUmVjYWxjKCkgY29uc3QgeyByZXR1cm4gZ2V0Rmxh
ZyhDaGlsZE5lZWRzU3R5bGVSZWNhbGNGbGFnKTsgfQogICAgIGJvb2wgc3R5bGVJc0FmZmVjdGVk
QnlQcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKFN0eWxlSXNBZmZlY3Rl
ZEJ5UHJldmlvdXNTaWJsaW5nKTsgfQotICAgIGJvb2wgaXNFZGl0aW5nVGV4dCgpIGNvbnN0IHsg
cmV0dXJuIGdldEZsYWcoSXNFZGl0aW5nVGV4dEZsYWcpOyB9CisgICAgYm9vbCBpc0VkaXRpbmdU
ZXh0KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc1RleHRGbGFnKSAmJiBnZXRGbGFnKElzRWRp
dGluZ1RleHRPclVucmVzb2x2ZWRDdXN0b21FbGVtZW50RmxhZyk7IH0KIAogICAgIHZvaWQgc2V0
Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCkgeyBzZXRGbGFnKENoaWxkTmVlZHNTdHlsZVJlY2FsY0Zs
YWcpOyB9CiAgICAgdm9pZCBjbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHsgbV9ub2RlRmxh
Z3MgJj0gfihDaGlsZE5lZWRzU3R5bGVSZWNhbGNGbGFnIHwgRGlyZWN0Q2hpbGROZWVkc1N0eWxl
UmVjYWxjRmxhZyk7IH0KQEAgLTU5NSw3ICs2MDMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIElz
UGFyc2luZ0NoaWxkcmVuRmluaXNoZWRGbGFnID0gMSA8PCAxMywgLy8gRWxlbWVudAogCiAgICAg
ICAgIFN0eWxlQ2hhbmdlTWFzayA9IDEgPDwgbm9kZVN0eWxlQ2hhbmdlU2hpZnQgfCAxIDw8IChu
b2RlU3R5bGVDaGFuZ2VTaGlmdCArIDEpIHwgMSA8PCAobm9kZVN0eWxlQ2hhbmdlU2hpZnQgKyAy
KSwKLSAgICAgICAgSXNFZGl0aW5nVGV4dEZsYWcgPSAxIDw8IDE3LAorICAgICAgICBJc0VkaXRp
bmdUZXh0T3JVbnJlc29sdmVkQ3VzdG9tRWxlbWVudEZsYWcgPSAxIDw8IDE3LAogICAgICAgICBJ
c05hbWVkRmxvd0NvbnRlbnROb2RlRmxhZyA9IDEgPDwgMTgsCiAgICAgICAgIEhhc1N5bnRoZXRp
Y0F0dHJDaGlsZE5vZGVzRmxhZyA9IDEgPDwgMTksCiAgICAgICAgIEhhc0N1c3RvbVN0eWxlUmVz
b2x2ZUNhbGxiYWNrc0ZsYWcgPSAxIDw8IDIwLApAQCAtNjM0LDcgKzY0Miw3IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgQ3JlYXRlSFRNTEVsZW1lbnQgPSBDcmVhdGVTdHlsZWRFbGVtZW50IHwgSXNI
VE1MRmxhZywKICAgICAgICAgQ3JlYXRlU1ZHRWxlbWVudCA9IENyZWF0ZVN0eWxlZEVsZW1lbnQg
fCBJc1NWR0ZsYWcgfCBIYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3NGbGFnLAogICAgICAg
ICBDcmVhdGVEb2N1bWVudCA9IENyZWF0ZUNvbnRhaW5lciB8IEluRG9jdW1lbnRGbGFnLAotICAg
ICAgICBDcmVhdGVFZGl0aW5nVGV4dCA9IENyZWF0ZVRleHQgfCBJc0VkaXRpbmdUZXh0RmxhZywK
KyAgICAgICAgQ3JlYXRlRWRpdGluZ1RleHQgPSBDcmVhdGVUZXh0IHwgSXNFZGl0aW5nVGV4dE9y
VW5yZXNvbHZlZEN1c3RvbUVsZW1lbnRGbGFnLAogICAgICAgICBDcmVhdGVNYXRoTUxFbGVtZW50
ID0gQ3JlYXRlU3R5bGVkRWxlbWVudCB8IElzTWF0aE1MRmxhZwogICAgIH07CiAgICAgTm9kZShE
b2N1bWVudCYsIENvbnN0cnVjdGlvblR5cGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL21h
a2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMu
cGwJKHJldmlzaW9uIDE5NzYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBs
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2LDcgQEAgc3ViIGRlZmF1bHRQYXJhbWV0ZXJz
SGFzaAogICAgICAgICAnYXR0cnNOdWxsTmFtZXNwYWNlJyA9PiAwLAogICAgICAgICAnZmFsbGJh
Y2tJbnRlcmZhY2VOYW1lJyA9PiAnJywKICAgICAgICAgJ2ZhbGxiYWNrSlNJbnRlcmZhY2VOYW1l
JyA9PiAnJywKKyAgICAgICAgJ2N1c3RvbUVsZW1lbnRJbnRlcmZhY2VOYW1lJyA9PiAnJywKICAg
ICApOwogfQogCkBAIC0xMzE4LDYgKzEzMTksMjAgQEAgSlNET01PYmplY3QqIGNyZWF0ZUpTJHBh
cmFtZXRlcnN7bmFtZXNwYQogICAgICAgICBwb3B1bGF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1X
cmFwcGVyTWFwKGZ1bmN0aW9ucyk7CiAgICAgaWYgKGF1dG8gZnVuY3Rpb24gPSBmdW5jdGlvbnMu
Z2V0KCkuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiBm
dW5jdGlvbihnbG9iYWxPYmplY3QsIGVsZW1lbnQpOworRU5ECis7CisKKyAgICBpZiAoJHBhcmFt
ZXRlcnN7Y3VzdG9tRWxlbWVudEludGVyZmFjZU5hbWV9KSB7CisgICAgICAgIHByaW50IEYgPDxF
TkQKKyNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQorICAgIGlmIChlbGVtZW50LT5pc1VucmVz
b2x2ZWRDdXN0b21FbGVtZW50KCkpCisgICAgICAgIHJldHVybiBDUkVBVEVfRE9NX1dSQVBQRVIo
Z2xvYmFsT2JqZWN0LCAkcGFyYW1ldGVyc3tjdXN0b21FbGVtZW50SW50ZXJmYWNlTmFtZX0sIGVs
ZW1lbnQuZ2V0KCkpOworI2VuZGlmCitFTkQKKzsKKyAgICB9CisKKyAgICBwcmludCBGIDw8RU5E
CiAgICAgcmV0dXJuIENSRUFURV9ET01fV1JBUFBFUihnbG9iYWxPYmplY3QsICRwYXJhbWV0ZXJz
e2ZhbGxiYWNrSlNJbnRlcmZhY2VOYW1lfSwgZWxlbWVudC5nZXQoKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCShyZXZpc2lvbiAxOTc2MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcg
QEAgbmFtZXNwYWNlPSJIVE1MIgogbmFtZXNwYWNlUHJlZml4PSJ4aHRtbCIKIG5hbWVzcGFjZVVS
ST0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKIGZhbGxiYWNrSW50ZXJmYWNlTmFtZT0i
SFRNTFVua25vd25FbGVtZW50IgorY3VzdG9tRWxlbWVudEludGVyZmFjZU5hbWU9IkhUTUxFbGVt
ZW50IgogCiBhIGludGVyZmFjZU5hbWU9SFRNTEFuY2hvckVsZW1lbnQKIGFiYnIgaW50ZXJmYWNl
TmFtZT1IVE1MRWxlbWVudApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENv
bnN0cnVjdGlvblNpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkocmV2aXNpb24gMTk3NjM0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NzIsMjAgKzY3MiwyOSBAQCBSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlv
blNpdGU6OmNyCiAgICAgYm9vbCBpbnNpZGVUZW1wbGF0ZUVsZW1lbnQgPSAhb3duZXJEb2N1bWVu
dC5mcmFtZSgpOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gSFRNTEVsZW1lbnRGYWN0
b3J5OjpjcmVhdGVLbm93bkVsZW1lbnQobG9jYWxOYW1lLCBvd25lckRvY3VtZW50LCBpbnNpZGVU
ZW1wbGF0ZUVsZW1lbnQgPyBudWxscHRyIDogZm9ybSgpLCB0cnVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIWVsZW1lbnQpKSB7Ci0KICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQotICAgICAgICBh
dXRvKiBkZWZpbml0aW9ucyA9IG93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9kZSgpLmN1c3RvbUVs
ZW1lbnREZWZpbml0aW9ucygpOwotICAgICAgICBpZiAoY3VzdG9tRWxlbWVudEludGVyZmFjZSAm
JiBVTkxJS0VMWShkZWZpbml0aW9ucykpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBpbnRlcmZh
Y2UgPSBkZWZpbml0aW9ucy0+ZmluZEludGVyZmFjZShsb2NhbE5hbWUpKSB7Ci0gICAgICAgICAg
ICAgICAgKmN1c3RvbUVsZW1lbnRJbnRlcmZhY2UgPSBpbnRlcmZhY2U7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8qIGRlZmluaXRpb25zID0gb3duZXJEb2N1
bWVudC5jdXN0b21FbGVtZW50RGVmaW5pdGlvbnMoKTsKKyAgICAgICAgaWYgKGN1c3RvbUVsZW1l
bnRJbnRlcmZhY2UpIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShkZWZpbml0aW9ucykpIHsK
KyAgICAgICAgICAgICAgICBpZiAoYXV0byogaW50ZXJmYWNlID0gZGVmaW5pdGlvbnMtPmZpbmRJ
bnRlcmZhY2UobG9jYWxOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAqY3VzdG9tRWxlbWVu
dEludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxzZQog
ICAgICAgICBVTlVTRURfUEFSQU0oY3VzdG9tRWxlbWVudEludGVyZmFjZSk7CiAjZW5kaWYKIAot
ICAgICAgICBlbGVtZW50ID0gSFRNTFVua25vd25FbGVtZW50OjpjcmVhdGUoUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgbG9jYWxOYW1lLCB4aHRtbE5hbWVzcGFjZVVSSSksIG93bmVyRG9jdW1lbnRG
b3JDdXJyZW50Tm9kZSgpKTsKKyAgICAgICAgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lKG51
bGxBdG9tLCBsb2NhbE5hbWUsIHhodG1sTmFtZXNwYWNlVVJJKTsKKyNpZiBFTkFCTEUoQ1VTVE9N
X0VMRU1FTlRTKQorICAgICAgICBpZiAoQ3VzdG9tRWxlbWVudERlZmluaXRpb25zOjpjaGVja05h
bWUobG9jYWxOYW1lKSA9PSBDdXN0b21FbGVtZW50RGVmaW5pdGlvbnM6Ok5hbWVTdGF0dXM6OlZh
bGlkKSB7CisgICAgICAgICAgICBlbGVtZW50ID0gSFRNTEVsZW1lbnQ6OmNyZWF0ZShxdWFsaWZp
ZWROYW1lLCBvd25lckRvY3VtZW50KTsKKyAgICAgICAgICAgIGVsZW1lbnQtPnNldElzVW5yZXNv
bHZlZEN1c3RvbUVsZW1lbnQoKTsKKyAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuZW5zdXJlQ3Vz
dG9tRWxlbWVudERlZmluaXRpb25zKCkuYWRkVXBncmFkZUNhbmRpZGF0ZSgqZWxlbWVudCk7Cisg
ICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgICAgICBlbGVtZW50ID0gSFRNTFVua25vd25F
bGVtZW50OjpjcmVhdGUocXVhbGlmaWVkTmFtZSwgb3duZXJEb2N1bWVudCk7CiAgICAgfQogICAg
IEFTU0VSVChlbGVtZW50KTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3NjM0KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDMt
MDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgZGVmaW5lRWxl
bWVudCBzaG91bGQgdXBncmFkZSBleGlzdGluZyB1bnJlc29sdmVkIGN1c3RvbSBlbGVtZW50cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTA3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgVzND
IHN0eWxlIHRlc3RoYXJuZXNzLmpzIHRlc3RzIGZvciBhc3luY2hyb25vdXNseSBkZWZpbmluZyBj
dXN0b20gZWxlbWVudHMuCisKKyAgICAgICAgKiBmYXN0L2N1c3RvbS1lbGVtZW50cy91cGdyYWRp
bmcvTm9kZS1jbG9uZU5vZGUuaHRtbDoKKyAgICAgICAgKiBmYXN0L2N1c3RvbS1lbGVtZW50cy91
cGdyYWRpbmcvdXBncmFkaW5nLXBhcnNlci1jcmVhdGVkLWVsZW1lbnQtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2N1c3RvbS1lbGVtZW50cy91cGdyYWRpbmcvdXBncmFkaW5n
LXBhcnNlci1jcmVhdGVkLWVsZW1lbnQuaHRtbDogQWRkZWQuCisKIDIwMTYtMDMtMDUgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIHRoZSBzdXBwb3J0IGZv
ciB1cGdyYWRpbmcgY3VzdG9tIGVsZW1lbnRzIGluIGNsb25lTm9kZQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jdXN0b20tZWxlbWVudHMvdXBncmFkaW5nL05vZGUtY2xvbmVOb2RlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMvdXBncmFkaW5nL05v
ZGUtY2xvbmVOb2RlLmh0bWwJKHJldmlzaW9uIDE5NzYzNCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y3VzdG9tLWVsZW1lbnRzL3VwZ3JhZGluZy9Ob2RlLWNsb25lTm9kZS5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgotPHRp
dGxlPkN1c3RvbSBFbGVtZW50czogRXh0ZW5zaW9ucyB0byBEb2N1bWVudCBpbnRlcmZhY2U8L3Rp
dGxlPgorPHRpdGxlPkN1c3RvbSBFbGVtZW50czogVXBncmFkaW5nPC90aXRsZT4KIDxtZXRhIG5h
bWU9ImF1dGhvciIgdGl0bGU9IlJ5b3N1a2UgTml3YSIgaHJlZj0ibWFpbHRvOnJuaXdhQHdlYmtp
dC5vcmciPgogPG1ldGEgbmFtZT0iYXNzZXJ0IiBjb250ZW50PSJOb2RlLnByb3RvdHlwZS5jbG9u
ZU5vZGUgc2hvdWxkIHVwZ3JhZGUgYSBjdXN0b20gZWxlbWVudCI+CiA8bGluayByZWw9ImhlbHAi
IGhyZWY9Imh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJjb21wb25lbnRzL3NwZWMvY3VzdG9tLyN1
cGdyYWRpbmciPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMvdXBncmFk
aW5nL3VwZ3JhZGluZy1wYXJzZXItY3JlYXRlZC1lbGVtZW50LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2N1c3RvbS1lbGVtZW50cy91cGdyYWRpbmcvdXBncmFk
aW5nLXBhcnNlci1jcmVhdGVkLWVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMvdXBncmFkaW5nL3VwZ3JhZGluZy1wYXJz
ZXItY3JlYXRlZC1lbGVtZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYgQEAKKworUEFTUyBFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50IG11c3QgYWRkIGFu
IHVucmVzb2x2ZWQgY3VzdG9tIGVsZW1lbnQgdG8gdGhlIHVwZ3JhZGUgY2FuZGlkYXRlcyBtYXAg
CitQQVNTIEhUTUxFbGVtZW50IGNvbnN0cnVjdG9yIG11c3QgdGhyb3cgYW4gSW52YWxpZFN0YXRl
RXJyb3Igd2hlbiB0aGUgdG9wIG9mIHRoZSBjb25zdHJ1Y3Rpb24gc3RhY2sgaXMgbWFya2VkIEFs
cmVhZHlDb25zdHJ1Y3RlZCBkdWUgdG8gYSBjdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvciBjb25z
dHJ1Y3RpbmcgaXRzZWxmIGFmdGVyIHN1cGVyKCkgY2FsbCAKK1BBU1MgSFRNTEVsZW1lbnQgY29u
c3RydWN0b3IgbXVzdCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciB3aGVuIHRoZSB0b3Agb2Yg
dGhlIGNvbnN0cnVjdGlvbiBzdGFjayBpcyBtYXJrZWQgQWxyZWFkeUNvbnN0cnVjdGVkIGR1ZSB0
byBhIGN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yIGNvbnN0cnVjdGluZyBpdHNlbGYgYmVmb3Jl
IHN1cGVyKCkgY2FsbCAKK1BBU1MgVXBncmFkaW5nIGEgY3VzdG9tIGVsZW1lbnQgbXVzdCB0aHJv
dyBhbiBJbnZhbGlkU3RhdGVFcnJvciB3aGVuIHRoZSByZXR1cm5lZCBlbGVtZW50IGlzIG5vdCBT
YW1lVmFsdWUgYXMgdGhlIHVwZ3JhZGVkIGVsZW1lbnQgCisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY3VzdG9tLWVsZW1lbnRzL3VwZ3JhZGluZy91cGdyYWRpbmctcGFyc2VyLWNyZWF0ZWQtZWxl
bWVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3VzdG9tLWVsZW1lbnRz
L3VwZ3JhZGluZy91cGdyYWRpbmctcGFyc2VyLWNyZWF0ZWQtZWxlbWVudC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMvdXBncmFkaW5nL3VwZ3Jh
ZGluZy1wYXJzZXItY3JlYXRlZC1lbGVtZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkN1c3RvbSBF
bGVtZW50czogVXBncmFkaW5nIHVucmVzb2x2ZWQgZWxlbWVudHM8L3RpdGxlPgorPG1ldGEgbmFt
ZT0iYXV0aG9yIiB0aXRsZT0iUnlvc3VrZSBOaXdhIiBocmVmPSJtYWlsdG86cm5pd2FAd2Via2l0
Lm9yZyI+Cis8bWV0YSBuYW1lPSJhc3NlcnQiIGNvbnRlbnQ9IkhUTUwgcGFyc2VyIG11c3QgYWRk
IGFuIHVucmVzb2x2ZWQgY3VzdG9tIGVsZW1lbnQgdG8gdGhlIHVwZ3JhZGUgY2FuZGlkYXRlcyBt
YXAiPgorPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRwczovL3czYy5naXRodWIuaW8vd2ViY29t
cG9uZW50cy9zcGVjL2N1c3RvbS8jdXBncmFkaW5nIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8bGluayByZWw9J3N0
eWxlc2hlZXQnIGhyZWY9Jy4uLy4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5jc3MnPgorPC9o
ZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPG15LWN1c3RvbS1lbGVtZW50Pjwv
bXktY3VzdG9tLWVsZW1lbnQ+Cis8aW5zdGFudGlhdGVzLWl0c2VsZi1hZnRlci1zdXBlcj48L2lu
c3RhbnRpYXRlcy1pdHNlbGYtYWZ0ZXItc3VwZXI+Cis8aW5zdGFudGlhdGVzLWl0c2VsZi1iZWZv
cmUtc3VwZXI+PC9pbnN0YW50aWF0ZXMtaXRzZWxmLWJlZm9yZS1zdXBlcj4KKzxteS1vdGhlci1l
bGVtZW50IGlkPSJpbnN0YW5jZSI+PC9teS1vdGhlci1lbGVtZW50PgorPG15LW90aGVyLWVsZW1l
bnQgaWQ9Im90aGVySW5zdGFuY2UiPjwvbXktb3RoZXItZWxlbWVudD4KKzxzY3JpcHQ+CisKK3Rl
c3QoZnVuY3Rpb24gKCkgeworICAgIGNsYXNzIE15Q3VzdG9tRWxlbWVudCBleHRlbmRzIEhUTUxF
bGVtZW50IHsgfQorCisgICAgdmFyIGluc3RhbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcign
bXktY3VzdG9tLWVsZW1lbnQnKTsKKyAgICBhc3NlcnRfdHJ1ZShpbnN0YW5jZSBpbnN0YW5jZW9m
IEhUTUxFbGVtZW50KTsKKyAgICBhc3NlcnRfZmFsc2UoaW5zdGFuY2UgaW5zdGFuY2VvZiBIVE1M
VW5rbm93bkVsZW1lbnQsCisgICAgICAgICdhbiB1bnJlc29sdmVkIGN1c3RvbSBlbGVtZW50IHNo
b3VsZCBub3QgYmUgYW4gaW5zdGFuY2Ugb2YgSFRNTFVua25vd25FbGVtZW50Jyk7CisgICAgYXNz
ZXJ0X2ZhbHNlKGluc3RhbmNlIGluc3RhbmNlb2YgTXlDdXN0b21FbGVtZW50KTsKKworICAgIGRv
Y3VtZW50LmRlZmluZUVsZW1lbnQoJ215LWN1c3RvbS1lbGVtZW50JywgTXlDdXN0b21FbGVtZW50
KTsKKworICAgIGFzc2VydF90cnVlKGluc3RhbmNlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpOwor
ICAgIGFzc2VydF90cnVlKGluc3RhbmNlIGluc3RhbmNlb2YgTXlDdXN0b21FbGVtZW50LAorICAg
ICAgICAnQ2FsbGluZyBkZWZpbmVFbGVtZW50IG11c3QgdXBncmFkZSBleGlzdGluZyBjdXN0b20g
ZWxlbWVudHMnKTsKKworfSwgJ0VsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgbXVzdCBh
ZGQgYW4gdW5yZXNvbHZlZCBjdXN0b20gZWxlbWVudCB0byB0aGUgdXBncmFkZSBjYW5kaWRhdGVz
IG1hcCcpOworCisKK3Rlc3QoZnVuY3Rpb24gKCkgeworICAgIGNsYXNzIEluc3RhbnRpYXRlc0l0
c2VsZkFmdGVyU3VwZXIgZXh0ZW5kcyBIVE1MRWxlbWVudCB7CisgICAgICAgIGNvbnN0cnVjdG9y
KGRvTm90Q3JlYXRlSXRzZWxmKSB7CisgICAgICAgICAgICBzdXBlcigpOworICAgICAgICAgICAg
aWYgKCFkb05vdENyZWF0ZUl0c2VsZikKKyAgICAgICAgICAgICAgICBuZXcgSW5zdGFudGlhdGVz
SXRzZWxmQWZ0ZXJTdXBlcih0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydF90
aHJvd3MoeyduYW1lJzogJ0ludmFsaWRTdGF0ZUVycm9yJ30sIGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgZG9jdW1lbnQuZGVmaW5lRWxlbWVudCgnaW5zdGFudGlhdGVzLWl0c2VsZi1hZnRlci1zdXBl
cicsIEluc3RhbnRpYXRlc0l0c2VsZkFmdGVyU3VwZXIpOworICAgIH0pOworfSwgJ0hUTUxFbGVt
ZW50IGNvbnN0cnVjdG9yIG11c3QgdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3Igd2hlbiB0aGUg
dG9wIG9mIHRoZSBjb25zdHJ1Y3Rpb24gc3RhY2sgaXMgbWFya2VkIEFscmVhZHlDb25zdHJ1Y3Rl
ZCcKKyAgICArICcgZHVlIHRvIGEgY3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3IgY29uc3RydWN0
aW5nIGl0c2VsZiBhZnRlciBzdXBlcigpIGNhbGwnKTsKKwordGVzdChmdW5jdGlvbiAoKSB7Cisg
ICAgY2xhc3MgSW5zdGFudGlhdGVzSXRzZWxmQmVmb3JlU3VwZXIgZXh0ZW5kcyBIVE1MRWxlbWVu
dCB7CisgICAgICAgIGNvbnN0cnVjdG9yKGRvTm90Q3JlYXRlSXRzZWxmKSB7CisgICAgICAgICAg
ICBpZiAoIWRvTm90Q3JlYXRlSXRzZWxmKQorICAgICAgICAgICAgICAgIG5ldyBJbnN0YW50aWF0
ZXNJdHNlbGZCZWZvcmVTdXBlcih0cnVlKTsKKyAgICAgICAgICAgIHN1cGVyKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBhc3NlcnRfdGhyb3dzKHsnbmFtZSc6ICdJbnZhbGlkU3RhdGVFcnJv
cid9LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRvY3VtZW50LmRlZmluZUVsZW1lbnQoJ2luc3Rh
bnRpYXRlcy1pdHNlbGYtYmVmb3JlLXN1cGVyJywgSW5zdGFudGlhdGVzSXRzZWxmQmVmb3JlU3Vw
ZXIpOworICAgIH0pOworfSwgJ0hUTUxFbGVtZW50IGNvbnN0cnVjdG9yIG11c3QgdGhyb3cgYW4g
SW52YWxpZFN0YXRlRXJyb3Igd2hlbiB0aGUgdG9wIG9mIHRoZSBjb25zdHJ1Y3Rpb24gc3RhY2sg
aXMgbWFya2VkIEFscmVhZHlDb25zdHJ1Y3RlZCcKKyAgICArICcgZHVlIHRvIGEgY3VzdG9tIGVs
ZW1lbnQgY29uc3RydWN0b3IgY29uc3RydWN0aW5nIGl0c2VsZiBiZWZvcmUgc3VwZXIoKSBjYWxs
Jyk7CisKK3Rlc3QoZnVuY3Rpb24gKCkgeworICAgIGNsYXNzIE15T3RoZXJFbGVtZW50IGV4dGVu
ZHMgSFRNTEVsZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAgICAgIHN1
cGVyKCk7CisgICAgICAgICAgICBpZiAodGhpcyA9PSBpbnN0YW5jZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gb3RoZXJJbnN0YW5jZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2YXIgaW5zdGFu
Y2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zdGFuY2UnKTsKKyAgICB2YXIgb3RoZXJJ
bnN0YW5jZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdGhlckluc3RhbmNlJyk7CisKKyAg
ICBhc3NlcnRfZmFsc2UoaW5zdGFuY2UgaW5zdGFuY2VvZiBNeU90aGVyRWxlbWVudCk7CisgICAg
YXNzZXJ0X2ZhbHNlKG90aGVySW5zdGFuY2UgaW5zdGFuY2VvZiBNeU90aGVyRWxlbWVudCk7CisK
KyAgICBhc3NlcnRfdGhyb3dzKHsnbmFtZSc6ICdJbnZhbGlkU3RhdGVFcnJvcid9LCBmdW5jdGlv
biAoKSB7CisgICAgICAgIGRvY3VtZW50LmRlZmluZUVsZW1lbnQoJ215LW90aGVyLWVsZW1lbnQn
LCBNeU90aGVyRWxlbWVudCk7CisgICAgfSk7CisKKyAgICBhc3NlcnRfdHJ1ZShkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdteS1vdGhlci1lbGVtZW50JykgaW5zdGFuY2VvZiBNeU90aGVyRWxlbWVu
dCwKKyAgICAgICAgJ1VwZ3JhZGluZyBvZiBjdXN0b20gZWxlbWVudHMgbXVzdCBoYXBwZW4gYWZ0
ZXIgdGhlIGRlZmluaXRpb24gd2FzIGFkZGVkIHRvIHRoZSByZWdpc3RyeS4nKTsKK30sICdVcGdy
YWRpbmcgYSBjdXN0b20gZWxlbWVudCBtdXN0IHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yIHdo
ZW4gdGhlIHJldHVybmVkIGVsZW1lbnQgaXMgbm90IFNhbWVWYWx1ZSBhcyB0aGUgdXBncmFkZWQg
ZWxlbWVudCcpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="297766"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>