<?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>164754</bug_id>
          
          <creation_ts>2016-11-14 17:19:31 -0800</creation_ts>
          <short_desc>IndexedDB 2.0: Key collation during SQLite lookups is insanely slow</short_desc>
          <delta_ts>2016-11-15 18:41:44 -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>WebCore Misc.</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>
          
          <blocked>160306</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1251273</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-14 17:19:31 -0800</bug_when>
    <thetext>IndexedDB 2.0: Key collation during SQLite lookups is insanely slow

This is what causes us to fail imported/w3c/web-platform-tests/IndexedDB/idbindex-multientry-big.htm due to timing out.

Looking at profiles one can confirm that a vast majority of the time is spent under WebCore::idbKeyCollate, and most of that time is spent allocating, using, and deallocating both Strings and CFPropertyLists.

Using KeyedEncoder/Decoder for IDBKeys on disk was probably a bad idea; Common keys (e.g. a number) are *MUCH* larger than they need to be, and all keys require a lot of memory churn and CPU time just for SQLite&apos;s comparison sake.

If we move to a custom serialization format targeted at IDBKeys we can vastly improve this.

That last statement is not a hypothesis; The afore mentioned idbindex-multientry-big.htm takes ~26 seconds to complete with timeouts disabled today, but with a custom format it takes less than 2 seconds.
And profiling confirms that whereas collation is ~97% of the 26 seconds, it is less than 1.4% of the ~2 seconds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251278</commentid>
    <comment_count>1</comment_count>
      <attachid>294784</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-14 17:25:41 -0800</bug_when>
    <thetext>Created attachment 294784
WIP (not ready for review)

This is almost ready.

I need to clean up a few things, but also need to clear up the glaring FIXME: Figure out the magic byte for Glib keyed coding on linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251329</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-14 19:44:23 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created attachment 294784 [details]
&gt; WIP (not ready for review)
&gt; 
&gt; This is almost ready.
&gt; 
&gt; I need to clean up a few things, but also need to clear up the glaring
&gt; FIXME: Figure out the magic byte for Glib keyed coding on linux.

After commuting home and enjoying a refreshing dinner, I of course realize I can just &quot;#if PLATFORM(MAC)&quot; the new stuff and let linux folks come along and get the new hotness working later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251353</commentid>
    <comment_count>3</comment_count>
      <attachid>294803</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-14 20:55:09 -0800</bug_when>
    <thetext>Created attachment 294803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251371</commentid>
    <comment_count>4</comment_count>
      <attachid>294812</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-14 21:52:07 -0800</bug_when>
    <thetext>Created attachment 294812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251374</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-14 22:10:27 -0800</bug_when>
    <thetext>The Windows build error:

c:\cygwin\home\buildbot\webkit\source\webcore\modules\indexeddb\server\idbserialization.cpp(166): warning C4715: &apos;WebCore::serializedTypeForKeyType&apos;: not all control paths return a value [C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]

Except every case *is* handled in that switch. It is true the last one doesn&apos;t return, but does RELEASE_ASSERT_NOT_REACHED().

Seems like an MSVC limitation and one I&apos;m not sure how we normally work around...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251375</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-14 22:27:53 -0800</bug_when>
    <thetext>Some other notes not explicitly called out that I&apos;ll add to the changelog.

Keys previously encoded with KeyedEncoderCF (binary property lists) will continue to be readable, and be comparable to both old and new style keys.

