<?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>96033</bug_id>
          
          <creation_ts>2012-09-06 15:48:06 -0700</creation_ts>
          <short_desc>IndexedDB: IDBObjectStore.count() is slow</short_desc>
          <delta_ts>2012-09-11 12:17:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>523.x (Safari 3)</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>peter+ews</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>713781</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-06 15:48:06 -0700</bug_when>
    <thetext>Over in http://crbug.com/146595 it is reported that IDBObjectStore.count() is slow; the original reporter claims exponential slowdowns, but I can&apos;t repro that.

Code inspection does show a lot of extraneous work being done which could be optimized, even a full iteration is still required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713810</commentid>
    <comment_count>1</comment_count>
      <attachid>162612</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-06 16:15:29 -0700</bug_when>
    <thetext>Created attachment 162612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713861</commentid>
    <comment_count>2</comment_count>
      <attachid>162612</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-09-06 16:55:39 -0700</bug_when>
    <thetext>Comment on attachment 162612
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        (WebCore): Factor out common CursorOptions initialization code.

Looks like indexCursorOptions is in the same vein as objectStoreCursorOptions but not necessary for this patch, is that right?  (Just so that I understand what&apos;s going on - I&apos;m not saying punt it.)  What do the return values of those methods mean?  That cursor with those options will actually have entries to iterate over?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714011</commentid>
    <comment_count>3</comment_count>
      <attachid>162612</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-09-06 19:16:33 -0700</bug_when>
    <thetext>Comment on attachment 162612
Patch

Attachment 162612 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13786222</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714352</commentid>
    <comment_count>4</comment_count>
      <attachid>162612</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-07 03:31:20 -0700</bug_when>
    <thetext>Comment on attachment 162612
Patch

Attachment 162612 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13778545</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714554</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-07 08:41:25 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Looks like indexCursorOptions is in the same vein as objectStoreCursorOptions but not necessary for this patch, is that right?  (Just so that I understand what&apos;s going on - I&apos;m not saying punt it.) 

Correct - when refactoring the objectstore options I realized the index options generation was duplicated code.

&gt; What do the return values of those methods mean?  That cursor with those options will actually have entries to iterate over?

Correct - if false, no cursor is returned from the openXXXCursor methods (just as today) and the caller is responsible for e.g. sending null back in the eventual onSuccess. Should be no behavior change.

