<?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>13384</bug_id>
          
          <creation_ts>2007-04-18 00:09:58 -0700</creation_ts>
          <short_desc>[js-collector-tweaks] Shrink PropertyMap by 8 bytes</short_desc>
          <delta_ts>2007-04-22 21:30:21 -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>JavaScriptCore</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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>13383</dependson>
          <blocked>13389</blocked>
          <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>14370</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-04-18 00:09:58 -0700</bug_when>
    <thetext>This is working towards a cell size of 32 bytes, which enables significant performance wins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14371</commentid>
    <comment_count>1</comment_count>
      <attachid>14065</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-04-18 00:10:34 -0700</bug_when>
    <thetext>Created attachment 14065
04-js-gc-shrink-propertymap.patch.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14260</commentid>
    <comment_count>2</comment_count>
      <attachid>14065</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-18 11:12:42 -0700</bug_when>
    <thetext>Comment on attachment 14065
04-js-gc-shrink-propertymap.patch.txt

We should just get rid of m_singleEntryAttributes and allow single entries only when attributes are 0. But that won&apos;t save any size.

-inline PropertyMap::PropertyMap() : _table(0)
+inline PropertyMap::PropertyMap() 
+  : m_singleEntryKey(0)
+  , m_getterSetterFlag(false)
+  , m_usingTable(false)
+
 {
-    _singleEntry.globalGetterSetterFlag = 0;
+  m_u.table = 0;
 }

Should be 4-character indented.

Why are we initializing m_u.table?

Otherwise looks good. I read the whole thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13209</commentid>
    <comment_count>3</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-04-22 21:29:41 -0700</bug_when>
    <thetext>I fixed the indents and removed initialization of m_u, since it isn&apos;t needed unless either m_usingTable is true or m_singleEntryKey is non-NULL.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14065</attachid>
            <date>2007-04-18 00:10:34 -0700</date>
            <delta_ts>2007-04-18 11:12:42 -0700</delta_ts>
            <desc>04-js-gc-shrink-propertymap.patch.txt</desc>
            <filename>04-js-gc-shrink-propertymap.patch.txt</filename>
            <type>text/plain</type>
            <size>21209</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzQ3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMDc0OCkKQEAgLTIsNiArMiw0NSBAQAorMjAwNy0wNC0xNyAgTWFjaWVq
IFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgLSBzaHJpbmsgUHJvcGVydHlNYXAgYnkgOCBi
eXRlcyBhbmQgdGhlcmVmb3JlIHNocmluayBDRUxMX1NJWkUgdG8gNDAgKGZvciAzMi1iaXQ7IAor
ICAgICAgICBzaW1pbGFyIHNocmlua2FnZSBmb3IgNjQtYml0KQorCisgICAgICAgIEluc3BpcmVk
IGJ5IHNpbWlsYXIgY2hhbmdlcyBieSBDaHJpc3RvcGhlciBFLiBIeWRlIDxDLkh5ZGVAcGFyYWJs
ZXVrLmZvcmNlOS5jby51az4KKyAgICAgICAgZG9uZSBpbiB0aGUga2pzLXR3ZWFrcyBicmFuY2gg
b2YgS0RFJ3Mga2pzLiBIb3dldmVyLCB0aGlzIHZlcnNpb24gaXMgc29tZXdoYXQgCisgICAgICAg
IGNsZWFuZXIgc3R5bGUtd2lzZSBhbmQgYXZvaWRzIHNvbWUgb2YgdGhlIG5lZ2F0aXZlIHNwZWVk
IGltcGFjdCAoYXQgbGVhc3Qgb24gZ2NjL3g4NikgCisgICAgICAgIG9mIGhpcyB2ZXJzaW9uLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBuZWFybHkgYSB3YXNoIHBlcmZvcm1hbmNlLXdpc2Us
IG1heWJlIGEgc2xpZ2h0IHNsb3dkb3duLCBidXQgd29ydGggZG9pbmcKKyAgICAgICAgdG8gZXZl
bnR1YWxseSByZWFjaCBjZWxsIHNpemUgMzIuCisgICAgICAgIAorICAgICAgICAqIGtqcy9jb2xs
ZWN0b3IuY3BwOgorICAgICAgICAoS0pTOjopOgorICAgICAgICAqIGtqcy9wcm9wZXJ0eV9tYXAu
Y3BwOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6flByb3BlcnR5TWFwKToKKyAgICAgICAg
KEtKUzo6UHJvcGVydHlNYXA6OmNsZWFyKToKKyAgICAgICAgKEtKUzo6UHJvcGVydHlNYXA6Omdl
dCk6CisgICAgICAgIChLSlM6OlByb3BlcnR5TWFwOjpnZXRMb2NhdGlvbik6CisgICAgICAgIChL
SlM6OlByb3BlcnR5TWFwOjpwdXQpOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6aW5zZXJ0
KToKKyAgICAgICAgKEtKUzo6UHJvcGVydHlNYXA6OmV4cGFuZCk6CisgICAgICAgIChLSlM6OlBy
b3BlcnR5TWFwOjpyZWhhc2gpOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6cmVtb3ZlKToK
KyAgICAgICAgKEtKUzo6UHJvcGVydHlNYXA6Om1hcmspOgorICAgICAgICAoS0pTOjpQcm9wZXJ0
eU1hcDo6Y29udGFpbnNHZXR0ZXJzT3JTZXR0ZXJzKToKKyAgICAgICAgKEtKUzo6UHJvcGVydHlN
YXA6OmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEtKUzo6UHJvcGVydHlN
YXA6OmdldFNwYXJzZUFycmF5UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChLSlM6OlByb3BlcnR5
TWFwOjpzYXZlKToKKyAgICAgICAgKEtKUzo6UHJvcGVydHlNYXA6OmNoZWNrQ29uc2lzdGVuY3kp
OgorICAgICAgICAqIGtqcy9wcm9wZXJ0eV9tYXAuaDoKKyAgICAgICAgKEtKUzo6UHJvcGVydHlN
YXA6Omhhc0dldHRlclNldHRlclByb3BlcnRpZXMpOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1h
cDo6c2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyk6CisgICAgICAgIChLSlM6OlByb3BlcnR5
TWFwOjopOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6UHJvcGVydHlNYXApOgorCiAyMDA3
LTA0LTA2ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CgogICAgICAgICBOb3Qg
cmV2aWV3ZWQsIGV4cGVyaW1lbnRhbCBjaGFuZ2UuCiAgICAgICAgCiAgICAgICAgIC0gY2hhbmdl
IGJsb2NrcyB0byA2NGsgaW4gc2l6ZSwgYW5kIHVzZSB2YXJpb3VzIHBsYXRmb3JtLXNwZWNpZmlj
IGNhbGxzIHRvIGFsbG9jYXRlIGF0IDY0ay1hbGlnbmVkIGFkZHJlc3NlcwogCiAgICAgICAgICog
a2pzL2NvbGxlY3Rvci5jcHA6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5oCShyZXZp
c2lvbiAyMDc0NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuaAkocmV2aXNp
b24gMjA3NDgpCkBAIC01OCw4ICs1OCw3IEBACiAgICAgICAgIFByb3BlcnR5TWFwSGFzaFRhYmxl
RW50cnkoKSA6IGtleSgwKSB7IH0KICAgICAgICAgVVN0cmluZzo6UmVwICprZXk7CiAgICAgICAg
IEpTVmFsdWUgKnZhbHVlOwotICAgICAgICBzaG9ydCBhdHRyaWJ1dGVzOwotICAgICAgICBzaG9y
dCBnbG9iYWxHZXR0ZXJTZXR0ZXJGbGFnOworICAgICAgICBpbnQgYXR0cmlidXRlczsKICAgICAg
ICAgaW50IGluZGV4OwogICAgIH07CiAKQEAgLTg2LDggKzg1LDggQEAKICAgICAgICAgdm9pZCBz
YXZlKFNhdmVkUHJvcGVydGllcyAmKSBjb25zdDsKICAgICAgICAgdm9pZCByZXN0b3JlKGNvbnN0
IFNhdmVkUHJvcGVydGllcyAmcCk7CiAKLSAgICAgICAgYm9vbCBoYXNHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gISFfc2luZ2xlRW50cnkuZ2xvYmFsR2V0dGVyU2V0dGVy
RmxhZzsgfQotICAgICAgICB2b2lkIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXMoYm9vbCBm
KSB7IF9zaW5nbGVFbnRyeS5nbG9iYWxHZXR0ZXJTZXR0ZXJGbGFnID0gZjsgfQorICAgICAgICBi
b29sIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2dldHRlclNl
dHRlckZsYWc7IH0KKyAgICAgICAgdm9pZCBzZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKGJv
b2wgZikgeyBtX2dldHRlclNldHRlckZsYWcgPSBmOyB9CiAKICAgICAgICAgYm9vbCBjb250YWlu
c0dldHRlcnNPclNldHRlcnMoKSBjb25zdDsKICAgICBwcml2YXRlOgpAQCAtMTAzLDE0ICsxMDIs
MjQgQEAKICAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEhhc2hUYWJsZUVudHJ5IEVudHJ5Owog
ICAgICAgICB0eXBlZGVmIFByb3BlcnR5TWFwSGFzaFRhYmxlIFRhYmxlOwogCi0gICAgICAgIFRh
YmxlICpfdGFibGU7Ci0gICAgICAgIAotICAgICAgICBFbnRyeSBfc2luZ2xlRW50cnk7CisgICAg
ICAgIFVTdHJpbmc6OlJlcCogbV9zaW5nbGVFbnRyeUtleTsKKyAgICAgICAgdW5pb24geworICAg
ICAgICAgIEpTVmFsdWUqIHNpbmdsZUVudHJ5VmFsdWU7CisgICAgICAgICAgVGFibGUqIHRhYmxl
OworICAgICAgICB9IG1fdTsKKworICAgICAgICBzaG9ydCBtX3NpbmdsZUVudHJ5QXR0cmlidXRl
czsKKyAgICAgICAgYm9vbCBtX2dldHRlclNldHRlckZsYWc7CisgICAgICAgIGJvb2wgbV91c2lu
Z1RhYmxlOwogICAgIH07CiAKLWlubGluZSBQcm9wZXJ0eU1hcDo6UHJvcGVydHlNYXAoKSA6IF90
YWJsZSgwKQoraW5saW5lIFByb3BlcnR5TWFwOjpQcm9wZXJ0eU1hcCgpIAorICA6IG1fc2luZ2xl
RW50cnlLZXkoMCkKKyAgLCBtX2dldHRlclNldHRlckZsYWcoZmFsc2UpCisgICwgbV91c2luZ1Rh
YmxlKGZhbHNlKQorCiB7Ci0gICAgX3NpbmdsZUVudHJ5Lmdsb2JhbEdldHRlclNldHRlckZsYWcg
PSAwOworICBtX3UudGFibGUgPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL3Byb3BlcnR5X21hcC5jcHAJKHJldmlzaW9uIDIwNzQ3KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL3Byb3BlcnR5X21hcC5jcHAJKHJldmlzaW9uIDIwNzQ4KQpAQCAtMzksOCArMzksNiBA
QAogLy8gMi8yOC8yMDA2IGdnYXJlbjogc3VwZXIgYWNjdXJhdGUgSlMgaUJlbmNoIHNheXMgdGhh
dCBVU0VfU0lOR0xFX0VOVFJZIGlzIGEKIC8vIDMuMiUgcGVyZm9ybWFuY2UgYm9vc3QuCiAKLS8v
IEZJWE1FOiBfc2luZ2xlRW50cnkuaW5kZXggaXMgdW51c2VkLgotCiAjaWYgIURPX0NPTlNJU1RF
TkNZX0NIRUNLCiAjZGVmaW5lIGNoZWNrQ29uc2lzdGVuY3koKSAoKHZvaWQpMCkKICNlbmRpZgpA
QCAtMTEwLDE3ICsxMDgsMTcgQEAKIAogUHJvcGVydHlNYXA6On5Qcm9wZXJ0eU1hcCgpCiB7Ci0g
ICAgaWYgKCFfdGFibGUpIHsKKyAgICBpZiAoIW1fdXNpbmdUYWJsZSkgewogI2lmIFVTRV9TSU5H
TEVfRU5UUlkKLSAgICAgICAgVVN0cmluZzo6UmVwICprZXkgPSBfc2luZ2xlRW50cnkua2V5Owor
ICAgICAgICBVU3RyaW5nOjpSZXAqIGtleSA9IG1fc2luZ2xlRW50cnlLZXk7CiAgICAgICAgIGlm
IChrZXkpCiAgICAgICAgICAgICBrZXktPmRlcmVmKCk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBpbnQgbWluaW11bUtleXNUb1Byb2Nlc3MgPSBfdGFibGUtPmtl
eUNvdW50ICsgX3RhYmxlLT5zZW50aW5lbENvdW50OwotICAgIEVudHJ5ICplbnRyaWVzID0gX3Rh
YmxlLT5lbnRyaWVzOworICAgIGludCBtaW5pbXVtS2V5c1RvUHJvY2VzcyA9IG1fdS50YWJsZS0+
a2V5Q291bnQgKyBtX3UudGFibGUtPnNlbnRpbmVsQ291bnQ7CisgICAgRW50cnkgKmVudHJpZXMg
PSBtX3UudGFibGUtPmVudHJpZXM7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW5pbXVtS2V5
c1RvUHJvY2VzczsgaSsrKSB7CiAgICAgICAgIFVTdHJpbmc6OlJlcCAqa2V5ID0gZW50cmllc1tp
XS5rZXk7CiAgICAgICAgIGlmIChrZXkpIHsKQEAgLTEyOSwyNCArMTI3LDI0IEBACiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgKyttaW5pbXVtS2V5c1RvUHJvY2VzczsKICAgICB9Ci0gICAg
ZmFzdEZyZWUoX3RhYmxlKTsKKyAgICBmYXN0RnJlZShtX3UudGFibGUpOwogfQogCiB2b2lkIFBy
b3BlcnR5TWFwOjpjbGVhcigpCiB7Ci0gICAgaWYgKCFfdGFibGUpIHsKKyAgICBpZiAoIW1fdXNp
bmdUYWJsZSkgewogI2lmIFVTRV9TSU5HTEVfRU5UUlkKLSAgICAgICAgVVN0cmluZzo6UmVwICpr
ZXkgPSBfc2luZ2xlRW50cnkua2V5OworICAgICAgICBVU3RyaW5nOjpSZXAqIGtleSA9IG1fc2lu
Z2xlRW50cnlLZXk7CiAgICAgICAgIGlmIChrZXkpIHsKICAgICAgICAgICAgIGtleS0+ZGVyZWYo
KTsKLSAgICAgICAgICAgIF9zaW5nbGVFbnRyeS5rZXkgPSAwOworICAgICAgICAgICAgbV9zaW5n
bGVFbnRyeUtleSA9IDA7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaW50IHNpemUgPSBfdGFibGUtPnNpemU7Ci0gICAgRW50cnkgKmVudHJpZXMgPSBf
dGFibGUtPmVudHJpZXM7CisgICAgaW50IHNpemUgPSBtX3UudGFibGUtPnNpemU7CisgICAgRW50
cnkgKmVudHJpZXMgPSBtX3UudGFibGUtPmVudHJpZXM7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyBpKyspIHsKICAgICAgICAgVVN0cmluZzo6UmVwICprZXkgPSBlbnRyaWVzW2ldLmtl
eTsKICAgICAgICAgaWYgKGlzVmFsaWQoa2V5KSkgewpAQCAtMTU1LDggKzE1Myw4IEBACiAgICAg
ICAgICAgICBlbnRyaWVzW2ldLnZhbHVlID0gMDsKICAgICAgICAgfQogICAgIH0KLSAgICBfdGFi
bGUtPmtleUNvdW50ID0gMDsKLSAgICBfdGFibGUtPnNlbnRpbmVsQ291bnQgPSAwOworICAgIG1f
dS50YWJsZS0+a2V5Q291bnQgPSAwOworICAgIG1fdS50YWJsZS0+c2VudGluZWxDb3VudCA9IDA7
CiB9CiAKIEpTVmFsdWUgKlByb3BlcnR5TWFwOjpnZXQoY29uc3QgSWRlbnRpZmllciAmbmFtZSwg
dW5zaWduZWQgJmF0dHJpYnV0ZXMpIGNvbnN0CkBAIC0xNjUsMjAgKzE2MywyMCBAQAogICAgIAog
ICAgIFVTdHJpbmc6OlJlcCAqcmVwID0gbmFtZS5fdXN0cmluZy5yZXAoKTsKICAgICAKLSAgICBp
ZiAoIV90YWJsZSkgeworICAgIGlmICghbV91c2luZ1RhYmxlKSB7CiAjaWYgVVNFX1NJTkdMRV9F
TlRSWQotICAgICAgICBVU3RyaW5nOjpSZXAgKmtleSA9IF9zaW5nbGVFbnRyeS5rZXk7CisgICAg
ICAgIFVTdHJpbmc6OlJlcCoga2V5ID0gbV9zaW5nbGVFbnRyeUtleTsKICAgICAgICAgaWYgKHJl
cCA9PSBrZXkpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBfc2luZ2xlRW50cnkuYXR0cmli
dXRlczsKLSAgICAgICAgICAgIHJldHVybiBfc2luZ2xlRW50cnkudmFsdWU7CisgICAgICAgICAg
ICBhdHRyaWJ1dGVzID0gbV9zaW5nbGVFbnRyeUF0dHJpYnV0ZXM7CisgICAgICAgICAgICByZXR1
cm4gbV91LnNpbmdsZUVudHJ5VmFsdWU7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaCA9IHJlcC0+aGFzaCgpOwotICAgIGlu
dCBzaXplTWFzayA9IF90YWJsZS0+c2l6ZU1hc2s7Ci0gICAgRW50cnkgKmVudHJpZXMgPSBfdGFi
bGUtPmVudHJpZXM7CisgICAgaW50IHNpemVNYXNrID0gbV91LnRhYmxlLT5zaXplTWFzazsKKyAg
ICBFbnRyeSAqZW50cmllcyA9IG1fdS50YWJsZS0+ZW50cmllczsKICAgICBpbnQgaSA9IGggJiBz
aXplTWFzazsKICAgICBpbnQgayA9IDA7CiAjaWYgRFVNUF9TVEFUSVNUSUNTCkBAIC0yMDYsMTgg
KzIwNCwxOCBAQAogICAgIAogICAgIFVTdHJpbmc6OlJlcCAqcmVwID0gbmFtZS5fdXN0cmluZy5y
ZXAoKTsKIAotICAgIGlmICghX3RhYmxlKSB7CisgICAgaWYgKCFtX3VzaW5nVGFibGUpIHsKICNp
ZiBVU0VfU0lOR0xFX0VOVFJZCi0gICAgICAgIFVTdHJpbmc6OlJlcCAqa2V5ID0gX3NpbmdsZUVu
dHJ5LmtleTsKKyAgICAgICAgVVN0cmluZzo6UmVwICprZXkgPSBtX3NpbmdsZUVudHJ5S2V5Owog
ICAgICAgICBpZiAocmVwID09IGtleSkKLSAgICAgICAgICAgIHJldHVybiBfc2luZ2xlRW50cnku
dmFsdWU7CisgICAgICAgICAgICByZXR1cm4gbV91LnNpbmdsZUVudHJ5VmFsdWU7CiAjZW5kaWYK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGggPSByZXAtPmhh
c2goKTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBfdGFibGUtPnNpemVNYXNrOwotICAgIEVudHJ5ICpl
bnRyaWVzID0gX3RhYmxlLT5lbnRyaWVzOworICAgIGludCBzaXplTWFzayA9IG1fdS50YWJsZS0+
c2l6ZU1hc2s7CisgICAgRW50cnkgKmVudHJpZXMgPSBtX3UudGFibGUtPmVudHJpZXM7CiAgICAg
aW50IGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgaW50IGsgPSAwOwogI2lmIERVTVBfU1RBVElTVElD
UwpAQCAtMjQzLDE4ICsyNDEsMTggQEAKICAgICAKICAgICBVU3RyaW5nOjpSZXAgKnJlcCA9IG5h
bWUuX3VzdHJpbmcucmVwKCk7CiAKLSAgICBpZiAoIV90YWJsZSkgeworICAgIGlmICghbV91c2lu
Z1RhYmxlKSB7CiAjaWYgVVNFX1NJTkdMRV9FTlRSWQotICAgICAgICBVU3RyaW5nOjpSZXAgKmtl
eSA9IF9zaW5nbGVFbnRyeS5rZXk7CisgICAgICAgIFVTdHJpbmc6OlJlcCAqa2V5ID0gbV9zaW5n
bGVFbnRyeUtleTsKICAgICAgICAgaWYgKHJlcCA9PSBrZXkpCi0gICAgICAgICAgICByZXR1cm4g
Jl9zaW5nbGVFbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiAmbV91LnNpbmdsZUVudHJ5
VmFsdWU7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIGggPSByZXAtPmhhc2goKTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBfdGFibGUtPnNpemVNYXNr
OwotICAgIEVudHJ5ICplbnRyaWVzID0gX3RhYmxlLT5lbnRyaWVzOworICAgIGludCBzaXplTWFz
ayA9IG1fdS50YWJsZS0+c2l6ZU1hc2s7CisgICAgRW50cnkgKmVudHJpZXMgPSBtX3UudGFibGUt
PmVudHJpZXM7CiAgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgaW50IGsgPSAwOwogI2lm
IERVTVBfU1RBVElTVElDUwpAQCAtMzEwLDMwICszMDgsMzAgQEAKICNlbmRpZgogICAgIAogI2lm
IFVTRV9TSU5HTEVfRU5UUlkKLSAgICBpZiAoIV90YWJsZSkgewotICAgICAgICBVU3RyaW5nOjpS
ZXAgKmtleSA9IF9zaW5nbGVFbnRyeS5rZXk7CisgICAgaWYgKCFtX3VzaW5nVGFibGUpIHsKKyAg
ICAgICAgVVN0cmluZzo6UmVwICprZXkgPSBtX3NpbmdsZUVudHJ5S2V5OwogICAgICAgICBpZiAo
a2V5KSB7Ci0gICAgICAgICAgICBpZiAocmVwID09IGtleSAmJiAhKHJvQ2hlY2sgJiYgKF9zaW5n
bGVFbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpKSkgewotICAgICAgICAgICAgICAgIF9zaW5n
bGVFbnRyeS52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHJlcCA9PSBrZXkgJiYgIShy
b0NoZWNrICYmIChtX3NpbmdsZUVudHJ5QXR0cmlidXRlcyAmIFJlYWRPbmx5KSkpIHsKKyAgICAg
ICAgICAgICAgICBtX3Uuc2luZ2xlRW50cnlWYWx1ZSA9IHZhbHVlOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJl
cC0+cmVmKCk7Ci0gICAgICAgICAgICBfc2luZ2xlRW50cnkua2V5ID0gcmVwOwotICAgICAgICAg
ICAgX3NpbmdsZUVudHJ5LnZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICBfc2luZ2xlRW50cnku
YXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PHNob3J0PihhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAg
IG1fc2luZ2xlRW50cnlLZXkgPSByZXA7CisgICAgICAgICAgICBtX3Uuc2luZ2xlRW50cnlWYWx1
ZSA9IHZhbHVlOworICAgICAgICAgICAgbV9zaW5nbGVFbnRyeUF0dHJpYnV0ZXMgPSBzdGF0aWNf
Y2FzdDxzaG9ydD4oYXR0cmlidXRlcyk7CiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAotICAgIGlm
ICghX3RhYmxlIHx8IF90YWJsZS0+a2V5Q291bnQgKiAyID49IF90YWJsZS0+c2l6ZSkKKyAgICBp
ZiAoIW1fdXNpbmdUYWJsZSB8fCBtX3UudGFibGUtPmtleUNvdW50ICogMiA+PSBtX3UudGFibGUt
PnNpemUpCiAgICAgICAgIGV4cGFuZCgpOwogICAgIAogICAgIHVuc2lnbmVkIGggPSByZXAtPmhh
c2goKTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBfdGFibGUtPnNpemVNYXNrOwotICAgIEVudHJ5ICpl
bnRyaWVzID0gX3RhYmxlLT5lbnRyaWVzOworICAgIGludCBzaXplTWFzayA9IG1fdS50YWJsZS0+
c2l6ZU1hc2s7CisgICAgRW50cnkgKmVudHJpZXMgPSBtX3UudGFibGUtPmVudHJpZXM7CiAgICAg
aW50IGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgaW50IGsgPSAwOwogICAgIGJvb2wgZm91bmREZWxl
dGVkRWxlbWVudCA9IGZhbHNlOwpAQCAtMzQ0LDcgKzM0Miw3IEBACiAjZW5kaWYKICAgICB3aGls
ZSAoVVN0cmluZzo6UmVwICprZXkgPSBlbnRyaWVzW2ldLmtleSkgewogICAgICAgICBpZiAocmVw
ID09IGtleSkgewotICAgICAgICAgICAgaWYgKHJvQ2hlY2sgJiYgKF90YWJsZS0+ZW50cmllc1tp
XS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpKSAKKyAgICAgICAgICAgIGlmIChyb0NoZWNrICYmICht
X3UudGFibGUtPmVudHJpZXNbaV0uYXR0cmlidXRlcyAmIFJlYWRPbmx5KSkgCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgLy8gUHV0IGEgbmV3IHZhbHVlIGluIGFuIGV4aXN0
aW5nIGhhc2ggdGFibGUgZW50cnkuCiAgICAgICAgICAgICBlbnRyaWVzW2ldLnZhbHVlID0gdmFs
dWU7CkBAIC0zNjcsNyArMzY1LDcgQEAKICAgICAvLyBVc2UgZWl0aGVyIHRoZSBkZWxldGVkIGVs
ZW1lbnQgb3IgdGhlIDAgYXQgdGhlIGVuZCBvZiB0aGUgY2hhaW4uCiAgICAgaWYgKGZvdW5kRGVs
ZXRlZEVsZW1lbnQpIHsKICAgICAgICAgaSA9IGRlbGV0ZWRFbGVtZW50SW5kZXg7Ci0gICAgICAg
IC0tX3RhYmxlLT5zZW50aW5lbENvdW50OworICAgICAgICAtLW1fdS50YWJsZS0+c2VudGluZWxD
b3VudDsKICAgICB9CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgaGFzaCB0YWJsZSBlbnRyeS4KQEAg
LTM3NSwxOSArMzczLDE5IEBACiAgICAgZW50cmllc1tpXS5rZXkgPSByZXA7CiAgICAgZW50cmll
c1tpXS52YWx1ZSA9IHZhbHVlOwogICAgIGVudHJpZXNbaV0uYXR0cmlidXRlcyA9IHN0YXRpY19j
YXN0PHNob3J0PihhdHRyaWJ1dGVzKTsKLSAgICBlbnRyaWVzW2ldLmluZGV4ID0gKytfdGFibGUt
Pmxhc3RJbmRleFVzZWQ7Ci0gICAgKytfdGFibGUtPmtleUNvdW50OworICAgIGVudHJpZXNbaV0u
aW5kZXggPSArK21fdS50YWJsZS0+bGFzdEluZGV4VXNlZDsKKyAgICArK21fdS50YWJsZS0+a2V5
Q291bnQ7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKIHZvaWQgUHJvcGVydHlNYXA6
Omluc2VydChVU3RyaW5nOjpSZXAgKmtleSwgSlNWYWx1ZSAqdmFsdWUsIGludCBhdHRyaWJ1dGVz
LCBpbnQgaW5kZXgpCiB7Ci0gICAgYXNzZXJ0KF90YWJsZSk7CisgICAgYXNzZXJ0KG1fdS50YWJs
ZSk7CiAKICAgICB1bnNpZ25lZCBoID0ga2V5LT5oYXNoKCk7Ci0gICAgaW50IHNpemVNYXNrID0g
X3RhYmxlLT5zaXplTWFzazsKLSAgICBFbnRyeSAqZW50cmllcyA9IF90YWJsZS0+ZW50cmllczsK
KyAgICBpbnQgc2l6ZU1hc2sgPSBtX3UudGFibGUtPnNpemVNYXNrOworICAgIEVudHJ5ICplbnRy
aWVzID0gbV91LnRhYmxlLT5lbnRyaWVzOwogICAgIGludCBpID0gaCAmIHNpemVNYXNrOwogICAg
IGludCBrID0gMDsKICNpZiBEVU1QX1NUQVRJU1RJQ1MKQEAgLTQxMiw0MCArNDEwLDQ1IEBACiAK
IHZvaWQgUHJvcGVydHlNYXA6OmV4cGFuZCgpCiB7Ci0gICAgVGFibGUgKm9sZFRhYmxlID0gX3Rh
YmxlOwotICAgIGludCBvbGRUYWJsZVNpemUgPSBvbGRUYWJsZSA/IG9sZFRhYmxlLT5zaXplIDog
MDsgICAgCisgICAgVGFibGUgKm9sZFRhYmxlID0gbV91LnRhYmxlOworICAgIGludCBvbGRUYWJs
ZVNpemUgPSBtX3VzaW5nVGFibGUgPyBvbGRUYWJsZS0+c2l6ZSA6IDA7ICAgIAogICAgIHJlaGFz
aChvbGRUYWJsZVNpemUgPyBvbGRUYWJsZVNpemUgKiAyIDogMTYpOwogfQogCiB2b2lkIFByb3Bl
cnR5TWFwOjpyZWhhc2goKQogewotICAgIGFzc2VydChfdGFibGUpOwotICAgIGFzc2VydChfdGFi
bGUtPnNpemUpOwotICAgIHJlaGFzaChfdGFibGUtPnNpemUpOworICAgIGFzc2VydChtX3UudGFi
bGUpOworICAgIGFzc2VydChtX3UudGFibGUtPnNpemUpOworICAgIHJlaGFzaChtX3UudGFibGUt
PnNpemUpOwogfQogCiB2b2lkIFByb3BlcnR5TWFwOjpyZWhhc2goaW50IG5ld1RhYmxlU2l6ZSkK
IHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyNpZiBVU0VfU0lOR0xFX0VOVFJZCisgICAg
SlNWYWx1ZSogb2xkU2luZ2xlRW50cnlWYWx1ZSA9IG1fdS5zaW5nbGVFbnRyeVZhbHVlOworI2Vu
ZGlmCisKKyAgICBUYWJsZSAqb2xkVGFibGUgPSBtX3VzaW5nVGFibGUgPyBtX3UudGFibGUgOiAw
OworICAgIGludCBvbGRUYWJsZVNpemUgPSBtX3VzaW5nVGFibGUgPyBvbGRUYWJsZS0+c2l6ZSA6
IDA7CisgICAgaW50IG9sZFRhYmxlS2V5Q291bnQgPSBtX3VzaW5nVGFibGUgPyBvbGRUYWJsZS0+
a2V5Q291bnQgOiAwOwogICAgIAotICAgIFRhYmxlICpvbGRUYWJsZSA9IF90YWJsZTsKLSAgICBp
bnQgb2xkVGFibGVTaXplID0gb2xkVGFibGUgPyBvbGRUYWJsZS0+c2l6ZSA6IDA7Ci0gICAgaW50
IG9sZFRhYmxlS2V5Q291bnQgPSBvbGRUYWJsZSA/IG9sZFRhYmxlLT5rZXlDb3VudCA6IDA7Ci0g
ICAgCi0gICAgX3RhYmxlID0gKFRhYmxlICopZmFzdENhbGxvYygxLCBzaXplb2YoVGFibGUpICsg
KG5ld1RhYmxlU2l6ZSAtIDEpICogc2l6ZW9mKEVudHJ5KSApOwotICAgIF90YWJsZS0+c2l6ZSA9
IG5ld1RhYmxlU2l6ZTsKLSAgICBfdGFibGUtPnNpemVNYXNrID0gbmV3VGFibGVTaXplIC0gMTsK
LSAgICBfdGFibGUtPmtleUNvdW50ID0gb2xkVGFibGVLZXlDb3VudDsKKyAgICBtX3UudGFibGUg
PSAoVGFibGUgKilmYXN0Q2FsbG9jKDEsIHNpemVvZihUYWJsZSkgKyAobmV3VGFibGVTaXplIC0g
MSkgKiBzaXplb2YoRW50cnkpICk7CisgICAgbV91LnRhYmxlLT5zaXplID0gbmV3VGFibGVTaXpl
OworICAgIG1fdS50YWJsZS0+c2l6ZU1hc2sgPSBuZXdUYWJsZVNpemUgLSAxOworICAgIG1fdS50
YWJsZS0+a2V5Q291bnQgPSBvbGRUYWJsZUtleUNvdW50OworICAgIG1fdXNpbmdUYWJsZSA9IHRy
dWU7CiAKICNpZiBVU0VfU0lOR0xFX0VOVFJZCi0gICAgVVN0cmluZzo6UmVwICprZXkgPSBfc2lu
Z2xlRW50cnkua2V5OworICAgIFVTdHJpbmc6OlJlcCoga2V5ID0gbV9zaW5nbGVFbnRyeUtleTsK
ICAgICBpZiAoa2V5KSB7Ci0gICAgICAgIGluc2VydChrZXksIF9zaW5nbGVFbnRyeS52YWx1ZSwg
X3NpbmdsZUVudHJ5LmF0dHJpYnV0ZXMsIDApOwotICAgICAgICBfc2luZ2xlRW50cnkua2V5ID0g
MDsKKyAgICAgICAgaW5zZXJ0KGtleSwgb2xkU2luZ2xlRW50cnlWYWx1ZSwgbV9zaW5nbGVFbnRy
eUF0dHJpYnV0ZXMsIDApOworICAgICAgICBtX3NpbmdsZUVudHJ5S2V5ID0gMDsKICAgICAgICAg
Ly8gdXBkYXRlIHRoZSBjb3VudCwgYmVjYXVzZSBzaW5nbGUgZW50cmllcyBkb24ndCBjb3VudCB0
b3dhcmRzCiAgICAgICAgIC8vIHRoZSB0YWJsZSBrZXkgY291bnQKLSAgICAgICAgKytfdGFibGUt
PmtleUNvdW50OwotICAgICAgICBhc3NlcnQoX3RhYmxlLT5rZXlDb3VudCA9PSAxKTsKKyAgICAg
ICAgKyttX3UudGFibGUtPmtleUNvdW50OworICAgICAgICBhc3NlcnQobV91LnRhYmxlLT5rZXlD
b3VudCA9PSAxKTsKICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTQ1OSw3ICs0NjIsNyBAQAogICAg
ICAgICAgICAgaW5zZXJ0KGtleSwgZW50cnkudmFsdWUsIGVudHJ5LmF0dHJpYnV0ZXMsIGluZGV4
KTsKICAgICAgICAgfQogICAgIH0KLSAgICBfdGFibGUtPmxhc3RJbmRleFVzZWQgPSBsYXN0SW5k
ZXhVc2VkOworICAgIG1fdS50YWJsZS0+bGFzdEluZGV4VXNlZCA9IGxhc3RJbmRleFVzZWQ7CiAK
ICAgICBmYXN0RnJlZShvbGRUYWJsZSk7CiAKQEAgLTQ3NiwxMiArNDc5LDEyIEBACiAKICAgICBV
U3RyaW5nOjpSZXAgKmtleTsKIAotICAgIGlmICghX3RhYmxlKSB7CisgICAgaWYgKCFtX3VzaW5n
VGFibGUpIHsKICNpZiBVU0VfU0lOR0xFX0VOVFJZCi0gICAgICAgIGtleSA9IF9zaW5nbGVFbnRy
eS5rZXk7CisgICAgICAgIGtleSA9IG1fc2luZ2xlRW50cnlLZXk7CiAgICAgICAgIGlmIChyZXAg
PT0ga2V5KSB7CiAgICAgICAgICAgICBrZXktPmRlcmVmKCk7Ci0gICAgICAgICAgICBfc2luZ2xl
RW50cnkua2V5ID0gMDsKKyAgICAgICAgICAgIG1fc2luZ2xlRW50cnlLZXkgPSAwOwogICAgICAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTQ5MCw4ICs0
OTMsOCBAQAogCiAgICAgLy8gRmluZCB0aGUgdGhpbmcgdG8gcmVtb3ZlLgogICAgIHVuc2lnbmVk
IGggPSByZXAtPmhhc2goKTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBfdGFibGUtPnNpemVNYXNrOwot
ICAgIEVudHJ5ICplbnRyaWVzID0gX3RhYmxlLT5lbnRyaWVzOworICAgIGludCBzaXplTWFzayA9
IG1fdS50YWJsZS0+c2l6ZU1hc2s7CisgICAgRW50cnkgKmVudHJpZXMgPSBtX3UudGFibGUtPmVu
dHJpZXM7CiAgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgaW50IGsgPSAwOwogI2lmIERV
TVBfU1RBVElTVElDUwpAQCAtNTE5LDExICs1MjIsMTEgQEAKICAgICBlbnRyaWVzW2ldLmtleSA9
IGtleTsKICAgICBlbnRyaWVzW2ldLnZhbHVlID0gMDsKICAgICBlbnRyaWVzW2ldLmF0dHJpYnV0
ZXMgPSBEb250RW51bTsKLSAgICBhc3NlcnQoX3RhYmxlLT5rZXlDb3VudCA+PSAxKTsKLSAgICAt
LV90YWJsZS0+a2V5Q291bnQ7Ci0gICAgKytfdGFibGUtPnNlbnRpbmVsQ291bnQ7CisgICAgYXNz
ZXJ0KG1fdS50YWJsZS0+a2V5Q291bnQgPj0gMSk7CisgICAgLS1tX3UudGFibGUtPmtleUNvdW50
OworICAgICsrbV91LnRhYmxlLT5zZW50aW5lbENvdW50OwogICAgIAotICAgIGlmIChfdGFibGUt
PnNlbnRpbmVsQ291bnQgKiA0ID49IF90YWJsZS0+c2l6ZSkKKyAgICBpZiAobV91LnRhYmxlLT5z
ZW50aW5lbENvdW50ICogNCA+PSBtX3UudGFibGUtPnNpemUpCiAgICAgICAgIHJlaGFzaCgpOwog
CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtNTMxLDEwICs1MzQsMTAgQEAKIAogdm9pZCBQ
cm9wZXJ0eU1hcDo6bWFyaygpIGNvbnN0CiB7Ci0gICAgaWYgKCFfdGFibGUpIHsKKyAgICBpZiAo
IW1fdXNpbmdUYWJsZSkgewogI2lmIFVTRV9TSU5HTEVfRU5UUlkKLSAgICAgICAgaWYgKF9zaW5n
bGVFbnRyeS5rZXkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgKnYgPSBfc2luZ2xlRW50cnkudmFs
dWU7CisgICAgICAgIGlmIChtX3NpbmdsZUVudHJ5S2V5KSB7CisgICAgICAgICAgICBKU1ZhbHVl
KiB2ID0gbV91LnNpbmdsZUVudHJ5VmFsdWU7CiAgICAgICAgICAgICBpZiAoIXYtPm1hcmtlZCgp
KQogICAgICAgICAgICAgICAgIHYtPm1hcmsoKTsKICAgICAgICAgfQpAQCAtNTQyLDggKzU0NSw4
IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgbWluaW11bUtleXNUb1Byb2Nl
c3MgPSBfdGFibGUtPmtleUNvdW50OwotICAgIEVudHJ5ICplbnRyaWVzID0gX3RhYmxlLT5lbnRy
aWVzOworICAgIGludCBtaW5pbXVtS2V5c1RvUHJvY2VzcyA9IG1fdS50YWJsZS0+a2V5Q291bnQ7
CisgICAgRW50cnkgKmVudHJpZXMgPSBtX3UudGFibGUtPmVudHJpZXM7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtaW5pbXVtS2V5c1RvUHJvY2VzczsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUg
KnYgPSBlbnRyaWVzW2ldLnZhbHVlOwogICAgICAgICBpZiAodikgewpAQCAtNTY4LDE2ICs1NzEs
MTYgQEAKIAogYm9vbCBQcm9wZXJ0eU1hcDo6Y29udGFpbnNHZXR0ZXJzT3JTZXR0ZXJzKCkgY29u
c3QKIHsKLSAgICBpZiAoIV90YWJsZSkgeworICAgIGlmICghbV91c2luZ1RhYmxlKSB7CiAjaWYg
VVNFX1NJTkdMRV9FTlRSWQotICAgICAgICByZXR1cm4gISEoX3NpbmdsZUVudHJ5LmF0dHJpYnV0
ZXMgJiBHZXR0ZXJTZXR0ZXIpOworICAgICAgICByZXR1cm4gISEobV9zaW5nbGVFbnRyeUF0dHJp
YnV0ZXMgJiBHZXR0ZXJTZXR0ZXIpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2Vu
ZGlmCiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gX3RhYmxlLT5zaXplOyArK2kp
IHsKLSAgICAgICAgaWYgKF90YWJsZS0+ZW50cmllc1tpXS5hdHRyaWJ1dGVzICYgR2V0dGVyU2V0
dGVyKQorICAgIGZvciAoaW50IGkgPSAwOyBpICE9IG1fdS50YWJsZS0+c2l6ZTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX3UudGFibGUtPmVudHJpZXNbaV0uYXR0cmlidXRlcyAmIEdldHRlclNldHRl
cikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTU4NiwyMiArNTg5
LDIyIEBACiAKIHZvaWQgUHJvcGVydHlNYXA6OmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKSBjb25zdAogewotICAgIGlmICghX3RhYmxl
KSB7CisgICAgaWYgKCFtX3VzaW5nVGFibGUpIHsKICNpZiBVU0VfU0lOR0xFX0VOVFJZCi0gICAg
ICAgIFVTdHJpbmc6OlJlcCAqa2V5ID0gX3NpbmdsZUVudHJ5LmtleTsKLSAgICAgICAgaWYgKGtl
eSAmJiAhKF9zaW5nbGVFbnRyeS5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQorICAgICAgICBVU3Ry
aW5nOjpSZXAqIGtleSA9IG1fc2luZ2xlRW50cnlLZXk7CisgICAgICAgIGlmIChrZXkgJiYgISht
X3NpbmdsZUVudHJ5QXR0cmlidXRlcyAmIERvbnRFbnVtKSkKICAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXIoa2V5KSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIC8vIEFsbG9jYXRlIGEgYnVmZmVyIHRvIHVzZSB0byBzb3J0IHRoZSBrZXlzLgot
ICAgIFZlY3RvcjxFbnRyeSosIHNtYWxsTWFwVGhyZXNob2xkPiBzb3J0ZWRFbnVtZXJhYmxlcyhf
dGFibGUtPmtleUNvdW50KTsKKyAgICBWZWN0b3I8RW50cnkqLCBzbWFsbE1hcFRocmVzaG9sZD4g
c29ydGVkRW51bWVyYWJsZXMobV91LnRhYmxlLT5rZXlDb3VudCk7CiAKICAgICAvLyBHZXQgcG9p
bnRlcnMgdG8gdGhlIGVudW1lcmFibGUgZW50cmllcyBpbiB0aGUgYnVmZmVyLgogICAgIEVudHJ5
KiogcCA9IHNvcnRlZEVudW1lcmFibGVzLmRhdGEoKTsKLSAgICBpbnQgc2l6ZSA9IF90YWJsZS0+
c2l6ZTsKLSAgICBFbnRyeSogZW50cmllcyA9IF90YWJsZS0+ZW50cmllczsKKyAgICBpbnQgc2l6
ZSA9IG1fdS50YWJsZS0+c2l6ZTsKKyAgICBFbnRyeSogZW50cmllcyA9IG1fdS50YWJsZS0+ZW50
cmllczsKICAgICBmb3IgKGludCBpID0gMDsgaSAhPSBzaXplOyArK2kpIHsKICAgICAgICAgRW50
cnkqIGUgPSAmZW50cmllc1tpXTsKICAgICAgICAgaWYgKGUtPmtleSAmJiAhKGUtPmF0dHJpYnV0
ZXMgJiBEb250RW51bSkpCkBAIC02MTgsOSArNjIxLDkgQEAKIAogdm9pZCBQcm9wZXJ0eU1hcDo6
Z2V0U3BhcnNlQXJyYXlQcm9wZXJ0eU5hbWVzKFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzKSBjb25zdAogewotICAgIGlmICghX3RhYmxlKSB7CisgICAgaWYgKCFtX3VzaW5nVGFibGUp
IHsKICNpZiBVU0VfU0lOR0xFX0VOVFJZCi0gICAgICAgIFVTdHJpbmc6OlJlcCAqa2V5ID0gX3Np
bmdsZUVudHJ5LmtleTsKKyAgICAgICAgVVN0cmluZzo6UmVwICprZXkgPSBtX3NpbmdsZUVudHJ5
S2V5OwogICAgICAgICBpZiAoa2V5KSB7CiAgICAgICAgICAgICBVU3RyaW5nIGsoa2V5KTsKICAg
ICAgICAgICAgIGJvb2wgZml0c0luVUludDMyOwpAQCAtNjMyLDggKzYzNSw4IEBACiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IF90YWJsZS0+c2l6ZTsKLSAgICBFbnRy
eSAqZW50cmllcyA9IF90YWJsZS0+ZW50cmllczsKKyAgICBpbnQgc2l6ZSA9IG1fdS50YWJsZS0+
c2l6ZTsKKyAgICBFbnRyeSAqZW50cmllcyA9IG1fdS50YWJsZS0+ZW50cmllczsKICAgICBmb3Ig
KGludCBpID0gMDsgaSAhPSBzaXplOyArK2kpIHsKICAgICAgICAgVVN0cmluZzo6UmVwICprZXkg
PSBlbnRyaWVzW2ldLmtleTsKICAgICAgICAgaWYgKGlzVmFsaWQoa2V5KSkgewpAQCAtNjUwLDE0
ICs2NTMsMTQgQEAKIHsKICAgICBpbnQgY291bnQgPSAwOwogCi0gICAgaWYgKCFfdGFibGUpIHsK
KyAgICBpZiAoIW1fdXNpbmdUYWJsZSkgewogI2lmIFVTRV9TSU5HTEVfRU5UUlkKLSAgICAgICAg
aWYgKF9zaW5nbGVFbnRyeS5rZXkgJiYgIShfc2luZ2xlRW50cnkuYXR0cmlidXRlcyAmIChSZWFk
T25seSB8IEZ1bmN0aW9uKSkpCisgICAgICAgIGlmIChtX3NpbmdsZUVudHJ5S2V5ICYmICEobV9z
aW5nbGVFbnRyeUF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBGdW5jdGlvbikpKQogICAgICAgICAg
ICAgKytjb3VudDsKICNlbmRpZgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBzaXplID0gX3Rh
YmxlLT5zaXplOwotICAgICAgICBFbnRyeSAqZW50cmllcyA9IF90YWJsZS0+ZW50cmllczsKKyAg
ICAgICAgaW50IHNpemUgPSBtX3UudGFibGUtPnNpemU7CisgICAgICAgIEVudHJ5ICplbnRyaWVz
ID0gbV91LnRhYmxlLT5lbnRyaWVzOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSAhPSBzaXpl
OyArK2kpCiAgICAgICAgICAgICBpZiAoaXNWYWxpZChlbnRyaWVzW2ldLmtleSkgJiYgIShlbnRy
aWVzW2ldLmF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBGdW5jdGlvbikpKQogICAgICAgICAgICAg
ICAgICsrY291bnQ7CkBAIC02NzMsMTIgKzY3NiwxMiBAQAogICAgIAogICAgIFNhdmVkUHJvcGVy
dHkgKnByb3AgPSBwLl9wcm9wZXJ0aWVzLmdldCgpOwogICAgIAotICAgIGlmICghX3RhYmxlKSB7
CisgICAgaWYgKCFtX3VzaW5nVGFibGUpIHsKICNpZiBVU0VfU0lOR0xFX0VOVFJZCi0gICAgICAg
IGlmIChfc2luZ2xlRW50cnkua2V5ICYmICEoX3NpbmdsZUVudHJ5LmF0dHJpYnV0ZXMgJiAoUmVh
ZE9ubHkgfCBGdW5jdGlvbikpKSB7Ci0gICAgICAgICAgICBwcm9wLT5rZXkgPSBJZGVudGlmaWVy
KF9zaW5nbGVFbnRyeS5rZXkpOwotICAgICAgICAgICAgcHJvcC0+dmFsdWUgPSBfc2luZ2xlRW50
cnkudmFsdWU7Ci0gICAgICAgICAgICBwcm9wLT5hdHRyaWJ1dGVzID0gX3NpbmdsZUVudHJ5LmF0
dHJpYnV0ZXM7CisgICAgICAgIGlmIChtX3NpbmdsZUVudHJ5S2V5ICYmICEobV9zaW5nbGVFbnRy
eUF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBGdW5jdGlvbikpKSB7CisgICAgICAgICAgICBwcm9w
LT5rZXkgPSBJZGVudGlmaWVyKG1fc2luZ2xlRW50cnlLZXkpOworICAgICAgICAgICAgcHJvcC0+
dmFsdWUgPSBtX3Uuc2luZ2xlRW50cnlWYWx1ZTsKKyAgICAgICAgICAgIHByb3AtPmF0dHJpYnV0
ZXMgPSBtX3NpbmdsZUVudHJ5QXR0cmlidXRlczsKICAgICAgICAgICAgICsrcHJvcDsKICAgICAg
ICAgfQogI2VuZGlmCkBAIC02OTEsOCArNjk0LDggQEAKIAogICAgICAgICAvLyBHZXQgcG9pbnRl
cnMgdG8gdGhlIGVudHJpZXMgaW4gdGhlIGJ1ZmZlci4KICAgICAgICAgRW50cnkqKiBwID0gc29y
dGVkRW50cmllcy5kYXRhKCk7Ci0gICAgICAgIGludCBzaXplID0gX3RhYmxlLT5zaXplOwotICAg
ICAgICBFbnRyeSogZW50cmllcyA9IF90YWJsZS0+ZW50cmllczsKKyAgICAgICAgaW50IHNpemUg
PSBtX3UudGFibGUtPnNpemU7CisgICAgICAgIEVudHJ5KiBlbnRyaWVzID0gbV91LnRhYmxlLT5l
bnRyaWVzOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSAhPSBzaXplOyArK2kpIHsKICAgICAg
ICAgICAgIEVudHJ5ICplID0gJmVudHJpZXNbaV07CiAgICAgICAgICAgICBpZiAoaXNWYWxpZChl
LT5rZXkpICYmICEoZS0+YXR0cmlidXRlcyAmIChSZWFkT25seSB8IEZ1bmN0aW9uKSkpCkBAIC03
MjMsMTMgKzcyNiwxMyBAQAogCiB2b2lkIFByb3BlcnR5TWFwOjpjaGVja0NvbnNpc3RlbmN5KCkK
IHsKLSAgICBpZiAoIV90YWJsZSkKKyAgICBpZiAoIW1fdXNpbmdUYWJsZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaW50IGNvdW50ID0gMDsKICAgICBpbnQgc2VudGluZWxDb3VudCA9IDA7Ci0g
ICAgZm9yIChpbnQgaiA9IDA7IGogIT0gX3RhYmxlLT5zaXplOyArK2opIHsKLSAgICAgICAgVVN0
cmluZzo6UmVwICpyZXAgPSBfdGFibGUtPmVudHJpZXNbal0ua2V5OworICAgIGZvciAoaW50IGog
PSAwOyBqICE9IG1fdS50YWJsZS0+c2l6ZTsgKytqKSB7CisgICAgICAgIFVTdHJpbmc6OlJlcCAq
cmVwID0gbV91LnRhYmxlLT5lbnRyaWVzW2pdLmtleTsKICAgICAgICAgaWYgKCFyZXApCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHJlcCA9PSBkZWxldGVkU2VudGluZWwoKSkg
ewpAQCAtNzM3LDIzICs3NDAsMjMgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAgICAgICAgIHVuc2lnbmVkIGggPSByZXAtPmhhc2goKTsKLSAgICAgICAgaW50IGkgPSBoICYg
X3RhYmxlLT5zaXplTWFzazsKKyAgICAgICAgaW50IGkgPSBoICYgbV91LnRhYmxlLT5zaXplTWFz
azsKICAgICAgICAgaW50IGsgPSAwOwotICAgICAgICB3aGlsZSAoVVN0cmluZzo6UmVwICprZXkg
PSBfdGFibGUtPmVudHJpZXNbaV0ua2V5KSB7CisgICAgICAgIHdoaWxlIChVU3RyaW5nOjpSZXAg
KmtleSA9IG1fdS50YWJsZS0+ZW50cmllc1tpXS5rZXkpIHsKICAgICAgICAgICAgIGlmIChyZXAg
PT0ga2V5KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGsgPT0gMCkK
LSAgICAgICAgICAgICAgICBrID0gMSB8IChoICUgX3RhYmxlLT5zaXplTWFzayk7Ci0gICAgICAg
ICAgICBpID0gKGkgKyBrKSAmIF90YWJsZS0+c2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgayA9
IDEgfCAoaCAlIG1fdS50YWJsZS0+c2l6ZU1hc2spOworICAgICAgICAgICAgaSA9IChpICsgaykg
JiBtX3UudGFibGUtPnNpemVNYXNrOwogICAgICAgICB9CiAgICAgICAgIGFzc2VydChpID09IGop
OwogICAgICAgICArK2NvdW50OwogICAgIH0KLSAgICBhc3NlcnQoY291bnQgPT0gX3RhYmxlLT5r
ZXlDb3VudCk7Ci0gICAgYXNzZXJ0KHNlbnRpbmVsQ291bnQgPT0gX3RhYmxlLT5zZW50aW5lbENv
dW50KTsKLSAgICBhc3NlcnQoX3RhYmxlLT5zaXplID49IDE2KTsKLSAgICBhc3NlcnQoX3RhYmxl
LT5zaXplTWFzayk7Ci0gICAgYXNzZXJ0KF90YWJsZS0+c2l6ZSA9PSBfdGFibGUtPnNpemVNYXNr
ICsgMSk7CisgICAgYXNzZXJ0KGNvdW50ID09IG1fdS50YWJsZS0+a2V5Q291bnQpOworICAgIGFz
c2VydChzZW50aW5lbENvdW50ID09IG1fdS50YWJsZS0+c2VudGluZWxDb3VudCk7CisgICAgYXNz
ZXJ0KG1fdS50YWJsZS0+c2l6ZSA+PSAxNik7CisgICAgYXNzZXJ0KG1fdS50YWJsZS0+c2l6ZU1h
c2spOworICAgIGFzc2VydChtX3UudGFibGUtPnNpemUgPT0gbV91LnRhYmxlLT5zaXplTWFzayAr
IDEpOwogfQogCiAjZW5kaWYgLy8gRE9fQ09OU0lTVEVOQ1lfQ0hFQ0sKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9jb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAyMDc0NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9j
b2xsZWN0b3IuY3BwCShyZXZpc2lvbiAyMDc0OCkKQEAgLTY3LDggKzY3LDggQEAKIC8vIHR1bmFi
bGUgcGFyYW1ldGVycwogCiB0ZW1wbGF0ZTxib29sIGlzMzJCaXQsIGJvb2wgaXM2NEJpdD4gc3Ry
dWN0IENlbGxTaXplOwotdGVtcGxhdGU8PiBzdHJ1Y3QgQ2VsbFNpemU8dHJ1ZSwgZmFsc2U+IHsg
c3RhdGljIGNvbnN0IHNpemVfdCBtX3ZhbHVlID0gNDg7IH07IC8vIDMyLWJpdAotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ2VsbFNpemU8ZmFsc2UsIHRydWU+IHsgc3RhdGljIGNvbnN0IHNpemVfdCBtX3Zh
bHVlID0gODA7IH07IC8vIDY0LWJpdAordGVtcGxhdGU8PiBzdHJ1Y3QgQ2VsbFNpemU8dHJ1ZSwg
ZmFsc2U+IHsgc3RhdGljIGNvbnN0IHNpemVfdCBtX3ZhbHVlID0gNDA7IH07IC8vIDMyLWJpdAor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ2VsbFNpemU8ZmFsc2UsIHRydWU+IHsgc3RhdGljIGNvbnN0IHNp
emVfdCBtX3ZhbHVlID0gNjQ7IH07IC8vIDY0LWJpdAogCiBjb25zdCBzaXplX3QgQkxPQ0tfU0la
RSA9ICgxNiAqIDQwOTYpOyAvLyA2NGsKIGNvbnN0IHNpemVfdCBTUEFSRV9FTVBUWV9CTE9DS1Mg
PSAyOwo=
</data>
<flag name="review"
          id="5680"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>