<?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>15791</bug_id>
          
          <creation_ts>2007-11-02 05:48:54 -0700</creation_ts>
          <short_desc>change property map data structure for less memory use, better speed</short_desc>
          <delta_ts>2007-11-02 17:58:02 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60043</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-02 05:48:54 -0700</bug_when>
    <thetext>This optimization is giving me a 0.8% speed-up on SunSpider, although it does slow down bitwise-and because that is almost exclusively a test of unoptimized global variable access.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60048</commentid>
    <comment_count>1</comment_count>
      <attachid>16992</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-02 06:52:44 -0700</bug_when>
    <thetext>Created attachment 16992
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60119</commentid>
    <comment_count>2</comment_count>
      <attachid>16992</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-02 17:43:49 -0700</bug_when>
    <thetext>Comment on attachment 16992
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60121</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-02 17:58:02 -0700</bug_when>
    <thetext>Committed revision 27387.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16992</attachid>
            <date>2007-11-02 06:52:44 -0700</date>
            <delta_ts>2007-11-02 17:43:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>PropMapPatch.txt</filename>
            <type>text/plain</type>
            <size>38207</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Mzc1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMDctMTEtMDIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU3OTEKKyAgICAgICAgICBjaGFuZ2UgcHJvcGVydHkgbWFwIGRhdGEgc3RydWN0dXJlIGZvciBs
