<?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>194912</bug_id>
          
          <creation_ts>2019-02-21 12:21:08 -0800</creation_ts>
          <short_desc>Make JSScript:cacheBytecodeWithError update the cache when the script changes</short_desc>
          <delta_ts>2019-03-01 03:08: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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>194517</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>dominik.infuehr</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1508607</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 12:21:08 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509160</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-22 13:49:33 -0800</bug_when>
    <thetext>gonna look at this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509220</commentid>
    <comment_count>2</comment_count>
      <attachid>362778</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-22 16:10:46 -0800</bug_when>
    <thetext>Created attachment 362778
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509235</commentid>
    <comment_count>3</comment_count>
      <attachid>362785</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-22 16:40:34 -0800</bug_when>
    <thetext>Created attachment 362785
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509363</commentid>
    <comment_count>4</comment_count>
      <attachid>362785</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-02-23 05:01:26 -0800</bug_when>
    <thetext>Comment on attachment 362785
patch

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

Looks good to me. I just have a couple questions that are not directly related to the patch, and the windows build is broken.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:221
&gt; +        , m_baseAddress(bitwise_cast&lt;const uint8_t*&gt;(baseAddress))

This should probably be `static_cast`, no?

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:338
&gt; +        return bitwise_cast&lt;const uint8_t*&gt;(this) + m_offset;

why do you need bitwise_cast here instead of reinterpret_cast?

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:2164
&gt; +    if (m_cacheVersion != JSC_BYTECODE_CACHE_VERSION)
&gt; +        return false;
&gt; +    if (m_bootSessionUUID.decode(decoder) != bootSessionUUIDString())
&gt; +        return false;

Do you think it&apos;s worth moving it into a helper method, since it&apos;s done here and in decode?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509469</commentid>
    <comment_count>5</comment_count>
      <attachid>362785</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-24 11:47:49 -0800</bug_when>
    <thetext>Comment on attachment 362785
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:221
&gt;&gt; +        , m_baseAddress(bitwise_cast&lt;const uint8_t*&gt;(baseAddress))
&gt; 
&gt; This should probably be `static_cast`, no?

yeah it should be

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:338
&gt;&gt; +        return bitwise_cast&lt;const uint8_t*&gt;(this) + m_offset;
&gt; 
&gt; why do you need bitwise_cast here instead of reinterpret_cast?

I like bitwise_cast because of the static assert it does that the from type should be the same size as the to type.

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:2164
&gt;&gt; +        return false;
&gt; 
&gt; Do you think it&apos;s worth moving it into a helper method, since it&apos;s done here and in decode?

Yeah I do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509873</commentid>
    <comment_count>6</comment_count>
      <attachid>362785</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-25 17:48:34 -0800</bug_when>
    <thetext>Comment on attachment 362785
patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511173</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-28 15:58:33 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/242239/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511174</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-28 15:59:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/48492608&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511228</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-28 17:44:38 -0800</bug_when>
    <thetext>Attempting Windows build fix in:
https://trac.webkit.org/changeset/242247/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511352</commentid>
    <comment_count>10</comment_count>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2019-03-01 02:35:36 -0800</bug_when>
    <thetext>Hi, I think that patch broke debug builds with gcc: In Source/JavaScriptCore/runtime/CachedTypes.cpp ASSERT_NOT_REACHED (a non-constexpr function) is invoked from the constexpr-function tagFromSourceCodeType.