(In reply to comment #3)
&gt; Attachment 162612 [details] did not pass cr-android-ews (chromium-android):

Derp, forgot about the webkit unit tests. Will re-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714690</commentid>
    <comment_count>6</comment_count>
      <attachid>162806</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-07 10:28:53 -0700</bug_when>
    <thetext>Created attachment 162806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716569</commentid>
    <comment_count>7</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-10 15:08:43 -0700</bug_when>
    <thetext>I did some performance runs with this patch and also http://webkit.org/b/96037 which also improves performance for count().

Details at: http://code.google.com/p/chromium/issues/detail?id=146595

Pretty graph at: https://docs.google.com/a/chromium.org/spreadsheet/ccc?key=0AoyP0VKkrFm8dE1VanBfR2Jpa1MwUkxCM1RsZ0RZTnc#gid=1

Numbers indicate it makes sense to land both patches.

dgrogan@ - thoughts? how&apos;s the patch look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716740</commentid>
    <comment_count>8</comment_count>
      <attachid>162806</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-09-10 18:05:31 -0700</bug_when>
    <thetext>Comment on attachment 162806
Patch

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

LGTM

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:1329
&gt; +    virtual int64_t indexDataId() { ASSERT_NOT_REACHED(); return 0; }

Do you know why we have this method? It looks to not be called or implemented anywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717227</commentid>
    <comment_count>9</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-11 08:55:49 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:1329
&gt; &gt; +    virtual int64_t indexDataId() { ASSERT_NOT_REACHED(); return 0; }
&gt; 
&gt; Do you know why we have this method? It looks to not be called or implemented anywhere.

Looks like it went in with http://trac.webkit.org/changeset/80220 - I don&apos;t see it being used directly, but there&apos;s a similar objectStoreDataId which was used for the SQLite backing store. It was probably held the autoincrement primary key ID for the index record in the SQL impl, and is dead code now.

I&apos;ll whack it in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717228</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-11 08:58:04 -0700</bug_when>
    <thetext> (In reply to comment #9)
&gt; I&apos;ll whack it in a follow-up patch.

Scratch that - I will re-up this patch with it removed here and elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717334</commentid>
    <comment_count>11</comment_count>
      <attachid>163397</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-11 10:24:47 -0700</bug_when>
    <thetext>Created attachment 163397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717339</commentid>
    <comment_count>12</comment_count>
      <attachid>163397</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-11 10:26:21 -0700</bug_when>
    <thetext>Comment on attachment 163397
Patch

tony@ - r? cq?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717367</commentid>
    <comment_count>13</comment_count>
      <attachid>163397</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-09-11 10:44:11 -0700</bug_when>
    <thetext>Comment on attachment 163397
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:1358
&gt; +    const char* p = m_iterator-&gt;key().begin();

Nit: Can you pick better variable names than p and q? Maybe key and value or currentKey and currentValue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717393</commentid>
    <comment_count>14</comment_count>
      <attachid>163404</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-11 11:08:38 -0700</bug_when>
    <thetext>Created attachment 163404
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717395</commentid>
    <comment_count>15</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-11 11:10:14 -0700</bug_when>
    <thetext>&gt; Nit: Can you pick better variable names than p and q? Maybe key and value or currentKey and currentValue?

Done. The loadCurrentRow method was a copy/paste, so I updated them in the new method and the other variants.

There&apos;s already https://bugs.webkit.org/show_bug.cgi?id=85293 tracking the need to refactor the loadCurrentRow methods to eliminate duplicate code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717466</commentid>
    <comment_count>16</comment_count>
      <attachid>163404</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 12:16:58 -0700</bug_when>
    <thetext>Comment on attachment 163404
Patch for landing

Clearing flags on attachment: 163404

Committed r128217: &lt;http://trac.webkit.org/changeset/128217&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717467</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 12:17:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162612</attachid>
            <date>2012-09-06 16:15:29 -0700</date>
            <delta_ts>2012-09-07 10:28:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96033-20120906161509.patch</filename>
            <type>text/plain</type>
            <size>17062</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3NjFkMGY5MGUzZDRj
MWJjMmY4NDc0MTZmZDVlODdjYmI5OWI4Zi4uODhiZDZiMTU4MjMxNWYxMGVlMzBmNGU5YTFmNjMy
NzQzNGZjY2EyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA5LTA2ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBJREJP
YmplY3RTdG9yZS5jb3VudCgpIGlzIHNsb3cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk2MDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQXZvaWQgZGVjb2RpbmcgcmVjb3JkIHZhbHVlcyB3aGVuIHBlcmZv
cm1pbmcgY291bnQoKSBpdGVyYXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gbm8gZnVu
Y3Rpb25hbCBjaGFuZ2VzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmg6IEV4cG9zZSBuZXcgKGludGVybmFsKSBPYmplY3RTdG9yZUtleUN1cnNvcgorICAg
ICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOiBGYWN0b3Igb3V0IGNv
bW1vbiBDdXJzb3JPcHRpb25zIGluaXRpYWxpemF0aW9uIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IpOiBSZWZhY3Rv
ci4KKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RT
dG9yZUtleUN1cnNvcik6IEltcGxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcik6IFJlZmFjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKTogUmVmYWN0b3Iu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgor
ICAgICAgICAoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKTogVXNlIE9iamVjdFN0b3Jl
S2V5Q3Vyc29yIGZvciBpdGVyYXRpb24uCisKIDIwMTItMDktMDMgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KIAogICAgICAgICBQYXJ0IDEgb2YgcmVtb3ZpbmcgUGxhdGZvcm1TdHJpbmcu
aCwgbW92ZSByZW1haW5pbmcgZnVuY3Rpb25zIHRvIG5ldyBob21lcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAppbmRleCA5MGM4NWMx
ODBhMTA0YTdkOTdiODUzMGE4MDkwOTU5MzhiNjRlNGU0Li4zMDEwNjYwNjFjYTNmMGVjZWQ0OTg5
NmNjMmFmY2Q0MjE3MzM4ODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaApAQCAtMTA3LDYgKzEwNyw3IEBAIHB1YmxpYzoKICAg
ICB9OwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vy
c29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGly
ZWN0aW9uKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5
Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuY3BwCmluZGV4IDA0YTRmYmJhMjUwMzA3YWVjNDViZmE3OTM5NDUyYTZlZWM1ZGEzYTAuLjFj
NTNiMDA0ZDRjZTA3NmFmOTdiNWZhZjA4MDhjYTcwOTNmMzJjY2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuY3BwCkBAIC0xMzA4LDYgKzEzMDgsNjYgQEAgYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjppc1Bh
c3RCb3VuZHMoKSBjb25zdAogICAgIHJldHVybiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3It
PmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8IDA7CiB9CiAKK2NsYXNzIE9iamVjdFN0
b3JlS2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGNyZWF0ZShMZXZl
bERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JP
cHRpb25zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUtl
eUN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGNsb25lKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKHRo
aXMpKTsKKyAgICB9CisKKyAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCisgICAgdmlydHVhbCBTdHJp
bmcgdmFsdWUoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIE9WRVJSSURFCisgICAgewor
ICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyOworICAgIH0KKyAgICB2aXJ0dWFsIGludDY0X3Qg
aW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOworCitwcml2YXRlOgorICAgIE9iamVjdFN0b3Jl
S2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJz
b3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IEN1cnNvckltcGxDb21tb24odHJh
bnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAgeworICAgIH0KKworICAgIE9iamVjdFN0b3Jl
S2V5Q3Vyc29ySW1wbChjb25zdCBPYmplY3RTdG9yZUtleUN1cnNvckltcGwqIG90aGVyKQorICAg
ICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCisgICAgeworICAgIH0KKworICAgIFJlZlB0
cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gbV9pZGVudGlmaWVyOworfTsKKworYm9vbCBPYmpl
Y3RTdG9yZUtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKK3sKKyAgICBjb25zdCBjaGFy
KiBwID0gbV9pdGVyYXRvci0+a2V5KCkuYmVnaW4oKTsKKyAgICBjb25zdCBjaGFyKiBrZXlMaW1p
dCA9IG1faXRlcmF0b3ItPmtleSgpLmVuZCgpOworCisgICAgT2JqZWN0U3RvcmVEYXRhS2V5IG9i
amVjdFN0b3JlRGF0YUtleTsKKyAgICBwID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwg
a2V5TGltaXQsICZvYmplY3RTdG9yZURhdGFLZXkpOworICAgIEFTU0VSVChwKTsKKyAgICBpZiAo
IXApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fY3VycmVudEtleSA9IG9iamVjdFN0
b3JlRGF0YUtleS51c2VyS2V5KCk7CisKKyAgICBpbnQ2NF90IHZlcnNpb247CisgICAgY29uc3Qg
Y2hhciogcSA9IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCksIG1faXRl
cmF0b3ItPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOworICAgIEFTU0VSVChxKTsKKyAgICBpZiAo
IXEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHJlLWVuY29k
ZXMgd2hhdCB3YXMganVzdCBkZWNvZGVkOyB0cnkgYW5kIG9wdGltaXplLgorICAgIG1faWRlbnRp
ZmllciA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCptX2N1
cnJlbnRLZXkpLCB2ZXJzaW9uKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBjbGFzcyBPYmpl
Y3RTdG9yZUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0
aW9ucykKQEAgLTE1MzIsMTQgKzE1OTIsOCBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1
cnJlbnRSb3coKQogICAgIHJldHVybiB0cnVlOwogfQogCi19Ci0KLVBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9y
ZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitib29s
IG9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNvck9wdGlv
bnMmIGN1cnNvck9wdGlvbnMpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNh
Y3Rpb24pOwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLQogICAgIGJvb2wgbG93
ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwogICAgIGJvb2wgdXBwZXJCb3VuZCA9
IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwogICAgIGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChk
aXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0g
SURCQ3Vyc29yOjpORVhUKTsKQEAgLTE1NjAsOCArMTYxNCw4IEBAIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9y
ZUN1cnNvCiAgICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gdHJ1ZTsgLy8gTm90
IGluY2x1ZGVkLgogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgYSBrZXkg
dGhhdCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JF
cXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBj
dXJzb3JPcHRpb25zLmhpZ2hLZXkpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwodHJhbnNhY3Rpb24sIGN1
cnNvck9wdGlvbnMuaGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTU3MSw4ICsxNjI1LDggQEAgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
b3Blbk9iamVjdFN0b3JlQ3Vyc28KICAgICAgICAgaWYgKCFjdXJzb3JPcHRpb25zLmZvcndhcmQp
IHsKICAgICAgICAgICAgIC8vIEZvciByZXZlcnNlIGN1cnNvcnMsIHdlIG5lZWQgYSBrZXkgdGhh
dCBleGlzdHMuCiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gZm91bmRIaWdoS2V5OwotICAgICAg
ICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNh
Y3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVz
c1RoYW5PckVxdWFsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGZvdW5kSGln
aEtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAvLyBJ
ZiB0aGUgdGFyZ2V0IGtleSBzaG91bGQgbm90IGJlIGluY2x1ZGVkLCBidXQgd2UgZW5kIHVwIHdp
dGggYSBzbWFsbGVyIGtleSwgd2Ugc2hvdWxkIGluY2x1ZGUgdGhhdC4KICAgICAgICAgICAgIGlm
IChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMoZm91bmRIaWdoS2V5
LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMCkKQEAgLTE1ODIsMTggKzE2MzYsMTIgQEAgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
b3Blbk9iamVjdFN0b3JlQ3Vyc28KICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxPYmpl
Y3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRl
KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zKTsKLSAgICBpZiAoIWN1
cnNvci0+Zmlyc3RTZWVrKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGN1cnNv
ci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNv
cihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbikKK2Jvb2wgaW5kZXhDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQogewotICAgIElEQl9UUkFD
RSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yIik7Ci0gICAgQVNT
RVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlv
bnM7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKICAgICBib29sIGxvd2VyQm91bmQgPSByYW5n
ZSAmJiByYW5nZS0+bG93ZXIoKTsKICAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5n
ZS0+dXBwZXIoKTsKICAgICBjdXJzb3JPcHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9uID09IElE
QkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVY
VCk7CkBAIC0xNjEyLDggKzE2NjAsOCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaQogICAgICAg
ICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgogCiAgICAgICAg
IGlmICghY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlz
dHMuCi0gICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBjdXJzb3JPcHRp
b25zLmhpZ2hLZXkpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYg
KCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlv
bnMuaGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTYyMSw4ICsxNjY5LDggQEAgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4
S2V5Q3Vyc29yKGkKICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHJhbmdlLT51cHBl
ck9wZW4oKTsKIAogICAgICAgICBWZWN0b3I8Y2hhcj4gZm91bmRIaWdoS2V5OwotICAgICAgICBp
ZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKSAvLyBTZWVrIHRvIHRo
ZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBrZXlzLgotICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKHRy
YW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGZvdW5kSGlnaEtleSkpIC8vIFNlZWsg
dG8gdGhlICpsYXN0KiBrZXkgaW4gdGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxk
IG5vdCBiZSBpbmNsdWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNo
b3VsZCBpbmNsdWRlIHRoYXQuCiAgICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYm
IGNvbXBhcmVJbmRleEtleXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwg
MCkKQEAgLTE2MzEsNTUgKzE2NzksNjAgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGkKICAgICAg
ICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gZm91bmRIaWdoS2V5OwogICAgIH0KIAotICAgIFJl
ZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3Jl
YXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfQorCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yIik7CisgICAgQVNTRVJUKG1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7Cisg
ICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9w
dGlvbnMpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJ
bXBsPiBjdXJzb3IgPSBPYmplY3RTdG9yZUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2Vl
aygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3Io
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJh
bmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIElEQl9U
UkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yIik7CisgICAgSURC
X1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3Ii
KTsKICAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogICAgIEN1cnNvck9wdGlvbnMg
Y3Vyc29yT3B0aW9uczsKLSAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93
ZXIoKTsKLSAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKLSAg
ICBjdXJzb3JPcHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9O
T19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7Ci0gICAgY3Vyc29y
T3B0aW9ucy51bmlxdWUgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNB
VEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpOwotCi0gICAg
aWYgKCFsb3dlckJvdW5kKSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhE
YXRhS2V5OjplbmNvZGVNaW5LZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7
Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4KLSAg
ICB9IGVsc2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd0tleSA9IEluZGV4RGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+bG93ZXIo
KSk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IHJhbmdlLT5sb3dlck9wZW4oKTsK
LSAgICB9Ci0KLSAgICBpZiAoIXVwcGVyQm91bmQpIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5o
aWdoS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsg
Ly8gSW5jbHVkZWQuCi0KLSAgICAgICAgaWYgKCFjdXJzb3JPcHRpb25zLmZvcndhcmQpIHsgLy8g
V2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0
S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRp
b25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRl
eERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqcmFu
Z2UtPnVwcGVyKCkpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gcmFuZ2UtPnVw
cGVyT3BlbigpOworICAgIGlmICghb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0
aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUmVmUHRyPE9iamVj
dFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpj
cmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIGlm
ICghY3Vyc29yLT5maXJzdFNlZWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgVmVj
dG9yPGNoYXI+IGZvdW5kSGlnaEtleTsKLSAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNz
VGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGln
aEtleSwgZm91bmRIaWdoS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0
IG9mIG5vbi11bmlxdWUga2V5cy4KLSAgICAgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBj
dXJzb3IucmVsZWFzZSgpOworfQogCi0gICAgICAgIC8vIElmIHRoZSB0YXJnZXQga2V5IHNob3Vs
ZCBub3QgYmUgaW5jbHVkZWQsIGJ1dCB3ZSBlbmQgdXAgd2l0aCBhIHNtYWxsZXIga2V5LCB3ZSBz
aG91bGQgaW5jbHVkZSB0aGF0LgotICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAm
JiBjb21wYXJlSW5kZXhLZXlzKGZvdW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8
IDApCi0gICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7CitQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVu
SW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRp
cmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IiKTsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rp
b24pOworICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBpZiAoIWluZGV4Q3Vy
c29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IElu
ZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJz
b3JPcHRpb25zKTsKKyAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCisgICAgICAgIHJldHVy
biAwOwogCi0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IGZvdW5kSGlnaEtleTsKLSAg
ICB9CisgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Cit9CiAKK1Bhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNv
cihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRl
eEN1cnNvciIpOworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgQ3Vyc29y
T3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVh
dGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOwogICAgIGlmICgh
Y3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgK
aW5kZXggYzM3NTljZjdlMGQzNTJjMjE1ZTY3NzI5ZmVhZWMxYjQ5OTFlZDI2My4uNzMzOTIyNjkw
MTMxNTI1MGYzNWE4OGZhMjUyNWJkZTJmYzc4YjMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaApAQCAt
NzMsNiArNzMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0
UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwogICAgIHZpcnR1YWwgYm9vbCBr
ZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+
JiBmb3VuZFByaW1hcnlLZXkpOwogCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Bl
bk9iamVjdFN0b3JlS2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5J
bmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9u
KTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwCmluZGV4IGI2ZDBlYTBhNTBkZTIwZGRlYWM1MTVmNjRmNmQ4NTkzYTY3MjQzZmEu
LmVkMGNmZjhhNGY0ZmUzY2NkZmY4YzdhYTBiOWZjMGE0YmU3N2Q0MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwCkBAIC01NTUsNyArNTU1LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHQKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50SW50
ZXJuYWwiKTsKICAgICB1aW50MzJfdCBjb3VudCA9IDA7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBv
YmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RT
dG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihvYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIElEQkN1cnNv
cjo6TkVYVCk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKICAgICAgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1ZShjb3VudCkp
OwogICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162806</attachid>
            <date>2012-09-07 10:28:53 -0700</date>
            <delta_ts>2012-09-11 10:24:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96033-20120907102832.patch</filename>
            <type>text/plain</type>
            <size>18709</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3NjFkMGY5MGUzZDRj
MWJjMmY4NDc0MTZmZDVlODdjYmI5OWI4Zi4uNTUzNGU2ZDcxZmFmZWVlN2Y0YzQ0Y2NmMWQ0NDM1
MjhiOTM2M2JkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA5LTA2ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBJREJP
YmplY3RTdG9yZS5jb3VudCgpIGlzIHNsb3cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk2MDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQXZvaWQgZGVjb2RpbmcgcmVjb3JkIHZhbHVlcyB3aGVuIHBlcmZv
cm1pbmcgY291bnQoKSBpdGVyYXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gbm8gZnVu
Y3Rpb25hbCBjaGFuZ2VzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmg6IEV4cG9zZSBuZXcgKGludGVybmFsKSBPYmplY3RTdG9yZUtleUN1cnNvcgorICAg
ICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOiBGYWN0b3Igb3V0IGNv
bW1vbiBDdXJzb3JPcHRpb25zIGluaXRpYWxpemF0aW9uIGNvZGUuIFRoZSBvYmplY3RTdG9yZUN1
cnNvck9wdGlvbnMoKQorICAgICAgICBmdW5jdGlvbiBpcyBuZWVkZWQgZm9yIHRoaXMgcGF0Y2gu
IFRoZSBpbmRleEN1cnNvck9wdGlvbnMoKSBmdW5jdGlvbiBpcyBub3QsIGJ1dCBlbGltaW5hdGVz
CisgICAgICAgIGR1cGxpY2F0ZWQgY29kZSBhbmQgaXMgYSBuZWFybHkgaWRlbnRpY2FsIHJlZmFj
dG9yLgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKTogUmVmYWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IpOiBJbXBsZW1lbnQuCisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IpOiBS
ZWZhY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5J
bmRleEN1cnNvcik6IERpdHRvLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKElEQkxldmVsREJCYWNraW5nU3RvcmUpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5h
bCk6IFVzZSBPYmplY3RTdG9yZUtleUN1cnNvciBmb3IgaXRlcmF0aW9uLgorCiAyMDEyLTA5LTAz
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGFydCAxIG9mIHJlbW92
aW5nIFBsYXRmb3JtU3RyaW5nLmgsIG1vdmUgcmVtYWluaW5nIGZ1bmN0aW9ucyB0byBuZXcgaG9t
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0
b3JlLmgKaW5kZXggOTBjODVjMTgwYTEwNGE3ZDk3Yjg1MzBhODA5MDk1OTM4YjY0ZTRlNC4uMzAx
MDY2MDYxY2EzZjBlY2VkNDk4OTZjYzJhZmNkNDIxNzMzODgxMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTEwNyw2ICsx
MDcsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+
IG9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFu
Z2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
dXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNv
cjo6RGlyZWN0aW9uKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbklu
ZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0g
MDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAppbmRleCAwNGE0ZmJiYTI1MDMwN2FlYzQ1YmZhNzkz
OTQ1MmE2ZWVjNWRhM2EwLi4xYzUzYjAwNGQ0Y2UwNzZhZjk3YjVmYWYwODA4Y2E3MDkzZjMyY2Nj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtMTMwOCw2ICsxMzA4LDY2IEBAIGJvb2wgQ3Vy
c29ySW1wbENvbW1vbjo6aXNQYXN0Qm91bmRzKCkgY29uc3QKICAgICByZXR1cm4gY29tcGFyZUlu
ZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPCAwOwog
fQogCitjbGFzcyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENv
bW1vbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVLZXlDdXJz
b3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vy
c29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25z
KSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBjbG9uZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0
b3JlS2V5Q3Vyc29ySW1wbCh0aGlzKSk7CisgICAgfQorCisgICAgLy8gQ3Vyc29ySW1wbENvbW1v
bgorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIo
KSBPVkVSUklERQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcjsKKyAgICB9Cisg
ICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKKworcHJpdmF0
ZToKKyAgICBPYmplY3RTdG9yZUtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBD
dXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9
CisKKyAgICBPYmplY3RTdG9yZUtleUN1cnNvckltcGwoY29uc3QgT2JqZWN0U3RvcmVLZXlDdXJz
b3JJbXBsKiBvdGhlcikKKyAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWZQdHI8TGV2ZWxEQlJlY29yZElkZW50aWZpZXI+IG1faWRlbnRpZmll
cjsKK307CisKK2Jvb2wgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygp
Cit7CisgICAgY29uc3QgY2hhciogcCA9IG1faXRlcmF0b3ItPmtleSgpLmJlZ2luKCk7CisgICAg
Y29uc3QgY2hhcioga2V5TGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5lbmQoKTsKKworICAgIE9i
amVjdFN0b3JlRGF0YUtleSBvYmplY3RTdG9yZURhdGFLZXk7CisgICAgcCA9IE9iamVjdFN0b3Jl
RGF0YUtleTo6ZGVjb2RlKHAsIGtleUxpbWl0LCAmb2JqZWN0U3RvcmVEYXRhS2V5KTsKKyAgICBB
U1NFUlQocCk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2N1
cnJlbnRLZXkgPSBvYmplY3RTdG9yZURhdGFLZXkudXNlcktleSgpOworCisgICAgaW50NjRfdCB2
ZXJzaW9uOworICAgIGNvbnN0IGNoYXIqIHEgPSBkZWNvZGVWYXJJbnQobV9pdGVyYXRvci0+dmFs
dWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKKyAgICBB
U1NFUlQocSk7CisgICAgaWYgKCFxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBG
SVhNRTogVGhpcyByZS1lbmNvZGVzIHdoYXQgd2FzIGp1c3QgZGVjb2RlZDsgdHJ5IGFuZCBvcHRp
bWl6ZS4KKyAgICBtX2lkZW50aWZpZXIgPSBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRl
KGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVyc2lvbik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogY2xhc3MgT2JqZWN0U3RvcmVDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvckltcGxD
b21tb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29y
SW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNv
ck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCkBAIC0xNTMyLDE0ICsxNTkyLDggQEAgYm9vbCBJbmRl
eEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotfQot
Ci1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24gZGlyZWN0aW9uKQorYm9vbCBvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGly
ZWN0aW9uLCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQogewotICAgIElEQl9UUkFDRSgi
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yIik7Ci0gICAgQVNT
RVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlv
bnM7Ci0KICAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKICAg
ICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKICAgICBjdXJzb3JP
cHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNB
VEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7CkBAIC0xNTYwLDggKzE2MTQsOCBA
QCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzbwogICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdo
T3BlbiA9IHRydWU7IC8vIE5vdCBpbmNsdWRlZC4KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAvLyBXZSBuZWVkIGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAgICAgICAgaWYgKCFmaW5kR3Jl
YXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNv
ck9wdGlvbnMuaGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVx
dWFsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGln
aEtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY3Vyc29y
T3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTE1
NzEsOCArMTYyNSw4IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvCiAgICAgICAgIGlmICghY3Vy
c29yT3B0aW9ucy5mb3J3YXJkKSB7CiAgICAgICAgICAgICAvLyBGb3IgcmV2ZXJzZSBjdXJzb3Jz
LCB3ZSBuZWVkIGEga2V5IHRoYXQgZXhpc3RzLgogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGZv
dW5kSGlnaEtleTsKLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVx
dWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGZv
dW5kSGlnaEtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAo
IWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9u
cy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBpbmNsdWRl
ZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNsdWRlIHRo
YXQuCiAgICAgICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJlSW5k
ZXhLZXlzKGZvdW5kSGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8IDApCkBAIC0xNTgy
LDE4ICsxNjM2LDEyIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmplY3RTdG9y
ZUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0
aW9ucyk7Ci0gICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOworICAgIHJldHVybiB0cnVlOwogfQogCi1Q
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJz
b3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitib29sIGluZGV4Q3Vyc29yT3B0aW9ucyhMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElE
QkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9u
cykKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtl
eUN1cnNvciIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgQ3Vyc29y
T3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7CiAgICAgYm9v
bCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBlckJv
dW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7CiAgICAgY3Vyc29yT3B0aW9ucy5mb3J3YXJk
ID0gKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlv
biA9PSBJREJDdXJzb3I6Ok5FWFQpOwpAQCAtMTYxMiw4ICsxNjYwLDggQEAgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4
S2V5Q3Vyc29yKGkKICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOyAvLyBJ
bmNsdWRlZC4KIAogICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgeyAvLyBXZSBu
ZWVkIGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlM
ZXNzVGhhbk9yRXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMu
aGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKHRyYW5z
YWN0aW9uLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5o
aWdoT3BlbiA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTE2MjEsOCArMTY2
OSw4IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihpCiAgICAgICAgIGN1cnNvck9wdGlvbnMuaGln
aE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7CiAKICAgICAgICAgVmVjdG9yPGNoYXI+IGZvdW5k
SGlnaEtleTsKLSAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdo
S2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUg
a2V5cy4KLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtl
eUxlc3NUaGFuT3JFcXVhbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3Vu
ZEhpZ2hLZXkpKSAvLyBTZWVrIHRvIHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVu
aXF1ZSBrZXlzLgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIElmIHRo
ZSB0YXJnZXQga2V5IHNob3VsZCBub3QgYmUgaW5jbHVkZWQsIGJ1dCB3ZSBlbmQgdXAgd2l0aCBh
IHNtYWxsZXIga2V5LCB3ZSBzaG91bGQgaW5jbHVkZSB0aGF0LgogICAgICAgICBpZiAoY3Vyc29y
T3B0aW9ucy5oaWdoT3BlbiAmJiBjb21wYXJlSW5kZXhLZXlzKGZvdW5kSGlnaEtleSwgY3Vyc29y
T3B0aW9ucy5oaWdoS2V5KSA8IDApCkBAIC0xNjMxLDU1ICsxNjc5LDYwIEBAIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRl
eEtleUN1cnNvcihpCiAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IGZvdW5kSGlnaEtl
eTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRl
eEtleUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29y
T3B0aW9ucyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAg
ICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNv
ciIpOworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgQ3Vyc29yT3B0aW9u
cyBjdXJzb3JPcHRpb25zOworICAgIGlmICghb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwg
ZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUmVmUHRy
PE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpj
cmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOwogICAgIGlm
ICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4g
Y3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9i
amVjdFN0b3JlS2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbikKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRl
eEN1cnNvciIpOworICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9i
amVjdFN0b3JlS2V5Q3Vyc29yIik7CiAgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsK
ICAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7Ci0gICAgYm9vbCBsb3dlckJvdW5kID0g
cmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7Ci0gICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYg
cmFuZ2UtPnVwcGVyKCk7Ci0gICAgY3Vyc29yT3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9
PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6
Ok5FWFQpOwotICAgIGN1cnNvck9wdGlvbnMudW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJREJDdXJz
b3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9f
RFVQTElDQVRFKTsKLQotICAgIGlmICghbG93ZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRp
b25zLmxvd0tleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWluS2V5KGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSBmYWxz
ZTsgLy8gSW5jbHVkZWQuCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dL
ZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkLCAqcmFuZ2UtPmxvd2VyKCkpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSBy
YW5nZS0+bG93ZXJPcGVuKCk7Ci0gICAgfQotCi0gICAgaWYgKCF1cHBlckJvdW5kKSB7Ci0gICAg
ICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwotICAgICAgICBjdXJzb3JPcHRpb25z
LmhpZ2hPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgotCi0gICAgICAgIGlmICghY3Vyc29yT3B0
aW9ucy5mb3J3YXJkKSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCi0gICAgICAgICAg
ICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlv
bi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdo
T3BlbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY3Vyc29yT3B0
aW9ucy5oaWdoS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwgKnJhbmdlLT51cHBlcigpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5o
aWdoT3BlbiA9IHJhbmdlLT51cHBlck9wZW4oKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29y
T3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAgICAgIHJldHVybiAw
OworICAgIFJlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0
b3JlS2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJz
b3JPcHRpb25zKTsKKyAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCisgICAgICAgIHJldHVy
biAwOwogCi0gICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgIGlmICgh
ZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGZvdW5kSGlnaEtleSkpIC8vIFNlZWsgdG8gdGhlICps
YXN0KiBrZXkgaW4gdGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCi0gICAgICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKK30KIAotICAgICAgICAvLyBJZiB0
aGUgdGFyZ2V0IGtleSBzaG91bGQgbm90IGJlIGluY2x1ZGVkLCBidXQgd2UgZW5kIHVwIHdpdGgg
YSBzbWFsbGVyIGtleSwgd2Ugc2hvdWxkIGluY2x1ZGUgdGhhdC4KLSAgICAgICAgaWYgKGN1cnNv
ck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhmb3VuZEhpZ2hLZXksIGN1cnNv
ck9wdGlvbnMuaGlnaEtleSkgPCAwKQotICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3Bl
biA9IGZhbHNlOworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiBy
YW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIElEQl9UUkFDRSgi
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yIik7CisgICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7
CisgICAgaWYgKCFpbmRleEN1cnNvck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCks
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1
cnNvck9wdGlvbnMpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8SW5kZXhLZXlDdXJz
b3JJbXBsPiBjdXJzb3IgPSBJbmRleEtleUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CisgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2Vl
aygpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkg
PSBmb3VuZEhpZ2hLZXk7Ci0gICAgfQorICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOworfQog
CitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJz
b3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IiKTsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNh
Y3Rpb24pOworICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBpZiAoIWluZGV4
Q3Vyc29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisg
ICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxJbmRleEN1cnNvckltcGw+IGN1cnNvciA9IElu
ZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JP
cHRpb25zKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAgICAgIHJldHVybiAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGMzNzU5Y2Y3ZTBkMzUyYzIxNWU2NzcyOWZlYWVjMWI0
OTkxZWQyNjMuLjczMzkyMjY5MDEzMTUyNTBmMzVhODhmYTI1MjViZGUyZmM3OGIzMTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5n
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmgKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsK
ICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4
S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KTsKIAorICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6
OkRpcmVjdGlvbik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0
b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Bl
bkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiNmQwZWEwYTUwZGUyMGRkZWFjNTE1
ZjY0ZjZkODU5M2E2NzI0M2ZhLi5lZDBjZmY4YTRmNGZlM2NjZGZmOGM3YWEwYjlmYzBhNGJlNzdk
NDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNTU1LDcgKzU1NSw3IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0CiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CiAgICAgdWludDMyX3QgY291bnQgPSAwOwotICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3Rv
cmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBJREJDdXJz
b3I6Ok5FWFQpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0
b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVL
ZXlDdXJzb3Iob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJh
bmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29y
KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
bnVtYmVyVmFsdWUoY291bnQpKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCA4ODYyYjU4ZDRm
MTY3MjBjY2FiMWNiZTk1ZDBmN2NjN2IxYTNmNzk2Li5lMGE1YThmYTVlOGRkNjNmM2FjYzgwNGJj
YTBlMzM5YjRkMTk1OWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0lEQkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0lEQkZha2VCYWNraW5nU3RvcmUuaApAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8SURCS2V5PigpOyB9CiAgICAgdmly
dHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVm
UHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0K
IAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNv
cihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0
cjxDdXJzb3I+KCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0
U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJu
IFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4g
b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJh
bmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8
Q3Vyc29yPigpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163397</attachid>
            <date>2012-09-11 10:24:47 -0700</date>
            <delta_ts>2012-09-11 11:08:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96033-20120911102422.patch</filename>
            <type>text/plain</type>
            <size>20558</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNhZTY2ZjExM2ExZjk5
NWQxY2NiMDY4YzY2YjViOTQwMTY5NjI4OC4uMzQxYTEwODExMjVlMWE3ZmUyNzZmZTViMDQxOTBm
M2ZlOTMyZTY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA5LTA2ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBJREJP
YmplY3RTdG9yZS5jb3VudCgpIGlzIHNsb3cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk2MDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQXZvaWQgZGVjb2RpbmcgcmVjb3JkIHZhbHVlcyB3aGVuIHBlcmZv
cm1pbmcgY291bnQoKSBpdGVyYXRpb24sIGFuZCBmYWN0b3Igb3V0IGNvbW1vbiBjb2RlCisgICAg
ICAgIHVzZWQgZm9yIGluaXRpYWxpemluZyBvYmplY3Qgc3RvcmUgYW5kIGluZGV4IGN1cnNvcnMu
IEFsc28sIHJlbW92ZSB1bnVzZWQgaW5kZXhEYXRhSWQoKQorICAgICAgICBtZXRob2RzICh3aGlj
aCBkYXRlIGJhY2sgdG8gdGhlIFNRTGl0ZSBiYWNraW5nIHN0b3JlKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgLSBubyBmdW5jdGlvbmFsIGNoYW5nZXMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dDoKKyAgICAgICAgICAgIExheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3Jl
LWNvdW50Lmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9y
ZS5oOiBFeHBvc2UgbmV3IChpbnRlcm5hbCkgT2JqZWN0U3RvcmVLZXlDdXJzb3IKKyAgICAgICAg
KElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlKTogRmFjdG9yIG91dCBjb21tb24g
Q3Vyc29yT3B0aW9ucyBpbml0aWFsaXphdGlvbiBjb2RlLiBUaGUgb2JqZWN0U3RvcmVDdXJzb3JP
cHRpb25zKCkKKyAgICAgICAgZnVuY3Rpb24gaXMgbmVlZGVkIGZvciB0aGlzIHBhdGNoLiBUaGUg
aW5kZXhDdXJzb3JPcHRpb25zKCkgZnVuY3Rpb24gaXMgbm90LCBidXQgZWxpbWluYXRlcworICAg
ICAgICBkdXBsaWNhdGVkIGNvZGUgYW5kIGlzIGEgbmVhcmx5IGlkZW50aWNhbCByZWZhY3Rvci4K
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9y
ZUN1cnNvcik6IFJlZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKTogSW1wbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKTogUmVmYWN0
b3IuCisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhD
dXJzb3IpOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwpOiBV
c2UgT2JqZWN0U3RvcmVLZXlDdXJzb3IgZm9yIGl0ZXJhdGlvbi4KKwogMjAxMi0wOS0wOSAgUGF0
cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgU3RyaW5n
QnVpbGRlcjo6YXBwZW5kTnVtYmVyKCkgYW5kIHVzZSBpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAppbmRleCA5MGM4NWMxODBhMTA0
YTdkOTdiODUzMGE4MDkwOTU5MzhiNjRlNGU0Li5mMDYwZTcyZWY0YzZmZDQ3MjU0ZWM3ZjE1NTg4
MDkwMzk1YTY1OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaApAQCAtMTAxLDEyICsxMDEsMTIgQEAgcHVibGljOgogICAgICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgPSAwOwogICAgICAgICB2
aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkg
PSAwOwotICAgICAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSA9IDA7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsKICAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9
OwogICAgIH07CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3Rv
cmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24pID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5k
ZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikg
PSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAKaW5kZXggMTViZTg5NjEwY2FmY2YxMjJjZTMwMWYwODkxOWNhZjczZjEyZWQ2
My4uZjNjNmEwZTYzMzcxMWQyZDgwNTEyYTNiYzUxYTljYTgwYTEyNDNhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAKQEAgLTExNDIsNyArMTE0Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9CiAg
ICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIoKSA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGxv
YWRDdXJyZW50Um93KCkgPSAwOwpAQCAtMTMyMCw2ICsxMzE5LDY1IEBAIGJvb2wgQ3Vyc29ySW1w
bENvbW1vbjo6aXNQYXN0Qm91bmRzKCkgY29uc3QKICAgICByZXR1cm4gY29tcGFyZUluZGV4S2V5
cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPCAwOwogfQogCitj
bGFzcyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBs
PiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0
aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7Cisg
ICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBj
bG9uZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlS2V5
Q3Vyc29ySW1wbCh0aGlzKSk7CisgICAgfQorCisgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgorICAg
IHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFN0
cmluZygpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSBPVkVS
UklERQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcjsKKyAgICB9CisgICAgdmly
dHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CisKK3ByaXZhdGU6CisgICAgT2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNv
ck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFu
c2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKKyAgICB7CisgICAgfQorCisgICAgT2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsKGNvbnN0IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbCogb3RoZXIpCisgICAg
ICAgIDogQ3Vyc29ySW1wbENvbW1vbihvdGhlcikKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRy
PExldmVsREJSZWNvcmRJZGVudGlmaWVyPiBtX2lkZW50aWZpZXI7Cit9OworCitib29sIE9iamVj
dFN0b3JlS2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQoreworICAgIGNvbnN0IGNoYXIq
IHAgPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOworICAgIGNvbnN0IGNoYXIqIGtleUxpbWl0
ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7CisKKyAgICBPYmplY3RTdG9yZURhdGFLZXkgb2Jq
ZWN0U3RvcmVEYXRhS2V5OworICAgIHAgPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShwLCBr
ZXlMaW1pdCwgJm9iamVjdFN0b3JlRGF0YUtleSk7CisgICAgQVNTRVJUKHApOworICAgIGlmICgh
cCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9jdXJyZW50S2V5ID0gb2JqZWN0U3Rv
cmVEYXRhS2V5LnVzZXJLZXkoKTsKKworICAgIGludDY0X3QgdmVyc2lvbjsKKyAgICBjb25zdCBj
aGFyKiBxID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVy
YXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7CisgICAgQVNTRVJUKHEpOworICAgIGlmICgh
cSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2Rl
cyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCisgICAgbV9pZGVudGlm
aWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1fY3Vy
cmVudEtleSksIHZlcnNpb24pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGNsYXNzIE9iamVj
dFN0b3JlQ3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRp
b25zKQpAQCAtMTMzOCw3ICsxMzk2LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IG1faWRlbnRpZmllcjsKICAgICB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgbG9h
ZEN1cnJlbnRSb3coKTsKIAogcHJpdmF0ZToKQEAgLTE0MDAsNyArMTQ1Nyw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXko
KSB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmly
dHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKIAogcHJpdmF0ZToKQEAg
LTE0NzYsNyArMTUzMiw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsg
cmV0dXJuIG1fdmFsdWU7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5KCkgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiAwOyB9CiAgICAgYm9vbCBsb2FkQ3VycmVudFJvdygpOwogCiBwcml2YXRlOgpAQCAtMTU0
NCwxNCArMTU5OSw4IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSog
cmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKK2Jvb2wgb2JqZWN0U3RvcmVD
dXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2Us
IElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0
aW9ucykKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmpl
Y3RTdG9yZUN1cnNvciIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAg
Q3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwotCiAgICAgYm9vbCBsb3dlckJvdW5kID0gcmFu
Z2UgJiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFu
Z2UtPnVwcGVyKCk7CiAgICAgY3Vyc29yT3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJ
REJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5F
WFQpOwpAQCAtMTU3Miw4ICsxNjIxLDggQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc28KICAgICAg
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSB0cnVlOyAvLyBOb3QgaW5jbHVkZWQuCiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4K
LSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMu
aGlnaEtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAoIWZp
bmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucy5o
aWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CkBAIC0xNTgzLDggKzE2MzIsOCBAQCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3Rv
cmVDdXJzbwogICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgewogICAgICAgICAg
ICAgLy8gRm9yIHJldmVyc2UgY3Vyc29ycywgd2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KICAg
ICAgICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgICAgICBpZiAoIWZp
bmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
Y3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKQotICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwo
dHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQg
a2V5IHNob3VsZCBub3QgYmUgaW5jbHVkZWQsIGJ1dCB3ZSBlbmQgdXAgd2l0aCBhIHNtYWxsZXIg
a2V5LCB3ZSBzaG91bGQgaW5jbHVkZSB0aGF0LgogICAgICAgICAgICAgaWYgKGN1cnNvck9wdGlv
bnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhmb3VuZEhpZ2hLZXksIGN1cnNvck9wdGlv
bnMuaGlnaEtleSkgPCAwKQpAQCAtMTU5NCwxOCArMTY0MywxMiBAQCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3Rv
cmVDdXJzbwogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29y
SW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOwotICAgIGlmICghY3Vyc29yLT5maXJzdFNl
ZWsoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorYm9vbCBp
bmRleEN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1
cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50
VHJhbnNhY3Rpb24pOwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBBU1NF
UlQodHJhbnNhY3Rpb24pOwogICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5s
b3dlcigpOwogICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwog
ICAgIGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhU
X05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKQEAgLTE2MjQs
OCArMTY2Nyw4IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihpCiAgICAgICAgIGN1cnNvck9wdGlv
bnMuaGlnaE9wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCiAKICAgICAgICAgaWYgKCFjdXJzb3JP
cHRpb25zLmZvcndhcmQpIHsgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAgICAgICAg
ICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVz
dEtleUxlc3NUaGFuT3JFcXVhbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBj
dXJzb3JPcHRpb25zLmhpZ2hLZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CkBAIC0xNjMzLDggKzE2NzYsOCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaQog
ICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwogCiAg
ICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgIGlmICghZmluZEdyZWF0
ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JP
cHRpb25zLmhpZ2hLZXksIGZvdW5kSGlnaEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBrZXkg
aW4gdGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwodHJhbnNhY3Rpb24sIGN1
cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3Qq
IGtleSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUga2V5cy4KKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGtleSBzaG91bGQgbm90IGJlIGluY2x1
ZGVkLCBidXQgd2UgZW5kIHVwIHdpdGggYSBzbWFsbGVyIGtleSwgd2Ugc2hvdWxkIGluY2x1ZGUg
dGhhdC4KICAgICAgICAgaWYgKGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4
S2V5cyhmb3VuZEhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkgPCAwKQpAQCAtMTY0Myw1
NSArMTY4Niw2MCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaQogICAgICAgICBjdXJzb3JPcHRp
b25zLmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CiAgICAgfQogCi0gICAgUmVmUHRyPEluZGV4S2V5
Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIHJldHVybiB0cnVlOworfQor
Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRp
cmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IiKTsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNh
Y3Rpb24pOworICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBpZiAoIW9iamVj
dFN0b3JlQ3Vyc29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9
IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBjdXJzb3JPcHRpb25zKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5J
bmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0
aW9uIGRpcmVjdGlvbikKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IiKTsKKyAgICBJREJfVFJBQ0UoIklEQkxl
dmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvciIpOwogICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25z
OwotICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwotICAgIGJv
b2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwotICAgIGN1cnNvck9wdGlv
bnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8
fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKLSAgICBjdXJzb3JPcHRpb25zLnVuaXF1
ZSA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rp
b24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSk7Ci0KLSAgICBpZiAoIWxvd2VyQm91
bmQpIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFLZXk6OmVuY29k
ZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLSAgICAgICAgY3Vy
c29yT3B0aW9ucy5sb3dPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT5sb3dlcigpKTsKLSAgICAgICAg
Y3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gcmFuZ2UtPmxvd2VyT3BlbigpOwotICAgIH0KLQotICAg
IGlmICghdXBwZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRl
eERhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
KTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4K
LQotICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5
IHRoYXQgZXhpc3RzLgotICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9y
RXF1YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwg
Y3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+dXBwZXIoKSk7
Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7Cisg
ICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9w
dGlvbnMpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8T2JqZWN0U3RvcmVLZXlDdXJz
b3JJbXBsPiBjdXJzb3IgPSBPYmplY3RTdG9yZUtleUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CisgICAgaWYgKCFjdXJzb3ItPmZp
cnN0U2VlaygpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBWZWN0b3I8Y2hhcj4gZm91
bmRIaWdoS2V5OwotICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbCht
X2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhp
Z2hLZXkpKSAvLyBTZWVrIHRvIHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1
ZSBrZXlzLgotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNl
KCk7Cit9CiAKLSAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBpbmNs
dWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNsdWRl
IHRoYXQuCi0gICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRl
eEtleXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMCkKLSAgICAgICAg
ICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKK1Bhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNv
cihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRl
eEtleUN1cnNvciIpOworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgQ3Vy
c29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKG1f
Y3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJ
bXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOwor
ICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAg
ICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gZm91bmRIaWdoS2V5OwotICAgIH0KKyAgICByZXR1
cm4gY3Vyc29yLnJlbGVhc2UoKTsKK30KIAorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAg
IElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yIik7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBDdXJzb3JPcHRpb25zIGN1cnNv
ck9wdGlvbnM7CisgICAgaWYgKCFpbmRleEN1cnNvck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJl
Y3Rpb24sIGN1cnNvck9wdGlvbnMpKQorICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8SW5k
ZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0
U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAppbmRleCBjMzc1OWNm
N2UwZDM1MmMyMTVlNjc3MjlmZWFlYzFiNDk5MWVkMjYzLi43MzM5MjI2OTAxMzE1MjUwZjM1YTg4
ZmEyNTI1YmRlMmZjNzhiMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC03Myw2ICs3Myw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5Vmlh
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFy
eUtleSk7CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVL
ZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVj
dGlvbik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29y
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5n
ZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5k
ZXggMTQ4OThhMThmOTIxZTgwYmFjOWFmMTFjODUwNmNiZGMxNGE3MWI3MS4uMmZhNWMwODRjN2Q1
NjUzNDg2MWRjMWY4NTc1N2UyNzE4MTQ1NzdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKQEAgLTU0MSw3ICs1NDEsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNv
dW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdAogewogICAgIElE
Ql9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCIpOwogICAg
IHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9i
amVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5p
ZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5n
U3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlk
KCksIG9iamVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKICAg
ICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7CiAgICAgICAgIHJl
dHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJh
Y2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2lu
Z1N0b3JlLmgKaW5kZXggODg2MmI1OGQ0ZjE2NzIwY2NhYjFjYmU5NWQwZjdjYzdiMWEzZjc5Ni4u
ZTBhNWE4ZmE1ZThkZDYzZjNhY2M4MDRiY2EwZTMzOWI0ZDE5NTlhOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTYzLDYg
KzYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1h
cnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVm
UHRyPElEQktleT4oKTsgfQogICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0
X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpIE9W
RVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9W
RVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGly
ZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPEN1cnNvcj4oKTsgfQogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVm
UHRyPEN1cnNvcj4oKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRl
eEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSBPVkVS
UklERSB7IHJldHVybiBQYXNzUmVmUHRyPEN1cnNvcj4oKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163404</attachid>
            <date>2012-09-11 11:08:38 -0700</date>
            <delta_ts>2012-09-11 12:16:58 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-96033-20120911110813.patch</filename>
            <type>text/plain</type>
            <size>24488</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNhZTY2ZjExM2ExZjk5
NWQxY2NiMDY4YzY2YjViOTQwMTY5NjI4OC4uMzc2NzcyOWMzMjIwMTYxZjZlMTAxYmEyZTFkMmJl
OGQyYzBlNGRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA5LTA2ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBJREJP
YmplY3RTdG9yZS5jb3VudCgpIGlzIHNsb3cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk2MDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFu
Zy4KKworICAgICAgICBBdm9pZCBkZWNvZGluZyByZWNvcmQgdmFsdWVzIHdoZW4gcGVyZm9ybWlu
ZyBjb3VudCgpIGl0ZXJhdGlvbiwgYW5kIGZhY3RvciBvdXQgY29tbW9uIGNvZGUKKyAgICAgICAg
dXNlZCBmb3IgaW5pdGlhbGl6aW5nIG9iamVjdCBzdG9yZSBhbmQgaW5kZXggY3Vyc29ycy4gQWxz
bywgcmVtb3ZlIHVudXNlZCBpbmRleERhdGFJZCgpCisgICAgICAgIG1ldGhvZHMgKHdoaWNoIGRh
dGUgYmFjayB0byB0aGUgU1FMaXRlIGJhY2tpbmcgc3RvcmUpLCBhbmQgcmVuYW1lIHNvbWUgcCdz
IGFuZCBxJ3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gbm8gZnVuY3Rpb25hbCBjaGFuZ2Vz
LiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Q6CisgICAgICAgICAgICBMYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jb3VudC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDogRXhwb3NlIG5ldyAoaW50ZXJuYWwpIE9iamVj
dFN0b3JlS2V5Q3Vyc29yCisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6IEZhY3RvciBvdXQgY29tbW9uIEN1cnNvck9wdGlvbnMgaW5pdGlhbGl6YXRpb24gY29k
ZS4gVGhlIG9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucygpCisgICAgICAgIGZ1bmN0aW9uIGlzIG5l
ZWRlZCBmb3IgdGhpcyBwYXRjaC4gVGhlIGluZGV4Q3Vyc29yT3B0aW9ucygpIGZ1bmN0aW9uIGlz
IG5vdCwgYnV0IGVsaW1pbmF0ZXMKKyAgICAgICAgZHVwbGljYXRlZCBjb2RlIGFuZCBpcyBhIG5l
YXJseSBpZGVudGljYWwgcmVmYWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IpOiBSZWZhY3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcik6
IEltcGxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9w
ZW5JbmRleEtleUN1cnNvcik6IFJlZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKTogRGl0dG8uCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjb3VudEludGVybmFsKTogVXNlIE9iamVjdFN0b3JlS2V5Q3Vyc29yIGZvciBpdGVy
YXRpb24uCisKIDIwMTItMDktMDkgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWRkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZE51bWJlcigpIGFuZCB1c2Ug
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0
b3JlLmgKaW5kZXggOTBjODVjMTgwYTEwNGE3ZDk3Yjg1MzBhODA5MDk1OTM4YjY0ZTRlNC4uZjA2
MGU3MmVmNGM2ZmQ0NzI1NGVjN2YxNTU4ODA5MDM5NWE2NTlkZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTEwMSwxMiAr
MTAxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSgpID0gMDsKICAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7CiAgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsKLSAgICAgICAgdmlydHVhbCBpbnQ2NF90IGlu
ZGV4RGF0YUlkKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CiAgICAg
ICAgIHZpcnR1YWwgfkN1cnNvcigpIHsgfTsKICAgICB9OwogCiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0
aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3Jl
S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdl
KiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vy
c29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRp
cmVjdGlvbikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDE1YmU4OTYxMGNhZmNm
MTIyY2UzMDFmMDg5MTljYWY3M2YxMmVkNjMuLjQ5ZjBlYzNlZTdkYmM0ZmFiZjczZGU4NjBlOWJk
MjExMWEyYmY4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0xMTQyLDcgKzExNDIsNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsg
cmV0dXJuIG1fY3VycmVudEtleTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgPSAwOwog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgPSAwOwotICAgIHZpcnR1
YWwgaW50NjRfdCBpbmRleERhdGFJZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpID0gMDsKQEAgLTEzMjAsNiAr
MTMxOSw2NSBAQCBib29sIEN1cnNvckltcGxDb21tb246OmlzUGFzdEJvdW5kcygpIGNvbnN0CiAg
ICAgcmV0dXJuIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0
aW9ucy5sb3dLZXkpIDwgMDsKIH0KIAorY2xhc3MgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsIDog
cHVibGljIEN1cnNvckltcGxDb21tb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbCh0cmFuc2Fj
dGlvbiwgY3Vyc29yT3B0aW9ucykpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY2xvbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwodGhpcykpOworICAgIH0KKworICAg
IC8vIEN1cnNvckltcGxDb21tb24KKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lk
ZW50aWZpZXI7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOworCitw
cml2YXRlOgorICAgIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAg
ICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAgewor
ICAgIH0KKworICAgIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbChjb25zdCBPYmplY3RTdG9yZUtl
eUN1cnNvckltcGwqIG90aGVyKQorICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gbV9pZGVu
dGlmaWVyOworfTsKKworYm9vbCBPYmplY3RTdG9yZUtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KCkKK3sKKyAgICBjb25zdCBjaGFyKiBrZXlQb3NpdGlvbiA9IG1faXRlcmF0b3ItPmtleSgp
LmJlZ2luKCk7CisgICAgY29uc3QgY2hhcioga2V5TGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5l
bmQoKTsKKworICAgIE9iamVjdFN0b3JlRGF0YUtleSBvYmplY3RTdG9yZURhdGFLZXk7CisgICAg
a2V5UG9zaXRpb24gPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShrZXlQb3NpdGlvbiwga2V5
TGltaXQsICZvYmplY3RTdG9yZURhdGFLZXkpOworICAgIEFTU0VSVChrZXlQb3NpdGlvbik7Cisg
ICAgaWYgKCFrZXlQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9jdXJy
ZW50S2V5ID0gb2JqZWN0U3RvcmVEYXRhS2V5LnVzZXJLZXkoKTsKKworICAgIGludDY0X3QgdmVy
c2lvbjsKKyAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KG1faXRl
cmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lv
bik7CisgICAgQVNTRVJUKHZhbHVlUG9zaXRpb24pOworICAgIGlmICghdmFsdWVQb3NpdGlvbikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3
aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCisgICAgbV9pZGVudGlmaWVy
ID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1fY3VycmVu
dEtleSksIHZlcnNpb24pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGNsYXNzIE9iamVjdFN0
b3JlQ3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25z
KQpAQCAtMTMzOCw3ICsxMzk2LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
aWRlbnRpZmllcjsKICAgICB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1
cnJlbnRSb3coKTsKIAogcHJpdmF0ZToKQEAgLTEzNTksMjcgKzE0MTYsMjcgQEAgcHJpdmF0ZToK
IAogYm9vbCBPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKIHsKLSAgICBj
b25zdCBjaGFyKiBwID0gbV9pdGVyYXRvci0+a2V5KCkuYmVnaW4oKTsKKyAgICBjb25zdCBjaGFy
KiBrZXlQb3NpdGlvbiA9IG1faXRlcmF0b3ItPmtleSgpLmJlZ2luKCk7CiAgICAgY29uc3QgY2hh
cioga2V5TGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5lbmQoKTsKIAogICAgIE9iamVjdFN0b3Jl
RGF0YUtleSBvYmplY3RTdG9yZURhdGFLZXk7Ci0gICAgcCA9IE9iamVjdFN0b3JlRGF0YUtleTo6
ZGVjb2RlKHAsIGtleUxpbWl0LCAmb2JqZWN0U3RvcmVEYXRhS2V5KTsKLSAgICBBU1NFUlQocCk7
Ci0gICAgaWYgKCFwKQorICAgIGtleVBvc2l0aW9uID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNv
ZGUoa2V5UG9zaXRpb24sIGtleUxpbWl0LCAmb2JqZWN0U3RvcmVEYXRhS2V5KTsKKyAgICBBU1NF
UlQoa2V5UG9zaXRpb24pOworICAgIGlmICgha2V5UG9zaXRpb24pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIG1fY3VycmVudEtleSA9IG9iamVjdFN0b3JlRGF0YUtleS51c2VyS2V5KCk7
CiAKICAgICBpbnQ2NF90IHZlcnNpb247Ci0gICAgY29uc3QgY2hhciogcSA9IGRlY29kZVZhcklu
dChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCksIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCks
IHZlcnNpb24pOwotICAgIEFTU0VSVChxKTsKLSAgICBpZiAoIXEpCisgICAgY29uc3QgY2hhciog
dmFsdWVQb3NpdGlvbiA9IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCks
IG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOworICAgIEFTU0VSVCh2YWx1ZVBv
c2l0aW9uKTsKKyAgICBpZiAoIXZhbHVlUG9zaXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIHJlLWVuY29kZXMgd2hhdCB3YXMganVzdCBkZWNvZGVkOyB0
cnkgYW5kIG9wdGltaXplLgogICAgIG1faWRlbnRpZmllciA9IExldmVsREJSZWNvcmRJZGVudGlm
aWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCptX2N1cnJlbnRLZXkpLCB2ZXJzaW9uKTsKIAotICAg
IG1fY3VycmVudFZhbHVlID0gZGVjb2RlU3RyaW5nKHEsIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5k
KCkpOworICAgIG1fY3VycmVudFZhbHVlID0gZGVjb2RlU3RyaW5nKHZhbHVlUG9zaXRpb24sIG1f
aXRlcmF0b3ItPnZhbHVlKCkuZW5kKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNDAw
LDcgKzE0NTcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50
Um93KCk7CiAKIHByaXZhdGU6CkBAIC0xNDIwLDIyICsxNDc2LDIzIEBAIHByaXZhdGU6CiAKIGJv
b2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiB7Ci0gICAgY29uc3QgY2hh
ciogcCA9IG1faXRlcmF0b3ItPmtleSgpLmJlZ2luKCk7CisgICAgY29uc3QgY2hhcioga2V5UG9z
aXRpb24gPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOwogICAgIGNvbnN0IGNoYXIqIGtleUxp
bWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7CisKICAgICBJbmRleERhdGFLZXkgaW5kZXhE
YXRhS2V5OwotICAgIHAgPSBJbmRleERhdGFLZXk6OmRlY29kZShwLCBrZXlMaW1pdCwgJmluZGV4
RGF0YUtleSk7CisgICAga2V5UG9zaXRpb24gPSBJbmRleERhdGFLZXk6OmRlY29kZShrZXlQb3Np
dGlvbiwga2V5TGltaXQsICZpbmRleERhdGFLZXkpOwogCiAgICAgbV9jdXJyZW50S2V5ID0gaW5k
ZXhEYXRhS2V5LnVzZXJLZXkoKTsKIAogICAgIGludDY0X3QgaW5kZXhEYXRhVmVyc2lvbjsKLSAg
ICBjb25zdCBjaGFyKiBxID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4o
KSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgaW5kZXhEYXRhVmVyc2lvbik7Ci0gICAgQVNT
RVJUKHEpOwotICAgIGlmICghcSkKKyAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVj
b2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUo
KS5lbmQoKSwgaW5kZXhEYXRhVmVyc2lvbik7CisgICAgQVNTRVJUKHZhbHVlUG9zaXRpb24pOwor
ICAgIGlmICghdmFsdWVQb3NpdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcSA9
IGRlY29kZUlEQktleShxLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCBtX3ByaW1hcnlLZXkp
OwotICAgIEFTU0VSVChxKTsKLSAgICBpZiAoIXEpCisgICAgdmFsdWVQb3NpdGlvbiA9IGRlY29k
ZUlEQktleSh2YWx1ZVBvc2l0aW9uLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCBtX3ByaW1h
cnlLZXkpOworICAgIEFTU0VSVCh2YWx1ZVBvc2l0aW9uKTsKKyAgICBpZiAoIXZhbHVlUG9zaXRp
b24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFZlY3RvcjxjaGFyPiBwcmltYXJ5TGV2
ZWxEQktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGluZGV4RGF0YUtleS5kYXRhYmFz
ZUlkKCksIGluZGV4RGF0YUtleS5vYmplY3RTdG9yZUlkKCksICptX3ByaW1hcnlLZXkpOwpAQCAt
MTQ3Niw3ICsxNTMzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyBy
ZXR1cm4gbV92YWx1ZTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkoKSB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAg
dmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIDA7IH0KICAgICBib29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6CkBAIC0xNTAw
LDI1ICsxNTU2LDI1IEBAIHByaXZhdGU6CiAKIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3Vy
cmVudFJvdygpCiB7Ci0gICAgY29uc3QgY2hhciogcCA9IG1faXRlcmF0b3ItPmtleSgpLmJlZ2lu
KCk7Ci0gICAgY29uc3QgY2hhciogbGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5lbmQoKTsKKyAg
ICBjb25zdCBjaGFyKiBrZXlQb3NpdGlvbiA9IG1faXRlcmF0b3ItPmtleSgpLmJlZ2luKCk7Cisg
ICAgY29uc3QgY2hhcioga2V5TGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5lbmQoKTsKIAogICAg
IEluZGV4RGF0YUtleSBpbmRleERhdGFLZXk7Ci0gICAgcCA9IEluZGV4RGF0YUtleTo6ZGVjb2Rl
KHAsIGxpbWl0LCAmaW5kZXhEYXRhS2V5KTsKKyAgICBrZXlQb3NpdGlvbiA9IEluZGV4RGF0YUtl
eTo6ZGVjb2RlKGtleVBvc2l0aW9uLCBrZXlMaW1pdCwgJmluZGV4RGF0YUtleSk7CiAKICAgICBt
X2N1cnJlbnRLZXkgPSBpbmRleERhdGFLZXkudXNlcktleSgpOwogCi0gICAgY29uc3QgY2hhciog
cSA9IG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKTsKKyAgICBjb25zdCBjaGFyKiB2YWx1ZVBv
c2l0aW9uID0gbV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpOwogICAgIGNvbnN0IGNoYXIqIHZh
bHVlTGltaXQgPSBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpOwogCiAgICAgaW50NjRfdCBpbmRl
eERhdGFWZXJzaW9uOwotICAgIHEgPSBkZWNvZGVWYXJJbnQocSwgdmFsdWVMaW1pdCwgaW5kZXhE
YXRhVmVyc2lvbik7Ci0gICAgQVNTRVJUKHEpOwotICAgIGlmICghcSkKKyAgICB2YWx1ZVBvc2l0
aW9uID0gZGVjb2RlVmFySW50KHZhbHVlUG9zaXRpb24sIHZhbHVlTGltaXQsIGluZGV4RGF0YVZl
cnNpb24pOworICAgIEFTU0VSVCh2YWx1ZVBvc2l0aW9uKTsKKyAgICBpZiAoIXZhbHVlUG9zaXRp
b24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBxID0gZGVjb2RlSURCS2V5KHEsIHZhbHVl
TGltaXQsIG1fcHJpbWFyeUtleSk7Ci0gICAgQVNTRVJUKHEpOwotICAgIGlmICghcSkKKyAgICB2
YWx1ZVBvc2l0aW9uID0gZGVjb2RlSURCS2V5KHZhbHVlUG9zaXRpb24sIHZhbHVlTGltaXQsIG1f
cHJpbWFyeUtleSk7CisgICAgQVNTRVJUKHZhbHVlUG9zaXRpb24pOworICAgIGlmICghdmFsdWVQ
b3NpdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9wcmltYXJ5TGV2ZWxEQktl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGluZGV4RGF0YUtleS5kYXRhYmFzZUlkKCks
IGluZGV4RGF0YUtleS5vYmplY3RTdG9yZUlkKCksICptX3ByaW1hcnlLZXkpOwpAQCAtMTU0NCwx
NCArMTYwMCw4IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFu
Z2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKK2Jvb2wgb2JqZWN0U3RvcmVDdXJz
b3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElE
QkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9u
cykKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RT
dG9yZUN1cnNvciIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgQ3Vy
c29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwotCiAgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2Ug
JiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2Ut
PnVwcGVyKCk7CiAgICAgY3Vyc29yT3B0aW9ucy5mb3J3YXJkID0gKGRpcmVjdGlvbiA9PSBJREJD
dXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQp
OwpAQCAtMTU3Miw4ICsxNjIyLDggQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc28KICAgICAgICAg
ICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSB0cnVlOyAvLyBOb3QgaW5jbHVkZWQuCiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAg
ICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGln
aEtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAoIWZpbmRH
cmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucy5oaWdo
S2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CkBAIC0xNTgzLDggKzE2MzMsOCBAQCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVD
dXJzbwogICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgewogICAgICAgICAgICAg
Ly8gRm9yIHJldmVyc2UgY3Vyc29ycywgd2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KICAgICAg
ICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgICAgICBpZiAoIWZpbmRH
cmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vy
c29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKQotICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwodHJh
bnNhY3Rpb24sIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQga2V5
IHNob3VsZCBub3QgYmUgaW5jbHVkZWQsIGJ1dCB3ZSBlbmQgdXAgd2l0aCBhIHNtYWxsZXIga2V5
LCB3ZSBzaG91bGQgaW5jbHVkZSB0aGF0LgogICAgICAgICAgICAgaWYgKGN1cnNvck9wdGlvbnMu
aGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhmb3VuZEhpZ2hLZXksIGN1cnNvck9wdGlvbnMu
aGlnaEtleSkgPCAwKQpAQCAtMTU5NCwxOCArMTY0NCwxMiBAQCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVD
dXJzbwogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1w
bD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNh
Y3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOwotICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWso
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorYm9vbCBpbmRl
eEN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNv
ck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJh
bnNhY3Rpb24pOwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBBU1NFUlQo
dHJhbnNhY3Rpb24pOwogICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dl
cigpOwogICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwogICAg
IGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05P
X0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKQEAgLTE2MjQsOCAr
MTY2OCw4IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJC
YWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihpCiAgICAgICAgIGN1cnNvck9wdGlvbnMu
aGlnaE9wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCiAKICAgICAgICAgaWYgKCFjdXJzb3JPcHRp
b25zLmZvcndhcmQpIHsgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAgICAgICAgICAg
IGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtl
eUxlc3NUaGFuT3JFcXVhbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBjdXJz
b3JPcHRpb25zLmhpZ2hLZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7CkBAIC0xNjMzLDggKzE2NzcsOCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaQogICAg
ICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwogCiAgICAg
ICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgIGlmICghZmluZEdyZWF0ZXN0
S2V5TGVzc1RoYW5PckVxdWFsKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRp
b25zLmhpZ2hLZXksIGZvdW5kSGlnaEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBrZXkgaW4g
dGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwodHJhbnNhY3Rpb24sIGN1cnNv
ck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkgLy8gU2VlayB0byB0aGUgKmxhc3QqIGtl
eSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUga2V5cy4KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGtleSBzaG91bGQgbm90IGJlIGluY2x1ZGVk
LCBidXQgd2UgZW5kIHVwIHdpdGggYSBzbWFsbGVyIGtleSwgd2Ugc2hvdWxkIGluY2x1ZGUgdGhh
dC4KICAgICAgICAgaWYgKGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5
cyhmb3VuZEhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkgPCAwKQpAQCAtMTY0Myw1NSAr
MTY4Nyw2MCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaQogICAgICAgICBjdXJzb3JPcHRpb25z
LmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CiAgICAgfQogCi0gICAgUmVmUHRyPEluZGV4S2V5Q3Vy
c29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIHJldHVybiB0cnVlOworfQorCit9
CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVj
dGlvbiBkaXJlY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IiKTsKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rp
b24pOworICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBpZiAoIW9iamVjdFN0
b3JlQ3Vyc29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAgICAg
IHJldHVybiAwOworICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9i
amVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBj
dXJzb3JPcHRpb25zKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRl
eEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbikKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IiKTsKKyAgICBJREJfVFJBQ0UoIklEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvciIpOwogICAgIEFTU0VSVCht
X2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwot
ICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwotICAgIGJvb2wg
dXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwotICAgIGN1cnNvck9wdGlvbnMu
Zm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBk
aXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKLSAgICBjdXJzb3JPcHRpb25zLnVuaXF1ZSA9
IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24g
PT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSk7Ci0KLSAgICBpZiAoIWxvd2VyQm91bmQp
IHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZU1p
bktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLSAgICAgICAgY3Vyc29y
T3B0aW9ucy5sb3dPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT5sb3dlcigpKTsKLSAgICAgICAgY3Vy
c29yT3B0aW9ucy5sb3dPcGVuID0gcmFuZ2UtPmxvd2VyT3BlbigpOwotICAgIH0KLQotICAgIGlm
ICghdXBwZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRleERh
dGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsK
LSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4KLQot
ICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5IHRo
YXQgZXhpc3RzLgotICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1
YWwobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgY3Vy
c29yT3B0aW9ucy5oaWdoS2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+dXBwZXIoKSk7Ci0g
ICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7CisgICAg
aWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCks
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlv
bnMpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8T2JqZWN0U3RvcmVLZXlDdXJzb3JJ
bXBsPiBjdXJzb3IgPSBPYmplY3RTdG9yZUtleUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CisgICAgaWYgKCFjdXJzb3ItPmZpcnN0
U2VlaygpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBWZWN0b3I8Y2hhcj4gZm91bmRI
aWdoS2V5OwotICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hL
ZXkpKSAvLyBTZWVrIHRvIHRoZSAqbGFzdCoga2V5IGluIHRoZSBzZXQgb2Ygbm9uLXVuaXF1ZSBr
ZXlzLgotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7
Cit9CiAKLSAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBpbmNsdWRl
ZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNsdWRlIHRo
YXQuCi0gICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtl
eXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMCkKLSAgICAgICAgICAg
IGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlv
bikKK3sKKyAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtl
eUN1cnNvciIpOworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgQ3Vyc29y
T3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBs
OjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAg
IGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAg
Y3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gZm91bmRIaWdoS2V5OwotICAgIH0KKyAgICByZXR1cm4g
Y3Vyc29yLnJlbGVhc2UoKTsKK30KIAorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIElE
Ql9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yIik7CisgICAg
QVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9w
dGlvbnM7CisgICAgaWYgKCFpbmRleEN1cnNvck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rp
b24sIGN1cnNvck9wdGlvbnMpKQorICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8SW5kZXhD
dXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2Vl
aygpKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAppbmRleCBjMzc1OWNmN2Uw
ZDM1MmMyMTVlNjc3MjlmZWFlYzFiNDk5MWVkMjYzLi43MzM5MjI2OTAxMzE1MjUwZjM1YTg4ZmEy
NTI1YmRlMmZjNzhiMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC03Myw2ICs3Myw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5Jik7CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtl
eSk7CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlD
dXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlv
bik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSos
IElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXgg
MTQ4OThhMThmOTIxZTgwYmFjOWFmMTFjODUwNmNiZGMxNGE3MWI3MS4uMmZhNWMwODRjN2Q1NjUz
NDg2MWRjMWY4NTc1N2UyNzE4MTQ1NzdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAK
QEAgLTU0MSw3ICs1NDEsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdAogewogICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCIpOwogICAgIHVp
bnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJh
Y2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgp
LCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCks
IG9iamVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKICAgICBp
ZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7CiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0
b3JlLmgKaW5kZXggODg2MmI1OGQ0ZjE2NzIwY2NhYjFjYmU5NWQwZjdjYzdiMWEzZjc5Ni4uZTBh
NWE4ZmE1ZThkZDYzZjNhY2M4MDRiY2EwZTMzOWI0ZDE5NTlhOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTYzLDYgKzYz
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlL
ZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRy
PElEQktleT4oKTsgfQogICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3Qg
ZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpIE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBv
cGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJS
SURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0
aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPEN1cnNvcj4oKTsgfQogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlS
YW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRy
PEN1cnNvcj4oKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1
cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSBPVkVSUklE
RSB7IHJldHVybiBQYXNzUmVmUHRyPEN1cnNvcj4oKTsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>