ZXNzIG1lbW9yeSB1c2UsIGJldHRlciBzcGVlZAorCisgICAgICAgIFRoZSBwcm9wZXJ0eSBtYXAg
bm93IGhhcyBhbiBhcnJheSBvZiBpbmRpY2VzIGFuZCBhIHNlcGFyYXRlIGFycmF5IG9mCisgICAg
ICAgIHByb3BlcnR5IG1hcCBlbnRyaWVzLiBUaGlzIHNsaWdodGx5IHNsb3dzIGRvd24gbG9va3Vw
IGJlY2F1c2Ugb2YgYSBzZWNvbmQKKyAgICAgICAgbWVtb3J5IGFjZXNzLCBidXQgbWFrZXMgcHJv
cGVydHkgbWFwcyBzbWFsbGVyIGFuZCBmYXN0ZXIgdG8gaXRlcmF0aXZlIGluCisgICAgICAgIGZ1
bmN0aW9ucyBsaWtlIG1hcmsoKS4KKworICAgICAgICBTdW5TcGlkZXIgc2F5cyB0aGlzIGlzIDEu
MiUgZmFzdGVyLCBhbHRob3VnaCBpdCBtYWtlcyB0aGUgYml0d2lzZS1lbmQgdGVzdAorICAgICAg
ICBtdWNoIHNsb3dlci4gVG8gZml4IHRoYXQgd2UnbGwgbmVlZCB0byBvcHRpbWl6ZSBnbG9iYWwg
dmFyaWFibGUgbG9va3VwLgorCisgICAgICAgICoga2pzL3Byb3BlcnR5X21hcC5jcHA6CisgICAg
ICAgIChLSlM6OlByb3BlcnR5TWFwRW50cnk6OlByb3BlcnR5TWFwRW50cnkpOgorICAgICAgICAo
S0pTOjpQcm9wZXJ0eU1hcEhhc2hUYWJsZTo6ZW50cmllcyk6CisgICAgICAgIChLSlM6OlByb3Bl
cnR5TWFwSGFzaFRhYmxlOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChLSlM6OlNhdmVkUHJv
cGVydGllczo6U2F2ZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKEtKUzo6U2F2ZWRQcm9wZXJ0aWVz
Ojp+U2F2ZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKEtKUzo6UHJvcGVydHlNYXA6OmNoZWNrQ29u
c2lzdGVuY3kpOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6flByb3BlcnR5TWFwKToKKyAg
ICAgICAgKEtKUzo6UHJvcGVydHlNYXA6OmNsZWFyKToKKyAgICAgICAgKEtKUzo6UHJvcGVydHlN
YXA6OmdldCk6CisgICAgICAgIChLSlM6OlByb3BlcnR5TWFwOjpnZXRMb2NhdGlvbik6CisgICAg
ICAgIChLSlM6OlByb3BlcnR5TWFwOjpwdXQpOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6
aW5zZXJ0KToKKyAgICAgICAgKEtKUzo6UHJvcGVydHlNYXA6OmNyZWF0ZVRhYmxlKToKKyAgICAg
ICAgKEtKUzo6UHJvcGVydHlNYXA6OnJlaGFzaCk6CisgICAgICAgIChLSlM6OlByb3BlcnR5TWFw
OjpyZW1vdmUpOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6bWFyayk6CisgICAgICAgIChL
SlM6OmNvbXBhcmVQcm9wZXJ0eU1hcEVudHJ5SW5kaWNlcyk6CisgICAgICAgIChLSlM6OlByb3Bl
cnR5TWFwOjpjb250YWluc0dldHRlcnNPclNldHRlcnMpOgorICAgICAgICAoS0pTOjpQcm9wZXJ0
eU1hcDo6Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoS0pTOjpQcm9wZXJ0
eU1hcDo6c2F2ZSk6CisgICAgICAgIChLSlM6OlByb3BlcnR5TWFwOjpyZXN0b3JlKToKKyAgICAg
ICAgKiBranMvcHJvcGVydHlfbWFwLmg6CisKIDIwMDctMTEtMDEgIEdlb2ZmcmV5IEdhcmVuICA8
Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lh
ay4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuY3BwCShyZXZpc2lvbiAyNzM3MykK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNSBAQAogLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJh
cmllcwotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzQsMTggKzMz
LDE5IEBACiB1c2luZyBzdGQ6Om1heDsKIHVzaW5nIFdURjo6ZG91YmxlSGFzaDsKIAotI2RlZmlu
ZSBERUJVR19QUk9QRVJUSUVTIDAKLSNkZWZpbmUgRE9fQ09OU0lTVEVOQ1lfQ0hFQ0sgMAorI2lm
bmRlZiBOREVCVUcKKyNkZWZpbmUgRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLIDAKICNk
ZWZpbmUgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUyAwCisjZWxzZQorI2RlZmluZSBET19QUk9QRVJU
WU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAorI2RlZmluZSBEVU1QX1BST1BFUlRZTUFQX1NUQVRTIDAK
KyNlbmRpZgorCiAjZGVmaW5lIFVTRV9TSU5HTEVfRU5UUlkgMQogCiAvLyAyLzI4LzIwMDYgZ2dh
cmVuOiBjb21tYW5kLWxpbmUgSlMgaUJlbmNoIHNheXMgdGhhdCBVU0VfU0lOR0xFX0VOVFJZIGlz
IGEKIC8vIDMuMiUgcGVyZm9ybWFuY2UgYm9vc3QuCiAKLSNpZiAhRE9fQ09OU0lTVEVOQ1lfQ0hF
Q0sKLSNkZWZpbmUgY2hlY2tDb25zaXN0ZW5jeSgpICgodm9pZCkwKQotI2VuZGlmCi0KIG5hbWVz
cGFjZSBLSlMgewogCiAvLyBDaG9vc2UgYSBudW1iZXIgZm9yIHRoZSBmb2xsb3dpbmcgc28gdGhh
dCBtb3N0IHByb3BlcnR5IG1hcHMgYXJlIHNtYWxsZXIsCkBAIC03NCw2MSArNzQsOTAgQEAgUHJv
cGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlcjo6flByb3BlcgogCiAjZW5kaWYKIAorc3RydWN0
IFByb3BlcnR5TWFwRW50cnkgeworICAgIFVTdHJpbmc6OlJlcCoga2V5OworICAgIEpTVmFsdWUq
IHZhbHVlOworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgdW5zaWduZWQgaW5kZXg7CisK
KyAgICBQcm9wZXJ0eU1hcEVudHJ5KFVTdHJpbmc6OlJlcCogaywgSlNWYWx1ZSogdiwgaW50IGEp
CisgICAgICAgIDoga2V5KGspLCB2YWx1ZSh2KSwgYXR0cmlidXRlcyhhKSwgaW5kZXgoMCkKKyAg
ICB7CisgICAgfQorfTsKKwogLy8gbGFzdEluZGV4VXNlZCBpcyBhbiBldmVyLWluY3JlYXNpbmcg
aW5kZXggdXNlZCB0byBpZGVudGlmeSB0aGUgb3JkZXIgaXRlbXMKLS8vIHdlcmUgaW5zZXJ0ZWQg
aW50byB0aGUgcHJvcGVydHkgbWFwLiBJdCdzIHZpdGFsIHRoYXQgZ2V0RW51bWVyYWJsZVByb3Bl
cnR5TmFtZXMKKy8vIHdlcmUgaW5zZXJ0ZWQgaW50byB0aGUgcHJvcGVydHkgbWFwLiBJdCdzIHJl
cXVpcmVkIHRoYXQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMKIC8vIHJldHVybiB0aGUgcHJv
cGVydGllcyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkIGZvciBjb21wYXRpYmlsaXR5IHdp
dGggb3RoZXIKIC8vIGJyb3dzZXJzJyBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9ucy4KLXN0cnVj
dCBQcm9wZXJ0eU1hcEhhc2hUYWJsZQotewotICAgIGludCBzaXplTWFzazsKLSAgICBpbnQgc2l6
ZTsKLSAgICBpbnQga2V5Q291bnQ7Ci0gICAgaW50IHNlbnRpbmVsQ291bnQ7Ci0gICAgaW50IGxh
c3RJbmRleFVzZWQ7Ci0gICAgUHJvcGVydHlNYXBIYXNoVGFibGVFbnRyeSBlbnRyaWVzWzFdOwor
c3RydWN0IFByb3BlcnR5TWFwSGFzaFRhYmxlIHsKKyAgICB1bnNpZ25lZCBzaXplTWFzazsKKyAg
ICB1bnNpZ25lZCBzaXplOworICAgIHVuc2lnbmVkIGtleUNvdW50OworICAgIHVuc2lnbmVkIGRl
bGV0ZWRTZW50aW5lbENvdW50OworICAgIHVuc2lnbmVkIGxhc3RJbmRleFVzZWQ7CisgICAgdW5z
aWduZWQgZW50cnlJbmRpY2llc1sxXTsKKworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJpZXMo
KQorICAgIHsKKyAgICAgICAgLy8gVGhlIGVudHJpZXMgdmVjdG9yIGNvbWVzIGFmdGVyIHRoZSBp
bmRpY2VzIHZlY3Rvci4KKyAgICAgICAgLy8gVGhlIDB0aCBpdGVtIGluIHRoZSBlbnRyaWVzIHZl
Y3RvciBpcyBub3QgcmVhbGx5IHVzZWQ7IGl0IGhhcyB0bworICAgICAgICAvLyBoYXZlIGEgMCBp
biBpdHMga2V5IHRvIGFsbG93IHRoZSBoYXNoIHRhYmxlIGxvb2t1cCB0byBoYW5kbGUgZGVsZXRl
ZAorICAgICAgICAvLyBzZW50aW5lbHMgd2l0aG91dCBhbnkgc3BlY2lhbC1jYXNlIGNvZGUsIGJ1
dCB0aGUgb3RoZXIgZmllbGRzIGFyZSB1bnVzZWQuCisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PFByb3BlcnR5TWFwRW50cnkqPigmZW50cnlJbmRpY2llc1tzaXplXSk7CisgICAgfQor
CisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBzaXplKQorICAgIHsK
KyAgICAgICAgLy8gV2UgbmV2ZXIgbGV0IGEgaGFzaCB0YWJsZSBnZXQgbW9yZSB0aGFuIGhhbGYg
ZnVsbCwKKyAgICAgICAgLy8gU28gdGhlIG51bWJlciBvZiBpbmRpY2VzIHdlIG5lZWQgaXMgdGhl
IHNpemUgb2YgdGhlIGhhc2ggdGFibGUuCisgICAgICAgIC8vIEJ1dCB0aGUgbnVtYmVyIG9mIGVu
dHJpZXMgaXMgaGFsZiB0aGF0IChwbHVzIG9uZSBmb3IgdGhlIGRlbGV0ZWQgc2VudGluZWwpLgor
ICAgICAgICByZXR1cm4gc2l6ZW9mKFByb3BlcnR5TWFwSGFzaFRhYmxlKQorICAgICAgICAgICAg
KyAoc2l6ZSAtIDEpICogc2l6ZW9mKHVuc2lnbmVkKQorICAgICAgICAgICAgKyAoMSArIHNpemUg
LyAyKSAqIHNpemVvZihQcm9wZXJ0eU1hcEVudHJ5KTsKKyAgICB9CiB9OwogCi1jbGFzcyBTYXZl
ZFByb3BlcnR5IHsKLXB1YmxpYzoKK3N0cnVjdCBTYXZlZFByb3BlcnR5IHsKICAgICBJZGVudGlm
aWVyIGtleTsKICAgICBQcm90ZWN0ZWRQdHI8SlNWYWx1ZT4gdmFsdWU7Ci0gICAgaW50IGF0dHJp
YnV0ZXM7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKIH07CiAKLVNhdmVkUHJvcGVydGllczo6
U2F2ZWRQcm9wZXJ0aWVzKCkgOiBfY291bnQoMCkgeyB9Ci1TYXZlZFByb3BlcnRpZXM6On5TYXZl
ZFByb3BlcnRpZXMoKSB7IH0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBlbXB0eUVudHJ5SW5kZXgg
PSAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlbGV0ZWRTZW50aW5lbEluZGV4ID0gMTsKIAot
Ly8gQWxnb3JpdGhtIGNvbmNlcHRzIGZyb20gQWxnb3JpdGhtcyBpbiBDKyssIFNlZGdld2ljay4K
K1NhdmVkUHJvcGVydGllczo6U2F2ZWRQcm9wZXJ0aWVzKCkKKyAgICA6IG1fY291bnQoMCkKK3sK
K30KKworU2F2ZWRQcm9wZXJ0aWVzOjp+U2F2ZWRQcm9wZXJ0aWVzKCkKK3sKK30KIAotLy8gVGhp
cyBpcyBhIG1ldGhvZCByYXRoZXIgdGhhbiBhIHZhcmlhYmxlIHRvIHdvcmsgYXJvdW5kIDxyZGFy
Oi8vcHJvYmxlbS80NDYyMDUzPgotc3RhdGljIGlubGluZSBVU3RyaW5nOjpSZXAqIGRlbGV0ZWRT
ZW50aW5lbCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VVN0cmluZzo6UmVwKj4oMHgxKTsg
fQorI2lmICFET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sKIAotLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBrZXkgaXMgbm90IG51bGwgb3IgdGhlIGRlbGV0ZWQgc2VudGluZWwsIGZhbHNlIG90
aGVyd2lzZQotc3RhdGljIGlubGluZSBib29sIGlzVmFsaWQoVVN0cmluZzo6UmVwKiBrZXkpCitp
bmxpbmUgdm9pZCBQcm9wZXJ0eU1hcDo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7Ci0gICAgcmV0dXJu
ICEhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihrZXkpICYgfjB4MSk7CiB9CiAKKyNlbmRp
ZgorCiBQcm9wZXJ0eU1hcDo6flByb3BlcnR5TWFwKCkKIHsKICAgICBpZiAoIW1fdXNpbmdUYWJs
ZSkgewogI2lmIFVTRV9TSU5HTEVfRU5UUlkKLSAgICAgICAgVVN0cmluZzo6UmVwKiBrZXkgPSBt
X3NpbmdsZUVudHJ5S2V5OwotICAgICAgICBpZiAoa2V5KQotICAgICAgICAgICAga2V5LT5kZXJl
ZigpOworICAgICAgICBpZiAobV9zaW5nbGVFbnRyeUtleSkKKyAgICAgICAgICAgIG1fc2luZ2xl
RW50cnlLZXktPmRlcmVmKCk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBpbnQgbWluaW11bUtleXNUb1Byb2Nlc3MgPSBtX3UudGFibGUtPmtleUNvdW50ICsgbV91
LnRhYmxlLT5zZW50aW5lbENvdW50OwotICAgIEVudHJ5ICplbnRyaWVzID0gbV91LnRhYmxlLT5l
bnRyaWVzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWluaW11bUtleXNUb1Byb2Nlc3M7IGkr
KykgewotICAgICAgICBVU3RyaW5nOjpSZXAgKmtleSA9IGVudHJpZXNbaV0ua2V5OwotICAgICAg
ICBpZiAoa2V5KSB7Ci0gICAgICAgICAgICBpZiAoa2V5ICE9IGRlbGV0ZWRTZW50aW5lbCgpKQot
ICAgICAgICAgICAgICAgIGtleS0+ZGVyZWYoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICArK21pbmltdW1LZXlzVG9Qcm9jZXNzOworICAgIHVuc2lnbmVkIGVudHJ5Q291bnQgPSBtX3Uu
dGFibGUtPmtleUNvdW50ICsgbV91LnRhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudDsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IGVudHJ5Q291bnQ7IGkrKykgeworICAgICAgICBpZiAo
VVN0cmluZzo6UmVwKiBrZXkgPSBtX3UudGFibGUtPmVudHJpZXMoKVtpXS5rZXkpCisgICAgICAg
ICAgICBrZXktPmRlcmVmKCk7CiAgICAgfQogICAgIGZhc3RGcmVlKG1fdS50YWJsZSk7CiB9CkBA
IC0xMzcsMzkgKzE2NiwzNCBAQCB2b2lkIFByb3BlcnR5TWFwOjpjbGVhcigpCiB7CiAgICAgaWYg
KCFtX3VzaW5nVGFibGUpIHsKICNpZiBVU0VfU0lOR0xFX0VOVFJZCi0gICAgICAgIFVTdHJpbmc6
OlJlcCoga2V5ID0gbV9zaW5nbGVFbnRyeUtleTsKLSAgICAgICAgaWYgKGtleSkgewotICAgICAg
ICAgICAga2V5LT5kZXJlZigpOworICAgICAgICBpZiAobV9zaW5nbGVFbnRyeUtleSkgeworICAg
ICAgICAgICAgbV9zaW5nbGVFbnRyeUtleS0+ZGVyZWYoKTsKICAgICAgICAgICAgIG1fc2luZ2xl
RW50cnlLZXkgPSAwOwogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGludCBzaXplID0gbV91LnRhYmxlLT5zaXplOwotICAgIEVudHJ5ICplbnRyaWVzID0g
bV91LnRhYmxlLT5lbnRyaWVzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
Ci0gICAgICAgIFVTdHJpbmc6OlJlcCAqa2V5ID0gZW50cmllc1tpXS5rZXk7Ci0gICAgICAgIGlm
IChpc1ZhbGlkKGtleSkpIHsKKyAgICB1bnNpZ25lZCBlbnRyeUNvdW50ID0gbV91LnRhYmxlLT5r
ZXlDb3VudCArIG1fdS50YWJsZS0+ZGVsZXRlZFNlbnRpbmVsQ291bnQ7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8PSBlbnRyeUNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKFVTdHJpbmc6
OlJlcCoga2V5ID0gbV91LnRhYmxlLT5lbnRyaWVzKClbaV0ua2V5KQogICAgICAgICAgICAga2V5
LT5kZXJlZigpOwotICAgICAgICAgICAgZW50cmllc1tpXS5rZXkgPSAwOwotICAgICAgICAgICAg
ZW50cmllc1tpXS52YWx1ZSA9IDA7Ci0gICAgICAgIH0KICAgICB9CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdS50YWJsZS0+c2l6ZTsgaSsrKQorICAgICAgICBtX3UudGFibGUtPmVu
dHJ5SW5kaWNpZXNbaV0gPSBlbXB0eUVudHJ5SW5kZXg7CiAgICAgbV91LnRhYmxlLT5rZXlDb3Vu
dCA9IDA7Ci0gICAgbV91LnRhYmxlLT5zZW50aW5lbENvdW50ID0gMDsKKyAgICBtX3UudGFibGUt
PmRlbGV0ZWRTZW50aW5lbENvdW50ID0gMDsKIH0KIAotSlNWYWx1ZSAqUHJvcGVydHlNYXA6Omdl
dChjb25zdCBJZGVudGlmaWVyICZuYW1lLCB1bnNpZ25lZCAmYXR0cmlidXRlcykgY29uc3QKK0pT
VmFsdWUqIFByb3BlcnR5TWFwOjpnZXQoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgdW5zaWduZWQm
IGF0dHJpYnV0ZXMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFuYW1lLmlzTnVsbCgpKTsKICAgICAK
LSAgICBVU3RyaW5nOjpSZXAgKnJlcCA9IG5hbWUuX3VzdHJpbmcucmVwKCk7CisgICAgVVN0cmlu
Zzo6UmVwKiByZXAgPSBuYW1lLl91c3RyaW5nLnJlcCgpOwogICAgIAogICAgIGlmICghbV91c2lu
Z1RhYmxlKSB7CiAjaWYgVVNFX1NJTkdMRV9FTlRSWQotICAgICAgICBVU3RyaW5nOjpSZXAqIGtl
eSA9IG1fc2luZ2xlRW50cnlLZXk7Ci0gICAgICAgIGlmIChyZXAgPT0ga2V5KSB7CisgICAgICAg
IGlmIChyZXAgPT0gbV9zaW5nbGVFbnRyeUtleSkgewogICAgICAgICAgICAgYXR0cmlidXRlcyA9
IG1fc2luZ2xlRW50cnlBdHRyaWJ1dGVzOwogICAgICAgICAgICAgcmV0dXJuIG1fdS5zaW5nbGVF
bnRyeVZhbHVlOwogICAgICAgICB9CkBAIC0xNzcsMTYzICsyMDEsMTU1IEBAIEpTVmFsdWUgKlBy
b3BlcnR5TWFwOjpnZXQoY29uc3QgSWRlbnRpZmkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIAotICAgIHVuc2lnbmVkIGggPSByZXAtPmNvbXB1dGVkSGFzaCgpOwotICAgIGludCBzaXpl
TWFzayA9IG1fdS50YWJsZS0+c2l6ZU1hc2s7Ci0gICAgRW50cnkgKmVudHJpZXMgPSBtX3UudGFi
bGUtPmVudHJpZXM7Ci0gICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7Ci0gICAgaW50IGsgPSAwOwor
ICAgIHVuc2lnbmVkIGkgPSByZXAtPmNvbXB1dGVkSGFzaCgpOworCiAjaWYgRFVNUF9QUk9QRVJU
WU1BUF9TVEFUUwogICAgICsrbnVtUHJvYmVzOwotICAgIG51bUNvbGxpc2lvbnMgKz0gZW50cmll
c1tpXS5rZXkgJiYgZW50cmllc1tpXS5rZXkgIT0gcmVwOwogI2VuZGlmCi0gICAgd2hpbGUgKDEp
IHsKLSAgICAgICAgVVN0cmluZzo6UmVwKiBrZXkgPSBlbnRyaWVzW2ldLmtleTsKIAotICAgICAg
ICBpZiAoIWtleSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIGVudHJ5SW5k
ZXggPSBtX3UudGFibGUtPmVudHJ5SW5kaWNpZXNbaSAmIG1fdS50YWJsZS0+c2l6ZU1hc2tdOwor
ICAgIGlmIChlbnRyeUluZGV4ID09IGVtcHR5RW50cnlJbmRleCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpZiAocmVwID09IG1fdS50YWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5r
ZXkpIHsKKyAgICAgICAgYXR0cmlidXRlcyA9IG1fdS50YWJsZS0+ZW50cmllcygpW2VudHJ5SW5k
ZXggLSAxXS5hdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gbV91LnRhYmxlLT5lbnRyaWVzKClb
ZW50cnlJbmRleCAtIDFdLnZhbHVlOworICAgIH0KKworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RB
VFMKKyAgICArK251bUNvbGxpc2lvbnM7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIGsgPSAxIHwg
ZG91YmxlSGFzaChyZXAtPmNvbXB1dGVkSGFzaCgpKTsKKworICAgIHdoaWxlICgxKSB7CisgICAg
ICAgIGkgKz0gazsKIAotICAgICAgICBpZiAocmVwID09IGtleSkgewotICAgICAgICAgICAgYXR0
cmlidXRlcyA9IGVudHJpZXNbaV0uYXR0cmlidXRlczsKLSAgICAgICAgICAgIHJldHVybiBlbnRy
aWVzW2ldLnZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoayA9PSAwKQot
ICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOwotICAgICAgICBpID0gKGkgKyBrKSAm
IHNpemVNYXNrOwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAgICAgICAgKytudW1SZWhh
c2hlczsKICNlbmRpZgorCisgICAgICAgIGVudHJ5SW5kZXggPSBtX3UudGFibGUtPmVudHJ5SW5k
aWNpZXNbaSAmIG1fdS50YWJsZS0+c2l6ZU1hc2tdOworICAgICAgICBpZiAoZW50cnlJbmRleCA9
PSBlbXB0eUVudHJ5SW5kZXgpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAo
cmVwID09IG1fdS50YWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5rZXkpIHsKKyAgICAg
ICAgICAgIGF0dHJpYnV0ZXMgPSBtX3UudGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0u
YXR0cmlidXRlczsKKyAgICAgICAgICAgIHJldHVybiBtX3UudGFibGUtPmVudHJpZXMoKVtlbnRy
eUluZGV4IC0gMV0udmFsdWU7CisgICAgICAgIH0KICAgICB9CiB9CiAKLUpTVmFsdWUgKlByb3Bl
cnR5TWFwOjpnZXQoY29uc3QgSWRlbnRpZmllciAmbmFtZSkgY29uc3QKK0pTVmFsdWUqIFByb3Bl
cnR5TWFwOjpnZXQoY29uc3QgSWRlbnRpZmllciYgbmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQo
IW5hbWUuaXNOdWxsKCkpOwogICAgIAotICAgIFVTdHJpbmc6OlJlcCAqcmVwID0gbmFtZS5fdXN0
cmluZy5yZXAoKTsKLQorICAgIFVTdHJpbmc6OlJlcCogcmVwID0gbmFtZS5fdXN0cmluZy5yZXAo
KTsKKyAgICAKICAgICBpZiAoIW1fdXNpbmdUYWJsZSkgewogI2lmIFVTRV9TSU5HTEVfRU5UUlkK
LSAgICAgICAgVVN0cmluZzo6UmVwICprZXkgPSBtX3NpbmdsZUVudHJ5S2V5OwotICAgICAgICBp
ZiAocmVwID09IGtleSkKKyAgICAgICAgaWYgKHJlcCA9PSBtX3NpbmdsZUVudHJ5S2V5KQogICAg
ICAgICAgICAgcmV0dXJuIG1fdS5zaW5nbGVFbnRyeVZhbHVlOwogI2VuZGlmCiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBoID0gcmVwLT5jb21wdXRlZEhhc2go
KTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBtX3UudGFibGUtPnNpemVNYXNrOwotICAgIEVudHJ5ICpl
bnRyaWVzID0gbV91LnRhYmxlLT5lbnRyaWVzOwotICAgIGludCBpID0gaCAmIHNpemVNYXNrOwot
ICAgIGludCBrID0gMDsKKyAgICB1bnNpZ25lZCBpID0gcmVwLT5jb21wdXRlZEhhc2goKTsKKwog
I2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAgICArK251bVByb2JlczsKLSAgICBudW1Db2xs
aXNpb25zICs9IGVudHJpZXNbaV0ua2V5ICYmIGVudHJpZXNbaV0ua2V5ICE9IHJlcDsKICNlbmRp
ZgotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIFVTdHJpbmc6OlJlcCoga2V5ID0gZW50cmllc1tp
XS5rZXk7CiAKLSAgICAgICAgaWYgKCFrZXkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICB1
bnNpZ25lZCBlbnRyeUluZGV4ID0gbV91LnRhYmxlLT5lbnRyeUluZGljaWVzW2kgJiBtX3UudGFi
bGUtPnNpemVNYXNrXTsKKyAgICBpZiAoZW50cnlJbmRleCA9PSBlbXB0eUVudHJ5SW5kZXgpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHJlcCA9PSBtX3UudGFibGUtPmVudHJpZXMoKVtl
bnRyeUluZGV4IC0gMV0ua2V5KQorICAgICAgICByZXR1cm4gbV91LnRhYmxlLT5lbnRyaWVzKClb
ZW50cnlJbmRleCAtIDFdLnZhbHVlOworCisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUworICAg
ICsrbnVtQ29sbGlzaW9uczsKKyNlbmRpZgorCisgICAgdW5zaWduZWQgayA9IDEgfCBkb3VibGVI
YXNoKHJlcC0+Y29tcHV0ZWRIYXNoKCkpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaSAr
PSBrOwogCi0gICAgICAgIGlmIChyZXAgPT0ga2V5KQotICAgICAgICAgICAgcmV0dXJuIGVudHJp
ZXNbaV0udmFsdWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAg
ayA9IDEgfCBkb3VibGVIYXNoKGgpOwotICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwog
I2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAgICAgICAgKytudW1SZWhhc2hlczsKICNlbmRp
ZgorCisgICAgICAgIGVudHJ5SW5kZXggPSBtX3UudGFibGUtPmVudHJ5SW5kaWNpZXNbaSAmIG1f
dS50YWJsZS0+c2l6ZU1hc2tdOworICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBlbXB0eUVudHJ5
SW5kZXgpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAocmVwID09IG1fdS50
YWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5rZXkpCisgICAgICAgICAgICByZXR1cm4g
bV91LnRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLnZhbHVlOwogICAgIH0KIH0KIAot
SlNWYWx1ZSAqKlByb3BlcnR5TWFwOjpnZXRMb2NhdGlvbihjb25zdCBJZGVudGlmaWVyICZuYW1l
KQorSlNWYWx1ZSoqIFByb3BlcnR5TWFwOjpnZXRMb2NhdGlvbihjb25zdCBJZGVudGlmaWVyJiBu
YW1lKQogewogICAgIEFTU0VSVCghbmFtZS5pc051bGwoKSk7CiAgICAgCi0gICAgVVN0cmluZzo6
UmVwICpyZXAgPSBuYW1lLl91c3RyaW5nLnJlcCgpOwotCisgICAgVVN0cmluZzo6UmVwKiByZXAg
PSBuYW1lLl91c3RyaW5nLnJlcCgpOworICAgIAogICAgIGlmICghbV91c2luZ1RhYmxlKSB7CiAj
aWYgVVNFX1NJTkdMRV9FTlRSWQotICAgICAgICBVU3RyaW5nOjpSZXAgKmtleSA9IG1fc2luZ2xl
RW50cnlLZXk7Ci0gICAgICAgIGlmIChyZXAgPT0ga2V5KQorICAgICAgICBpZiAocmVwID09IG1f
c2luZ2xlRW50cnlLZXkpCiAgICAgICAgICAgICByZXR1cm4gJm1fdS5zaW5nbGVFbnRyeVZhbHVl
OwogI2VuZGlmCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBo
ID0gcmVwLT5jb21wdXRlZEhhc2goKTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBtX3UudGFibGUtPnNp
emVNYXNrOwotICAgIEVudHJ5ICplbnRyaWVzID0gbV91LnRhYmxlLT5lbnRyaWVzOwotICAgIGlu
dCBpID0gaCAmIHNpemVNYXNrOwotICAgIGludCBrID0gMDsKKyAgICB1bnNpZ25lZCBpID0gcmVw
LT5jb21wdXRlZEhhc2goKTsKKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAgICArK251
bVByb2JlczsKLSAgICBudW1Db2xsaXNpb25zICs9IGVudHJpZXNbaV0ua2V5ICYmIGVudHJpZXNb
aV0ua2V5ICE9IHJlcDsKICNlbmRpZgotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIFVTdHJpbmc6
OlJlcCoga2V5ID0gZW50cmllc1tpXS5rZXk7CiAKLSAgICAgICAgaWYgKCFrZXkpCi0gICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV91LnRhYmxlLT5lbnRy
eUluZGljaWVzW2kgJiBtX3UudGFibGUtPnNpemVNYXNrXTsKKyAgICBpZiAoZW50cnlJbmRleCA9
PSBlbXB0eUVudHJ5SW5kZXgpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHJlcCA9PSBt
X3UudGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ua2V5KQorICAgICAgICByZXR1cm4g
Jm1fdS50YWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS52YWx1ZTsKKworI2lmIERVTVBf
UFJPUEVSVFlNQVBfU1RBVFMKKyAgICArK251bUNvbGxpc2lvbnM7CisjZW5kaWYKKworICAgIHVu
c2lnbmVkIGsgPSAxIHwgZG91YmxlSGFzaChyZXAtPmNvbXB1dGVkSGFzaCgpKTsKKworICAgIHdo
aWxlICgxKSB7CisgICAgICAgIGkgKz0gazsKIAotICAgICAgICBpZiAocmVwID09IGtleSkKLSAg
ICAgICAgICAgIHJldHVybiAmZW50cmllc1tpXS52YWx1ZTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChrID09IDApCi0gICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7CiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICAg
ICArK251bVJlaGFzaGVzOwogI2VuZGlmCi0gICAgfQotfQogCi0jaWYgREVCVUdfUFJPUEVSVElF
Uwotc3RhdGljIHZvaWQgcHJpbnRBdHRyaWJ1dGVzKGludCBhdHRyaWJ1dGVzKQotewotICAgIGlm
IChhdHRyaWJ1dGVzID09IDApCi0gICAgICAgIHByaW50ZigiTm9uZSIpOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICAgICAgcHJpbnRmKCJS
ZWFkT25seSAiKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RW51bSkKLSAgICAgICAg
ICAgIHByaW50ZigiRG9udEVudW0gIik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udERl
bGV0ZSkKLSAgICAgICAgICAgIHByaW50ZigiRG9udERlbGV0ZSAiKTsKLSAgICAgICAgaWYgKGF0
dHJpYnV0ZXMgJiBJbnRlcm5hbCkKLSAgICAgICAgICAgIHByaW50ZigiSW50ZXJuYWwgIik7Ci0g
ICAgICAgIGlmIChhdHRyaWJ1dGVzICYgRnVuY3Rpb24pCi0gICAgICAgICAgICBwcmludGYoIkZ1
bmN0aW9uICIpOworICAgICAgICBlbnRyeUluZGV4ID0gbV91LnRhYmxlLT5lbnRyeUluZGljaWVz
W2kgJiBtX3UudGFibGUtPnNpemVNYXNrXTsKKyAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZW1w
dHlFbnRyeUluZGV4KQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKHJlcCA9
PSBtX3UudGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ua2V5KQorICAgICAgICAgICAg
cmV0dXJuICZtX3UudGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0udmFsdWU7CiAgICAg
fQogfQotI2VuZGlmCiAKLXZvaWQgUHJvcGVydHlNYXA6OnB1dChjb25zdCBJZGVudGlmaWVyICZu
YW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHJpYnV0ZXMsIGJvb2wgcm9DaGVjaykKK3ZvaWQg
UHJvcGVydHlNYXA6OnB1dChjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1ZhbHVlKiB2YWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBjaGVja1JlYWRPbmx5KQogewogICAgIEFTU0VSVCgh
bmFtZS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKHZhbHVlICE9IDApOworICAgIEFTU0VSVCh2YWx1
ZSk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgVVN0cmluZzo6UmVwICpy
ZXAgPSBuYW1lLl91c3RyaW5nLnJlcCgpOwotICAgIAotI2lmIERFQlVHX1BST1BFUlRJRVMKLSAg
ICBwcmludGYoImFkZGluZyBwcm9wZXJ0eSAlcywgYXR0cmlidXRlcyA9IDB4JTA4eCAoIiwgbmFt
ZS5hc2NpaSgpLCBhdHRyaWJ1dGVzKTsKLSAgICBwcmludEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7
Ci0gICAgcHJpbnRmKCIpXG4iKTsKLSNlbmRpZgorICAgIFVTdHJpbmc6OlJlcCogcmVwID0gbmFt
ZS5fdXN0cmluZy5yZXAoKTsKICAgICAKICNpZiBVU0VfU0lOR0xFX0VOVFJZCiAgICAgaWYgKCFt
X3VzaW5nVGFibGUpIHsKLSAgICAgICAgVVN0cmluZzo6UmVwICprZXkgPSBtX3NpbmdsZUVudHJ5
S2V5OwotICAgICAgICBpZiAoa2V5KSB7Ci0gICAgICAgICAgICBpZiAocmVwID09IGtleSAmJiAh
KHJvQ2hlY2sgJiYgKG1fc2luZ2xlRW50cnlBdHRyaWJ1dGVzICYgUmVhZE9ubHkpKSkgewotICAg
ICAgICAgICAgICAgIG1fdS5zaW5nbGVFbnRyeVZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAo
IW1fc2luZ2xlRW50cnlLZXkpIHsKICAgICAgICAgICAgIHJlcC0+cmVmKCk7CiAgICAgICAgICAg
ICBtX3NpbmdsZUVudHJ5S2V5ID0gcmVwOwogICAgICAgICAgICAgbV91LnNpbmdsZUVudHJ5VmFs
dWUgPSB2YWx1ZTsKQEAgLTM0MSw4OSArMzU3LDEyNCBAQCB2b2lkIFByb3BlcnR5TWFwOjpwdXQo
Y29uc3QgSWRlbnRpZmllciAmCiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHJlcCA9PSBtX3NpbmdsZUVu
dHJ5S2V5ICYmICEoY2hlY2tSZWFkT25seSAmJiAobV9zaW5nbGVFbnRyeUF0dHJpYnV0ZXMgJiBS
ZWFkT25seSkpKSB7CisgICAgICAgICAgICBtX3Uuc2luZ2xlRW50cnlWYWx1ZSA9IHZhbHVlOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAo
IW1fdXNpbmdUYWJsZSB8fCBtX3UudGFibGUtPmtleUNvdW50ICogMiA+PSBtX3UudGFibGUtPnNp
emUpCisgICAgaWYgKCFtX3VzaW5nVGFibGUgfHwgKG1fdS50YWJsZS0+a2V5Q291bnQgKyBtX3Uu
dGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50KSAqIDIgPj0gbV91LnRhYmxlLT5zaXplKQogICAg
ICAgICBleHBhbmQoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBoID0gcmVwLT5jb21wdXRlZEhhc2go
KTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBtX3UudGFibGUtPnNpemVNYXNrOwotICAgIEVudHJ5ICpl
bnRyaWVzID0gbV91LnRhYmxlLT5lbnRyaWVzOwotICAgIGludCBpID0gaCAmIHNpemVNYXNrOwot
ICAgIGludCBrID0gMDsKKworICAgIC8vIEZJWE1FOiBDb25zaWRlciBhIGZhc3QgY2FzZSBmb3Ig
dGFibGVzIHdpdGggbm8gZGVsZXRlZCBzZW50aW5lbHMuCisKKyAgICB1bnNpZ25lZCBpID0gcmVw
LT5jb21wdXRlZEhhc2goKTsKKyAgICB1bnNpZ25lZCBrID0gMDsKICAgICBib29sIGZvdW5kRGVs
ZXRlZEVsZW1lbnQgPSBmYWxzZTsKLSAgICBpbnQgZGVsZXRlZEVsZW1lbnRJbmRleCA9IDA7ICAg
IC8qIGluaXRpYWxpemUgdG8gbWFrZSB0aGUgY29tcGlsZXIgaGFwcHkgKi8KKyAgICB1bnNpZ25l
ZCBkZWxldGVkRWxlbWVudEluZGV4ID0gMDsgLy8gaW5pdGlhbGl6ZSB0byBtYWtlIHRoZSBjb21w
aWxlciBoYXBweQorCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICsrbnVtUHJvYmVz
OwotICAgIG51bUNvbGxpc2lvbnMgKz0gZW50cmllc1tpXS5rZXkgJiYgZW50cmllc1tpXS5rZXkg
IT0gcmVwOwogI2VuZGlmCi0gICAgd2hpbGUgKFVTdHJpbmc6OlJlcCAqa2V5ID0gZW50cmllc1tp
XS5rZXkpIHsKLSAgICAgICAgaWYgKHJlcCA9PSBrZXkpIHsKLSAgICAgICAgICAgIGlmIChyb0No
ZWNrICYmIChtX3UudGFibGUtPmVudHJpZXNbaV0uYXR0cmlidXRlcyAmIFJlYWRPbmx5KSkgCisK
KyAgICB3aGlsZSAoMSkgeworICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV91LnRhYmxl
LT5lbnRyeUluZGljaWVzW2kgJiBtX3UudGFibGUtPnNpemVNYXNrXTsKKyAgICAgICAgaWYgKGVu
dHJ5SW5kZXggPT0gZW1wdHlFbnRyeUluZGV4KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgaWYgKG1fdS50YWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5rZXkgPT0gcmVwKSB7
CisgICAgICAgICAgICBpZiAoY2hlY2tSZWFkT25seSAmJiAobV91LnRhYmxlLT5lbnRyaWVzKClb
ZW50cnlJbmRleCAtIDFdLmF0dHJpYnV0ZXMgJiBSZWFkT25seSkpIAogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIC8vIFB1dCBhIG5ldyB2YWx1ZSBpbiBhbiBleGlzdGluZyBo
YXNoIHRhYmxlIGVudHJ5LgotICAgICAgICAgICAgZW50cmllc1tpXS52YWx1ZSA9IHZhbHVlOwor
ICAgICAgICAgICAgbV91LnRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLnZhbHVlID0g
dmFsdWU7CiAgICAgICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBpbnRlbnRpb25hbGx5IG5vdCB1
cGRhdGVkLgogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGVudHJ5SW5k
ZXggPT0gZGVsZXRlZFNlbnRpbmVsSW5kZXgpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGZpbmQg
YSBkZWxldGVkLWVsZW1lbnQgc2VudGluZWwsIHJlbWVtYmVyIGl0IGZvciB1c2UgbGF0ZXIuCisg
ICAgICAgICAgICBpZiAoIWZvdW5kRGVsZXRlZEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBm
b3VuZERlbGV0ZWRFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWxldGVkRWxlbWVu
dEluZGV4ID0gaTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAvLyBJZiB3ZSBm
aW5kIHRoZSBkZWxldGVkLWVsZW1lbnQgc2VudGluZWwsIHJlbWVtYmVyIGl0IGZvciB1c2UgbGF0
ZXIuCi0gICAgICAgIGlmIChrZXkgPT0gZGVsZXRlZFNlbnRpbmVsKCkgJiYgIWZvdW5kRGVsZXRl
ZEVsZW1lbnQpIHsKLSAgICAgICAgICAgIGZvdW5kRGVsZXRlZEVsZW1lbnQgPSB0cnVlOwotICAg
ICAgICAgICAgZGVsZXRlZEVsZW1lbnRJbmRleCA9IGk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGsgPT0gMCkKLSAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKLSAgICAgICAgaSA9
IChpICsgaykgJiBzaXplTWFzazsKKworICAgICAgICBpZiAoayA9PSAwKSB7CisgICAgICAgICAg
ICBrID0gMSB8IGRvdWJsZUhhc2gocmVwLT5jb21wdXRlZEhhc2goKSk7CisjaWYgRFVNUF9QUk9Q
RVJUWU1BUF9TVEFUUworICAgICAgICAgICAgKytudW1Db2xsaXNpb25zOworI2VuZGlmCisgICAg
ICAgIH0KKworICAgICAgICBpICs9IGs7CisKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAg
ICAgICAgICsrbnVtUmVoYXNoZXM7CiAjZW5kaWYKICAgICB9CiAKLSAgICAvLyBVc2UgZWl0aGVy
IHRoZSBkZWxldGVkIGVsZW1lbnQgb3IgdGhlIDAgYXQgdGhlIGVuZCBvZiB0aGUgY2hhaW4uCi0g
ICAgaWYgKGZvdW5kRGVsZXRlZEVsZW1lbnQpIHsKLSAgICAgICAgaSA9IGRlbGV0ZWRFbGVtZW50
SW5kZXg7Ci0gICAgICAgIC0tbV91LnRhYmxlLT5zZW50aW5lbENvdW50OworICAgIC8vIEZpZ3Vy
ZSBvdXQgd2hpY2ggZW50cnkgdG8gdXNlLgorICAgIHVuc2lnbmVkIGVudHJ5SW5kZXg7CisgICAg
aWYgKCFtX3UudGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50KQorICAgICAgICBlbnRyeUluZGV4
ID0gbV91LnRhYmxlLT5rZXlDb3VudCArIDI7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChmb3Vu
ZERlbGV0ZWRFbGVtZW50KSB7CisgICAgICAgICAgICBpID0gZGVsZXRlZEVsZW1lbnRJbmRleDsK
KyAgICAgICAgICAgIC0tbV91LnRhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudDsKKyAgICAgICAg
fQorICAgICAgICBmb3IgKGVudHJ5SW5kZXggPSBtX3UudGFibGUtPmtleUNvdW50ICsgbV91LnRh
YmxlLT5kZWxldGVkU2VudGluZWxDb3VudCArIDI7CisgICAgICAgICAgICAgICAgbV91LnRhYmxl
LT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmtleTsgLS1lbnRyeUluZGV4KQorICAgICAgICAg
ICAgOwogICAgIH0KIAorCisgICAgLy8gQ3JlYXRlIGEgbmV3IGhhc2ggdGFibGUgZW50cnkuCisg
ICAgbV91LnRhYmxlLT5lbnRyeUluZGljaWVzW2kgJiBtX3UudGFibGUtPnNpemVNYXNrXSA9IGVu
dHJ5SW5kZXg7CisKICAgICAvLyBDcmVhdGUgYSBuZXcgaGFzaCB0YWJsZSBlbnRyeS4KICAgICBy
ZXAtPnJlZigpOwotICAgIGVudHJpZXNbaV0ua2V5ID0gcmVwOwotICAgIGVudHJpZXNbaV0udmFs
dWUgPSB2YWx1ZTsKLSAgICBlbnRyaWVzW2ldLmF0dHJpYnV0ZXMgPSBzdGF0aWNfY2FzdDxzaG9y
dD4oYXR0cmlidXRlcyk7Ci0gICAgZW50cmllc1tpXS5pbmRleCA9ICsrbV91LnRhYmxlLT5sYXN0
SW5kZXhVc2VkOworICAgIG1fdS50YWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5rZXkg
PSByZXA7CisgICAgbV91LnRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLnZhbHVlID0g
dmFsdWU7CisgICAgbV91LnRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmF0dHJpYnV0
ZXMgPSBhdHRyaWJ1dGVzOworICAgIG1fdS50YWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAx
XS5pbmRleCA9ICsrbV91LnRhYmxlLT5sYXN0SW5kZXhVc2VkOwogICAgICsrbV91LnRhYmxlLT5r
ZXlDb3VudDsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAotdm9pZCBQcm9wZXJ0eU1h
cDo6aW5zZXJ0KFVTdHJpbmc6OlJlcCAqa2V5LCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHJpYnV0
ZXMsIGludCBpbmRleCkKK3ZvaWQgUHJvcGVydHlNYXA6Omluc2VydChjb25zdCBFbnRyeSYgZW50
cnkpCiB7CiAgICAgQVNTRVJUKG1fdS50YWJsZSk7CiAKLSAgICB1bnNpZ25lZCBoID0ga2V5LT5j
b21wdXRlZEhhc2goKTsKLSAgICBpbnQgc2l6ZU1hc2sgPSBtX3UudGFibGUtPnNpemVNYXNrOwot
ICAgIEVudHJ5ICplbnRyaWVzID0gbV91LnRhYmxlLT5lbnRyaWVzOwotICAgIGludCBpID0gaCAm
IHNpemVNYXNrOwotICAgIGludCBrID0gMDsKKyAgICB1bnNpZ25lZCBpID0gZW50cnkua2V5LT5j
b21wdXRlZEhhc2goKTsKKyAgICB1bnNpZ25lZCBrID0gMDsKKwogI2lmIERVTVBfUFJPUEVSVFlN
QVBfU1RBVFMKICAgICArK251bVByb2JlczsKLSAgICBudW1Db2xsaXNpb25zICs9IGVudHJpZXNb
aV0ua2V5ICYmIGVudHJpZXNbaV0ua2V5ICE9IGtleTsKICNlbmRpZgotICAgIHdoaWxlIChlbnRy
aWVzW2ldLmtleSkgewotICAgICAgICBBU1NFUlQoZW50cmllc1tpXS5rZXkgIT0gZGVsZXRlZFNl
bnRpbmVsKCkpOwotICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAgayA9IDEgfCBkb3Vi
bGVIYXNoKGgpOwotICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworCisgICAgd2hpbGUg
KDEpIHsKKyAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleCA9IG1fdS50YWJsZS0+ZW50cnlJbmRp
Y2llc1tpICYgbV91LnRhYmxlLT5zaXplTWFza107CisgICAgICAgIGlmIChlbnRyeUluZGV4ID09
IGVtcHR5RW50cnlJbmRleCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChrID09
IDApIHsKKyAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChlbnRyeS5rZXktPmNvbXB1dGVk
SGFzaCgpKTsKKyNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCisgICAgICAgICAgICArK251bUNv
bGxpc2lvbnM7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGkgKz0gazsKKwogI2lmIERV
TVBfUFJPUEVSVFlNQVBfU1RBVFMKICAgICAgICAgKytudW1SZWhhc2hlczsKICNlbmRpZgogICAg
IH0KLSAgICAKLSAgICBlbnRyaWVzW2ldLmtleSA9IGtleTsKLSAgICBlbnRyaWVzW2ldLnZhbHVl
ID0gdmFsdWU7Ci0gICAgZW50cmllc1tpXS5hdHRyaWJ1dGVzID0gc3RhdGljX2Nhc3Q8c2hvcnQ+
KGF0dHJpYnV0ZXMpOwotICAgIGVudHJpZXNbaV0uaW5kZXggPSBpbmRleDsKKworICAgIHVuc2ln
bmVkIGVudHJ5SW5kZXggPSBtX3UudGFibGUtPmtleUNvdW50ICsgMjsKKyAgICBtX3UudGFibGUt
PmVudHJ5SW5kaWNpZXNbaSAmIG1fdS50YWJsZS0+c2l6ZU1hc2tdID0gZW50cnlJbmRleDsKKyAg
ICBtX3UudGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0gPSBlbnRyeTsKKyAgICArK21f
dS50YWJsZS0+a2V5Q291bnQ7CiB9CiAKIHZvaWQgUHJvcGVydHlNYXA6OmV4cGFuZCgpCkBAIC00
NDQsNyArNDk1LDcgQEAgdm9pZCBQcm9wZXJ0eU1hcDo6cmVoYXNoKCkKIAogdm9pZCBQcm9wZXJ0
eU1hcDo6Y3JlYXRlVGFibGUoKQogewotICAgIGNvbnN0IGludCBuZXdUYWJsZVNpemUgPSAxNjsK
KyAgICBjb25zdCB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSAxNjsKIAogICAgIEFTU0VSVCghbV91
c2luZ1RhYmxlKTsKIApAQCAtNDU0LDI0ICs1MDUsMjIgQEAgdm9pZCBQcm9wZXJ0eU1hcDo6Y3Jl
YXRlVGFibGUoKQogICAgIEpTVmFsdWUqIG9sZFNpbmdsZUVudHJ5VmFsdWUgPSBtX3Uuc2luZ2xl
RW50cnlWYWx1ZTsKICNlbmRpZgogCi0gICAgbV91LnRhYmxlID0gKFRhYmxlICopZmFzdENhbGxv
YygxLCBzaXplb2YoVGFibGUpICsgKG5ld1RhYmxlU2l6ZSAtIDEpICogc2l6ZW9mKEVudHJ5KSk7
CisgICAgbV91LnRhYmxlID0gc3RhdGljX2Nhc3Q8VGFibGUqPihmYXN0Q2FsbG9jKDEsIFRhYmxl
OjphbGxvY2F0aW9uU2l6ZShuZXdUYWJsZVNpemUpKSk7CiAgICAgbV91LnRhYmxlLT5zaXplID0g
bmV3VGFibGVTaXplOwogICAgIG1fdS50YWJsZS0+c2l6ZU1hc2sgPSBuZXdUYWJsZVNpemUgLSAx
OwogICAgIG1fdXNpbmdUYWJsZSA9IHRydWU7CiAKICNpZiBVU0VfU0lOR0xFX0VOVFJZCi0gICAg
VVN0cmluZzo6UmVwKiBrZXkgPSBtX3NpbmdsZUVudHJ5S2V5OwotICAgIGlmIChrZXkpIHsKLSAg
ICAgICAgaW5zZXJ0KGtleSwgb2xkU2luZ2xlRW50cnlWYWx1ZSwgbV9zaW5nbGVFbnRyeUF0dHJp
YnV0ZXMsIDApOworICAgIGlmIChtX3NpbmdsZUVudHJ5S2V5KSB7CisgICAgICAgIGluc2VydChF
bnRyeShtX3NpbmdsZUVudHJ5S2V5LCBvbGRTaW5nbGVFbnRyeVZhbHVlLCBtX3NpbmdsZUVudHJ5
QXR0cmlidXRlcykpOwogICAgICAgICBtX3NpbmdsZUVudHJ5S2V5ID0gMDsKLSAgICAgICAgbV91
LnRhYmxlLT5rZXlDb3VudCA9IDE7CiAgICAgfQogI2VuZGlmCiAKICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CiB9CiAKLXZvaWQgUHJvcGVydHlNYXA6OnJlaGFzaChpbnQgbmV3VGFibGVTaXplKQor
dm9pZCBQcm9wZXJ0eU1hcDo6cmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSkKIHsKICAgICBB
U1NFUlQoIW1fc2luZ2xlRW50cnlLZXkpOwogICAgIEFTU0VSVChtX3UudGFibGUpOwpAQCAtNDgw
LDIyICs1MjksMTcgQEAgdm9pZCBQcm9wZXJ0eU1hcDo6cmVoYXNoKGludCBuZXdUYWJsZVNpegog
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAgIFRhYmxlKiBvbGRUYWJsZSA9IG1fdS50YWJs
ZTsKLSAgICBpbnQgb2xkVGFibGVTaXplID0gb2xkVGFibGUtPnNpemU7Ci0gICAgaW50IG9sZFRh
YmxlS2V5Q291bnQgPSBvbGRUYWJsZS0+a2V5Q291bnQ7CiAgICAgCi0gICAgbV91LnRhYmxlID0g
KFRhYmxlICopZmFzdENhbGxvYygxLCBzaXplb2YoVGFibGUpICsgKG5ld1RhYmxlU2l6ZSAtIDEp
ICogc2l6ZW9mKEVudHJ5KSk7CisgICAgbV91LnRhYmxlID0gc3RhdGljX2Nhc3Q8VGFibGUqPihm
YXN0Q2FsbG9jKDEsIFRhYmxlOjphbGxvY2F0aW9uU2l6ZShuZXdUYWJsZVNpemUpKSk7CiAgICAg
bV91LnRhYmxlLT5zaXplID0gbmV3VGFibGVTaXplOwogICAgIG1fdS50YWJsZS0+c2l6ZU1hc2sg
PSBuZXdUYWJsZVNpemUgLSAxOwotICAgIG1fdS50YWJsZS0+a2V5Q291bnQgPSBvbGRUYWJsZUtl
eUNvdW50OwotICAgIAotICAgIGludCBsYXN0SW5kZXhVc2VkID0gMDsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSAhPSBvbGRUYWJsZVNpemU7ICsraSkgewotICAgICAgICBFbnRyeSAmZW50cnkgPSBv
bGRUYWJsZS0+ZW50cmllc1tpXTsKLSAgICAgICAgVVN0cmluZzo6UmVwICprZXkgPSBlbnRyeS5r
ZXk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKGtleSkpIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9
IGVudHJ5LmluZGV4OwotICAgICAgICAgICAgbGFzdEluZGV4VXNlZCA9IG1heChpbmRleCwgbGFz
dEluZGV4VXNlZCk7Ci0gICAgICAgICAgICBpbnNlcnQoa2V5LCBlbnRyeS52YWx1ZSwgZW50cnku
YXR0cmlidXRlcywgaW5kZXgpOworCisgICAgdW5zaWduZWQgbGFzdEluZGV4VXNlZCA9IDA7Cisg
ICAgdW5zaWduZWQgZW50cnlDb3VudCA9IG9sZFRhYmxlLT5rZXlDb3VudCArIG9sZFRhYmxlLT5k
ZWxldGVkU2VudGluZWxDb3VudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IGVudHJ5
Q291bnQ7ICsraSkgeworICAgICAgICBpZiAob2xkVGFibGUtPmVudHJpZXMoKVtpXS5rZXkpIHsK
KyAgICAgICAgICAgIGxhc3RJbmRleFVzZWQgPSBtYXgob2xkVGFibGUtPmVudHJpZXMoKVtpXS5p
bmRleCwgbGFzdEluZGV4VXNlZCk7CisgICAgICAgICAgICBpbnNlcnQob2xkVGFibGUtPmVudHJp
ZXMoKVtpXSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgbV91LnRhYmxlLT5sYXN0SW5kZXhVc2Vk
ID0gbGFzdEluZGV4VXNlZDsKQEAgLTUwNSwyMSArNTQ5LDE4IEBAIHZvaWQgUHJvcGVydHlNYXA6
OnJlaGFzaChpbnQgbmV3VGFibGVTaXoKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKLXZv
aWQgUHJvcGVydHlNYXA6OnJlbW92ZShjb25zdCBJZGVudGlmaWVyICZuYW1lKQordm9pZCBQcm9w
ZXJ0eU1hcDo6cmVtb3ZlKGNvbnN0IElkZW50aWZpZXImIG5hbWUpCiB7CiAgICAgQVNTRVJUKCFu
YW1lLmlzTnVsbCgpKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBVU3Ry
aW5nOjpSZXAgKnJlcCA9IG5hbWUuX3VzdHJpbmcucmVwKCk7Ci0KLSAgICBVU3RyaW5nOjpSZXAg
KmtleTsKKyAgICBVU3RyaW5nOjpSZXAqIHJlcCA9IG5hbWUuX3VzdHJpbmcucmVwKCk7CiAKICAg
ICBpZiAoIW1fdXNpbmdUYWJsZSkgewogI2lmIFVTRV9TSU5HTEVfRU5UUlkKLSAgICAgICAga2V5
ID0gbV9zaW5nbGVFbnRyeUtleTsKLSAgICAgICAgaWYgKHJlcCA9PSBrZXkpIHsKLSAgICAgICAg
ICAgIGtleS0+ZGVyZWYoKTsKKyAgICAgICAgaWYgKHJlcCA9PSBtX3NpbmdsZUVudHJ5S2V5KSB7
CisgICAgICAgICAgICBtX3NpbmdsZUVudHJ5S2V5LT5kZXJlZigpOwogICAgICAgICAgICAgbV9z
aW5nbGVFbnRyeUtleSA9IDA7CiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAg
ICAgIH0KQEAgLTUyNyw0MiArNTY4LDUxIEBAIHZvaWQgUHJvcGVydHlNYXA6OnJlbW92ZShjb25z
dCBJZGVudGlmaWUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZpbmQgdGhlIHRo
aW5nIHRvIHJlbW92ZS4KLSAgICB1bnNpZ25lZCBoID0gcmVwLT5jb21wdXRlZEhhc2goKTsKLSAg
ICBpbnQgc2l6ZU1hc2sgPSBtX3UudGFibGUtPnNpemVNYXNrOwotICAgIEVudHJ5ICplbnRyaWVz
ID0gbV91LnRhYmxlLT5lbnRyaWVzOwotICAgIGludCBpID0gaCAmIHNpemVNYXNrOwotICAgIGlu
dCBrID0gMDsKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAgICAgKytudW1Qcm9iZXM7CiAg
ICAgKytudW1SZW1vdmVzOwotICAgIG51bUNvbGxpc2lvbnMgKz0gZW50cmllc1tpXS5rZXkgJiYg
ZW50cmllc1tpXS5rZXkgIT0gcmVwOwogI2VuZGlmCi0gICAgd2hpbGUgKChrZXkgPSBlbnRyaWVz
W2ldLmtleSkpIHsKKworICAgIC8vIEZpbmQgdGhlIHRoaW5nIHRvIHJlbW92ZS4KKyAgICB1bnNp
Z25lZCBpID0gcmVwLT5jb21wdXRlZEhhc2goKTsKKyAgICB1bnNpZ25lZCBrID0gMDsKKyAgICB1
bnNpZ25lZCBlbnRyeUluZGV4OworICAgIFVTdHJpbmc6OlJlcCoga2V5ID0gMDsKKyAgICB3aGls
ZSAoMSkgeworICAgICAgICBlbnRyeUluZGV4ID0gbV91LnRhYmxlLT5lbnRyeUluZGljaWVzW2kg
JiBtX3UudGFibGUtPnNpemVNYXNrXTsKKyAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZW1wdHlF
bnRyeUluZGV4KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGtleSA9IG1fdS50YWJs
ZS0+ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5rZXk7CiAgICAgICAgIGlmIChyZXAgPT0ga2V5
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChrID09IDApCi0gICAgICAgICAgICBr
ID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisK
KyAgICAgICAgaWYgKGsgPT0gMCkgeworICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKHJl
cC0+Y29tcHV0ZWRIYXNoKCkpOworI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKKyAgICAgICAg
ICAgICsrbnVtQ29sbGlzaW9uczsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgaSArPSBr
OworCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICAgICArK251bVJlaGFzaGVzOwog
I2VuZGlmCiAgICAgfQotICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
Ly8gUmVwbGFjZSB0aGlzIG9uZSBlbGVtZW50IHdpdGggdGhlIGRlbGV0ZWQgc2VudGluZWwuIEFs
c28gc2V0IHZhbHVlIHRvIDAgYW5kIGF0dHJpYnV0ZXMgdG8gRG9udEVudW0KLSAgICAvLyB0byBo
ZWxwIGNhbGxlcnMgdGhhdCBpdGVyYXRlIGFsbCBrZXlzIG5vdCBoYXZlIHRvIGNoZWNrIGZvciB0
aGUgc2VudGluZWwuCisKKyAgICAvLyBSZXBsYWNlIHRoaXMgb25lIGVsZW1lbnQgd2l0aCB0aGUg
ZGVsZXRlZCBzZW50aW5lbC4gQWxzbyBjbGVhciBvdXQKKyAgICAvLyB0aGUgZW50cnkgc28gd2Ug
Y2FuIGl0ZXJhdGUgYWxsIHRoZSBlbnRyaWVzIGFzIG5lZWRlZC4KKyAgICBtX3UudGFibGUtPmVu
dHJ5SW5kaWNpZXNbaSAmIG1fdS50YWJsZS0+c2l6ZU1hc2tdID0gZGVsZXRlZFNlbnRpbmVsSW5k
ZXg7CiAgICAga2V5LT5kZXJlZigpOwotICAgIGtleSA9IGRlbGV0ZWRTZW50aW5lbCgpOwotICAg
IGVudHJpZXNbaV0ua2V5ID0ga2V5OwotICAgIGVudHJpZXNbaV0udmFsdWUgPSAwOwotICAgIGVu
dHJpZXNbaV0uYXR0cmlidXRlcyA9IERvbnRFbnVtOworICAgIG1fdS50YWJsZS0+ZW50cmllcygp
W2VudHJ5SW5kZXggLSAxXS5rZXkgPSAwOworICAgIG1fdS50YWJsZS0+ZW50cmllcygpW2VudHJ5
SW5kZXggLSAxXS52YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CisgICAgbV91LnRhYmxlLT5lbnRyaWVz
KClbZW50cnlJbmRleCAtIDFdLmF0dHJpYnV0ZXMgPSAwOwogICAgIEFTU0VSVChtX3UudGFibGUt
PmtleUNvdW50ID49IDEpOwogICAgIC0tbV91LnRhYmxlLT5rZXlDb3VudDsKLSAgICArK21fdS50
YWJsZS0+c2VudGluZWxDb3VudDsKLSAgICAKLSAgICBpZiAobV91LnRhYmxlLT5zZW50aW5lbENv
dW50ICogNCA+PSBtX3UudGFibGUtPnNpemUpCisgICAgKyttX3UudGFibGUtPmRlbGV0ZWRTZW50
aW5lbENvdW50OworCisgICAgaWYgKG1fdS50YWJsZS0+ZGVsZXRlZFNlbnRpbmVsQ291bnQgKiA0
ID49IG1fdS50YWJsZS0+c2l6ZSkKICAgICAgICAgcmVoYXNoKCk7CiAKICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CkBAIC01ODEsMjMgKzYzMSwxOCBAQCB2b2lkIFByb3BlcnR5TWFwOjptYXJrKCkg
Y29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludCBtaW5pbXVtS2V5c1RvUHJv
Y2VzcyA9IG1fdS50YWJsZS0+a2V5Q291bnQ7Ci0gICAgRW50cnkgKmVudHJpZXMgPSBtX3UudGFi
bGUtPmVudHJpZXM7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW5pbXVtS2V5c1RvUHJvY2Vz
czsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWUgKnYgPSBlbnRyaWVzW2ldLnZhbHVlOwotICAgICAg
ICBpZiAodikgewotICAgICAgICAgICAgaWYgKCF2LT5tYXJrZWQoKSkKLSAgICAgICAgICAgICAg
ICB2LT5tYXJrKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICArK21pbmltdW1LZXlz
VG9Qcm9jZXNzOwotICAgICAgICB9CisgICAgdW5zaWduZWQgZW50cnlDb3VudCA9IG1fdS50YWJs
ZS0+a2V5Q291bnQgKyBtX3UudGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50OworICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPD0gZW50cnlDb3VudDsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUq
IHYgPSBtX3UudGFibGUtPmVudHJpZXMoKVtpXS52YWx1ZTsKKyAgICAgICAgaWYgKCF2LT5tYXJr
ZWQoKSkKKyAgICAgICAgICAgIHYtPm1hcmsoKTsKICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgY29t
cGFyZVByb3BlcnR5TWFwRW50cnlJbmRpY2VzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIp
CitzdGF0aWMgaW50IGNvbXBhcmVQcm9wZXJ0eU1hcEVudHJ5SW5kaWNlcyhjb25zdCB2b2lkKiBh
LCBjb25zdCB2b2lkKiBiKQogewotICAgIGludCBpYSA9IHN0YXRpY19jYXN0PFByb3BlcnR5TWFw
SGFzaFRhYmxlRW50cnkgKiBjb25zdCAqPihhKVswXS0+aW5kZXg7Ci0gICAgaW50IGliID0gc3Rh
dGljX2Nhc3Q8UHJvcGVydHlNYXBIYXNoVGFibGVFbnRyeSAqIGNvbnN0ICo+KGIpWzBdLT5pbmRl
eDsKKyAgICB1bnNpZ25lZCBpYSA9IHN0YXRpY19jYXN0PFByb3BlcnR5TWFwRW50cnkqIGNvbnN0
Kj4oYSlbMF0tPmluZGV4OworICAgIHVuc2lnbmVkIGliID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlN
YXBFbnRyeSogY29uc3QqPihiKVswXS0+aW5kZXg7CiAgICAgaWYgKGlhIDwgaWIpCiAgICAgICAg
IHJldHVybiAtMTsKICAgICBpZiAoaWEgPiBpYikKQEAgLTYxNSwxMSArNjYwLDEyIEBAIGJvb2wg
UHJvcGVydHlNYXA6OmNvbnRhaW5zR2V0dGVyc09yU2V0dGUKICNlbmRpZgogICAgIH0KIAotICAg
IGZvciAoaW50IGkgPSAwOyBpICE9IG1fdS50YWJsZS0+c2l6ZTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX3UudGFibGUtPmVudHJpZXNbaV0uYXR0cmlidXRlcyAmIEdldHRlclNldHRlcikKKyAgICB1
bnNpZ25lZCBlbnRyeUNvdW50ID0gbV91LnRhYmxlLT5rZXlDb3VudCArIG1fdS50YWJsZS0+ZGVs
ZXRlZFNlbnRpbmVsQ291bnQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBlbnRyeUNv
dW50OyBpKyspIHsKKyAgICAgICAgaWYgKG1fdS50YWJsZS0+ZW50cmllcygpW2ldLmF0dHJpYnV0
ZXMgJiBHZXR0ZXJTZXR0ZXIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAg
CisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTYzOSwxMiArNjg1LDEwIEBAIHZvaWQgUHJv
cGVydHlNYXA6OmdldEVudW1lcmFibGVQcm9wZXJ0eU4KIAogICAgIC8vIEdldCBwb2ludGVycyB0
byB0aGUgZW51bWVyYWJsZSBlbnRyaWVzIGluIHRoZSBidWZmZXIuCiAgICAgRW50cnkqKiBwID0g
c29ydGVkRW51bWVyYWJsZXMuZGF0YSgpOwotICAgIGludCBzaXplID0gbV91LnRhYmxlLT5zaXpl
OwotICAgIEVudHJ5KiBlbnRyaWVzID0gbV91LnRhYmxlLT5lbnRyaWVzOwotICAgIGZvciAoaW50
IGkgPSAwOyBpICE9IHNpemU7ICsraSkgewotICAgICAgICBFbnRyeSogZSA9ICZlbnRyaWVzW2ld
OwotICAgICAgICBpZiAoZS0+a2V5ICYmICEoZS0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAg
ICAgICAgICAgICpwKysgPSBlOworICAgIHVuc2lnbmVkIGVudHJ5Q291bnQgPSBtX3UudGFibGUt
PmtleUNvdW50ICsgbV91LnRhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudDsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDw9IGVudHJ5Q291bnQ7IGkrKykgeworICAgICAgICBpZiAobV91LnRh
YmxlLT5lbnRyaWVzKClbaV0ua2V5ICYmICEobV91LnRhYmxlLT5lbnRyaWVzKClbaV0uYXR0cmli
dXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICpwKysgPSAmbV91LnRhYmxlLT5lbnRyaWVz
KClbaV07CiAgICAgfQogCiAgICAgLy8gU29ydCB0aGUgZW50cmllcyBieSBpbmRleC4KQEAgLTY1
Nyw3ICs3MDEsNyBAQCB2b2lkIFByb3BlcnR5TWFwOjpnZXRFbnVtZXJhYmxlUHJvcGVydHlOCiAK
IHZvaWQgUHJvcGVydHlNYXA6OnNhdmUoU2F2ZWRQcm9wZXJ0aWVzICZwKSBjb25zdAogewotICAg
IGludCBjb3VudCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCiAgICAgaWYgKCFtX3Vz
aW5nVGFibGUpIHsKICNpZiBVU0VfU0lOR0xFX0VOVFJZCkBAIC02NjUsMjIgKzcwOSwyMSBAQCB2
b2lkIFByb3BlcnR5TWFwOjpzYXZlKFNhdmVkUHJvcGVydGllcyAmCiAgICAgICAgICAgICArK2Nv
dW50OwogI2VuZGlmCiAgICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHNpemUgPSBtX3UudGFibGUt
PnNpemU7Ci0gICAgICAgIEVudHJ5ICplbnRyaWVzID0gbV91LnRhYmxlLT5lbnRyaWVzOwotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSAhPSBzaXplOyArK2kpCi0gICAgICAgICAgICBpZiAoaXNW
YWxpZChlbnRyaWVzW2ldLmtleSkgJiYgIShlbnRyaWVzW2ldLmF0dHJpYnV0ZXMgJiAoUmVhZE9u
bHkgfCBGdW5jdGlvbikpKQorICAgICAgICB1bnNpZ25lZCBlbnRyeUNvdW50ID0gbV91LnRhYmxl
LT5rZXlDb3VudCArIG1fdS50YWJsZS0+ZGVsZXRlZFNlbnRpbmVsQ291bnQ7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPD0gZW50cnlDb3VudDsgKytpKQorICAgICAgICAgICAgaWYg
KG1fdS50YWJsZS0+ZW50cmllcygpW2ldLmtleSAmJiAhKG1fdS50YWJsZS0+ZW50cmllcygpW2ld
LmF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBGdW5jdGlvbikpKQogICAgICAgICAgICAgICAgICsr
Y291bnQ7CiAgICAgfQogCi0gICAgcC5fcHJvcGVydGllcy5jbGVhcigpOwotICAgIHAuX2NvdW50
ID0gY291bnQ7CisgICAgcC5tX3Byb3BlcnRpZXMuY2xlYXIoKTsKKyAgICBwLm1fY291bnQgPSBj
b3VudDsKIAogICAgIGlmIChjb3VudCA9PSAwKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
cC5fcHJvcGVydGllcy5zZXQobmV3IFNhdmVkUHJvcGVydHkgW2NvdW50XSk7CisgICAgcC5tX3By
b3BlcnRpZXMuc2V0KG5ldyBTYXZlZFByb3BlcnR5IFtjb3VudF0pOwogICAgIAotICAgIFNhdmVk
UHJvcGVydHkgKnByb3AgPSBwLl9wcm9wZXJ0aWVzLmdldCgpOworICAgIFNhdmVkUHJvcGVydHkq
IHByb3AgPSBwLm1fcHJvcGVydGllcy5nZXQoKTsKICAgICAKICAgICBpZiAoIW1fdXNpbmdUYWJs
ZSkgewogI2lmIFVTRV9TSU5HTEVfRU5UUlkKQEAgLTcwMCwxNCArNzQzLDEyIEBAIHZvaWQgUHJv
cGVydHlNYXA6OnNhdmUoU2F2ZWRQcm9wZXJ0aWVzICYKIAogICAgICAgICAvLyBHZXQgcG9pbnRl
cnMgdG8gdGhlIGVudHJpZXMgaW4gdGhlIGJ1ZmZlci4KICAgICAgICAgRW50cnkqKiBwID0gc29y
dGVkRW50cmllcy5kYXRhKCk7Ci0gICAgICAgIGludCBzaXplID0gbV91LnRhYmxlLT5zaXplOwot
ICAgICAgICBFbnRyeSogZW50cmllcyA9IG1fdS50YWJsZS0+ZW50cmllczsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgIT0gc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBFbnRyeSAqZSA9ICZl
bnRyaWVzW2ldOwotICAgICAgICAgICAgaWYgKGlzVmFsaWQoZS0+a2V5KSAmJiAhKGUtPmF0dHJp
YnV0ZXMgJiAoUmVhZE9ubHkgfCBGdW5jdGlvbikpKQotICAgICAgICAgICAgICAgICpwKysgPSBl
OworICAgICAgICB1bnNpZ25lZCBlbnRyeUNvdW50ID0gbV91LnRhYmxlLT5rZXlDb3VudCArIG1f
dS50YWJsZS0+ZGVsZXRlZFNlbnRpbmVsQ291bnQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPD0gZW50cnlDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZiAobV91LnRhYmxlLT5l
bnRyaWVzKClbaV0ua2V5ICYmICEobV91LnRhYmxlLT5lbnRyaWVzKClbaV0uYXR0cmlidXRlcyAm
IChSZWFkT25seSB8IEZ1bmN0aW9uKSkpCisgICAgICAgICAgICAgICAgKnArKyA9ICZtX3UudGFi
bGUtPmVudHJpZXMoKVtpXTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQocCAtIHNvcnRlZEVu
dHJpZXMuZGF0YSgpID09IGNvdW50KTsKKyAgICAgICAgQVNTRVJUKHAgPT0gc29ydGVkRW50cmll
cy5kYXRhKCkgKyBjb3VudCk7CiAKICAgICAgICAgLy8gU29ydCB0aGUgZW50cmllcyBieSBpbmRl
eC4KICAgICAgICAgcXNvcnQoc29ydGVkRW50cmllcy5kYXRhKCksIHAgLSBzb3J0ZWRFbnRyaWVz
LmRhdGEoKSwgc2l6ZW9mKEVudHJ5KiksIGNvbXBhcmVQcm9wZXJ0eU1hcEVudHJ5SW5kaWNlcyk7
CkBAIC03MjQsNDcgKzc2NSw3NSBAQCB2b2lkIFByb3BlcnR5TWFwOjpzYXZlKFNhdmVkUHJvcGVy
dGllcyAmCiAKIHZvaWQgUHJvcGVydHlNYXA6OnJlc3RvcmUoY29uc3QgU2F2ZWRQcm9wZXJ0aWVz
ICZwKQogewotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IHAuX2NvdW50OyArK2kpCi0gICAgICAg
IHB1dChwLl9wcm9wZXJ0aWVzW2ldLmtleSwgcC5fcHJvcGVydGllc1tpXS52YWx1ZSwgcC5fcHJv
cGVydGllc1tpXS5hdHRyaWJ1dGVzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IHAu
bV9jb3VudDsgKytpKQorICAgICAgICBwdXQocC5tX3Byb3BlcnRpZXNbaV0ua2V5LCBwLm1fcHJv
cGVydGllc1tpXS52YWx1ZSwgcC5tX3Byb3BlcnRpZXNbaV0uYXR0cmlidXRlcyk7CiB9CiAKLSNp
ZiBET19DT05TSVNURU5DWV9DSEVDSworI2lmIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVD
SwogCiB2b2lkIFByb3BlcnR5TWFwOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKICAgICBpZiAoIW1f
dXNpbmdUYWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBp
bnQgc2VudGluZWxDb3VudCA9IDA7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogIT0gbV91LnRhYmxl
LT5zaXplOyArK2opIHsKLSAgICAgICAgVVN0cmluZzo6UmVwICpyZXAgPSBtX3UudGFibGUtPmVu
dHJpZXNbal0ua2V5OwotICAgICAgICBpZiAoIXJlcCkKKyAgICBBU1NFUlQobV91LnRhYmxlLT5z
aXplID49IDE2KTsKKyAgICBBU1NFUlQobV91LnRhYmxlLT5zaXplTWFzayk7CisgICAgQVNTRVJU
KG1fdS50YWJsZS0+c2l6ZSA9PSBtX3UudGFibGUtPnNpemVNYXNrICsgMSk7CisgICAgQVNTRVJU
KCEobV91LnRhYmxlLT5zaXplICYgbV91LnRhYmxlLT5zaXplTWFzaykpOworCisgICAgQVNTRVJU
KG1fdS50YWJsZS0+a2V5Q291bnQgPD0gbV91LnRhYmxlLT5zaXplIC8gMik7CisgICAgQVNTRVJU
KG1fdS50YWJsZS0+ZGVsZXRlZFNlbnRpbmVsQ291bnQgPD0gbV91LnRhYmxlLT5zaXplIC8gNCk7
CisKKyAgICBBU1NFUlQobV91LnRhYmxlLT5rZXlDb3VudCArIG1fdS50YWJsZS0+ZGVsZXRlZFNl
bnRpbmVsQ291bnQgPD0gbV91LnRhYmxlLT5zaXplIC8gMik7CisKKyAgICB1bnNpZ25lZCBpbmRl
eENvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBkZWxldGVkSW5kZXhDb3VudCA9IDA7CisgICAgZm9y
ICh1bnNpZ25lZCBhID0gMDsgYSAhPSBtX3UudGFibGUtPnNpemU7ICsrYSkgeworICAgICAgICB1
bnNpZ25lZCBlbnRyeUluZGV4ID0gbV91LnRhYmxlLT5lbnRyeUluZGljaWVzW2FdOworICAgICAg
ICBpZiAoZW50cnlJbmRleCA9PSBlbXB0eUVudHJ5SW5kZXgpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZGVsZXRlZFNlbnRpbmVsSW5kZXgpIHsKKyAg
ICAgICAgICAgICsrZGVsZXRlZEluZGV4Q291bnQ7CiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKHJlcCA9PSBkZWxldGVkU2VudGluZWwoKSkgewotICAgICAgICAgICAgKytzZW50
aW5lbENvdW50OworICAgICAgICB9CisgICAgICAgICsraW5kZXhDb3VudDsKKworICAgICAgICBm
b3IgKHVuc2lnbmVkIGIgPSBhICsgMTsgYiAhPSBtX3UudGFibGUtPnNpemU7ICsrYikKKyAgICAg
ICAgICAgIEFTU0VSVChtX3UudGFibGUtPmVudHJ5SW5kaWNpZXNbYl0gIT0gZW50cnlJbmRleCk7
CisKKyAgICB9CisgICAgQVNTRVJUKGluZGV4Q291bnQgPT0gbV91LnRhYmxlLT5rZXlDb3VudCk7
CisgICAgQVNTRVJUKGRlbGV0ZWRJbmRleENvdW50ID09IG1fdS50YWJsZS0+ZGVsZXRlZFNlbnRp
bmVsQ291bnQpOworCisgICAgQVNTRVJUKG1fdS50YWJsZS0+ZW50cmllcygpWzBdLmtleSA9PSAw
KTsKKworICAgIHVuc2lnbmVkIGVudHJ5Q291bnQgPSBtX3UudGFibGUtPmtleUNvdW50ICsgbV91
LnRhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudDsKKyAgICB1bnNpZ25lZCBub25FbXB0eUVudHJ5
Q291bnQgPSAwOworICAgIGZvciAodW5zaWduZWQgYyA9IDE7IGMgPD0gZW50cnlDb3VudDsgKytj
KSB7CisgICAgICAgIFVTdHJpbmc6OlJlcCogcmVwID0gbV91LnRhYmxlLT5lbnRyaWVzKClbY10u
a2V5OworICAgICAgICBpZiAoIXJlcCkgeworICAgICAgICAgICAgQVNTRVJUKG1fdS50YWJsZS0+
ZW50cmllcygpW2NdLnZhbHVlLT5pc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGggPSByZXAtPmNvbXB1dGVkSGFzaCgpOwot
ICAgICAgICBpbnQgaSA9IGggJiBtX3UudGFibGUtPnNpemVNYXNrOwotICAgICAgICBpbnQgayA9
IDA7Ci0gICAgICAgIHdoaWxlIChVU3RyaW5nOjpSZXAgKmtleSA9IG1fdS50YWJsZS0+ZW50cmll
c1tpXS5rZXkpIHsKLSAgICAgICAgICAgIGlmIChyZXAgPT0ga2V5KQorICAgICAgICArK25vbkVt
cHR5RW50cnlDb3VudDsKKyAgICAgICAgdW5zaWduZWQgaSA9IHJlcC0+Y29tcHV0ZWRIYXNoKCk7
CisgICAgICAgIHVuc2lnbmVkIGsgPSAwOworICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4Owor
ICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgZW50cnlJbmRleCA9IG1fdS50YWJsZS0+
ZW50cnlJbmRpY2llc1tpICYgbV91LnRhYmxlLT5zaXplTWFza107CisgICAgICAgICAgICBBU1NF
UlQoZW50cnlJbmRleCAhPSBlbXB0eUVudHJ5SW5kZXgpOworICAgICAgICAgICAgaWYgKHJlcCA9
PSBtX3UudGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ua2V5KQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAgICAgICBrID0g
MSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAgICBpID0gKGkgKyBrKSAmIG1fdS50YWJsZS0+
c2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKHJlcC0+Y29tcHV0
ZWRIYXNoKCkpOworICAgICAgICAgICAgaSArPSBrOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VS
VChpID09IGopOwotICAgICAgICArK2NvdW50OworICAgICAgICBBU1NFUlQoZW50cnlJbmRleCA9
PSBjICsgMSk7CiAgICAgfQotICAgIEFTU0VSVChjb3VudCA9PSBtX3UudGFibGUtPmtleUNvdW50
KTsKLSAgICBBU1NFUlQoc2VudGluZWxDb3VudCA9PSBtX3UudGFibGUtPnNlbnRpbmVsQ291bnQp
OwotICAgIEFTU0VSVChtX3UudGFibGUtPnNpemUgPj0gMTYpOwotICAgIEFTU0VSVChtX3UudGFi
bGUtPnNpemVNYXNrKTsKLSAgICBBU1NFUlQobV91LnRhYmxlLT5zaXplID09IG1fdS50YWJsZS0+
c2l6ZU1hc2sgKyAxKTsKKworICAgIEFTU0VSVChub25FbXB0eUVudHJ5Q291bnQgPT0gbV91LnRh
YmxlLT5rZXlDb3VudCk7CiB9CiAKLSNlbmRpZiAvLyBET19DT05TSVNURU5DWV9DSEVDSworI2Vu
ZGlmIC8vIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwogCiB9IC8vIG5hbWVzcGFjZSBL
SlMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgJKHJldmlzaW9uIDI3MzczKQorKysg
SmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNiBAQAogLy8gLSotIG1vZGU6IGMrKzsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotCiAvKgotICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw4NCArMjcsNjcgQEAKIAogbmFtZXNwYWNlIEtK
UyB7CiAKLSAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKICAgICBjbGFzcyBKU09iamVjdDsK
ICAgICBjbGFzcyBKU1ZhbHVlOworICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogICAgIAot
ICAgIGNsYXNzIFNhdmVkUHJvcGVydHk7Ci0gICAgCisgICAgc3RydWN0IFByb3BlcnR5TWFwRW50
cnk7CiAgICAgc3RydWN0IFByb3BlcnR5TWFwSGFzaFRhYmxlOworICAgIHN0cnVjdCBTYXZlZFBy
b3BlcnR5OwogICAgIAotLyoqCi0qIFNhdmVkIFByb3BlcnRpZXMKLSovCiAgICAgY2xhc3MgU2F2
ZWRQcm9wZXJ0aWVzIHsKLSAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlNYXA7CisgICAgICAgIGZy
aWVuZCBjbGFzcyBQcm9wZXJ0eU1hcDsKICAgICBwdWJsaWM6CiAgICAgICAgIFNhdmVkUHJvcGVy
dGllcygpOwogICAgICAgICB+U2F2ZWRQcm9wZXJ0aWVzKCk7CiAgICAgICAgIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIGludCBfY291bnQ7Ci0gICAgICAgIE93bkFycmF5UHRyPFNhdmVkUHJvcGVy
dHk+IF9wcm9wZXJ0aWVzOwotICAgIH07Ci0gICAgCi0vKioKLSogQSBoYXNodGFibGUgZW50cnkg
Zm9yIHRoZSBAcmVmIFByb3BlcnR5TWFwLgotKi8KLSAgICBzdHJ1Y3QgUHJvcGVydHlNYXBIYXNo
VGFibGVFbnRyeQotICAgIHsKLSAgICAgICAgUHJvcGVydHlNYXBIYXNoVGFibGVFbnRyeSgpIDog
a2V5KDApIHsgfQotICAgICAgICBVU3RyaW5nOjpSZXAgKmtleTsKLSAgICAgICAgSlNWYWx1ZSAq
dmFsdWU7Ci0gICAgICAgIGludCBhdHRyaWJ1dGVzOwotICAgICAgICBpbnQgaW5kZXg7CisgICAg
ICAgIHVuc2lnbmVkIG1fY291bnQ7CisgICAgICAgIE93bkFycmF5UHRyPFNhdmVkUHJvcGVydHk+
IG1fcHJvcGVydGllczsKICAgICB9OwogCi0vKioKLSogSmF2YXNjcmlwdCBQcm9wZXJ0eSBNYXAu
Ci0qLwotICAgIGNsYXNzIFByb3BlcnR5TWFwIHsKKyAgICBjbGFzcyBQcm9wZXJ0eU1hcCA6IE5v
bmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFByb3BlcnR5TWFwKCk7CiAgICAgICAg
IH5Qcm9wZXJ0eU1hcCgpOwogCiAgICAgICAgIHZvaWQgY2xlYXIoKTsKICAgICAgICAgCi0gICAg
ICAgIHZvaWQgcHV0KGNvbnN0IElkZW50aWZpZXIgJm5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQg
YXR0cmlidXRlcywgYm9vbCByb0NoZWNrID0gZmFsc2UpOwotICAgICAgICB2b2lkIHJlbW92ZShj
b25zdCBJZGVudGlmaWVyICZuYW1lKTsKLSAgICAgICAgSlNWYWx1ZSAqZ2V0KGNvbnN0IElkZW50
aWZpZXIgJm5hbWUpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlICpnZXQoY29uc3QgSWRlbnRpZmll
ciAmbmFtZSwgdW5zaWduZWQgJmF0dHJpYnV0ZXMpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlICoq
Z2V0TG9jYXRpb24oY29uc3QgSWRlbnRpZmllciAmbmFtZSk7CisgICAgICAgIHZvaWQgcHV0KGNv
bnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBjaGVj
a1JlYWRPbmx5ID0gZmFsc2UpOworICAgICAgICB2b2lkIHJlbW92ZShjb25zdCBJZGVudGlmaWVy
Jik7CisgICAgICAgIEpTVmFsdWUqIGdldChjb25zdCBJZGVudGlmaWVyJikgY29uc3Q7CisgICAg
ICAgIEpTVmFsdWUqIGdldChjb25zdCBJZGVudGlmaWVyJiwgdW5zaWduZWQmIGF0dHJpYnV0ZXMp
IGNvbnN0OworICAgICAgICBKU1ZhbHVlKiogZ2V0TG9jYXRpb24oY29uc3QgSWRlbnRpZmllciYg
bmFtZSk7CiAKICAgICAgICAgdm9pZCBtYXJrKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgZ2V0RW51
bWVyYWJsZVByb3BlcnR5TmFtZXMoUHJvcGVydHlOYW1lQXJyYXkmKSBjb25zdDsKIAotICAgICAg
ICB2b2lkIHNhdmUoU2F2ZWRQcm9wZXJ0aWVzICYpIGNvbnN0OwotICAgICAgICB2b2lkIHJlc3Rv
cmUoY29uc3QgU2F2ZWRQcm9wZXJ0aWVzICZwKTsKKyAgICAgICAgdm9pZCBzYXZlKFNhdmVkUHJv
cGVydGllcyYpIGNvbnN0OworICAgICAgICB2b2lkIHJlc3RvcmUoY29uc3QgU2F2ZWRQcm9wZXJ0
aWVzJik7CiAKICAgICAgICAgYm9vbCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9nZXR0ZXJTZXR0ZXJGbGFnOyB9CiAgICAgICAgIHZvaWQgc2V0SGFzR2V0dGVy
U2V0dGVyUHJvcGVydGllcyhib29sIGYpIHsgbV9nZXR0ZXJTZXR0ZXJGbGFnID0gZjsgfQogCiAg
ICAgICAgIGJvb2wgY29udGFpbnNHZXR0ZXJzT3JTZXR0ZXJzKCkgY29uc3Q7CisKICAgICBwcml2
YXRlOgotICAgICAgICBzdGF0aWMgYm9vbCBrZXlzTWF0Y2goY29uc3QgVVN0cmluZzo6UmVwICos
IGNvbnN0IFVTdHJpbmc6OlJlcCAqKTsKKyAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEVudHJ5
IEVudHJ5OworICAgICAgICB0eXBlZGVmIFByb3BlcnR5TWFwSGFzaFRhYmxlIFRhYmxlOworCisg
ICAgICAgIHN0YXRpYyBib29sIGtleXNNYXRjaChjb25zdCBVU3RyaW5nOjpSZXAqLCBjb25zdCBV
U3RyaW5nOjpSZXAqKTsKICAgICAgICAgdm9pZCBleHBhbmQoKTsKICAgICAgICAgdm9pZCByZWhh
c2goKTsKLSAgICAgICAgdm9pZCByZWhhc2goaW50IG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIHZv
aWQgcmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSk7CiAgICAgICAgIHZvaWQgY3JlYXRlVGFi
bGUoKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgaW5zZXJ0KFVTdHJpbmc6OlJlcCAqLCBKU1Zh
bHVlICp2YWx1ZSwgaW50IGF0dHJpYnV0ZXMsIGludCBpbmRleCk7CisgICAgICAgIHZvaWQgaW5z
ZXJ0KGNvbnN0IEVudHJ5Jik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICAgICAgCi0gICAgICAgIHR5cGVkZWYgUHJvcGVydHlNYXBIYXNoVGFibGVFbnRy
eSBFbnRyeTsKLSAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEhhc2hUYWJsZSBUYWJsZTsKLQog
ICAgICAgICBVU3RyaW5nOjpSZXAqIG1fc2luZ2xlRW50cnlLZXk7CiAgICAgICAgIHVuaW9uIHsK
LSAgICAgICAgICBKU1ZhbHVlKiBzaW5nbGVFbnRyeVZhbHVlOwotICAgICAgICAgIFRhYmxlKiB0
YWJsZTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHNpbmdsZUVudHJ5VmFsdWU7CisgICAgICAgICAg
ICBUYWJsZSogdGFibGU7CiAgICAgICAgIH0gbV91OwogCiAgICAgICAgIHNob3J0IG1fc2luZ2xl
RW50cnlBdHRyaWJ1dGVzOwo=
</data>
<flag name="review"
          id="7209"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>