We make no effort to migrate old-style keys, but will only ever write new-style keys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251446</commentid>
    <comment_count>7</comment_count>
      <attachid>294839</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-15 08:50:07 -0800</bug_when>
    <thetext>Created attachment 294839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251485</commentid>
    <comment_count>8</comment_count>
      <attachid>294839</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-15 11:05:16 -0800</bug_when>
    <thetext>Comment on attachment 294839
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:148
&gt; +    switch (type) {

I think MSVC is complaining about the possibility that we get a type that is not in the enum, so we should have a RELEASE_ASSERT_NOT_REACHED and return something after the switch.

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:169
&gt; +#if CPU(BIG_ENDIAN) || CPU(MIDDLE_ENDIAN) || CPU(NEEDS_ALIGNED_ACCESS)

Can we not make this endianness-independent?  The same machine is going to be encoding and decoding these values, right?
If not, can we only have one #if instead of defining something that&apos;s used twice for no reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251560</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-15 12:34:10 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 294839 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294839&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:148
&gt; &gt; +    switch (type) {
&gt; 
&gt; I think MSVC is complaining about the possibility that we get a type that is
&gt; not in the enum, so we should have a RELEASE_ASSERT_NOT_REACHED and return
&gt; something after the switch.

It&apos;s being different from gcc which is sad.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:169
&gt; &gt; +#if CPU(BIG_ENDIAN) || CPU(MIDDLE_ENDIAN) || CPU(NEEDS_ALIGNED_ACCESS)
&gt; 
&gt; Can we not make this endianness-independent?  The same machine is going to
&gt; be encoding and decoding these values, right?

Not necessarily, can move database files between machines for debugging purposes, at the very least.

&gt; If not, can we only have one #if instead of defining something that&apos;s used
&gt; twice for no reason.

I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251567</commentid>
    <comment_count>10</comment_count>
      <attachid>294865</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-15 12:36:44 -0800</bug_when>
    <thetext>Created attachment 294865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251569</commentid>
    <comment_count>11</comment_count>
      <attachid>294867</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-15 12:37:37 -0800</bug_when>
    <thetext>Created attachment 294867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251585</commentid>
    <comment_count>12</comment_count>
      <attachid>294867</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-15 13:10:38 -0800</bug_when>
    <thetext>Comment on attachment 294867
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:103
&gt; +

Where does this come from?

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:135
&gt; +static const uint8_t SIDBKeyVersion = 0x00;

This is far from the comment about it being 0x00.

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:173
&gt; +    for (unsigned i = 0; i &lt; sizeof(T); i++) {

size_t

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:184
&gt; +    if (sizeof(T) == 1)

This special case is not necessary, and makes it harder to see the symmetry of this function and the corresponding write function.

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:188
&gt; +        for (unsigned i = 0; i &lt; sizeof(T); i++)

size_t

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:204
&gt; +    if (sizeof(T) == 1)

Also not necessary.

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:216
&gt; +    union {

*reinterpret_cast&lt;uint64_t*&gt;(&amp;d) accomplishes the same thing without all this union stuff.  I guess we don&apos;t have bit_cast in WebKit yet.

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:289
&gt; +    Vector&lt;char&gt; data;

I think this should be a Vector&lt;uint8_t&gt;

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.h:42
&gt; +int compareSerializedIDBKeyData(const uint8_t* buffer1, size_t buffer1Size, const uint8_t* buffer2, size_t buffer2Size);

This doesn&apos;t seem to be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251593</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-15 13:32:51 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 294867 [details]
&gt; Patch

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:289
&gt; &gt; +    Vector&lt;char&gt; data;
&gt; 
&gt; I think this should be a Vector&lt;uint8_t&gt;

It cannot be because SharedBuffers expect only Vector&lt;char&gt;

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.h:42
&gt; &gt; +int compareSerializedIDBKeyData(const uint8_t* buffer1, size_t buffer1Size, const uint8_t* buffer2, size_t buffer2Size);
&gt; 
&gt; This doesn&apos;t seem to be used.

Yah, stashed the def. away for a later day, forgot to remove the decl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251596</commentid>
    <comment_count>14</comment_count>
      <attachid>294871</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-15 13:34:41 -0800</bug_when>
    <thetext>Created attachment 294871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251599</commentid>
    <comment_count>15</comment_count>
      <attachid>294871</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-15 13:39:06 -0800</bug_when>
    <thetext>Comment on attachment 294871
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:181
&gt; +template &lt;typename T&gt; static bool readLittleEndian(const uint8_t*&amp; ptr, const uint8_t* end, T&amp; value)

Can&apos;t this return an Optional&lt;T&gt; instead of a bool and passing a T&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251600</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-15 13:42:08 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 294871 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294871&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBSerialization.cpp:181
&gt; &gt; +template &lt;typename T&gt; static bool readLittleEndian(const uint8_t*&amp; ptr, const uint8_t* end, T&amp; value)
&gt; 
&gt; Can&apos;t this return an Optional&lt;T&gt; instead of a bool and passing a T&amp;?

Yes, that would technically work.

Because of the nature of at least some of the deserializations I don&apos;t think it would make the code any better.

(Plus we&apos;re already resigned to having out parameters on these since the ptr is mutable)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251714</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-15 16:25:59 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/208771</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251751</commentid>
    <comment_count>18</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-11-15 18:41:44 -0800</bug_when>
    <thetext>&lt;rdar://problem/29231087&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294784</attachid>
            <date>2016-11-14 17:25:41 -0800</date>
            <delta_ts>2016-11-14 20:55:06 -0800</delta_ts>
            <desc>WIP (not ready for review)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>11560</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAKaW5k
ZXggZDhkNTM5NS4uM2Q1YWJmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5RGF0YS5jcHAKQEAgLTM4Niw2ICszODYsMTQgQEAgdm9pZCBJREJLZXlEYXRh
OjpzZXRBcnJheVZhbHVlKGNvbnN0IFZlY3RvcjxJREJLZXlEYXRhPiYgdmFsdWUpCiAgICAgbV9p
c051bGwgPSBmYWxzZTsKIH0KIAordm9pZCBJREJLZXlEYXRhOjpzZXRCaW5hcnlWYWx1ZShjb25z
dCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUpCit7CisgICAgKnRoaXMgPSBJREJLZXlEYXRh
KCk7CisgICAgbV92YWx1ZSA9IHZhbHVlOworICAgIG1fdHlwZSA9IEtleVR5cGU6OkJpbmFyeTsK
KyAgICBtX2lzTnVsbCA9IGZhbHNlOworfQorCiB2b2lkIElEQktleURhdGE6OnNldFN0cmluZ1Zh
bHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgKnRoaXMgPSBJREJLZXlEYXRhKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKaW5kZXggMGJh
ZmQ1NC4uOThmMGI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleURhdGEuaApAQCAtNzksNiArNzksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
aW50IGNvbXBhcmUoY29uc3QgSURCS2V5RGF0YSYgb3RoZXIpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRBcnJheVZhbHVlKGNvbnN0IFZlY3RvcjxJREJLZXlEYXRhPiYpOworICAgIHZvaWQgc2V0Qmlu
YXJ5VmFsdWUoY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImKTsKICAgICB2b2lkIHNldFN0cmlu
Z1ZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0RGF0ZVZhbHVlKGRvdWJsZSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROdW1iZXJWYWx1ZShkb3VibGUpOwpAQCAtMTcyLDYg
KzE3MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFs
dWUpOwogICAgIH0KIAorICAgIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiBiaW5hcnkoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpCaW5hcnkpOwor
ICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOwor
ICAgIH0KKwogICAgIGNvbnN0IFZlY3RvcjxJREJLZXlEYXRhPiYgYXJyYXkoKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpBcnJheSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFs
aXphdGlvbi5jcHAKaW5kZXggNTgwZTM1MS4uMjAxOWU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9u
LmNwcApAQCAtOTQsMTEgKzk0LDI3NSBAQCBib29sIGRlc2VyaWFsaXplSURCS2V5UGF0aChjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgT3B0aW9uYWw8SURCS2V5UGF0aAogICAgIHJl
dHVybiB0cnVlOwogfQogCisvLyAhISEKKy8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoYXQgdGhlIGxl
YWQgY2hhcmFjdGVyIGlzIGZvciB0aGUgTGludXggR0xJQiBrZXllZCBlbmNvZGVyCisvLyAhISEK
Kworc3RhdGljIGNvbnN0IHVpbnQ4X3QgTGVnYWN5U2VyaWFsaXplZEtleVZlcnNpb24gPSAnYic7
CitzdGF0aWMgY29uc3QgdWludDhfdCBTSURCS2V5VmVyc2lvbiA9IDB4MDA7CitlbnVtIGNsYXNz
IFNJREJLZXlUeXBlIDogdWludDhfdCB7CisgICAgTWluID0gMHgwMCwKKyAgICBOdW1iZXIgPSAw
eDIwLAorICAgIERhdGUgPSAweDQwLAorICAgIFN0cmluZyA9IDB4NjAsCisgICAgQmluYXJ5ID0g
MHg4MCwKKyAgICBBcnJheSA9IDB4QTAsCisgICAgTWF4ID0gMHhGRiwKK307CisKK3N0YXRpYyBT
SURCS2V5VHlwZSBzZXJpYWxpemVkVHlwZUZvcktleVR5cGUoSW5kZXhlZERCOjpLZXlUeXBlIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6
Ok1pbjoKKyAgICAgICAgcmV0dXJuIFNJREJLZXlUeXBlOjpNaW47CisgICAgY2FzZSBJbmRleGVk
REI6OktleVR5cGU6Ok51bWJlcjoKKyAgICAgICAgcmV0dXJuIFNJREJLZXlUeXBlOjpOdW1iZXI7
CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkRhdGU6CisgICAgICAgIHJldHVybiBTSURC
S2V5VHlwZTo6RGF0ZTsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6U3RyaW5nOgorICAg
ICAgICByZXR1cm4gU0lEQktleVR5cGU6OlN0cmluZzsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5
VHlwZTo6QmluYXJ5OgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6OkJpbmFyeTsKKyAgICBj
YXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QXJyYXk6CisgICAgICAgIHJldHVybiBTSURCS2V5VHlw
ZTo6QXJyYXk7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1heDoKKyAgICAgICAgcmV0
dXJuIFNJREJLZXlUeXBlOjpNYXg7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkludmFs
aWQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30KKwor
I2lmIENQVShCSUdfRU5ESUFOKSB8fCBDUFUoTUlERExFX0VORElBTikgfHwgQ1BVKE5FRURTX0FM
SUdORURfQUNDRVNTKQorI2RlZmluZSBBU1NVTUVfTElUVExFX0VORElBTiAwCisjZWxzZQorI2Rl
ZmluZSBBU1NVTUVfTElUVExFX0VORElBTiAxCisjZW5kaWYKKworI2lmIEFTU1VNRV9MSVRUTEVf
RU5ESUFOCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgd3JpdGVMaXR0bGVFbmRp
YW4oVmVjdG9yPGNoYXI+JiBidWZmZXIsIFQgdmFsdWUpCit7CisgICAgYnVmZmVyLmFwcGVuZChy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKK30KKyNl
bHNlCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgd3JpdGVMaXR0bGVFbmRpYW4o
VmVjdG9yPGNoYXI+JiBidWZmZXIsIFQgdmFsdWUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemVvZihUKTsgaSsrKSB7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQodmFsdWUgJiAw
eEZGKTsKKyAgICAgICAgdmFsdWUgPj49IDg7CisgICAgfQorfQorI2VuZGlmCisjaWYgQVNTVU1F
X0xJVFRMRV9FTkRJQU4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCByZWFkTGl0
dGxlRW5kaWFuKGNvbnN0IHVpbnQ4X3QqJiBwdHIsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgVCYgdmFs
dWUpCit7CisgICAgaWYgKHB0ciA+IGVuZCAtIHNpemVvZih2YWx1ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChzaXplb2YoVCkgPT0gMSkKKyAgICAgICAgdmFsdWUgPSAqcHRy
Kys7CisgICAgZWxzZSB7CisgICAgICAgIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VCo+KHB0cik7CisgICAgICAgIHB0ciArPSBzaXplb2YoVCk7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorI2Vsc2UKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCByZWFkTGl0
dGxlRW5kaWFuKGNvbnN0IHVpbnQ4X3QqJiBwdHIsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgVCYgdmFs
dWUpCit7CisgICAgaWYgKHB0ciA+IGVuZCAtIHNpemVvZih2YWx1ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChzaXplb2YoVCkgPT0gMSkKKyAgICAgICAgdmFsdWUgPSAqcHRy
Kys7CisgICAgZWxzZSB7CisgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemVvZihUKTsgaSsrKQorICAgICAgICAgICAgdmFsdWUgKz0gKChUKSpw
dHIrKykgPDwgKGkgKiA4KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwor
c3RhdGljIHZvaWQgd3JpdGVEb3VibGUoVmVjdG9yPGNoYXI+JiBkYXRhLCBkb3VibGUgZCkKK3sK
KyAgICB1bmlvbiB7CisgICAgICAgIGRvdWJsZSBkOworICAgICAgICB1aW50NjRfdCBpNjQ7Cisg
ICAgfSB1OworICAgIHUuZCA9IGQ7CisgICAgd3JpdGVMaXR0bGVFbmRpYW4oZGF0YSwgdS5pNjQp
OworfQorCitzdGF0aWMgYm9vbCByZWFkRG91YmxlKGNvbnN0IHVpbnQ4X3QqJiBkYXRhLCBjb25z
dCB1aW50OF90KiBlbmQsIGRvdWJsZSYgZCkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIGRvdWJs
ZSBkOworICAgICAgICB1aW50NjRfdCBpNjQ7CisgICAgfSB1OworICAgIGlmICghcmVhZExpdHRs
ZUVuZGlhbihkYXRhLCBlbmQsIHUuaTY0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ZCA9IHUuZDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlS2V5KFZl
Y3RvcjxjaGFyPiYgZGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5KQoreworICAgIFNJREJLZXlU
eXBlIHR5cGUgPSBzZXJpYWxpemVkVHlwZUZvcktleVR5cGUoa2V5LnR5cGUoKSk7CisgICAgZGF0
YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odHlwZSkpOworCisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TnVtYmVyOgorICAgICAgICB3cml0ZURvdWJsZShkYXRh
LCBrZXkubnVtYmVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNJREJLZXlUeXBlOjpE
YXRlOgorICAgICAgICB3cml0ZURvdWJsZShkYXRhLCBrZXkuZGF0ZSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6U3RyaW5nOgorICAgIHsKKyAgICAgICAgYXV0byBz
dHJpbmcgPSBrZXkuc3RyaW5nKCk7CisgICAgICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5s
ZW5ndGgoKTsKKyAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW4oZGF0YSwgbGVuZ3RoKTsKKworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgd3Jp
dGVMaXR0bGVFbmRpYW4oZGF0YSwgc3RyaW5nW2ldKTsKKworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBTSURCS2V5VHlwZTo6QmluYXJ5OgorICAgIHsKKyAgICAgICAgYXV0byYgYnVm
ZmVyID0ga2V5LmJpbmFyeSgpOworICAgICAgICB1aW50NjRfdCBzaXplID0gYnVmZmVyLnNpemUo
KTsKKyAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW4oZGF0YSwgc2l6ZSk7CisKKyAgICAgICAgYXV0
byogYnVmZmVyRGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgICAgIEFTU0VSVChidWZmZXJEYXRh
IHx8ICFzaXplKTsKKyAgICAgICAgaWYgKGJ1ZmZlckRhdGEpCisgICAgICAgICAgICBkYXRhLmFw
cGVuZChidWZmZXJEYXRhLT5kYXRhKCksIGJ1ZmZlckRhdGEtPnNpemUoKSk7CisKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkFycmF5OgorICAgIHsKKyAgICAg
ICAgYXV0byYgYXJyYXkgPSBrZXkuYXJyYXkoKTsKKyAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGFy
cmF5LnNpemUoKTsKKyAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW4oZGF0YSwgc2l6ZSk7CisgICAg
ICAgIGZvciAoYXV0byYga2V5IDogYXJyYXkpCisgICAgICAgICAgICBlbmNvZGVLZXkoZGF0YSwg
a2V5KTsKKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TWlu
OgorICAgIGNhc2UgU0lEQktleVR5cGU6Ok1heDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IElEQktleURh
dGEmIGtleSkKIHsKLSAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVuY29kZXIoKTsK
LSAgICBrZXkuZW5jb2RlKCplbmNvZGVyKTsKLSAgICByZXR1cm4gZW5jb2Rlci0+ZmluaXNoRW5j
b2RpbmcoKTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBkYXRhLmFwcGVuZChTSURCS2V5
VmVyc2lvbik7CisKKyAgICBlbmNvZGVLZXkoZGF0YSwga2V5KTsKKworICAgIHJldHVybiBTaGFy
ZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGRhdGEpOworfQorCitzdGF0aWMgYm9vbCBkZWNvZGVLZXko
Y29uc3QgdWludDhfdComIGRhdGEsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgSURCS2V5RGF0YSYgcmVz
dWx0KQoreworICAgIGlmICghZGF0YSB8fCBkYXRhID49IGVuZCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgU0lEQktleVR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFNJREJLZXlUeXBlPihk
YXRhKytbMF0pOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgU0lEQktleVR5cGU6Ok1p
bjoKKyAgICAgICAgcmVzdWx0ID0gSURCS2V5RGF0YTo6bWluaW11bSgpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIFNJREJLZXlUeXBlOjpNYXg6CisgICAgICAgIHJlc3VsdCA9IElE
QktleURhdGE6Om1heGltdW0oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTSURC
S2V5VHlwZTo6TnVtYmVyOgorICAgIHsKKyAgICAgICAgZG91YmxlIGQ7CisgICAgICAgIGlmICgh
cmVhZERvdWJsZShkYXRhLCBlbmQsIGQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIHJlc3VsdC5zZXROdW1iZXJWYWx1ZShkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkRhdGU6CisgICAgeworICAgICAgICBkb3VibGUg
ZDsKKyAgICAgICAgaWYgKCFyZWFkRG91YmxlKGRhdGEsIGVuZCwgZCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LnNldERhdGVWYWx1ZShkKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OlN0cmluZzoKKyAgICB7
CisgICAgICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFu
KGRhdGEsIGVuZCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBBU1NFUlQoZGF0YSA8PSBlbmQpOworICAgICAgICBpZiAoZGF0YSA+PSBlbmQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7CisgICAg
ICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHVpbnQxNl90IGNo
OworICAgICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKGRhdGEsIGVuZCwgY2gpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJ1ZmZlci51bmNoZWNrZWRB
cHBlbmQoY2gpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0LnNldFN0cmluZ1ZhbHVlKFN0
cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkJpbmFyeToKKyAgICB7CisgICAgICAgIHVpbnQ2
NF90IHNpemU7CisgICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlhbihkYXRhLCBlbmQsIHNpemUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1
aW50NjRfdD4oZW5kIC0gZGF0YSkgPCBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yOworICAgICAgICBkYXRhVmVjdG9y
LmFwcGVuZChkYXRhLCBzaXplKTsKKyAgICAgICAgZGF0YSArPSBzaXplOworCisgICAgICAgIHJl
c3VsdC5zZXRCaW5hcnlWYWx1ZShUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6YWRvcHRWZWN0b3IoZGF0
YVZlY3RvcikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTSURCS2V5
VHlwZTo6QXJyYXk6CisgICAgeworICAgICAgICB1aW50NjRfdCBzaXplOworICAgICAgICBpZiAo
IXJlYWRMaXR0bGVFbmRpYW4oZGF0YSwgZW5kLCBzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBWZWN0b3I8SURCS2V5RGF0YT4gYXJyYXk7CisgICAgICAgIGFycmF5
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBJREJLZXlEYXRhIGtleURhdGE7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZUtleShkYXRhLCBlbmQsIGtleURhdGEpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgQVNTRVJUKGtleURhdGEuaXNWYWxpZCgp
KTsKKyAgICAgICAgICAgIGFycmF5LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGtleURhdGEpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5zZXRBcnJheVZhbHVlKGFycmF5KTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9HX0VSUk9S
KCJkZWNvZGVLZXkgZW5jb3VudGVyZWQgdW5leHBlY3RlZCB0eXBlOiAlaSIsIChpbnQpdHlwZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgZGVzZXJpYWxpemVJREJL
ZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlEYXRhJiByZXN1
bHQpCkBAIC0xMDYsOCArMzcwLDE4IEBAIGJvb2wgZGVzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlEYXRhJiByZXN1bHQpCiAgICAgaWYg
KCFkYXRhIHx8ICFzaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGRlY29k
ZXIgPSBLZXllZERlY29kZXI6OmRlY29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgcmV0dXJuIElEQktl
eURhdGE6OmRlY29kZSgqZGVjb2RlciwgcmVzdWx0KTsKKyAgICBpZiAoZGF0YVswXSA9PSBMZWdh
Y3lTZXJpYWxpemVkS2V5VmVyc2lvbikgeworICAgICAgICBhdXRvIGRlY29kZXIgPSBLZXllZERl
Y29kZXI6OmRlY29kZXIoZGF0YSwgc2l6ZSk7CisgICAgICAgIHJldHVybiBJREJLZXlEYXRhOjpk
ZWNvZGUoKmRlY29kZXIsIHJlc3VsdCk7CisgICAgfQorCisgICAgLy8gVmVyaWZ5IHRoaXMgaXMg
YSBTZXJpYWxpemVkSURCS2V5IHZlcnNpb24gd2UgdW5kZXJzdGFuZC4KKyAgICBjb25zdCB1aW50
OF90KiBjdXJyZW50ID0gZGF0YTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBkYXRhICsgc2l6
ZTsKKyAgICBpZiAoY3VycmVudCsrWzBdICE9IFNJREJLZXlWZXJzaW9uKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZGVjb2RlS2V5KGN1cnJlbnQsIGVuZCwgcmVzdWx0KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmgKaW5kZXggNTk3
MjAzZS4uYmY3YTE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5oCkBAIC0zOSw2ICszOSw3IEBAIGJv
b2wgZGVzZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1
ZmZlclNpemUsIE9wdGlvbmFsPElECiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlE
QktleURhdGEoY29uc3QgSURCS2V5RGF0YSYpOwogYm9vbCBkZXNlcmlhbGl6ZUlEQktleURhdGEo
Y29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgSURCS2V5RGF0YSYpOwor
aW50IGNvbXBhcmVTZXJpYWxpemVkSURCS2V5RGF0YShjb25zdCB1aW50OF90KiBidWZmZXIxLCBz
aXplX3QgYnVmZmVyMVNpemUsIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcjIsIHNpemVfdCBidWZmZXIy
U2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2lu
Z1N0b3JlLmNwcAppbmRleCAzZGY4MzUyLi5hMmNjY2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmNwcApAQCAtMTE4Myw2ICsxMTgzLDggQEAgSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJREJJbmRleEluZm8mIGluZm8s
IGMKICAgICAgICAgYm9vbCBoYXNSZWNvcmQ7CiAgICAgICAgIElEQkVycm9yIGVycm9yOwogICAg
ICAgICBmb3IgKGF1dG8mIGluZGV4S2V5IDogaW5kZXhLZXlzKSB7CisgICAgICAgICAgICBpZiAo
IWluZGV4S2V5LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGVycm9yID0gdW5jaGVja2VkSGFzSW5kZXhSZWNvcmQoaW5mbywgaW5kZXhLZXksIGhhc1Jl
Y29yZCk7CiAgICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcjsKQEAgLTExOTIsNiArMTE5NCw4IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZv
LCBjCiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBpbmRleEtleSA6IGluZGV4S2V5cykgeworICAg
ICAgICBpZiAoIWluZGV4S2V5LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBhdXRvIGVycm9yID0gdW5jaGVja2VkUHV0SW5kZXhSZWNvcmQoaW5mby5vYmplY3RTdG9y
ZUlkZW50aWZpZXIoKSwgaW5mby5pZGVudGlmaWVyKCksIGtleSwgaW5kZXhLZXkpOwogICAgICAg
ICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byBwdXQgaW5kZXggcmVjb3JkIGZvciBuZXdseSBjcmVhdGVkIGluZGV4Iik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294803</attachid>
            <date>2016-11-14 20:55:09 -0800</date>
            <delta_ts>2016-11-14 21:52:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164754-20161114205511.patch</filename>
            <type>text/plain</type>
            <size>16752</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjgwYzkyZjFiZjQ5Y2Jl
NTdkNWY3YTA5ZWM2NWY0MTQ1N2I3NTNmMi4uNjg5MTc4YzExZmM1ZGRhMzY5NzZiZjk0ZTQ5YzY1
ZWM2ZDgyYzAwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTExLTE0ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREIgMi4wOiBL
ZXkgY29sbGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3VwcyBpcyBpbnNhbmVseSBzbG93LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NzU0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChDb3ZlcmVkIGJ5ICphbGwqIGV4aXN0aW5nIHRlc3RzLCBhbmQgdW5za2lwcyBhIHByZXZpb3Vz
bHktdG9vLXNsb3cgdGVzdCkKKworICAgICAgICBUaGUgbmV3IHNlcmlhbGl6YXRpb24gZm9ybWF0
IGlzIHN0cmFpZ2h0IGZvcndhcmQgZW5vdWdoIHRvIGdldCBiYWNrIHdpdGggbWluaW1hbCBkb2N1
bWVudGF0aW9uCisgICAgICAgIGluIGEgY29tbWVudCB3aXRoIHRoZSBjb2RlIGl0c2VsZiBiZWlu
ZyB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEl0IGhh
bmRsZXMgYWxsIGN1cnJlbnQgSURCIGtleSB0eXBlcyBhbmQgbGVhdmVzIHJvb20gZm9yIGZ1dHVy
ZSBrZXkgdHlwZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OnNldEJpbmFyeVZhbHVlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlEYXRhOjpiaW5hcnkpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emVkVHlwZUZvcktleVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMaXR0bGVFbmRpYW4p
OgorICAgICAgICAoV2ViQ29yZTo6cmVhZExpdHRsZUVuZGlhbik6CisgICAgICAgIChXZWJDb3Jl
Ojp3cml0ZURvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkRG91YmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJREJLZXlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXNlcmlhbGl6ZUlEQktleURhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJpYWxpemF0aW9uLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KTog
VmVyaWZ5IHRoYXQgVHlwZSA9PSBJbnZhbGlkIAorICAgICAgICAgIGtleXMgZG9uJ3QgZ2V0IGlu
dG8gdGhlIGRhdGFiYXNlLiBUaGlzIHdhcyBoYXBwZW5pbmcgYmVmb3JlIGFuZCB0aGUgcHJldmlv
dXMgc2VyaWFsaXphdGlvbgorICAgICAgICAgIHN1cHBvcnRlZCBpdCwgYnV0IHRoZXJlJ3MgY2xl
YXJseSBubyBwb2ludCBpbiBzdXBwb3J0aW5nIGl0IHdpdGggdGhlIG5ldyBzZXJpYWxpemF0aW9u
LgorCiAyMDE2LTExLTE0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CiAKICAgICAgICAgW1dlYkdMMl0gVGVhY2ggV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSBhYm91
dCBuZXcgdGV4dHVyZSBpbnRlcm5hbCBmb3JtYXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCmluZGV4IGQ4ZDUzOTVjYTY1MDYyNTI1ZmI2NzNk
NjJkODVkMjRiNzU3Y2VkNGMuLjNkNWFiZjM4M2ZlMjQ2OGE0YjFmNDBlY2JiNDU3ZTE1ZDdjYzE1
YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEu
Y3BwCkBAIC0zODYsNiArMzg2LDE0IEBAIHZvaWQgSURCS2V5RGF0YTo6c2V0QXJyYXlWYWx1ZShj
b25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIHZhbHVlKQogICAgIG1faXNOdWxsID0gZmFsc2U7CiB9
CiAKK3ZvaWQgSURCS2V5RGF0YTo6c2V0QmluYXJ5VmFsdWUoY29uc3QgVGhyZWFkU2FmZURhdGFC
dWZmZXImIHZhbHVlKQoreworICAgICp0aGlzID0gSURCS2V5RGF0YSgpOworICAgIG1fdmFsdWUg
PSB2YWx1ZTsKKyAgICBtX3R5cGUgPSBLZXlUeXBlOjpCaW5hcnk7CisgICAgbV9pc051bGwgPSBm
YWxzZTsKK30KKwogdm9pZCBJREJLZXlEYXRhOjpzZXRTdHJpbmdWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogewogICAgICp0aGlzID0gSURCS2V5RGF0YSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCmluZGV4IDBiYWZkNTQ2ZjVhNjNlOGNjMDBi
NDgyZWZkZjU3MzAyN2M4ZDU3NTguLjk4ZjBiNzM1OTA1NTI1Zjk5ODBkNjEzMDE4MmMzZjZjZmRi
NDI0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRh
LmgKQEAgLTc5LDYgKzc5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGludCBjb21w
YXJlKGNvbnN0IElEQktleURhdGEmIG90aGVyKSBjb25zdDsKIAogICAgIHZvaWQgc2V0QXJyYXlW
YWx1ZShjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mKTsKKyAgICB2b2lkIHNldEJpbmFyeVZhbHVl
KGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7CiAgICAgdm9pZCBzZXRTdHJpbmdWYWx1ZShj
b25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldERhdGVWYWx1ZShkb3VibGUpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0TnVtYmVyVmFsdWUoZG91YmxlKTsKQEAgLTE3Miw2ICsxNzMsMTIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAg
ICB9CiAKKyAgICBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgYmluYXJ5KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6QmluYXJ5KTsKKyAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKTsKKyAgICB9CisK
ICAgICBjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIGFycmF5KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6QXJyYXkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24u
Y3BwCmluZGV4IDU4MGUzNTEwNzU1OTI3NzAwY2Q1ZjczMjMyZGQ4MDgxZDY1NWI2NzIuLjMwYmVk
N2E0OGViODA3N2YzNTI4OGQ1MDYyNGQ1Y2ZiNjhhNzdkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlv
bi5jcHAKQEAgLTk0LDExICs5NCwzMDUgQEAgYm9vbCBkZXNlcmlhbGl6ZUlEQktleVBhdGgoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIE9wdGlvbmFsPElEQktleVBhdGgKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorLy8gRklYTUU6IExpbnV4IHBvcnRzIHVzZXMgS2V5ZWRFbmNvZGVy
R2xpYiBmb3IgdGhlaXIgSURCS2V5cy4KKy8vIFdoZW4gYSBHbGliIG1haW50YWluZXIgY29tZXMg
YWxvbmcgdG8gZW5hYmxlIHRoZSBuZXcgc2VyaWFsaXphdGlvbiB0aGV5J2xsIG5lZWQgdG8KKy8v
IGRlbm90ZSBhIEdsaWIgbWFnaWMgY2hhcmFjdGVyIGhlcmUuCisvLyBMZXQncyBob3BlIGl0J3Mg
bm90IDB4MDAuCisKK3N0YXRpYyBjb25zdCB1aW50OF90IExlZ2FjeVNlcmlhbGl6ZWRLZXlWZXJz
aW9uID0gJ2InOworCisKKy8qCitUaGUgSURCS2V5RGF0YSBzZXJpYWxpemF0aW9uIGZvcm1hdCBp
cyBhcyBmb2xsb3dzOgorWzEgYnl0ZSB2ZXJzaW9uIGhlYWRlcl1bS2V5IEJ1ZmZlcl0KKworVGhl
IEtleSBCdWZmZXIgc2VyaWFsaXphdGlvbiBmb3JtYXQgaXMgYXMgZm9sbG93czoKK1sxIGJ5dGUg
a2V5IHR5cGVdW1R5cGUgc3BlY2lmaWMgZGF0YV0KKworVHlwZSBzcGVjaWZpYyBzZXJpYWxpemF0
aW9uIGZvcm1hdHMgYXJlIGFzIGZvbGxvd3MgZm9yIGVhY2ggb2YgdGhlIHR5cGVzOgorTWluOgor
WzAgYnl0ZXNdCisKK051bWJlcjoKK1s4IGJ5dGVzIHJlcHJlc2VudGluZyBhIGRvdWJsZSBlbmNv
ZGVkIGluIGxpdHRsZSBlbmRpYW5dCisKK0RhdGU6CitbOCBieXRlcyByZXByZXNlbnRpbmcgYSBk
b3VibGUgZW5jb2RlZCBpbiBsaXR0bGUgZW5kaWFuXQorCitTdHJpbmc6CitbNCBieXRlcyByZXBy
ZXNlbnRpbmcgc3RyaW5nICJsZW5ndGgiIGluIGxpdHRsZSBlbmRpYW5dWyJsZW5ndGgiIG51bWJl
ciBvZiAyLWJ5dGUgcGFpcnMgcmVwcmVzZW50aW5nIEVDTUFTY3JpcHQgMTYtYml0IGNvZGUgdW5p
dHNdCisKK0JpbmFyeToKK1s4IGJ5dGVzIHJlcHJlc2VudGluZyB0aGUgInNpemUiIG9mIHRoZSBi
aW5hcnkgYmxvYl1bInNpemUiIGJ5dGVzXQorCitBcnJheToKK1s4IGJ5dGVzIHJlcHJlc2VudGlu
ZyB0aGUgImxlbmd0aCIgb2YgdGhlIGtleSBhcnJheV1bImxlbmd0aCIgaW5kaXZpZHVhbCBLZXkg
QnVmZmVyIGVudHJpZXNdCisKK01heDoKK1swIGJ5dGVzXQorKi8KKworc3RhdGljIGNvbnN0IHVp
bnQ4X3QgU0lEQktleVZlcnNpb24gPSAweDAwOworZW51bSBjbGFzcyBTSURCS2V5VHlwZSA6IHVp
bnQ4X3QgeworICAgIE1pbiA9IDB4MDAsCisgICAgTnVtYmVyID0gMHgyMCwKKyAgICBEYXRlID0g
MHg0MCwKKyAgICBTdHJpbmcgPSAweDYwLAorICAgIEJpbmFyeSA9IDB4ODAsCisgICAgQXJyYXkg
PSAweEEwLAorICAgIE1heCA9IDB4RkYsCit9OworCitzdGF0aWMgU0lEQktleVR5cGUgc2VyaWFs
aXplZFR5cGVGb3JLZXlUeXBlKEluZGV4ZWREQjo6S2V5VHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNaW46CisgICAgICAgIHJl
dHVybiBTSURCS2V5VHlwZTo6TWluOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1i
ZXI6CisgICAgICAgIHJldHVybiBTSURCS2V5VHlwZTo6TnVtYmVyOworICAgIGNhc2UgSW5kZXhl
ZERCOjpLZXlUeXBlOjpEYXRlOgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6OkRhdGU7Cisg
ICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKKyAgICAgICAgcmV0dXJuIFNJREJL
ZXlUeXBlOjpTdHJpbmc7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkJpbmFyeToKKyAg
ICAgICAgcmV0dXJuIFNJREJLZXlUeXBlOjpCaW5hcnk7CisgICAgY2FzZSBJbmRleGVkREI6Oktl
eVR5cGU6OkFycmF5OgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6OkFycmF5OworICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNYXg6CisgICAgICAgIHJldHVybiBTSURCS2V5VHlwZTo6
TWF4OworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZhbGlkOgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07Cit9CisKKyNpZiBDUFUoQklHX0VORElB
TikgfHwgQ1BVKE1JRERMRV9FTkRJQU4pIHx8IENQVShORUVEU19BTElHTkVEX0FDQ0VTUykKKyNk
ZWZpbmUgQVNTVU1FX0xJVFRMRV9FTkRJQU4gMAorI2Vsc2UKKyNkZWZpbmUgQVNTVU1FX0xJVFRM
RV9FTkRJQU4gMQorI2VuZGlmCisKKyNpZiBBU1NVTUVfTElUVExFX0VORElBTgordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRlTGl0dGxlRW5kaWFuKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCBUIHZhbHVlKQoreworICAgIGJ1ZmZlci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisjZWxzZQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRlTGl0dGxlRW5kaWFuKFZlY3RvcjxjaGFyPiYgYnVm
ZmVyLCBUIHZhbHVlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YoVCk7
IGkrKykgeworICAgICAgICBidWZmZXIuYXBwZW5kKHZhbHVlICYgMHhGRik7CisgICAgICAgIHZh
bHVlID4+PSA4OworICAgIH0KK30KKyNlbmRpZgorI2lmIEFTU1VNRV9MSVRUTEVfRU5ESUFOCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGJvb2wgcmVhZExpdHRsZUVuZGlhbihjb25zdCB1
aW50OF90KiYgcHRyLCBjb25zdCB1aW50OF90KiBlbmQsIFQmIHZhbHVlKQoreworICAgIGlmIChw
dHIgPiBlbmQgLSBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoc2l6ZW9mKFQpID09IDEpCisgICAgICAgIHZhbHVlID0gKnB0cisrOworICAgIGVsc2Ugewor
ICAgICAgICB2YWx1ZSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihwdHIpOworICAgICAg
ICBwdHIgKz0gc2l6ZW9mKFQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbHNlCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGJvb2wgcmVhZExpdHRsZUVuZGlhbihjb25zdCB1
aW50OF90KiYgcHRyLCBjb25zdCB1aW50OF90KiBlbmQsIFQmIHZhbHVlKQoreworICAgIGlmIChw
dHIgPiBlbmQgLSBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoc2l6ZW9mKFQpID09IDEpCisgICAgICAgIHZhbHVlID0gKnB0cisrOworICAgIGVsc2Ugewor
ICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
b2YoVCk7IGkrKykKKyAgICAgICAgICAgIHZhbHVlICs9ICgoVCkqcHRyKyspIDw8IChpICogOCk7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdyaXRl
RG91YmxlKFZlY3RvcjxjaGFyPiYgZGF0YSwgZG91YmxlIGQpCit7CisgICAgdW5pb24geworICAg
ICAgICBkb3VibGUgZDsKKyAgICAgICAgdWludDY0X3QgaTY0OworICAgIH0gdTsKKyAgICB1LmQg
PSBkOworICAgIHdyaXRlTGl0dGxlRW5kaWFuKGRhdGEsIHUuaTY0KTsKK30KKworc3RhdGljIGJv
b2wgcmVhZERvdWJsZShjb25zdCB1aW50OF90KiYgZGF0YSwgY29uc3QgdWludDhfdCogZW5kLCBk
b3VibGUmIGQpCit7CisgICAgdW5pb24geworICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgdWlu
dDY0X3QgaTY0OworICAgIH0gdTsKKyAgICBpZiAoIXJlYWRMaXR0bGVFbmRpYW4oZGF0YSwgZW5k
LCB1Lmk2NCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGQgPSB1LmQ7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUtleShWZWN0b3I8Y2hhcj4mIGRhdGEs
IGNvbnN0IElEQktleURhdGEmIGtleSkKK3sKKyAgICBTSURCS2V5VHlwZSB0eXBlID0gc2VyaWFs
aXplZFR5cGVGb3JLZXlUeXBlKGtleS50eXBlKCkpOworICAgIGRhdGEuYXBwZW5kKHN0YXRpY19j
YXN0PGNoYXI+KHR5cGUpKTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgU0lEQktl
eVR5cGU6Ok51bWJlcjoKKyAgICAgICAgd3JpdGVEb3VibGUoZGF0YSwga2V5Lm51bWJlcigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6RGF0ZToKKyAgICAgICAgd3Jp
dGVEb3VibGUoZGF0YSwga2V5LmRhdGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0lE
QktleVR5cGU6OlN0cmluZzogeworICAgICAgICBhdXRvIHN0cmluZyA9IGtleS5zdHJpbmcoKTsK
KyAgICAgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgICAgICB3cml0
ZUxpdHRsZUVuZGlhbihkYXRhLCBsZW5ndGgpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihkYXRhLCBz
dHJpbmdbaV0pOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNJREJLZXlUeXBl
OjpCaW5hcnk6IHsKKyAgICAgICAgYXV0byYgYnVmZmVyID0ga2V5LmJpbmFyeSgpOworICAgICAg
ICB1aW50NjRfdCBzaXplID0gYnVmZmVyLnNpemUoKTsKKyAgICAgICAgd3JpdGVMaXR0bGVFbmRp
YW4oZGF0YSwgc2l6ZSk7CisKKyAgICAgICAgYXV0byogYnVmZmVyRGF0YSA9IGJ1ZmZlci5kYXRh
KCk7CisgICAgICAgIEFTU0VSVChidWZmZXJEYXRhIHx8ICFzaXplKTsKKyAgICAgICAgaWYgKGJ1
ZmZlckRhdGEpCisgICAgICAgICAgICBkYXRhLmFwcGVuZChidWZmZXJEYXRhLT5kYXRhKCksIGJ1
ZmZlckRhdGEtPnNpemUoKSk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU0lE
QktleVR5cGU6OkFycmF5OiB7CisgICAgICAgIGF1dG8mIGFycmF5ID0ga2V5LmFycmF5KCk7Cisg
ICAgICAgIHVpbnQ2NF90IHNpemUgPSBhcnJheS5zaXplKCk7CisgICAgICAgIHdyaXRlTGl0dGxl
RW5kaWFuKGRhdGEsIHNpemUpOworICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGFycmF5KQorICAg
ICAgICAgICAgZW5jb2RlS2V5KGRhdGEsIGtleSk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgU0lEQktleVR5cGU6Ok1pbjoKKyAgICBjYXNlIFNJREJLZXlUeXBlOjpNYXg6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKwogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXpl
SURCS2V5RGF0YShjb25zdCBJREJLZXlEYXRhJiBrZXkpCiB7CisjaWYgVVNFKENGKQorICAgIFZl
Y3RvcjxjaGFyPiBkYXRhOworICAgIGRhdGEuYXBwZW5kKFNJREJLZXlWZXJzaW9uKTsKKworICAg
IGVuY29kZUtleShkYXRhLCBrZXkpOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmFkb3B0VmVj
dG9yKGRhdGEpOworI2Vsc2UKICAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVuY29k
ZXIoKTsKICAgICBrZXkuZW5jb2RlKCplbmNvZGVyKTsKICAgICByZXR1cm4gZW5jb2Rlci0+Zmlu
aXNoRW5jb2RpbmcoKTsKKyNlbmRpZgorCit9CisKK3N0YXRpYyBib29sIGRlY29kZUtleShjb25z
dCB1aW50OF90KiYgZGF0YSwgY29uc3QgdWludDhfdCogZW5kLCBJREJLZXlEYXRhJiByZXN1bHQp
Cit7CisgICAgaWYgKCFkYXRhIHx8IGRhdGEgPj0gZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBTSURCS2V5VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8U0lEQktleVR5cGU+KGRhdGEr
K1swXSk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TWluOgor
ICAgICAgICByZXN1bHQgPSBJREJLZXlEYXRhOjptaW5pbXVtKCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2UgU0lEQktleVR5cGU6Ok1heDoKKyAgICAgICAgcmVzdWx0ID0gSURCS2V5
RGF0YTo6bWF4aW11bSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNJREJLZXlU
eXBlOjpOdW1iZXI6IHsKKyAgICAgICAgZG91YmxlIGQ7CisgICAgICAgIGlmICghcmVhZERvdWJs
ZShkYXRhLCBlbmQsIGQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJl
c3VsdC5zZXROdW1iZXJWYWx1ZShkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGNhc2UgU0lEQktleVR5cGU6OkRhdGU6IHsKKyAgICAgICAgZG91YmxlIGQ7CisgICAgICAgIGlm
ICghcmVhZERvdWJsZShkYXRhLCBlbmQsIGQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHJlc3VsdC5zZXREYXRlVmFsdWUoZCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBjYXNlIFNJREJLZXlUeXBlOjpTdHJpbmc6IHsKKyAgICAgICAgdWludDMyX3Qg
bGVuZ3RoOworICAgICAgICBpZiAoIXJlYWRMaXR0bGVFbmRpYW4oZGF0YSwgZW5kLCBsZW5ndGgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1
aW50NjRfdD4oZW5kIC0gZGF0YSkgPCBsZW5ndGggKiAyKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAgICAgICBidWZmZXIucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB1aW50MTZfdCBjaDsKKyAgICAgICAgICAg
IGlmICghcmVhZExpdHRsZUVuZGlhbihkYXRhLCBlbmQsIGNoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKGNoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJlc3VsdC5zZXRTdHJpbmdWYWx1ZShTdHJpbmc6OmFkb3B0KFdU
Rk1vdmUoYnVmZmVyKSkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNl
IFNJREJLZXlUeXBlOjpCaW5hcnk6IHsKKyAgICAgICAgdWludDY0X3Qgc2l6ZTsKKyAgICAgICAg
aWYgKCFyZWFkTGl0dGxlRW5kaWFuKGRhdGEsIGVuZCwgc2l6ZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihlbmQgLSBkYXRh
KSA8IHNpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGFWZWN0b3I7CisgICAgICAgIGRhdGFWZWN0b3IuYXBwZW5kKGRhdGEsIHNpemUp
OworICAgICAgICBkYXRhICs9IHNpemU7CisKKyAgICAgICAgcmVzdWx0LnNldEJpbmFyeVZhbHVl
KFRocmVhZFNhZmVEYXRhQnVmZmVyOjphZG9wdFZlY3RvcihkYXRhVmVjdG9yKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFNJREJLZXlUeXBlOjpBcnJheTogeworICAg
ICAgICB1aW50NjRfdCBzaXplOworICAgICAgICBpZiAoIXJlYWRMaXR0bGVFbmRpYW4oZGF0YSwg
ZW5kLCBzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBWZWN0b3I8
SURCS2V5RGF0YT4gYXJyYXk7CisgICAgICAgIGFycmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICBJREJLZXlEYXRhIGtleURhdGE7CisgICAgICAgICAgICBpZiAoIWRlY29kZUtleShk
YXRhLCBlbmQsIGtleURhdGEpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgQVNTRVJUKGtleURhdGEuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgIGFycmF5LnVu
Y2hlY2tlZEFwcGVuZChXVEZNb3ZlKGtleURhdGEpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
c3VsdC5zZXRBcnJheVZhbHVlKGFycmF5KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9HX0VSUk9SKCJkZWNvZGVLZXkgZW5jb3VudGVyZWQg
dW5leHBlY3RlZCB0eXBlOiAlaSIsIChpbnQpdHlwZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiB9CiAKIGJvb2wgZGVzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplLCBJREJLZXlEYXRhJiByZXN1bHQpCkBAIC0xMDYsOCArNDAwLDI5IEBA
IGJvb2wgZGVzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplLCBJREJLZXlEYXRhJiByZXN1bHQpCiAgICAgaWYgKCFkYXRhIHx8ICFzaXplKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyNpZiBVU0UoQ0YpCisgICAgaWYgKGRhdGFbMF0gPT0gTGVnYWN5
U2VyaWFsaXplZEtleVZlcnNpb24pIHsKKyAgICAgICAgYXV0byBkZWNvZGVyID0gS2V5ZWREZWNv
ZGVyOjpkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gSURCS2V5RGF0YTo6ZGVj
b2RlKCpkZWNvZGVyLCByZXN1bHQpOworICAgIH0KKworICAgIC8vIFZlcmlmeSB0aGlzIGlzIGEg
U2VyaWFsaXplZElEQktleSB2ZXJzaW9uIHdlIHVuZGVyc3RhbmQuCisgICAgY29uc3QgdWludDhf
dCogY3VycmVudCA9IGRhdGE7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gZGF0YSArIHNpemU7
CisgICAgaWYgKGN1cnJlbnQrK1swXSAhPSBTSURCS2V5VmVyc2lvbikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGRlY29kZUtleShjdXJyZW50LCBlbmQsIHJlc3VsdCkpIHsKKyAg
ICAgICAgLy8gRXZlbiBpZiB3ZSBzdWNjZXNzZnVsbHkgZGVjb2RlZCBhIGtleSwgdGhlIGRlc2Vy
aWFsaXplIGlzIG9ubHkgc3VjY2Vzc2Z1bAorICAgICAgICAvLyBpZiB3ZSBhY3R1YWxseSBjb25z
dW1lZCBhbGwgaW5wdXQgZGF0YS4KKyAgICAgICAgcmV0dXJuIGN1cnJlbnQgPT0gZW5kOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCiAgICAgYXV0byBkZWNvZGVyID0gS2V5ZWRE
ZWNvZGVyOjpkZWNvZGVyKGRhdGEsIHNpemUpOwogICAgIHJldHVybiBJREJLZXlEYXRhOjpkZWNv
ZGUoKmRlY29kZXIsIHJlc3VsdCk7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcmlhbGl6YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJpYWxpemF0aW9uLmgKaW5kZXggNTk3MjAzZWJiNjBmMjBmZGM5NjkzMmY1N2UyNTI0
YmZmNzMyMWIyYy4uYmY3YTE2NzQ4MGI1ODIwYzI2YTk4NWM5Y2QzYjQ2YzAzZGNhMmUwZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlh
bGl6YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VyaWFsaXphdGlvbi5oCkBAIC0zOSw2ICszOSw3IEBAIGJvb2wgZGVzZXJpYWxpemVJREJL
ZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIE9wdGlvbmFs
PElECiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleURhdGEoY29uc3QgSURC
S2V5RGF0YSYpOwogYm9vbCBkZXNlcmlhbGl6ZUlEQktleURhdGEoY29uc3QgdWludDhfdCogYnVm
ZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgSURCS2V5RGF0YSYpOworaW50IGNvbXBhcmVTZXJpYWxp
emVkSURCS2V5RGF0YShjb25zdCB1aW50OF90KiBidWZmZXIxLCBzaXplX3QgYnVmZmVyMVNpemUs
IGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcjIsIHNpemVfdCBidWZmZXIyU2l6ZSk7CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAz
ZGY4MzUyNmI5MWQxYWVkYTBkNGUzNzVmNWU1ZjdlZTk2NzFhZDE5Li5hMmNjY2FkYzc5ZDllNTA1
MmM5MTU1MjYwNDhmY2UwZDA2ZDQ0N2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3Jl
LmNwcApAQCAtMTE4Myw2ICsxMTgzLDggQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
Ojp1bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGMKICAgICAg
ICAgYm9vbCBoYXNSZWNvcmQ7CiAgICAgICAgIElEQkVycm9yIGVycm9yOwogICAgICAgICBmb3Ig
KGF1dG8mIGluZGV4S2V5IDogaW5kZXhLZXlzKSB7CisgICAgICAgICAgICBpZiAoIWluZGV4S2V5
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGVycm9y
ID0gdW5jaGVja2VkSGFzSW5kZXhSZWNvcmQoaW5mbywgaW5kZXhLZXksIGhhc1JlY29yZCk7CiAg
ICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcjsKQEAgLTExOTIsNiArMTE5NCw4IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBjCiAgICAg
fQogCiAgICAgZm9yIChhdXRvJiBpbmRleEtleSA6IGluZGV4S2V5cykgeworICAgICAgICBpZiAo
IWluZGV4S2V5LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRv
IGVycm9yID0gdW5jaGVja2VkUHV0SW5kZXhSZWNvcmQoaW5mby5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSwgaW5mby5pZGVudGlmaWVyKCksIGtleSwgaW5kZXhLZXkpOwogICAgICAgICBpZiAoIWVy
cm9yLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwdXQgaW5k
ZXggcmVjb3JkIGZvciBuZXdseSBjcmVhdGVkIGluZGV4Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzI5NzI1YmNhN2Ey
MmExNTc2ZmIxOWExZTJjMTI1ZmZiMWUxOWY1YS4uOTgyMzNjMTkzOWIzMzY3MGY0YmQ0ZjRjNjkw
YzU3MTQ4MmQzZTMxMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTExLTE0ICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREIgMi4wOiBLZXkg
Y29sbGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3VwcyBpcyBpbnNhbmVseSBzbG93LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NzU0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRp
b25zOiBVbnNraXAgYSB0ZXN0IHRoYXQgcGFzc2VzIGV2ZW4gaW4gZGVidWcgYnVpbGRzLCBhbmQg
cmUtY2xhc3NpZnkKKyAgICAgICAgICBhIHRlc3QgdGhhdCB1c2VkIHRvIGJlIHRvby1zbG93IGV2
ZXJ5d2hlcmUgdG8gYmUgdG9vLXNsb3cgb25seSBpbiBkZWJ1ZyBidWlsZHMuCisKIDIwMTYtMTEt
MTQgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V2ViR0wyXSBUZWFjaCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIGFib3V0IG5ldyB0ZXh0dXJl
IGludGVybmFsIGZvcm1hdHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlv
bnMgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDk3ZWVmZDlmNGU4ZWJhZTkz
MzUyZDMzOGYzZmZlMGIxYWNjNDIyOWYuLmI2YWVhMGNkY2ZhMGM2ODQzYzUxNzdlNjlmMDY4NTU4
MzExMGMxM2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIv
TGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtODQ4LDkgKzg0OCw4IEBAIHN0b3JhZ2Uv
aW5kZXhlZGRiL2RlbGV0ZWRhdGFiYXNlLWRlbGF5ZWQtYnktdmVyc2lvbmNoYW5nZS5odG1sIFsg
U2tpcCBdCiAjIEl0J3MgdW5jbGVhciBpZiB3ZSBuZWVkIHRvIGNvbnRpbnVlIHN1cHBvcnRpbmcg
dGhpcy4KIHN0b3JhZ2UvaW5kZXhlZGRiL3Byb3BlcnRpZXMtZGlzYWJsZWQtYXQtcnVudGltZS5o
dG1sIFsgRmFpbHVyZSBdCiAKLSMgQ29tcGxldGVzIHdpdGggcGFzc2luZyByZXN1bHRzLCBidXQg
dG9vIHNsb3dseSBmb3Igb3VyIHRlc3QgdGltZW91dHMuCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL0luZGV4ZWREQi9pZGJpbmRleC1tdWx0aWVudHJ5LWJpZy5odG0gWyBGYWlsdXJl
IF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYmN1cnNvcl9p
dGVyYXRpbmcuaHRtIFsgRmFpbHVyZSBdCisjIEluIGRlYnVnIGJ1aWxkcywgcnVucyB0b28gc2xv
d2x5IGZvciB0aGUgdGVzdCB0aW1lb3V0LgorWyBEZWJ1ZyBdIGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYmluZGV4LW11bHRpZW50cnktYmlnLmh0bSBbIEZhaWx1
cmUgXQogCiAjIFNRTGl0ZSBiYWNrZW5kIHRlc3RzIHRoYXQgdGltZW91dAogc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL3RyYW5zYWN0aW9uLXNjaGVkdWxlci0xLmh0bWwgWyBTa2lwIF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294812</attachid>
            <date>2016-11-14 21:52:07 -0800</date>
            <delta_ts>2016-11-15 08:50:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164754-20161114215208.patch</filename>
            <type>text/plain</type>
            <size>17044</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjgwYzkyZjFiZjQ5Y2Jl
NTdkNWY3YTA5ZWM2NWY0MTQ1N2I3NTNmMi4uNjg5MTc4YzExZmM1ZGRhMzY5NzZiZjk0ZTQ5YzY1
ZWM2ZDgyYzAwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTExLTE0ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREIgMi4wOiBL
ZXkgY29sbGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3VwcyBpcyBpbnNhbmVseSBzbG93LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NzU0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChDb3ZlcmVkIGJ5ICphbGwqIGV4aXN0aW5nIHRlc3RzLCBhbmQgdW5za2lwcyBhIHByZXZpb3Vz
bHktdG9vLXNsb3cgdGVzdCkKKworICAgICAgICBUaGUgbmV3IHNlcmlhbGl6YXRpb24gZm9ybWF0
IGlzIHN0cmFpZ2h0IGZvcndhcmQgZW5vdWdoIHRvIGdldCBiYWNrIHdpdGggbWluaW1hbCBkb2N1
bWVudGF0aW9uCisgICAgICAgIGluIGEgY29tbWVudCB3aXRoIHRoZSBjb2RlIGl0c2VsZiBiZWlu
ZyB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEl0IGhh
bmRsZXMgYWxsIGN1cnJlbnQgSURCIGtleSB0eXBlcyBhbmQgbGVhdmVzIHJvb20gZm9yIGZ1dHVy
ZSBrZXkgdHlwZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OnNldEJpbmFyeVZhbHVlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlEYXRhOjpiaW5hcnkpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emVkVHlwZUZvcktleVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMaXR0bGVFbmRpYW4p
OgorICAgICAgICAoV2ViQ29yZTo6cmVhZExpdHRsZUVuZGlhbik6CisgICAgICAgIChXZWJDb3Jl
Ojp3cml0ZURvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkRG91YmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJREJLZXlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXNlcmlhbGl6ZUlEQktleURhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJpYWxpemF0aW9uLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KTog
VmVyaWZ5IHRoYXQgVHlwZSA9PSBJbnZhbGlkIAorICAgICAgICAgIGtleXMgZG9uJ3QgZ2V0IGlu
dG8gdGhlIGRhdGFiYXNlLiBUaGlzIHdhcyBoYXBwZW5pbmcgYmVmb3JlIGFuZCB0aGUgcHJldmlv
dXMgc2VyaWFsaXphdGlvbgorICAgICAgICAgIHN1cHBvcnRlZCBpdCwgYnV0IHRoZXJlJ3MgY2xl
YXJseSBubyBwb2ludCBpbiBzdXBwb3J0aW5nIGl0IHdpdGggdGhlIG5ldyBzZXJpYWxpemF0aW9u
LgorCiAyMDE2LTExLTE0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CiAKICAgICAgICAgW1dlYkdMMl0gVGVhY2ggV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSBhYm91
dCBuZXcgdGV4dHVyZSBpbnRlcm5hbCBmb3JtYXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCmluZGV4IGQ4ZDUzOTVjYTY1MDYyNTI1ZmI2NzNk
NjJkODVkMjRiNzU3Y2VkNGMuLjNkNWFiZjM4M2ZlMjQ2OGE0YjFmNDBlY2JiNDU3ZTE1ZDdjYzE1
YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEu
Y3BwCkBAIC0zODYsNiArMzg2LDE0IEBAIHZvaWQgSURCS2V5RGF0YTo6c2V0QXJyYXlWYWx1ZShj
b25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIHZhbHVlKQogICAgIG1faXNOdWxsID0gZmFsc2U7CiB9
CiAKK3ZvaWQgSURCS2V5RGF0YTo6c2V0QmluYXJ5VmFsdWUoY29uc3QgVGhyZWFkU2FmZURhdGFC
dWZmZXImIHZhbHVlKQoreworICAgICp0aGlzID0gSURCS2V5RGF0YSgpOworICAgIG1fdmFsdWUg
PSB2YWx1ZTsKKyAgICBtX3R5cGUgPSBLZXlUeXBlOjpCaW5hcnk7CisgICAgbV9pc051bGwgPSBm
YWxzZTsKK30KKwogdm9pZCBJREJLZXlEYXRhOjpzZXRTdHJpbmdWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogewogICAgICp0aGlzID0gSURCS2V5RGF0YSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCmluZGV4IDBiYWZkNTQ2ZjVhNjNlOGNjMDBi
NDgyZWZkZjU3MzAyN2M4ZDU3NTguLjk4ZjBiNzM1OTA1NTI1Zjk5ODBkNjEzMDE4MmMzZjZjZmRi
NDI0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRh
LmgKQEAgLTc5LDYgKzc5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGludCBjb21w
YXJlKGNvbnN0IElEQktleURhdGEmIG90aGVyKSBjb25zdDsKIAogICAgIHZvaWQgc2V0QXJyYXlW
YWx1ZShjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mKTsKKyAgICB2b2lkIHNldEJpbmFyeVZhbHVl
KGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7CiAgICAgdm9pZCBzZXRTdHJpbmdWYWx1ZShj
b25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldERhdGVWYWx1ZShkb3VibGUpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0TnVtYmVyVmFsdWUoZG91YmxlKTsKQEAgLTE3Miw2ICsxNzMsMTIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAg
ICB9CiAKKyAgICBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgYmluYXJ5KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6QmluYXJ5KTsKKyAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKTsKKyAgICB9CisK
ICAgICBjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIGFycmF5KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6QXJyYXkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24u
Y3BwCmluZGV4IDU4MGUzNTEwNzU1OTI3NzAwY2Q1ZjczMjMyZGQ4MDgxZDY1NWI2NzIuLmFhMzhh
NTBkZGRjZDQ5ZTAyMGNlM2Y5OWZkNzYxMWUxMGFmY2RiMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlv
bi5jcHAKQEAgLTk0LDExICs5NCwzMTUgQEAgYm9vbCBkZXNlcmlhbGl6ZUlEQktleVBhdGgoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIE9wdGlvbmFsPElEQktleVBhdGgKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorLy8gRklYTUU6IExpbnV4IHBvcnRzIHVzZXMgS2V5ZWRFbmNvZGVy
R2xpYiBmb3IgdGhlaXIgSURCS2V5cy4KKy8vIFdoZW4gYSBHbGliIG1haW50YWluZXIgY29tZXMg
YWxvbmcgdG8gZW5hYmxlIHRoZSBuZXcgc2VyaWFsaXphdGlvbiB0aGV5J2xsIG5lZWQgdG8KKy8v
IGRlbm90ZSBhIEdsaWIgbWFnaWMgY2hhcmFjdGVyIGhlcmUuCisvLyBMZXQncyBob3BlIGl0J3Mg
bm90IDB4MDAuCisKK3N0YXRpYyBjb25zdCB1aW50OF90IExlZ2FjeVNlcmlhbGl6ZWRLZXlWZXJz
aW9uID0gJ2InOworCisKKy8qCitUaGUgSURCS2V5RGF0YSBzZXJpYWxpemF0aW9uIGZvcm1hdCBp
cyBhcyBmb2xsb3dzOgorWzEgYnl0ZSB2ZXJzaW9uIGhlYWRlcl1bS2V5IEJ1ZmZlcl0KKworVGhl
IEtleSBCdWZmZXIgc2VyaWFsaXphdGlvbiBmb3JtYXQgaXMgYXMgZm9sbG93czoKK1sxIGJ5dGUg
a2V5IHR5cGVdW1R5cGUgc3BlY2lmaWMgZGF0YV0KKworVHlwZSBzcGVjaWZpYyBzZXJpYWxpemF0
aW9uIGZvcm1hdHMgYXJlIGFzIGZvbGxvd3MgZm9yIGVhY2ggb2YgdGhlIHR5cGVzOgorTWluOgor
WzAgYnl0ZXNdCisKK051bWJlcjoKK1s4IGJ5dGVzIHJlcHJlc2VudGluZyBhIGRvdWJsZSBlbmNv
ZGVkIGluIGxpdHRsZSBlbmRpYW5dCisKK0RhdGU6CitbOCBieXRlcyByZXByZXNlbnRpbmcgYSBk
b3VibGUgZW5jb2RlZCBpbiBsaXR0bGUgZW5kaWFuXQorCitTdHJpbmc6CitbNCBieXRlcyByZXBy
ZXNlbnRpbmcgc3RyaW5nICJsZW5ndGgiIGluIGxpdHRsZSBlbmRpYW5dWyJsZW5ndGgiIG51bWJl
ciBvZiAyLWJ5dGUgcGFpcnMgcmVwcmVzZW50aW5nIEVDTUFTY3JpcHQgMTYtYml0IGNvZGUgdW5p
dHNdCisKK0JpbmFyeToKK1s4IGJ5dGVzIHJlcHJlc2VudGluZyB0aGUgInNpemUiIG9mIHRoZSBi
aW5hcnkgYmxvYl1bInNpemUiIGJ5dGVzXQorCitBcnJheToKK1s4IGJ5dGVzIHJlcHJlc2VudGlu
ZyB0aGUgImxlbmd0aCIgb2YgdGhlIGtleSBhcnJheV1bImxlbmd0aCIgaW5kaXZpZHVhbCBLZXkg
QnVmZmVyIGVudHJpZXNdCisKK01heDoKK1swIGJ5dGVzXQorKi8KKworc3RhdGljIGNvbnN0IHVp
bnQ4X3QgU0lEQktleVZlcnNpb24gPSAweDAwOworZW51bSBjbGFzcyBTSURCS2V5VHlwZSA6IHVp
bnQ4X3QgeworICAgIE1pbiA9IDB4MDAsCisgICAgTnVtYmVyID0gMHgyMCwKKyAgICBEYXRlID0g
MHg0MCwKKyAgICBTdHJpbmcgPSAweDYwLAorICAgIEJpbmFyeSA9IDB4ODAsCisgICAgQXJyYXkg
PSAweEEwLAorICAgIE1heCA9IDB4RkYsCit9OworCitzdGF0aWMgU0lEQktleVR5cGUgc2VyaWFs
aXplZFR5cGVGb3JLZXlUeXBlKEluZGV4ZWREQjo6S2V5VHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNaW46CisgICAgICAgIHJl
dHVybiBTSURCS2V5VHlwZTo6TWluOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1i
ZXI6CisgICAgICAgIHJldHVybiBTSURCS2V5VHlwZTo6TnVtYmVyOworICAgIGNhc2UgSW5kZXhl
ZERCOjpLZXlUeXBlOjpEYXRlOgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6OkRhdGU7Cisg
ICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKKyAgICAgICAgcmV0dXJuIFNJREJL
ZXlUeXBlOjpTdHJpbmc7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkJpbmFyeToKKyAg
ICAgICAgcmV0dXJuIFNJREJLZXlUeXBlOjpCaW5hcnk7CisgICAgY2FzZSBJbmRleGVkREI6Oktl
eVR5cGU6OkFycmF5OgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6OkFycmF5OworICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNYXg6CisgICAgICAgIHJldHVybiBTSURCS2V5VHlwZTo6
TWF4OworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZhbGlkOgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07Cit9CisKKyNpZiBDUFUoQklHX0VORElB
TikgfHwgQ1BVKE1JRERMRV9FTkRJQU4pIHx8IENQVShORUVEU19BTElHTkVEX0FDQ0VTUykKKyNk
ZWZpbmUgQVNTVU1FX0xJVFRMRV9FTkRJQU4gMAorI2Vsc2UKKyNkZWZpbmUgQVNTVU1FX0xJVFRM
RV9FTkRJQU4gMQorI2VuZGlmCisKKyNpZiBBU1NVTUVfTElUVExFX0VORElBTgordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRlTGl0dGxlRW5kaWFuKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCBUIHZhbHVlKQoreworICAgIGJ1ZmZlci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisjZWxzZQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRlTGl0dGxlRW5kaWFuKFZlY3RvcjxjaGFyPiYgYnVm
ZmVyLCBUIHZhbHVlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YoVCk7
IGkrKykgeworICAgICAgICBidWZmZXIuYXBwZW5kKHZhbHVlICYgMHhGRik7CisgICAgICAgIHZh
bHVlID4+PSA4OworICAgIH0KK30KKyNlbmRpZgorI2lmIEFTU1VNRV9MSVRUTEVfRU5ESUFOCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGJvb2wgcmVhZExpdHRsZUVuZGlhbihjb25zdCB1
aW50OF90KiYgcHRyLCBjb25zdCB1aW50OF90KiBlbmQsIFQmIHZhbHVlKQoreworICAgIGlmIChw
dHIgPiBlbmQgLSBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoc2l6ZW9mKFQpID09IDEpCisgICAgICAgIHZhbHVlID0gKnB0cisrOworICAgIGVsc2Ugewor
ICAgICAgICB2YWx1ZSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihwdHIpOworICAgICAg
ICBwdHIgKz0gc2l6ZW9mKFQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbHNlCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGJvb2wgcmVhZExpdHRsZUVuZGlhbihjb25zdCB1
aW50OF90KiYgcHRyLCBjb25zdCB1aW50OF90KiBlbmQsIFQmIHZhbHVlKQoreworICAgIGlmIChw
dHIgPiBlbmQgLSBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoc2l6ZW9mKFQpID09IDEpCisgICAgICAgIHZhbHVlID0gKnB0cisrOworICAgIGVsc2Ugewor
ICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
b2YoVCk7IGkrKykKKyAgICAgICAgICAgIHZhbHVlICs9ICgoVCkqcHRyKyspIDw8IChpICogOCk7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdyaXRl
RG91YmxlKFZlY3RvcjxjaGFyPiYgZGF0YSwgZG91YmxlIGQpCit7CisgICAgdW5pb24geworICAg
ICAgICBkb3VibGUgZDsKKyAgICAgICAgdWludDY0X3QgaTY0OworICAgIH0gdTsKKyAgICB1LmQg
PSBkOworICAgIHdyaXRlTGl0dGxlRW5kaWFuKGRhdGEsIHUuaTY0KTsKK30KKworc3RhdGljIGJv
b2wgcmVhZERvdWJsZShjb25zdCB1aW50OF90KiYgZGF0YSwgY29uc3QgdWludDhfdCogZW5kLCBk
b3VibGUmIGQpCit7CisgICAgdW5pb24geworICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgdWlu
dDY0X3QgaTY0OworICAgIH0gdTsKKyAgICBpZiAoIXJlYWRMaXR0bGVFbmRpYW4oZGF0YSwgZW5k
LCB1Lmk2NCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGQgPSB1LmQ7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUtleShWZWN0b3I8Y2hhcj4mIGRhdGEs
IGNvbnN0IElEQktleURhdGEmIGtleSkKK3sKKyAgICBTSURCS2V5VHlwZSB0eXBlID0gc2VyaWFs
aXplZFR5cGVGb3JLZXlUeXBlKGtleS50eXBlKCkpOworICAgIGRhdGEuYXBwZW5kKHN0YXRpY19j
YXN0PGNoYXI+KHR5cGUpKTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgU0lEQktl
eVR5cGU6Ok51bWJlcjoKKyAgICAgICAgd3JpdGVEb3VibGUoZGF0YSwga2V5Lm51bWJlcigpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6RGF0ZToKKyAgICAgICAgd3Jp
dGVEb3VibGUoZGF0YSwga2V5LmRhdGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0lE
QktleVR5cGU6OlN0cmluZzogeworICAgICAgICBhdXRvIHN0cmluZyA9IGtleS5zdHJpbmcoKTsK
KyAgICAgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgICAgICB3cml0
ZUxpdHRsZUVuZGlhbihkYXRhLCBsZW5ndGgpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihkYXRhLCBz
dHJpbmdbaV0pOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNJREJLZXlUeXBl
OjpCaW5hcnk6IHsKKyAgICAgICAgYXV0byYgYnVmZmVyID0ga2V5LmJpbmFyeSgpOworICAgICAg
ICB1aW50NjRfdCBzaXplID0gYnVmZmVyLnNpemUoKTsKKyAgICAgICAgd3JpdGVMaXR0bGVFbmRp
YW4oZGF0YSwgc2l6ZSk7CisKKyAgICAgICAgYXV0byogYnVmZmVyRGF0YSA9IGJ1ZmZlci5kYXRh
KCk7CisgICAgICAgIEFTU0VSVChidWZmZXJEYXRhIHx8ICFzaXplKTsKKyAgICAgICAgaWYgKGJ1
ZmZlckRhdGEpCisgICAgICAgICAgICBkYXRhLmFwcGVuZChidWZmZXJEYXRhLT5kYXRhKCksIGJ1
ZmZlckRhdGEtPnNpemUoKSk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU0lE
QktleVR5cGU6OkFycmF5OiB7CisgICAgICAgIGF1dG8mIGFycmF5ID0ga2V5LmFycmF5KCk7Cisg
ICAgICAgIHVpbnQ2NF90IHNpemUgPSBhcnJheS5zaXplKCk7CisgICAgICAgIHdyaXRlTGl0dGxl
RW5kaWFuKGRhdGEsIHNpemUpOworICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGFycmF5KQorICAg
ICAgICAgICAgZW5jb2RlS2V5KGRhdGEsIGtleSk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgU0lEQktleVR5cGU6Ok1pbjoKKyAgICBjYXNlIFNJREJLZXlUeXBlOjpNYXg6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKwogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXpl
SURCS2V5RGF0YShjb25zdCBJREJLZXlEYXRhJiBrZXkpCiB7CisjaWYgVVNFKENGKQorICAgIFZl
Y3RvcjxjaGFyPiBkYXRhOworICAgIGRhdGEuYXBwZW5kKFNJREJLZXlWZXJzaW9uKTsKKworICAg
IGVuY29kZUtleShkYXRhLCBrZXkpOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmFkb3B0VmVj
dG9yKGRhdGEpOworI2Vsc2UKICAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVuY29k
ZXIoKTsKICAgICBrZXkuZW5jb2RlKCplbmNvZGVyKTsKICAgICByZXR1cm4gZW5jb2Rlci0+Zmlu
aXNoRW5jb2RpbmcoKTsKKyNlbmRpZgorCit9CisKK3N0YXRpYyBib29sIGRlY29kZUtleShjb25z
dCB1aW50OF90KiYgZGF0YSwgY29uc3QgdWludDhfdCogZW5kLCBJREJLZXlEYXRhJiByZXN1bHQp
Cit7CisgICAgaWYgKCFkYXRhIHx8IGRhdGEgPj0gZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBTSURCS2V5VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8U0lEQktleVR5cGU+KGRhdGEr
K1swXSk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TWluOgor
ICAgICAgICByZXN1bHQgPSBJREJLZXlEYXRhOjptaW5pbXVtKCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2UgU0lEQktleVR5cGU6Ok1heDoKKyAgICAgICAgcmVzdWx0ID0gSURCS2V5
RGF0YTo6bWF4aW11bSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNJREJLZXlU
eXBlOjpOdW1iZXI6IHsKKyAgICAgICAgZG91YmxlIGQ7CisgICAgICAgIGlmICghcmVhZERvdWJs
ZShkYXRhLCBlbmQsIGQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJl
c3VsdC5zZXROdW1iZXJWYWx1ZShkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGNhc2UgU0lEQktleVR5cGU6OkRhdGU6IHsKKyAgICAgICAgZG91YmxlIGQ7CisgICAgICAgIGlm
ICghcmVhZERvdWJsZShkYXRhLCBlbmQsIGQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHJlc3VsdC5zZXREYXRlVmFsdWUoZCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBjYXNlIFNJREJLZXlUeXBlOjpTdHJpbmc6IHsKKyAgICAgICAgdWludDMyX3Qg
bGVuZ3RoOworICAgICAgICBpZiAoIXJlYWRMaXR0bGVFbmRpYW4oZGF0YSwgZW5kLCBsZW5ndGgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1
aW50NjRfdD4oZW5kIC0gZGF0YSkgPCBsZW5ndGggKiAyKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAgICAgICBidWZmZXIucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB1aW50MTZfdCBjaDsKKyAgICAgICAgICAg
IGlmICghcmVhZExpdHRsZUVuZGlhbihkYXRhLCBlbmQsIGNoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKGNoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJlc3VsdC5zZXRTdHJpbmdWYWx1ZShTdHJpbmc6OmFkb3B0KFdU
Rk1vdmUoYnVmZmVyKSkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNl
IFNJREJLZXlUeXBlOjpCaW5hcnk6IHsKKyAgICAgICAgdWludDY0X3Qgc2l6ZTY0OworICAgICAg
ICBpZiAoIXJlYWRMaXR0bGVFbmRpYW4oZGF0YSwgZW5kLCBzaXplNjQpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oZW5kIC0g
ZGF0YSkgPCBzaXplNjQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYg
KHNpemU2NCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNpemU2NCk7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yOworCisgICAg
ICAgIGRhdGFWZWN0b3IuYXBwZW5kKGRhdGEsIHNpemUpOworICAgICAgICBkYXRhICs9IHNpemU7
CisKKyAgICAgICAgcmVzdWx0LnNldEJpbmFyeVZhbHVlKFRocmVhZFNhZmVEYXRhQnVmZmVyOjph
ZG9wdFZlY3RvcihkYXRhVmVjdG9yKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBjYXNlIFNJREJLZXlUeXBlOjpBcnJheTogeworICAgICAgICB1aW50NjRfdCBzaXplNjQ7Cisg
ICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlhbihkYXRhLCBlbmQsIHNpemU2NCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHNpemU2NCA+IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemU2NCk7CisgICAgICAgIFZl
Y3RvcjxJREJLZXlEYXRhPiBhcnJheTsKKyAgICAgICAgYXJyYXkucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzaXplKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICAgICAgSURCS2V5RGF0YSBrZXlEYXRhOworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVLZXkoZGF0YSwgZW5kLCBrZXlEYXRhKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgIEFTU0VSVChrZXlEYXRhLmlzVmFsaWQoKSk7CisgICAgICAgICAgICBh
cnJheS51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShrZXlEYXRhKSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXN1bHQuc2V0QXJyYXlWYWx1ZShhcnJheSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIExPR19FUlJPUigiZGVjb2RlS2V5IGVuY291
bnRlcmVkIHVuZXhwZWN0ZWQgdHlwZTogJWkiLCAoaW50KXR5cGUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQogfQogCiBib29sIGRlc2VyaWFsaXplSURCS2V5RGF0YShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgSURCS2V5RGF0YSYgcmVzdWx0KQpAQCAtMTA2LDggKzQx
MCwyOSBAQCBib29sIGRlc2VyaWFsaXplSURCS2V5RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBz
aXplX3Qgc2l6ZSwgSURCS2V5RGF0YSYgcmVzdWx0KQogICAgIGlmICghZGF0YSB8fCAhc2l6ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisjaWYgVVNFKENGKQorICAgIGlmIChkYXRhWzBdID09
IExlZ2FjeVNlcmlhbGl6ZWRLZXlWZXJzaW9uKSB7CisgICAgICAgIGF1dG8gZGVjb2RlciA9IEtl
eWVkRGVjb2Rlcjo6ZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIElEQktleURh
dGE6OmRlY29kZSgqZGVjb2RlciwgcmVzdWx0KTsKKyAgICB9CisKKyAgICAvLyBWZXJpZnkgdGhp
cyBpcyBhIFNlcmlhbGl6ZWRJREJLZXkgdmVyc2lvbiB3ZSB1bmRlcnN0YW5kLgorICAgIGNvbnN0
IHVpbnQ4X3QqIGN1cnJlbnQgPSBkYXRhOworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGRhdGEg
KyBzaXplOworICAgIGlmIChjdXJyZW50KytbMF0gIT0gU0lEQktleVZlcnNpb24pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChkZWNvZGVLZXkoY3VycmVudCwgZW5kLCByZXN1bHQp
KSB7CisgICAgICAgIC8vIEV2ZW4gaWYgd2Ugc3VjY2Vzc2Z1bGx5IGRlY29kZWQgYSBrZXksIHRo
ZSBkZXNlcmlhbGl6ZSBpcyBvbmx5IHN1Y2Nlc3NmdWwKKyAgICAgICAgLy8gaWYgd2UgYWN0dWFs
bHkgY29uc3VtZWQgYWxsIGlucHV0IGRhdGEuCisgICAgICAgIHJldHVybiBjdXJyZW50ID09IGVu
ZDsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQogICAgIGF1dG8gZGVjb2RlciA9
IEtleWVkRGVjb2Rlcjo6ZGVjb2RlcihkYXRhLCBzaXplKTsKICAgICByZXR1cm4gSURCS2V5RGF0
YTo6ZGVjb2RlKCpkZWNvZGVyLCByZXN1bHQpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJpYWxpemF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5oCmluZGV4IDU5NzIwM2ViYjYwZjIwZmRjOTY5MzJm
NTdlMjUyNGJmZjczMjFiMmMuLmJmN2ExNjc0ODBiNTgyMGMyNmE5ODVjOWNkM2I0NmMwM2RjYTJl
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJpYWxpemF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaApAQCAtMzksNiArMzksNyBAQCBib29sIGRlc2VyaWFs
aXplSURCS2V5UGF0aChjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBP
cHRpb25hbDxJRAogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlEYXRhKGNv
bnN0IElEQktleURhdGEmKTsKIGJvb2wgZGVzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IHVpbnQ4
X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIElEQktleURhdGEmKTsKK2ludCBjb21wYXJl
U2VyaWFsaXplZElEQktleURhdGEoY29uc3QgdWludDhfdCogYnVmZmVyMSwgc2l6ZV90IGJ1ZmZl
cjFTaXplLCBjb25zdCB1aW50OF90KiBidWZmZXIyLCBzaXplX3QgYnVmZmVyMlNpemUpOwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAK
aW5kZXggM2RmODM1MjZiOTFkMWFlZGEwZDRlMzc1ZjVlNWY3ZWU5NjcxYWQxOS4uYTJjY2NhZGM3
OWQ5ZTUwNTJjOTE1NTI2MDQ4ZmNlMGQwNmQ0NDdlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5jcHAKQEAgLTExODMsNiArMTE4Myw4IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBj
CiAgICAgICAgIGJvb2wgaGFzUmVjb3JkOwogICAgICAgICBJREJFcnJvciBlcnJvcjsKICAgICAg
ICAgZm9yIChhdXRvJiBpbmRleEtleSA6IGluZGV4S2V5cykgeworICAgICAgICAgICAgaWYgKCFp
bmRleEtleS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBlcnJvciA9IHVuY2hlY2tlZEhhc0luZGV4UmVjb3JkKGluZm8sIGluZGV4S2V5LCBoYXNSZWNv
cmQpOwogICAgICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3I7CkBAIC0xMTkyLDYgKzExOTQsOCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywg
YwogICAgIH0KIAogICAgIGZvciAoYXV0byYgaW5kZXhLZXkgOiBpbmRleEtleXMpIHsKKyAgICAg
ICAgaWYgKCFpbmRleEtleS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgYXV0byBlcnJvciA9IHVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGluZm8ub2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKCksIGluZm8uaWRlbnRpZmllcigpLCBrZXksIGluZGV4S2V5KTsKICAgICAgICAg
aWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8g
cHV0IGluZGV4IHJlY29yZCBmb3IgbmV3bHkgY3JlYXRlZCBpbmRleCIpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDcyOTcy
NWJjYTdhMjJhMTU3NmZiMTlhMWUyYzEyNWZmYjFlMTlmNWEuLjk4MjMzYzE5MzliMzM2NzBmNGJk
NGY0YzY5MGM1NzE0ODJkM2UzMTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNi0xMS0xNCAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW5kZXhlZERCIDIu
MDogS2V5IGNvbGxhdGlvbiBkdXJpbmcgU1FMaXRlIGxvb2t1cHMgaXMgaW5zYW5lbHkgc2xvdy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDc1NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdEV4
cGVjdGF0aW9uczogVW5za2lwIGEgdGVzdCB0aGF0IHBhc3NlcyBldmVuIGluIGRlYnVnIGJ1aWxk
cywgYW5kIHJlLWNsYXNzaWZ5CisgICAgICAgICAgYSB0ZXN0IHRoYXQgdXNlZCB0byBiZSB0b28t
c2xvdyBldmVyeXdoZXJlIHRvIGJlIHRvby1zbG93IG9ubHkgaW4gZGVidWcgYnVpbGRzLgorCiAy
MDE2LTExLTE0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW1dlYkdMMl0gVGVhY2ggV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSBhYm91dCBuZXcg
dGV4dHVyZSBpbnRlcm5hbCBmb3JtYXRzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhw
ZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA5N2VlZmQ5ZjRl
OGViYWU5MzM1MmQzMzhmM2ZmZTBiMWFjYzQyMjlmLi5iNmFlYTBjZGNmYTBjNjg0M2M1MTc3ZTY5
ZjA2ODU1ODMxMTBjMTNkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25z
CisrKyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTg0OCw5ICs4NDgsOCBAQCBz
dG9yYWdlL2luZGV4ZWRkYi9kZWxldGVkYXRhYmFzZS1kZWxheWVkLWJ5LXZlcnNpb25jaGFuZ2Uu
aHRtbCBbIFNraXAgXQogIyBJdCdzIHVuY2xlYXIgaWYgd2UgbmVlZCB0byBjb250aW51ZSBzdXBw
b3J0aW5nIHRoaXMuCiBzdG9yYWdlL2luZGV4ZWRkYi9wcm9wZXJ0aWVzLWRpc2FibGVkLWF0LXJ1
bnRpbWUuaHRtbCBbIEZhaWx1cmUgXQogCi0jIENvbXBsZXRlcyB3aXRoIHBhc3NpbmcgcmVzdWx0
cywgYnV0IHRvbyBzbG93bHkgZm9yIG91ciB0ZXN0IHRpbWVvdXRzLgotaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRiaW5kZXgtbXVsdGllbnRyeS1iaWcuaHRtIFsg
RmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJj
dXJzb3JfaXRlcmF0aW5nLmh0bSBbIEZhaWx1cmUgXQorIyBJbiBkZWJ1ZyBidWlsZHMsIHJ1bnMg
dG9vIHNsb3dseSBmb3IgdGhlIHRlc3QgdGltZW91dC4KK1sgRGVidWcgXSBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJpbmRleC1tdWx0aWVudHJ5LWJpZy5odG0g
WyBGYWlsdXJlIF0KIAogIyBTUUxpdGUgYmFja2VuZCB0ZXN0cyB0aGF0IHRpbWVvdXQKIHN0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi90cmFuc2FjdGlvbi1zY2hlZHVsZXItMS5odG1sIFsgU2tpcCBd
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294839</attachid>
            <date>2016-11-15 08:50:07 -0800</date>
            <delta_ts>2016-11-15 12:36:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164754-20161115085006.patch</filename>
            <type>text/plain</type>
            <size>17087</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmU0ZGJjYzVlMjhmOWMy
YzNkZmQxNTAzOWRmOTJmNjM1MjAzOTI4Mi4uMDhlMGNhNzIwMjM4NzRlODU5MWVhZDRiYWMyNDZm
YWNkNGQyMTg3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTExLTE1ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREIgMi4wOiBL
ZXkgY29sbGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3VwcyBpcyBpbnNhbmVseSBzbG93LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NzU0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChDb3ZlcmVkIGJ5ICphbGwqIGV4aXN0aW5nIHRlc3RzLCBhbmQgdW5za2lwcyBhIHByZXZpb3Vz
bHktdG9vLXNsb3cgdGVzdCkKKworICAgICAgICBUaGUgbmV3IHNlcmlhbGl6YXRpb24gZm9ybWF0
IGlzIHN0cmFpZ2h0IGZvcndhcmQgZW5vdWdoIHRvIGdldCBiYWNrIHdpdGggbWluaW1hbCBkb2N1
bWVudGF0aW9uCisgICAgICAgIGluIGEgY29tbWVudCB3aXRoIHRoZSBjb2RlIGl0c2VsZiBiZWlu
ZyB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEl0IGhh
bmRsZXMgYWxsIGN1cnJlbnQgSURCIGtleSB0eXBlcyBhbmQgbGVhdmVzIHJvb20gZm9yIGZ1dHVy
ZSBrZXkgdHlwZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OnNldEJpbmFyeVZhbHVlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlEYXRhOjpiaW5hcnkpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emVkVHlwZUZvcktleVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMaXR0bGVFbmRpYW4p
OgorICAgICAgICAoV2ViQ29yZTo6cmVhZExpdHRsZUVuZGlhbik6CisgICAgICAgIChXZWJDb3Jl
Ojp3cml0ZURvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkRG91YmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJREJLZXlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXNlcmlhbGl6ZUlEQktleURhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJpYWxpemF0aW9uLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KTog
VmVyaWZ5IHRoYXQgVHlwZSA9PSBJbnZhbGlkIAorICAgICAgICAgIGtleXMgZG9uJ3QgZ2V0IGlu
dG8gdGhlIGRhdGFiYXNlLiBUaGlzIHdhcyBoYXBwZW5pbmcgYmVmb3JlIGFuZCB0aGUgcHJldmlv
dXMgc2VyaWFsaXphdGlvbgorICAgICAgICAgIHN1cHBvcnRlZCBpdCwgYnV0IHRoZXJlJ3MgY2xl
YXJseSBubyBwb2ludCBpbiBzdXBwb3J0aW5nIGl0IHdpdGggdGhlIG5ldyBzZXJpYWxpemF0aW9u
LgorCiAyMDE2LTExLTE1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDg2MDY/KTogTGF5b3V0VGVzdCBmYXN0L21lZGlhc3Ry
ZWFtL2VudW1lcmF0aW5nLWNyYXNoLmh0bWwgaXMgYSBmbGFreSBjcmFzaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcAppbmRleCBkOGQ1Mzk1Y2E2
NTA2MjUyNWZiNjczZDYyZDg1ZDI0Yjc1N2NlZDRjLi4zZDVhYmYzODNmZTI0NjhhNGIxZjQwZWNi
YjQ1N2UxNWQ3Y2MxNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmNwcApAQCAtMzg2LDYgKzM4NiwxNCBAQCB2b2lkIElEQktleURhdGE6OnNl
dEFycmF5VmFsdWUoY29uc3QgVmVjdG9yPElEQktleURhdGE+JiB2YWx1ZSkKICAgICBtX2lzTnVs
bCA9IGZhbHNlOwogfQogCit2b2lkIElEQktleURhdGE6OnNldEJpbmFyeVZhbHVlKGNvbnN0IFRo
cmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSkKK3sKKyAgICAqdGhpcyA9IElEQktleURhdGEoKTsK
KyAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgbV90eXBlID0gS2V5VHlwZTo6QmluYXJ5OworICAg
IG1faXNOdWxsID0gZmFsc2U7Cit9CisKIHZvaWQgSURCS2V5RGF0YTo6c2V0U3RyaW5nVmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAqdGhpcyA9IElEQktleURhdGEoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAppbmRleCAwYmFmZDU0
NmY1YTYzZThjYzAwYjQ4MmVmZGY1NzMwMjdjOGQ1NzU4Li45OGYwYjczNTkwNTUyNWY5OTgwZDYx
MzAxODJjM2Y2Y2ZkYjQyNGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oCkBAIC03OSw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBpbnQgY29tcGFyZShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3Q7CiAKICAgICB2
b2lkIHNldEFycmF5VmFsdWUoY29uc3QgVmVjdG9yPElEQktleURhdGE+Jik7CisgICAgdm9pZCBz
ZXRCaW5hcnlWYWx1ZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwogICAgIHZvaWQgc2V0
U3RyaW5nVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXREYXRlVmFsdWUoZG91Ymxl
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE51bWJlclZhbHVlKGRvdWJsZSk7CkBAIC0x
NzIsNiArMTczLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4o
bV92YWx1ZSk7CiAgICAgfQogCisgICAgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJpbmFy
eSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkJpbmFy
eSk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1
ZSk7CisgICAgfQorCiAgICAgY29uc3QgVmVjdG9yPElEQktleURhdGE+JiBhcnJheSgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkFycmF5KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxp
emF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJpYWxpemF0aW9uLmNwcAppbmRleCA1ODBlMzUxMDc1NTkyNzcwMGNkNWY3MzIzMmRkODA4MWQ2
NTViNjcyLi45YmU1YzliY2FmNGI0YjQyY2JlYzA4NTY1MDJiZDEyMTA0ZGZlODU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXph
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcmlhbGl6YXRpb24uY3BwCkBAIC05NCwxMSArOTQsMzE2IEBAIGJvb2wgZGVzZXJpYWxpemVJ
REJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBPcHRpb25hbDxJREJL
ZXlQYXRoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIEZJWE1FOiBMaW51eCBwb3J0cyB1c2Vz
IEtleWVkRW5jb2RlckdsaWIgZm9yIHRoZWlyIElEQktleXMuCisvLyBXaGVuIGEgR2xpYiBtYWlu
dGFpbmVyIGNvbWVzIGFsb25nIHRvIGVuYWJsZSB0aGUgbmV3IHNlcmlhbGl6YXRpb24gdGhleSds
bCBuZWVkIHRvCisvLyBkZW5vdGUgYSBHbGliIG1hZ2ljIGNoYXJhY3RlciBoZXJlLgorLy8gTGV0
J3MgaG9wZSBpdCdzIG5vdCAweDAwLgorCitzdGF0aWMgY29uc3QgdWludDhfdCBMZWdhY3lTZXJp
YWxpemVkS2V5VmVyc2lvbiA9ICdiJzsKKworCisvKgorVGhlIElEQktleURhdGEgc2VyaWFsaXph
dGlvbiBmb3JtYXQgaXMgYXMgZm9sbG93czoKK1sxIGJ5dGUgdmVyc2lvbiBoZWFkZXJdW0tleSBC
dWZmZXJdCisKK1RoZSBLZXkgQnVmZmVyIHNlcmlhbGl6YXRpb24gZm9ybWF0IGlzIGFzIGZvbGxv
d3M6CitbMSBieXRlIGtleSB0eXBlXVtUeXBlIHNwZWNpZmljIGRhdGFdCisKK1R5cGUgc3BlY2lm
aWMgc2VyaWFsaXphdGlvbiBmb3JtYXRzIGFyZSBhcyBmb2xsb3dzIGZvciBlYWNoIG9mIHRoZSB0
eXBlczoKK01pbjoKK1swIGJ5dGVzXQorCitOdW1iZXI6CitbOCBieXRlcyByZXByZXNlbnRpbmcg
YSBkb3VibGUgZW5jb2RlZCBpbiBsaXR0bGUgZW5kaWFuXQorCitEYXRlOgorWzggYnl0ZXMgcmVw
cmVzZW50aW5nIGEgZG91YmxlIGVuY29kZWQgaW4gbGl0dGxlIGVuZGlhbl0KKworU3RyaW5nOgor
WzQgYnl0ZXMgcmVwcmVzZW50aW5nIHN0cmluZyAibGVuZ3RoIiBpbiBsaXR0bGUgZW5kaWFuXVsi
bGVuZ3RoIiBudW1iZXIgb2YgMi1ieXRlIHBhaXJzIHJlcHJlc2VudGluZyBFQ01BU2NyaXB0IDE2
LWJpdCBjb2RlIHVuaXRzXQorCitCaW5hcnk6CitbOCBieXRlcyByZXByZXNlbnRpbmcgdGhlICJz
aXplIiBvZiB0aGUgYmluYXJ5IGJsb2JdWyJzaXplIiBieXRlc10KKworQXJyYXk6CitbOCBieXRl
cyByZXByZXNlbnRpbmcgdGhlICJsZW5ndGgiIG9mIHRoZSBrZXkgYXJyYXldWyJsZW5ndGgiIGlu
ZGl2aWR1YWwgS2V5IEJ1ZmZlciBlbnRyaWVzXQorCitNYXg6CitbMCBieXRlc10KKyovCisKK3N0
YXRpYyBjb25zdCB1aW50OF90IFNJREJLZXlWZXJzaW9uID0gMHgwMDsKK2VudW0gY2xhc3MgU0lE
QktleVR5cGUgOiB1aW50OF90IHsKKyAgICBNaW4gPSAweDAwLAorICAgIE51bWJlciA9IDB4MjAs
CisgICAgRGF0ZSA9IDB4NDAsCisgICAgU3RyaW5nID0gMHg2MCwKKyAgICBCaW5hcnkgPSAweDgw
LAorICAgIEFycmF5ID0gMHhBMCwKKyAgICBNYXggPSAweEZGLAorfTsKKworc3RhdGljIFNJREJL
ZXlUeXBlIHNlcmlhbGl6ZWRUeXBlRm9yS2V5VHlwZShJbmRleGVkREI6OktleVR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWlu
OgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6Ok1pbjsKKyAgICBjYXNlIEluZGV4ZWREQjo6
S2V5VHlwZTo6TnVtYmVyOgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6Ok51bWJlcjsKKyAg
ICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6RGF0ZToKKyAgICAgICAgcmV0dXJuIFNJREJLZXlU
eXBlOjpEYXRlOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmc6CisgICAgICAg
IHJldHVybiBTSURCS2V5VHlwZTo6U3RyaW5nOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBl
OjpCaW5hcnk6CisgICAgICAgIHJldHVybiBTSURCS2V5VHlwZTo6QmluYXJ5OworICAgIGNhc2Ug
SW5kZXhlZERCOjpLZXlUeXBlOjpBcnJheToKKyAgICAgICAgcmV0dXJuIFNJREJLZXlUeXBlOjpB
cnJheTsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4OgorICAgICAgICByZXR1cm4g
U0lEQktleVR5cGU6Ok1heDsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNJ
REJLZXlUeXBlOjpNaW47CisgICAgfTsKK30KKworI2lmIENQVShCSUdfRU5ESUFOKSB8fCBDUFUo
TUlERExFX0VORElBTikgfHwgQ1BVKE5FRURTX0FMSUdORURfQUNDRVNTKQorI2RlZmluZSBBU1NV
TUVfTElUVExFX0VORElBTiAwCisjZWxzZQorI2RlZmluZSBBU1NVTUVfTElUVExFX0VORElBTiAx
CisjZW5kaWYKKworI2lmIEFTU1VNRV9MSVRUTEVfRU5ESUFOCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gc3RhdGljIHZvaWQgd3JpdGVMaXR0bGVFbmRpYW4oVmVjdG9yPGNoYXI+JiBidWZmZXIsIFQg
dmFsdWUpCit7CisgICAgYnVmZmVyLmFwcGVuZChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigm
dmFsdWUpLCBzaXplb2YodmFsdWUpKTsKK30KKyNlbHNlCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RhdGljIHZvaWQgd3JpdGVMaXR0bGVFbmRpYW4oVmVjdG9yPGNoYXI+JiBidWZmZXIsIFQgdmFs
dWUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihUKTsgaSsrKSB7Cisg
ICAgICAgIGJ1ZmZlci5hcHBlbmQodmFsdWUgJiAweEZGKTsKKyAgICAgICAgdmFsdWUgPj49IDg7
CisgICAgfQorfQorI2VuZGlmCisjaWYgQVNTVU1FX0xJVFRMRV9FTkRJQU4KK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCByZWFkTGl0dGxlRW5kaWFuKGNvbnN0IHVpbnQ4X3QqJiBw
dHIsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgVCYgdmFsdWUpCit7CisgICAgaWYgKHB0ciA+IGVuZCAt
IHNpemVvZih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzaXplb2Yo
VCkgPT0gMSkKKyAgICAgICAgdmFsdWUgPSAqcHRyKys7CisgICAgZWxzZSB7CisgICAgICAgIHZh
bHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHB0cik7CisgICAgICAgIHB0ciArPSBz
aXplb2YoVCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorI2Vsc2UKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCByZWFkTGl0dGxlRW5kaWFuKGNvbnN0IHVpbnQ4X3QqJiBw
dHIsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgVCYgdmFsdWUpCit7CisgICAgaWYgKHB0ciA+IGVuZCAt
IHNpemVvZih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzaXplb2Yo
VCkgPT0gMSkKKyAgICAgICAgdmFsdWUgPSAqcHRyKys7CisgICAgZWxzZSB7CisgICAgICAgIHZh
bHVlID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihUKTsgaSsr
KQorICAgICAgICAgICAgdmFsdWUgKz0gKChUKSpwdHIrKykgPDwgKGkgKiA4KTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgd3JpdGVEb3VibGUoVmVj
dG9yPGNoYXI+JiBkYXRhLCBkb3VibGUgZCkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIGRvdWJs
ZSBkOworICAgICAgICB1aW50NjRfdCBpNjQ7CisgICAgfSB1OworICAgIHUuZCA9IGQ7CisgICAg
d3JpdGVMaXR0bGVFbmRpYW4oZGF0YSwgdS5pNjQpOworfQorCitzdGF0aWMgYm9vbCByZWFkRG91
YmxlKGNvbnN0IHVpbnQ4X3QqJiBkYXRhLCBjb25zdCB1aW50OF90KiBlbmQsIGRvdWJsZSYgZCkK
K3sKKyAgICB1bmlvbiB7CisgICAgICAgIGRvdWJsZSBkOworICAgICAgICB1aW50NjRfdCBpNjQ7
CisgICAgfSB1OworICAgIGlmICghcmVhZExpdHRsZUVuZGlhbihkYXRhLCBlbmQsIHUuaTY0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZCA9IHUuZDsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIHZvaWQgZW5jb2RlS2V5KFZlY3RvcjxjaGFyPiYgZGF0YSwgY29uc3QgSURC
S2V5RGF0YSYga2V5KQoreworICAgIFNJREJLZXlUeXBlIHR5cGUgPSBzZXJpYWxpemVkVHlwZUZv
cktleVR5cGUoa2V5LnR5cGUoKSk7CisgICAgZGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4o
dHlwZSkpOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TnVt
YmVyOgorICAgICAgICB3cml0ZURvdWJsZShkYXRhLCBrZXkubnVtYmVyKCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFNJREJLZXlUeXBlOjpEYXRlOgorICAgICAgICB3cml0ZURvdWJsZShk
YXRhLCBrZXkuZGF0ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6
U3RyaW5nOiB7CisgICAgICAgIGF1dG8gc3RyaW5nID0ga2V5LnN0cmluZygpOworICAgICAgICB1
aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgICAgIHdyaXRlTGl0dGxlRW5k
aWFuKGRhdGEsIGxlbmd0aCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkKKyAgICAgICAgICAgIHdyaXRlTGl0dGxlRW5kaWFuKGRhdGEsIHN0cmluZ1tpXSk7
CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkJpbmFyeTog
eworICAgICAgICBhdXRvJiBidWZmZXIgPSBrZXkuYmluYXJ5KCk7CisgICAgICAgIHVpbnQ2NF90
IHNpemUgPSBidWZmZXIuc2l6ZSgpOworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihkYXRhLCBz
aXplKTsKKworICAgICAgICBhdXRvKiBidWZmZXJEYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICAg
ICAgQVNTRVJUKGJ1ZmZlckRhdGEgfHwgIXNpemUpOworICAgICAgICBpZiAoYnVmZmVyRGF0YSkK
KyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGJ1ZmZlckRhdGEtPmRhdGEoKSwgYnVmZmVyRGF0YS0+
c2l6ZSgpKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6
QXJyYXk6IHsKKyAgICAgICAgYXV0byYgYXJyYXkgPSBrZXkuYXJyYXkoKTsKKyAgICAgICAgdWlu
dDY0X3Qgc2l6ZSA9IGFycmF5LnNpemUoKTsKKyAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW4oZGF0
YSwgc2l6ZSk7CisgICAgICAgIGZvciAoYXV0byYga2V5IDogYXJyYXkpCisgICAgICAgICAgICBl
bmNvZGVLZXkoZGF0YSwga2V5KTsKKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBT
SURCS2V5VHlwZTo6TWluOgorICAgIGNhc2UgU0lEQktleVR5cGU6Ok1heDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlEYXRh
KGNvbnN0IElEQktleURhdGEmIGtleSkKIHsKKyNpZiBVU0UoQ0YpCisgICAgVmVjdG9yPGNoYXI+
IGRhdGE7CisgICAgZGF0YS5hcHBlbmQoU0lEQktleVZlcnNpb24pOworCisgICAgZW5jb2RlS2V5
KGRhdGEsIGtleSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoZGF0YSk7
CisjZWxzZQogICAgIGF1dG8gZW5jb2RlciA9IEtleWVkRW5jb2Rlcjo6ZW5jb2RlcigpOwogICAg
IGtleS5lbmNvZGUoKmVuY29kZXIpOwogICAgIHJldHVybiBlbmNvZGVyLT5maW5pc2hFbmNvZGlu
ZygpOworI2VuZGlmCisKK30KKworc3RhdGljIGJvb2wgZGVjb2RlS2V5KGNvbnN0IHVpbnQ4X3Qq
JiBkYXRhLCBjb25zdCB1aW50OF90KiBlbmQsIElEQktleURhdGEmIHJlc3VsdCkKK3sKKyAgICBp
ZiAoIWRhdGEgfHwgZGF0YSA+PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNJ
REJLZXlUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxTSURCS2V5VHlwZT4oZGF0YSsrWzBdKTsKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFNJREJLZXlUeXBlOjpNaW46CisgICAgICAgIHJl
c3VsdCA9IElEQktleURhdGE6Om1pbmltdW0oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBTSURCS2V5VHlwZTo6TWF4OgorICAgICAgICByZXN1bHQgPSBJREJLZXlEYXRhOjptYXhp
bXVtKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU0lEQktleVR5cGU6Ok51bWJl
cjogeworICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgaWYgKCFyZWFkRG91YmxlKGRhdGEsIGVu
ZCwgZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LnNldE51
bWJlclZhbHVlKGQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTSURC
S2V5VHlwZTo6RGF0ZTogeworICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgaWYgKCFyZWFkRG91
YmxlKGRhdGEsIGVuZCwgZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
cmVzdWx0LnNldERhdGVWYWx1ZShkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGNhc2UgU0lEQktleVR5cGU6OlN0cmluZzogeworICAgICAgICB1aW50MzJfdCBsZW5ndGg7Cisg
ICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlhbihkYXRhLCBlbmQsIGxlbmd0aCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90Pihl
bmQgLSBkYXRhKSA8IGxlbmd0aCAqIDIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7CisgICAgICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxlbmd0aCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIHVpbnQxNl90IGNoOworICAgICAgICAgICAgaWYgKCFyZWFk
TGl0dGxlRW5kaWFuKGRhdGEsIGVuZCwgY2gpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoY2gpOworICAgICAgICB9CisK
KyAgICAgICAgcmVzdWx0LnNldFN0cmluZ1ZhbHVlKFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZm
ZXIpKSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5
cGU6OkJpbmFyeTogeworICAgICAgICB1aW50NjRfdCBzaXplNjQ7CisgICAgICAgIGlmICghcmVh
ZExpdHRsZUVuZGlhbihkYXRhLCBlbmQsIHNpemU2NCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihlbmQgLSBkYXRhKSA8IHNp
emU2NCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoc2l6ZTY0ID4g
c3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZTY0
KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3I7CisKKyAgICAgICAgZGF0YVZl
Y3Rvci5hcHBlbmQoZGF0YSwgc2l6ZSk7CisgICAgICAgIGRhdGEgKz0gc2l6ZTsKKworICAgICAg
ICByZXN1bHQuc2V0QmluYXJ5VmFsdWUoVGhyZWFkU2FmZURhdGFCdWZmZXI6OmFkb3B0VmVjdG9y
KGRhdGFWZWN0b3IpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgU0lE
QktleVR5cGU6OkFycmF5OiB7CisgICAgICAgIHVpbnQ2NF90IHNpemU2NDsKKyAgICAgICAgaWYg
KCFyZWFkTGl0dGxlRW5kaWFuKGRhdGEsIGVuZCwgc2l6ZTY0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBpZiAoc2l6ZTY0ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzaXplX3Qg
c2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZTY0KTsKKyAgICAgICAgVmVjdG9yPElEQktl
eURhdGE+IGFycmF5OworICAgICAgICBhcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUp
OworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
ICAgICBJREJLZXlEYXRhIGtleURhdGE7CisgICAgICAgICAgICBpZiAoIWRlY29kZUtleShkYXRh
LCBlbmQsIGtleURhdGEpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgQVNTRVJUKGtleURhdGEuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgIGFycmF5LnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKGtleURhdGEpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3Vs
dC5zZXRBcnJheVZhbHVlKGFycmF5KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgTE9HX0VSUk9SKCJkZWNvZGVLZXkgZW5jb3VudGVyZWQgdW5l
eHBlY3RlZCB0eXBlOiAlaSIsIChpbnQpdHlwZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiB9CiAKIGJvb2wgZGVzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplLCBJREJLZXlEYXRhJiByZXN1bHQpCkBAIC0xMDYsOCArNDExLDI5IEBAIGJv
b2wgZGVzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXpl
LCBJREJLZXlEYXRhJiByZXN1bHQpCiAgICAgaWYgKCFkYXRhIHx8ICFzaXplKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyNpZiBVU0UoQ0YpCisgICAgaWYgKGRhdGFbMF0gPT0gTGVnYWN5U2Vy
aWFsaXplZEtleVZlcnNpb24pIHsKKyAgICAgICAgYXV0byBkZWNvZGVyID0gS2V5ZWREZWNvZGVy
OjpkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gSURCS2V5RGF0YTo6ZGVjb2Rl
KCpkZWNvZGVyLCByZXN1bHQpOworICAgIH0KKworICAgIC8vIFZlcmlmeSB0aGlzIGlzIGEgU2Vy
aWFsaXplZElEQktleSB2ZXJzaW9uIHdlIHVuZGVyc3RhbmQuCisgICAgY29uc3QgdWludDhfdCog
Y3VycmVudCA9IGRhdGE7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gZGF0YSArIHNpemU7Cisg
ICAgaWYgKGN1cnJlbnQrK1swXSAhPSBTSURCS2V5VmVyc2lvbikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGRlY29kZUtleShjdXJyZW50LCBlbmQsIHJlc3VsdCkpIHsKKyAgICAg
ICAgLy8gRXZlbiBpZiB3ZSBzdWNjZXNzZnVsbHkgZGVjb2RlZCBhIGtleSwgdGhlIGRlc2VyaWFs
aXplIGlzIG9ubHkgc3VjY2Vzc2Z1bAorICAgICAgICAvLyBpZiB3ZSBhY3R1YWxseSBjb25zdW1l
ZCBhbGwgaW5wdXQgZGF0YS4KKyAgICAgICAgcmV0dXJuIGN1cnJlbnQgPT0gZW5kOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCiAgICAgYXV0byBkZWNvZGVyID0gS2V5ZWREZWNv
ZGVyOjpkZWNvZGVyKGRhdGEsIHNpemUpOwogICAgIHJldHVybiBJREJLZXlEYXRhOjpkZWNvZGUo
KmRlY29kZXIsIHJlc3VsdCk7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cmlhbGl6YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJpYWxpemF0aW9uLmgKaW5kZXggNTk3MjAzZWJiNjBmMjBmZGM5NjkzMmY1N2UyNTI0YmZm
NzMyMWIyYy4uYmY3YTE2NzQ4MGI1ODIwYzI2YTk4NWM5Y2QzYjQ2YzAzZGNhMmUwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VyaWFsaXphdGlvbi5oCkBAIC0zOSw2ICszOSw3IEBAIGJvb2wgZGVzZXJpYWxpemVJREJLZXlQ
YXRoKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIE9wdGlvbmFsPElE
CiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleURhdGEoY29uc3QgSURCS2V5
RGF0YSYpOwogYm9vbCBkZXNlcmlhbGl6ZUlEQktleURhdGEoY29uc3QgdWludDhfdCogYnVmZmVy
LCBzaXplX3QgYnVmZmVyU2l6ZSwgSURCS2V5RGF0YSYpOworaW50IGNvbXBhcmVTZXJpYWxpemVk
SURCS2V5RGF0YShjb25zdCB1aW50OF90KiBidWZmZXIxLCBzaXplX3QgYnVmZmVyMVNpemUsIGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlcjIsIHNpemVfdCBidWZmZXIyU2l6ZSk7CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAzZGY4
MzUyNmI5MWQxYWVkYTBkNGUzNzVmNWU1ZjdlZTk2NzFhZDE5Li5hMmNjY2FkYzc5ZDllNTA1MmM5
MTU1MjYwNDhmY2UwZDA2ZDQ0N2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cApAQCAtMTE4Myw2ICsxMTgzLDggQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1
bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGMKICAgICAgICAg
Ym9vbCBoYXNSZWNvcmQ7CiAgICAgICAgIElEQkVycm9yIGVycm9yOwogICAgICAgICBmb3IgKGF1
dG8mIGluZGV4S2V5IDogaW5kZXhLZXlzKSB7CisgICAgICAgICAgICBpZiAoIWluZGV4S2V5Lmlz
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGVycm9yID0g
dW5jaGVja2VkSGFzSW5kZXhSZWNvcmQoaW5mbywgaW5kZXhLZXksIGhhc1JlY29yZCk7CiAgICAg
ICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cjsKQEAgLTExOTIsNiArMTE5NCw4IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBjCiAgICAgfQog
CiAgICAgZm9yIChhdXRvJiBpbmRleEtleSA6IGluZGV4S2V5cykgeworICAgICAgICBpZiAoIWlu
ZGV4S2V5LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvIGVy
cm9yID0gdW5jaGVja2VkUHV0SW5kZXhSZWNvcmQoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIo
KSwgaW5mby5pZGVudGlmaWVyKCksIGtleSwgaW5kZXhLZXkpOwogICAgICAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwdXQgaW5kZXgg
cmVjb3JkIGZvciBuZXdseSBjcmVhdGVkIGluZGV4Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzc2MjM2NjhjMGM0MDll
MjRhODQ4Nzg4ZWY1ZDk4YTY5NDA2ODBkZi4uM2M1MTcwN2YyNTA5ZDVhODE5M2JmZmMyMTk2OTA5
NjY4ZWY1ZmJkYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTExLTE1ICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREIgMi4wOiBLZXkgY29s
bGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3VwcyBpcyBpbnNhbmVseSBzbG93LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NzU0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25z
OiBVbnNraXAgYSB0ZXN0IHRoYXQgcGFzc2VzIGV2ZW4gaW4gZGVidWcgYnVpbGRzLCBhbmQgcmUt
Y2xhc3NpZnkKKyAgICAgICAgICBhIHRlc3QgdGhhdCB1c2VkIHRvIGJlIHRvby1zbG93IGV2ZXJ5
d2hlcmUgdG8gYmUgdG9vLXNsb3cgb25seSBpbiBkZWJ1ZyBidWlsZHMuCisKIDIwMTYtMTEtMTUg
IEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgV2ViUlRD
OiB1cGRhdGUgTWVkaWFTdHJlYW0tTWVkaWFFbGVtZW50LXNyY09iamVjdC5odG1sIHRlc3QgYW5k
IHVuc2tpcCBpdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xh
eW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOTdlZWZkOWY0ZThlYmFlOTMzNTJkMzM4
ZjNmZmUwYjFhY2M0MjI5Zi4uYjZhZWEwY2RjZmEwYzY4NDNjNTE3N2U2OWYwNjg1NTgzMTEwYzEz
ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRU
ZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC04NDgsOSArODQ4LDggQEAgc3RvcmFnZS9pbmRleGVk
ZGIvZGVsZXRlZGF0YWJhc2UtZGVsYXllZC1ieS12ZXJzaW9uY2hhbmdlLmh0bWwgWyBTa2lwIF0K
ICMgSXQncyB1bmNsZWFyIGlmIHdlIG5lZWQgdG8gY29udGludWUgc3VwcG9ydGluZyB0aGlzLgog
c3RvcmFnZS9pbmRleGVkZGIvcHJvcGVydGllcy1kaXNhYmxlZC1hdC1ydW50aW1lLmh0bWwgWyBG
YWlsdXJlIF0KIAotIyBDb21wbGV0ZXMgd2l0aCBwYXNzaW5nIHJlc3VsdHMsIGJ1dCB0b28gc2xv
d2x5IGZvciBvdXIgdGVzdCB0aW1lb3V0cy4KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvSW5kZXhlZERCL2lkYmluZGV4LW11bHRpZW50cnktYmlnLmh0bSBbIEZhaWx1cmUgXQotaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRiY3Vyc29yX2l0ZXJhdGlu
Zy5odG0gWyBGYWlsdXJlIF0KKyMgSW4gZGVidWcgYnVpbGRzLCBydW5zIHRvbyBzbG93bHkgZm9y
IHRoZSB0ZXN0IHRpbWVvdXQuCitbIERlYnVnIF0gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9JbmRleGVkREIvaWRiaW5kZXgtbXVsdGllbnRyeS1iaWcuaHRtIFsgRmFpbHVyZSBdCiAK
ICMgU1FMaXRlIGJhY2tlbmQgdGVzdHMgdGhhdCB0aW1lb3V0CiBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vdHJhbnNhY3Rpb24tc2NoZWR1bGVyLTEuaHRtbCBbIFNraXAgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294865</attachid>
            <date>2016-11-15 12:36:44 -0800</date>
            <delta_ts>2016-11-15 12:37:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164754-20161115123642.patch</filename>
            <type>text/plain</type>
            <size>17904</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmU0ZGJjYzVlMjhmOWMy
YzNkZmQxNTAzOWRmOTJmNjM1MjAzOTI4Mi4uMDhlMGNhNzIwMjM4NzRlODU5MWVhZDRiYWMyNDZm
YWNkNGQyMTg3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTExLTE1ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREIgMi4wOiBL
ZXkgY29sbGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3VwcyBpcyBpbnNhbmVseSBzbG93LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NzU0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChDb3ZlcmVkIGJ5ICphbGwqIGV4aXN0aW5nIHRlc3RzLCBhbmQgdW5za2lwcyBhIHByZXZpb3Vz
bHktdG9vLXNsb3cgdGVzdCkKKworICAgICAgICBUaGUgbmV3IHNlcmlhbGl6YXRpb24gZm9ybWF0
IGlzIHN0cmFpZ2h0IGZvcndhcmQgZW5vdWdoIHRvIGdldCBiYWNrIHdpdGggbWluaW1hbCBkb2N1
bWVudGF0aW9uCisgICAgICAgIGluIGEgY29tbWVudCB3aXRoIHRoZSBjb2RlIGl0c2VsZiBiZWlu
ZyB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEl0IGhh
bmRsZXMgYWxsIGN1cnJlbnQgSURCIGtleSB0eXBlcyBhbmQgbGVhdmVzIHJvb20gZm9yIGZ1dHVy
ZSBrZXkgdHlwZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OnNldEJpbmFyeVZhbHVlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlEYXRhOjpiaW5hcnkpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emVkVHlwZUZvcktleVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMaXR0bGVFbmRpYW4p
OgorICAgICAgICAoV2ViQ29yZTo6cmVhZExpdHRsZUVuZGlhbik6CisgICAgICAgIChXZWJDb3Jl
Ojp3cml0ZURvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkRG91YmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJREJLZXlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXNlcmlhbGl6ZUlEQktleURhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJpYWxpemF0aW9uLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KTog
VmVyaWZ5IHRoYXQgVHlwZSA9PSBJbnZhbGlkIAorICAgICAgICAgIGtleXMgZG9uJ3QgZ2V0IGlu
dG8gdGhlIGRhdGFiYXNlLiBUaGlzIHdhcyBoYXBwZW5pbmcgYmVmb3JlIGFuZCB0aGUgcHJldmlv
dXMgc2VyaWFsaXphdGlvbgorICAgICAgICAgIHN1cHBvcnRlZCBpdCwgYnV0IHRoZXJlJ3MgY2xl
YXJseSBubyBwb2ludCBpbiBzdXBwb3J0aW5nIGl0IHdpdGggdGhlIG5ldyBzZXJpYWxpemF0aW9u
LgorCiAyMDE2LTExLTE1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDg2MDY/KTogTGF5b3V0VGVzdCBmYXN0L21lZGlhc3Ry
ZWFtL2VudW1lcmF0aW5nLWNyYXNoLmh0bWwgaXMgYSBmbGFreSBjcmFzaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcAppbmRleCBkOGQ1Mzk1Y2E2
NTA2MjUyNWZiNjczZDYyZDg1ZDI0Yjc1N2NlZDRjLi4zZDVhYmYzODNmZTI0NjhhNGIxZjQwZWNi
YjQ1N2UxNWQ3Y2MxNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmNwcApAQCAtMzg2LDYgKzM4NiwxNCBAQCB2b2lkIElEQktleURhdGE6OnNl
dEFycmF5VmFsdWUoY29uc3QgVmVjdG9yPElEQktleURhdGE+JiB2YWx1ZSkKICAgICBtX2lzTnVs
bCA9IGZhbHNlOwogfQogCit2b2lkIElEQktleURhdGE6OnNldEJpbmFyeVZhbHVlKGNvbnN0IFRo
cmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSkKK3sKKyAgICAqdGhpcyA9IElEQktleURhdGEoKTsK
KyAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgbV90eXBlID0gS2V5VHlwZTo6QmluYXJ5OworICAg
IG1faXNOdWxsID0gZmFsc2U7Cit9CisKIHZvaWQgSURCS2V5RGF0YTo6c2V0U3RyaW5nVmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAqdGhpcyA9IElEQktleURhdGEoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAppbmRleCAwYmFmZDU0
NmY1YTYzZThjYzAwYjQ4MmVmZGY1NzMwMjdjOGQ1NzU4Li45OGYwYjczNTkwNTUyNWY5OTgwZDYx
MzAxODJjM2Y2Y2ZkYjQyNGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oCkBAIC03OSw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBpbnQgY29tcGFyZShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3Q7CiAKICAgICB2
b2lkIHNldEFycmF5VmFsdWUoY29uc3QgVmVjdG9yPElEQktleURhdGE+Jik7CisgICAgdm9pZCBz
ZXRCaW5hcnlWYWx1ZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwogICAgIHZvaWQgc2V0
U3RyaW5nVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXREYXRlVmFsdWUoZG91Ymxl
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE51bWJlclZhbHVlKGRvdWJsZSk7CkBAIC0x
NzIsNiArMTczLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4o
bV92YWx1ZSk7CiAgICAgfQogCisgICAgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJpbmFy
eSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkJpbmFy
eSk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1
ZSk7CisgICAgfQorCiAgICAgY29uc3QgVmVjdG9yPElEQktleURhdGE+JiBhcnJheSgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkFycmF5KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxp
emF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJpYWxpemF0aW9uLmNwcAppbmRleCA1ODBlMzUxMDc1NTkyNzcwMGNkNWY3MzIzMmRkODA4MWQ2
NTViNjcyLi5lYjZkMWZmODI3N2I5YWFiNDQ4M2QxZjI4MWNhZGIyNzU4OGE0NTc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXph
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcmlhbGl6YXRpb24uY3BwCkBAIC05NCwxMSArOTQsMzEwIEBAIGJvb2wgZGVzZXJpYWxpemVJ
REJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBPcHRpb25hbDxJREJL
ZXlQYXRoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIEZJWE1FOiBMaW51eCBwb3J0cyB1c2Vz
IEtleWVkRW5jb2RlckdsaWIgZm9yIHRoZWlyIElEQktleXMuCisvLyBXaGVuIGEgR2xpYiBtYWlu
dGFpbmVyIGNvbWVzIGFsb25nIHRvIGVuYWJsZSB0aGUgbmV3IHNlcmlhbGl6YXRpb24gdGhleSds
bCBuZWVkIHRvCisvLyBkZW5vdGUgYSBHbGliIG1hZ2ljIGNoYXJhY3RlciBoZXJlLgorLy8gTGV0
J3MgaG9wZSBpdCdzIG5vdCAweDAwLgorCitzdGF0aWMgY29uc3QgdWludDhfdCBMZWdhY3lTZXJp
YWxpemVkS2V5VmVyc2lvbiA9ICdiJzsKKworCisvKgorVGhlIElEQktleURhdGEgc2VyaWFsaXph
dGlvbiBmb3JtYXQgaXMgYXMgZm9sbG93czoKK1sxIGJ5dGUgdmVyc2lvbiBoZWFkZXJdW0tleSBC
dWZmZXJdCisKK1RoZSBLZXkgQnVmZmVyIHNlcmlhbGl6YXRpb24gZm9ybWF0IGlzIGFzIGZvbGxv
d3M6CitbMSBieXRlIGtleSB0eXBlXVtUeXBlIHNwZWNpZmljIGRhdGFdCisKK1R5cGUgc3BlY2lm
aWMgc2VyaWFsaXphdGlvbiBmb3JtYXRzIGFyZSBhcyBmb2xsb3dzIGZvciBlYWNoIG9mIHRoZSB0
eXBlczoKK01pbjoKK1swIGJ5dGVzXQorCitOdW1iZXI6CitbOCBieXRlcyByZXByZXNlbnRpbmcg
YSBkb3VibGUgZW5jb2RlZCBpbiBsaXR0bGUgZW5kaWFuXQorCitEYXRlOgorWzggYnl0ZXMgcmVw
cmVzZW50aW5nIGEgZG91YmxlIGVuY29kZWQgaW4gbGl0dGxlIGVuZGlhbl0KKworU3RyaW5nOgor
WzQgYnl0ZXMgcmVwcmVzZW50aW5nIHN0cmluZyAibGVuZ3RoIiBpbiBsaXR0bGUgZW5kaWFuXVsi
bGVuZ3RoIiBudW1iZXIgb2YgMi1ieXRlIHBhaXJzIHJlcHJlc2VudGluZyBFQ01BU2NyaXB0IDE2
LWJpdCBjb2RlIHVuaXRzXQorCitCaW5hcnk6CitbOCBieXRlcyByZXByZXNlbnRpbmcgdGhlICJz
aXplIiBvZiB0aGUgYmluYXJ5IGJsb2JdWyJzaXplIiBieXRlc10KKworQXJyYXk6CitbOCBieXRl
cyByZXByZXNlbnRpbmcgdGhlICJsZW5ndGgiIG9mIHRoZSBrZXkgYXJyYXldWyJsZW5ndGgiIGlu
ZGl2aWR1YWwgS2V5IEJ1ZmZlciBlbnRyaWVzXQorCitNYXg6CitbMCBieXRlc10KKyovCisKK3N0
YXRpYyBjb25zdCB1aW50OF90IFNJREJLZXlWZXJzaW9uID0gMHgwMDsKK2VudW0gY2xhc3MgU0lE
QktleVR5cGUgOiB1aW50OF90IHsKKyAgICBNaW4gPSAweDAwLAorICAgIE51bWJlciA9IDB4MjAs
CisgICAgRGF0ZSA9IDB4NDAsCisgICAgU3RyaW5nID0gMHg2MCwKKyAgICBCaW5hcnkgPSAweDgw
LAorICAgIEFycmF5ID0gMHhBMCwKKyAgICBNYXggPSAweEZGLAorfTsKKworc3RhdGljIFNJREJL
ZXlUeXBlIHNlcmlhbGl6ZWRUeXBlRm9yS2V5VHlwZShJbmRleGVkREI6OktleVR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWlu
OgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6Ok1pbjsKKyAgICBjYXNlIEluZGV4ZWREQjo6
S2V5VHlwZTo6TnVtYmVyOgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6Ok51bWJlcjsKKyAg
ICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6RGF0ZToKKyAgICAgICAgcmV0dXJuIFNJREJLZXlU
eXBlOjpEYXRlOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmc6CisgICAgICAg
IHJldHVybiBTSURCS2V5VHlwZTo6U3RyaW5nOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBl
OjpCaW5hcnk6CisgICAgICAgIHJldHVybiBTSURCS2V5VHlwZTo6QmluYXJ5OworICAgIGNhc2Ug
SW5kZXhlZERCOjpLZXlUeXBlOjpBcnJheToKKyAgICAgICAgcmV0dXJuIFNJREJLZXlUeXBlOjpB
cnJheTsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4OgorICAgICAgICByZXR1cm4g
U0lEQktleVR5cGU6Ok1heDsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OworCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworI2lmIENQVShCSUdfRU5ESUFOKSB8fCBD
UFUoTUlERExFX0VORElBTikgfHwgQ1BVKE5FRURTX0FMSUdORURfQUNDRVNTKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRlTGl0dGxlRW5kaWFuKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCBUIHZhbHVlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2Yo
VCk7IGkrKykgeworICAgICAgICBidWZmZXIuYXBwZW5kKHZhbHVlICYgMHhGRik7CisgICAgICAg
IHZhbHVlID4+PSA4OworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBi
b29sIHJlYWRMaXR0bGVFbmRpYW4oY29uc3QgdWludDhfdComIHB0ciwgY29uc3QgdWludDhfdCog
ZW5kLCBUJiB2YWx1ZSkKK3sKKyAgICBpZiAocHRyID4gZW5kIC0gc2l6ZW9mKHZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNpemVvZihUKSA9PSAxKQorICAgICAgICB2
YWx1ZSA9ICpwdHIrKzsKKyAgICBlbHNlIHsKKyAgICAgICAgdmFsdWUgPSAwOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKFQpOyBpKyspCisgICAgICAgICAgICB2YWx1
ZSArPSAoKFQpKnB0cisrKSA8PCAoaSAqIDgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KyNlbHNlCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgd3JpdGVMaXR0bGVFbmRp
YW4oVmVjdG9yPGNoYXI+JiBidWZmZXIsIFQgdmFsdWUpCit7CisgICAgYnVmZmVyLmFwcGVuZChy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBib29sIHJlYWRMaXR0bGVFbmRpYW4oY29uc3Qg
dWludDhfdComIHB0ciwgY29uc3QgdWludDhfdCogZW5kLCBUJiB2YWx1ZSkKK3sKKyAgICBpZiAo
cHRyID4gZW5kIC0gc2l6ZW9mKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHNpemVvZihUKSA9PSAxKQorICAgICAgICB2YWx1ZSA9ICpwdHIrKzsKKyAgICBlbHNlIHsK
KyAgICAgICAgdmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocHRyKTsKKyAgICAg
ICAgcHRyICs9IHNpemVvZihUKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYK
Kworc3RhdGljIHZvaWQgd3JpdGVEb3VibGUoVmVjdG9yPGNoYXI+JiBkYXRhLCBkb3VibGUgZCkK
K3sKKyAgICB1bmlvbiB7CisgICAgICAgIGRvdWJsZSBkOworICAgICAgICB1aW50NjRfdCBpNjQ7
CisgICAgfSB1OworICAgIHUuZCA9IGQ7CisgICAgd3JpdGVMaXR0bGVFbmRpYW4oZGF0YSwgdS5p
NjQpOworfQorCitzdGF0aWMgYm9vbCByZWFkRG91YmxlKGNvbnN0IHVpbnQ4X3QqJiBkYXRhLCBj
b25zdCB1aW50OF90KiBlbmQsIGRvdWJsZSYgZCkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIGRv
dWJsZSBkOworICAgICAgICB1aW50NjRfdCBpNjQ7CisgICAgfSB1OworICAgIGlmICghcmVhZExp
dHRsZUVuZGlhbihkYXRhLCBlbmQsIHUuaTY0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZCA9IHUuZDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlS2V5
KFZlY3RvcjxjaGFyPiYgZGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5KQoreworICAgIFNJREJL
ZXlUeXBlIHR5cGUgPSBzZXJpYWxpemVkVHlwZUZvcktleVR5cGUoa2V5LnR5cGUoKSk7CisgICAg
ZGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odHlwZSkpOworCisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TnVtYmVyOgorICAgICAgICB3cml0ZURvdWJsZShk
YXRhLCBrZXkubnVtYmVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNJREJLZXlUeXBl
OjpEYXRlOgorICAgICAgICB3cml0ZURvdWJsZShkYXRhLCBrZXkuZGF0ZSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6U3RyaW5nOiB7CisgICAgICAgIGF1dG8gc3Ry
aW5nID0ga2V5LnN0cmluZygpOworICAgICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7CisgICAgICAgIHdyaXRlTGl0dGxlRW5kaWFuKGRhdGEsIGxlbmd0aCk7CisKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHdyaXRl
TGl0dGxlRW5kaWFuKGRhdGEsIHN0cmluZ1tpXSk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgU0lEQktleVR5cGU6OkJpbmFyeTogeworICAgICAgICBhdXRvJiBidWZmZXIgPSBr
ZXkuYmluYXJ5KCk7CisgICAgICAgIHVpbnQ2NF90IHNpemUgPSBidWZmZXIuc2l6ZSgpOworICAg
ICAgICB3cml0ZUxpdHRsZUVuZGlhbihkYXRhLCBzaXplKTsKKworICAgICAgICBhdXRvKiBidWZm
ZXJEYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlckRhdGEgfHwgIXNp
emUpOworICAgICAgICBpZiAoYnVmZmVyRGF0YSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGJ1
ZmZlckRhdGEtPmRhdGEoKSwgYnVmZmVyRGF0YS0+c2l6ZSgpKTsKKworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6QXJyYXk6IHsKKyAgICAgICAgYXV0byYgYXJy
YXkgPSBrZXkuYXJyYXkoKTsKKyAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGFycmF5LnNpemUoKTsK
KyAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW4oZGF0YSwgc2l6ZSk7CisgICAgICAgIGZvciAoYXV0
byYga2V5IDogYXJyYXkpCisgICAgICAgICAgICBlbmNvZGVLZXkoZGF0YSwga2V5KTsKKworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TWluOgorICAgIGNhc2Ug
U0lEQktleVR5cGU6Ok1heDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IElEQktleURhdGEmIGtleSkKIHsK
KyNpZiBVU0UoQ0YpCisgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgZGF0YS5hcHBlbmQoU0lE
QktleVZlcnNpb24pOworCisgICAgZW5jb2RlS2V5KGRhdGEsIGtleSk7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoZGF0YSk7CisjZWxzZQogICAgIGF1dG8gZW5jb2RlciA9
IEtleWVkRW5jb2Rlcjo6ZW5jb2RlcigpOwogICAgIGtleS5lbmNvZGUoKmVuY29kZXIpOwogICAg
IHJldHVybiBlbmNvZGVyLT5maW5pc2hFbmNvZGluZygpOworI2VuZGlmCisKK30KKworc3RhdGlj
IGJvb2wgZGVjb2RlS2V5KGNvbnN0IHVpbnQ4X3QqJiBkYXRhLCBjb25zdCB1aW50OF90KiBlbmQs
IElEQktleURhdGEmIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRhdGEgfHwgZGF0YSA+PSBlbmQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNJREJLZXlUeXBlIHR5cGUgPSBzdGF0aWNfY2Fz
dDxTSURCS2V5VHlwZT4oZGF0YSsrWzBdKTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IFNJREJLZXlUeXBlOjpNaW46CisgICAgICAgIHJlc3VsdCA9IElEQktleURhdGE6Om1pbmltdW0o
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TWF4OgorICAg
ICAgICByZXN1bHQgPSBJREJLZXlEYXRhOjptYXhpbXVtKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgU0lEQktleVR5cGU6Ok51bWJlcjogeworICAgICAgICBkb3VibGUgZDsKKyAg
ICAgICAgaWYgKCFyZWFkRG91YmxlKGRhdGEsIGVuZCwgZCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LnNldE51bWJlclZhbHVlKGQpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6RGF0ZTogeworICAgICAgICBk
b3VibGUgZDsKKyAgICAgICAgaWYgKCFyZWFkRG91YmxlKGRhdGEsIGVuZCwgZCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LnNldERhdGVWYWx1ZShkKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OlN0cmluZzog
eworICAgICAgICB1aW50MzJfdCBsZW5ndGg7CisgICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlh
bihkYXRhLCBlbmQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihlbmQgLSBkYXRhKSA8IGxlbmd0aCAqIDIpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7
CisgICAgICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHVpbnQx
Nl90IGNoOworICAgICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKGRhdGEsIGVuZCwgY2gp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJ1ZmZlci51bmNo
ZWNrZWRBcHBlbmQoY2gpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0LnNldFN0cmluZ1Zh
bHVlKFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKSk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkJpbmFyeTogeworICAgICAgICB1aW50
NjRfdCBzaXplNjQ7CisgICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlhbihkYXRhLCBlbmQsIHNp
emU2NCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHN0YXRpY19j
YXN0PHVpbnQ2NF90PihlbmQgLSBkYXRhKSA8IHNpemU2NCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAoc2l6ZTY0ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzaXplX3Qgc2l6
ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZTY0KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGFWZWN0b3I7CisKKyAgICAgICAgZGF0YVZlY3Rvci5hcHBlbmQoZGF0YSwgc2l6ZSk7Cisg
ICAgICAgIGRhdGEgKz0gc2l6ZTsKKworICAgICAgICByZXN1bHQuc2V0QmluYXJ5VmFsdWUoVGhy
ZWFkU2FmZURhdGFCdWZmZXI6OmFkb3B0VmVjdG9yKGRhdGFWZWN0b3IpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkFycmF5OiB7CisgICAgICAg
IHVpbnQ2NF90IHNpemU2NDsKKyAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKGRhdGEsIGVu
ZCwgc2l6ZTY0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoc2l6
ZTY0ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4o
c2l6ZTY0KTsKKyAgICAgICAgVmVjdG9yPElEQktleURhdGE+IGFycmF5OworICAgICAgICBhcnJh
eS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBJREJLZXlEYXRhIGtleURhdGE7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZUtleShkYXRhLCBlbmQsIGtleURhdGEpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgQVNTRVJUKGtleURhdGEuaXNWYWxp
ZCgpKTsKKyAgICAgICAgICAgIGFycmF5LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGtleURhdGEp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5zZXRBcnJheVZhbHVlKGFycmF5KTsKKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9HX0VS
Uk9SKCJkZWNvZGVLZXkgZW5jb3VudGVyZWQgdW5leHBlY3RlZCB0eXBlOiAlaSIsIChpbnQpdHlw
ZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgZGVzZXJpYWxpemVJ
REJLZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlEYXRhJiBy
ZXN1bHQpCkBAIC0xMDYsOCArNDA1LDI5IEBAIGJvb2wgZGVzZXJpYWxpemVJREJLZXlEYXRhKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlEYXRhJiByZXN1bHQpCiAgICAg
aWYgKCFkYXRhIHx8ICFzaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiBVU0UoQ0Yp
CisgICAgaWYgKGRhdGFbMF0gPT0gTGVnYWN5U2VyaWFsaXplZEtleVZlcnNpb24pIHsKKyAgICAg
ICAgYXV0byBkZWNvZGVyID0gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKGRhdGEsIHNpemUpOworICAg
ICAgICByZXR1cm4gSURCS2V5RGF0YTo6ZGVjb2RlKCpkZWNvZGVyLCByZXN1bHQpOworICAgIH0K
KworICAgIC8vIFZlcmlmeSB0aGlzIGlzIGEgU2VyaWFsaXplZElEQktleSB2ZXJzaW9uIHdlIHVu
ZGVyc3RhbmQuCisgICAgY29uc3QgdWludDhfdCogY3VycmVudCA9IGRhdGE7CisgICAgY29uc3Qg
dWludDhfdCogZW5kID0gZGF0YSArIHNpemU7CisgICAgaWYgKGN1cnJlbnQrK1swXSAhPSBTSURC
S2V5VmVyc2lvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGRlY29kZUtleShj
dXJyZW50LCBlbmQsIHJlc3VsdCkpIHsKKyAgICAgICAgLy8gRXZlbiBpZiB3ZSBzdWNjZXNzZnVs
bHkgZGVjb2RlZCBhIGtleSwgdGhlIGRlc2VyaWFsaXplIGlzIG9ubHkgc3VjY2Vzc2Z1bAorICAg
ICAgICAvLyBpZiB3ZSBhY3R1YWxseSBjb25zdW1lZCBhbGwgaW5wdXQgZGF0YS4KKyAgICAgICAg
cmV0dXJuIGN1cnJlbnQgPT0gZW5kOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyNlbHNl
CiAgICAgYXV0byBkZWNvZGVyID0gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKGRhdGEsIHNpemUpOwog
ICAgIHJldHVybiBJREJLZXlEYXRhOjpkZWNvZGUoKmRlY29kZXIsIHJlc3VsdCk7CisjZW5kaWYK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmgKaW5kZXggNTk3
MjAzZWJiNjBmMjBmZGM5NjkzMmY1N2UyNTI0YmZmNzMyMWIyYy4uYmY3YTE2NzQ4MGI1ODIwYzI2
YTk4NWM5Y2QzYjQ2YzAzZGNhMmUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5oCkBAIC0zOSw2ICsz
OSw3IEBAIGJvb2wgZGVzZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwg
c2l6ZV90IGJ1ZmZlclNpemUsIE9wdGlvbmFsPElECiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNl
cmlhbGl6ZUlEQktleURhdGEoY29uc3QgSURCS2V5RGF0YSYpOwogYm9vbCBkZXNlcmlhbGl6ZUlE
QktleURhdGEoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgSURCS2V5
RGF0YSYpOworaW50IGNvbXBhcmVTZXJpYWxpemVkSURCS2V5RGF0YShjb25zdCB1aW50OF90KiBi
dWZmZXIxLCBzaXplX3QgYnVmZmVyMVNpemUsIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcjIsIHNpemVf
dCBidWZmZXIyU2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAzZGY4MzUyNmI5MWQxYWVkYTBkNGUzNzVmNWU1Zjdl
ZTk2NzFhZDE5Li5hMmNjY2FkYzc5ZDllNTA1MmM5MTU1MjYwNDhmY2UwZDA2ZDQ0N2VhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
QmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMTE4Myw2ICsxMTgzLDggQEAgSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJ
REJJbmRleEluZm8mIGluZm8sIGMKICAgICAgICAgYm9vbCBoYXNSZWNvcmQ7CiAgICAgICAgIElE
QkVycm9yIGVycm9yOwogICAgICAgICBmb3IgKGF1dG8mIGluZGV4S2V5IDogaW5kZXhLZXlzKSB7
CisgICAgICAgICAgICBpZiAoIWluZGV4S2V5LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGVycm9yID0gdW5jaGVja2VkSGFzSW5kZXhSZWNvcmQoaW5m
bywgaW5kZXhLZXksIGhhc1JlY29yZCk7CiAgICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKQEAgLTExOTIsNiArMTE5NCw4IEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3Qg
SURCSW5kZXhJbmZvJiBpbmZvLCBjCiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBpbmRleEtleSA6
IGluZGV4S2V5cykgeworICAgICAgICBpZiAoIWluZGV4S2V5LmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvIGVycm9yID0gdW5jaGVja2VkUHV0SW5kZXhSZWNv
cmQoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgaW5mby5pZGVudGlmaWVyKCksIGtleSwg
aW5kZXhLZXkpOwogICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBwdXQgaW5kZXggcmVjb3JkIGZvciBuZXdseSBjcmVhdGVkIGlu
ZGV4Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggNzc2MjM2NjhjMGM0MDllMjRhODQ4Nzg4ZWY1ZDk4YTY5NDA2ODBkZi4u
M2M1MTcwN2YyNTA5ZDVhODE5M2JmZmMyMTk2OTA5NjY4ZWY1ZmJkYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDE2LTExLTE1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBJbmRleGVkREIgMi4wOiBLZXkgY29sbGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3Vw
cyBpcyBpbnNhbmVseSBzbG93LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0NzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOiBVbnNraXAgYSB0ZXN0IHRoYXQgcGFzc2Vz
IGV2ZW4gaW4gZGVidWcgYnVpbGRzLCBhbmQgcmUtY2xhc3NpZnkKKyAgICAgICAgICBhIHRlc3Qg
dGhhdCB1c2VkIHRvIGJlIHRvby1zbG93IGV2ZXJ5d2hlcmUgdG8gYmUgdG9vLXNsb3cgb25seSBp
biBkZWJ1ZyBidWlsZHMuCisKIDIwMTYtMTEtMTUgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4
QGlnYWxpYS5jb20+CiAKICAgICAgICAgV2ViUlRDOiB1cGRhdGUgTWVkaWFTdHJlYW0tTWVkaWFF
bGVtZW50LXNyY09iamVjdC5odG1sIHRlc3QgYW5kIHVuc2tpcCBpdApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMK
aW5kZXggOTdlZWZkOWY0ZThlYmFlOTMzNTJkMzM4ZjNmZmUwYjFhY2M0MjI5Zi4uYjZhZWEwY2Rj
ZmEwYzY4NDNjNTE3N2U2OWYwNjg1NTgzMTEwYzEzZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC04
NDgsOSArODQ4LDggQEAgc3RvcmFnZS9pbmRleGVkZGIvZGVsZXRlZGF0YWJhc2UtZGVsYXllZC1i
eS12ZXJzaW9uY2hhbmdlLmh0bWwgWyBTa2lwIF0KICMgSXQncyB1bmNsZWFyIGlmIHdlIG5lZWQg
dG8gY29udGludWUgc3VwcG9ydGluZyB0aGlzLgogc3RvcmFnZS9pbmRleGVkZGIvcHJvcGVydGll
cy1kaXNhYmxlZC1hdC1ydW50aW1lLmh0bWwgWyBGYWlsdXJlIF0KIAotIyBDb21wbGV0ZXMgd2l0
aCBwYXNzaW5nIHJlc3VsdHMsIGJ1dCB0b28gc2xvd2x5IGZvciBvdXIgdGVzdCB0aW1lb3V0cy4K
LWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYmluZGV4LW11bHRp
ZW50cnktYmlnLmh0bSBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9JbmRleGVkREIvaWRiY3Vyc29yX2l0ZXJhdGluZy5odG0gWyBGYWlsdXJlIF0KKyMgSW4gZGVi
dWcgYnVpbGRzLCBydW5zIHRvbyBzbG93bHkgZm9yIHRoZSB0ZXN0IHRpbWVvdXQuCitbIERlYnVn
IF0gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRiaW5kZXgtbXVs
dGllbnRyeS1iaWcuaHRtIFsgRmFpbHVyZSBdCiAKICMgU1FMaXRlIGJhY2tlbmQgdGVzdHMgdGhh
dCB0aW1lb3V0CiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vdHJhbnNhY3Rpb24tc2NoZWR1bGVy
LTEuaHRtbCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRiaW5kZXgtbXVsdGllbnRyeS1iaWcuaHRtIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRi
aW5kZXgtbXVsdGllbnRyeS1iaWcuaHRtCmluZGV4IDRmOWRmMzZlMjA0NGU1MjUzMzJmZGQ0MzMw
OGE0YTY2MGFlZmY3ZWIuLjgyNTQ0NDdmZTNjMDRkN2U0MmIyODE3NGM5N2MzYzI1Nzk3NGIzOWQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
SW5kZXhlZERCL2lkYmluZGV4LW11bHRpZW50cnktYmlnLmh0bQorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJpbmRleC1tdWx0aWVu
dHJ5LWJpZy5odG0KQEAgLTEwLDggKzEwLDggQEAKIAogPHNjcmlwdD4KICAgICB2YXIgZGIsCi0g
ICAgICAgIHRfYWRkID0gYXN5bmNfdGVzdCgiQWRkaW5nIG9uZSBpdGVtIHdpdGggMTAwMCBtdWx0
aUVudHJ5IGtleXMiLCB7IHRpbWVvdXQ6IDEwMDAwIH0pLAotICAgICAgICB0X2dldCA9IGFzeW5j
X3Rlc3QoIkdldHRpbmcgdGhlIG9uZSBpdGVtIGJ5IDEwMDAgaW5kZWNlZCBrZXlzICIsIHsgdGlt
ZW91dDogMTAwMDAgfSk7CisgICAgICAgIHRfYWRkID0gYXN5bmNfdGVzdCgiQWRkaW5nIG9uZSBp
dGVtIHdpdGggMTAwMCBtdWx0aUVudHJ5IGtleXMiLCB7IHRpbWVvdXQ6IDEwMDAwMDAgfSksCisg
ICAgICAgIHRfZ2V0ID0gYXN5bmNfdGVzdCgiR2V0dGluZyB0aGUgb25lIGl0ZW0gYnkgMTAwMCBp
bmRlY2VkIGtleXMgIiwgeyB0aW1lb3V0OiAxMDAwMDAwIH0pOwogCiAgICAgdmFyIG9wZW5fcnEg
PSBjcmVhdGVkYih0X2FkZCk7CiAgICAgdmFyIG9iaiA9IHsgdGVzdDogJ3lvJywgaWR4a2V5czog
W10gfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294867</attachid>
            <date>2016-11-15 12:37:37 -0800</date>
            <delta_ts>2016-11-15 13:34:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164754-20161115123736.patch</filename>
            <type>text/plain</type>
            <size>16946</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmU0ZGJjYzVlMjhmOWMy
YzNkZmQxNTAzOWRmOTJmNjM1MjAzOTI4Mi4uMDhlMGNhNzIwMjM4NzRlODU5MWVhZDRiYWMyNDZm
YWNkNGQyMTg3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTExLTE1ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREIgMi4wOiBL
ZXkgY29sbGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3VwcyBpcyBpbnNhbmVseSBzbG93LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NzU0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChDb3ZlcmVkIGJ5ICphbGwqIGV4aXN0aW5nIHRlc3RzLCBhbmQgdW5za2lwcyBhIHByZXZpb3Vz
bHktdG9vLXNsb3cgdGVzdCkKKworICAgICAgICBUaGUgbmV3IHNlcmlhbGl6YXRpb24gZm9ybWF0
IGlzIHN0cmFpZ2h0IGZvcndhcmQgZW5vdWdoIHRvIGdldCBiYWNrIHdpdGggbWluaW1hbCBkb2N1
bWVudGF0aW9uCisgICAgICAgIGluIGEgY29tbWVudCB3aXRoIHRoZSBjb2RlIGl0c2VsZiBiZWlu
ZyB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEl0IGhh
bmRsZXMgYWxsIGN1cnJlbnQgSURCIGtleSB0eXBlcyBhbmQgbGVhdmVzIHJvb20gZm9yIGZ1dHVy
ZSBrZXkgdHlwZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OnNldEJpbmFyeVZhbHVlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlEYXRhOjpiaW5hcnkpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emVkVHlwZUZvcktleVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMaXR0bGVFbmRpYW4p
OgorICAgICAgICAoV2ViQ29yZTo6cmVhZExpdHRsZUVuZGlhbik6CisgICAgICAgIChXZWJDb3Jl
Ojp3cml0ZURvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkRG91YmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJREJLZXlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXNlcmlhbGl6ZUlEQktleURhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJpYWxpemF0aW9uLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KTog
VmVyaWZ5IHRoYXQgVHlwZSA9PSBJbnZhbGlkIAorICAgICAgICAgIGtleXMgZG9uJ3QgZ2V0IGlu
dG8gdGhlIGRhdGFiYXNlLiBUaGlzIHdhcyBoYXBwZW5pbmcgYmVmb3JlIGFuZCB0aGUgcHJldmlv
dXMgc2VyaWFsaXphdGlvbgorICAgICAgICAgIHN1cHBvcnRlZCBpdCwgYnV0IHRoZXJlJ3MgY2xl
YXJseSBubyBwb2ludCBpbiBzdXBwb3J0aW5nIGl0IHdpdGggdGhlIG5ldyBzZXJpYWxpemF0aW9u
LgorCiAyMDE2LTExLTE1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDg2MDY/KTogTGF5b3V0VGVzdCBmYXN0L21lZGlhc3Ry
ZWFtL2VudW1lcmF0aW5nLWNyYXNoLmh0bWwgaXMgYSBmbGFreSBjcmFzaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcAppbmRleCBkOGQ1Mzk1Y2E2
NTA2MjUyNWZiNjczZDYyZDg1ZDI0Yjc1N2NlZDRjLi4zZDVhYmYzODNmZTI0NjhhNGIxZjQwZWNi
YjQ1N2UxNWQ3Y2MxNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmNwcApAQCAtMzg2LDYgKzM4NiwxNCBAQCB2b2lkIElEQktleURhdGE6OnNl
dEFycmF5VmFsdWUoY29uc3QgVmVjdG9yPElEQktleURhdGE+JiB2YWx1ZSkKICAgICBtX2lzTnVs
bCA9IGZhbHNlOwogfQogCit2b2lkIElEQktleURhdGE6OnNldEJpbmFyeVZhbHVlKGNvbnN0IFRo
cmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSkKK3sKKyAgICAqdGhpcyA9IElEQktleURhdGEoKTsK
KyAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgbV90eXBlID0gS2V5VHlwZTo6QmluYXJ5OworICAg
IG1faXNOdWxsID0gZmFsc2U7Cit9CisKIHZvaWQgSURCS2V5RGF0YTo6c2V0U3RyaW5nVmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAqdGhpcyA9IElEQktleURhdGEoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAppbmRleCAwYmFmZDU0
NmY1YTYzZThjYzAwYjQ4MmVmZGY1NzMwMjdjOGQ1NzU4Li45OGYwYjczNTkwNTUyNWY5OTgwZDYx
MzAxODJjM2Y2Y2ZkYjQyNGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oCkBAIC03OSw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBpbnQgY29tcGFyZShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3Q7CiAKICAgICB2
b2lkIHNldEFycmF5VmFsdWUoY29uc3QgVmVjdG9yPElEQktleURhdGE+Jik7CisgICAgdm9pZCBz
ZXRCaW5hcnlWYWx1ZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwogICAgIHZvaWQgc2V0
U3RyaW5nVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXREYXRlVmFsdWUoZG91Ymxl
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE51bWJlclZhbHVlKGRvdWJsZSk7CkBAIC0x
NzIsNiArMTczLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4o
bV92YWx1ZSk7CiAgICAgfQogCisgICAgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJpbmFy
eSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkJpbmFy
eSk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1
ZSk7CisgICAgfQorCiAgICAgY29uc3QgVmVjdG9yPElEQktleURhdGE+JiBhcnJheSgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkFycmF5KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxp
emF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJpYWxpemF0aW9uLmNwcAppbmRleCA1ODBlMzUxMDc1NTkyNzcwMGNkNWY3MzIzMmRkODA4MWQ2
NTViNjcyLi5lYjZkMWZmODI3N2I5YWFiNDQ4M2QxZjI4MWNhZGIyNzU4OGE0NTc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXph
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcmlhbGl6YXRpb24uY3BwCkBAIC05NCwxMSArOTQsMzEwIEBAIGJvb2wgZGVzZXJpYWxpemVJ
REJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBPcHRpb25hbDxJREJL
ZXlQYXRoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIEZJWE1FOiBMaW51eCBwb3J0cyB1c2Vz
IEtleWVkRW5jb2RlckdsaWIgZm9yIHRoZWlyIElEQktleXMuCisvLyBXaGVuIGEgR2xpYiBtYWlu
dGFpbmVyIGNvbWVzIGFsb25nIHRvIGVuYWJsZSB0aGUgbmV3IHNlcmlhbGl6YXRpb24gdGhleSds
bCBuZWVkIHRvCisvLyBkZW5vdGUgYSBHbGliIG1hZ2ljIGNoYXJhY3RlciBoZXJlLgorLy8gTGV0
J3MgaG9wZSBpdCdzIG5vdCAweDAwLgorCitzdGF0aWMgY29uc3QgdWludDhfdCBMZWdhY3lTZXJp
YWxpemVkS2V5VmVyc2lvbiA9ICdiJzsKKworCisvKgorVGhlIElEQktleURhdGEgc2VyaWFsaXph
dGlvbiBmb3JtYXQgaXMgYXMgZm9sbG93czoKK1sxIGJ5dGUgdmVyc2lvbiBoZWFkZXJdW0tleSBC
dWZmZXJdCisKK1RoZSBLZXkgQnVmZmVyIHNlcmlhbGl6YXRpb24gZm9ybWF0IGlzIGFzIGZvbGxv
d3M6CitbMSBieXRlIGtleSB0eXBlXVtUeXBlIHNwZWNpZmljIGRhdGFdCisKK1R5cGUgc3BlY2lm
aWMgc2VyaWFsaXphdGlvbiBmb3JtYXRzIGFyZSBhcyBmb2xsb3dzIGZvciBlYWNoIG9mIHRoZSB0
eXBlczoKK01pbjoKK1swIGJ5dGVzXQorCitOdW1iZXI6CitbOCBieXRlcyByZXByZXNlbnRpbmcg
YSBkb3VibGUgZW5jb2RlZCBpbiBsaXR0bGUgZW5kaWFuXQorCitEYXRlOgorWzggYnl0ZXMgcmVw
cmVzZW50aW5nIGEgZG91YmxlIGVuY29kZWQgaW4gbGl0dGxlIGVuZGlhbl0KKworU3RyaW5nOgor
WzQgYnl0ZXMgcmVwcmVzZW50aW5nIHN0cmluZyAibGVuZ3RoIiBpbiBsaXR0bGUgZW5kaWFuXVsi
bGVuZ3RoIiBudW1iZXIgb2YgMi1ieXRlIHBhaXJzIHJlcHJlc2VudGluZyBFQ01BU2NyaXB0IDE2
LWJpdCBjb2RlIHVuaXRzXQorCitCaW5hcnk6CitbOCBieXRlcyByZXByZXNlbnRpbmcgdGhlICJz
aXplIiBvZiB0aGUgYmluYXJ5IGJsb2JdWyJzaXplIiBieXRlc10KKworQXJyYXk6CitbOCBieXRl
cyByZXByZXNlbnRpbmcgdGhlICJsZW5ndGgiIG9mIHRoZSBrZXkgYXJyYXldWyJsZW5ndGgiIGlu
ZGl2aWR1YWwgS2V5IEJ1ZmZlciBlbnRyaWVzXQorCitNYXg6CitbMCBieXRlc10KKyovCisKK3N0
YXRpYyBjb25zdCB1aW50OF90IFNJREJLZXlWZXJzaW9uID0gMHgwMDsKK2VudW0gY2xhc3MgU0lE
QktleVR5cGUgOiB1aW50OF90IHsKKyAgICBNaW4gPSAweDAwLAorICAgIE51bWJlciA9IDB4MjAs
CisgICAgRGF0ZSA9IDB4NDAsCisgICAgU3RyaW5nID0gMHg2MCwKKyAgICBCaW5hcnkgPSAweDgw
LAorICAgIEFycmF5ID0gMHhBMCwKKyAgICBNYXggPSAweEZGLAorfTsKKworc3RhdGljIFNJREJL
ZXlUeXBlIHNlcmlhbGl6ZWRUeXBlRm9yS2V5VHlwZShJbmRleGVkREI6OktleVR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWlu
OgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6Ok1pbjsKKyAgICBjYXNlIEluZGV4ZWREQjo6
S2V5VHlwZTo6TnVtYmVyOgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6Ok51bWJlcjsKKyAg
ICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6RGF0ZToKKyAgICAgICAgcmV0dXJuIFNJREJLZXlU
eXBlOjpEYXRlOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmc6CisgICAgICAg
IHJldHVybiBTSURCS2V5VHlwZTo6U3RyaW5nOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBl
OjpCaW5hcnk6CisgICAgICAgIHJldHVybiBTSURCS2V5VHlwZTo6QmluYXJ5OworICAgIGNhc2Ug
SW5kZXhlZERCOjpLZXlUeXBlOjpBcnJheToKKyAgICAgICAgcmV0dXJuIFNJREJLZXlUeXBlOjpB
cnJheTsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4OgorICAgICAgICByZXR1cm4g
U0lEQktleVR5cGU6Ok1heDsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OworCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworI2lmIENQVShCSUdfRU5ESUFOKSB8fCBD
UFUoTUlERExFX0VORElBTikgfHwgQ1BVKE5FRURTX0FMSUdORURfQUNDRVNTKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRlTGl0dGxlRW5kaWFuKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCBUIHZhbHVlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2Yo
VCk7IGkrKykgeworICAgICAgICBidWZmZXIuYXBwZW5kKHZhbHVlICYgMHhGRik7CisgICAgICAg
IHZhbHVlID4+PSA4OworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBi
b29sIHJlYWRMaXR0bGVFbmRpYW4oY29uc3QgdWludDhfdComIHB0ciwgY29uc3QgdWludDhfdCog
ZW5kLCBUJiB2YWx1ZSkKK3sKKyAgICBpZiAocHRyID4gZW5kIC0gc2l6ZW9mKHZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNpemVvZihUKSA9PSAxKQorICAgICAgICB2
YWx1ZSA9ICpwdHIrKzsKKyAgICBlbHNlIHsKKyAgICAgICAgdmFsdWUgPSAwOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKFQpOyBpKyspCisgICAgICAgICAgICB2YWx1
ZSArPSAoKFQpKnB0cisrKSA8PCAoaSAqIDgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KyNlbHNlCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgd3JpdGVMaXR0bGVFbmRp
YW4oVmVjdG9yPGNoYXI+JiBidWZmZXIsIFQgdmFsdWUpCit7CisgICAgYnVmZmVyLmFwcGVuZChy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUpKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBib29sIHJlYWRMaXR0bGVFbmRpYW4oY29uc3Qg
dWludDhfdComIHB0ciwgY29uc3QgdWludDhfdCogZW5kLCBUJiB2YWx1ZSkKK3sKKyAgICBpZiAo
cHRyID4gZW5kIC0gc2l6ZW9mKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHNpemVvZihUKSA9PSAxKQorICAgICAgICB2YWx1ZSA9ICpwdHIrKzsKKyAgICBlbHNlIHsK
KyAgICAgICAgdmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocHRyKTsKKyAgICAg
ICAgcHRyICs9IHNpemVvZihUKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYK
Kworc3RhdGljIHZvaWQgd3JpdGVEb3VibGUoVmVjdG9yPGNoYXI+JiBkYXRhLCBkb3VibGUgZCkK
K3sKKyAgICB1bmlvbiB7CisgICAgICAgIGRvdWJsZSBkOworICAgICAgICB1aW50NjRfdCBpNjQ7
CisgICAgfSB1OworICAgIHUuZCA9IGQ7CisgICAgd3JpdGVMaXR0bGVFbmRpYW4oZGF0YSwgdS5p
NjQpOworfQorCitzdGF0aWMgYm9vbCByZWFkRG91YmxlKGNvbnN0IHVpbnQ4X3QqJiBkYXRhLCBj
b25zdCB1aW50OF90KiBlbmQsIGRvdWJsZSYgZCkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIGRv
dWJsZSBkOworICAgICAgICB1aW50NjRfdCBpNjQ7CisgICAgfSB1OworICAgIGlmICghcmVhZExp
dHRsZUVuZGlhbihkYXRhLCBlbmQsIHUuaTY0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZCA9IHUuZDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlS2V5
KFZlY3RvcjxjaGFyPiYgZGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5KQoreworICAgIFNJREJL
ZXlUeXBlIHR5cGUgPSBzZXJpYWxpemVkVHlwZUZvcktleVR5cGUoa2V5LnR5cGUoKSk7CisgICAg
ZGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odHlwZSkpOworCisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TnVtYmVyOgorICAgICAgICB3cml0ZURvdWJsZShk
YXRhLCBrZXkubnVtYmVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNJREJLZXlUeXBl
OjpEYXRlOgorICAgICAgICB3cml0ZURvdWJsZShkYXRhLCBrZXkuZGF0ZSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6U3RyaW5nOiB7CisgICAgICAgIGF1dG8gc3Ry
aW5nID0ga2V5LnN0cmluZygpOworICAgICAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7CisgICAgICAgIHdyaXRlTGl0dGxlRW5kaWFuKGRhdGEsIGxlbmd0aCk7CisKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHdyaXRl
TGl0dGxlRW5kaWFuKGRhdGEsIHN0cmluZ1tpXSk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgU0lEQktleVR5cGU6OkJpbmFyeTogeworICAgICAgICBhdXRvJiBidWZmZXIgPSBr
ZXkuYmluYXJ5KCk7CisgICAgICAgIHVpbnQ2NF90IHNpemUgPSBidWZmZXIuc2l6ZSgpOworICAg
ICAgICB3cml0ZUxpdHRsZUVuZGlhbihkYXRhLCBzaXplKTsKKworICAgICAgICBhdXRvKiBidWZm
ZXJEYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlckRhdGEgfHwgIXNp
emUpOworICAgICAgICBpZiAoYnVmZmVyRGF0YSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGJ1
ZmZlckRhdGEtPmRhdGEoKSwgYnVmZmVyRGF0YS0+c2l6ZSgpKTsKKworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6QXJyYXk6IHsKKyAgICAgICAgYXV0byYgYXJy
YXkgPSBrZXkuYXJyYXkoKTsKKyAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGFycmF5LnNpemUoKTsK
KyAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW4oZGF0YSwgc2l6ZSk7CisgICAgICAgIGZvciAoYXV0
byYga2V5IDogYXJyYXkpCisgICAgICAgICAgICBlbmNvZGVLZXkoZGF0YSwga2V5KTsKKworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TWluOgorICAgIGNhc2Ug
U0lEQktleVR5cGU6Ok1heDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IElEQktleURhdGEmIGtleSkKIHsK
KyNpZiBVU0UoQ0YpCisgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgZGF0YS5hcHBlbmQoU0lE
QktleVZlcnNpb24pOworCisgICAgZW5jb2RlS2V5KGRhdGEsIGtleSk7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoZGF0YSk7CisjZWxzZQogICAgIGF1dG8gZW5jb2RlciA9
IEtleWVkRW5jb2Rlcjo6ZW5jb2RlcigpOwogICAgIGtleS5lbmNvZGUoKmVuY29kZXIpOwogICAg
IHJldHVybiBlbmNvZGVyLT5maW5pc2hFbmNvZGluZygpOworI2VuZGlmCisKK30KKworc3RhdGlj
IGJvb2wgZGVjb2RlS2V5KGNvbnN0IHVpbnQ4X3QqJiBkYXRhLCBjb25zdCB1aW50OF90KiBlbmQs
IElEQktleURhdGEmIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRhdGEgfHwgZGF0YSA+PSBlbmQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNJREJLZXlUeXBlIHR5cGUgPSBzdGF0aWNfY2Fz
dDxTSURCS2V5VHlwZT4oZGF0YSsrWzBdKTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IFNJREJLZXlUeXBlOjpNaW46CisgICAgICAgIHJlc3VsdCA9IElEQktleURhdGE6Om1pbmltdW0o
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TWF4OgorICAg
ICAgICByZXN1bHQgPSBJREJLZXlEYXRhOjptYXhpbXVtKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgU0lEQktleVR5cGU6Ok51bWJlcjogeworICAgICAgICBkb3VibGUgZDsKKyAg
ICAgICAgaWYgKCFyZWFkRG91YmxlKGRhdGEsIGVuZCwgZCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LnNldE51bWJlclZhbHVlKGQpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6RGF0ZTogeworICAgICAgICBk
b3VibGUgZDsKKyAgICAgICAgaWYgKCFyZWFkRG91YmxlKGRhdGEsIGVuZCwgZCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LnNldERhdGVWYWx1ZShkKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OlN0cmluZzog
eworICAgICAgICB1aW50MzJfdCBsZW5ndGg7CisgICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlh
bihkYXRhLCBlbmQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihlbmQgLSBkYXRhKSA8IGxlbmd0aCAqIDIpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7
CisgICAgICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHVpbnQx
Nl90IGNoOworICAgICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKGRhdGEsIGVuZCwgY2gp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJ1ZmZlci51bmNo
ZWNrZWRBcHBlbmQoY2gpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0LnNldFN0cmluZ1Zh
bHVlKFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKSk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkJpbmFyeTogeworICAgICAgICB1aW50
NjRfdCBzaXplNjQ7CisgICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlhbihkYXRhLCBlbmQsIHNp
emU2NCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHN0YXRpY19j
YXN0PHVpbnQ2NF90PihlbmQgLSBkYXRhKSA8IHNpemU2NCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAoc2l6ZTY0ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzaXplX3Qgc2l6
ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZTY0KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGFWZWN0b3I7CisKKyAgICAgICAgZGF0YVZlY3Rvci5hcHBlbmQoZGF0YSwgc2l6ZSk7Cisg
ICAgICAgIGRhdGEgKz0gc2l6ZTsKKworICAgICAgICByZXN1bHQuc2V0QmluYXJ5VmFsdWUoVGhy
ZWFkU2FmZURhdGFCdWZmZXI6OmFkb3B0VmVjdG9yKGRhdGFWZWN0b3IpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkFycmF5OiB7CisgICAgICAg
IHVpbnQ2NF90IHNpemU2NDsKKyAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKGRhdGEsIGVu
ZCwgc2l6ZTY0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoc2l6
ZTY0ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4o
c2l6ZTY0KTsKKyAgICAgICAgVmVjdG9yPElEQktleURhdGE+IGFycmF5OworICAgICAgICBhcnJh
eS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBJREJLZXlEYXRhIGtleURhdGE7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZUtleShkYXRhLCBlbmQsIGtleURhdGEpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgQVNTRVJUKGtleURhdGEuaXNWYWxp
ZCgpKTsKKyAgICAgICAgICAgIGFycmF5LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGtleURhdGEp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5zZXRBcnJheVZhbHVlKGFycmF5KTsKKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9HX0VS
Uk9SKCJkZWNvZGVLZXkgZW5jb3VudGVyZWQgdW5leHBlY3RlZCB0eXBlOiAlaSIsIChpbnQpdHlw
ZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgZGVzZXJpYWxpemVJ
REJLZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlEYXRhJiBy
ZXN1bHQpCkBAIC0xMDYsOCArNDA1LDI5IEBAIGJvb2wgZGVzZXJpYWxpemVJREJLZXlEYXRhKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlEYXRhJiByZXN1bHQpCiAgICAg
aWYgKCFkYXRhIHx8ICFzaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiBVU0UoQ0Yp
CisgICAgaWYgKGRhdGFbMF0gPT0gTGVnYWN5U2VyaWFsaXplZEtleVZlcnNpb24pIHsKKyAgICAg
ICAgYXV0byBkZWNvZGVyID0gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKGRhdGEsIHNpemUpOworICAg
ICAgICByZXR1cm4gSURCS2V5RGF0YTo6ZGVjb2RlKCpkZWNvZGVyLCByZXN1bHQpOworICAgIH0K
KworICAgIC8vIFZlcmlmeSB0aGlzIGlzIGEgU2VyaWFsaXplZElEQktleSB2ZXJzaW9uIHdlIHVu
ZGVyc3RhbmQuCisgICAgY29uc3QgdWludDhfdCogY3VycmVudCA9IGRhdGE7CisgICAgY29uc3Qg
dWludDhfdCogZW5kID0gZGF0YSArIHNpemU7CisgICAgaWYgKGN1cnJlbnQrK1swXSAhPSBTSURC
S2V5VmVyc2lvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGRlY29kZUtleShj
dXJyZW50LCBlbmQsIHJlc3VsdCkpIHsKKyAgICAgICAgLy8gRXZlbiBpZiB3ZSBzdWNjZXNzZnVs
bHkgZGVjb2RlZCBhIGtleSwgdGhlIGRlc2VyaWFsaXplIGlzIG9ubHkgc3VjY2Vzc2Z1bAorICAg
ICAgICAvLyBpZiB3ZSBhY3R1YWxseSBjb25zdW1lZCBhbGwgaW5wdXQgZGF0YS4KKyAgICAgICAg
cmV0dXJuIGN1cnJlbnQgPT0gZW5kOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyNlbHNl
CiAgICAgYXV0byBkZWNvZGVyID0gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKGRhdGEsIHNpemUpOwog
ICAgIHJldHVybiBJREJLZXlEYXRhOjpkZWNvZGUoKmRlY29kZXIsIHJlc3VsdCk7CisjZW5kaWYK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmgKaW5kZXggNTk3
MjAzZWJiNjBmMjBmZGM5NjkzMmY1N2UyNTI0YmZmNzMyMWIyYy4uYmY3YTE2NzQ4MGI1ODIwYzI2
YTk4NWM5Y2QzYjQ2YzAzZGNhMmUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5oCkBAIC0zOSw2ICsz
OSw3IEBAIGJvb2wgZGVzZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwg
c2l6ZV90IGJ1ZmZlclNpemUsIE9wdGlvbmFsPElECiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNl
cmlhbGl6ZUlEQktleURhdGEoY29uc3QgSURCS2V5RGF0YSYpOwogYm9vbCBkZXNlcmlhbGl6ZUlE
QktleURhdGEoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgSURCS2V5
RGF0YSYpOworaW50IGNvbXBhcmVTZXJpYWxpemVkSURCS2V5RGF0YShjb25zdCB1aW50OF90KiBi
dWZmZXIxLCBzaXplX3QgYnVmZmVyMVNpemUsIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcjIsIHNpemVf
dCBidWZmZXIyU2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAzZGY4MzUyNmI5MWQxYWVkYTBkNGUzNzVmNWU1Zjdl
ZTk2NzFhZDE5Li5hMmNjY2FkYzc5ZDllNTA1MmM5MTU1MjYwNDhmY2UwZDA2ZDQ0N2VhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
QmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMTE4Myw2ICsxMTgzLDggQEAgSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJ
REJJbmRleEluZm8mIGluZm8sIGMKICAgICAgICAgYm9vbCBoYXNSZWNvcmQ7CiAgICAgICAgIElE
QkVycm9yIGVycm9yOwogICAgICAgICBmb3IgKGF1dG8mIGluZGV4S2V5IDogaW5kZXhLZXlzKSB7
CisgICAgICAgICAgICBpZiAoIWluZGV4S2V5LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGVycm9yID0gdW5jaGVja2VkSGFzSW5kZXhSZWNvcmQoaW5m
bywgaW5kZXhLZXksIGhhc1JlY29yZCk7CiAgICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKQEAgLTExOTIsNiArMTE5NCw4IEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3Qg
SURCSW5kZXhJbmZvJiBpbmZvLCBjCiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBpbmRleEtleSA6
IGluZGV4S2V5cykgeworICAgICAgICBpZiAoIWluZGV4S2V5LmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvIGVycm9yID0gdW5jaGVja2VkUHV0SW5kZXhSZWNv
cmQoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgaW5mby5pZGVudGlmaWVyKCksIGtleSwg
aW5kZXhLZXkpOwogICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBwdXQgaW5kZXggcmVjb3JkIGZvciBuZXdseSBjcmVhdGVkIGlu
ZGV4Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggNzc2MjM2NjhjMGM0MDllMjRhODQ4Nzg4ZWY1ZDk4YTY5NDA2ODBkZi4u
M2M1MTcwN2YyNTA5ZDVhODE5M2JmZmMyMTk2OTA5NjY4ZWY1ZmJkYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDE2LTExLTE1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBJbmRleGVkREIgMi4wOiBLZXkgY29sbGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3Vw
cyBpcyBpbnNhbmVseSBzbG93LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0NzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOiBVbnNraXAgYSB0ZXN0IHRoYXQgcGFzc2Vz
IGV2ZW4gaW4gZGVidWcgYnVpbGRzLCBhbmQgcmUtY2xhc3NpZnkKKyAgICAgICAgICBhIHRlc3Qg
dGhhdCB1c2VkIHRvIGJlIHRvby1zbG93IGV2ZXJ5d2hlcmUgdG8gYmUgdG9vLXNsb3cgb25seSBp
biBkZWJ1ZyBidWlsZHMuCisKIDIwMTYtMTEtMTUgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4
QGlnYWxpYS5jb20+CiAKICAgICAgICAgV2ViUlRDOiB1cGRhdGUgTWVkaWFTdHJlYW0tTWVkaWFF
bGVtZW50LXNyY09iamVjdC5odG1sIHRlc3QgYW5kIHVuc2tpcCBpdApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMK
aW5kZXggOTdlZWZkOWY0ZThlYmFlOTMzNTJkMzM4ZjNmZmUwYjFhY2M0MjI5Zi4uYjZhZWEwY2Rj
ZmEwYzY4NDNjNTE3N2U2OWYwNjg1NTgzMTEwYzEzZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC04
NDgsOSArODQ4LDggQEAgc3RvcmFnZS9pbmRleGVkZGIvZGVsZXRlZGF0YWJhc2UtZGVsYXllZC1i
eS12ZXJzaW9uY2hhbmdlLmh0bWwgWyBTa2lwIF0KICMgSXQncyB1bmNsZWFyIGlmIHdlIG5lZWQg
dG8gY29udGludWUgc3VwcG9ydGluZyB0aGlzLgogc3RvcmFnZS9pbmRleGVkZGIvcHJvcGVydGll
cy1kaXNhYmxlZC1hdC1ydW50aW1lLmh0bWwgWyBGYWlsdXJlIF0KIAotIyBDb21wbGV0ZXMgd2l0
aCBwYXNzaW5nIHJlc3VsdHMsIGJ1dCB0b28gc2xvd2x5IGZvciBvdXIgdGVzdCB0aW1lb3V0cy4K
LWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYmluZGV4LW11bHRp
ZW50cnktYmlnLmh0bSBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9JbmRleGVkREIvaWRiY3Vyc29yX2l0ZXJhdGluZy5odG0gWyBGYWlsdXJlIF0KKyMgSW4gZGVi
dWcgYnVpbGRzLCBydW5zIHRvbyBzbG93bHkgZm9yIHRoZSB0ZXN0IHRpbWVvdXQuCitbIERlYnVn
IF0gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRiaW5kZXgtbXVs
dGllbnRyeS1iaWcuaHRtIFsgRmFpbHVyZSBdCiAKICMgU1FMaXRlIGJhY2tlbmQgdGVzdHMgdGhh
dCB0aW1lb3V0CiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vdHJhbnNhY3Rpb24tc2NoZWR1bGVy
LTEuaHRtbCBbIFNraXAgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294871</attachid>
            <date>2016-11-15 13:34:41 -0800</date>
            <delta_ts>2016-11-15 13:39:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164754-20161115133439.patch</filename>
            <type>text/plain</type>
            <size>16142</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmU0ZGJjYzVlMjhmOWMy
YzNkZmQxNTAzOWRmOTJmNjM1MjAzOTI4Mi4uMDhlMGNhNzIwMjM4NzRlODU5MWVhZDRiYWMyNDZm
YWNkNGQyMTg3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTExLTE1ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREIgMi4wOiBL
ZXkgY29sbGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3VwcyBpcyBpbnNhbmVseSBzbG93LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NzU0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChDb3ZlcmVkIGJ5ICphbGwqIGV4aXN0aW5nIHRlc3RzLCBhbmQgdW5za2lwcyBhIHByZXZpb3Vz
bHktdG9vLXNsb3cgdGVzdCkKKworICAgICAgICBUaGUgbmV3IHNlcmlhbGl6YXRpb24gZm9ybWF0
IGlzIHN0cmFpZ2h0IGZvcndhcmQgZW5vdWdoIHRvIGdldCBiYWNrIHdpdGggbWluaW1hbCBkb2N1
bWVudGF0aW9uCisgICAgICAgIGluIGEgY29tbWVudCB3aXRoIHRoZSBjb2RlIGl0c2VsZiBiZWlu
ZyB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEl0IGhh
bmRsZXMgYWxsIGN1cnJlbnQgSURCIGtleSB0eXBlcyBhbmQgbGVhdmVzIHJvb20gZm9yIGZ1dHVy
ZSBrZXkgdHlwZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OnNldEJpbmFyeVZhbHVlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlEYXRhOjpiaW5hcnkpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emVkVHlwZUZvcktleVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMaXR0bGVFbmRpYW4p
OgorICAgICAgICAoV2ViQ29yZTo6cmVhZExpdHRsZUVuZGlhbik6CisgICAgICAgIChXZWJDb3Jl
Ojp3cml0ZURvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkRG91YmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJREJLZXlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXNlcmlhbGl6ZUlEQktleURhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJpYWxpemF0aW9uLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KTog
VmVyaWZ5IHRoYXQgVHlwZSA9PSBJbnZhbGlkIAorICAgICAgICAgIGtleXMgZG9uJ3QgZ2V0IGlu
dG8gdGhlIGRhdGFiYXNlLiBUaGlzIHdhcyBoYXBwZW5pbmcgYmVmb3JlIGFuZCB0aGUgcHJldmlv
dXMgc2VyaWFsaXphdGlvbgorICAgICAgICAgIHN1cHBvcnRlZCBpdCwgYnV0IHRoZXJlJ3MgY2xl
YXJseSBubyBwb2ludCBpbiBzdXBwb3J0aW5nIGl0IHdpdGggdGhlIG5ldyBzZXJpYWxpemF0aW9u
LgorCiAyMDE2LTExLTE1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDg2MDY/KTogTGF5b3V0VGVzdCBmYXN0L21lZGlhc3Ry
ZWFtL2VudW1lcmF0aW5nLWNyYXNoLmh0bWwgaXMgYSBmbGFreSBjcmFzaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcAppbmRleCBkOGQ1Mzk1Y2E2
NTA2MjUyNWZiNjczZDYyZDg1ZDI0Yjc1N2NlZDRjLi4zZDVhYmYzODNmZTI0NjhhNGIxZjQwZWNi
YjQ1N2UxNWQ3Y2MxNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmNwcApAQCAtMzg2LDYgKzM4NiwxNCBAQCB2b2lkIElEQktleURhdGE6OnNl
dEFycmF5VmFsdWUoY29uc3QgVmVjdG9yPElEQktleURhdGE+JiB2YWx1ZSkKICAgICBtX2lzTnVs
bCA9IGZhbHNlOwogfQogCit2b2lkIElEQktleURhdGE6OnNldEJpbmFyeVZhbHVlKGNvbnN0IFRo
cmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSkKK3sKKyAgICAqdGhpcyA9IElEQktleURhdGEoKTsK
KyAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgbV90eXBlID0gS2V5VHlwZTo6QmluYXJ5OworICAg
IG1faXNOdWxsID0gZmFsc2U7Cit9CisKIHZvaWQgSURCS2V5RGF0YTo6c2V0U3RyaW5nVmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAqdGhpcyA9IElEQktleURhdGEoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAppbmRleCAwYmFmZDU0
NmY1YTYzZThjYzAwYjQ4MmVmZGY1NzMwMjdjOGQ1NzU4Li45OGYwYjczNTkwNTUyNWY5OTgwZDYx
MzAxODJjM2Y2Y2ZkYjQyNGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oCkBAIC03OSw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBpbnQgY29tcGFyZShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3Q7CiAKICAgICB2
b2lkIHNldEFycmF5VmFsdWUoY29uc3QgVmVjdG9yPElEQktleURhdGE+Jik7CisgICAgdm9pZCBz
ZXRCaW5hcnlWYWx1ZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwogICAgIHZvaWQgc2V0
U3RyaW5nVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXREYXRlVmFsdWUoZG91Ymxl
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE51bWJlclZhbHVlKGRvdWJsZSk7CkBAIC0x
NzIsNiArMTczLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4o
bV92YWx1ZSk7CiAgICAgfQogCisgICAgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJpbmFy
eSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkJpbmFy
eSk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1
ZSk7CisgICAgfQorCiAgICAgY29uc3QgVmVjdG9yPElEQktleURhdGE+JiBhcnJheSgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkFycmF5KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxp
emF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJpYWxpemF0aW9uLmNwcAppbmRleCA1ODBlMzUxMDc1NTkyNzcwMGNkNWY3MzIzMmRkODA4MWQ2
NTViNjcyLi4xYTMxMGI5M2JiOGU4MGE0ZTI3NzMxMDMxY2Y0ODdjMGZiZGFiZTk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXph
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcmlhbGl6YXRpb24uY3BwCkBAIC05NCwxMSArOTQsMjkyIEBAIGJvb2wgZGVzZXJpYWxpemVJ
REJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBPcHRpb25hbDxJREJL
ZXlQYXRoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIFRoaXMgaXMgdGhlIG1hZ2ljIGNoYXJh
Y3RlciB0aGF0IGJlZ2lucyBzZXJpYWxpemVkIFByb3BlcnR5TGlzdHMsIGFuZCB0ZWxscyB1cyB3
aGV0aGVyCisvLyB0aGUga2V5IHdlJ3JlIGxvb2tpbmcgYXQgaXMgYW4gb2xkLXN0eWxlIGtleS4K
K3N0YXRpYyBjb25zdCB1aW50OF90IExlZ2FjeVNlcmlhbGl6ZWRLZXlWZXJzaW9uID0gJ2InOwor
CisvLyBGSVhNRTogTGludXggcG9ydHMgdXNlcyBLZXllZEVuY29kZXJHbGliIGZvciB0aGVpciBJ
REJLZXlzLgorLy8gV2hlbiBhIEdsaWIgbWFpbnRhaW5lciBjb21lcyBhbG9uZyB0byBlbmFibGUg
dGhlIG5ldyBzZXJpYWxpemF0aW9uIHRoZXknbGwgbmVlZCB0bworLy8gZGVub3RlIGEgR2xpYiBt
YWdpYyBjaGFyYWN0ZXIgaGVyZS4KKworLyoKK1RoZSBJREJLZXlEYXRhIHNlcmlhbGl6YXRpb24g
Zm9ybWF0IGlzIGFzIGZvbGxvd3M6CitbMSBieXRlIHZlcnNpb24gaGVhZGVyXVtLZXkgQnVmZmVy
XQorCitUaGUgS2V5IEJ1ZmZlciBzZXJpYWxpemF0aW9uIGZvcm1hdCBpcyBhcyBmb2xsb3dzOgor
WzEgYnl0ZSBrZXkgdHlwZV1bVHlwZSBzcGVjaWZpYyBkYXRhXQorCitUeXBlIHNwZWNpZmljIHNl
cmlhbGl6YXRpb24gZm9ybWF0cyBhcmUgYXMgZm9sbG93cyBmb3IgZWFjaCBvZiB0aGUgdHlwZXM6
CitNaW46CitbMCBieXRlc10KKworTnVtYmVyOgorWzggYnl0ZXMgcmVwcmVzZW50aW5nIGEgZG91
YmxlIGVuY29kZWQgaW4gbGl0dGxlIGVuZGlhbl0KKworRGF0ZToKK1s4IGJ5dGVzIHJlcHJlc2Vu
dGluZyBhIGRvdWJsZSBlbmNvZGVkIGluIGxpdHRsZSBlbmRpYW5dCisKK1N0cmluZzoKK1s0IGJ5
dGVzIHJlcHJlc2VudGluZyBzdHJpbmcgImxlbmd0aCIgaW4gbGl0dGxlIGVuZGlhbl1bImxlbmd0
aCIgbnVtYmVyIG9mIDItYnl0ZSBwYWlycyByZXByZXNlbnRpbmcgRUNNQVNjcmlwdCAxNi1iaXQg
Y29kZSB1bml0c10KKworQmluYXJ5OgorWzggYnl0ZXMgcmVwcmVzZW50aW5nIHRoZSAic2l6ZSIg
b2YgdGhlIGJpbmFyeSBibG9iXVsic2l6ZSIgYnl0ZXNdCisKK0FycmF5OgorWzggYnl0ZXMgcmVw
cmVzZW50aW5nIHRoZSAibGVuZ3RoIiBvZiB0aGUga2V5IGFycmF5XVsibGVuZ3RoIiBpbmRpdmlk
dWFsIEtleSBCdWZmZXIgZW50cmllc10KKworTWF4OgorWzAgYnl0ZXNdCisqLworCisvLyBGSVhN
RTogSWYgdGhlIEdMaWIgbWFnaWMgY2hhcmFjdGVyIGVuZHMgdXAgYmVpbmcgMHgwMCwgd2Ugc2hv
dWxkIGNvbnNpZGVyIGNoYW5naW5nCisvLyB0aGlzIDB4MDAgc28gd2UgY2FuIHN1cHBvcnQgR2xp
YiBrZXllZCBlbmNvZGluZywgYWxzby4KK3N0YXRpYyBjb25zdCB1aW50OF90IFNJREJLZXlWZXJz
aW9uID0gMHgwMDsKK2VudW0gY2xhc3MgU0lEQktleVR5cGUgOiB1aW50OF90IHsKKyAgICBNaW4g
PSAweDAwLAorICAgIE51bWJlciA9IDB4MjAsCisgICAgRGF0ZSA9IDB4NDAsCisgICAgU3RyaW5n
ID0gMHg2MCwKKyAgICBCaW5hcnkgPSAweDgwLAorICAgIEFycmF5ID0gMHhBMCwKKyAgICBNYXgg
PSAweEZGLAorfTsKKworc3RhdGljIFNJREJLZXlUeXBlIHNlcmlhbGl6ZWRUeXBlRm9yS2V5VHlw
ZShJbmRleGVkREI6OktleVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWluOgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6
Ok1pbjsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgorICAgICAgICByZXR1
cm4gU0lEQktleVR5cGU6Ok51bWJlcjsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6RGF0
ZToKKyAgICAgICAgcmV0dXJuIFNJREJLZXlUeXBlOjpEYXRlOworICAgIGNhc2UgSW5kZXhlZERC
OjpLZXlUeXBlOjpTdHJpbmc6CisgICAgICAgIHJldHVybiBTSURCS2V5VHlwZTo6U3RyaW5nOwor
ICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6CisgICAgICAgIHJldHVybiBTSURC
S2V5VHlwZTo6QmluYXJ5OworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpBcnJheToKKyAg
ICAgICAgcmV0dXJuIFNJREJLZXlUeXBlOjpBcnJheTsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5
VHlwZTo6TWF4OgorICAgICAgICByZXR1cm4gU0lEQktleVR5cGU6Ok1heDsKKyAgICBjYXNlIElu
ZGV4ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9OworCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworI2lmIENQVShCSUdfRU5ESUFOKSB8fCBDUFUoTUlERExFX0VORElBTikgfHwgQ1BVKE5FRURT
X0FMSUdORURfQUNDRVNTKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRl
TGl0dGxlRW5kaWFuKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBUIHZhbHVlKQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YoVCk7IGkrKykgeworICAgICAgICBidWZmZXIuYXBw
ZW5kKHZhbHVlICYgMHhGRik7CisgICAgICAgIHZhbHVlID4+PSA4OworICAgIH0KK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBib29sIHJlYWRMaXR0bGVFbmRpYW4oY29uc3QgdWlu
dDhfdComIHB0ciwgY29uc3QgdWludDhfdCogZW5kLCBUJiB2YWx1ZSkKK3sKKyAgICBpZiAocHRy
ID4gZW5kIC0gc2l6ZW9mKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFs
dWUgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKFQpOyBpKyspCisgICAg
ICAgIHZhbHVlICs9ICgoVCkqcHRyKyspIDw8IChpICogOCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisjZWxzZQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRlTGl0dGxlRW5k
aWFuKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBUIHZhbHVlKQoreworICAgIGJ1ZmZlci5hcHBlbmQo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCByZWFkTGl0dGxlRW5kaWFuKGNvbnN0
IHVpbnQ4X3QqJiBwdHIsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgVCYgdmFsdWUpCit7CisgICAgaWYg
KHB0ciA+IGVuZCAtIHNpemVvZih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHB0cik7CisgICAgcHRyICs9IHNp
emVvZihUKTsKKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdy
aXRlRG91YmxlKFZlY3RvcjxjaGFyPiYgZGF0YSwgZG91YmxlIGQpCit7CisgICAgd3JpdGVMaXR0
bGVFbmRpYW4oZGF0YSwgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPigmZCkpOworfQorCitz
dGF0aWMgYm9vbCByZWFkRG91YmxlKGNvbnN0IHVpbnQ4X3QqJiBkYXRhLCBjb25zdCB1aW50OF90
KiBlbmQsIGRvdWJsZSYgZCkKK3sKKyAgICByZXR1cm4gcmVhZExpdHRsZUVuZGlhbihkYXRhLCBl
bmQsICpyZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4oJmQpKTsKK30KKworc3RhdGljIHZvaWQg
ZW5jb2RlS2V5KFZlY3RvcjxjaGFyPiYgZGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5KQorewor
ICAgIFNJREJLZXlUeXBlIHR5cGUgPSBzZXJpYWxpemVkVHlwZUZvcktleVR5cGUoa2V5LnR5cGUo
KSk7CisgICAgZGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odHlwZSkpOworCisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TnVtYmVyOgorICAgICAgICB3cml0
ZURvdWJsZShkYXRhLCBrZXkubnVtYmVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNJ
REJLZXlUeXBlOjpEYXRlOgorICAgICAgICB3cml0ZURvdWJsZShkYXRhLCBrZXkuZGF0ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6U3RyaW5nOiB7CisgICAgICAg
IGF1dG8gc3RyaW5nID0ga2V5LnN0cmluZygpOworICAgICAgICB1aW50MzJfdCBsZW5ndGggPSBz
dHJpbmcubGVuZ3RoKCk7CisgICAgICAgIHdyaXRlTGl0dGxlRW5kaWFuKGRhdGEsIGxlbmd0aCk7
CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAg
ICAgIHdyaXRlTGl0dGxlRW5kaWFuKGRhdGEsIHN0cmluZ1tpXSk7CisKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkJpbmFyeTogeworICAgICAgICBhdXRvJiBi
dWZmZXIgPSBrZXkuYmluYXJ5KCk7CisgICAgICAgIHVpbnQ2NF90IHNpemUgPSBidWZmZXIuc2l6
ZSgpOworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihkYXRhLCBzaXplKTsKKworICAgICAgICBh
dXRvKiBidWZmZXJEYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlckRh
dGEgfHwgIXNpemUpOworICAgICAgICBpZiAoYnVmZmVyRGF0YSkKKyAgICAgICAgICAgIGRhdGEu
YXBwZW5kKGJ1ZmZlckRhdGEtPmRhdGEoKSwgYnVmZmVyRGF0YS0+c2l6ZSgpKTsKKworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6QXJyYXk6IHsKKyAgICAgICAg
YXV0byYgYXJyYXkgPSBrZXkuYXJyYXkoKTsKKyAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGFycmF5
LnNpemUoKTsKKyAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW4oZGF0YSwgc2l6ZSk7CisgICAgICAg
IGZvciAoYXV0byYga2V5IDogYXJyYXkpCisgICAgICAgICAgICBlbmNvZGVLZXkoZGF0YSwga2V5
KTsKKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6TWluOgor
ICAgIGNhc2UgU0lEQktleVR5cGU6Ok1heDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IElEQktleURhdGEm
IGtleSkKIHsKKyNpZiBVU0UoQ0YpCisgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgZGF0YS5h
cHBlbmQoU0lEQktleVZlcnNpb24pOworCisgICAgZW5jb2RlS2V5KGRhdGEsIGtleSk7CisgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoZGF0YSk7CisjZWxzZQogICAgIGF1dG8g
ZW5jb2RlciA9IEtleWVkRW5jb2Rlcjo6ZW5jb2RlcigpOwogICAgIGtleS5lbmNvZGUoKmVuY29k
ZXIpOwogICAgIHJldHVybiBlbmNvZGVyLT5maW5pc2hFbmNvZGluZygpOworI2VuZGlmCisKK30K
Kworc3RhdGljIGJvb2wgZGVjb2RlS2V5KGNvbnN0IHVpbnQ4X3QqJiBkYXRhLCBjb25zdCB1aW50
OF90KiBlbmQsIElEQktleURhdGEmIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRhdGEgfHwgZGF0YSA+
PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNJREJLZXlUeXBlIHR5cGUgPSBz
dGF0aWNfY2FzdDxTSURCS2V5VHlwZT4oZGF0YSsrWzBdKTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIFNJREJLZXlUeXBlOjpNaW46CisgICAgICAgIHJlc3VsdCA9IElEQktleURhdGE6
Om1pbmltdW0oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTSURCS2V5VHlwZTo6
TWF4OgorICAgICAgICByZXN1bHQgPSBJREJLZXlEYXRhOjptYXhpbXVtKCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGNhc2UgU0lEQktleVR5cGU6Ok51bWJlcjogeworICAgICAgICBkb3Vi
bGUgZDsKKyAgICAgICAgaWYgKCFyZWFkRG91YmxlKGRhdGEsIGVuZCwgZCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LnNldE51bWJlclZhbHVlKGQpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTSURCS2V5VHlwZTo6RGF0ZTogewor
ICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgaWYgKCFyZWFkRG91YmxlKGRhdGEsIGVuZCwgZCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LnNldERhdGVWYWx1
ZShkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6
OlN0cmluZzogeworICAgICAgICB1aW50MzJfdCBsZW5ndGg7CisgICAgICAgIGlmICghcmVhZExp
dHRsZUVuZGlhbihkYXRhLCBlbmQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihlbmQgLSBkYXRhKSA8IGxlbmd0
aCAqIDIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmVjdG9yPFVDaGFy
PiBidWZmZXI7CisgICAgICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIHVpbnQxNl90IGNoOworICAgICAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFuKGRhdGEs
IGVuZCwgY2gpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJ1
ZmZlci51bmNoZWNrZWRBcHBlbmQoY2gpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0LnNl
dFN0cmluZ1ZhbHVlKFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKSk7CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkJpbmFyeTogeworICAg
ICAgICB1aW50NjRfdCBzaXplNjQ7CisgICAgICAgIGlmICghcmVhZExpdHRsZUVuZGlhbihkYXRh
LCBlbmQsIHNpemU2NCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihlbmQgLSBkYXRhKSA8IHNpemU2NCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoc2l6ZTY0ID4gc3RkOjpudW1lcmljX2xpbWl0
czxzaXplX3Q+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBz
aXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZTY0KTsKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGRhdGFWZWN0b3I7CisKKyAgICAgICAgZGF0YVZlY3Rvci5hcHBlbmQoZGF0YSwg
c2l6ZSk7CisgICAgICAgIGRhdGEgKz0gc2l6ZTsKKworICAgICAgICByZXN1bHQuc2V0QmluYXJ5
VmFsdWUoVGhyZWFkU2FmZURhdGFCdWZmZXI6OmFkb3B0VmVjdG9yKGRhdGFWZWN0b3IpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgU0lEQktleVR5cGU6OkFycmF5OiB7
CisgICAgICAgIHVpbnQ2NF90IHNpemU2NDsKKyAgICAgICAgaWYgKCFyZWFkTGl0dGxlRW5kaWFu
KGRhdGEsIGVuZCwgc2l6ZTY0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBpZiAoc2l6ZTY0ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0
PHNpemVfdD4oc2l6ZTY0KTsKKyAgICAgICAgVmVjdG9yPElEQktleURhdGE+IGFycmF5OworICAg
ICAgICBhcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOworCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBJREJLZXlEYXRhIGtl
eURhdGE7CisgICAgICAgICAgICBpZiAoIWRlY29kZUtleShkYXRhLCBlbmQsIGtleURhdGEpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgQVNTRVJUKGtleURh
dGEuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgIGFycmF5LnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KGtleURhdGEpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5zZXRBcnJheVZhbHVlKGFy
cmF5KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgTE9HX0VSUk9SKCJkZWNvZGVLZXkgZW5jb3VudGVyZWQgdW5leHBlY3RlZCB0eXBlOiAlaSIs
IChpbnQpdHlwZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgZGVz
ZXJpYWxpemVJREJLZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJL
ZXlEYXRhJiByZXN1bHQpCkBAIC0xMDYsOCArMzg3LDI5IEBAIGJvb2wgZGVzZXJpYWxpemVJREJL
ZXlEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBJREJLZXlEYXRhJiByZXN1
bHQpCiAgICAgaWYgKCFkYXRhIHx8ICFzaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNp
ZiBVU0UoQ0YpCisgICAgaWYgKGRhdGFbMF0gPT0gTGVnYWN5U2VyaWFsaXplZEtleVZlcnNpb24p
IHsKKyAgICAgICAgYXV0byBkZWNvZGVyID0gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKGRhdGEsIHNp
emUpOworICAgICAgICByZXR1cm4gSURCS2V5RGF0YTo6ZGVjb2RlKCpkZWNvZGVyLCByZXN1bHQp
OworICAgIH0KKworICAgIC8vIFZlcmlmeSB0aGlzIGlzIGEgU2VyaWFsaXplZElEQktleSB2ZXJz
aW9uIHdlIHVuZGVyc3RhbmQuCisgICAgY29uc3QgdWludDhfdCogY3VycmVudCA9IGRhdGE7Cisg
ICAgY29uc3QgdWludDhfdCogZW5kID0gZGF0YSArIHNpemU7CisgICAgaWYgKGN1cnJlbnQrK1sw
XSAhPSBTSURCS2V5VmVyc2lvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGRl
Y29kZUtleShjdXJyZW50LCBlbmQsIHJlc3VsdCkpIHsKKyAgICAgICAgLy8gRXZlbiBpZiB3ZSBz
dWNjZXNzZnVsbHkgZGVjb2RlZCBhIGtleSwgdGhlIGRlc2VyaWFsaXplIGlzIG9ubHkgc3VjY2Vz
c2Z1bAorICAgICAgICAvLyBpZiB3ZSBhY3R1YWxseSBjb25zdW1lZCBhbGwgaW5wdXQgZGF0YS4K
KyAgICAgICAgcmV0dXJuIGN1cnJlbnQgPT0gZW5kOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKKyNlbHNlCiAgICAgYXV0byBkZWNvZGVyID0gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKGRhdGEs
IHNpemUpOwogICAgIHJldHVybiBJREJLZXlEYXRhOjpkZWNvZGUoKmRlY29kZXIsIHJlc3VsdCk7
CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmNwcAppbmRleCAzZGY4MzUyNmI5MWQxYWVkYTBkNGUzNzVmNWU1ZjdlZTk2NzFh
ZDE5Li5hMmNjY2FkYzc5ZDllNTA1MmM5MTU1MjYwNDhmY2UwZDA2ZDQ0N2VhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2lu
Z1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMTE4Myw2ICsxMTgzLDggQEAgSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJREJJbmRl
eEluZm8mIGluZm8sIGMKICAgICAgICAgYm9vbCBoYXNSZWNvcmQ7CiAgICAgICAgIElEQkVycm9y
IGVycm9yOwogICAgICAgICBmb3IgKGF1dG8mIGluZGV4S2V5IDogaW5kZXhLZXlzKSB7CisgICAg
ICAgICAgICBpZiAoIWluZGV4S2V5LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGVycm9yID0gdW5jaGVja2VkSGFzSW5kZXhSZWNvcmQoaW5mbywgaW5k
ZXhLZXksIGhhc1JlY29yZCk7CiAgICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKQEAgLTExOTIsNiArMTE5NCw4IEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvLCBjCiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBpbmRleEtleSA6IGluZGV4
S2V5cykgeworICAgICAgICBpZiAoIWluZGV4S2V5LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBhdXRvIGVycm9yID0gdW5jaGVja2VkUHV0SW5kZXhSZWNvcmQoaW5m
by5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgaW5mby5pZGVudGlmaWVyKCksIGtleSwgaW5kZXhL
ZXkpOwogICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBwdXQgaW5kZXggcmVjb3JkIGZvciBuZXdseSBjcmVhdGVkIGluZGV4Iik7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggNzc2MjM2NjhjMGM0MDllMjRhODQ4Nzg4ZWY1ZDk4YTY5NDA2ODBkZi4uM2M1MTcw
N2YyNTA5ZDVhODE5M2JmZmMyMTk2OTA5NjY4ZWY1ZmJkYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDE2LTExLTE1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbmRleGVkREIgMi4wOiBLZXkgY29sbGF0aW9uIGR1cmluZyBTUUxpdGUgbG9va3VwcyBpcyBp
bnNhbmVseSBzbG93LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0NzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOiBVbnNraXAgYSB0ZXN0IHRoYXQgcGFzc2VzIGV2ZW4g
aW4gZGVidWcgYnVpbGRzLCBhbmQgcmUtY2xhc3NpZnkKKyAgICAgICAgICBhIHRlc3QgdGhhdCB1
c2VkIHRvIGJlIHRvby1zbG93IGV2ZXJ5d2hlcmUgdG8gYmUgdG9vLXNsb3cgb25seSBpbiBkZWJ1
ZyBidWlsZHMuCisKIDIwMTYtMTEtMTUgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxp
YS5jb20+CiAKICAgICAgICAgV2ViUlRDOiB1cGRhdGUgTWVkaWFTdHJlYW0tTWVkaWFFbGVtZW50
LXNyY09iamVjdC5odG1sIHRlc3QgYW5kIHVuc2tpcCBpdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXgg
OTdlZWZkOWY0ZThlYmFlOTMzNTJkMzM4ZjNmZmUwYjFhY2M0MjI5Zi4uYjZhZWEwY2RjZmEwYzY4
NDNjNTE3N2U2OWYwNjg1NTgzMTEwYzEzZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4
cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC04NDgsOSAr
ODQ4LDggQEAgc3RvcmFnZS9pbmRleGVkZGIvZGVsZXRlZGF0YWJhc2UtZGVsYXllZC1ieS12ZXJz
aW9uY2hhbmdlLmh0bWwgWyBTa2lwIF0KICMgSXQncyB1bmNsZWFyIGlmIHdlIG5lZWQgdG8gY29u
dGludWUgc3VwcG9ydGluZyB0aGlzLgogc3RvcmFnZS9pbmRleGVkZGIvcHJvcGVydGllcy1kaXNh
YmxlZC1hdC1ydW50aW1lLmh0bWwgWyBGYWlsdXJlIF0KIAotIyBDb21wbGV0ZXMgd2l0aCBwYXNz
aW5nIHJlc3VsdHMsIGJ1dCB0b28gc2xvd2x5IGZvciBvdXIgdGVzdCB0aW1lb3V0cy4KLWltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYmluZGV4LW11bHRpZW50cnkt
YmlnLmh0bSBbIEZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRl
eGVkREIvaWRiY3Vyc29yX2l0ZXJhdGluZy5odG0gWyBGYWlsdXJlIF0KKyMgSW4gZGVidWcgYnVp
bGRzLCBydW5zIHRvbyBzbG93bHkgZm9yIHRoZSB0ZXN0IHRpbWVvdXQuCitbIERlYnVnIF0gaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRiaW5kZXgtbXVsdGllbnRy
eS1iaWcuaHRtIFsgRmFpbHVyZSBdCiAKICMgU1FMaXRlIGJhY2tlbmQgdGVzdHMgdGhhdCB0aW1l
b3V0CiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vdHJhbnNhY3Rpb24tc2NoZWR1bGVyLTEuaHRt
bCBbIFNraXAgXQo=
</data>
<flag name="review"
          id="317525"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>