<?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>15340</bug_id>
          
          <creation_ts>2007-10-02 01:23:58 -0700</creation_ts>
          <short_desc>Avoid uselessly serializing CSS property values on replacement for 10% CK DOM speedup</short_desc>
          <delta_ts>2007-10-02 21:12:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://celtickane.com/projects/jsspeed2007.php</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="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>57622</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-02 01:23:58 -0700</bug_when>
    <thetext>When a CSS property value is replaced in any way, the old property is first removed. removeProperty returns the old property value because that is what the CSSOM calls for. But we can just use an internal version in this case that does not bother to generate the return value, since serializing the property value can be expensive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57623</commentid>
    <comment_count>1</comment_count>
      <attachid>16499</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-02 01:26:12 -0700</bug_when>
    <thetext>Created attachment 16499
do it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57624</commentid>
    <comment_count>2</comment_count>
      <attachid>16499</attachid>
    <who name="">mitz</who>
    <bug_when>2007-10-02 01:31:40 -0700</bug_when>
    <thetext>Comment on attachment 16499
do it

The patch includes extra changes unrelated to this bug. r=me on the CSSMutableStyleDeclaration change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57629</commentid>
    <comment_count>3</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-02 02:23:00 -0700</bug_when>
    <thetext>Oops. the markup.cpp changes are from another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57689</commentid>
    <comment_count>4</comment_count>
      <attachid>16511</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-02 20:56:46 -0700</bug_when>
    <thetext>Created attachment 16511
for reference, without the extraneous bits</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16499</attachid>
            <date>2007-10-02 01:26:12 -0700</date>
            <delta_ts>2007-10-02 01:31:40 -0700</delta_ts>
            <desc>do it</desc>
            <filename>faster-css-replace.patch.txt</filename>
            <type>text/plain</type>
            <size>32844</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI1OTEx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDctMTAt
MDIgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gQXZvaWQgdXNlbGVzc2x5
IHNlcmlhbGl6aW5nIENTUyBwcm9wZXJ0eSB2YWx1ZXMgb24gcmVwbGFjZW1lbnQgZm9yIDEwJSBD
SyBET00gc3BlZWR1cAorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTM0MAorCisgICAgICAgICogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQ
cm9wZXJ0eSk6IERvbid0IGdlbmVyYXRlIHJldHVybiB2YWx1ZSB1bmxlc3MgbmVlZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KTog
VXNlIHRoZSBuby1yZXR1cm4gdmVyc2lvbiBhcHByb3ByaWF0ZWx5LgorICAgICAgICAqIGNzcy9D
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KTogTmV3IHZlcnNpb24gd2l0aCBubyBy
ZXR1cm4gdmFsdWUuCisKIDIwMDctMTAtMDEgIExhcnMgS25vbGwgIDxsYXJzQHRyb2xsdGVjaC5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYy4KSW5kZXg6IGNzcy9DU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmNwcAkocmV2aXNpb24gMjU4MTApCisrKyBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNyArNDE0LDcgQEAgc3RhdGljIHZvaWQg
aW5pdFNob3J0aGFuZE1hcChIYXNoTWFwPGludAogICAgICN1bmRlZiBTRVRfU0hPUlRIQU5EX01B
UF9FTlRSWQogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVBy
b3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShp
bnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBib29sIHJldHVyblRleHQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKIApAQCAtNDM0LDcgKzQzNCw4IEBAIFN0cmlu
ZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3YKICAgICBEZXByZWNhdGVkVmFsdWVM
aXN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKICAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxp
c3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5mcm9tTGFzdCgpOyBpdCAhPSBl
bmQ7IC0taXQpIHsKICAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCkubV9pZCkgewotICAg
ICAgICAgICAgdmFsdWUgPSAoKml0KS52YWx1ZSgpLT5jc3NUZXh0KCk7CisgICAgICAgICAgICBp
ZiAocmV0dXJuVGV4dCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqaXQpLnZhbHVlKCktPmNz
c1RleHQoKTsKICAgICAgICAgICAgIG1fdmFsdWVzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICBp
ZiAobm90aWZ5Q2hhbmdlZCkKICAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7CkBAIC01MDgs
NyArNTA5LDcgQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcAogCiBT
dHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICByZXR1cm4gcmVtb3ZlUHJvcGVydHko
cHJvcGVydHlJRCwgdHJ1ZSwgZWMpOworICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
eUlELCB0cnVlLCB0cnVlLCBlYyk7CiB9CiAKIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29s
IGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTUx
OCw3ICs1MTksNyBAQCBib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wCiAg
ICAgLy8gU2V0dGluZyB0aGUgdmFsdWUgdG8gYW4gZW1wdHkgc3RyaW5nIGp1c3QgcmVtb3ZlcyB0
aGUgcHJvcGVydHkgaW4gYm90aCBJRSBhbmQgR2Vja28uCiAgICAgLy8gU2V0dGluZyBpdCB0byBu
dWxsIHNlZW1zIHRvIHByb2R1Y2UgbGVzcyBjb25zaXN0ZW50IHJlc3VsdHMsIGJ1dCB3ZSB0cmVh
dCBpdCBqdXN0IHRoZSBzYW1lLgogICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgbm90aWZ5Q2hhbmdlZCwgZWMpOworICAgICAgICBy
ZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkLCBmYWxzZSwgZWMpOwogICAg
ICAgICByZXR1cm4gZWMgPT0gMDsKICAgICB9CiAKSW5kZXg6IGNzcy9DU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5oCShyZXZpc2lvbiAyNTgxMCkKKysrIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MywxMSArNzMsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gc2V0UHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUsIGltcG9ydGFudCwgbm90aWZ5Q2hhbmdl
ZCwgZWMpOwogICAgIH0KIAotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJlbW92
ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQorICAg
IFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2Vk
LCBib29sIHJldHVyblRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbW92ZVByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQogICAgIHsKICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHBy
b3BlcnR5SUQsIG5vdGlmeUNoYW5nZWQsIGVjKTsKKyAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJv
cGVydHlJRCwgbm90aWZ5Q2hhbmdlZCwgZmFsc2UsIGVjKTsKICAgICB9CiAKICAgICB2b2lkIGNs
ZWFyKCk7CkluZGV4OiBlZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9t
YXJrdXAuY3BwCShyZXZpc2lvbiAyNTgxMCkKKysrIGVkaXRpbmcvbWFya3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNzEgKzg2LDE2MyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3ZhbHVl
OwogfTsKIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZXNjYXBlVGV4dEZvck1hcmt1cChjb25z
dCBTdHJpbmcmIGluLCBib29sIGlzQXR0cmlidXRlVmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQg
YXBwZW5kU3RyaW5nKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBzdHIpCiB7
Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBzID0gIiI7CisgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hh
cmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOworfQorICAgIAorc3RhdGljIHZvaWQgYXBwZW5kQXR0
cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHIpCit7
CisgICAgY29uc3QgVUNoYXIqIHVjaGFycyA9IGF0dHIuY2hhcmFjdGVycygpOworICAgIHVuc2ln
bmVkIGxlbiA9IGF0dHIubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbGFzdENvcGllZEZyb20gPSAw
OwogCi0gICAgdW5zaWduZWQgbGVuID0gaW4ubGVuZ3RoKCk7CisgICAgc3RhdGljIGNvbnN0IFN0
cmluZyBhbXBFbnRpdHkoIiZhbXA7Iik7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyBsdEVudGl0
eSgiJmx0OyIpOworICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgcXVvdEVudGl0eSgiJnF1b3Q7Iik7
CisgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAg
IHN3aXRjaCAoaW5baV0pIHsKKyAgICAgICAgVUNoYXIgYyA9IHVjaGFyc1tpXTsKKyAgICAgICAg
c3dpdGNoIChjKSB7CiAgICAgICAgICAgICBjYXNlICcmJzoKLSAgICAgICAgICAgICAgICBzICs9
ICImYW1wOyI7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh1Y2hhcnMgKyBsYXN0Q29w
aWVkRnJvbSwgaSAtIGxhc3RDb3BpZWRGcm9tKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRTdHJp
bmcocmVzdWx0LCBhbXBFbnRpdHkpOworICAgICAgICAgICAgICAgIGxhc3RDb3BpZWRGcm9tID0g
aSArIDE7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICc8JzoKLSAg
ICAgICAgICAgICAgICBzICs9ICImbHQ7IjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgJz4nOgotICAgICAgICAgICAgICAgIHMgKz0gIiZndDsiOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQodWNoYXJzICsgbGFzdENvcGllZEZyb20sIGkgLSBsYXN0Q29w
aWVkRnJvbSk7CisgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgbHRFbnRpdHkp
OworICAgICAgICAgICAgICAgIGxhc3RDb3BpZWRGcm9tID0gaSArIDE7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgICAgICBpZiAoaXNB
dHRyaWJ1dGVWYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBzICs9ICImcXVvdDsiOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgLy8gZmFsbCB0aHJvdWdoCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHMgKz0gRGVwcmVjYXRlZENoYXIoaW5baV0pOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQodWNoYXJzICsgbGFzdENvcGllZEZyb20sIGkgLSBsYXN0Q29waWVkRnJvbSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgcXVvdEVudGl0eSk7CisgICAgICAgICAgICAg
ICAgbGFzdENvcGllZEZyb20gPSBpICsgMTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBy
ZXN1bHQuYXBwZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBsZW4gLSBsYXN0Q29waWVkRnJv
bSk7Cit9CisgICAgCitzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBlc2NhcGVDb250ZW50VGV4dChj
b25zdCBTdHJpbmcmIGluKQoreworICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9ICIiOworCisgICAg
dW5zaWduZWQgbGVuID0gaW4ubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbGFzdENvcGllZEZyb20g
PSAwOworCisgICAgY29uc3QgVUNoYXIqIHVjaGFycyA9IGluLmNoYXJhY3RlcnMoKTsKKyAgICBj
b25zdCBEZXByZWNhdGVkQ2hhciogZGNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXBy
ZWNhdGVkQ2hhcio+KHVjaGFycyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
OyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IHVjaGFyc1tpXTsKKyAgICAgICAgaWYgKGMgPT0g
JyYnIHwgYyA9PSAnPCcpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKGRjaGFycyArIGxhc3RDb3Bp
ZWRGcm9tLCBpIC0gbGFzdENvcGllZEZyb20pOworICAgICAgICAgICAgaWYgKGMgPT0gJyYnKQor
ICAgICAgICAgICAgICAgIHMgKz0gIiZhbXA7IjsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAg
ICAgICAgICAgcyArPSAiJmx0OyI7CisgICAgICAgICAgICBsYXN0Q29waWVkRnJvbSA9IGkgKyAx
OworICAgICAgICB9CisgICAgfQorCisgICAgcy5hcHBlbmQoZGNoYXJzICsgbGFzdENvcGllZEZy
b20sIGxlbiAtIGxhc3RDb3BpZWRGcm9tKTsKIAogICAgIHJldHVybiBzOwogfQorCiAgICAgCi1z
dGF0aWMgU3RyaW5nIHVybEF0dHJpYnV0ZVRvUXVvdGVkU3RyaW5nKFN0cmluZyB1cmxTdHJpbmcp
CitzdGF0aWMgdm9pZCBhcHBlbmRFc2NhcGVkQ29udGVudChWZWN0b3I8VUNoYXI+JiByZXN1bHQs
IHBhaXI8Y29uc3QgVUNoYXIqLCBzaXplX3Q+IHJhbmdlKQogewotICAgIFVDaGFyIHF1b3RlQ2hh
ciA9ICciJzsKKyAgICBjb25zdCBVQ2hhciogdWNoYXJzID0gcmFuZ2UuZmlyc3Q7CisgICAgdW5z
aWduZWQgbGVuID0gcmFuZ2Uuc2Vjb25kOworICAgIHVuc2lnbmVkIGxhc3RDb3BpZWRGcm9tID0g
MDsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGFtcEVudGl0eSgiJmFtcDsiKTsKKyAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nIGx0RW50aXR5KCImbHQ7Iik7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSB1Y2hhcnNb
aV07CisgICAgICAgIGlmIChjID09ICcmJyB8IGMgPT0gJzwnKSB7CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBpIC0gbGFzdENvcGllZEZyb20pOwor
ICAgICAgICAgICAgaWYgKGMgPT0gJyYnKQorICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhy
ZXN1bHQsIGFtcEVudGl0eSk7CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIGFw
cGVuZFN0cmluZyhyZXN1bHQsIGx0RW50aXR5KTsKKyAgICAgICAgICAgIGxhc3RDb3BpZWRGcm9t
ID0gaSArIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmVzdWx0LmFwcGVuZCh1Y2hh
cnMgKyBsYXN0Q29waWVkRnJvbSwgbGVuIC0gbGFzdENvcGllZEZyb20pOworfSAgICAKKworc3Rh
dGljIGlubGluZSB2b2lkIGFwcGVuZERlcHJlY2F0ZWRTdHJpbmcoVmVjdG9yPFVDaGFyPiYgcmVz
dWx0LCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzdHIpCit7CisgICAgcmVzdWx0LmFwcGVuZChy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLnVuaWNvZGUoKSksIHN0ci5sZW5ndGgo
KSk7Cit9ICAgIAorICAgIAorc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFs
dWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBTdHJpbmcgdXJsU3RyaW5nKQoreworICAgIFVDaGFy
IHF1b3RlQ2hhciA9ICdcIic7CiAgICAgaWYgKHVybFN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS5z
dGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkgewogICAgICAgICAvLyBtaW5pbWFsIGVz
Y2FwaW5nIGZvciBqYXZhc2NyaXB0IHVybHMKLSAgICAgICAgaWYgKHVybFN0cmluZy5jb250YWlu
cygnIicpKSB7CisgICAgICAgIGlmICh1cmxTdHJpbmcuY29udGFpbnMoJ1wiJykpIHsKICAgICAg
ICAgICAgIGlmICh1cmxTdHJpbmcuY29udGFpbnMoJ1wnJykpCi0gICAgICAgICAgICAgICAgdXJs
U3RyaW5nLnJlcGxhY2UoJyInLCAiJnF1b3Q7Iik7CisgICAgICAgICAgICAgICAgdXJsU3RyaW5n
LnJlcGxhY2UoJ1wiJywgIiZxdW90OyIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIHF1b3RlQ2hhciA9ICdcJyc7CiAgICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgLy8g
RklYTUUgdGhpcyBkb2VzIG5vdCBmdWxseSBtYXRjaCBvdGhlciBicm93c2Vycy4gRmlyZWZveCBl
c2NhcGVzIHNwYWNlcyBhbmQgb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLgotICAgICAgICB1cmxT
dHJpbmcgPSBlc2NhcGVUZXh0Rm9yTWFya3VwKHVybFN0cmluZy5kZXByZWNhdGVkU3RyaW5nKCks
IHRydWUpOwotCi0gICAgU3RyaW5nIHJlczsKLSAgICByZXMuYXBwZW5kKHF1b3RlQ2hhcik7Ci0g
ICAgcmVzLmFwcGVuZCh1cmxTdHJpbmcpOwotICAgIHJlcy5hcHBlbmQocXVvdGVDaGFyKTsKLSAg
ICByZXR1cm4gcmVzOwotfQorICAgICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7CisgICAg
ICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHVybFN0cmluZyk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQocXVvdGVDaGFyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIC8vIEZJWE1FIHRo
aXMgZG9lcyBub3QgZnVsbHkgbWF0Y2ggb3RoZXIgYnJvd3NlcnMuIEZpcmVmb3ggZXNjYXBlcyBz
cGFjZXMgYW5kIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgICByZXN1bHQuYXBwZW5kKHF1
b3RlQ2hhcik7CisgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUocmVzdWx0LCB1cmxTdHJpbmcpOwor
ICAgIHJlc3VsdC5hcHBlbmQocXVvdGVDaGFyKTsgICAgCit9CisgICAgCiBzdGF0aWMgU3RyaW5n
IHN0cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3QgTm9kZSAqbm9kZSwgY29uc3QgUmFuZ2UgKnJhbmdl
KQogeworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBub2RlLT5ub2RlVmFsdWUoKTsK
KwogICAgIFN0cmluZyBzdHIgPSBub2RlLT5ub2RlVmFsdWUoKS5jb3B5KCk7CisgICAgRXhjZXB0
aW9uQ29kZSBlYzsKKyAgICBpZiAobm9kZSA9PSByYW5nZS0+ZW5kQ29udGFpbmVyKGVjKSkKKyAg
ICAgICAgc3RyLnRydW5jYXRlKHJhbmdlLT5lbmRPZmZzZXQoZWMpKTsKKyAgICBpZiAobm9kZSA9
PSByYW5nZS0+c3RhcnRDb250YWluZXIoZWMpKQorICAgICAgICBzdHIucmVtb3ZlKDAsIHJhbmdl
LT5zdGFydE9mZnNldChlYykpOworICAgIHJldHVybiBzdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUg
cGFpcjxjb25zdCBVQ2hhciosIHNpemVfdD4gdWNoYXJSYW5nZShjb25zdCBOb2RlICpub2RlLCBj
b25zdCBSYW5nZSAqcmFuZ2UpCit7CisgICAgU3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgp
OworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3RyLmNoYXJhY3RlcnMoKTsKKyAgICBz
aXplX3QgbGVuZ3RoID0gc3RyLmxlbmd0aCgpOworCiAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIGlmIChub2RlID09IHJhbmdlLT5lbmRDb250YWlu
ZXIoZWMpKQotICAgICAgICAgICAgc3RyLnRydW5jYXRlKHJhbmdlLT5lbmRPZmZzZXQoZWMpKTsK
LSAgICAgICAgaWYgKG5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSkKLSAgICAgICAg
ICAgIHN0ci5yZW1vdmUoMCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKSk7CisgICAgICAgICAgICBs
ZW5ndGggPSByYW5nZS0+ZW5kT2Zmc2V0KGVjKTsKKyAgICAgICAgaWYgKG5vZGUgPT0gcmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKGVjKSkgeworICAgICAgICAgICAgc2l6ZV90IHN0YXJ0ID0gcmFuZ2Ut
PnN0YXJ0T2Zmc2V0KGVjKTsKKyAgICAgICAgICAgIGNoYXJhY3RlcnMgKz0gc3RhcnQ7CisgICAg
ICAgICAgICBsZW5ndGggLT0gc3RhcnQ7CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHN0
cjsKKyAgICAKKyAgICByZXR1cm4gbWFrZV9wYWlyKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9Ci0K
KyAgICAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRVQ2hhclJhbmdlKFZlY3RvcjxVQ2hhcj4m
IHJlc3VsdCwgY29uc3QgcGFpcjxjb25zdCBVQ2hhciosIHNpemVfdD4gcmFuZ2UpCit7CisgICAg
cmVzdWx0LmFwcGVuZChyYW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kKTsKK30KKyAgICAKIHN0YXRp
YyBTdHJpbmcgcmVuZGVyZWRUZXh0KGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5n
ZSkKIHsKICAgICBpZiAoIW5vZGUtPmlzVGV4dE5vZGUoKSkKQEAgLTIyNywxMTMgKzMxOSwxNTYg
QEAgc3RhdGljIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cihjb25zdAogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgU3RyaW5nIGFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcm
IHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBucywgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBs
KiwgQXRvbWljU3RyaW5nSW1wbCo+JiBuYW1lc3BhY2VzKQorc3RhdGljIHZvaWQgYXBwZW5kTmFt
ZXNwYWNlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgs
IGNvbnN0IEF0b21pY1N0cmluZyYgbnMsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21p
Y1N0cmluZ0ltcGwqPiYgbmFtZXNwYWNlcykKIHsKICAgICBpZiAobnMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gIiI7Ci0gICAgCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgLy8g
VXNlIGVtcHR5QXRvbXMncyBpbXBsKCkgZm9yIGJvdGggbnVsbCBhbmQgZW1wdHkgc3RyaW5ncyBz
aW5jZSB0aGUgSGFzaE1hcCBjYW4ndCBoYW5kbGUgMCBhcyBhIGtleQogICAgIEF0b21pY1N0cmlu
Z0ltcGwqIHByZSA9IHByZWZpeC5pc0VtcHR5KCkgPyBlbXB0eUF0b20uaW1wbCgpIDogcHJlZml4
LmltcGwoKTsKICAgICBBdG9taWNTdHJpbmdJbXBsKiBmb3VuZE5TID0gbmFtZXNwYWNlcy5nZXQo
cHJlKTsKICAgICBpZiAoZm91bmROUyAhPSBucy5pbXBsKCkpIHsKICAgICAgICAgbmFtZXNwYWNl
cy5zZXQocHJlLCBucy5pbXBsKCkpOwotICAgICAgICByZXR1cm4gIiB4bWxucyIgKyAoIXByZWZp
eC5pc0VtcHR5KCkgPyAiOiIgKyBwcmVmaXggOiAiIikgKyAiPVwiIiArIGVzY2FwZVRleHRGb3JN
YXJrdXAobnMsIHRydWUpICsgIlwiIjsKKyAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyB4bWxu
cygieG1sbnMiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICBhcHBlbmRT
dHJpbmcocmVzdWx0LCB4bWxucyk7CisgICAgICAgIGlmICghcHJlZml4LmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnOicpOworICAgICAgICAgICAgYXBwZW5kU3RyaW5n
KHJlc3VsdCwgcHJlZml4KTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5hcHBlbmQoJz0n
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOworICAgICAgICBhcHBlbmRBdHRyaWJ1dGVW
YWx1ZShyZXN1bHQsIG5zKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwogICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gIiI7CiB9Ci0KLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN0YXJ0TWFy
a3VwKGNvbnN0IE5vZGUgKm5vZGUsIGNvbnN0IFJhbmdlICpyYW5nZSwgRUFubm90YXRlRm9ySW50
ZXJjaGFuZ2UgYW5ub3RhdGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcyA9IGZhbHNlLCBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJpbmdJbXBsKj4qIG5hbWVzcGFjZXMg
PSAwKQorICAgIAorc3RhdGljIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYg
cmVzdWx0LCBjb25zdCBOb2RlICpub2RlLCBjb25zdCBSYW5nZSAqcmFuZ2UsIEVBbm5vdGF0ZUZv
ckludGVyY2hhbmdlIGFubm90YXRlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBmYWxz
ZSwgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+KiBuYW1lc3Bh
Y2VzID0gMCkKIHsKICAgICBib29sIGRvY3VtZW50SXNIVE1MID0gbm9kZS0+ZG9jdW1lbnQoKS0+
aXNIVE1MRG9jdW1lbnQoKTsKICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKICAgICAg
ICAgY2FzZSBOb2RlOjpURVhUX05PREU6IHsKICAgICAgICAgICAgIGlmIChOb2RlKiBwYXJlbnQg
PSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAocGFyZW50LT5oYXNU
YWdOYW1lKGxpc3RpbmdUYWcpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnQtPmhh
c1RhZ05hbWUoc2NyaXB0VGFnKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50LT5o
YXNUYWdOYW1lKHN0eWxlVGFnKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50LT5o
YXNUYWdOYW1lKHRleHRhcmVhVGFnKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50
LT5oYXNUYWdOYW1lKHhtcFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdW
YWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdlKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBib29sIHVzZVJlbmRlcmVkVGV4dCA9IGFubm90YXRlICYmICFlbmNs
b3NpbmdOb2RlV2l0aFRhZyhjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgc2VsZWN0VGFnKTsKLSAg
ICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbWFya3VwID0gZXNjYXBlVGV4dEZvck1hcmt1cCh1
c2VSZW5kZXJlZFRleHQgPyByZW5kZXJlZFRleHQobm9kZSwgcmFuZ2UpIDogc3RyaW5nVmFsdWVG
b3JSYW5nZShub2RlLCByYW5nZSksIGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiBhbm5vdGF0
ZSA/IGNvbnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQobWFya3VwLCBzdGF0aWNfY2Fz
dDxjb25zdCBUZXh0Kj4obm9kZSkpIDogbWFya3VwOworICAgICAgICAgICAgICAgICAgICB8fCBw
YXJlbnQtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKQorICAgICAgICAgICAgICAgICAgICB8fCBwYXJl
bnQtPmhhc1RhZ05hbWUoc3R5bGVUYWcpCisgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+
aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykKKyAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50LT5o
YXNUYWdOYW1lKHhtcFRhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kVUNoYXJSYW5n
ZShyZXN1bHQsIHVjaGFyUmFuZ2Uobm9kZSwgcmFuZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFhbm5vdGF0ZSkgeworICAgICAgICAgICAgICAgIGFwcGVuZEVzY2FwZWRDb250ZW50KHJlc3Vs
dCwgdWNoYXJSYW5nZShub2RlLCByYW5nZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIHVzZVJlbmRlcmVkVGV4
dCA9ICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgc2VsZWN0
VGFnKTsKKyAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbWFya3VwID0gZXNjYXBlQ29udGVu
dFRleHQodXNlUmVuZGVyZWRUZXh0ID8gcmVuZGVyZWRUZXh0KG5vZGUsIHJhbmdlKSA6IHN0cmlu
Z1ZhbHVlRm9yUmFuZ2Uobm9kZSwgcmFuZ2UpKTsKKyAgICAgICAgICAgIGlmIChhbm5vdGF0ZSkK
KyAgICAgICAgICAgICAgICBtYXJrdXAgPSBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9y
bWF0KG1hcmt1cCwgc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dCo+KG5vZGUpKTsKKyAgICAgICAgICAg
IGFwcGVuZERlcHJlY2F0ZWRTdHJpbmcocmVzdWx0LCBtYXJrdXApOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6Ci0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ29tbWVudCo+KG5vZGUpLT50b1N0cmluZygp
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHN0
YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihub2RlKS0+dG9TdHJpbmcoKSk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOiB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogSSB0aGluayB0aGUgY29tbWVudCBiZWxvdyAoYW5kIHRoZXJlZm9yZSB0aGlz
IGNvZGUpIGlzIHdyb25nIG5vdwogICAgICAgICAgICAgLy8gRG9jdW1lbnRzIGRvIG5vdCBub3Jt
YWxseSBjb250YWluIGEgZG9jVHlwZSBhcyBhIGNoaWxkIG5vZGUsIGZvcmNlIGl0IHRvIHByaW50
IGhlcmUgaW5zdGVhZC4KICAgICAgICAgICAgIGNvbnN0IERvY3VtZW50VHlwZSogZG9jVHlwZSA9
IHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50Kj4obm9kZSktPmRvY3R5cGUoKTsKICAgICAgICAg
ICAgIGlmIChkb2NUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBkb2NUeXBlLT50b1N0cmlu
ZygpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAg
ICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBkb2NUeXBlLT50b1N0cmluZygpKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJB
R01FTlRfTk9ERToKLSAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudFR5cGUqPihub2RlKS0+dG9TdHJpbmcoKS5kZXBy
ZWNhdGVkU3RyaW5nKCk7CisgICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBzdGF0aWNf
Y2FzdDxjb25zdCBEb2N1bWVudFR5cGUqPihub2RlKS0+dG9TdHJpbmcoKSk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3RydWN0
aW9uKj4obm9kZSktPnRvU3RyaW5nKCkuZGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICAgICAg
YXBwZW5kU3RyaW5nKHJlc3VsdCwgc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3RydWN0
aW9uKj4obm9kZSktPnRvU3RyaW5nKCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTm9kZTo6RUxFTUVOVF9OT0RFOiB7Ci0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG1h
cmt1cCA9IERlcHJlY2F0ZWRDaGFyKCc8Jyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc8
Jyk7CiAgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBlbCA9IHN0YXRpY19jYXN0PGNvbnN0IEVs
ZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgJj0gaXNC
bG9jayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSk7Ci0gICAgICAgICAgICBtYXJrdXAgKz0gZWwt
Pm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgICAg
ICBib29sIGNvbnZlcnQgPSBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYgaXNCbG9jayhjb25zdF9j
YXN0PE5vZGUqPihub2RlKSk7CisgICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBlbC0+
bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKICAgICAgICAgICAgIE5hbWVkQXR0ck1hcCAqYXR0
cnMgPSBlbC0+YXR0cmlidXRlcygpOwogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0
cnMtPmxlbmd0aCgpOwogICAgICAgICAgICAgaWYgKCFkb2N1bWVudElzSFRNTCAmJiBuYW1lc3Bh
Y2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUVsZW0oZWwpKQotICAgICAgICAgICAgICAgIG1hcmt1
cCArPSBhZGROYW1lc3BhY2UoZWwtPnByZWZpeCgpLCBlbC0+bmFtZXNwYWNlVVJJKCksICpuYW1l
c3BhY2VzKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgYXBwZW5kTmFtZXNw
YWNlKHJlc3VsdCwgZWwtPnByZWZpeCgpLCBlbC0+bmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2Vz
KTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSAqYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJ
dGVtKGkpOwogICAgICAgICAgICAgICAgIC8vIFdlJ2xsIGhhbmRsZSB0aGUgc3R5bGUgYXR0cmli
dXRlIHNlcGFyYXRlbHksIGJlbG93LgotICAgICAgICAgICAgICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gc3R5bGVBdHRyICYmIGVsLT5pc0hUTUxFbGVtZW50KCkgJiYgKGFubm90YXRlIHx8IGNvbnZl
cnRCbG9ja3NUb0lubGluZXMpKQorICAgICAgICAgICAgICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
c3R5bGVBdHRyICYmIGVsLT5pc0hUTUxFbGVtZW50KCkgJiYgKGFubm90YXRlIHx8IGNvbnZlcnQp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgJyk7CisKICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRJc0hUTUwpCi0gICAg
ICAgICAgICAgICAgICAgIG1hcmt1cCArPSAiICIgKyBhdHRyLT5uYW1lKCkubG9jYWxOYW1lKCku
ZGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVz
dWx0LCBhdHRyLT5uYW1lKCkubG9jYWxOYW1lKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgbWFya3VwICs9ICIgIiArIGF0dHItPm5hbWUoKS50b1N0cmluZygp
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJl
c3VsdCwgYXR0ci0+bmFtZSgpLnRvU3RyaW5nKCkpOworCisgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnPScpOworCiAgICAgICAgICAgICAgICAgaWYgKGVsLT5pc1VSTEF0dHJpYnV0ZShh
dHRyKSkKLSAgICAgICAgICAgICAgICAgICAgbWFya3VwICs9ICI9IiArIHVybEF0dHJpYnV0ZVRv
UXVvdGVkU3RyaW5nKGF0dHItPnZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1hcmt1cCArPSAiPVwiIiArIGVzY2Fw
ZVRleHRGb3JNYXJrdXAoYXR0ci0+dmFsdWUoKSwgdHJ1ZSkgKyAiXCIiOworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShyZXN1bHQsIGF0dHItPnZhbHVl
KCkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCdcIicpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShy
ZXN1bHQsIGF0dHItPnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCdcIicpOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGlmICghZG9jdW1l
bnRJc0hUTUwgJiYgbmFtZXNwYWNlcyAmJiBzaG91bGRBZGROYW1lc3BhY2VBdHRyKGF0dHIsICpu
YW1lc3BhY2VzKSkKLSAgICAgICAgICAgICAgICAgICAgbWFya3VwICs9IGFkZE5hbWVzcGFjZShh
dHRyLT5wcmVmaXgoKSwgYXR0ci0+bmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKS5kZXByZWNh
dGVkU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5hbWVzcGFjZShyZXN1bHQs
IGF0dHItPnByZWZpeCgpLCBhdHRyLT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZWwtPmlzSFRNTEVsZW1l
bnQoKSAmJiAoYW5ub3RhdGUgfHwgY29udmVydEJsb2Nrc1RvSW5saW5lcykpIHsKKyAgICAgICAg
ICAgIGlmIChlbC0+aXNIVE1MRWxlbWVudCgpICYmIChhbm5vdGF0ZSB8fCBjb252ZXJ0KSkgewog
ICAgICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBjb25zdF9jYXN0PEVsZW1lbnQqPihl
bCk7CiAgICAgICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBz
dHlsZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVudCktPmdldElubGluZVN0eWxl
RGVjbCgpLT5jb3B5KCk7CiAgICAgICAgICAgICAgICAgaWYgKGFubm90YXRlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVGcm9t
TWF0Y2hlZFJ1bGVzID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChjb25zdF9jYXN0
PEVsZW1lbnQqPihlbCkpOwogICAgICAgICAgICAgICAgICAgICBzdHlsZS0+bWVyZ2Uoc3R5bGVG
cm9tTWF0Y2hlZFJ1bGVzLmdldCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbnZlcnRCbG9ja3NUb0lubGluZXMpCisgICAgICAgICAgICAgICAgaWYgKGNvbnZl
cnQpCiAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9ESVNQ
TEFZLCBDU1NfVkFMX0lOTElORSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5s
ZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIG1hcmt1cCArPSAiIHN0eWxlPVwiIiAr
IGVzY2FwZVRleHRGb3JNYXJrdXAoc3R5bGUtPmNzc1RleHQoKSwgdHJ1ZSkgKyAiXCIiOworICAg
ICAgICAgICAgICAgIGlmIChzdHlsZS0+bGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgc3R5bGVQcmVmaXgoIiBzdHlsZT1cIiIpOworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBzdHlsZVByZWZpeCk7CisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgc3R5bGUtPmNzc1RleHQo
KSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1wiJyk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hv
dWxkU2VsZkNsb3NlKGVsKSkgewogICAgICAgICAgICAgICAgIGlmIChlbC0+aXNIVE1MRWxlbWVu
dCgpKQotICAgICAgICAgICAgICAgICAgICBtYXJrdXAgKz0gIiAiOyAvLyBYSFRNTCAxLjAgPC0+
IEhUTUwgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgICAgICBtYXJrdXAgKz0gIi8+IjsKLSAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1hcmt1cCArPSAiPiI7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHJldHVybiBtYXJrdXA7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAnKTsgLy8gWEhUTUwgMS4wIDwtPiBIVE1MIGNvbXBhdGliaWxpdHkuCisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnPicpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6Ci0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0RBVEFTZWN0aW9uKj4obm9kZSktPnRvU3RyaW5nKCkuZGVw
cmVjYXRlZFN0cmluZygpOworICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ0RBVEFTZWN0aW9uKj4obm9kZSktPnRvU3RyaW5nKCkpOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6CiAgICAgICAgIGNh
c2UgTm9kZTo6RU5USVRZX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5D
RV9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6Ok5PVEFUSU9OX05PREU6CiAgICAgICAgIGNhc2Ug
Tm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4gIiI7Cit9CisKK3N0
YXRpYyBTdHJpbmcgZ2V0U3RhcnRNYXJrdXAoY29uc3QgTm9kZSAqbm9kZSwgY29uc3QgUmFuZ2Ug
KnJhbmdlLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgYm9vbCBjb252ZXJ0Qmxv
Y2tzVG9JbmxpbmVzID0gZmFsc2UsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0
cmluZ0ltcGwqPiogbmFtZXNwYWNlcyA9IDApCit7CisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7
CisgICAgYXBwZW5kU3RhcnRNYXJrdXAocmVzdWx0LCBub2RlLCByYW5nZSwgYW5ub3RhdGUsIGNv
bnZlcnRCbG9ja3NUb0lubGluZXMsIG5hbWVzcGFjZXMpOworICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KHJlc3VsdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBkb2VzSFRNTEZvcmJpZEVuZFRh
Zyhjb25zdCBOb2RlICpub2RlKQpAQCAtMzYxLDM1ICs0OTYsNDQgQEAgc3RhdGljIGlubGluZSBi
b29sIHNob3VsZFNlbGZDbG9zZShjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
RGVwcmVjYXRlZFN0cmluZyBlbmRNYXJrdXAoY29uc3QgTm9kZSAqbm9kZSkKK3N0YXRpYyB2b2lk
IGFwcGVuZEVuZE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUp
Cit7CisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgc2hvdWxkU2VsZkNsb3NlKG5v
ZGUpIHx8ICghbm9kZS0+aGFzQ2hpbGROb2RlcygpICYmIGRvZXNIVE1MRm9yYmlkRW5kVGFnKG5v
ZGUpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVzdWx0LmFwcGVuZCgnPCcpOworICAgIHJl
c3VsdC5hcHBlbmQoJy8nKTsKKyAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBzdGF0aWNfY2FzdDxj
b25zdCBFbGVtZW50Kj4obm9kZSktPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CisgICAgcmVz
dWx0LmFwcGVuZCgnPicpOworfQorCitzdGF0aWMgU3RyaW5nIGdldEVuZE1hcmt1cChjb25zdCBO
b2RlICpub2RlKQogewotICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3VsZFNl
bGZDbG9zZShub2RlKSAmJiAobm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8ICFkb2VzSFRNTEZvcmJp
ZEVuZFRhZyhub2RlKSkpCi0gICAgICAgIHJldHVybiAiPC8iICsgc3RhdGljX2Nhc3Q8Y29uc3Qg
RWxlbWVudCo+KG5vZGUpLT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkuZGVwcmVjYXRlZFN0cmlu
ZygpICsgIj4iOwotICAgIHJldHVybiAiIjsKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAg
ICBhcHBlbmRFbmRNYXJrdXAocmVzdWx0LCBub2RlKTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9w
dChyZXN1bHQpOwogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBtYXJrdXAoTm9kZSogc3Rh
cnROb2RlLCBib29sIG9ubHlJbmNsdWRlQ2hpbGRyZW4sIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBj
b25zdCBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJpbmdJbXBsKj4qIG5hbWVz
cGFjZXMgPSAwKQorc3RhdGljIHZvaWQgYXBwZW5kTWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3Vs
dCwgTm9kZSogc3RhcnROb2RlLCBib29sIG9ubHlJbmNsdWRlQ2hpbGRyZW4sIFZlY3RvcjxOb2Rl
Kj4qIG5vZGVzLCBjb25zdCBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJpbmdJ
bXBsKj4qIG5hbWVzcGFjZXMgPSAwKQogewogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCos
IEF0b21pY1N0cmluZ0ltcGwqPiBuYW1lc3BhY2VIYXNoOwogICAgIGlmIChuYW1lc3BhY2VzKQog
ICAgICAgICBuYW1lc3BhY2VIYXNoID0gKm5hbWVzcGFjZXM7CiAgICAgCi0gICAgRGVwcmVjYXRl
ZFN0cmluZyBtZSA9ICIiOwogICAgIGlmICghb25seUluY2x1ZGVDaGlsZHJlbikgewogICAgICAg
ICBpZiAobm9kZXMpCiAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKHN0YXJ0Tm9kZSk7Ci0gICAg
ICAgIG1lICs9IHN0YXJ0TWFya3VwKHN0YXJ0Tm9kZSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVy
Y2hhbmdlLCBmYWxzZSwgJm5hbWVzcGFjZUhhc2gpOworICAgICAgICAKKyAgICAgICAgYXBwZW5k
U3RhcnRNYXJrdXAocmVzdWx0LHN0YXJ0Tm9kZSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hh
bmdlLCBmYWxzZSwgJm5hbWVzcGFjZUhhc2gpOwogICAgIH0KICAgICAvLyBwcmludCBjaGlsZHJl
bgogICAgIGlmICghKHN0YXJ0Tm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiBk
b2VzSFRNTEZvcmJpZEVuZFRhZyhzdGFydE5vZGUpKSkKICAgICAgICAgZm9yIChOb2RlKiBjdXJy
ZW50ID0gc3RhcnROb2RlLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50
LT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgbWUgKz0gbWFya3VwKGN1cnJlbnQsIGZhbHNl
LCBub2RlcywgJm5hbWVzcGFjZUhhc2gpOworICAgICAgICAgICAgYXBwZW5kTWFya3VwKHJlc3Vs
dCwgY3VycmVudCwgZmFsc2UsIG5vZGVzLCAmbmFtZXNwYWNlSGFzaCk7CiAgICAgCiAgICAgLy8g
UHJpbnQgbXkgZW5kaW5nIHRhZwogICAgIGlmICghb25seUluY2x1ZGVDaGlsZHJlbikKLSAgICAg
ICAgbWUgKz0gZW5kTWFya3VwKHN0YXJ0Tm9kZSk7Ci0gICAgCi0gICAgcmV0dXJuIG1lOworICAg
ICAgICBhcHBlbmRFbmRNYXJrdXAocmVzdWx0LCBzdGFydE5vZGUpOwogfQogCiBzdGF0aWMgdm9p
ZCBjb21wbGV0ZVVSTHMoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBiYXNlVVJMKQpAQCAtNDYw
LDExICs2MDQsMzUgQEAgc3RhdGljIGJvb2wgZWxlbWVudEhhc1RleHREZWNvcmF0aW9uUHJvcAog
ICAgIHJldHVybiAhcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShzdHlsZS5nZXQoKSwgQ1NT
X1BST1BfVEVYVF9ERUNPUkFUSU9OKTsKIH0KIAorU3RyaW5nIGpvaW5NYXJrdXBzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+IHByZU1hcmt1cHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwb3N0TWFya3Vw
cykKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gMDsKKworICAgIHNpemVfdCBwcmVDb3VudCA9IHBy
ZU1hcmt1cHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlQ291bnQ7ICsr
aSkKKyAgICAgICAgbGVuZ3RoICs9IHByZU1hcmt1cHNbaV0ubGVuZ3RoKCk7CisKKyAgICBzaXpl
X3QgcG9zdENvdW50ID0gcG9zdE1hcmt1cHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcG9zdENvdW50OyArK2kpCisgICAgICAgIGxlbmd0aCArPSBwb3N0TWFya3Vwc1tpXS5s
ZW5ndGgoKTsKKworICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBwcmVDb3VudDsgaSA+IDA7
IC0taSkKKyAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgcHJlTWFya3Vwc1tpIC0gMV0pOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3N0Q291bnQ7ICsraSkKKyAgICAgICAgYXBw
ZW5kU3RyaW5nKHJlc3VsdCwgcG9zdE1hcmt1cHNbaV0pOworCisgICAgcmV0dXJuIFN0cmluZzo6
YWRvcHQocmVzdWx0KTsKK30KKwogLy8gRklYTUU6IFNob3VsZG4ndCB3ZSBvbWl0IHN0eWxlIGlu
Zm8gd2hlbiBhbm5vdGF0ZSA9PSBEb05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2U/IAogLy8gRklY
TUU6IEF0IGxlYXN0LCBhbm5vdGF0aW9uIGFuZCBzdHlsZSBpbmZvIHNob3VsZCBwcm9iYWJseSBu
b3QgYmUgaW5jbHVkZWQgaW4gcmFuZ2UubWFya3VwU3RyaW5nKCkKLURlcHJlY2F0ZWRTdHJpbmcg
Y3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEVB
bm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGlu
ZXMpCitTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgVmVjdG9yPE5vZGUq
Piogbm9kZXMsIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBib29sIGNvbnZlcnRC
bG9ja3NUb0lubGluZXMpCiB7Ci0gICAgc3RhdGljIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgaW50
ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZygiPGJyIGNsYXNzPVwiIikg
KyBBcHBsZUludGVyY2hhbmdlTmV3bGluZSArICJcIj4iOworICAgIHN0YXRpYyBjb25zdCBTdHJp
bmcgaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nID0gU3RyaW5nKCI8YnIgY2xhc3M9XCIiKSArIEFw
cGxlSW50ZXJjaGFuZ2VOZXdsaW5lICsgIlwiPiI7CiAKICAgICBpZiAoIXJhbmdlIHx8IHJhbmdl
LT5pc0RldGFjaGVkKCkpCiAgICAgICAgIHJldHVybiAiIjsKQEAgLTQ5Myw3ICs2NjEsOCBAQCBE
ZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAKICAgICBkb2N1bWVudC0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBEZXByZWNhdGVk
U3RyaW5nTGlzdCBtYXJrdXBzOworICAgIFZlY3RvcjxTdHJpbmc+IG1hcmt1cHM7CisgICAgVmVj
dG9yPFN0cmluZz4gcHJlTWFya3VwczsKICAgICBOb2RlKiBwYXN0RW5kID0gdXBkYXRlZFJhbmdl
LT5wYXN0RW5kTm9kZSgpOwogICAgIE5vZGUqIGxhc3RDbG9zZWQgPSAwOwogICAgIFZlY3RvcjxO
b2RlKj4gYW5jZXN0b3JzVG9DbG9zZTsKQEAgLTUzMyw3ICs3MDIsNyBAQCBEZXByZWNhdGVkU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAgICAgICAgIAogICAgICAgICAvLyBBZGQgdGhl
IG5vZGUgdG8gdGhlIG1hcmt1cC4KICAgICAgICAgaWYgKGFkZE1hcmt1cEZvck5vZGUpIHsKLSAg
ICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKHN0YXJ0TWFya3VwKG4sIHVwZGF0ZWRSYW5nZS5nZXQo
KSwgYW5ub3RhdGUpKTsKKyAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGdldFN0YXJ0TWFya3Vw
KG4sIHVwZGF0ZWRSYW5nZS5nZXQoKSwgYW5ub3RhdGUpKTsKICAgICAgICAgICAgIGlmIChub2Rl
cykKICAgICAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKG4pOwogICAgICAgICB9CkBAIC01NDEs
NyArNzEwLDcgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAg
ICAgICBpZiAobi0+Zmlyc3RDaGlsZCgpID09IDAgfHwgc2tpcERlc2NlbmRhbnRzKSB7CiAgICAg
ICAgICAgICAvLyBOb2RlIGhhcyBubyBjaGlsZHJlbiwgb3Igd2UgYXJlIHNraXBwaW5nIGl0J3Mg
ZGVzY2VuZGFudHMsIGFkZCBpdHMgY2xvc2UgdGFnIG5vdy4KICAgICAgICAgICAgIGlmIChhZGRN
YXJrdXBGb3JOb2RlKSB7Ci0gICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZW5kTWFya3Vw
KG4pKTsKKyAgICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChnZXRFbmRNYXJrdXAobikpOwog
ICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBuOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC01NTQsNyArNzIzLDcgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29u
c3QgUmFuZwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT0gcGFzdEVuZCAmJiBu
ZXh0LT5pc0Rlc2NlbmRhbnRPZihhbmNlc3RvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYXQgdGhlIGVuZCBvZiB0
aGUgcmFuZ2UsIGNsb3NlIGFuY2VzdG9ycyB1cCB0byBzaWJsaW5nIG9mIG5leHQgbm9kZS4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChhbmNlc3Rvcikp
OworICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0RW5kTWFya3VwKGFu
Y2VzdG9yKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2xvc2VkID0gYW5jZXN0b3I7
CiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvcnNUb0Nsb3NlLnJlbW92ZUxhc3QoKTsK
ICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWFuY2VzdG9yc1RvQ2xvc2UuaXNFbXB0eSgp
KTsKQEAgLTU3MCw4ICs3MzksOCBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25z
dCBSYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBvciBiKSBhbmNlc3RvcnMgdGhhdCB3ZSBuZXZlciBlbmNvdW50ZXJl
ZCBkdXJpbmcgYSBwcmUtb3JkZXIgdHJhdmVyc2FsIHN0YXJ0aW5nIGF0IHN0YXJ0Tm9kZToKICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGFydE5vZGUtPmlzRGVzY2VuZGFudE9mKHBh
cmVudCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFy
a3VwKHBhcmVudCwgdXBkYXRlZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZW5kTWFya3VwKHBhcmVudCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcHJlTWFya3Vwcy5hcHBlbmQoZ2V0U3RhcnRNYXJrdXAocGFyZW50LCB1
cGRhdGVkUmFuZ2UuZ2V0KCksIGFubm90YXRlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBt
YXJrdXBzLmFwcGVuZChnZXRFbmRNYXJrdXAocGFyZW50KSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVu
ZChwYXJlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9IHBhcmVudDsK
QEAgLTYzMywxMiArODAyLDIwIEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0
IFJhbmcKICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU19QUk9QX0JB
Q0tHUk9VTkRfSU1BR0UsICJ1cmwoJyIgKyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnVsbHlTZWxl
Y3RlZFJvb3QpLT5nZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpICsgIicpIik7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5sZW5ndGgoKSkgewotICAgICAg
ICAgICAgICAgICAgICBtYXJrdXBzLnByZXBlbmQoIjxkaXYgc3R5bGU9XCIiICsgZXNjYXBlVGV4
dEZvck1hcmt1cChzdHlsZS0+Y3NzVGV4dCgpLCB0cnVlKSArICJcIj4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgbWFya3Vwcy5hcHBlbmQoIjwvZGl2PiIpOworICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8VUNoYXI+IG9wZW5UYWc7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBT
dHJpbmcgZGl2U3R5bGUoIjxkaXYgc3R5bGU9XCIiKTsKKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kU3RyaW5nKG9wZW5UYWcsIGRpdlN0eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
QXR0cmlidXRlVmFsdWUob3BlblRhZywgc3R5bGUtPmNzc1RleHQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIG9wZW5UYWcuYXBwZW5kKCdcIicpOworICAgICAgICAgICAgICAgICAgICBvcGVuVGFn
LmFwcGVuZCgnPicpOworICAgICAgICAgICAgICAgICAgICBwcmVNYXJrdXBzLmFwcGVuZChTdHJp
bmc6OmFkb3B0KG9wZW5UYWcpKTsKKworICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
U3RyaW5nIGRpdkNsb3NlVGFnKCI8L2Rpdj4iKTsKKyAgICAgICAgICAgICAgICAgICAgbWFya3Vw
cy5hcHBlbmQoZGl2Q2xvc2VUYWcpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3VwKGFuY2Vz
dG9yLCB1cGRhdGVkUmFuZ2UuZ2V0KCksIGFubm90YXRlLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVz
KSk7Ci0gICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZW5kTWFya3VwKGFuY2VzdG9yKSk7
CisgICAgICAgICAgICAgICAgcHJlTWFya3Vwcy5hcHBlbmQoZ2V0U3RhcnRNYXJrdXAoYW5jZXN0
b3IsIHVwZGF0ZWRSYW5nZS5nZXQoKSwgYW5ub3RhdGUsIGNvbnZlcnRCbG9ja3NUb0lubGluZXMp
KTsKKyAgICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChnZXRFbmRNYXJrdXAoYW5jZXN0b3Ip
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChub2RlcykKICAgICAgICAgICAgICAg
ICBub2Rlcy0+YXBwZW5kKGFuY2VzdG9yKTsKQEAgLTY2Nyw5ICs4NDQsMTYgQEAgRGVwcmVjYXRl
ZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAgICAgICAgICAgc3R5bGUtPnJlbW92
ZUJsb2NrUHJvcGVydGllcygpOwogCiAgICAgICAgIGlmIChzdHlsZS0+bGVuZ3RoKCkgPiAwKSB7
Ci0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG9wZW5UYWcgPSBEZXByZWNhdGVkU3RyaW5n
KCI8c3BhbiBjbGFzcz1cIiIpICsgQXBwbGVTdHlsZVNwYW5DbGFzcyArICJcIiBzdHlsZT1cIiIg
KyBlc2NhcGVUZXh0Rm9yTWFya3VwKHN0eWxlLT5jc3NUZXh0KCksIHRydWUpICsgIlwiPiI7Ci0g
ICAgICAgICAgICBtYXJrdXBzLnByZXBlbmQob3BlblRhZyk7Ci0gICAgICAgICAgICBtYXJrdXBz
LmFwcGVuZCgiPC9zcGFuPiIpOworICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiBvcGVuVGFnOwor
ICAgICAgICAgICAgY29uc3QgU3RyaW5nIHNwYW5DbGFzc1N0eWxlID0gU3RyaW5nKCI8c3BhbiBj
bGFzcz1cIiIgQXBwbGVTdHlsZVNwYW5DbGFzcyAiXCIgc3R5bGU9XCIiKTsKKyAgICAgICAgICAg
IGFwcGVuZFN0cmluZyhvcGVuVGFnLCBzcGFuQ2xhc3NTdHlsZSk7CisgICAgICAgICAgICBhcHBl
bmRBdHRyaWJ1dGVWYWx1ZShvcGVuVGFnLCBzdHlsZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAg
IG9wZW5UYWcuYXBwZW5kKCdcIicpOworICAgICAgICAgICAgb3BlblRhZy5hcHBlbmQoJz4nKTsK
KyAgICAgICAgICAgIHByZU1hcmt1cHMuYXBwZW5kKFN0cmluZzo6YWRvcHQob3BlblRhZykpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIHNwYW5DbG9zZVRh
ZygiPC9zcGFuPiIpOworICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoc3BhbkNsb3NlVGFnKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNjg0LDggKzg2OCw4IEBAIERlcHJlY2F0ZWRTdHJpbmcg
Y3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICBpZiAobGFzdENsb3NlZCAmJiBhbm5vdGF0ZSAm
JiBzZWxlY3RlZE9uZU9yTW9yZVBhcmFncmFwaHMpIHsKICAgICAgICAgZm9yIChOb2RlICphbmNl
c3RvciA9IGxhc3RDbG9zZWQtPnBhcmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5j
ZXN0b3ItPnBhcmVudE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKGlzTWFpbEJsb2NrcXVvdGUo
YW5jZXN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3Vw
KGFuY2VzdG9yLCB1cGRhdGVkUmFuZ2UuZ2V0KCksIGFubm90YXRlKSk7Ci0gICAgICAgICAgICAg
ICAgbWFya3Vwcy5hcHBlbmQoZW5kTWFya3VwKGFuY2VzdG9yKSk7CisgICAgICAgICAgICAgICAg
cHJlTWFya3Vwcy5hcHBlbmQoZ2V0U3RhcnRNYXJrdXAoYW5jZXN0b3IsIHVwZGF0ZWRSYW5nZS5n
ZXQoKSwgYW5ub3RhdGUpKTsKKyAgICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChnZXRFbmRN
YXJrdXAoYW5jZXN0b3IpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTY5
Myw3ICs4NzcsNyBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAg
ICAgaWYgKGRlbGV0ZUJ1dHRvbikKICAgICAgICAgZGVsZXRlQnV0dG9uLT5lbmFibGUoKTsKIAot
ICAgIHJldHVybiBtYXJrdXBzLmpvaW4oIiIpOworICAgIHJldHVybiBqb2luTWFya3VwcyhwcmVN
YXJrdXBzLCBtYXJrdXBzKTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVh
dGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG1h
cmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMKQpAQCAtNzEwLDEwICs4OTQsOSBAQCBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtCiAgICAgcmV0dXJuIGZyYWdtZW50LnJl
bGVhc2UoKTsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSog
bm9kZSwgRUNoaWxkcmVuT25seSBpbmNsdWRlQ2hpbGRyZW4sCi0gICAgVmVjdG9yPE5vZGUqPiog
bm9kZXMsIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlKQorU3RyaW5nIGNyZWF0ZU1h
cmt1cChjb25zdCBOb2RlKiBub2RlLCBFQ2hpbGRyZW5Pbmx5IGluY2x1ZGVDaGlsZHJlbiwgVmVj
dG9yPE5vZGUqPiogbm9kZXMpCiB7Ci0gICAgQVNTRVJUKGFubm90YXRlID09IERvTm90QW5ub3Rh
dGVGb3JJbnRlcmNoYW5nZSk7IC8vIGFubm90YXRpb24gbm90IHlldCBpbXBsZW1lbnRlZCBmb3Ig
dGhpcyBjb2RlIHBhdGgKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKIAogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuICIiOwpAQCAtNzI5LDEzICs5MTIsMTIgQEAgRGVwcmVjYXRlZFN0
cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZQogICAgICAgICBkZWxldGVCdXR0b24tPmRpc2Fi
bGUoKTsKICAgICB9CiAKLSAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQobWFya3VwKGNvbnN0X2Nh
c3Q8Tm9kZSo+KG5vZGUpLCBpbmNsdWRlQ2hpbGRyZW4sIG5vZGVzKSk7CisgICAgYXBwZW5kTWFy
a3VwKHJlc3VsdCwgY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIGluY2x1ZGVDaGlsZHJlbiwgbm9k
ZXMpOwogCiAgICAgaWYgKGRlbGV0ZUJ1dHRvbikKICAgICAgICAgZGVsZXRlQnV0dG9uLT5lbmFi
bGUoKTsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVz
dWx0KTsKIH0KIAogc3RhdGljIHZvaWQgZmlsbENvbnRhaW5lckZyb21TdHJpbmcoQ29udGFpbmVy
Tm9kZSogcGFyYWdyYXBoLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzdHJpbmcpCkluZGV4OiBl
ZGl0aW5nL21hcmt1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvbWFya3VwLmgJKHJldmlzaW9u
IDI1ODEwKQorKysgZWRpdGluZy9tYXJrdXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTAgKzQ0
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJr
dXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCk7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCosIGNvbnN0IFZlY3RvcjxOb2Rl
Kj4mKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiwK
KyAgICBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiwKICAgICAgICAgVmVjdG9yPE5v
ZGUqPiogPSAwLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSA9IERvTm90QW5ub3RhdGVGb3JJbnRl
cmNoYW5nZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UpOwotICAgIERlcHJl
Y2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqLCBFQ2hpbGRyZW5Pbmx5ID0gSW5j
bHVkZU5vZGUsCi0gICAgICAgIFZlY3RvcjxOb2RlKj4qID0gMCwgRUFubm90YXRlRm9ySW50ZXJj
aGFuZ2UgPSBEb05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpOworICAgIFN0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgTm9kZSosIEVDaGlsZHJlbk9ubHkgPSBJbmNsdWRlTm9kZSwgVmVjdG9yPE5v
ZGUqPiogPSAwKTsKIAogfQogCkluZGV4OiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAy
NTgxMCkKKysrIHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzQzLDcgKzM0Myw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlk
Z2UKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZXZlciAiZm9yIGludGVyY2hhbmdlIi4gSXMg
dGhhdCByaWdodD8gU2VlIHRoZSBuZXh0IG1ldGhvZC4KICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVM
aXN0OwotICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW25vZGUgX25v
ZGVdLCBJbmNsdWRlTm9kZSwgbm9kZXMgPyAmbm9kZUxpc3QgOiAwKS5nZXROU1N0cmluZygpOwor
ICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW25vZGUgX25vZGVdLCBJ
bmNsdWRlTm9kZSwgbm9kZXMgPyAmbm9kZUxpc3QgOiAwKTsKICAgICBpZiAobm9kZXMpCiAgICAg
ICAgICpub2RlcyA9IFtzZWxmIG5vZGVzRnJvbUxpc3Q6Jm5vZGVMaXN0XTsKIApAQCAtMzU0LDcg
KzM1NCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UKIHsKICAg
ICAvLyBGSVhNRTogVGhpcyBpcyBhbHdheXMgImZvciBpbnRlcmNoYW5nZSIuIElzIHRoYXQgcmln
aHQ/IFNlZSB0aGUgcHJldmlvdXMgbWV0aG9kLgogICAgIFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7
Ci0gICAgTlNTdHJpbmcgKm1hcmt1cFN0cmluZyA9IGNyZWF0ZU1hcmt1cChbcmFuZ2UgX3Jhbmdl
XSwgbm9kZXMgPyAmbm9kZUxpc3QgOiAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKS5nZXROU1N0
cmluZygpOworICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW3Jhbmdl
IF9yYW5nZV0sIG5vZGVzID8gJm5vZGVMaXN0IDogMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7
CiAgICAgaWYgKG5vZGVzKQogICAgICAgICAqbm9kZXMgPSBbc2VsZiBub2Rlc0Zyb21MaXN0OiZu
b2RlTGlzdF07CiAK
</data>
<flag name="review"
          id="6955"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16511</attachid>
            <date>2007-10-02 20:56:46 -0700</date>
            <delta_ts>2007-10-02 20:56:58 -0700</delta_ts>
            <desc>for reference, without the extraneous bits</desc>
            <filename>faster-css-replace.patch.txt</filename>
            <type>text/plain</type>
            <size>3598</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI1OTEx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDctMTAt
MDIgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gQXZvaWQgdXNlbGVzc2x5
IHNlcmlhbGl6aW5nIENTUyBwcm9wZXJ0eSB2YWx1ZXMgb24gcmVwbGFjZW1lbnQgZm9yIDEwJSBD
SyBET00gc3BlZWR1cAorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTM0MAorCisgICAgICAgICogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQ
cm9wZXJ0eSk6IERvbid0IGdlbmVyYXRlIHJldHVybiB2YWx1ZSB1bmxlc3MgbmVlZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KTog
VXNlIHRoZSBuby1yZXR1cm4gdmVyc2lvbiBhcHByb3ByaWF0ZWx5LgorICAgICAgICAqIGNzcy9D
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KTogTmV3IHZlcnNpb24gd2l0aCBubyBy
ZXR1cm4gdmFsdWUuCisKIDIwMDctMTAtMDEgIExhcnMgS25vbGwgIDxsYXJzQHRyb2xsdGVjaC5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYy4KSW5kZXg6IGNzcy9DU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmNwcAkocmV2aXNpb24gMjU4MTApCisrKyBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNyArNDE0LDcgQEAgc3RhdGljIHZvaWQg
aW5pdFNob3J0aGFuZE1hcChIYXNoTWFwPGludAogICAgICN1bmRlZiBTRVRfU0hPUlRIQU5EX01B
UF9FTlRSWQogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVBy
b3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShp
bnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBib29sIHJldHVyblRleHQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKIApAQCAtNDM0LDcgKzQzNCw4IEBAIFN0cmlu
ZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3YKICAgICBEZXByZWNhdGVkVmFsdWVM
aXN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKICAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxp
c3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5mcm9tTGFzdCgpOyBpdCAhPSBl
bmQ7IC0taXQpIHsKICAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCkubV9pZCkgewotICAg
ICAgICAgICAgdmFsdWUgPSAoKml0KS52YWx1ZSgpLT5jc3NUZXh0KCk7CisgICAgICAgICAgICBp
ZiAocmV0dXJuVGV4dCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqaXQpLnZhbHVlKCktPmNz
c1RleHQoKTsKICAgICAgICAgICAgIG1fdmFsdWVzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICBp
ZiAobm90aWZ5Q2hhbmdlZCkKICAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7CkBAIC01MDgs
NyArNTA5LDcgQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcAogCiBT
dHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICByZXR1cm4gcmVtb3ZlUHJvcGVydHko
cHJvcGVydHlJRCwgdHJ1ZSwgZWMpOworICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
eUlELCB0cnVlLCB0cnVlLCBlYyk7CiB9CiAKIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29s
IGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTUx
OCw3ICs1MTksNyBAQCBib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wCiAg
ICAgLy8gU2V0dGluZyB0aGUgdmFsdWUgdG8gYW4gZW1wdHkgc3RyaW5nIGp1c3QgcmVtb3ZlcyB0
aGUgcHJvcGVydHkgaW4gYm90aCBJRSBhbmQgR2Vja28uCiAgICAgLy8gU2V0dGluZyBpdCB0byBu
dWxsIHNlZW1zIHRvIHByb2R1Y2UgbGVzcyBjb25zaXN0ZW50IHJlc3VsdHMsIGJ1dCB3ZSB0cmVh
dCBpdCBqdXN0IHRoZSBzYW1lLgogICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgbm90aWZ5Q2hhbmdlZCwgZWMpOworICAgICAgICBy
ZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkLCBmYWxzZSwgZWMpOwogICAg
ICAgICByZXR1cm4gZWMgPT0gMDsKICAgICB9CiAKSW5kZXg6IGNzcy9DU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5oCShyZXZpc2lvbiAyNTgxMCkKKysrIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MywxMSArNzMsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gc2V0UHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUsIGltcG9ydGFudCwgbm90aWZ5Q2hhbmdl
ZCwgZWMpOwogICAgIH0KIAotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJlbW92
ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQorICAg
IFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2Vk
LCBib29sIHJldHVyblRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbW92ZVByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQogICAgIHsKICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHBy
b3BlcnR5SUQsIG5vdGlmeUNoYW5nZWQsIGVjKTsKKyAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJv
cGVydHlJRCwgbm90aWZ5Q2hhbmdlZCwgZmFsc2UsIGVjKTsKICAgICB9CiAKICAgICB2b2lkIGNs
ZWFyKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>