See https://trac.webkit.org/browser/webkit/trunk/Source/JavaScriptCore/runtime/CachedTypes.cpp#L1827</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511353</commentid>
    <comment_count>11</comment_count>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2019-03-01 02:44:48 -0800</bug_when>
    <thetext>Additional note: With &quot;broken debug build&quot; I meant that compilation is failing on (probably) all architectures (I tested x64 &amp; ARM).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511354</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-01 02:47:33 -0800</bug_when>
    <thetext>(In reply to Dominik Inführ from comment #11)
&gt; Additional note: With &quot;broken debug build&quot; I meant that compilation is
&gt; failing on (probably) all architectures (I tested x64 &amp; ARM).

Can you land a fix to remove constexpr from it? FWIW, clang debug builds I think are fine</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511355</commentid>
    <comment_count>13</comment_count>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2019-03-01 02:59:22 -0800</bug_when>
    <thetext>Should we use ASSERT_UNDER_CONSTEXPR_CONTEXT instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511356</commentid>
    <comment_count>14</comment_count>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2019-03-01 03:01:33 -0800</bug_when>
    <thetext>Nevermind this isn&apos;t building as well...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511359</commentid>
    <comment_count>15</comment_count>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2019-03-01 03:05:39 -0800</bug_when>
    <thetext>Here is the patch for the build issue: https://bugs.webkit.org/show_bug.cgi?id=195205.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511361</commentid>
    <comment_count>16</comment_count>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2019-03-01 03:08:24 -0800</bug_when>
    <thetext>BTW thanks for responding so fast!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362778</attachid>
            <date>2019-02-22 16:10:46 -0800</date>
            <delta_ts>2019-02-22 16:40:34 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>21214</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQkocmV2aXNpb24gMjQxOTYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsOCBAQAogI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgogCiAjaW1w
b3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJDYWNoZWRUeXBlcy5oIgorI2ltcG9ydCAiQ29kZUNh
Y2hlLmgiCiAjaW1wb3J0ICJJZGVudGlmaWVyLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5h
bC5oIgogI2ltcG9ydCAiSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oIgpAQCAtMjAxLDcgKzIwMywx
NyBAQCAtICh2b2lkKXJlYWRDYWNoZQogICAgIHZvaWQqIGJ1ZmZlciA9IG1tYXAobnVsbHB0ciwg
c2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOwogICAgIGNsb3NlKGZkKTsKIAor
ICAgIGRhdGFMb2dMbigiUmVhZCBjYWNoZSBvbiBjcmVhdGlvbiEiKTsKICAgICBtX2NhY2hlZEJ5
dGVjb2RlID0gSlNDOjpDYWNoZWRCeXRlY29kZSB7IGJ1ZmZlciwgc2l6ZSB9OworCisgICAgSlND
OjpWTSYgdm0gPSBtX3ZpcnR1YWxNYWNoaW5lLnZtOworCisgICAgY29uc3QgSlNDOjpTb3VyY2VD
b2RlJiBzb3VyY2VDb2RlID0gW3NlbGYganNTb3VyY2VDb2RlXS0+c291cmNlQ29kZSgpOworICAg
IEpTQzo6U291cmNlQ29kZUtleSBrZXkgPSBtX3R5cGUgPT0ga0pTU2NyaXB0VHlwZVByb2dyYW0g
PyBzb3VyY2VDb2RlS2V5Rm9yU2VyaWFsaXplZFByb2dyYW0odm0sIHNvdXJjZUNvZGUpIDogc291
cmNlQ29kZUtleUZvclNlcmlhbGl6ZWRNb2R1bGUodm0sIHNvdXJjZUNvZGUpOworICAgIGlmICgh
aXNDYWNoZWRCeXRlY29kZVN0aWxsVmFsaWQodm0sIG1fY2FjaGVkQnl0ZWNvZGUsIGtleSwgbV90
eXBlID09IGtKU1NjcmlwdFR5cGVQcm9ncmFtID8gSlNDOjpTb3VyY2VDb2RlVHlwZTo6UHJvZ3Jh
bVR5cGUgOiBKU0M6OlNvdXJjZUNvZGVUeXBlOjpNb2R1bGVUeXBlKSkgeworICAgICAgICBtX2Nh
Y2hlZEJ5dGVjb2RlID0geyB9OworICAgICAgICBkYXRhTG9nTG4oIk5vIGxvbmdlciB2YWxpZCBj
YWNoZSwgY2xlYXJpbmcgZW50cnkhIik7CisgICAgfQogfQogCiAtIChCT09MKWNhY2hlQnl0ZWNv
ZGVXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKQEAgLTI1NSw4ICsyNjcsMTAgQEAgLSAoSlND
OjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZQogCiAtIChCT09MKXdyaXRlQ2FjaGU6KFN0cmlu
ZyYpZXJyb3IKIHsKLSAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpCisgICAgaWYgKG1f
Y2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKSB7CisgICAgICAgIGRhdGFMb2dMbigiQWxyZWFkeSBoYXZl
IGNhY2hlIik7CiAgICAgICAgIHJldHVybiBZRVM7CisgICAgfQogCiAgICAgaWYgKCFtX2NhY2hl
UGF0aCkgewogICAgICAgICBlcnJvciA9ICJObyBjYWNoZSB3YXMgcGF0aCBwcm92aWRlZCBkdXJp
bmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSlNTY3JpcHQuIl9zOwpAQCAtMjY5LDcgKzI4Myw3IEBA
IC0gKEJPT0wpd3JpdGVDYWNoZTooU3RyaW5nJillcnJvcgogICAgICAgICBtX2NhY2hlZEJ5dGVj
b2RlID0gSlNDOjpnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtz
ZWxmIGpzU291cmNlQ29kZV0tPnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIGtKU1NjcmlwdFR5cGVQcm9ncmFtOgotICAgICAgICBtX2NhY2hlZEJ5
dGVjb2RlID0gSlNDOjpnZW5lcmF0ZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxm
IGpzU291cmNlQ29kZV0tPnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgICAgICBtX2Nh
Y2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZVByb2dyYW1CeXRlY29kZShtX3ZpcnR1YWxNYWNo
aW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVdLT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAyNDE5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwOTQsNiArMjA5
NCw1MCBAQCBzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFCiAgICAgfQog
fQogCitzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTYW1lQ2FjaGVGaWxlQW5kRGlm
ZmVyZW50U2NyaXB0KGJvb2wgZm9yY2VEaXNrQ2FjaGUpCit7CisgICAgTlNVUkwgKmNhY2hlUGF0
aCA9IHRlbXBGaWxlKEAiY2FjaGVQYXRoLmNhY2hlIik7CisgICAgTlNVUkwgKnNvdXJjZVVSTCA9
IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAibXktcGF0aCJdOworCisgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CisgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZtID0gW1tKU1ZpcnR1YWxNYWNoaW5lIGFs
bG9jXSBpbml0XTsKKyAgICAgICAgTlNTdHJpbmcgKnNvdXJjZSA9IEAiZnVuY3Rpb24gZm9vKCkg
eyByZXR1cm4gNDI7IH07IGZ1bmN0aW9uIGJhcigpIHsgcmV0dXJuIDQwOyB9OyBmb28oKSArIGJh
cigpOyI7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBp
bml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtK
U1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZVByb2dyYW0gd2l0aFNvdXJjZTpzb3Vy
Y2UgYW5kU291cmNlVVJMOnNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0aCBpblZp
cnR1YWxNYWNoaW5lOnZtIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlw
dCk7CisgICAgICAgIGlmICghW3NjcmlwdCBjYWNoZUJ5dGVjb2RlV2l0aEVycm9yOm5pbF0pCisg
ICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNrQ2Fj
aGUoKSA9IGZvcmNlRGlza0NhY2hlOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4
dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3Vs
dCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFtyZXN1bHQgaXNOdW1iZXJdKTsKKyAgICAgICAg
Y2hlY2tSZXN1bHQoQCJFeHBlY3RlZCA4MiBhcyByZXN1bHQiLCBbW3Jlc3VsdCB0b051bWJlcl0g
aW50VmFsdWVdID09IDgyKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAg
ICAgSlNWaXJ0dWFsTWFjaGluZSAqdm0gPSBbW0pTVmlydHVhbE1hY2hpbmUgYWxsb2NdIGluaXRd
OworICAgICAgICBOU1N0cmluZyAqc291cmNlID0gQCJmdW5jdGlvbiBmb28oKSB7IHJldHVybiAx
MDsgfTsgZnVuY3Rpb24gYmFyKCkgeyByZXR1cm4gMjA7IH07IGZvbygpICsgYmFyKCk7IjsKKyAg
ICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoVmly
dHVhbE1hY2hpbmU6dm1dOworICAgICAgICBKU1NjcmlwdCAqc2NyaXB0ID0gW0pTU2NyaXB0IHNj
cmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlUHJvZ3JhbSB3aXRoU291cmNlOnNvdXJjZSBhbmRTb3Vy
Y2VVUkw6c291cmNlVVJMIGFuZEJ5dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoIGluVmlydHVhbE1hY2hp
bmU6dm0gZXJyb3I6bmlsXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAg
ICAgaWYgKCFbc2NyaXB0IGNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6bmlsXSkKKyAgICAgICAgICAg
IENSQVNIKCk7CisKKyAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZm9y
Y2VEaXNrQ2FjaGU7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRl
SlNTY3JpcHQ6c2NyaXB0XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoW3Jlc3VsdCBpc051bWJlcl0pOworICAgICAgICBjaGVja1Jlc3Vs
dChAIkV4cGVjdGVkIDMwIGFzIHJlc3VsdCIsIFtbcmVzdWx0IHRvTnVtYmVyXSBpbnRWYWx1ZV0g
PT0gMzApOworICAgIH0KKworICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSA9IGZh
bHNlOworCisgICAgTlNGaWxlTWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl07CisgICAgQk9PTCByZW1vdmVkQWxsID0gW2ZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFVSTDpjYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICBjaGVja1Jlc3VsdChAIlJlbW92
ZWQgYWxsIHRlbXAgZmlsZXMgY3JlYXRlZCIsIHJlbW92ZWRBbGwpOworfQorCiBzdGF0aWMgdm9p
ZCB0ZXN0UHJvZ3JhbUpTU2NyaXB0RXhjZXB0aW9uKCkKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKQEAgLTIzMTksNiArMjM2Myw4IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hh
ciogZmlsdGUKICAgICBSVU4odGVzdFByb2dyYW1CeXRlY29kZUNhY2hlKCkpOwogICAgIFJVTih0
ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcihrSlNTY3JpcHRUeXBlUHJvZ3JhbSkpOwog
ICAgIFJVTih0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcihrSlNTY3JpcHRUeXBlTW9k
dWxlKSk7CisgICAgUlVOKHRlc3RCeXRlY29kZUNhY2hlV2l0aFNhbWVDYWNoZUZpbGVBbmREaWZm
ZXJlbnRTY3JpcHQoZmFsc2UpKTsKKyAgICBSVU4odGVzdEJ5dGVjb2RlQ2FjaGVXaXRoU2FtZUNh
Y2hlRmlsZUFuZERpZmZlcmVudFNjcmlwdCh0cnVlKSk7CiAgICAgUlVOKHRlc3RQcm9ncmFtSlNT
Y3JpcHRFeGNlcHRpb24oKSk7CiAKICAgICBSVU4odGVzdExvYWRlclJlamVjdHNOaWxTY3JpcHRV
UkwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlw
ZXMuY3BwCShyZXZpc2lvbiAyNDE5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3Vt
ZW50c1RhYmxlLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZUtleS5oIgorI2luY2x1ZGUgIlNvdXJj
ZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkTWV0YWRh
dGFUYWJsZUlubGluZXMuaCIKQEAgLTIxNyw3ICsyMTgsNyBAQCBjbGFzcyBEZWNvZGVyIHsKIHB1
YmxpYzoKICAgICBEZWNvZGVyKFZNJiB2bSwgY29uc3Qgdm9pZCogYmFzZUFkZHJlc3MsIHNpemVf
dCBzaXplKQogICAgICAgICA6IG1fdm0odm0pCi0gICAgICAgICwgbV9iYXNlQWRkcmVzcyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiYXNlQWRkcmVzcykpCisgICAgICAgICwgbV9i
YXNlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJhc2VBZGRyZXNzKSkKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9zaXplKHNpemUpCiAjZW5kaWYKQEAgLTMzNCwxMyAr
MzM1LDEzIEBAIHByb3RlY3RlZDoKICAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ICE9IHNfaW52YWxpZE9mZnNldCk7Ci0gICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih0aGlzKSArIG1fb2Zm
c2V0OworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQ4X3QqPih0aGlzKSAr
IG1fb2Zmc2V0OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgY29uc3Qg
VCogYnVmZmVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNvbnN0IFQqPihidWZmZXIoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3Qg
VCo+KGJ1ZmZlcigpKTsKICAgICB9CiAKICAgICB1aW50OF90KiBhbGxvY2F0ZShFbmNvZGVyJiBl
bmNvZGVyLCBzaXplX3Qgc2l6ZSkKQEAgLTM5OCw3ICszOTksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHB0cmRpZmZfdCBidWZmZXJPZmZzZXQgPSBkZWNvZGVyLm9mZnNldE9mKHRoaXMtPmJ1ZmZlcigp
KTsKICAgICAgICAgaWYgKFdURjo6T3B0aW9uYWw8dm9pZCo+IHB0ciA9IGRlY29kZXIuY2FjaGVk
UHRyRm9yT2Zmc2V0KGJ1ZmZlck9mZnNldCkpIHsKICAgICAgICAgICAgIGlzTmV3QWxsb2NhdGlv
biA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U291cmNlKj4o
KnB0cik7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFNvdXJjZSo+KCpwdHIpOwog
ICAgICAgICB9CiAKICAgICAgICAgaXNOZXdBbGxvY2F0aW9uID0gdHJ1ZTsKQEAgLTE4MDAsNiAr
MTgwMSwyMSBAQCBlbnVtIENhY2hlZENvZGVCbG9ja1RhZyB7CiAgICAgQ2FjaGVkRXZhbENvZGVC
bG9ja1RhZywKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgQ2FjaGVkQ29kZUJsb2NrVGFnIHRhZ0Zy
b21Tb3VyY2VDb2RlVHlwZShTb3VyY2VDb2RlVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgU291cmNlQ29kZVR5cGU6OlByb2dyYW1UeXBlOgorICAgICAgICByZXR1
cm4gQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZzsKKyAgICBjYXNlIFNvdXJjZUNvZGVUeXBlOjpF
dmFsVHlwZToKKyAgICAgICAgcmV0dXJuIENhY2hlZEV2YWxDb2RlQmxvY2tUYWc7CisgICAgY2Fz
ZSBTb3VyY2VDb2RlVHlwZTo6TW9kdWxlVHlwZToKKyAgICAgICAgcmV0dXJuIENhY2hlZE1vZHVs
ZUNvZGVCbG9ja1RhZzsKKyAgICBjYXNlIFNvdXJjZUNvZGVUeXBlOjpGdW5jdGlvblR5cGU6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q2FjaGVkQ29kZUJsb2NrVGFnPigtMSk7CisgICAgfQorfQorCiB0ZW1wbGF0ZTw+CiBzdHJ1Y3Qg
Q2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7CiAgICAg
dXNpbmcgdHlwZSA9IENhY2hlZFByb2dyYW1Db2RlQmxvY2s7CkBAIC0yMDYzLDYgKzIwNzksNyBA
QCBwcml2YXRlOgogY2xhc3MgR2VuZXJpY0NhY2hlRW50cnkgewogcHVibGljOgogICAgIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxv
Y2sqPiYpIGNvbnN0OworICAgIGJvb2wgaXNTdGlsbFZhbGlkKERlY29kZXImLCBjb25zdCBTb3Vy
Y2VDb2RlS2V5JiwgQ2FjaGVkQ29kZUJsb2NrVGFnKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAg
IEdlbmVyaWNDYWNoZUVudHJ5KEVuY29kZXImIGVuY29kZXIsIENhY2hlZENvZGVCbG9ja1RhZyB0
YWcpCkBAIC0yMDk2LDYgKzIxMTMsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQg
R2VuZXJpY0NhY2hlRW50cnk7CiAKKyAgICBib29sIGlzU3RpbGxWYWxpZChEZWNvZGVyJiBkZWNv
ZGVyLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBTb3Vy
Y2VDb2RlS2V5IGRlY29kZWRLZXk7CisgICAgICAgIG1fa2V5LmRlY29kZShkZWNvZGVyLCBkZWNv
ZGVkS2V5KTsKKyAgICAgICAgcmV0dXJuIGRlY29kZWRLZXkgPT0ga2V5OworICAgIH0KKwogICAg
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBV
bmxpbmtlZENvZGVCbG9ja1R5cGUqPiYgcmVzdWx0KSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKHRhZygpID09IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlw
ZT46OnRhZyk7CkBAIC0yMTE4LDkgKzIxNDIsOSBAQCBib29sIEdlbmVyaWNDYWNoZUVudHJ5Ojpk
ZWNvZGUoRGVjb2RlciYgCiAKICAgICBzd2l0Y2ggKG1fdGFnKSB7CiAgICAgY2FzZSBDYWNoZWRQ
cm9ncmFtQ29kZUJsb2NrVGFnOgotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBDYWNoZUVudHJ5PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4qPih0aGlzKS0+ZGVjb2RlKGRl
Y29kZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayo+Jj4ocmVzdWx0KSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+Kj4odGhpcyktPmRl
Y29kZShkZWNvZGVyLCByZWludGVycHJldF9jYXN0PHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqPiY+KHJlc3VsdCkpOwogICAgIGNhc2UgQ2FjaGVkTW9k
dWxlQ29kZUJsb2NrVGFnOgotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBD
YWNoZUVudHJ5PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4qPih0aGlzKS0+ZGVjb2Rl
KGRlY29kZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+Jj4ocmVzdWx0KSk7CisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s+Kj4odGhpcyktPmRlY29kZShkZWNvZGVyLCByZWludGVycHJldF9jYXN0PHN0ZDo6cGFpcjxT
b3VyY2VDb2RlS2V5LCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPiY+KHJlc3VsdCkp
OwogICAgIGNhc2UgQ2FjaGVkRXZhbENvZGVCbG9ja1RhZzoKICAgICAgICAgLy8gV2UgZG8gbm90
IGNhY2hlIGV2YWwgY29kZSBibG9ja3MKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTIxMzIsMTEgKzIxNTYsMzEgQEAgYm9vbCBHZW5lcmljQ2FjaGVFbnRyeTo6ZGVj
b2RlKERlY29kZXImIAogI2VuZGlmCiB9CiAKK2Jvb2wgR2VuZXJpY0NhY2hlRW50cnk6OmlzU3Rp
bGxWYWxpZChEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIENhY2hl
ZENvZGVCbG9ja1RhZyB0YWcpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVWZXJzaW9uICE9IEpT
Q19CWVRFQ09ERV9DQUNIRV9WRVJTSU9OKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG1fYm9vdFNlc3Npb25VVUlELmRlY29kZShkZWNvZGVyKSAhPSBib290U2Vzc2lvblVVSURTdHJp
bmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICh0YWcpIHsKKyAgICBj
YXNlIENhY2hlZFByb2dyYW1Db2RlQmxvY2tUYWc6CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+Kj4odGhpcyktPmlz
U3RpbGxWYWxpZChkZWNvZGVyLCBrZXkpOworICAgIGNhc2UgQ2FjaGVkTW9kdWxlQ29kZUJsb2Nr
VGFnOgorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNvbnN0IENhY2hlRW50cnk8VW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPio+KHRoaXMpLT5pc1N0aWxsVmFsaWQoZGVjb2Rlciwg
a2V5KTsKKyAgICBjYXNlIENhY2hlZEV2YWxDb2RlQmxvY2tUYWc6CisgICAgICAgIC8vIFdlIGRv
IG5vdCBjYWNoZSBldmFsIGNvZGUgYmxvY2tzCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5
cGU+CiB2b2lkIGVuY29kZUNvZGVCbG9jayhFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTb3VyY2VD
b2RlS2V5JiBrZXksIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
YXV0byogZW50cnkgPSBlbmNvZGVyLnRlbXBsYXRlIG1hbGxvYzxDYWNoZUVudHJ5PFVubGlua2Vk
Q29kZUJsb2NrVHlwZT4+KGVuY29kZXIpOwotICAgIGVudHJ5LT5lbmNvZGUoZW5jb2RlciwgIHsg
a2V5LCBqc0Nhc3Q8Y29uc3QgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oY29kZUJsb2NrKSB9KTsK
KyAgICBlbnRyeS0+ZW5jb2RlKGVuY29kZXIsIHsga2V5LCBqc0Nhc3Q8Y29uc3QgVW5saW5rZWRD
b2RlQmxvY2tUeXBlKj4oY29kZUJsb2NrKSB9KTsKIH0KIAogc3RkOjpwYWlyPE1hbGxvY1B0cjx1
aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2Rl
S2V5JiBrZXksIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC0yMTU2LDE4
ICsyMjAwLDMyIEBAIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW4KIAog
VW5saW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mIHZtLCBjb25zdCBTb3Vy
Y2VDb2RlS2V5JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7Ci0gICAg
Y29uc3QgYXV0byogY2FjaGVkRW50cnkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdlbmVyaWND
YWNoZUVudHJ5Kj4oYnVmZmVyKTsKKyAgICBjb25zdCBhdXRvKiBjYWNoZWRFbnRyeSA9IGJpdHdp
c2VfY2FzdDxjb25zdCBHZW5lcmljQ2FjaGVFbnRyeSo+KGJ1ZmZlcik7CiAgICAgRGVjb2RlciBk
ZWNvZGVyKHZtLCBidWZmZXIsIHNpemUpOwogICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBV
bmxpbmtlZENvZGVCbG9jayo+IGVudHJ5OwogICAgIHsKICAgICAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwotICAgICAgICBpZiAoIWNhY2hlZEVudHJ5LT5kZWNvZGUoZGVjb2RlciwgZW50
cnkpKQorICAgICAgICBpZiAoIWNhY2hlZEVudHJ5LT5kZWNvZGUoZGVjb2RlciwgZW50cnkpKSB7
CisgICAgICAgICAgICBkYXRhTG9nTG4oInJldHVybmluZyBudWxscHRyIGRlY29kZUNvZGVCbG9j
a0ltcGwiKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKGVudHJ5LmZpcnN0ICE9IGtleSkKKyAgICBpZiAoZW50cnkuZmlyc3QgIT0ga2V5
KSB7CisgICAgICAgIGRhdGFMb2dMbigicmV0dXJuaW5nIG51bGxwdHIgZGVjb2RlQ29kZUJsb2Nr
SW1wbCBkaWZmZXJlbnQga2V5cyIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAg
ICAgcmV0dXJuIGVudHJ5LnNlY29uZDsKIH0KIAorYm9vbCBpc0NhY2hlZEJ5dGVjb2RlU3RpbGxW
YWxpZChWTSYgdm0sIGNvbnN0IENhY2hlZEJ5dGVjb2RlJiBjYWNoZWRCeXRlY29kZSwgY29uc3Qg
U291cmNlQ29kZUtleSYga2V5LCBTb3VyY2VDb2RlVHlwZSB0eXBlKQoreworICAgIGNvbnN0IHZv
aWQqIGJ1ZmZlciA9IGNhY2hlZEJ5dGVjb2RlLmRhdGEoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGNh
Y2hlZEJ5dGVjb2RlLnNpemUoKTsKKyAgICBjb25zdCBhdXRvKiBjYWNoZWRFbnRyeSA9IGJpdHdp
c2VfY2FzdDxjb25zdCBHZW5lcmljQ2FjaGVFbnRyeSo+KGJ1ZmZlcik7CisgICAgRGVjb2RlciBk
ZWNvZGVyKHZtLCBidWZmZXIsIHNpemUpOworCisgICAgcmV0dXJuIGNhY2hlZEVudHJ5LT5pc1N0
aWxsVmFsaWQoZGVjb2Rlciwga2V5LCB0YWdGcm9tU291cmNlQ29kZVR5cGUodHlwZSkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVkVHlwZXMuaAkocmV2aXNpb24gMjQxOTYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw5ICszMCwxMiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FjaGVkQnl0ZWNvZGU7CiBjbGFzcyBTb3VyY2VD
b2RlS2V5OwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiAKK2VudW0gY2xhc3MgU291cmNlQ29k
ZVR5cGU7CisKIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW5jb2RlQ29k
ZUJsb2NrKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IFVubGlua2VkQ29kZUJsb2Nr
Kik7CiBVbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYsIGNvbnN0IFNv
dXJjZUNvZGVLZXkmLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKIApAQCAtNDMsNCArNDYsNiBAQCBV
bmxpbmtlZENvZGVCbG9ja1R5cGUqIGRlY29kZUNvZGVCbG9jayhWCiAgICAgcmV0dXJuIGpzQ2Fz
dDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihkZWNvZGVDb2RlQmxvY2tJbXBsKHZtLCBrZXksIGJ1
ZmZlciwgc2l6ZSkpOwogfQogCitib29sIGlzQ2FjaGVkQnl0ZWNvZGVTdGlsbFZhbGlkKFZNJiwg
Y29uc3QgQ2FjaGVkQnl0ZWNvZGUmLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgU291cmNlQ29kZVR5
cGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMjQxOTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDE1
ICsyMDUsMzYgQEAgdm9pZCB3cml0ZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZQogICAg
IH0pOwogfQogCi1DYWNoZWRCeXRlY29kZSBzZXJpYWxpemVCeXRlY29kZShWTSYgdm0sIFVubGlu
a2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU291cmNl
Q29kZVR5cGUgY29kZVR5cGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlLCBKU1BhcnNl
clNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKK3N0YXRp
YyBTb3VyY2VDb2RlS2V5IHNvdXJjZUNvZGVLZXlGb3JTZXJpYWxpemVkQnl0ZWNvZGUoVk0mIHZt
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTb3VyY2VDb2RlVHlwZSBjb2RlVHlwZSwg
SlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRN
b2RlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQogewotICAgIFNvdXJjZUNvZGVLZXkga2V5
KAotICAgICAgICBzb3VyY2UsIFN0cmluZygpLCBjb2RlVHlwZSwgc3RyaWN0TW9kZSwgc2NyaXB0
TW9kZSwKKyAgICByZXR1cm4gU291cmNlQ29kZUtleSgKKyAgICAgICAgc291cmNlQ29kZSwgU3Ry
aW5nKCksIGNvZGVUeXBlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLAogICAgICAgICBEZXJpdmVk
Q29udGV4dFR5cGU6Ok5vbmUsIEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgZmFsc2UsIGRlYnVnZ2Vy
TW9kZSwKICAgICAgICAgdm0udHlwZVByb2ZpbGVyKCkgPyBUeXBlUHJvZmlsZXJFbmFibGVkOjpZ
ZXMgOiBUeXBlUHJvZmlsZXJFbmFibGVkOjpObywKICAgICAgICAgdm0uY29udHJvbEZsb3dQcm9m
aWxlcigpID8gQ29udHJvbEZsb3dQcm9maWxlckVuYWJsZWQ6OlllcyA6IENvbnRyb2xGbG93UHJv
ZmlsZXJFbmFibGVkOjpObywKICAgICAgICAgV1RGOjpudWxsb3B0KTsKLSAgICBzdGQ6OnBhaXI8
TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IHJlc3VsdCA9IGVuY29kZUNvZGVCbG9jayh2bSwg
a2V5LCBjb2RlQmxvY2spOworfQorCitTb3VyY2VDb2RlS2V5IHNvdXJjZUNvZGVLZXlGb3JTZXJp
YWxpemVkUHJvZ3JhbShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCit7Cisg
ICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUgPSBKU1BhcnNlclN0cmljdE1vZGU6Ok5v
dFN0cmljdDsKKyAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSA9IEpTUGFyc2VyU2Ny
aXB0TW9kZTo6Q2xhc3NpYzsKKyAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gRGVidWdn
ZXJPZmY7CisgICAgcmV0dXJuIHNvdXJjZUNvZGVLZXlGb3JTZXJpYWxpemVkQnl0ZWNvZGUodm0s
IHNvdXJjZUNvZGUsIFNvdXJjZUNvZGVUeXBlOjpQcm9ncmFtVHlwZSwgc3RyaWN0TW9kZSwgc2Ny
aXB0TW9kZSwgZGVidWdnZXJNb2RlKTsKK30KKworU291cmNlQ29kZUtleSBzb3VyY2VDb2RlS2V5
Rm9yU2VyaWFsaXplZE1vZHVsZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUp
Cit7CisgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUgPSBKU1BhcnNlclN0cmljdE1v
ZGU6OlN0cmljdDsKKyAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSA9IEpTUGFyc2Vy
U2NyaXB0TW9kZTo6TW9kdWxlOworICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBEZWJ1
Z2dlck9mZjsKKyAgICByZXR1cm4gc291cmNlQ29kZUtleUZvclNlcmlhbGl6ZWRCeXRlY29kZSh2
bSwgc291cmNlQ29kZSwgU291cmNlQ29kZVR5cGU6Ok1vZHVsZVR5cGUsIHN0cmljdE1vZGUsIHNj
cmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSk7Cit9CisKK0NhY2hlZEJ5dGVjb2RlIHNlcmlhbGl6ZUJ5
dGVjb2RlKFZNJiB2bSwgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBTb3VyY2VDb2RlVHlwZSBjb2RlVHlwZSwgSlNQYXJzZXJTdHJpY3RNb2Rl
IHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBEZWJ1Z2dlck1vZGUg
ZGVidWdnZXJNb2RlKQoreworICAgIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVf
dD4gcmVzdWx0ID0gZW5jb2RlQ29kZUJsb2NrKHZtLAorICAgICAgICBzb3VyY2VDb2RlS2V5Rm9y
U2VyaWFsaXplZEJ5dGVjb2RlKHZtLCBzb3VyY2UsIGNvZGVUeXBlLCBzdHJpY3RNb2RlLCBzY3Jp
cHRNb2RlLCBkZWJ1Z2dlck1vZGUpLCBjb2RlQmxvY2spOwogICAgIHJldHVybiBDYWNoZWRCeXRl
Y29kZSB7IFdURk1vdmUocmVzdWx0LmZpcnN0KSwgcmVzdWx0LnNlY29uZCB9OwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAkocmV2aXNpb24gMjQx
OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCwzMyArMTA0LDYgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGVuZCgp
IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtl
ZENvZGVCbG9ja1R5cGU+Ci0gICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBmZXRjaEZyb21EaXNr
SW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKLSAgICB7Ci0gICAgICAgIGNv
bnN0IENhY2hlZEJ5dGVjb2RlKiBjYWNoZWRCeXRlY29kZSA9IGtleS5zb3VyY2UoKS5wcm92aWRl
cigpLmNhY2hlZEJ5dGVjb2RlKCk7Ci0gICAgICAgIGlmIChjYWNoZWRCeXRlY29kZSAmJiBjYWNo
ZWRCeXRlY29kZS0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICBWRVJCT1NFX0xPRygiRm91bmQgY2Fj
aGVkIENvZGVCbG9jayBpbiB0aGUgU291cmNlUHJvdmlkZXIiKTsKLSAgICAgICAgICAgIFVubGlu
a2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBkZWNvZGVDb2RlQmxvY2s8VW5s
aW5rZWRDb2RlQmxvY2tUeXBlPih2bSwga2V5LCBjYWNoZWRCeXRlY29kZS0+ZGF0YSgpLCBjYWNo
ZWRCeXRlY29kZS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIGlmICh1bmxpbmtlZENvZGVCbG9jaykK
LSAgICAgICAgICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlPgotICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29m
PFVubGlua2VkQ29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojp2YWx1ZSAmJiAhc3Rk
Ojppc19zYW1lPFVubGlua2VkQ29kZUJsb2NrVHlwZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrPjo6
dmFsdWUsIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+Ci0gICAgZmV0Y2hGcm9tRGlzayhWTSYgdm0s
IGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKLSAgICB7Ci0gICAgICAgIFVubGlua2VkQ29kZUJs
b2NrVHlwZSogY29kZUJsb2NrID0gZmV0Y2hGcm9tRGlza0ltcGw8VW5saW5rZWRDb2RlQmxvY2tU
eXBlPih2bSwga2V5KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlRGlza0Nh
Y2hlKCkpKQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrKTsKLSAgICAgICAg
cmV0dXJuIGNvZGVCbG9jazsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfYmFzZV9vZjxVbmxpbmtlZENvZGVCbG9jaywgVD46
OnZhbHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s+Ojp2YWx1ZSwg
VCo+Ci0gICAgZmV0Y2hGcm9tRGlzayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmKSB7IHJldHVy
biBudWxscHRyOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5
cGU+CiAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBmaW5kQ2FjaGVBbmRVcGRhdGVBZ2UoVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCiAgICAgewogICAgICAgICBwcnVuZSgpOwpA
QCAtMTkwLDYgKzE2MywzMyBAQCBwdWJsaWM6CiAgICAgaW50NjRfdCBhZ2UoKSB7IHJldHVybiBt
X2FnZTsgfQogCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJs
b2NrVHlwZT4KKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZldGNoRnJvbURpc2tJbXBsKFZN
JiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQorICAgIHsKKyAgICAgICAgY29uc3QgQ2Fj
aGVkQnl0ZWNvZGUqIGNhY2hlZEJ5dGVjb2RlID0ga2V5LnNvdXJjZSgpLnByb3ZpZGVyKCkuY2Fj
aGVkQnl0ZWNvZGUoKTsKKyAgICAgICAgaWYgKGNhY2hlZEJ5dGVjb2RlICYmIGNhY2hlZEJ5dGVj
b2RlLT5zaXplKCkpIHsKKyAgICAgICAgICAgIFZFUkJPU0VfTE9HKCJGb3VuZCBjYWNoZWQgQ29k
ZUJsb2NrIGluIHRoZSBTb3VyY2VQcm92aWRlciIpOworICAgICAgICAgICAgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGRlY29kZUNvZGVCbG9jazxVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+KHZtLCBrZXksIGNhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIGNhY2hlZEJ5dGVj
b2RlLT5zaXplKCkpOworICAgICAgICAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrKQorICAgICAg
ICAgICAgICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENv
ZGVCbG9ja1R5cGU+CisgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8VW5saW5r
ZWRDb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3Nh
bWU8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s+Ojp2YWx1ZSwg
VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4KKyAgICBmZXRjaEZyb21EaXNrKFZNJiB2bSwgY29uc3Qg
U291cmNlQ29kZUtleSYga2V5KQorICAgIHsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2sgPSBmZXRjaEZyb21EaXNrSW1wbDxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZt
LCBrZXkpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSkp
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2spOworICAgICAgICByZXR1cm4g
Y29kZUJsb2NrOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RkOjpl
bmFibGVfaWZfdDwhc3RkOjppc19iYXNlX29mPFVubGlua2VkQ29kZUJsb2NrLCBUPjo6dmFsdWUg
fHwgc3RkOjppc19zYW1lPFQsIFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZhbHVlLCBUKj4KKyAg
ICBmZXRjaEZyb21EaXNrKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYpIHsgcmV0dXJuIG51bGxw
dHI7IH0KKwogICAgIC8vIFRoaXMgY29uc3RhbnQgZmFjdG9yIGJpYXNlcyBjYWNoZSBjYXBhY2l0
eSB0b3dhcmQgYWxsb3dpbmcgYSBtaW5pbXVtCiAgICAgLy8gd29ya2luZyBzZXQgdG8gZW50ZXIg
dGhlIGNhY2hlIGJlZm9yZSBpdCBzdGFydHMgZXZpY3RpbmcuCiAgICAgc3RhdGljIGNvbnN0IFNl
Y29uZHMgd29ya2luZ1NldFRpbWU7CkBAIC0zMzAsNSArMzMwLDcgQEAgcmVjdXJzaXZlbHlHZW5l
cmF0ZVVubGlua2VkQ29kZUJsb2NrKFZNJgogCiB2b2lkIHdyaXRlQ29kZUJsb2NrKFZNJiwgY29u
c3QgU291cmNlQ29kZUtleSYsIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYpOwogQ2FjaGVkQnl0ZWNv
ZGUgc2VyaWFsaXplQnl0ZWNvZGUoVk0mLCBVbmxpbmtlZENvZGVCbG9jayosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBTb3VyY2VDb2RlVHlwZSwgSlNQYXJzZXJTdHJpY3RNb2RlLCBKU1BhcnNlclNjcmlw
dE1vZGUsIERlYnVnZ2VyTW9kZSk7CitTb3VyY2VDb2RlS2V5IHNvdXJjZUNvZGVLZXlGb3JTZXJp
YWxpemVkUHJvZ3JhbShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmKTsKK1NvdXJjZUNvZGVLZXkgc291
cmNlQ29kZUtleUZvclNlcmlhbGl6ZWRNb2R1bGUoVk0mLCBjb25zdCBTb3VyY2VDb2RlJik7CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDI0MTk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3
IEBAIGJvb2wgY2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVCeXRlY29kZShWTSYgdm0sIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2VyRXJyb3ImIGVycm9yKQorQ2FjaGVkQnl0ZWNvZGUg
Z2VuZXJhdGVQcm9ncmFtQnl0ZWNvZGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IFBhcnNlckVycm9yJiBlcnJvcikKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQo
KS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbXBsZXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21wbGV0aW9uLmgJKHJldmlzaW9uIDI0MTk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KFZNJiwgCiBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1Zh
bHVlKiBleGNlcHRpb24gPSAwKTsKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2hlY2tNb2R1bGVT
eW50YXgoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CiAKLUpT
X0VYUE9SVF9QUklWQVRFIENhY2hlZEJ5dGVjb2RlIGdlbmVyYXRlQnl0ZWNvZGUoVk0mLCBjb25z
dCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsKK0pTX0VYUE9SVF9QUklWQVRFIENhY2hlZEJ5
dGVjb2RlIGdlbmVyYXRlUHJvZ3JhbUJ5dGVjb2RlKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIFBh
cnNlckVycm9yJik7CiBKU19FWFBPUlRfUFJJVkFURSBDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZU1v
ZHVsZUJ5dGVjb2RlKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CiAKIEpT
X0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNl
Q29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4
Y2VwdGlvbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362785</attachid>
            <date>2019-02-22 16:40:34 -0800</date>
            <delta_ts>2019-02-25 17:48:34 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>22724</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxOTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE5LTAyLTIyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgSlNTY3JpcHQ6Y2FjaGVCeXRlY29kZVdpdGhFcnJvciB1cGRhdGUgdGhlIGNhY2hlIHdo
ZW4gdGhlIHNjcmlwdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTQ5MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgSlNTY3JpcHQgU1BJIHdvdWxk
IG5ldmVyIGNoZWNrIGlmIGl0cyBjYWNoZWQKKyAgICAgICAgYnl0ZWNvZGUgd2VyZSBzdGlsbCB2
YWxpZC4gVGhpcyB3b3VsZCBsZWFkIHRoZSBjYWNoZUJ5dGVjb2RlV2l0aEVycm9yCisgICAgICAg
IHN1Y2NlZWRpbmcgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBjYWNoZSB3ZXJlIHN0YWxlLiBUaGlz
IHBhdGNoIGZpeGVzCisgICAgICAgIHRoYXQgYnkgbWFraW5nIEpTU2NyaXB0IGNoZWNrIGlmIHRo
ZSBjYWNoZSBpcyBzdGlsbCB2YWxpZC4gSWYgaXQncyBub3QsCisgICAgICAgIHdlIHdpbGwgY2Fj
aGUgYnl0ZWNvZGUgd2hlbiBjYWNoZUJ5dGVjb2RlV2l0aEVycm9yIGlzIGludm9rZWQuCisKKyAg
ICAgICAgKiBBUEkvSlNTY3JpcHQubW06CisgICAgICAgICgtW0pTU2NyaXB0IHJlYWRDYWNoZV0p
OgorICAgICAgICAoLVtKU1NjcmlwdCB3cml0ZUNhY2hlOl0pOgorICAgICAgICAqIEFQSS90ZXN0
cy90ZXN0YXBpLm1tOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGVXaXRoU2FtZUNhY2hlRmls
ZUFuZERpZmZlcmVudFNjcmlwdCk6CisgICAgICAgICh0ZXN0T2JqZWN0aXZlQ0FQSSk6CisgICAg
ICAgICogcnVudGltZS9DYWNoZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkRlY29kZXI6OkRl
Y29kZXIpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUxlbmd0aE9iamVjdDo6YnVmZmVyIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlND
Ojp0YWdGcm9tU291cmNlQ29kZVR5cGUpOgorICAgICAgICAoSlNDOjpDYWNoZUVudHJ5Ojppc1N0
aWxsVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpHZW5lcmljQ2FjaGVFbnRyeTo6ZGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0NhY2hlRW50cnk6OmlzU3RpbGxWYWxpZCBj
b25zdCk6CisgICAgICAgIChKU0M6OmVuY29kZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OmRl
Y29kZUNvZGVCbG9ja0ltcGwpOgorICAgICAgICAoSlNDOjppc0NhY2hlZEJ5dGVjb2RlU3RpbGxW
YWxpZCk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRUeXBlcy5oOgorICAgICAgICAqIHJ1bnRp
bWUvQ29kZUNhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6c291cmNlQ29kZUtleUZvclNlcmlhbGl6
ZWRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OnNvdXJjZUNvZGVLZXlGb3JTZXJpYWxpemVkUHJv
Z3JhbSk6CisgICAgICAgIChKU0M6OnNvdXJjZUNvZGVLZXlGb3JTZXJpYWxpemVkTW9kdWxlKToK
KyAgICAgICAgKEpTQzo6c2VyaWFsaXplQnl0ZWNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29k
ZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwp
OgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChKU0M6OmdlbmVy
YXRlUHJvZ3JhbUJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVCeXRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmg6CisKIDIwMTktMDItMjIgIFJv
YmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBERkdCeXRlY29k
ZVBhcnNlciBzaG91bGQgbm90IGRlY2xhcmUgdGhhdCBhIG5vZGUgd29uJ3QgY2xvYmJlckV4aXQg
aWYgREZHRml4dXBQaGFzZSBjYW4gbGF0ZXIgZGVjbGFyZSBpdCBkb2VzIGNsb2JiZXJFeGl0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0JKHJldmlzaW9uIDI0MTk2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDggQEAKICNpbXBvcnQgIkpTU2NyaXB0SW50ZXJuYWwuaCIKIAogI2ltcG9y
dCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiQ2FjaGVkVHlwZXMuaCIKKyNpbXBvcnQgIkNvZGVDYWNo
ZS5oIgogI2ltcG9ydCAiSWRlbnRpZmllci5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwu
aCIKICNpbXBvcnQgIkpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCIKQEAgLTIwMSw3ICsyMDMsMTMg
QEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICB2b2lkKiBidWZmZXIgPSBtbWFwKG51bGxwdHIsIHNp
emUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKICAgICBjbG9zZShmZCk7CiAKLSAg
ICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpDYWNoZWRCeXRlY29kZSB7IGJ1ZmZlciwgc2l6ZSB9
OworICAgIEpTQzo6Q2FjaGVkQnl0ZWNvZGUgY2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUg
fTsKKworICAgIEpTQzo6Vk0mIHZtID0gbV92aXJ0dWFsTWFjaGluZS52bTsKKyAgICBjb25zdCBK
U0M6OlNvdXJjZUNvZGUmIHNvdXJjZUNvZGUgPSBbc2VsZiBqc1NvdXJjZUNvZGVdLT5zb3VyY2VD
b2RlKCk7CisgICAgSlNDOjpTb3VyY2VDb2RlS2V5IGtleSA9IG1fdHlwZSA9PSBrSlNTY3JpcHRU
eXBlUHJvZ3JhbSA/IHNvdXJjZUNvZGVLZXlGb3JTZXJpYWxpemVkUHJvZ3JhbSh2bSwgc291cmNl
Q29kZSkgOiBzb3VyY2VDb2RlS2V5Rm9yU2VyaWFsaXplZE1vZHVsZSh2bSwgc291cmNlQ29kZSk7
CisgICAgaWYgKGlzQ2FjaGVkQnl0ZWNvZGVTdGlsbFZhbGlkKHZtLCBjYWNoZWRCeXRlY29kZSwg
a2V5LCBtX3R5cGUgPT0ga0pTU2NyaXB0VHlwZVByb2dyYW0gPyBKU0M6OlNvdXJjZUNvZGVUeXBl
OjpQcm9ncmFtVHlwZSA6IEpTQzo6U291cmNlQ29kZVR5cGU6Ok1vZHVsZVR5cGUpKQorICAgICAg
ICBtX2NhY2hlZEJ5dGVjb2RlID0gV1RGTW92ZShjYWNoZWRCeXRlY29kZSk7CiB9CiAKIC0gKEJP
T0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjooTlNFcnJvciAqKillcnJvcgpAQCAtMjY5LDcgKzI3
Nyw3IEBAIC0gKEJPT0wpd3JpdGVDYWNoZTooU3RyaW5nJillcnJvcgogICAgICAgICBtX2NhY2hl
ZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUu
dm0sIFtzZWxmIGpzU291cmNlQ29kZV0tPnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIGtKU1NjcmlwdFR5cGVQcm9ncmFtOgotICAgICAgICBtX2Nh
Y2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0s
IFtzZWxmIGpzU291cmNlQ29kZV0tPnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgICAg
ICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZVByb2dyYW1CeXRlY29kZShtX3ZpcnR1
YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVdLT5zb3VyY2VDb2RlKCksIHBhcnNlckVy
cm9yKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAyNDE5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwOTQs
NiArMjA5NCw1MCBAQCBzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFCiAg
ICAgfQogfQogCitzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTYW1lQ2FjaGVGaWxl
QW5kRGlmZmVyZW50U2NyaXB0KGJvb2wgZm9yY2VEaXNrQ2FjaGUpCit7CisgICAgTlNVUkwgKmNh
Y2hlUGF0aCA9IHRlbXBGaWxlKEAiY2FjaGVQYXRoLmNhY2hlIik7CisgICAgTlNVUkwgKnNvdXJj
ZVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAibXktcGF0aCJdOworCisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZtID0gW1tKU1ZpcnR1YWxNYWNo
aW5lIGFsbG9jXSBpbml0XTsKKyAgICAgICAgTlNTdHJpbmcgKnNvdXJjZSA9IEAiZnVuY3Rpb24g
Zm9vKCkgeyByZXR1cm4gNDI7IH07IGZ1bmN0aW9uIGJhcigpIHsgcmV0dXJuIDQwOyB9OyBmb28o
KSArIGJhcigpOyI7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFs
bG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlw
dCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZVByb2dyYW0gd2l0aFNvdXJj
ZTpzb3VyY2UgYW5kU291cmNlVVJMOnNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0
aCBpblZpcnR1YWxNYWNoaW5lOnZtIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNjcmlwdCk7CisgICAgICAgIGlmICghW3NjcmlwdCBjYWNoZUJ5dGVjb2RlV2l0aEVycm9yOm5p
bF0pCisgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VE
aXNrQ2FjaGUoKSA9IGZvcmNlRGlza0NhY2hlOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBb
Y29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFtyZXN1bHQgaXNOdW1iZXJdKTsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJFeHBlY3RlZCA4MiBhcyByZXN1bHQiLCBbW3Jlc3VsdCB0b051
bWJlcl0gaW50VmFsdWVdID09IDgyKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdm0gPSBbW0pTVmlydHVhbE1hY2hpbmUgYWxsb2Nd
IGluaXRdOworICAgICAgICBOU1N0cmluZyAqc291cmNlID0gQCJmdW5jdGlvbiBmb28oKSB7IHJl
dHVybiAxMDsgfTsgZnVuY3Rpb24gYmFyKCkgeyByZXR1cm4gMjA7IH07IGZvbygpICsgYmFyKCk7
IjsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRX
aXRoVmlydHVhbE1hY2hpbmU6dm1dOworICAgICAgICBKU1NjcmlwdCAqc2NyaXB0ID0gW0pTU2Ny
aXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlUHJvZ3JhbSB3aXRoU291cmNlOnNvdXJjZSBh
bmRTb3VyY2VVUkw6c291cmNlVVJMIGFuZEJ5dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoIGluVmlydHVh
bE1hY2hpbmU6dm0gZXJyb3I6bmlsXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsK
KyAgICAgICAgaWYgKCFbc2NyaXB0IGNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6bmlsXSkKKyAgICAg
ICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgp
ID0gZm9yY2VEaXNrQ2FjaGU7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2
YWx1YXRlSlNTY3JpcHQ6c2NyaXB0XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoW3Jlc3VsdCBpc051bWJlcl0pOworICAgICAgICBjaGVj
a1Jlc3VsdChAIkV4cGVjdGVkIDMwIGFzIHJlc3VsdCIsIFtbcmVzdWx0IHRvTnVtYmVyXSBpbnRW
YWx1ZV0gPT0gMzApOworICAgIH0KKworICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUo
KSA9IGZhbHNlOworCisgICAgTlNGaWxlTWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl07CisgICAgQk9PTCByZW1vdmVkQWxsID0gW2ZpbGVNYW5hZ2Vy
IHJlbW92ZUl0ZW1BdFVSTDpjYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICBjaGVja1Jlc3VsdChA
IlJlbW92ZWQgYWxsIHRlbXAgZmlsZXMgY3JlYXRlZCIsIHJlbW92ZWRBbGwpOworfQorCiBzdGF0
aWMgdm9pZCB0ZXN0UHJvZ3JhbUpTU2NyaXB0RXhjZXB0aW9uKCkKIHsKICAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKQEAgLTIzMTksNiArMjM2Myw4IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29u
c3QgY2hhciogZmlsdGUKICAgICBSVU4odGVzdFByb2dyYW1CeXRlY29kZUNhY2hlKCkpOwogICAg
IFJVTih0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcihrSlNTY3JpcHRUeXBlUHJvZ3Jh
bSkpOwogICAgIFJVTih0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcihrSlNTY3JpcHRU
eXBlTW9kdWxlKSk7CisgICAgUlVOKHRlc3RCeXRlY29kZUNhY2hlV2l0aFNhbWVDYWNoZUZpbGVB
bmREaWZmZXJlbnRTY3JpcHQoZmFsc2UpKTsKKyAgICBSVU4odGVzdEJ5dGVjb2RlQ2FjaGVXaXRo
U2FtZUNhY2hlRmlsZUFuZERpZmZlcmVudFNjcmlwdCh0cnVlKSk7CiAgICAgUlVOKHRlc3RQcm9n
cmFtSlNTY3JpcHRFeGNlcHRpb24oKSk7CiAKICAgICBSVU4odGVzdExvYWRlclJlamVjdHNOaWxT
Y3JpcHRVUkwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyNDE5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlNjb3Bl
ZEFyZ3VtZW50c1RhYmxlLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZUtleS5oIgorI2luY2x1ZGUg
IlNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2Vk
TWV0YWRhdGFUYWJsZUlubGluZXMuaCIKQEAgLTIxNyw3ICsyMTgsNyBAQCBjbGFzcyBEZWNvZGVy
IHsKIHB1YmxpYzoKICAgICBEZWNvZGVyKFZNJiB2bSwgY29uc3Qgdm9pZCogYmFzZUFkZHJlc3Ms
IHNpemVfdCBzaXplKQogICAgICAgICA6IG1fdm0odm0pCi0gICAgICAgICwgbV9iYXNlQWRkcmVz
cyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiYXNlQWRkcmVzcykpCisgICAgICAg
ICwgbV9iYXNlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJhc2VBZGRyZXNz
KSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9zaXplKHNpemUpCiAjZW5kaWYKQEAgLTMz
NCwxMyArMzM1LDEzIEBAIHByb3RlY3RlZDoKICAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ICE9IHNfaW52YWxpZE9mZnNldCk7
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih0aGlzKSAr
IG1fb2Zmc2V0OworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQ4X3QqPih0
aGlzKSArIG1fb2Zmc2V0OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAg
Y29uc3QgVCogYnVmZmVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNvbnN0IFQqPihidWZmZXIoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
Y29uc3QgVCo+KGJ1ZmZlcigpKTsKICAgICB9CiAKICAgICB1aW50OF90KiBhbGxvY2F0ZShFbmNv
ZGVyJiBlbmNvZGVyLCBzaXplX3Qgc2l6ZSkKQEAgLTM5OCw3ICszOTksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHB0cmRpZmZfdCBidWZmZXJPZmZzZXQgPSBkZWNvZGVyLm9mZnNldE9mKHRoaXMtPmJ1
ZmZlcigpKTsKICAgICAgICAgaWYgKFdURjo6T3B0aW9uYWw8dm9pZCo+IHB0ciA9IGRlY29kZXIu
Y2FjaGVkUHRyRm9yT2Zmc2V0KGJ1ZmZlck9mZnNldCkpIHsKICAgICAgICAgICAgIGlzTmV3QWxs
b2NhdGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U291
cmNlKj4oKnB0cik7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFNvdXJjZSo+KCpw
dHIpOwogICAgICAgICB9CiAKICAgICAgICAgaXNOZXdBbGxvY2F0aW9uID0gdHJ1ZTsKQEAgLTE4
MDAsNiArMTgwMSwyMSBAQCBlbnVtIENhY2hlZENvZGVCbG9ja1RhZyB7CiAgICAgQ2FjaGVkRXZh
bENvZGVCbG9ja1RhZywKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgQ2FjaGVkQ29kZUJsb2NrVGFn
IHRhZ0Zyb21Tb3VyY2VDb2RlVHlwZShTb3VyY2VDb2RlVHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgU291cmNlQ29kZVR5cGU6OlByb2dyYW1UeXBlOgorICAgICAg
ICByZXR1cm4gQ2FjaGVkUHJvZ3JhbUNvZGVCbG9ja1RhZzsKKyAgICBjYXNlIFNvdXJjZUNvZGVU
eXBlOjpFdmFsVHlwZToKKyAgICAgICAgcmV0dXJuIENhY2hlZEV2YWxDb2RlQmxvY2tUYWc7Cisg
ICAgY2FzZSBTb3VyY2VDb2RlVHlwZTo6TW9kdWxlVHlwZToKKyAgICAgICAgcmV0dXJuIENhY2hl
ZE1vZHVsZUNvZGVCbG9ja1RhZzsKKyAgICBjYXNlIFNvdXJjZUNvZGVUeXBlOjpGdW5jdGlvblR5
cGU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q2FjaGVkQ29kZUJsb2NrVGFnPigtMSk7CisgICAgfQorfQorCiB0ZW1wbGF0ZTw+CiBz
dHJ1Y3QgQ2FjaGVkQ29kZUJsb2NrVHlwZUltcGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7
CiAgICAgdXNpbmcgdHlwZSA9IENhY2hlZFByb2dyYW1Db2RlQmxvY2s7CkBAIC0yMDYzLDYgKzIw
NzksNyBAQCBwcml2YXRlOgogY2xhc3MgR2VuZXJpY0NhY2hlRW50cnkgewogcHVibGljOgogICAg
IGJvb2wgZGVjb2RlKERlY29kZXImLCBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRD
b2RlQmxvY2sqPiYpIGNvbnN0OworICAgIGJvb2wgaXNTdGlsbFZhbGlkKERlY29kZXImLCBjb25z
dCBTb3VyY2VDb2RlS2V5JiwgQ2FjaGVkQ29kZUJsb2NrVGFnKSBjb25zdDsKIAogcHJvdGVjdGVk
OgogICAgIEdlbmVyaWNDYWNoZUVudHJ5KEVuY29kZXImIGVuY29kZXIsIENhY2hlZENvZGVCbG9j
a1RhZyB0YWcpCkBAIC0yMDk2LDYgKzIxMTMsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBm
cmllbmQgR2VuZXJpY0NhY2hlRW50cnk7CiAKKyAgICBib29sIGlzU3RpbGxWYWxpZChEZWNvZGVy
JiBkZWNvZGVyLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpIGNvbnN0CisgICAgeworICAgICAg
ICBTb3VyY2VDb2RlS2V5IGRlY29kZWRLZXk7CisgICAgICAgIG1fa2V5LmRlY29kZShkZWNvZGVy
LCBkZWNvZGVkS2V5KTsKKyAgICAgICAgcmV0dXJuIGRlY29kZWRLZXkgPT0ga2V5OworICAgIH0K
KwogICAgIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VDb2Rl
S2V5LCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqPiYgcmVzdWx0KSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKHRhZygpID09IENhY2hlZENvZGVCbG9ja1R5cGVJbXBsPFVubGlua2VkQ29kZUJs
b2NrVHlwZT46OnRhZyk7CkBAIC0yMTE4LDkgKzIxNDIsOSBAQCBib29sIEdlbmVyaWNDYWNoZUVu
dHJ5OjpkZWNvZGUoRGVjb2RlciYgCiAKICAgICBzd2l0Y2ggKG1fdGFnKSB7CiAgICAgY2FzZSBD
YWNoZWRQcm9ncmFtQ29kZUJsb2NrVGFnOgotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBDYWNoZUVudHJ5PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4qPih0aGlzKS0+ZGVj
b2RlKGRlY29kZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jayo+Jj4ocmVzdWx0KSk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+Kj4odGhp
cyktPmRlY29kZShkZWNvZGVyLCByZWludGVycHJldF9jYXN0PHN0ZDo6cGFpcjxTb3VyY2VDb2Rl
S2V5LCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqPiY+KHJlc3VsdCkpOwogICAgIGNhc2UgQ2Fj
aGVkTW9kdWxlQ29kZUJsb2NrVGFnOgotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBDYWNoZUVudHJ5PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4qPih0aGlzKS0+
ZGVjb2RlKGRlY29kZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpwYWlyPFNvdXJjZUNvZGVLZXks
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+Jj4ocmVzdWx0KSk7CisgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2s+Kj4odGhpcyktPmRlY29kZShkZWNvZGVyLCByZWludGVycHJldF9jYXN0PHN0ZDo6
cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPiY+KHJl
c3VsdCkpOwogICAgIGNhc2UgQ2FjaGVkRXZhbENvZGVCbG9ja1RhZzoKICAgICAgICAgLy8gV2Ug
ZG8gbm90IGNhY2hlIGV2YWwgY29kZSBibG9ja3MKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTIxMzIsMTEgKzIxNTYsMzEgQEAgYm9vbCBHZW5lcmljQ2FjaGVFbnRy
eTo6ZGVjb2RlKERlY29kZXImIAogI2VuZGlmCiB9CiAKK2Jvb2wgR2VuZXJpY0NhY2hlRW50cnk6
OmlzU3RpbGxWYWxpZChEZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXks
IENhY2hlZENvZGVCbG9ja1RhZyB0YWcpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVWZXJzaW9u
ICE9IEpTQ19CWVRFQ09ERV9DQUNIRV9WRVJTSU9OKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fYm9vdFNlc3Npb25VVUlELmRlY29kZShkZWNvZGVyKSAhPSBib290U2Vzc2lvblVV
SURTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICh0YWcpIHsK
KyAgICBjYXNlIENhY2hlZFByb2dyYW1Db2RlQmxvY2tUYWc6CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8Y29uc3QgQ2FjaGVFbnRyeTxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+Kj4odGhp
cyktPmlzU3RpbGxWYWxpZChkZWNvZGVyLCBrZXkpOworICAgIGNhc2UgQ2FjaGVkTW9kdWxlQ29k
ZUJsb2NrVGFnOgorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNvbnN0IENhY2hlRW50cnk8
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPio+KHRoaXMpLT5pc1N0aWxsVmFsaWQoZGVj
b2Rlciwga2V5KTsKKyAgICBjYXNlIENhY2hlZEV2YWxDb2RlQmxvY2tUYWc6CisgICAgICAgIC8v
IFdlIGRvIG5vdCBjYWNoZSBldmFsIGNvZGUgYmxvY2tzCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVC
bG9ja1R5cGU+CiB2b2lkIGVuY29kZUNvZGVCbG9jayhFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBT
b3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CiAgICAgYXV0byogZW50cnkgPSBlbmNvZGVyLnRlbXBsYXRlIG1hbGxvYzxDYWNoZUVudHJ5PFVu
bGlua2VkQ29kZUJsb2NrVHlwZT4+KGVuY29kZXIpOwotICAgIGVudHJ5LT5lbmNvZGUoZW5jb2Rl
ciwgIHsga2V5LCBqc0Nhc3Q8Y29uc3QgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oY29kZUJsb2Nr
KSB9KTsKKyAgICBlbnRyeS0+ZW5jb2RlKGVuY29kZXIsIHsga2V5LCBqc0Nhc3Q8Y29uc3QgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKj4oY29kZUJsb2NrKSB9KTsKIH0KIAogc3RkOjpwYWlyPE1hbGxv
Y1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3Vy
Y2VDb2RlS2V5JiBrZXksIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC0y
MTU2LDcgKzIyMDAsNyBAQCBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IGVu
CiAKIFVubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiB2bSwgY29uc3Qg
U291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQogewot
ICAgIGNvbnN0IGF1dG8qIGNhY2hlZEVudHJ5ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHZW5l
cmljQ2FjaGVFbnRyeSo+KGJ1ZmZlcik7CisgICAgY29uc3QgYXV0byogY2FjaGVkRW50cnkgPSBi
aXR3aXNlX2Nhc3Q8Y29uc3QgR2VuZXJpY0NhY2hlRW50cnkqPihidWZmZXIpOwogICAgIERlY29k
ZXIgZGVjb2Rlcih2bSwgYnVmZmVyLCBzaXplKTsKICAgICBzdGQ6OnBhaXI8U291cmNlQ29kZUtl
eSwgVW5saW5rZWRDb2RlQmxvY2sqPiBlbnRyeTsKICAgICB7CkBAIC0yMTcwLDQgKzIyMTQsMTYg
QEAgVW5saW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVgogICAgIHJldHVybiBl
bnRyeS5zZWNvbmQ7CiB9CiAKK2Jvb2wgaXNDYWNoZWRCeXRlY29kZVN0aWxsVmFsaWQoVk0mIHZt
LCBjb25zdCBDYWNoZWRCeXRlY29kZSYgY2FjaGVkQnl0ZWNvZGUsIGNvbnN0IFNvdXJjZUNvZGVL
ZXkmIGtleSwgU291cmNlQ29kZVR5cGUgdHlwZSkKK3sKKyAgICBjb25zdCB2b2lkKiBidWZmZXIg
PSBjYWNoZWRCeXRlY29kZS5kYXRhKCk7CisgICAgc2l6ZV90IHNpemUgPSBjYWNoZWRCeXRlY29k
ZS5zaXplKCk7CisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29u
c3QgYXV0byogY2FjaGVkRW50cnkgPSBiaXR3aXNlX2Nhc3Q8Y29uc3QgR2VuZXJpY0NhY2hlRW50
cnkqPihidWZmZXIpOworICAgIERlY29kZXIgZGVjb2Rlcih2bSwgYnVmZmVyLCBzaXplKTsKKwor
ICAgIHJldHVybiBjYWNoZWRFbnRyeS0+aXNTdGlsbFZhbGlkKGRlY29kZXIsIGtleSwgdGFnRnJv
bVNvdXJjZUNvZGVUeXBlKHR5cGUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmgJKHJldmlzaW9uIDI0
MTk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsOSArMzAsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENh
Y2hlZEJ5dGVjb2RlOwogY2xhc3MgU291cmNlQ29kZUtleTsKIGNsYXNzIFVubGlua2VkQ29kZUJs
b2NrOwogCitlbnVtIGNsYXNzIFNvdXJjZUNvZGVUeXBlOworCiBzdGQ6OnBhaXI8TWFsbG9jUHRy
PHVpbnQ4X3Q+LCBzaXplX3Q+IGVuY29kZUNvZGVCbG9jayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVL
ZXkmLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayopOwogVW5saW5rZWRDb2RlQmxvY2sqIGRlY29k
ZUNvZGVCbG9ja0ltcGwoVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3Qgdm9pZCosIHNp
emVfdCk7CiAKQEAgLTQzLDQgKzQ2LDYgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBkZWNvZGVD
b2RlQmxvY2soVgogICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oZGVj
b2RlQ29kZUJsb2NrSW1wbCh2bSwga2V5LCBidWZmZXIsIHNpemUpKTsKIH0KIAorYm9vbCBpc0Nh
Y2hlZEJ5dGVjb2RlU3RpbGxWYWxpZChWTSYsIGNvbnN0IENhY2hlZEJ5dGVjb2RlJiwgY29uc3Qg
U291cmNlQ29kZUtleSYsIFNvdXJjZUNvZGVUeXBlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHJldmlz
aW9uIDI0MTk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxNSArMjA1LDM2IEBAIHZvaWQgd3JpdGVDb2RlQmxv
Y2soVk0mIHZtLCBjb25zdCBTb3VyY2UKICAgICB9KTsKIH0KIAotQ2FjaGVkQnl0ZWNvZGUgc2Vy
aWFsaXplQnl0ZWNvZGUoVk0mIHZtLCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNvdXJjZUNvZGVUeXBlIGNvZGVUeXBlLCBKU1BhcnNlclN0
cmljdE1vZGUgc3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIERlYnVn
Z2VyTW9kZSBkZWJ1Z2dlck1vZGUpCitzdGF0aWMgU291cmNlQ29kZUtleSBzb3VyY2VDb2RlS2V5
Rm9yU2VyaWFsaXplZEJ5dGVjb2RlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29k
ZSwgU291cmNlQ29kZVR5cGUgY29kZVR5cGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2Rl
LCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9k
ZSkKIHsKLSAgICBTb3VyY2VDb2RlS2V5IGtleSgKLSAgICAgICAgc291cmNlLCBTdHJpbmcoKSwg
Y29kZVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsCisgICAgcmV0dXJuIFNvdXJjZUNvZGVL
ZXkoCisgICAgICAgIHNvdXJjZUNvZGUsIFN0cmluZygpLCBjb2RlVHlwZSwgc3RyaWN0TW9kZSwg
c2NyaXB0TW9kZSwKICAgICAgICAgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBFdmFsQ29udGV4
dFR5cGU6Ok5vbmUsIGZhbHNlLCBkZWJ1Z2dlck1vZGUsCiAgICAgICAgIHZtLnR5cGVQcm9maWxl
cigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8s
CiAgICAgICAgIHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRyb2xGbG93UHJvZmlsZXJF
bmFibGVkOjpZZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6Tm8sCiAgICAgICAgIFdU
Rjo6bnVsbG9wdCk7Ci0gICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBy
ZXN1bHQgPSBlbmNvZGVDb2RlQmxvY2sodm0sIGtleSwgY29kZUJsb2NrKTsKK30KKworU291cmNl
Q29kZUtleSBzb3VyY2VDb2RlS2V5Rm9yU2VyaWFsaXplZFByb2dyYW0oVk0mIHZtLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2VDb2RlKQoreworICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RN
b2RlID0gSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Q7CisgICAgSlNQYXJzZXJTY3JpcHRN
b2RlIHNjcmlwdE1vZGUgPSBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWM7CisgICAgRGVidWdn
ZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IERlYnVnZ2VyT2ZmOworICAgIHJldHVybiBzb3VyY2VDb2Rl
S2V5Rm9yU2VyaWFsaXplZEJ5dGVjb2RlKHZtLCBzb3VyY2VDb2RlLCBTb3VyY2VDb2RlVHlwZTo6
UHJvZ3JhbVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSk7Cit9CisK
K1NvdXJjZUNvZGVLZXkgc291cmNlQ29kZUtleUZvclNlcmlhbGl6ZWRNb2R1bGUoVk0mIHZtLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQoreworICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBz
dHJpY3RNb2RlID0gSlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3Q7CisgICAgSlNQYXJzZXJTY3Jp
cHRNb2RlIHNjcmlwdE1vZGUgPSBKU1BhcnNlclNjcmlwdE1vZGU6Ok1vZHVsZTsKKyAgICBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gRGVidWdnZXJPZmY7CisgICAgcmV0dXJuIHNvdXJjZUNv
ZGVLZXlGb3JTZXJpYWxpemVkQnl0ZWNvZGUodm0sIHNvdXJjZUNvZGUsIFNvdXJjZUNvZGVUeXBl
OjpNb2R1bGVUeXBlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUpOworfQor
CitDYWNoZWRCeXRlY29kZSBzZXJpYWxpemVCeXRlY29kZShWTSYgdm0sIFVubGlua2VkQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU291cmNlQ29kZVR5cGUg
Y29kZVR5cGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlLCBKU1BhcnNlclNjcmlwdE1v
ZGUgc2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSkKK3sKKyAgICBzdGQ6OnBh
aXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IHJlc3VsdCA9IGVuY29kZUNvZGVCbG9jayh2
bSwKKyAgICAgICAgc291cmNlQ29kZUtleUZvclNlcmlhbGl6ZWRCeXRlY29kZSh2bSwgc291cmNl
LCBjb2RlVHlwZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlKSwgY29kZUJs
b2NrKTsKICAgICByZXR1cm4gQ2FjaGVkQnl0ZWNvZGUgeyBXVEZNb3ZlKHJlc3VsdC5maXJzdCks
IHJlc3VsdC5zZWNvbmQgfTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29kZUNhY2hlLmgJKHJldmlzaW9uIDI0MTk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMzMgKzEwNCw2IEBA
IHB1YmxpYzoKICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgotICAgIFVubGlua2Vk
Q29kZUJsb2NrVHlwZSogZmV0Y2hGcm9tRGlza0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2Rl
S2V5JiBrZXkpCi0gICAgewotICAgICAgICBjb25zdCBDYWNoZWRCeXRlY29kZSogY2FjaGVkQnl0
ZWNvZGUgPSBrZXkuc291cmNlKCkucHJvdmlkZXIoKS5jYWNoZWRCeXRlY29kZSgpOwotICAgICAg
ICBpZiAoY2FjaGVkQnl0ZWNvZGUgJiYgY2FjaGVkQnl0ZWNvZGUtPnNpemUoKSkgewotICAgICAg
ICAgICAgVkVSQk9TRV9MT0coIkZvdW5kIGNhY2hlZCBDb2RlQmxvY2sgaW4gdGhlIFNvdXJjZVBy
b3ZpZGVyIik7Ci0gICAgICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29k
ZUJsb2NrID0gZGVjb2RlQ29kZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSwg
Y2FjaGVkQnl0ZWNvZGUtPmRhdGEoKSwgY2FjaGVkQnl0ZWNvZGUtPnNpemUoKSk7Ci0gICAgICAg
ICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2spCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVubGlu
a2VkQ29kZUJsb2NrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KLSAgICBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxVbmxpbmtlZENvZGVCbG9jaywgVW5saW5rZWRD
b2RlQmxvY2tUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxVbmxpbmtlZENvZGVCbG9ja1R5
cGUsIFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZhbHVlLCBVbmxpbmtlZENvZGVCbG9ja1R5cGUq
PgotICAgIGZldGNoRnJvbURpc2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCi0g
ICAgewotICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jayA9IGZldGNoRnJv
bURpc2tJbXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpKSkKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBjb2RlQmxvY2s7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2Jh
c2Vfb2Y8VW5saW5rZWRDb2RlQmxvY2ssIFQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgVW5s
aW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFsdWUsIFQqPgotICAgIGZldGNoRnJvbURpc2soVk0mLCBj
b25zdCBTb3VyY2VDb2RlS2V5JikgeyByZXR1cm4gbnVsbHB0cjsgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgogICAgIFVubGlua2VkQ29kZUJsb2NrVHlw
ZSogZmluZENhY2hlQW5kVXBkYXRlQWdlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5
KQogICAgIHsKICAgICAgICAgcHJ1bmUoKTsKQEAgLTE5MCw2ICsxNjMsMzMgQEAgcHVibGljOgog
ICAgIGludDY0X3QgYWdlKCkgeyByZXR1cm4gbV9hZ2U7IH0KIAogcHJpdmF0ZToKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CisgICAgVW5saW5rZWRDb2RlQmxv
Y2tUeXBlKiBmZXRjaEZyb21EaXNrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtl
eSkKKyAgICB7CisgICAgICAgIGNvbnN0IENhY2hlZEJ5dGVjb2RlKiBjYWNoZWRCeXRlY29kZSA9
IGtleS5zb3VyY2UoKS5wcm92aWRlcigpLmNhY2hlZEJ5dGVjb2RlKCk7CisgICAgICAgIGlmIChj
YWNoZWRCeXRlY29kZSAmJiBjYWNoZWRCeXRlY29kZS0+c2l6ZSgpKSB7CisgICAgICAgICAgICBW
RVJCT1NFX0xPRygiRm91bmQgY2FjaGVkIENvZGVCbG9jayBpbiB0aGUgU291cmNlUHJvdmlkZXIi
KTsKKyAgICAgICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sg
PSBkZWNvZGVDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2bSwga2V5LCBjYWNoZWRC
eXRlY29kZS0+ZGF0YSgpLCBjYWNoZWRCeXRlY29kZS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGlm
ICh1bmxpbmtlZENvZGVCbG9jaykKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5saW5rZWRDb2Rl
QmxvY2s7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgorICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19iYXNlX29mPFVubGlua2VkQ29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9j
a1R5cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFVubGlua2VkQ29kZUJsb2NrVHlwZSwgVW5s
aW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFsdWUsIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+CisgICAg
ZmV0Y2hGcm9tRGlzayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKKyAgICB7Cisg
ICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrID0gZmV0Y2hGcm9tRGlza0lt
cGw8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2bSwga2V5KTsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkpKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfYmFzZV9vZjxV
bmxpbmtlZENvZGVCbG9jaywgVD46OnZhbHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBVbmxpbmtlZEV2
YWxDb2RlQmxvY2s+Ojp2YWx1ZSwgVCo+CisgICAgZmV0Y2hGcm9tRGlzayhWTSYsIGNvbnN0IFNv
dXJjZUNvZGVLZXkmKSB7IHJldHVybiBudWxscHRyOyB9CisKICAgICAvLyBUaGlzIGNvbnN0YW50
IGZhY3RvciBiaWFzZXMgY2FjaGUgY2FwYWNpdHkgdG93YXJkIGFsbG93aW5nIGEgbWluaW11bQog
ICAgIC8vIHdvcmtpbmcgc2V0IHRvIGVudGVyIHRoZSBjYWNoZSBiZWZvcmUgaXQgc3RhcnRzIGV2
aWN0aW5nLgogICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIHdvcmtpbmdTZXRUaW1lOwpAQCAtMzMw
LDUgKzMzMCw3IEBAIHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jayhWTSYKIAog
dm9pZCB3cml0ZUNvZGVCbG9jayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmLCBjb25zdCBTb3Vy
Y2VDb2RlVmFsdWUmKTsKIENhY2hlZEJ5dGVjb2RlIHNlcmlhbGl6ZUJ5dGVjb2RlKFZNJiwgVW5s
aW5rZWRDb2RlQmxvY2sqLCBjb25zdCBTb3VyY2VDb2RlJiwgU291cmNlQ29kZVR5cGUsIEpTUGFy
c2VyU3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlLCBEZWJ1Z2dlck1vZGUpOworU291cmNl
Q29kZUtleSBzb3VyY2VDb2RlS2V5Rm9yU2VyaWFsaXplZFByb2dyYW0oVk0mLCBjb25zdCBTb3Vy
Y2VDb2RlJik7CitTb3VyY2VDb2RlS2V5IHNvdXJjZUNvZGVLZXlGb3JTZXJpYWxpemVkTW9kdWxl
KFZNJiwgY29uc3QgU291cmNlQ29kZSYpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAy
NDE5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBib29sIGNoZWNrTW9kdWxlU3ludGF4KEV4
ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNhY2hlZEJ5dGVjb2RlIGdl
bmVyYXRlQnl0ZWNvZGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckVy
cm9yJiBlcnJvcikKK0NhY2hlZEJ5dGVjb2RlIGdlbmVyYXRlUHJvZ3JhbUJ5dGVjb2RlKFZNJiB2
bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7CiAgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmlu
Z1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCShyZXZpc2lvbiAy
NDE5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVj
a1N5bnRheChWTSYsIAogSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVja1N5bnRheChFeGVjU3Rh
dGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7CiBKU19FWFBP
UlRfUFJJVkFURSBib29sIGNoZWNrTW9kdWxlU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBQYXJzZXJFcnJvciYpOwogCi1KU19FWFBPUlRfUFJJVkFURSBDYWNoZWRCeXRlY29k
ZSBnZW5lcmF0ZUJ5dGVjb2RlKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7
CitKU19FWFBPUlRfUFJJVkFURSBDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZVByb2dyYW1CeXRlY29k
ZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOwogSlNfRVhQT1JUX1BSSVZB
VEUgQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVNb2R1bGVCeXRlY29kZShWTSYsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBQYXJzZXJFcnJvciYpOwogCiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1
YXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFr
ZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pOwo=
</data>
<flag name="review"
          id="379391"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>