<?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>76079</bug_id>
          
          <creation_ts>2012-01-11 10:51:10 -0800</creation_ts>
          <short_desc>v8-regexp spends 35% of its time allocating and copying internal regexp results data</short_desc>
          <delta_ts>2012-01-11 15:27:24 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>534032</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-01-11 10:51:10 -0800</bug_when>
    <thetext>35% of v8-regexp processing is spent allocating and copying match results data.  RegExpConstructor currently takes a pointer to a RegExpConstructorPrivate object that is malloced.  When a RegExpMatchesArray is created, it too mallocs a RegExpConstructorPrivate object and copies the data from the RegExpConstructor instance of the same class.  The RegExpConstructorPrivate has more attributes than needed for RegExpMatchesArray uses.  The two mallocs and some of the copying can be eliminated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534033</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-01-11 10:53:33 -0800</bug_when>
    <thetext>&lt;rdar://problem/10665597&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534037</commentid>
    <comment_count>2</comment_count>
      <attachid>122052</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-01-11 11:00:29 -0800</bug_when>
    <thetext>Created attachment 122052
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534038</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-01-11 11:01:02 -0800</bug_when>
    <thetext>Actually the performance benefit is 24%.  I will change the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534218</commentid>
    <comment_count>4</comment_count>
      <attachid>122052</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-11 13:41:00 -0800</bug_when>
    <thetext>Comment on attachment 122052
Patch for review

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

r=me

&gt; Source/JavaScriptCore/runtime/RegExpConstructor.cpp:100
&gt; +RegExpResult&amp; RegExpResult::operator=(const RegExpConstructorPrivate&amp; rhs)

Should this be inlined?

&gt; Source/JavaScriptCore/runtime/RegExpConstructor.cpp:143
&gt;  RegExpMatchesArray::~RegExpMatchesArray()

You can remove this entirely -- that will make Mark&apos;s work a little easier.

&gt; Source/JavaScriptCore/runtime/RegExpMatchesArray.h:120
&gt; +        RegExpResult privateData;

Minor nit: I would call this variable &quot;regExpResult&quot;. The class can have an arbitrary amount of private data -- what&apos;s unique about this data is that it&apos;s a regular expression result.

&gt; Source/JavaScriptCore/runtime/RegExpMatchesArray.h:121
&gt; +        bool m_filledArrayInstance;

Minor nit: I prefer the style of prefacing boolean predicates with &quot;did&quot; -- &quot;m_didFillArrayInstance&quot;. Otherwise, it&apos;s ambiguous whether &quot;filledArrayInstance&quot; is a boolean predicate or a noun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534219</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-11 13:41:28 -0800</bug_when>
    <thetext>Correction: &quot;m_regExpResult&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534331</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-01-11 15:27:24 -0800</bug_when>
    <thetext>Committed r104751: &lt;http://trac.webkit.org/changeset/104751&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122052</attachid>
            <date>2012-01-11 11:00:29 -0800</date>
            <delta_ts>2012-01-11 13:40:59 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>76079.patch</filename>
            <type>text/plain</type>
            <size>16502</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA0NzIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBA
CisyMDEyLTAxLTExICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIHY4LXJlZ2V4cCBzcGVuZHMgMzUlIG9mIGl0cyB0aW1lIGFsbG9jYXRpbmcgYW5kIGNvcHlp
bmcgaW50ZXJuYWwgcmVnZXhwIHJlc3VsdHMgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBSZWdFeHBSZXN1bHRzIHN0cnVjdCB0
aGF0IGhhcyB0aGUgaW5wdXQgc3RyaW5nLCB0aGUgbnVtYmVyIG9mCisgICAgICAgIHN1YmV4cHJl
c3Npb25zIGFuZCB0aGUgb3V0cHV0IHZlY3Rvci4gIENoYW5nZWQgUmVnRXhwQ29uc3RydWN0b3Ig
dG8KKyAgICAgICAgaW5jbHVkZSBhIFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSBpbnN0ZWFkIG9m
IGhhdmluZyBhIHJlZmVyZW5jZSB0byBvbmUuCisgICAgICAgIENoYW5nZWQgUmVnRXhwTWF0Y2hl
c0FycmF5IHRvIGluY2x1ZGUgYSBSZWdFeHBSZXN1bHRzIGluc3RlYWQgb2YgYSAKKyAgICAgICAg
cmVmZXJlbmNlIHRvIGEgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlLiAgQ3JlYXRlZCBhbiBvdmVy
bG9hZGVkIGFzc2lnbm1lbnQKKyAgICAgICAgb3BlcmF0b3IgdG8gYXNzaWduIGEgUmVnRXhwQ29u
c3RydWN0b3JQcml2YXRlIHRvIGEgUmVnRXhwUmVzdWx0cy4KKyAgICAgICAgQ29sbGVjdGl2ZWx5
IHRoaXMgY2hhbmdlIGlzIHdvcnRoIDI2JSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB0byB2OC1y
ZWdleHAuCisgICAgICAgIAorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpSZWdFeHBSZXN1bHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6
OlJlZ0V4cENvbnN0cnVjdG9yOjpSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OlJl
Z0V4cE1hdGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgKEpTQzo6UmVn
RXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlJlZ0V4cE1h
dGNoZXNBcnJheTo6flJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAgIChKU0M6OlJlZ0V4cE1h
dGNoZXNBcnJheTo6ZmlsbEFycmF5SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25z
dHJ1Y3Rvcjo6YXJyYXlPZk1hdGNoZXMpOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rv
cjo6Z2V0QmFja3JlZik6CisgICAgICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpnZXRMYXN0
UGFyZW4pOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGVmdENvbnRleHQp
OgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0UmlnaHRDb250ZXh0KToKKyAg
ICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OnNldElucHV0KToKKyAgICAgICAgKEpTQzo6
UmVnRXhwQ29uc3RydWN0b3I6OmlucHV0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0
b3I6OnNldE11bHRpbGluZSk6CisgICAgICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjptdWx0
aWxpbmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KEpTQzo6UmVnRXhwUmVzdWx0OjpSZWdFeHBSZXN1bHQpOgorICAgICAgICAoSlNDOjpSZWdFeHBD
b25zdHJ1Y3Rvcjo6cGVyZm9ybU1hdGNoKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5oOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAg
ICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OnB1dCk6CisgICAgICAg
IChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OlJl
Z0V4cE1hdGNoZXNBcnJheTo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpSZWdFeHBN
YXRjaGVzQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OlJlZ0V4
cE1hdGNoZXNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisKIDIwMTItMDEtMTAgIE1hcmsg
Um93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA2NzM3
OTI+IGpzYyBzaG91bGQgaW5zdGFsbCBkaXJlY3RseSBpbiB0byB2ZXJzaW9uZWQgUmVzb3VyY2Vz
IHN1YmZvbGRlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTA0NTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw5ICs5NywxNyBAQCBjb25zdCBDbGFzc0luZm8gUmVnRXhwTWF0Y2hlc0FycmF5OjpzX2lu
CiBAZW5kCiAqLwogCitSZWdFeHBSZXN1bHQmIFJlZ0V4cFJlc3VsdDo6b3BlcmF0b3I9KGNvbnN0
IFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSYgcmhzKQoreworICAgIHRoaXMtPmlucHV0ID0gcmhz
LmlucHV0OworICAgIHRoaXMtPm92ZWN0b3IgPSByaHMubGFzdE92ZWN0b3IoKTsKKyAgICB0aGlz
LT5sYXN0TnVtU3ViUGF0dGVybnMgPSByaHMubGFzdE51bVN1YlBhdHRlcm5zOworCisgICAgcmV0
dXJuICp0aGlzOworfQorCiBSZWdFeHBDb25zdHJ1Y3Rvcjo6UmVnRXhwQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBJ
bnRlcm5hbEZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQotICAgICwgZChhZG9wdFB0
cihuZXcgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlKSkKIHsKIH0KIApAQCAtMTIyLDI3ICsxMzAs
MTggQEAgdm9pZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0NlbGwqIAogCiBSZWdFeHBN
YXRjaGVzQXJyYXk6OlJlZ0V4cE1hdGNoZXNBcnJheShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgOiBK
U0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5y
ZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSkKKyAgICAsIG1fZmlsbGVkQXJyYXlJbnN0YW5j
ZShmYWxzZSkKIHsKIH0KIAotdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlKiBkYXRh
KQordm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlJiBkYXRhKQogewotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGRhdGEtPmxhc3ROdW1TdWJQYXR0ZXJu
cyArIDEpOwotICAgIFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSogZCA9IG5ldyBSZWdFeHBDb25z
dHJ1Y3RvclByaXZhdGU7Ci0gICAgZC0+aW5wdXQgPSBkYXRhLT5sYXN0SW5wdXQ7Ci0gICAgZC0+
bGFzdElucHV0ID0gZGF0YS0+bGFzdElucHV0OwotICAgIGQtPmxhc3ROdW1TdWJQYXR0ZXJucyA9
IGRhdGEtPmxhc3ROdW1TdWJQYXR0ZXJuczsKLSAgICB1bnNpZ25lZCBvZmZzZXRWZWN0b3JTaXpl
ID0gKGRhdGEtPmxhc3ROdW1TdWJQYXR0ZXJucyArIDEpICogMjsgLy8gb25seSBjb3B5aW5nIHRo
ZSByZXN1bHQgcGFydCBvZiB0aGUgdmVjdG9yCi0gICAgZC0+bGFzdE92ZWN0b3IoKS5yZXNpemUo
b2Zmc2V0VmVjdG9yU2l6ZSk7Ci0gICAgbWVtY3B5KGQtPmxhc3RPdmVjdG9yKCkuZGF0YSgpLCBk
YXRhLT5sYXN0T3ZlY3RvcigpLmRhdGEoKSwgb2Zmc2V0VmVjdG9yU2l6ZSAqIHNpemVvZihpbnQp
KTsKLSAgICAvLyBkLT5tdWx0aWxpbmUgaXMgbm90IG5lZWRlZCwgYW5kIHJlbWFpbnMgdW5pbml0
aWFsaXplZAotCi0gICAgc2V0U3ViY2xhc3NEYXRhKGQpOworICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEsIGRhdGEubGFzdE51bVN1YlBhdHRlcm5zICsgMSk7CisgICAgcHJpdmF0
ZURhdGEgPSBkYXRhOwogfQogCiBSZWdFeHBNYXRjaGVzQXJyYXk6On5SZWdFeHBNYXRjaGVzQXJy
YXkoKQogewotICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUq
PihzdWJjbGFzc0RhdGEoKSk7CiB9CiAKIHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKQEAgLTE1Miw2NSArMTUxLDYxIEBAIHZvaWQgUmVnRXhwTWF0Y2hlc0Fy
cmF5OjpkZXN0cm95KEpTQ2VsbCoKIAogdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbGxBcnJh
eUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSZWdFeHBDb25zdHJ1Y3RvclByaXZh
dGUqIGQgPSBzdGF0aWNfY2FzdDxSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqPihzdWJjbGFzc0Rh
dGEoKSk7Ci0gICAgQVNTRVJUKGQpOwotCi0gICAgdW5zaWduZWQgbGFzdE51bVN1YnBhdHRlcm5z
ID0gZC0+bGFzdE51bVN1YlBhdHRlcm5zOworICAgIHVuc2lnbmVkIGxhc3ROdW1TdWJwYXR0ZXJu
cyA9IHByaXZhdGVEYXRhLmxhc3ROdW1TdWJQYXR0ZXJuczsKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPD0gbGFzdE51bVN1YnBhdHRlcm5zOyArK2kpIHsKLSAgICAgICAgaW50IHN0YXJ0
ID0gZC0+bGFzdE92ZWN0b3IoKVsyICogaV07CisgICAgICAgIGludCBzdGFydCA9IHByaXZhdGVE
YXRhLm92ZWN0b3JbMiAqIGldOwogICAgICAgICBpZiAoc3RhcnQgPj0gMCkKLSAgICAgICAgICAg
IEpTQXJyYXk6OnB1dEJ5SW5kZXgodGhpcywgZXhlYywgaSwganNTdWJzdHJpbmcoZXhlYywgZC0+
bGFzdElucHV0LCBzdGFydCwgZC0+bGFzdE92ZWN0b3IoKVsyICogaSArIDFdIC0gc3RhcnQpKTsK
KyAgICAgICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgodGhpcywgZXhlYywgaSwganNTdWJzdHJp
bmcoZXhlYywgcHJpdmF0ZURhdGEuaW5wdXQsIHN0YXJ0LCBwcml2YXRlRGF0YS5vdmVjdG9yWzIg
KiBpICsgMV0gLSBzdGFydCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBKU0FycmF5Ojpw
dXRCeUluZGV4KHRoaXMsIGV4ZWMsIGksIGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTQXJyYXk6OnB1dCh0aGlzLCBleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuaW5kZXgsIGpzTnVtYmVyKGQtPmxhc3RPdmVjdG9yKClbMF0pLCBzbG90
KTsKLSAgICBKU0FycmF5OjpwdXQodGhpcywgZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlu
cHV0LCBqc1N0cmluZyhleGVjLCBkLT5pbnB1dCksIHNsb3QpOworICAgIEpTQXJyYXk6OnB1dCh0
aGlzLCBleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaW5kZXgsIGpzTnVtYmVyKHByaXZhdGVE
YXRhLm92ZWN0b3JbMF0pLCBzbG90KTsKKyAgICBKU0FycmF5OjpwdXQodGhpcywgZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmlucHV0LCBqc1N0cmluZyhleGVjLCBwcml2YXRlRGF0YS5pbnB1
dCksIHNsb3QpOwogCi0gICAgZGVsZXRlIGQ7Ci0gICAgc2V0U3ViY2xhc3NEYXRhKDApOworICAg
IG1fZmlsbGVkQXJyYXlJbnN0YW5jZSA9IHRydWU7CiB9CiAKIEpTT2JqZWN0KiBSZWdFeHBDb25z
dHJ1Y3Rvcjo6YXJyYXlPZk1hdGNoZXMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJl
dHVybiBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShleGVjLCBkLmdldCgpKTsKKyAgICByZXR1
cm4gUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUoZXhlYywgZCk7CiB9CiAKIEpTVmFsdWUgUmVn
RXhwQ29uc3RydWN0b3I6OmdldEJhY2tyZWYoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKSBj
b25zdAogewotICAgIGlmICghZC0+bGFzdE92ZWN0b3IoKS5pc0VtcHR5KCkgJiYgaSA8PSBkLT5s
YXN0TnVtU3ViUGF0dGVybnMpIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gZC0+bGFzdE92ZWN0b3Io
KVsyICogaV07CisgICAgaWYgKCFkLmxhc3RPdmVjdG9yKCkuaXNFbXB0eSgpICYmIGkgPD0gZC5s
YXN0TnVtU3ViUGF0dGVybnMpIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gZC5sYXN0T3ZlY3Rvcigp
WzIgKiBpXTsKICAgICAgICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICByZXR1cm4ganNT
dWJzdHJpbmcoZXhlYywgZC0+bGFzdElucHV0LCBzdGFydCwgZC0+bGFzdE92ZWN0b3IoKVsyICog
aSArIDFdIC0gc3RhcnQpOworICAgICAgICAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIGQu
bGFzdElucHV0LCBzdGFydCwgZC5sYXN0T3ZlY3RvcigpWzIgKiBpICsgMV0gLSBzdGFydCk7CiAg
ICAgfQogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogfQogCiBKU1ZhbHVlIFJlZ0V4
cENvbnN0cnVjdG9yOjpnZXRMYXN0UGFyZW4oRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAg
IHVuc2lnbmVkIGkgPSBkLT5sYXN0TnVtU3ViUGF0dGVybnM7CisgICAgdW5zaWduZWQgaSA9IGQu
bGFzdE51bVN1YlBhdHRlcm5zOwogICAgIGlmIChpID4gMCkgewotICAgICAgICBBU1NFUlQoIWQt
Pmxhc3RPdmVjdG9yKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgaW50IHN0YXJ0ID0gZC0+bGFzdE92
ZWN0b3IoKVsyICogaV07CisgICAgICAgIEFTU0VSVCghZC5sYXN0T3ZlY3RvcigpLmlzRW1wdHko
KSk7CisgICAgICAgIGludCBzdGFydCA9IGQubGFzdE92ZWN0b3IoKVsyICogaV07CiAgICAgICAg
IGlmIChzdGFydCA+PSAwKQotICAgICAgICAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIGQt
Pmxhc3RJbnB1dCwgc3RhcnQsIGQtPmxhc3RPdmVjdG9yKClbMiAqIGkgKyAxXSAtIHN0YXJ0KTsK
KyAgICAgICAgICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBkLmxhc3RJbnB1dCwgc3RhcnQs
IGQubGFzdE92ZWN0b3IoKVsyICogaSArIDFdIC0gc3RhcnQpOwogICAgIH0KICAgICByZXR1cm4g
anNFbXB0eVN0cmluZyhleGVjKTsKIH0KIAogSlNWYWx1ZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0
TGVmdENvbnRleHQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIGlmICghZC0+bGFzdE92
ZWN0b3IoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBkLT5s
YXN0SW5wdXQsIDAsIGQtPmxhc3RPdmVjdG9yKClbMF0pOworICAgIGlmICghZC5sYXN0T3ZlY3Rv
cigpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIGQubGFzdElu
cHV0LCAwLCBkLmxhc3RPdmVjdG9yKClbMF0pOwogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4
ZWMpOwogfQogCiBKU1ZhbHVlIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRSaWdodENvbnRleHQoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIGlmICghZC0+bGFzdE92ZWN0b3IoKS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBkLT5sYXN0SW5wdXQsIGQtPmxh
c3RPdmVjdG9yKClbMV0sIGQtPmxhc3RJbnB1dC5sZW5ndGgoKSAtIGQtPmxhc3RPdmVjdG9yKClb
MV0pOworICAgIGlmICghZC5sYXN0T3ZlY3RvcigpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGpzU3Vic3RyaW5nKGV4ZWMsIGQubGFzdElucHV0LCBkLmxhc3RPdmVjdG9yKClbMV0sIGQubGFz
dElucHV0Lmxlbmd0aCgpIC0gZC5sYXN0T3ZlY3RvcigpWzFdKTsKICAgICByZXR1cm4ganNFbXB0
eVN0cmluZyhleGVjKTsKIH0KICAgICAKQEAgLTM3NywyNCArMzcyLDI0IEBAIENhbGxUeXBlIFJl
Z0V4cENvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YSgKIAogdm9pZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6
c2V0SW5wdXQoY29uc3QgVVN0cmluZyYgaW5wdXQpCiB7Ci0gICAgZC0+aW5wdXQgPSBpbnB1dDsK
KyAgICBkLmlucHV0ID0gaW5wdXQ7CiB9CiAKIGNvbnN0IFVTdHJpbmcmIFJlZ0V4cENvbnN0cnVj
dG9yOjppbnB1dCgpIGNvbnN0CiB7CiAgICAgLy8gQ2FuIGRldGVjdCBhIGRpc3RpbmN0IGluaXRp
YWwgc3RhdGUgdGhhdCBpcyBpbnZpc2libGUgdG8gSmF2YVNjcmlwdCwgYnkgY2hlY2tpbmcgZm9y
IG51bGwKICAgICAvLyBzdGF0ZSAoc2luY2UganNTdHJpbmcgdHVybnMgbnVsbCBzdHJpbmdzIHRv
IGVtcHR5IHN0cmluZ3MpLgotICAgIHJldHVybiBkLT5pbnB1dDsKKyAgICByZXR1cm4gZC5pbnB1
dDsKIH0KIAogdm9pZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6c2V0TXVsdGlsaW5lKGJvb2wgbXVsdGls
aW5lKQogewotICAgIGQtPm11bHRpbGluZSA9IG11bHRpbGluZTsKKyAgICBkLm11bHRpbGluZSA9
IG11bHRpbGluZTsKIH0KIAogYm9vbCBSZWdFeHBDb25zdHJ1Y3Rvcjo6bXVsdGlsaW5lKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZC0+bXVsdGlsaW5lOworICAgIHJldHVybiBkLm11bHRpbGluZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDEwNDU4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFJlZ0V4
cFByb3RvdHlwZTsKICAgICBzdHJ1Y3QgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlOwogCisgICAg
c3RydWN0IFJlZ0V4cFJlc3VsdCB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIHB1YmxpYzoKKyAgICAgICAgUmVnRXhwUmVzdWx0KCkKKyAgICAgICAgICAgIDogbGFzdE51
bVN1YlBhdHRlcm5zKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ0V4cFJl
c3VsdCYgb3BlcmF0b3I9KGNvbnN0IFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSYpOworCisgICAg
ICAgIFVTdHJpbmcgaW5wdXQ7CisgICAgICAgIHVuc2lnbmVkIGxhc3ROdW1TdWJQYXR0ZXJuczsK
KyAgICAgICAgVmVjdG9yPGludCwgMzI+IG92ZWN0b3I7CisgICAgfTsKKwogICAgIHN0cnVjdCBS
ZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBwdWJsaWM6CkBAIC0xMDIsNyArMTE3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYpOwogICAgICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwg
Q2FsbERhdGEmKTsKIAotICAgICAgICBPd25QdHI8UmVnRXhwQ29uc3RydWN0b3JQcml2YXRlPiBk
OworICAgICAgICBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUgZDsKICAgICB9OwogCiAgICAgUmVn
RXhwQ29uc3RydWN0b3IqIGFzUmVnRXhwQ29uc3RydWN0b3IoSlNWYWx1ZSk7CkBAIC0xMjIsMjAg
KzEzNywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAqLwogICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6cGVyZm9ybU1hdGNoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgUmVnRXhwKiByLCBjb25zdCBVU3RyaW5nJiBzLCBpbnQgc3RhcnRPZmZzZXQsIGludCYgcG9z
aXRpb24sIGludCYgbGVuZ3RoLCBpbnQqKiBvdmVjdG9yKQogICAgIHsKLSAgICAgICAgcG9zaXRp
b24gPSByLT5tYXRjaChnbG9iYWxEYXRhLCBzLCBzdGFydE9mZnNldCwgJmQtPnRlbXBPdmVjdG9y
KCkpOworICAgICAgICBwb3NpdGlvbiA9IHItPm1hdGNoKGdsb2JhbERhdGEsIHMsIHN0YXJ0T2Zm
c2V0LCAmZC50ZW1wT3ZlY3RvcigpKTsKIAogICAgICAgICBpZiAob3ZlY3RvcikKLSAgICAgICAg
ICAgICpvdmVjdG9yID0gZC0+dGVtcE92ZWN0b3IoKS5kYXRhKCk7CisgICAgICAgICAgICAqb3Zl
Y3RvciA9IGQudGVtcE92ZWN0b3IoKS5kYXRhKCk7CiAKICAgICAgICAgaWYgKHBvc2l0aW9uICE9
IC0xKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWQtPnRlbXBPdmVjdG9yKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghZC50ZW1wT3ZlY3RvcigpLmlzRW1wdHkoKSk7CiAKLSAgICAg
ICAgICAgIGxlbmd0aCA9IGQtPnRlbXBPdmVjdG9yKClbMV0gLSBkLT50ZW1wT3ZlY3RvcigpWzBd
OworICAgICAgICAgICAgbGVuZ3RoID0gZC50ZW1wT3ZlY3RvcigpWzFdIC0gZC50ZW1wT3ZlY3Rv
cigpWzBdOwogCi0gICAgICAgICAgICBkLT5pbnB1dCA9IHM7Ci0gICAgICAgICAgICBkLT5sYXN0
SW5wdXQgPSBzOwotICAgICAgICAgICAgZC0+Y2hhbmdlTGFzdE92ZWN0b3IoKTsKLSAgICAgICAg
ICAgIGQtPmxhc3ROdW1TdWJQYXR0ZXJucyA9IHItPm51bVN1YnBhdHRlcm5zKCk7CisgICAgICAg
ICAgICBkLmlucHV0ID0gczsKKyAgICAgICAgICAgIGQubGFzdElucHV0ID0gczsKKyAgICAgICAg
ICAgIGQuY2hhbmdlTGFzdE92ZWN0b3IoKTsKKyAgICAgICAgICAgIGQubGFzdE51bVN1YlBhdHRl
cm5zID0gci0+bnVtU3VicGF0dGVybnMoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJ
KHJldmlzaW9uIDEwNDU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0FycmF5IEJhc2U7CiAKLSAg
ICAgICAgc3RhdGljIFJlZ0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
UmVnRXhwQ29uc3RydWN0b3JQcml2YXRlKiBjdG9yUHJpdmF0ZSkKKyAgICAgICAgc3RhdGljIFJl
Z0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUmVnRXhwQ29u
c3RydWN0b3JQcml2YXRlJiBjdG9yUHJpdmF0ZSkKICAgICAgICAgewogICAgICAgICAgICAgUmVn
RXhwTWF0Y2hlc0FycmF5KiByZWdFeHAgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdF
eHBNYXRjaGVzQXJyYXk+KCpleGVjLT5oZWFwKCkpKSBSZWdFeHBNYXRjaGVzQXJyYXkoZXhlYyk7
CiAgICAgICAgICAgICByZWdFeHAtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwg
Y3RvclByaXZhdGUpOwpAQCAtNDEsMjAgKzQxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgICAgIHN0YXRpYyBKU19FWFBP
UlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgUmVnRXhwQ29uc3RydWN0b3JQcml2
YXRlKiBkYXRhKTsKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBj
b25zdCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUmIGRhdGEpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKICAgICAgICAgewogICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFJlZ0V4cE1hdGNoZXNBcnJheSo+KGNlbGwpOwotICAgICAgICAgICAgaWYg
KHRoaXNPYmplY3QtPnN1YmNsYXNzRGF0YSgpKQorICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0
LT5tX2ZpbGxlZEFycmF5SW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+Zmls
bEFycmF5SW5zdGFuY2UoZXhlYyk7CiAgICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAg
ICAgIH0KQEAgLTYyLDcgKzYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogICAgICAgICB7
CiAgICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVn
RXhwTWF0Y2hlc0FycmF5Kj4oY2VsbCk7Ci0gICAgICAgICAgICBpZiAodGhpc09iamVjdC0+c3Vi
Y2xhc3NEYXRhKCkpCisgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1fZmlsbGVkQXJyYXlJ
bnN0YW5jZSkKICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5maWxsQXJyYXlJbnN0YW5jZShl
eGVjKTsKICAgICAgICAgICAgIHJldHVybiBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIH0KQEAg
LTcwLDcgKzcwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4ob2JqZWN0KTsKLSAgICAgICAgICAgIGlm
ICh0aGlzT2JqZWN0LT5zdWJjbGFzc0RhdGEoKSkKKyAgICAgICAgICAgIGlmICghdGhpc09iamVj
dC0+bV9maWxsZWRBcnJheUluc3RhbmNlKQogICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPmZp
bGxBcnJheUluc3RhbmNlKGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOwogICAgICAgICB9CkBAIC03OCw3ICs3OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2LCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxSZWdFeHBNYXRjaGVzQXJyYXkqPihjZWxsKTsKLSAgICAgICAgICAgIGlmICh0
aGlzT2JqZWN0LT5zdWJjbGFzc0RhdGEoKSkKKyAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+
bV9maWxsZWRBcnJheUluc3RhbmNlKQogICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPmZpbGxB
cnJheUluc3RhbmNlKGV4ZWMpOwogICAgICAgICAgICAgSlNBcnJheTo6cHV0KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgdiwgc2xvdCk7CiAgICAgICAgIH0KQEAgLTg2LDcgKzg2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
KQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4oY2VsbCk7Ci0gICAgICAgICAgICBpZiAodGhp
c09iamVjdC0+c3ViY2xhc3NEYXRhKCkpCisgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1f
ZmlsbGVkQXJyYXlJbnN0YW5jZSkKICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5maWxsQXJy
YXlJbnN0YW5jZShleGVjKTsKICAgICAgICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2KTsKICAgICAgICAgfQpAQCAtOTQsNyArOTQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKICAgICAgICAgewogICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PFJlZ0V4cE1hdGNoZXNBcnJheSo+KGNlbGwpOwotICAgICAgICAgICAgaWYgKHRo
aXNPYmplY3QtPnN1YmNsYXNzRGF0YSgpKQorICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5t
X2ZpbGxlZEFycmF5SW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+ZmlsbEFy
cmF5SW5zdGFuY2UoZXhlYyk7CiAgICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6ZGVsZXRlUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQpAQCAtMTAy
LDcgKzEwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSkKICAgICAgICAgewogICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE1hdGNoZXNBcnJheSo+KGNlbGwpOwotICAgICAgICAg
ICAgaWYgKHRoaXNPYmplY3QtPnN1YmNsYXNzRGF0YSgpKQorICAgICAgICAgICAgaWYgKCF0aGlz
T2JqZWN0LT5tX2ZpbGxlZEFycmF5SW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgdGhpc09iamVj
dC0+ZmlsbEFycmF5SW5zdGFuY2UoZXhlYyk7CiAgICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIH0KQEAgLTExMCwxMiArMTEwLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFyciwgRW51bWVyYXRpb25Nb2RlIG1vZGUgPSBF
eGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdFeHBN
YXRjaGVzQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4ob2Jq
ZWN0KTsKLSAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5zdWJjbGFzc0RhdGEoKSkKKyAgICAg
ICAgICAgIGlmICghdGhpc09iamVjdC0+bV9maWxsZWRBcnJheUluc3RhbmNlKQogICAgICAgICAg
ICAgICAgIHRoaXNPYmplY3QtPmZpbGxBcnJheUluc3RhbmNlKGV4ZWMpOwogICAgICAgICAgICAg
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnIsIG1vZGUp
OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBmaWxsQXJyYXlJbnN0YW5jZShFeGVjU3RhdGUq
KTsKKworICAgICAgICBSZWdFeHBSZXN1bHQgcHJpdmF0ZURhdGE7CisgICAgICAgIGJvb2wgbV9m
aWxsZWRBcnJheUluc3RhbmNlOwogfTsKIAogfQo=
</data>
<flag name="review"
          id="122745"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>