<?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>202483</bug_id>
          
          <creation_ts>2019-10-02 11:04:41 -0700</creation_ts>
          <short_desc>IndexedDB: include size of index records in size estimate of put/add task</short_desc>
          <delta_ts>2019-10-09 15:21:17 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>201957</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1576063</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-02 11:04:41 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576097</commentid>
    <comment_count>1</comment_count>
      <attachid>380045</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-02 11:59:37 -0700</bug_when>
    <thetext>Created attachment 380045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576114</commentid>
    <comment_count>2</comment_count>
      <attachid>380045</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-10-02 12:44:58 -0700</bug_when>
    <thetext>Comment on attachment 380045
Patch

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

&gt; Source/WebCore/Modules/indexeddb/shared/IDBError.cpp:70
&gt; +uint64_t IDBError::taskSize() const
&gt; +{
&gt; +    ASSERT(isNull() || (!isNull() &amp;&amp; !m_size));
&gt; +    return m_size;
&gt; +}

It&apos;s an unfortunate / surprising design to use an error object to communicate a successful result (size). Usually, an error communicates that something failed. But in this case, you&apos;re using it to communicate that something succeeded.

Can you return the size of the task some other way? Or Make an abstraction like a Variant that&apos;s a either an error or a size, depending on whether the task succeeded?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576117</commentid>
    <comment_count>3</comment_count>
      <attachid>380045</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-10-02 12:52:36 -0700</bug_when>
    <thetext>Comment on attachment 380045
Patch

Is the purpose of this design to avoid storing something too big, or to avoid prompting the user too much?

Can you include a test case that demonstrates the bug we&apos;re trying to fix by being more precise? It&apos;s probably easier to talk about whether a test passes or fails than it is to discuss design in the abstract.

If the purpose of this design is to avoid storing something too big, I&apos;m not sure we&apos;ve achieved that goal. An item that is estimated to be small, but turns out to be big, will be stored. Later, we will update our estimate to know that we&apos;ve gone over quota. But by that time, we&apos;re already over quota, possibly by a lot. So, I&apos;d like to understand what we&apos;re trying to do with this more precise estimate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576189</commentid>
    <comment_count>4</comment_count>
      <attachid>380059</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-02 14:21:36 -0700</bug_when>
    <thetext>Created attachment 380059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576276</commentid>
    <comment_count>5</comment_count>
      <attachid>380076</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-02 18:59:45 -0700</bug_when>
    <thetext>Created attachment 380076
test.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576277</commentid>
    <comment_count>6</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-02 19:17:40 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #3)
&gt; Comment on attachment 380045 [details]
&gt; Patch
&gt; 
&gt; Is the purpose of this design to avoid storing something too big, or to
&gt; avoid prompting the user too much?
&gt; 
&gt; Can you include a test case that demonstrates the bug we&apos;re trying to fix by
&gt; being more precise? It&apos;s probably easier to talk about whether a test passes
&gt; or fails than it is to discuss design in the abstract.
&gt; 
Test file uploaded.

For each add operation, estimated task size before execution is about 58KB, actual task size reported after execution is about 1.09MB. Database file size after db.close() is about 9MB.

&gt; If the purpose of this design is to avoid storing something too big, I&apos;m not
&gt; sure we&apos;ve achieved that goal. An item that is estimated to be small, but
&gt; turns out to be big, will be stored. Later, we will update our estimate to
&gt; know that we&apos;ve gone over quota. But by that time, we&apos;re already over quota,
&gt; possibly by a lot. So, I&apos;d like to understand what we&apos;re trying to do with
&gt; this more precise estimate.

That&apos;s true. This is an effort to reduce effect of this problem but not to solve the problem completely.

One case where updating the size after task execution could be meaningful is when we have multiple transactions.
As in the test file, it executes two transactions. When we set the quota to be 1MB and do not update the task size, both transactions would succeed. When we update the task size estimate, the second transaction would fail as the estimated usage would be updated at the end of transaction.

Bette size estimate also helps the case where one origin has multiple databases or multiple storage types for the same reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576281</commentid>
    <comment_count>7</comment_count>
      <attachid>380077</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-02 20:32:07 -0700</bug_when>
    <thetext>Created attachment 380077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576307</commentid>
    <comment_count>8</comment_count>
      <attachid>380077</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-03 00:01:14 -0700</bug_when>
    <thetext>Comment on attachment 380077
Patch

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

&gt; Source/WebCore/Modules/indexeddb/shared/IDBError.h:100
&gt; +class IDBErrorOrSize {

I would rename it to something like OperationSizeOrError or TaskSizeOrError.
An Expected&lt;uint64_t, IDBError&gt; might be better in principle, it might require adding some makeUnexpected.
Otherwise a Variant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576704</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-10-03 21:25:02 -0700</bug_when>
    <thetext>&gt; &gt; Can you include a test case that demonstrates the bug we&apos;re trying to fix by
&gt; &gt; being more precise? It&apos;s probably easier to talk about whether a test passes
&gt; &gt; or fails than it is to discuss design in the abstract.
&gt; &gt; 
&gt; Test file uploaded.
&gt; 
&gt; For each add operation, estimated task size before execution is about 58KB,
&gt; actual task size reported after execution is about 1.09MB. Database file
&gt; size after db.close() is about 9MB.

Thank you!

I think this test demonstrates two issues:

(1) In the worst case, when we store an object, we replicate the store in every index.

(2) In the worst worst case, SQLite may use even more space than (1), due to internal implementation details.

It looks like this patch attempts to address (1) but not (2). So, let&apos;s set aside (2) for the moment, and treat it as a separate bug. (Probably the fix for that bug will be to use &quot;PRAGMA auto_vacuum = FULL&quot; or similar.)

In the case of (1), it looks like this patch attempts to address the subset of cases where the indexing overhead accumulates gradually over many stores, but not immediately in one store. So, if I set indexCount to 1000000, or I change createObject() to call randomArray(1000000)), this patch does not stop me.

Is that right?

Consider this algorithm, which I&apos;ll name INDEX_ESTIMATE_SYNC:

bytes = (object size) * (number of indices)
if (bytes &gt; bytesAvailable)
    bytesAvailable = synchronously read file sizes on disk
    if (bytes &gt; bytesAvailable)
        bytesAvailable = ask user for more space
    if (bytes &gt; bytesAvailable)
        return an error
bytesAvailable -= bytes

And this algorithm, which I&apos;ll name INDEX_ESTIMATE_ASYNC:

bytes = (object size) * (number of indices)
if (bytes &gt; bytesAvailable)
    if (bytesAvailableNeedsUpdate)
        schedule a task:
            bytesAvailable = synchronously read file sizes on disk
            bytesAvailableNeedsUpdate = false
            restart this algorithm
    else
        bytesAvailable = ask user for more space
        if (bytes &gt; bytesAvailable)
            return an error

bytesAvailableNeedsUpdate = true
bytesAvailable -= bytes

Is INDEX_ESTIMATE or INDEX_ESTIMATE_ASYNC practical to implement in our database task system?

I believe that INDEX_ESTIMATE_* would solve the problem in (1) in all cases. I also believe it has the benefit of being a little more straightforward. The process of estimating a size, reserving space for it, and then passing back the difference between the estimated size and the true size (which is itself still an estimate) is challenging to follow.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576760</commentid>
    <comment_count>10</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-04 01:02:17 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #9)
&gt; &gt; &gt; Can you include a test case that demonstrates the bug we&apos;re trying to fix by
&gt; &gt; &gt; being more precise? It&apos;s probably easier to talk about whether a test passes
&gt; &gt; &gt; or fails than it is to discuss design in the abstract.
&gt; &gt; &gt; 
&gt; &gt; Test file uploaded.
&gt; &gt; 
&gt; &gt; For each add operation, estimated task size before execution is about 58KB,
&gt; &gt; actual task size reported after execution is about 1.09MB. Database file
&gt; &gt; size after db.close() is about 9MB.
&gt; 
&gt; Thank you!
&gt; 
&gt; I think this test demonstrates two issues:
&gt; 
&gt; (1) In the worst case, when we store an object, we replicate the store in
&gt; every index.
&gt; 
&gt; (2) In the worst worst case, SQLite may use even more space than (1), due to
&gt; internal implementation details.
&gt; 
&gt; It looks like this patch attempts to address (1) but not (2). So, let&apos;s set
&gt; aside (2) for the moment, and treat it as a separate bug. (Probably the fix
&gt; for that bug will be to use &quot;PRAGMA auto_vacuum = FULL&quot; or similar.)
&gt; 
&gt; In the case of (1), it looks like this patch attempts to address the subset
&gt; of cases where the indexing overhead accumulates gradually over many stores,
&gt; but not immediately in one store. So, if I set indexCount to 1000000, or I
&gt; change createObject() to call randomArray(1000000)), this patch does not
&gt; stop me.
&gt; 
&gt; Is that right?
&gt; 
Right.

&gt; Consider this algorithm, which I&apos;ll name INDEX_ESTIMATE_SYNC:
&gt; 
&gt; bytes = (object size) * (number of indices)
&gt; if (bytes &gt; bytesAvailable)
&gt;     bytesAvailable = synchronously read file sizes on disk
&gt;     if (bytes &gt; bytesAvailable)
&gt;         bytesAvailable = ask user for more space
&gt;     if (bytes &gt; bytesAvailable)
&gt;         return an error
&gt; bytesAvailable -= bytes
&gt; 
&gt; And this algorithm, which I&apos;ll name INDEX_ESTIMATE_ASYNC:
&gt; 
&gt; bytes = (object size) * (number of indices)
&gt; if (bytes &gt; bytesAvailable)
&gt;     if (bytesAvailableNeedsUpdate)
&gt;         schedule a task:
&gt;             bytesAvailable = synchronously read file sizes on disk
&gt;             bytesAvailableNeedsUpdate = false
&gt;             restart this algorithm
&gt;     else
&gt;         bytesAvailable = ask user for more space
&gt;         if (bytes &gt; bytesAvailable)
&gt;             return an error
&gt; 
&gt; bytesAvailableNeedsUpdate = true
&gt; bytesAvailable -= bytes
&gt; 
&gt; Is INDEX_ESTIMATE or INDEX_ESTIMATE_ASYNC practical to implement in our
&gt; database task system?
&gt; 
&gt; I believe that INDEX_ESTIMATE_* would solve the problem in (1) in all cases.
&gt; I also believe it has the benefit of being a little more straightforward.
&gt; The process of estimating a size, reserving space for it, and then passing
&gt; back the difference between the estimated size and the true size (which is
&gt; itself still an estimate) is challenging to follow.
&gt; 
&gt; What do you think?

I think this proposal is doable. Current patch would give a more accurate estimate than the proposed one but it would update the size estimate only after task execution, before which StorageQuotaManager may already grant some requests that it should not. It&apos;s more safe and cleaner to have a good task estimate when requesting the space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577091</commentid>
    <comment_count>11</comment_count>
      <attachid>380273</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-04 17:37:55 -0700</bug_when>
    <thetext>Created attachment 380273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577362</commentid>
    <comment_count>12</comment_count>
      <attachid>380330</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-07 08:46:19 -0700</bug_when>
    <thetext>Created attachment 380330
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577622</commentid>
    <comment_count>13</comment_count>
      <attachid>380330</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-10-07 20:10:01 -0700</bug_when>
    <thetext>Comment on attachment 380330
Patch

r=me

Unless the result is impractical, I think we should land this change with a test case similar to the one you uploaded, with indexCount set to 1000000, and/or createObject() set to call randomArray(1000000)). That way, the test documents the reason we made this implementation choice, and it can be used to qualified other implementations we may want to try out in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577623</commentid>
    <comment_count>14</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-10-07 20:12:11 -0700</bug_when>
    <thetext>(The test case should verify that the store fails.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578358</commentid>
    <comment_count>15</comment_count>
      <attachid>380558</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-09 13:07:57 -0700</bug_when>
    <thetext>Created attachment 380558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578380</commentid>
    <comment_count>16</comment_count>
      <attachid>380564</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-09 14:16:17 -0700</bug_when>
    <thetext>Created attachment 380564
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578382</commentid>
    <comment_count>17</comment_count>
      <attachid>380566</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-09 14:19:00 -0700</bug_when>
    <thetext>Created attachment 380566
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578412</commentid>
    <comment_count>18</comment_count>
      <attachid>380566</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-09 15:20:36 -0700</bug_when>
    <thetext>Comment on attachment 380566
Patch for landing

Clearing flags on attachment: 380566

Committed r250936: &lt;https://trac.webkit.org/changeset/250936&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578413</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-09 15:20:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578414</commentid>
    <comment_count>20</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-09 15:21:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/56132514&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380045</attachid>
            <date>2019-10-02 11:59:37 -0700</date>
            <delta_ts>2019-10-02 14:21:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202483-20191002115936.patch</filename>
            <type>text/plain</type>
            <size>38942</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY1ZDBmYjMwMTAyZWFk
YmNhZWI3ZmU3NjkzMzY4OTE3MzVlNzIwMi4uMmY1YTM4ZjkyMmU0ZTQ5YmU3NDg3ZTU2N2FjNTIx
MTdkNzAyZDUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDE5LTEwLTAyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogZXN0aW1h
dGUgc2l6ZSBpbmNyZWFzZSBhZnRlciB0YXNrIGV4ZWN1dGlvbiBpbnN0ZWFkIG9mIGNoZWNraW5n
IGZpbGUgc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAyNDgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXNlIGVzdGltYXRlZCB0YXNrIHNpemUoc3BhY2UgaW5jcmVhc2UgZm9yIHRhc2spIHBsdXMg
aW5pdGlhbCBkaXNrIHVzYWdlIHRvIHJlcHJlc2VudCBzcGFjZSB1c2VkIGJ5IEluZGV4ZWREQiwg
CisgICAgICAgIHRvIHNhdmUgdGhlIGNvc3Qgb2YgZmlsZSBzeXN0ZW0gY2FsbHMgZm9yIGdldHRp
bmcgZmlsZSBzaXplLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cDogYWRkIHRhc2sgc2l6ZSBlc3RpbWF0ZSBhbmQgcmV0dXJuIGl0IGluIHRoZSByZXN1bHQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVu
Y2hlY2tlZFB1dEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
YWRkUmVjb3JkKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHA6IHdlIGVzdGltYXRlIHRhc2sgc2l6ZSwgcmVxdWVzdCBzcGFjZSBmcm9t
IFN0b3JhZ2VRdW90YU1hbmFnZXIsCisgICAgICAgIGFuZCBob2xkIHRoZSBzcGFjZSBncmFudGVk
IHdoZW4gdGFzayBpcyBiZWluZyBleGVjdXRlZCBpbiB0aGUgYmFja2dyb3VuZCB0aHJlYWQuIEFm
dGVyIHRhc2sgaXMgZG9uZSwgd2Ugd2lsbCAKKyAgICAgICAgZ2V0IGEgbW9yZSBhY2N1cmF0ZSB0
YXNrIHNpemUsIHdoaWNoIGlzIGVzdGltYXRlZCBkdXJpbmcgZXhlY3V0aW9uLCB1cGRhdGUgdXNh
Z2Ugd2l0aCB0aGF0IHNpemUsIGFuZCByZWxlYXNlIAorICAgICAgICB0aGUgc3BhY2UgaGVsZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3Bh
Y2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpzaHV0ZG93bkZvckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmRpZFNodXRkb3duRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdlbmVyYXRlVW5p
cXVlQ2FsbGJhY2tJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNr
aW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1D
cmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1
dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFza1Jl
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Omlt
bWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmZvcmdl
dEVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpnZW5lcmF0ZVVu
aXF1ZUNhbGxiYWNrSWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
Lmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6OmNyZWF0ZU51bGxFcnJvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJFcnJvcjo6SURCRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6
Omlzb2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6dGFza1Np
emUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5o
OiBhZGQgYSBtZW1iZXIgbV9zaXplIHRvIElEQkVycm9yIHRvIHJlcG9ydCB0YXNrIHNpemUodXNh
Z2UgaW5jcmVhc2UpIGlmIAorICAgICAgICB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZChl
cnJvciBpcyBudWxsKS4KKyAgICAgICAgKFdlYkNvcmU6OklEQkVycm9yOjpJREJFcnJvcik6CisK
IDIwMTktMTAtMDIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHIyNTA1OTUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IDI3OWIzMTU5MTZiZDM5ZDhkNGE4NjA2ZTcwNWRiN2U1NWQxOWFl
NzAuLjU2YmYwMGY4YzMzMmNjYmQzNDAzMDI3NjFmZGEyZjMyMTA3YTRmYjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC05ODIsOSArOTgyLDggQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHQKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fZGF0YWJhc2VJbmZvLT5hZGRF
eGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwotCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAg
ICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBpbmZvLm5hbWUoKS5zaXplSW5CeXRlcygpICsga2V5
UGF0aEJsb2ItPnNpemUoKTsKKyAgICByZXR1cm4gSURCRXJyb3I6OmNyZWF0ZU51bGxFcnJvcihz
aXplSW5jcmVhc2UpOwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0
ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCkBAIC0xMTA1LDkgKzExMDQs
MTMgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZShj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKICAgICAgICAgfQogICAgIH0KIAorICAgIFN0
cmluZyBvbGROYW1lOworICAgIGlmIChhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNl
SW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKSkK
KyAgICAgICAgb2xkTmFtZSA9IG9iamVjdFN0b3JlSW5mby0+bmFtZSgpOwogICAgIG1fZGF0YWJh
c2VJbmZvLT5yZW5hbWVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUp
OwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2Ug
PSBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgPiBvbGROYW1lLnNpemVJbkJ5dGVzKCkgPyBuZXdOYW1l
LnNpemVJbkJ5dGVzKCkgLSBvbGROYW1lLnNpemVJbkJ5dGVzKCkgOiAwOworICAgIHJldHVybiBJ
REJFcnJvcjo6Y3JlYXRlTnVsbEVycm9yKHNpemVJbmNyZWFzZSk7CiB9CiAKIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCkK
QEAgLTExODQsNiArMTE4Nyw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IGFkZCBpbmRleCAnJXMnIHRvIEluZGV4SW5mbyB0YWJsZSAoJWkp
IC0gJXMiLCBpbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gSURCRXJyb3Ig
eyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNlIl9zIH07
CiAgICAgfQorICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJbkJ5
dGVzKCkgKyBrZXlQYXRoQmxvYi0+c2l6ZSgpOwogCiAgICAgLy8gV3JpdGUgaW5kZXggcmVjb3Jk
cyBmb3IgYW55IHJlY29yZHMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoaXMgb2JqZWN0IHN0b3Jl
LgogCkBAIC0xMjE0LDYgKzEyMTgsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogCiAgICAg
ICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgc2l6ZUluY3JlYXNlICs9
IGVycm9yLnRhc2tTaXplKCk7CiAKICAgICAgICAgaWYgKCFjdXJzb3ItPmFkdmFuY2UoMSkpIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgYWR2YW5jaW5nIGN1cnNvciB3aGlsZSBpbmRl
eGluZyBleGlzdGluZyByZWNvcmRzIGZvciBuZXcgaW5kZXguIik7CkBAIC0xMjMxLDcgKzEyMzYs
NyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgIEFTU0VSVChvYmplY3RTdG9yZSk7CiAg
ICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CiAKLSAgICByZXR1cm4gSURC
RXJyb3IgeyB9OworICAgIHJldHVybiBJREJFcnJvcjo6Y3JlYXRlTnVsbEVycm9yKHNpemVJbmNy
ZWFzZSk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkSGFz
SW5kZXhSZWNvcmQoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBjb25zdCBJREJLZXlEYXRhJiBp
bmRleEtleSwgYm9vbCYgaGFzUmVjb3JkKQpAQCAtMTI5MSw2ICsxMjk2LDcgQEAgSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJREJJbmRl
eEluZm8mIGluZm8sIGMKICAgICAgICAgfQogICAgIH0KIAorICAgIHVpbnQ2NF90IHNpemVJbmNy
ZWFzZSA9IDA7CiAgICAgZm9yIChhdXRvJiBpbmRleEtleSA6IGluZGV4S2V5cykgewogICAgICAg
ICBpZiAoIWluZGV4S2V5LmlzVmFsaWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTI5
OSw5ICsxMzA1LDEwIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2Vk
UHV0SW5kZXhLZXkoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBjCiAgICAgICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBwdXQgaW5kZXggcmVjb3JkIGZvciBuZXdseSBjcmVhdGVkIGluZGV4
Iik7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgc2l6ZUlu
Y3JlYXNlICs9IGVycm9yLnRhc2tTaXplKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9y
IHsgfTsKKyAgICByZXR1cm4gSURCRXJyb3I6OmNyZWF0ZU51bGxFcnJvcihzaXplSW5jcmVhc2Up
OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4
UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJD
b3JlOjpJREJLZXlEYXRhJiBrZXlWYWx1ZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYgaW5k
ZXhLZXksIGludDY0X3QgcmVjb3JkSUQpCkBAIC0xMzM0LDcgKzEzNDEsOCBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJRCwgaQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9yIHsg
fTsKKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBpbmRleEtleUJ1ZmZlci0+c2l6ZSgpICsg
dmFsdWVCdWZmZXItPnNpemUoKTsKKyAgICByZXR1cm4gSURCRXJyb3I6OmNyZWF0ZU51bGxFcnJv
cihzaXplSW5jcmVhc2UpOwogfQogCiAKQEAgLTE0MTksOSArMTQyNywxMSBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhYwogICAgICAgICB9CiAgICAgfQogCisgICAgYXV0byBvbGROYW1lID0gaW5k
ZXhJbmZvLT5uYW1lKCk7CiAgICAgaW5kZXhJbmZvLT5yZW5hbWUobmV3TmFtZSk7CiAKLSAgICBy
ZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IG5ld05hbWUu
c2l6ZUluQnl0ZXMoKSA+IG9sZE5hbWUuc2l6ZUluQnl0ZXMoKSA/IG5ld05hbWUuc2l6ZUluQnl0
ZXMoKSAtIG9sZE5hbWUuc2l6ZUluQnl0ZXMoKSA6IDA7CisgICAgcmV0dXJuIElEQkVycm9yOjpj
cmVhdGVOdWxsRXJyb3Ioc2l6ZUluY3JlYXNlKTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25z
dCBJREJLZXlEYXRhJiBrZXlEYXRhLCBib29sJiBrZXlFeGlzdHMpCkBAIC0xNjg4LDYgKzE2OTgs
NyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbEluZGV4ZXNGb3JB
ZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogCiAgICAgSURCRXJyb3IgZXJyb3I7CiAgICAg
Ym9vbCBhbnlSZWNvcmRzU3VjY2VlZGVkID0gZmFsc2U7CisgICAgdWludDY0X3Qgc2l6ZUluY3Jl
YXNlID0gMDsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygp
KSB7CiAgICAgICAgIEluZGV4S2V5IGluZGV4S2V5OwogICAgICAgICBnZW5lcmF0ZUluZGV4S2V5
Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+ZXhlY1N0YXRlKCksIGluZGV4LCBqc1Zh
bHVlLCBpbmRleEtleSwgaW5mby5rZXlQYXRoKCksIGtleSk7CkBAIC0xNjk5LDYgKzE3MTAsNyBA
QCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRS
ZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQog
ICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgc2l6ZUluY3JlYXNlICs9IGVycm9yLnRhc2tT
aXplKCk7CiAgICAgICAgIGFueVJlY29yZHNTdWNjZWVkZWQgPSB0cnVlOwogICAgIH0KIApAQCAt
MTcxNiw3ICsxNzI4LDEwIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRl
QWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGVycm9yOworCisgICAgcmV0dXJuIElEQkVycm9yOjpjcmVhdGVOdWxsRXJyb3Io
c2l6ZUluY3JlYXNlKTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRS
ZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgb2JqZWN0U3RvcmVJbmZvLCBjb25zdCBJREJLZXlE
YXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUpCkBAIC0xNzU3LDYgKzE3NzIsNyBA
QCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogCiAgICAgICAgIHJlY29yZElEID0gbV9zcWxpdGVE
Qi0+bGFzdEluc2VydFJvd0lEKCk7CiAgICAgfQorICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9
IGtleUJ1ZmZlci0+c2l6ZSgpICsgdmFsdWUuZGF0YSgpLmRhdGEoKS0+c2l6ZSgpOwogCiAgICAg
YXV0byBlcnJvciA9IHVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQob2JqZWN0U3RvcmVJbmZv
LCBrZXlEYXRhLCB2YWx1ZS5kYXRhKCksIHJlY29yZElEKTsKIApAQCAtMTc3Miw2ICsxNzg4LDcg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAg
fQorICAgIHNpemVJbmNyZWFzZSArPSBlcnJvci50YXNrU2l6ZSgpOwogCiAgICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGJsb2JVUkxzID0gdmFsdWUuYmxvYlVSTHMoKTsKICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYmxvYkZpbGVzID0gdmFsdWUuYmxvYkZpbGVQYXRocygpOwpAQCAtMTc4Nyw2
ICsxODA0LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAgICAgICAgICByZXR1
cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3JkIEJsb2IgcmVjb3Jk
IGluIGRhdGFiYXNlIl9zIH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgc2l6
ZUluY3JlYXNlICs9IHVybC5zaXplSW5CeXRlcygpOwogICAgICAgICBpbnQ2NF90IHBvdGVudGlh
bEZpbGVOYW1lSW50ZWdlciA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogCiAgICAg
ICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUgZm9yIHRoaXMgYmxvYlVSTCwgbm90aGlu
ZyBsZWZ0IHRvIGRvLgpAQCAtMTgyNiw3ICsxODQ0LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGkKIAogICAgIHRyYW5zYWN0aW9uLT5ub3RpZnlDdXJzb3JzT2ZDaGFuZ2VzKG9iamVjdFN0b3Jl
SW5mby5pZGVudGlmaWVyKCkpOwogCi0gICAgcmV0dXJuIGVycm9yOworICAgIHJldHVybiBJREJF
cnJvcjo6Y3JlYXRlTnVsbEVycm9yKHNpemVJbmNyZWFzZSk7CiB9CiAKIElEQkVycm9yIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QmxvYlJlY29yZHNGb3JPYmplY3RTdG9yZVJlY29yZChpbnQ2
NF90IG9iamVjdFN0b3JlUmVjb3JkLCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIFZlY3RvcjxT
dHJpbmc+JiBibG9iRmlsZVBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZDg1
YjAwMTQ4YTJhNWMzMDYwYmE1MGMwZTEyMjA3NWM2MzViYmM0Zi4uNmE2ZWJjMGNjYjJiZjc4M2E2
YmRiZDQ1ZTVlYzllZWIxOWQ4MjQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC01
NSw2ICs1NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsK
IAogc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgPSA0Owor
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdCA9IDEwICogS0I7
CiAKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQktleURhdGEm
IGtleURhdGEpCiB7CkBAIC0yMDcsNiArMjA4LDIzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
CiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykp
OwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVp
bnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQoreworICAgIG1fc2VydmVyLT5p
bmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXpl
KTsKKyAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tT
aXplKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRh
c2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUpCit7CisgICAg
YXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZp
ZXIpOworICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5k
KCkpIHsKKyAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRl
bnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgaWYgKGFjdHVhbFRh
c2tTaXplKQorICAgICAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRp
Zmllci5vcmlnaW4oKSwgYWN0dWFsVGFza1NpemUpOworICAgICAgICBtX3BlbmRpbmdTcGFjZUlu
Y3JlYXNlVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0
aW9uICglcCkiLCB0aGlzKTsKQEAgLTIxOSw3ICsyMzcsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogICAgICAgICAgICAgbV9pc09wZW5p
bmdCYWNraW5nU3RvcmUgPSB0cnVlOwogICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hl
dGhlciB0aGlzIGlzIGFuIGV4aXN0aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgogICAgICAgICAgICAg
Ly8gV2Ugc2V0IGEgc21hbGwgY29zdCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVu
IGFuIGluZmluaXRlIG51bWJlciBvZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5y
ZXF1ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25D
b3N0LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikg
bXV0YWJsZSB7CisgICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cih0aGlzKSwgc2l6ZSA9IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdF0oYXV0byBk
ZWNpc2lvbikgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzUsNyArMjUzLDkgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICB0
aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBjYWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFj
a0lkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFz
ayhjYWxsYmFja0lELCBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7CiAgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0zNDgsNyArMzY4LDYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgaWRlbnRpZmkKIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAg
ICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3
RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCiAgICAgICAg
IG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0
c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwpAQCAtMzY0LDcgKzM4Myw2IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImIGlkZW50aWZpCiAKICAgICAgICAgZGVsZXRlZFZlcnNpb24gPSBkYXRhYmFz
ZUluZm8udmVyc2lvbigpOwogICAgICAgICBiYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9y
ZSgpOwotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IGJhY2tpbmdTdG9yZS0+ZGF0YWJhc2VT
aXplKCk7CiAgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUs
IGRlbGV0ZWRWZXJzaW9uKSk7CkBAIC00MDAsMTAgKzQxOCw4IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UoKQogCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5p
cXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UiKTsKIAotICAgIGlmIChtX2JhY2tpbmdT
dG9yZSkgeworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKICAgICAgICAgbV9iYWNraW5nU3RvcmUt
PmNsb3NlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRh
dGFiYXNlU2l6ZSgpOwotICAgIH0KIAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAg
ICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7
CkBAIC00MjIsOCArNDM4LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkU2h1dGRvd25G
b3JDbG9zZSgpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzRW1wdHkoKSk7
CiAgICAgbV9kYXRhYmFzZVJlcGx5UXVldWUua2lsbCgpOwotCi0gICAgdXBkYXRlU3BhY2VVc2Vk
SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2lu
Z1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKQpAQCAtNDU1LDggKzQ2OSw2IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVk
VmVyc2lvbikKICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CiAgICAg
fQogCi0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsKLQogICAgIG1fZGVsZXRlQmFja2lu
Z1N0b3JlSW5Qcm9ncmVzcyA9IGZhbHNlOwogCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJE
ZWxldGUpCkBAIC01MzcsMTQgKzU0OSwxNCBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjphbGxD
b25uZWN0aW9uc0FyZUNsb3NlZE9yQ2xvc2luZygpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpCit1
aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZp
ZXIoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgc3RhdGljIHVpbnQ2NF90
IGN1cnJlbnRJRCA9IDA7CiAgICAgcmV0dXJuICsrY3VycmVudElEOwogfQogCi11aW50NjRfdCBV
bmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgdWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFz
ZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsK
ICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkgewogICAgICAgICBjYWxsYmFjayhJ
REJFcnJvcjo6dXNlckRlbGV0ZUVycm9yKCkpOwpAQCAtNTU1LDE2ICs1NjcsMTEgQEAgdWludDY0
X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxi
YWNrJiYgY2FsbGJhY2ssIHUKICAgICBBU1NFUlQoIW1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMo
aWRlbnRpZmllcikpOwogICAgIG1fZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIsIFdURk1v
dmUoY2FsbGJhY2spKTsKIAotICAgIGlmICh0YXNrU2l6ZSkgewotICAgICAgICBtX3NlcnZlci0+
aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6
ZSk7Ci0gICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmFkZChpZGVudGlmaWVy
LCB0YXNrU2l6ZSk7Ci0gICAgfQotCiAgICAgbV9jYWxsYmFja1F1ZXVlLmFwcGVuZChpZGVudGlm
aWVyKTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0
YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFj
aywgdWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVD
YWxsYmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIGlm
IChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKSB7CiAgICAgICAgIGNhbGxiYWNrKElEQkVycm9y
Ojp1c2VyRGVsZXRlRXJyb3IoKSwgeyB9KTsKQEAgLTU3NSwxMSArNTgyLDYgQEAgdWludDY0X3Qg
VW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJh
Y2smJiBjYWxsYmFjaywKICAgICBBU1NFUlQoIW1fa2V5RGF0YUNhbGxiYWNrcy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CiAgICAgbV9rZXlEYXRhQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBXVEZN
b3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBpZiAodGFza1NpemUpIHsKLSAgICAgICAgbV9zZXJ2ZXIt
PmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1Np
emUpOwotICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5hZGQoaWRlbnRpZmll
ciwgdGFza1NpemUpOwotICAgIH0KLQogICAgIG1fY2FsbGJhY2tRdWV1ZS5hcHBlbmQoaWRlbnRp
Zmllcik7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CkBAIC03ODAsNyArNzgyLDcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlvbihSZWY8VW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW8KICAgICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChh
ZG9wdFJlZihjb25uZWN0aW9uLmxlYWtSZWYoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRp
ZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURC
RGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihkYikgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwpA
QCAtNzkyLDE1ICs3OTQsMTcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIKIAogICAgIC8vIFF1
b3RhVXNlciBzaG91bGQgaGF2ZSBpbml0aWxpYXplZCBzdG9yYWdlIHVzYWdlLCB3aGljaCBjb250
YWlucyB0aGUKICAgICAvLyBzaXplIG9mIHRoaXMgZGF0YWJhc2UuCi0gICAgbV9jdXJyZW50RGF0
YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOworICAgIGF1dG8gZGF0
YWJhc2VTaXplQmVmb3JlT3BlbiA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKIAog
ICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFj
a2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0g
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9y
KSk7CisgICAgYXV0byBkYXRhYmFzZVNpemVBZnRlck9wZW4gPSBtX2JhY2tpbmdTdG9yZS0+ZGF0
YWJhc2VTaXplKCk7CisgICAgYXV0byBhY3R1YWxUYXNrU2l6ZSA9IGRhdGFiYXNlU2l6ZUFmdGVy
T3BlbiA+IGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4gPyAoZGF0YWJhc2VTaXplQWZ0ZXJPcGVuIC0g
ZGF0YWJhc2VTaXplQmVmb3JlT3BlbikgOiAwOworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJh
Y2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUsIGNhbGxiYWNr
SWRlbnRpZmllcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9y
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJE
YXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgYWN0dWFs
VGFza1NpemUsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZE9wZW5CYWNraW5nU3RvcmUiKTsKQEAgLTgxMSw3ICs4MTUsNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYg
aW5mbywgY29uc3QgSQogICAgIEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAg
bV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVNwYWNlVXNlZElm
TmVlZGVkKCk7CisgICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVy
LCBhY3R1YWxUYXNrU2l6ZSk7CiAKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODM2LDEwICs4NDAsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJh
bnNhY3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1
b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJh
Y2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNh
bGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwog
ICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCisgICAgc3RhcnRTcGFjZUlu
Y3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNy
ZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmll
cigpLCBpbmZvKSk7CiB9CiAKQEAgLTg0OSw5ICs4NTQsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjbwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q3JlYXRlT2JqZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAg
bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
aW5mbyk7CisgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9y
ZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8pOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IsIGluZm8pKTsKIH0KIApAQCAtODYwLDEwICs4NjQsMTMgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJ
bmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmpl
Y3RTdG9yZSIpOwogCi0gICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5j
cmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IudGFza1NpemUoKSk7CisKKyAgICBJ
REJFcnJvciBjcmVhdGVFcnJvcjsKKyAgICBpZiAoY3JlYXRlRXJyb3IuaXNOdWxsKCkpCiAgICAg
ICAgIG1fZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwogCi0gICAg
cGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAgcGVy
Zm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBjcmVhdGVFcnJvcik7CiB9CiAK
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKQEAgLTkzNSw3ICs5NDIsNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9y
ZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2
NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFj
ayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtOTQ1LDYgKzk1Miw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlx
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNh
bGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3Rv
cmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQogCkBAIC05NTQsOSArOTYyLDggQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY28KICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlIik7CiAKICAgICBBU1NFUlQobV9iYWNraW5n
U3RvcmUpOwotICAgIG1fYmFja2luZ1N0b3JlLT5yZW5hbWVPYmplY3RTdG9yZSh0cmFuc2FjdGlv
bklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CisgICAgYXV0byBl
cnJvciA9IG1fYmFja2luZ1N0b3JlLT5yZW5hbWVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50
aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBJREJFcnJvciBl
cnJvcjsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7
CiB9CiAKQEAgLTk2NSwxMCArOTcyLDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUiKTsKIAotICAgIGlmIChl
cnJvci5pc051bGwoKSkKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50
aWZpZXIsIGVycm9yLnRhc2tTaXplKCkpOworCisgICAgSURCRXJyb3IgcmVuYW1lRXJyb3I7Cisg
ICAgaWYgKHJlbmFtZUVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+cmVu
YW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAotICAgIHBl
cmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOworICAgIHBlcmZv
cm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgcmVuYW1lRXJyb3IpOwogfQogCiB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCkBAIC0xMDMwLDkgKzEwNDAsMTEgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIGMKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRl
clF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sg
Y2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAg
IGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOworCisgICAgc3RhcnRTcGFjZUluY3Jl
YXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0
ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZv
KSk7CiB9CiAKQEAgLTEwNjYsNiArMTA3OCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAg
ICAgICAgIG9iamVjdFN0b3JlSW5mby0+YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKICAgICB9CiAK
KyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnRh
c2tTaXplKCkpOwogICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IpOwogfQogCkBAIC0xMTQ3LDcgKzExNjAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpyZW5hbWVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
dQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1
aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0g
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3Zl
KGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNh
bGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJ
RCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMTYzLDYgKzExNzYsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwg
VW5pcXVlSURCRAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgc3RhcnRTcGFjZUluY3Jl
YXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFt
ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQogCkBAIC0x
MTcyLDkgKzExODYsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5k
ZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAogICAg
IEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50
aWZpZXIsIG5ld05hbWUpOworICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+cmVuYW1l
SW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4
SWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBJREJFcnJvciBlcnJvcjsKICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApA
QCAtMTE4Myw3ICsxMTk2LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1S
ZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAotICAgIGlmIChlcnJvci5pc051bGwo
KSkgeworICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IudGFza1NpemUoKSk7CisKKyAgICBJREJFcnJvciByZW5hbWVFcnJvcjsKKyAgICBpZiAocmVu
YW1lRXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9k
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7CiAgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8pOwogICAgICAgICBpZiAob2Jq
ZWN0U3RvcmVJbmZvKSB7CkBAIC0xMTkzLDcgKzEyMDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCByZW5hbWVFcnJvcik7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1
dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNv
bnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUg
b3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQpAQCAtMTIxMyw5ICsxMjI5
LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJSZXF1
ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElE
QlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3Zlcndy
aXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tT
aXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVy
bjsKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwg
a2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIApAQCAtMTI5MSw4ICsxMzA4LDEx
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYmIG9iamVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgp
ICYmIGtleURhdGEudHlwZSgpID09IEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyKQotICAgICAg
ICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1i
ZXIoKSk7CisgICAgaWYgKG92ZXJ3cml0ZU1vZGUgIT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1cnNvciAmJiBvYmplY3RTdG9yZUluZm8tPmF1dG9J
bmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJl
cikgeworICAgICAgICBhdXRvIHVwZGF0ZUVycm9yID0gbV9iYWNraW5nU3RvcmUtPm1heWJlVXBk
YXRlS2V5R2VuZXJhdG9yTnVtYmVyKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBrZXlEYXRhLm51bWJlcigpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVFcnJvci5p
c051bGwoKSkKKyAgICAgICAgICAgIGVycm9yID0gdXBkYXRlRXJyb3I7CisgICAgfQogCiAgICAg
Z2VuZXJhdGVkS2V5UmVzZXR0ZXIucmVsZWFzZSgpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBs
eShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CkBAIC0x
MzAzLDYgKzEzMjMsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnRhc2tTaXplKCkpOwogICAgIHBlcmZvcm1LZXlEYXRh
Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIApAQCAt
MjA5Nyw5ICsyMTE4LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFz
ayhDcm9zc1RocmVhZFRhc2smJiB0YXNrKQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoQ3Jvc3NUaHJlYWRUYXNrJiYgdGFzaykKIHsKLSAgICBpZiAobV9i
YWNraW5nU3RvcmUpCi0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUt
PmRhdGFiYXNlU2l6ZSgpOwotCiAgICAgbV9kYXRhYmFzZVJlcGx5UXVldWUuYXBwZW5kKFdURk1v
dmUodGFzaykpOwogICAgIG1fc2VydmVyLT5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmV4ZWN1dGVOZXh0RGF0YWJh
c2VUYXNrUmVwbHkpKTsKIH0KQEAgLTIxNjQsOCArMjE4Miw5IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpCiAKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCi0gICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuY2xlYXIoKTsK
LSAgICBtX3NlcnZlci0+cmVzZXRTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpKTsKKyAg
ICBmb3IgKGF1dG8gc2l6ZSA6IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy52YWx1ZXMoKSkK
KyAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgc2l6ZSk7CisgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmNsZWFy
KCk7CiAKICAgICAvLyBFcnJvciBvdXQgYWxsIHRyYW5zYWN0aW9ucwogICAgIGZvciAoYXV0byYg
aWRlbnRpZmllciA6IGNvcHlUb1ZlY3RvcihtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMua2V5cygp
KSkKQEAgLTIyNDEsMzMgKzIyNjAsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlh
dGVDbG9zZUZvclVzZXJEZWxldGUoKQogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFs
RGVsZXRlQmFja2luZ1N0b3JlKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVwZGF0
ZVNwYWNlVXNlZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRl
bnRpZmllcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG9wdGlv
bmFsQ2FsbGJhY2tJZGVudGlmaWVyKSB7Ci0gICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciA9IG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyLnZhbHVlKCk7Ci0gICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5maW5kKGNhbGxiYWNrSWRl
bnRpZmllcik7Ci0gICAgICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNp
bmdUYXNrcy5lbmQoKSkgewotICAgICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFs
U3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAg
ICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLnJlbW92ZShpdGVyYXRvcik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB1aW50NjRfdCBkYXRhYmFzZVNpemUgPSBtX25ld0RhdGFi
YXNlU2l6ZTsKLSAgICBpZiAoZGF0YWJhc2VTaXplICE9IG1fY3VycmVudERhdGFiYXNlU2l6ZSkg
ewotICAgICAgICBpZiAoZGF0YWJhc2VTaXplID4gbV9jdXJyZW50RGF0YWJhc2VTaXplKQotICAg
ICAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4o
KSwgZGF0YWJhc2VTaXplIC0gbV9jdXJyZW50RGF0YWJhc2VTaXplKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmln
aW4oKSwgbV9jdXJyZW50RGF0YWJhc2VTaXplIC0gZGF0YWJhc2VTaXplKTsKLSAgICAgICAgbV9j
dXJyZW50RGF0YWJhc2VTaXplID0gZGF0YWJhc2VTaXplOwotICAgIH0KLX0KLQogdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZO
ZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLQogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Vycm9y
Q2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY2FsbGJhY2sg
fHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CiAgICAgaWYgKGNhbGxiYWNrKSB7CkBAIC0y
Mjc5LDggKzIyNzMsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxs
YmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1LZXlEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtleSkK
IHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAg
ICAgYXV0byBjYWxsYmFjayA9IG1fa2V5RGF0YUNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSWRlbnRp
Zmllcik7CiAgICAgQVNTRVJUKGNhbGxiYWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUp
OwogICAgIGlmIChjYWxsYmFjaykgewpAQCAtMjMyNSw4ICsyMzE3LDYgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUNvdW50Q2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNhbGxiYWNr
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5l
ZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAgICAgQVNTRVJUKG1fZXJyb3JDYWxsYmFja3Mu
Y29udGFpbnMoY2FsbGJhY2tJZGVudGlmaWVyKSk7CiAgICAgQVNTRVJUKG1fY2FsbGJhY2tRdWV1
ZS5sYXN0KCkgPT0gY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBtX2NhbGxiYWNrUXVldWUucmVt
b3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCA1M2IyMWRmZTRkMjFkYTU1ZmZj
YTZmMDZmYjA2YjIyNzVjMWVjZjhkLi4xMDRlMmY3YWIxZmFmNmU0ZGVkYmYyMjA1NDY5MTMyYTU2
OTYwYzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtMTE2LDggKzExNiw2IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaGFyZENsb3NlZEZvclVzZXJEZWxldGUoKSBjb25zdCB7IHJldHVybiBt
X2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlOyB9CiAKLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBj
b25zdDsKLQogICAgIHZvaWQgZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCk7CiAKIHByaXZhdGU6
CkBAIC0xNjAsNyArMTU4LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIERhdGFiYXNlIHRocmVhZCBv
cGVyYXRpb25zCiAgICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJik7Ci0gICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYpOworICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIHZvaWQgcGVy
Zm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQg
cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9p
ZCBiZWdpblRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUoY29uc3QgSURCVHJhbnNhY3Rpb25JbmZv
Jik7CkBAIC0xODgsNyArMTg2LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1haW4gdGhyZWFkIGNh
bGxiYWNrcwogICAgIHZvaWQgZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRW
ZXJzaW9uKTsKLSAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
bmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCBhY3R1YWxUYXNr
U2l6ZSwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZFBlcmZvcm1D
cmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVy
cm9yJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVs
ZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJv
ciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3Jt
UmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJF
cnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdO
YW1lKTsKQEAgLTIxMSw4ICsyMDksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUGVyZm9ybVVu
Y29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGRpZFNodXRkb3duRm9y
Q2xvc2UoKTsKIAotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNh
bGxiYWNrJiYsIHVpbnQ2NF90IHRhc2tTaXplID0gMCk7Ci0gICAgdWludDY0X3Qgc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmLCB1aW50NjRfdCB0YXNrU2l6ZSA9IDAp
OworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYp
OworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2sm
Jik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEdldEFsbFJlc3VsdHND
YWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoR2V0UmVz
dWx0Q2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKENv
dW50Q2FsbGJhY2smJik7CkBAIC0yNDksNyArMjQ3LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3QgdGFz
a1NpemUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChP
cHRpb25hbDxJREJFcnJvcj4mJik+JiYpOwogICAgIHZvaWQgd2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZVNwYWNlVXNl
ZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllciA9
IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90
IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICB2b2lkIGZpbmlzaFNwYWNlSW5j
cmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IGFjdHVhbFRhc2tTaXplKTsK
KworICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigp
OwogCiAgICAgUmVmPElEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAgSURCRGF0YWJhc2VJZGVudGlm
aWVyIG1faWRlbnRpZmllcjsKQEAgLTMwMiw3ICszMDMsNyBAQCBwcml2YXRlOgogCiAgICAgSGFz
aFNldDxJREJSZXNvdXJjZUlkZW50aWZpZXI+IG1fY3Vyc29yUHJlZmV0Y2hlczsKIAotICAgIEhh
c2hNYXA8dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrczsK
KyAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRh
c2tzOwogICAgIHVpbnQ2NF90IG1fY3VycmVudERhdGFiYXNlU2l6ZSB7IDAgfTsKICAgICB1aW50
NjRfdCBtX25ld0RhdGFiYXNlU2l6ZSB7IDAgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcAppbmRleCA2NTJkMGE4MTdm
NWM1M2M3MDM4M2YwMTRlMWVlYmExODBhMjY4ZDRjLi43Zjc5ZGM2ODdlMzg1OGE2OWZlNzU4MTNk
Y2VhNGZiMWNiZjg1ODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKQEAgLTMyLDE1ICszMiwyMSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUlEQkVycm9yOjpJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2Rl
PiBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitJREJFcnJvciBJREJFcnJvcjo6Y3JlYXRl
TnVsbEVycm9yKHVpbnQ2NF90IHRhc2tTaXplKQoreworICAgIHJldHVybiBJREJFcnJvcihXVEY6
Om51bGxvcHQsIFdURjo6bnVsbFN0cmluZygpLCB0YXNrU2l6ZSk7Cit9CisKK0lEQkVycm9yOjpJ
REJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIHVpbnQ2NF90IHRhc2tTaXplKQogICAgIDogbV9jb2RlKGNvZGUpCiAgICAgLCBtX21lc3Nh
Z2UobWVzc2FnZSkKKyAgICAsIG1fc2l6ZSh0YXNrU2l6ZSkKIHsKIH0KIAogSURCRXJyb3IgSURC
RXJyb3I6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElEQkVycm9yIHsgbV9j
b2RlLCBtX21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCkgfTsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBt
X2NvZGUsIG1fbWVzc2FnZS5pc29sYXRlZENvcHkoKSwgbV9zaXplIH07CiB9CiAKIFN0cmluZyBJ
REJFcnJvcjo6bmFtZSgpIGNvbnN0CkBAIC01Nyw2ICs2MywxMiBAQCBTdHJpbmcgSURCRXJyb3I6
Om1lc3NhZ2UoKSBjb25zdAogICAgIHJldHVybiBET01FeGNlcHRpb246Om1lc3NhZ2UobV9jb2Rl
LnZhbHVlKCkpOwogfQogCit1aW50NjRfdCBJREJFcnJvcjo6dGFza1NpemUoKSBjb25zdAorewor
ICAgIEFTU0VSVChpc051bGwoKSB8fCAoIWlzTnVsbCgpICYmICFtX3NpemUpKTsKKyAgICByZXR1
cm4gbV9zaXplOworfQorCiBSZWZQdHI8RE9NRXhjZXB0aW9uPiBJREJFcnJvcjo6dG9ET01FeGNl
cHRpb24oKSBjb25zdAogewogICAgIGlmICghbV9jb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaAppbmRleCAzYTk1YmIzODA1MGRl
YWIyOGMyZGMxYTdhZTY1ZmUyN2Y2YWY4ODU2Li5mM2M3YTA4ZDVjY2ZkOWZmZjI4NWU1M2FkZDJh
M2M2NzRlNTE5ODI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRXJyb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRXJyb3IuaApAQCAtMzUsNyArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIElEQkVycm9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNp
dCBJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSURCRXJy
b3IgY3JlYXRlTnVsbEVycm9yKHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBleHBsaWNpdCBJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9w
dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlID0geyB9LCB1aW50NjRfdCA9IDApOwogCiAgICAgc3Rh
dGljIElEQkVycm9yIHVzZXJEZWxldGVFcnJvcigpCiAgICAgewpAQCAtNTIsNiArNTMsNyBAQCBw
dWJsaWM6CiAgICAgT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gY29kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZTsgfQogICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICAgU3RyaW5nIG1lc3NhZ2Uo
KSBjb25zdDsKKyAgICB1aW50NjRfdCB0YXNrU2l6ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc051
bGwoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlOyB9CiAKQEAgLTYzLDYgKzY1LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBtX2NvZGU7CiAgICAgU3Ry
aW5nIG1fbWVzc2FnZTsKKyAgICB1aW50NjRfdCBtX3NpemU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380059</attachid>
            <date>2019-10-02 14:21:36 -0700</date>
            <delta_ts>2019-10-02 20:32:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202483-20191002142135.patch</filename>
            <type>text/plain</type>
            <size>38924</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY1ZDBmYjMwMTAyZWFk
YmNhZWI3ZmU3NjkzMzY4OTE3MzVlNzIwMi4uMmY1YTM4ZjkyMmU0ZTQ5YmU3NDg3ZTU2N2FjNTIx
MTdkNzAyZDUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDE5LTEwLTAyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogZXN0aW1h
dGUgc2l6ZSBpbmNyZWFzZSBhZnRlciB0YXNrIGV4ZWN1dGlvbiBpbnN0ZWFkIG9mIGNoZWNraW5n
IGZpbGUgc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAyNDgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXNlIGVzdGltYXRlZCB0YXNrIHNpemUoc3BhY2UgaW5jcmVhc2UgZm9yIHRhc2spIHBsdXMg
aW5pdGlhbCBkaXNrIHVzYWdlIHRvIHJlcHJlc2VudCBzcGFjZSB1c2VkIGJ5IEluZGV4ZWREQiwg
CisgICAgICAgIHRvIHNhdmUgdGhlIGNvc3Qgb2YgZmlsZSBzeXN0ZW0gY2FsbHMgZm9yIGdldHRp
bmcgZmlsZSBzaXplLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cDogYWRkIHRhc2sgc2l6ZSBlc3RpbWF0ZSBhbmQgcmV0dXJuIGl0IGluIHRoZSByZXN1bHQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVu
Y2hlY2tlZFB1dEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
YWRkUmVjb3JkKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHA6IHdlIGVzdGltYXRlIHRhc2sgc2l6ZSwgcmVxdWVzdCBzcGFjZSBmcm9t
IFN0b3JhZ2VRdW90YU1hbmFnZXIsCisgICAgICAgIGFuZCBob2xkIHRoZSBzcGFjZSBncmFudGVk
IHdoZW4gdGFzayBpcyBiZWluZyBleGVjdXRlZCBpbiB0aGUgYmFja2dyb3VuZCB0aHJlYWQuIEFm
dGVyIHRhc2sgaXMgZG9uZSwgd2Ugd2lsbCAKKyAgICAgICAgZ2V0IGEgbW9yZSBhY2N1cmF0ZSB0
YXNrIHNpemUsIHdoaWNoIGlzIGVzdGltYXRlZCBkdXJpbmcgZXhlY3V0aW9uLCB1cGRhdGUgdXNh
Z2Ugd2l0aCB0aGF0IHNpemUsIGFuZCByZWxlYXNlIAorICAgICAgICB0aGUgc3BhY2UgaGVsZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3Bh
Y2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpzaHV0ZG93bkZvckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmRpZFNodXRkb3duRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdlbmVyYXRlVW5p
cXVlQ2FsbGJhY2tJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNr
aW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1D
cmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1
dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFza1Jl
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Omlt
bWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmZvcmdl
dEVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpnZW5lcmF0ZVVu
aXF1ZUNhbGxiYWNrSWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
Lmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6OmNyZWF0ZU51bGxFcnJvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJFcnJvcjo6SURCRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6
Omlzb2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6dGFza1Np
emUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5o
OiBhZGQgYSBtZW1iZXIgbV9zaXplIHRvIElEQkVycm9yIHRvIHJlcG9ydCB0YXNrIHNpemUodXNh
Z2UgaW5jcmVhc2UpIGlmIAorICAgICAgICB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZChl
cnJvciBpcyBudWxsKS4KKyAgICAgICAgKFdlYkNvcmU6OklEQkVycm9yOjpJREJFcnJvcik6CisK
IDIwMTktMTAtMDIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHIyNTA1OTUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IDI3OWIzMTU5MTZiZDM5ZDhkNGE4NjA2ZTcwNWRiN2U1NWQxOWFl
NzAuLmI1NzY0ZTI4MjNhZWY5ZDMxN2FkMzA3ODMwZWNiNWVhNTQ4MjkxZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC05ODQsNyArOTg0LDggQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHQKIAogICAgIG1fZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVjdFN0b3Jl
KGluZm8pOwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRfdCBzaXplSW5j
cmVhc2UgPSBpbmZvLm5hbWUoKS5zaXplSW5CeXRlcygpICsga2V5UGF0aEJsb2ItPnNpemUoKTsK
KyAgICByZXR1cm4gSURCRXJyb3I6OmNyZWF0ZU51bGxFcnJvcihzaXplSW5jcmVhc2UpOwogfQog
CiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIpCkBAIC0xMTA1LDkgKzExMDYsMTMgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHQKICAgICAgICAgfQogICAgIH0KIAorICAgIFN0cmluZyBvbGROYW1lOworICAg
IGlmIChhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0
aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKSkKKyAgICAgICAgb2xkTmFtZSA9
IG9iamVjdFN0b3JlSW5mby0+bmFtZSgpOwogICAgIG1fZGF0YWJhc2VJbmZvLT5yZW5hbWVPYmpl
Y3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpOwogCi0gICAgcmV0dXJuIElE
QkVycm9yIHsgfTsKKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBuZXdOYW1lLnNpemVJbkJ5
dGVzKCkgPiBvbGROYW1lLnNpemVJbkJ5dGVzKCkgPyBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgLSBv
bGROYW1lLnNpemVJbkJ5dGVzKCkgOiAwOworICAgIHJldHVybiBJREJFcnJvcjo6Y3JlYXRlTnVs
bEVycm9yKHNpemVJbmNyZWFzZSk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCkKQEAgLTExODQsNiArMTE4OSw3
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGFkZCBpbmRleCAnJXMnIHRvIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBpbmZvLm5hbWUo
KS51dGY4KCkuZGF0YSgpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFz
dEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJV
bmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNlIl9zIH07CiAgICAgfQorICAgIHVpbnQ2
NF90IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJbkJ5dGVzKCkgKyBrZXlQYXRoQmxv
Yi0+c2l6ZSgpOwogCiAgICAgLy8gV3JpdGUgaW5kZXggcmVjb3JkcyBmb3IgYW55IHJlY29yZHMg
dGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoaXMgb2JqZWN0IHN0b3JlLgogCkBAIC0xMjE0LDYgKzEy
MjAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogCiAgICAgICAgICAgICByZXR1cm4gZXJy
b3I7CiAgICAgICAgIH0KKyAgICAgICAgc2l6ZUluY3JlYXNlICs9IGVycm9yLnRhc2tTaXplKCk7
CiAKICAgICAgICAgaWYgKCFjdXJzb3ItPmFkdmFuY2UoMSkpIHsKICAgICAgICAgICAgIExPR19F
UlJPUigiRXJyb3IgYWR2YW5jaW5nIGN1cnNvciB3aGlsZSBpbmRleGluZyBleGlzdGluZyByZWNv
cmRzIGZvciBuZXcgaW5kZXguIik7CkBAIC0xMjMxLDcgKzEyMzgsNyBAQCBJREJFcnJvciBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhYwogICAgIEFTU0VSVChvYmplY3RTdG9yZSk7CiAgICAgb2JqZWN0U3RvcmUtPmFk
ZEV4aXN0aW5nSW5kZXgoaW5mbyk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHJl
dHVybiBJREJFcnJvcjo6Y3JlYXRlTnVsbEVycm9yKHNpemVJbmNyZWFzZSk7CiB9CiAKIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkSGFzSW5kZXhSZWNvcmQoY29uc3Qg
SURCSW5kZXhJbmZvJiBpbmZvLCBjb25zdCBJREJLZXlEYXRhJiBpbmRleEtleSwgYm9vbCYgaGFz
UmVjb3JkKQpAQCAtMTI5MSw2ICsxMjk4LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGMKICAg
ICAgICAgfQogICAgIH0KIAorICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IDA7CiAgICAgZm9y
IChhdXRvJiBpbmRleEtleSA6IGluZGV4S2V5cykgewogICAgICAgICBpZiAoIWluZGV4S2V5Lmlz
VmFsaWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTI5OSw5ICsxMzA3LDEwIEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3Qg
SURCSW5kZXhJbmZvJiBpbmZvLCBjCiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBw
dXQgaW5kZXggcmVjb3JkIGZvciBuZXdseSBjcmVhdGVkIGluZGV4Iik7CiAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgc2l6ZUluY3JlYXNlICs9IGVycm9yLnRh
c2tTaXplKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICByZXR1cm4g
SURCRXJyb3I6OmNyZWF0ZU51bGxFcnJvcihzaXplSW5jcmVhc2UpOwogfQogCiBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiBr
ZXlWYWx1ZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYgaW5kZXhLZXksIGludDY0X3QgcmVj
b3JkSUQpCkBAIC0xMzM0LDcgKzEzNDMsOCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRfdCBz
aXplSW5jcmVhc2UgPSBpbmRleEtleUJ1ZmZlci0+c2l6ZSgpICsgdmFsdWVCdWZmZXItPnNpemUo
KTsKKyAgICByZXR1cm4gSURCRXJyb3I6OmNyZWF0ZU51bGxFcnJvcihzaXplSW5jcmVhc2UpOwog
fQogCiAKQEAgLTE0MTksOSArMTQyOSwxMSBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OnJlbmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAg
ICAgICB9CiAgICAgfQogCisgICAgYXV0byBvbGROYW1lID0gaW5kZXhJbmZvLT5uYW1lKCk7CiAg
ICAgaW5kZXhJbmZvLT5yZW5hbWUobmV3TmFtZSk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9
OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IG5ld05hbWUuc2l6ZUluQnl0ZXMoKSA+IG9s
ZE5hbWUuc2l6ZUluQnl0ZXMoKSA/IG5ld05hbWUuc2l6ZUluQnl0ZXMoKSAtIG9sZE5hbWUuc2l6
ZUluQnl0ZXMoKSA6IDA7CisgICAgcmV0dXJuIElEQkVycm9yOjpjcmVhdGVOdWxsRXJyb3Ioc2l6
ZUluY3JlYXNlKTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjprZXlFeGlz
dHNJbk9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJLZXlEYXRhJiBrZXlE
YXRhLCBib29sJiBrZXlFeGlzdHMpCkBAIC0xNjg4LDYgKzE3MDAsNyBAQCBJREJFcnJvciBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURC
T2JqZWN0U3RvcgogCiAgICAgSURCRXJyb3IgZXJyb3I7CiAgICAgYm9vbCBhbnlSZWNvcmRzU3Vj
Y2VlZGVkID0gZmFsc2U7CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gMDsKICAgICBmb3Ig
KGF1dG8mIGluZGV4IDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygpKSB7CiAgICAgICAgIEluZGV4
S2V5IGluZGV4S2V5OwogICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUobV9zZXJpYWxp
emF0aW9uQ29udGV4dC0+ZXhlY1N0YXRlKCksIGluZGV4LCBqc1ZhbHVlLCBpbmRleEtleSwgaW5m
by5rZXlQYXRoKCksIGtleSk7CkBAIC0xNjk5LDYgKzE3MTIsNyBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2Jq
ZWN0U3RvcgogICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7
CiAKKyAgICAgICAgc2l6ZUluY3JlYXNlICs9IGVycm9yLnRhc2tTaXplKCk7CiAgICAgICAgIGFu
eVJlY29yZHNTdWNjZWVkZWQgPSB0cnVlOwogICAgIH0KIApAQCAtMTcxNiw3ICsxNzMwLDEwIEBA
IElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJl
Y29yZChjb25zdCBJREJPYmplY3RTdG9yCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4g
ZXJyb3I7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGVycm9yOwor
CisgICAgcmV0dXJuIElEQkVycm9yOjpjcmVhdGVOdWxsRXJyb3Ioc2l6ZUluY3JlYXNlKTsKIH0K
IAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0
b3JlSW5mbyYgb2JqZWN0U3RvcmVJbmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25z
dCBJREJWYWx1ZSYgdmFsdWUpCkBAIC0xNzU3LDYgKzE3NzQsNyBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aQogCiAgICAgICAgIHJlY29yZElEID0gbV9zcWxpdGVEQi0+bGFzdEluc2VydFJvd0lE
KCk7CiAgICAgfQorICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGtleUJ1ZmZlci0+c2l6ZSgp
ICsgdmFsdWUuZGF0YSgpLmRhdGEoKS0+c2l6ZSgpOwogCiAgICAgYXV0byBlcnJvciA9IHVwZGF0
ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQob2JqZWN0U3RvcmVJbmZvLCBrZXlEYXRhLCB2YWx1ZS5k
YXRhKCksIHJlY29yZElEKTsKIApAQCAtMTc3Miw2ICsxNzkwLDcgQEAgSURCRXJyb3IgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGkKIAogICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQorICAgIHNpemVJbmNyZWFz
ZSArPSBlcnJvci50YXNrU2l6ZSgpOwogCiAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JV
UkxzID0gdmFsdWUuYmxvYlVSTHMoKTsKICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZp
bGVzID0gdmFsdWUuYmxvYkZpbGVQYXRocygpOwpAQCAtMTc4Nyw2ICsxODA2LDcgQEAgSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3JkIEJsb2IgcmVjb3JkIGluIGRhdGFiYXNlIl9zIH07
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgc2l6ZUluY3JlYXNlICs9IHVybC5z
aXplSW5CeXRlcygpOwogICAgICAgICBpbnQ2NF90IHBvdGVudGlhbEZpbGVOYW1lSW50ZWdlciA9
IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogCiAgICAgICAgIC8vIElmIHdlIGFscmVh
ZHkgaGF2ZSBhIGZpbGUgZm9yIHRoaXMgYmxvYlVSTCwgbm90aGluZyBsZWZ0IHRvIGRvLgpAQCAt
MTgyNiw3ICsxODQ2LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNv
cmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgIHRyYW5zYWN0
aW9uLT5ub3RpZnlDdXJzb3JzT2ZDaGFuZ2VzKG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCkp
OwogCi0gICAgcmV0dXJuIGVycm9yOworICAgIHJldHVybiBJREJFcnJvcjo6Y3JlYXRlTnVsbEVy
cm9yKHNpemVJbmNyZWFzZSk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Z2V0QmxvYlJlY29yZHNGb3JPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlUmVj
b3JkLCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZVBh
dGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZDg1YjAwMTQ4YTJhNWMzMDYwYmE1
MGMwZTEyMjA3NWM2MzViYmM0Zi4uNmE2ZWJjMGNjYjJiZjc4M2E2YmRiZDQ1ZTVlYzllZWIxOWQ4
MjQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC01NSw2ICs1NSw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAogc3RhdGljIGNvbnN0IHVp
bnQ2NF90IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgPSA0Oworc3RhdGljIGNvbnN0IHVpbnQ2
NF90IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdCA9IDEwICogS0I7CiAKIHN0YXRpYyBpbmxpbmUg
dWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCiB7CkBAIC0y
MDcsNiArMjA4LDIzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3Bh
Y2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3RpCiAgICAgcmVxdWVzdFNwYWNl
KHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIs
IHVpbnQ2NF90IHRhc2tTaXplKQoreworICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNw
YWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKKyAgICBtX3BlbmRpbmdT
cGFjZUluY3JlYXNlVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKK30KKwordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRp
ZmllciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1f
cGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIpOworICAgIGlmIChpdGVy
YXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5kKCkpIHsKKyAgICAgICAgbV9z
ZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwg
aXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgaWYgKGFjdHVhbFRhc2tTaXplKQorICAgICAgICAg
ICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgYWN0
dWFsVGFza1NpemUpOworICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVtb3Zl
KGl0ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
dXJyZW50T3Blbk9wZXJhdGlvbigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uICglcCkiLCB0aGlzKTsK
QEAgLTIxOSw3ICsyMzcsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVu
dE9wZW5PcGVyYXRpb24oKQogICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSB0
cnVlOwogICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhlciB0aGlzIGlzIGFuIGV4
aXN0aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgogICAgICAgICAgICAgLy8gV2Ugc2V0IGEgc21hbGwg
Y29zdCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFuIGluZmluaXRlIG51bWJl
ciBvZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVu
dGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CisgICAgICAg
ICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGVmYXVs
dE9wZW5PcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwg
c2l6ZSA9IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdF0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7
CiAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogCkBAIC0yMzUsNyArMjUzLDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVu
QmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBj
YWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCBzaXpl
KTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwg
bV9pZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIH0pOwogICAgICAgICB9CkBAIC0zNDgsNyArMzY4LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRl
bnRpZmkKIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICBtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9i
YWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0g
bnVsbHB0cjsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5z
YWN0aW9ucyA9IGZhbHNlOwpAQCAtMzY0LDcgKzM4Myw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50
aWZpCiAKICAgICAgICAgZGVsZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8udmVyc2lvbigpOwog
ICAgICAgICBiYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBtX25l
d0RhdGFiYXNlU2l6ZSA9IGJhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CiAgICAgfQogCiAg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUsIGRlbGV0ZWRWZXJzaW9uKSk7
CkBAIC00MDAsMTAgKzQxOCw4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9y
Q2xvc2UoKQogCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnNo
dXRkb3duRm9yQ2xvc2UiKTsKIAotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgIGlmICht
X2JhY2tpbmdTdG9yZSkKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNsb3NlKCk7Ci0gICAgICAg
IG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotICAg
IH0KIAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9yZVN1
cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CkBAIC00MjIsOCArNDM4LDYg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSgpCiB7CiAgICAg
QVNTRVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzRW1wdHkoKSk7CiAgICAgbV9kYXRhYmFzZVJl
cGx5UXVldWUua2lsbCgpOwotCi0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsKIH0KIAog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRl
bGV0ZWRWZXJzaW9uKQpAQCAtNDU1LDggKzQ2OSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbikKICAgICAgICAg
bV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgdXBkYXRlU3Bh
Y2VVc2VkSWZOZWVkZWQoKTsKLQogICAgIG1fZGVsZXRlQmFja2luZ1N0b3JlSW5Qcm9ncmVzcyA9
IGZhbHNlOwogCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCkBAIC01MzcsMTQg
KzU0OSwxNCBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjphbGxDb25uZWN0aW9uc0FyZUNsb3Nl
ZE9yQ2xvc2luZygpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1aW50NjRf
dCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpCit1aW50NjRfdCBVbmlxdWVJREJE
YXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgc3RhdGljIHVpbnQ2NF90IGN1cnJlbnRJRCA9IDA7CiAg
ICAgcmV0dXJuICsrY3VycmVudElEOwogfQogCi11aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6
c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0
X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBpZiAobV9oYXJkQ2xv
c2VkRm9yVXNlckRlbGV0ZSkgewogICAgICAgICBjYWxsYmFjayhJREJFcnJvcjo6dXNlckRlbGV0
ZUVycm9yKCkpOwpAQCAtNTU1LDE2ICs1NjcsMTEgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJh
c2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2ssIHUK
ICAgICBBU1NFUlQoIW1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAg
IG1fZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKIAot
ICAgIGlmICh0YXNrU2l6ZSkgewotICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VQb3RlbnRpYWxT
cGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAgICAgIG1fcGVu
ZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci0gICAg
fQotCiAgICAgbV9jYWxsYmFja1F1ZXVlLmFwcGVuZChpZGVudGlmaWVyKTsKICAgICByZXR1cm4g
aWRlbnRpZmllcjsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0X3QgdGFza1Np
emUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KEtleURhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JV
c2VyRGVsZXRlKSB7CiAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yOjp1c2VyRGVsZXRlRXJyb3Io
KSwgeyB9KTsKQEAgLTU3NSwxMSArNTgyLDYgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6
OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywKICAg
ICBBU1NFUlQoIW1fa2V5RGF0YUNhbGxiYWNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7CiAgICAg
bV9rZXlEYXRhQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAK
LSAgICBpZiAodGFza1NpemUpIHsKLSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFs
U3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgICAgICBtX3Bl
bmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotICAg
IH0KLQogICAgIG1fY2FsbGJhY2tRdWV1ZS5hcHBlbmQoaWRlbnRpZmllcik7CiAgICAgcmV0dXJu
IGlkZW50aWZpZXI7CiB9CkBAIC03ODAsNyArNzgyLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW8KICAgICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChhZG9wdFJlZihjb25uZWN0aW9u
LmxlYWtSZWYoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0
b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3ZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVy
JiBpZGVudGlmaWVyLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwpAQCAtNzkyLDE1ICs3OTQsMTcg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRh
YmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIKIAogICAgIC8vIFF1b3RhVXNlciBzaG91bGQgaGF2
ZSBpbml0aWxpYXplZCBzdG9yYWdlIHVzYWdlLCB3aGljaCBjb250YWlucyB0aGUKICAgICAvLyBz
aXplIG9mIHRoaXMgZGF0YWJhc2UuCi0gICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gbV9iYWNr
aW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOworICAgIGF1dG8gZGF0YWJhc2VTaXplQmVmb3JlT3Bl
biA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKIAogICAgIElEQkRhdGFiYXNlSW5m
byBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRPckVz
dGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0gICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CisgICAgYXV0byBkYXRh
YmFzZVNpemVBZnRlck9wZW4gPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CisgICAg
YXV0byBhY3R1YWxUYXNrU2l6ZSA9IGRhdGFiYXNlU2l6ZUFmdGVyT3BlbiA+IGRhdGFiYXNlU2l6
ZUJlZm9yZU9wZW4gPyAoZGF0YWJhc2VTaXplQWZ0ZXJPcGVuIC0gZGF0YWJhc2VTaXplQmVmb3Jl
T3BlbikgOiAwOworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJh
c2VJbmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUsIGNhbGxiYWNrSWRlbnRpZmllcikpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRh
dGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8s
IGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUsIHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5n
U3RvcmUiKTsKQEAgLTgxMSw3ICs4MTUsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSQogICAg
IEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09wZW5pbmdCYWNraW5n
U3RvcmUgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7CisgICAgZmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBhY3R1YWxUYXNrU2l6ZSk7
CiAKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0dXJuOwpA
QCAtODM2LDEwICs4NDAsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0
U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKIAogdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3Qg
dGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25z
dCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0g
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3Zl
KGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNh
bGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJ
RCkKICAgICAgICAgcmV0dXJuOwogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFj
a0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBj
YWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAK
QEAgLTg0OSw5ICs4NTQsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExPRyhJbmRl
eGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUi
KTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmNy
ZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7CisgICAgYXV0byBl
cnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGluZm8pOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGlu
Zm8pKTsKIH0KIApAQCAtODYwLDEwICs4NjQsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAg
aWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IudGFza1NpemUoKSk7CisKKyAgICBJREJFcnJvciBjcmVhdGVFcnJv
cjsKKyAgICBpZiAoY3JlYXRlRXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZv
LT5hZGRFeGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwogCi0gICAgcGVyZm9ybUVycm9yQ2FsbGJh
Y2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2so
Y2FsbGJhY2tJZGVudGlmaWVyLCBjcmVhdGVFcnJvcik7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXJyb3JDYWxsYmFjayBj
YWxsYmFjaykKQEAgLTkzNSw3ICs5NDIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5h
bWVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogCiB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1
aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1l
LCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAg
ICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUo
Y2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIApAQCAt
OTQ1LDYgKzk1Miw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3Jl
QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXpl
KTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3
TmFtZSkpOwogfQogCkBAIC05NTQsOSArOTYyLDggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY28K
ICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFt
ZU9iamVjdFN0b3JlIik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFj
a2luZ1N0b3JlLT5yZW5hbWVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVj
dFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CisgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5yZW5hbWVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBJREJFcnJvciBlcnJvcjsKICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBl
cnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTk2NSwxMCAr
OTcyLDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RT
dG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUiKTsKIAotICAgIGlmIChlcnJvci5pc051bGwoKSkKKyAg
ICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnRhc2tT
aXplKCkpOworCisgICAgSURCRXJyb3IgcmVuYW1lRXJyb3I7CisgICAgaWYgKHJlbmFtZUVycm9y
LmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAotICAgIHBlcmZvcm1FcnJvckNhbGxiYWNr
KGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOworICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNh
bGxiYWNrSWRlbnRpZmllciwgcmVuYW1lRXJyb3IpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpjbGVhck9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9yQ2FsbGJhY2sgY2Fs
bGJhY2spCkBAIC0xMDMwLDkgKzEwNDAsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3Jl
YXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGMKIAog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0
X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBj
b25zdCBJREJJbmRleEluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkK
ICAgICAgICAgcmV0dXJuOworCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lE
LCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lE
LCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKQEAgLTEwNjYs
NiArMTA3OCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRl
eCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgICAgIG9iamVjdFN0b3Jl
SW5mby0+YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKICAgICB9CiAKKyAgICBmaW5pc2hTcGFjZUlu
Y3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnRhc2tTaXplKCkpOwogICAgIHBl
cmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCkBAIC0x
MTQ3LDcgKzExNjAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQogCiB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1Np
emUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3Io
V1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xMTYzLDYgKzExNzYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJ
bmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lE
LCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lE
LCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQogCkBAIC0xMTcyLDkgKzExODYsOCBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdT
dG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOwor
ICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+cmVuYW1lSW5kZXgodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFt
ZSk7CiAKLSAgICBJREJFcnJvciBlcnJvcjsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1S
ZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtMTE4Myw3ICsxMTk2LDEw
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UmVuYW1lSW5kZXgiKTsKIAotICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgIGZpbmlzaFNw
YWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IudGFza1NpemUoKSk7CisK
KyAgICBJREJFcnJvciByZW5hbWVFcnJvcjsKKyAgICBpZiAocmVuYW1lRXJyb3IuaXNOdWxsKCkp
IHsKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9G
b3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgICAgIEFT
U0VSVChvYmplY3RTdG9yZUluZm8pOwogICAgICAgICBpZiAob2JqZWN0U3RvcmVJbmZvKSB7CkBA
IC0xMTkzLDcgKzEyMDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVu
YW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJv
cik7CisgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCByZW5hbWVF
cnJvcik7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVx
dWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1
ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5
RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQpAQCAtMTIxMyw5ICsxMjI5LDEwIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBjb25zCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90
YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
dGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNh
bGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKKyAgICBzdGFydFNwYWNl
SW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigp
LCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92
ZXJ3cml0ZU1vZGUpKTsKIH0KIApAQCAtMTI5MSw4ICsxMzA4LDExIEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAob3ZlcndyaXRlTW9k
ZSAhPSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vy
c29yICYmIG9iamVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmIGtleURhdGEudHlwZSgp
ID09IEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyKQotICAgICAgICBlcnJvciA9IG1fYmFja2lu
Z1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1iZXIoKSk7CisgICAgaWYgKG92
ZXJ3cml0ZU1vZGUgIT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3
cml0ZUZvckN1cnNvciAmJiBvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXlE
YXRhLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJlcikgeworICAgICAgICBhdXRv
IHVwZGF0ZUVycm9yID0gbV9iYWNraW5nU3RvcmUtPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yTnVt
YmVyKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlEYXRh
Lm51bWJlcigpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVFcnJvci5pc051bGwoKSkKKyAgICAgICAg
ICAgIGVycm9yID0gdXBkYXRlRXJyb3I7CisgICAgfQogCiAgICAgZ2VuZXJhdGVkS2V5UmVzZXR0
ZXIucmVsZWFzZSgpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CkBAIC0xMzAzLDYgKzEzMjMsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9y
QWRkIik7CiAKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLnRhc2tTaXplKCkpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIApAQCAtMjA5Nyw5ICsyMTE4LDYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFzayhDcm9zc1RocmVhZFRhc2sm
JiB0YXNrKQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHko
Q3Jvc3NUaHJlYWRUYXNrJiYgdGFzaykKIHsKLSAgICBpZiAobV9iYWNraW5nU3RvcmUpCi0gICAg
ICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwot
CiAgICAgbV9kYXRhYmFzZVJlcGx5UXVldWUuYXBwZW5kKFdURk1vdmUodGFzaykpOwogICAgIG1f
c2VydmVyLT5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmV4ZWN1dGVOZXh0RGF0YWJhc2VUYXNrUmVwbHkpKTsKIH0K
QEAgLTIxNjQsOCArMjE4Miw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNs
b3NlRm9yVXNlckRlbGV0ZSgpCiAKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAg
bV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuY2xlYXIoKTsKLSAgICBtX3NlcnZlci0+cmVz
ZXRTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpKTsKKyAgICBmb3IgKGF1dG8gc2l6ZSA6
IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy52YWx1ZXMoKSkKKyAgICAgICAgbV9zZXJ2ZXIt
PmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgc2l6ZSk7
CisgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmNsZWFyKCk7CiAKICAgICAvLyBFcnJv
ciBvdXQgYWxsIHRyYW5zYWN0aW9ucwogICAgIGZvciAoYXV0byYgaWRlbnRpZmllciA6IGNvcHlU
b1ZlY3RvcihtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMua2V5cygpKSkKQEAgLTIyNDEsMzMgKzIy
NjAsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxl
dGUoKQogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3Jl
KSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVwZGF0ZVNwYWNlVXNlZElmTmVlZGVk
KE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllcikKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlm
aWVyKSB7Ci0gICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciA9IG9wdGlvbmFsQ2Fs
bGJhY2tJZGVudGlmaWVyLnZhbHVlKCk7Ci0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRp
bmdTcGFjZUluY3JlYXNpbmdUYXNrcy5maW5kKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0gICAgICAg
IGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5lbmQoKSkgewot
ICAgICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRp
Zmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgICAgIG1fcGVuZGluZ1Nw
YWNlSW5jcmVhc2luZ1Rhc2tzLnJlbW92ZShpdGVyYXRvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB1aW50NjRfdCBkYXRhYmFzZVNpemUgPSBtX25ld0RhdGFiYXNlU2l6ZTsKLSAgICBpZiAo
ZGF0YWJhc2VTaXplICE9IG1fY3VycmVudERhdGFiYXNlU2l6ZSkgewotICAgICAgICBpZiAoZGF0
YWJhc2VTaXplID4gbV9jdXJyZW50RGF0YWJhc2VTaXplKQotICAgICAgICAgICAgbV9zZXJ2ZXIt
PmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGF0YWJhc2VTaXplIC0g
bV9jdXJyZW50RGF0YWJhc2VTaXplKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zZXJ2
ZXItPmRlY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgbV9jdXJyZW50RGF0
YWJhc2VTaXplIC0gZGF0YWJhc2VTaXplKTsKLSAgICAgICAgbV9jdXJyZW50RGF0YWJhc2VTaXpl
ID0gZGF0YWJhc2VTaXplOwotICAgIH0KLX0KLQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJF
cnJvciYgZXJyb3IpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoY2FsbGJhY2tJZGVu
dGlmaWVyKTsKLQogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Vycm9yQ2FsbGJhY2tzLnRha2UoY2Fs
bGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY2FsbGJhY2sgfHwgbV9oYXJkQ2xvc2VkRm9y
VXNlckRlbGV0ZSk7CiAgICAgaWYgKGNhbGxiYWNrKSB7CkBAIC0yMjc5LDggKzIyNzMsNiBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1L
ZXlEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJv
ciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKIHsKLSAgICB1cGRhdGVTcGFj
ZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAgICAgYXV0byBjYWxsYmFjayA9
IG1fa2V5RGF0YUNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgQVNTRVJU
KGNhbGxiYWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogICAgIGlmIChjYWxsYmFj
aykgewpAQCAtMjMyNSw4ICsyMzE3LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUNvdW50Q2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogCiB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllcikKIHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50
aWZpZXIpOwotCiAgICAgQVNTRVJUKG1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMoY2FsbGJhY2tJ
ZGVudGlmaWVyKSk7CiAgICAgQVNTRVJUKG1fY2FsbGJhY2tRdWV1ZS5sYXN0KCkgPT0gY2FsbGJh
Y2tJZGVudGlmaWVyKTsKICAgICBtX2NhbGxiYWNrUXVldWUucmVtb3ZlTGFzdCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaAppbmRleCA1M2IyMWRmZTRkMjFkYTU1ZmZjYTZmMDZmYjA2YjIyNzVjMWVj
ZjhkLi4xMDRlMmY3YWIxZmFmNmU0ZGVkYmYyMjA1NDY5MTMyYTU2OTYwYzg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaApAQCAtMTE2LDggKzExNiw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFy
ZENsb3NlZEZvclVzZXJEZWxldGUoKSBjb25zdCB7IHJldHVybiBtX2hhcmRDbG9zZWRGb3JVc2Vy
RGVsZXRlOyB9CiAKLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdDsKLQogICAgIHZvaWQg
ZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCk7CiAKIHByaXZhdGU6CkBAIC0xNjAsNyArMTU4LDcg
QEAgcHJpdmF0ZToKIAogICAgIC8vIERhdGFiYXNlIHRocmVhZCBvcGVyYXRpb25zCiAgICAgdm9p
ZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7Ci0gICAg
dm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOworICAg
IHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImLCB1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybUNvbW1pdFRyYW5zYWN0
aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybUFib3J0VHJhbnNh
Y3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBiZWdpblRyYW5zYWN0aW9u
SW5CYWNraW5nU3RvcmUoY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJik7CkBAIC0xODgsNyArMTg2
LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1haW4gdGhyZWFkIGNhbGxiYWNrcwogICAgIHZvaWQg
ZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKTsKLSAgICB2b2lk
IGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJy
b3ImKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZv
JiwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCBhY3R1YWxUYXNrU2l6ZSwgdWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKQEAgLTIxMSw4ICsy
MDksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVC
YWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGRpZFNodXRkb3duRm9yQ2xvc2UoKTsKIAotICAgIHVp
bnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYsIHVpbnQ2NF90
IHRhc2tTaXplID0gMCk7Ci0gICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtl
eURhdGFDYWxsYmFjayYmLCB1aW50NjRfdCB0YXNrU2l6ZSA9IDApOworICAgIHVpbnQ2NF90IHN0
b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYpOworICAgIHVpbnQ2NF90IHN0
b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qg
c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEdldEFsbFJlc3VsdHNDYWxsYmFjayYmKTsKICAgICB1
aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoR2V0UmVzdWx0Q2FsbGJhY2smJik7CiAg
ICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKENvdW50Q2FsbGJhY2smJik7CkBA
IC0yNDksNyArMjQ3LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlcXVlc3RTcGFjZShVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIq
IGVycm9yTWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxJREJFcnJvcj4m
Jik+JiYpOwogICAgIHZvaWQgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24oVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8SURC
RXJyb3I+JiYpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKE9wdGlvbmFs
PHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllciA9IFdURjo6bnVsbG9wdCk7Cisg
ICAgdm9pZCBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2
NF90IHRhc2tTaXplKTsKKyAgICB2b2lkIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90
IGlkZW50aWZpZXIsIHVpbnQ2NF90IGFjdHVhbFRhc2tTaXplKTsKKworICAgIHN0YXRpYyB1aW50
NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpOwogCiAgICAgUmVmPElEQlNl
cnZlcj4gbV9zZXJ2ZXI7CiAgICAgSURCRGF0YWJhc2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsK
QEAgLTMwMiw3ICszMDMsNyBAQCBwcml2YXRlOgogCiAgICAgSGFzaFNldDxJREJSZXNvdXJjZUlk
ZW50aWZpZXI+IG1fY3Vyc29yUHJlZmV0Y2hlczsKIAotICAgIEhhc2hNYXA8dWludDY0X3QsIHVp
bnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrczsKKyAgICBIYXNoTWFwPHVpbnQ2
NF90LCB1aW50NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzOwogICAgIHVpbnQ2NF90
IG1fY3VycmVudERhdGFiYXNlU2l6ZSB7IDAgfTsKICAgICB1aW50NjRfdCBtX25ld0RhdGFiYXNl
U2l6ZSB7IDAgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0lEQkVycm9yLmNwcAppbmRleCA2NTJkMGE4MTdmNWM1M2M3MDM4M2YwMTRlMWVl
YmExODBhMjY4ZDRjLi43Zjc5ZGM2ODdlMzg1OGE2OWZlNzU4MTNkY2VhNGZiMWNiZjg1ODM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJy
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJF
cnJvci5jcHAKQEAgLTMyLDE1ICszMiwyMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlE
QkVycm9yOjpJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBjb2RlLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCitJREJFcnJvciBJREJFcnJvcjo6Y3JlYXRlTnVsbEVycm9yKHVpbnQ2NF90
IHRhc2tTaXplKQoreworICAgIHJldHVybiBJREJFcnJvcihXVEY6Om51bGxvcHQsIFdURjo6bnVs
bFN0cmluZygpLCB0YXNrU2l6ZSk7Cit9CisKK0lEQkVycm9yOjpJREJFcnJvcihPcHRpb25hbDxF
eGNlcHRpb25Db2RlPiBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVpbnQ2NF90IHRhc2tT
aXplKQogICAgIDogbV9jb2RlKGNvZGUpCiAgICAgLCBtX21lc3NhZ2UobWVzc2FnZSkKKyAgICAs
IG1fc2l6ZSh0YXNrU2l6ZSkKIHsKIH0KIAogSURCRXJyb3IgSURCRXJyb3I6Omlzb2xhdGVkQ29w
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElEQkVycm9yIHsgbV9jb2RlLCBtX21lc3NhZ2UuaXNv
bGF0ZWRDb3B5KCkgfTsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBtX2NvZGUsIG1fbWVzc2FnZS5p
c29sYXRlZENvcHkoKSwgbV9zaXplIH07CiB9CiAKIFN0cmluZyBJREJFcnJvcjo6bmFtZSgpIGNv
bnN0CkBAIC01Nyw2ICs2MywxMiBAQCBTdHJpbmcgSURCRXJyb3I6Om1lc3NhZ2UoKSBjb25zdAog
ICAgIHJldHVybiBET01FeGNlcHRpb246Om1lc3NhZ2UobV9jb2RlLnZhbHVlKCkpOwogfQogCit1
aW50NjRfdCBJREJFcnJvcjo6dGFza1NpemUoKSBjb25zdAoreworICAgIEFTU0VSVChpc051bGwo
KSB8fCAoIWlzTnVsbCgpICYmICFtX3NpemUpKTsKKyAgICByZXR1cm4gbV9zaXplOworfQorCiBS
ZWZQdHI8RE9NRXhjZXB0aW9uPiBJREJFcnJvcjo6dG9ET01FeGNlcHRpb24oKSBjb25zdAogewog
ICAgIGlmICghbV9jb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0lEQkVycm9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRXJyb3IuaAppbmRleCAzYTk1YmIzODA1MGRlYWIyOGMyZGMxYTdhZTY1ZmUy
N2Y2YWY4ODU2Li5mM2M3YTA4ZDVjY2ZkOWZmZjI4NWU1M2FkZDJhM2M2NzRlNTE5ODI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3Iu
aApAQCAtMzUsNyArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkVycm9y
IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJREJFcnJvcihPcHRpb25h
bDxFeGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlID0g
eyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSURCRXJyb3IgY3JlYXRlTnVsbEVycm9y
KHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJREJFcnJv
cihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlID0geyB9LCB1aW50NjRfdCA9IDApOwogCiAgICAgc3RhdGljIElEQkVycm9yIHVzZXJE
ZWxldGVFcnJvcigpCiAgICAgewpAQCAtNTIsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgT3B0aW9u
YWw8RXhjZXB0aW9uQ29kZT4gY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZTsgfQogICAgIFN0
cmluZyBuYW1lKCkgY29uc3Q7CiAgICAgU3RyaW5nIG1lc3NhZ2UoKSBjb25zdDsKKyAgICB1aW50
NjRfdCB0YXNrU2l6ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVy
biAhbV9jb2RlOyB9CiAKQEAgLTYzLDYgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBP
cHRpb25hbDxFeGNlcHRpb25Db2RlPiBtX2NvZGU7CiAgICAgU3RyaW5nIG1fbWVzc2FnZTsKKyAg
ICB1aW50NjRfdCBtX3NpemU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>380076</attachid>
            <date>2019-10-02 18:59:45 -0700</date>
            <delta_ts>2019-10-02 18:59:45 -0700</delta_ts>
            <desc>test.html</desc>
            <filename>needs_accurate_estimate.html</filename>
            <type>text/html</type>
            <size>1959</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KPHNjcmlwdD4K
dmFyIGRiOwp2YXIgaW5kZXhDb3VudCA9IDEwOwp2YXIgb2JqZWN0Q291bnQgPSA0OwoKZnVuY3Rp
b24gbG9nKHRleHQpCnsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCArICdcbicpKTsKfQoKZnVuY3Rpb24g
cmFuZG9tQXJyYXkobGVuZ3RoLCBtYXgpIHsKICAgIHZhciBhcnIgPSBbXTsKCWZvciAodmFyIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspCgkgICAgYXJyLnB1c2goTWF0aC5yb3VuZChNYXRoLnJhbmRv
bSgpICogbWF4KSkKCXJldHVybiBhcnI7Cn0KCmZ1bmN0aW9uIHJhbmRvbUtleShsZW5ndGgsIG1h
eCkgewoJdmFyIHN0ciA9ICIiOwoJZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKCSAg
ICBzdHIgKz0gKE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIG1heCkpCglyZXR1cm4gc3RyOwp9
CgpmdW5jdGlvbiBjcmVhdGVPYmplY3QoKSB7Cgl2YXIgb2JqID0geyB9OwoJZm9yICh2YXIgaSA9
IDA7IGkgPCBpbmRleENvdW50OyBpKyspIAoJCW9ialsiYXJyYXkiICsgaV0gPSByYW5kb21BcnJh
eSgxMDAsIDEwKTsKCglyZXR1cm4gb2JqOwp9CgppbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ3Rl
c3REYXRhYmFzZScpLm9uc3VjY2VzcyA9ICgpID0+IHsKCWxvZygiZGVsZXRlIGRhdGFiYXNlIHN1
Y2Nlc3NmdWxseSEiKQp9Cgp2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbigndGVzdERh
dGFiYXNlJyk7Cm9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudCkgPT4gewoJbG9n
KCJkYXRhYmFzZSBvcGVuIG9udXBncmFkZW5lZWRlZCEiKTsKCWRiID0gZXZlbnQudGFyZ2V0LnJl
c3VsdDsKCXZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0T2JqZWN0
U3RvcmUnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSArKykKCQlvYmplY3RT
dG9yZS5jcmVhdGVJbmRleCgiYXJyYXkiICsgaSwgImFycmF5IiArIGkpOwoKCXZhciB0cmFuc2Fj
dGlvbiA9IGV2ZW50LnRhcmdldC50cmFuc2FjdGlvbjsKCXRyYW5zYWN0aW9uLm9uY29tcGxldGUg
PSAoKSA9PiB7CgkJbG9nKCJvbnVwZ3JhZGVuZWVkZWQgdHJhbnNhY3Rpb24gZmluaXNoZWQhIikK
CX0KfQoKZnVuY3Rpb24gc3VjY2Vzc0Z1bmMoZXZlbnQsIGkpIHsKCWxvZygiYWRkZWQgaXRlbSAi
ICsgaSArICIgc3VjY2Vzc2Z1bGx5ISIpOwp9CgpmdW5jdGlvbiBhZGRJdGVtcygpIHsKCXZhciB0
cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsndGVzdE9iamVjdFN0b3JlJ10sICJyZWFkd3Jp
dGUiKTsKCXRyYW5zYWN0aW9uLm9uZXJyb3IgPSAoKSA9PiB7CgkJbG9nKCJ0cmFuc2FjdGlvbiBl
cnJvciEiKTsKCX0KCXRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoKSA9PiB7CgkJbG9nKCJ0cmFu
c2FjdGlvbiBzdWNjZXNzISIpOwoJfQoJdmFyIG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2Jq
ZWN0U3RvcmUoInRlc3RPYmplY3RTdG9yZSIpOwoJZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RD
b3VudDsgaSsrKSB7CgkJb2JqZWN0U3RvcmUuYWRkKGNyZWF0ZU9iamVjdCgpLCByYW5kb21LZXko
MTAyNCAqIDUwLCA5KSkub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7CgkJCWxvZygiYWRkZWQgaXRl
bSAiICsgZXZlbnQudGFyZ2V0LnJlc3VsdC5zdWJzdHIoMCwgMTApICsgIiBzdWNjZXNzZnVsbHkh
IikKCQl9Cgl9Cn0KCm9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudCkgPT4gewoJbG9nKCJk
YXRhYmFzZSBvcGVuIG9uc3VjY2VzcyEiKTsKCglhZGRJdGVtcygpOwoKCXNldFRpbWVvdXQoYWRk
SXRlbXMsIDEwMDApOwoKCXNldFRpbWVvdXQoKCk9PnsKCQlkYi5jbG9zZSgpOwoJfSwgMTAwMCk7
Cn0KCjwvc2NyaXB0Pgo8L2h0bWw+
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380077</attachid>
            <date>2019-10-02 20:32:07 -0700</date>
            <delta_ts>2019-10-04 17:37:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202483-20191002203206.patch</filename>
            <type>text/plain</type>
            <size>66452</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY1ZDBmYjMwMTAyZWFk
YmNhZWI3ZmU3NjkzMzY4OTE3MzVlNzIwMi4uMzU4MjIwNzZkMzMxZTA1NDYyZjY3YzI1MjU2MmMz
ODM3OGI5MzUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE5LTEwLTAyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogZXN0aW1h
dGUgc2l6ZSBpbmNyZWFzZSBhZnRlciB0YXNrIGV4ZWN1dGlvbiBpbnN0ZWFkIG9mIGNoZWNraW5n
IGZpbGUgc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAyNDgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXNlIGVzdGltYXRlZCB0YXNrIHNpemUgKHNwYWNlIGluY3JlYXNlIGZvciB0YXNrKSBwbHVz
IGluaXRpYWwgZGlzayB1c2FnZSB0byByZXByZXNlbnQgc3BhY2UgdXNlZCBieSBJbmRleGVkREIs
IAorICAgICAgICB0byBzYXZlIHRoZSBjb3N0IG9mIGZpbGUgc3lzdGVtIGNhbGxzIGZvciBnZXR0
aW5nIGZpbGUgc2l6ZS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oOiAKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpj
cmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlE
QkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVj
b3JkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2lu
Z1N0b3JlLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
QmFja2luZ1N0b3JlLmNwcDogYWRkIHRhc2sgc2l6ZSBlc3RpbWF0ZSBhbmQgcmV0dXJuIGl0IGlu
IHRoZSByZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVj
a2VkUHV0SW5kZXhLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJC
YWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlT25lSW5k
ZXhGb3JBZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJC
YWNraW5nU3RvcmU6OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oOgor
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cDogd2UgZXN0aW1hdGUgdGFzayBzaXplLCByZXF1ZXN0IHNwYWNlIGZyb20gU3RvcmFnZVF1b3Rh
TWFuYWdlciwKKyAgICAgICAgYW5kIGhvbGQgdGhlIHNwYWNlIGdyYW50ZWQgd2hlbiB0YXNrIGlz
IGJlaW5nIGV4ZWN1dGVkIGluIHRoZSBiYWNrZ3JvdW5kIHRocmVhZC4gQWZ0ZXIgdGFzayBpcyBk
b25lLCB3ZSB3aWxsIAorICAgICAgICBnZXQgYSBtb3JlIGFjY3VyYXRlIHRhc2sgc2l6ZSwgd2hp
Y2ggaXMgZXN0aW1hdGVkIGR1cmluZyBleGVjdXRpb24sIHVwZGF0ZSB1c2FnZSB3aXRoIHRoYXQg
c2l6ZSwgYW5kIHJlbGVhc2UgCisgICAgICAgIHRoZSBzcGFjZSBoZWxkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5p
c2hTcGFjZUluY3JlYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3du
Rm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lk
ZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmpl
Y3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1D
cmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1
dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFza1Jl
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Omlt
bWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmZvcmdl
dEVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpnZW5lcmF0ZVVu
aXF1ZUNhbGxiYWNrSWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJREJFcnJvck9yU2l6ZTo6SURCRXJyb3JPclNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRXJyb3JPclNpemU6Omhhc0Vycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkVycm9yT3JTaXplOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkVycm9yT3JT
aXplOjplcnJvciBjb25zdCk6CisKIDIwMTktMTAtMDIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHIyNTA1OTUu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCQmFja2luZ1N0b3JlLmgKaW5kZXggNzMxNjdkZDgwOTdkY2ZiYmRlNmJlNTdlMGZlNmQxMTM0
NmViZmMzYi4uODE5MThjMGNjODc1MzIzMjAwNGEwYWMwNzY2NTMyNWRmZTVkOWM1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJC
YWNraW5nU3RvcmUuaApAQCAtNzIsMTYgKzcyLDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElE
QkVycm9yIGFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIpID0gMDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGNvbW1pdFRyYW5z
YWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
KSA9IDA7CiAKLSAgICB2aXJ0dWFsIElEQkVycm9yIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvck9yU2l6ZSBjcmVhdGVPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJikgPSAwOwogICAgIHZpcnR1YWwgSURCRXJyb3Ig
ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgPSAwOwotICAgIHZp
cnR1YWwgSURCRXJyb3IgcmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvck9yU2l6
ZSByZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIG5ld05hbWUpID0gMDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGNsZWFyT2JqZWN0U3RvcmUo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgPSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3IgY3Jl
YXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQkluZGV4SW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yT3JTaXpl
IGNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mKSA9IDA7CiAgICAgdmlydHVhbCBJREJFcnJvciBk
ZWxldGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50
aWZpZXIpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIHJlbmFtZUluZGV4KGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBu
ZXdOYW1lKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvck9yU2l6ZSByZW5hbWVJbmRleChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgbmV3TmFtZSkgPSAwOwogICAgIHZpcnR1YWwgSURCRXJyb3Iga2V5RXhpc3RzSW5PYmpl
Y3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwgYm9v
bCYga2V5RXhpc3RzKSA9IDA7CiAgICAgdmlydHVhbCBJREJFcnJvciBkZWxldGVSYW5nZShjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKSA9IDA7Ci0gICAg
dmlydHVhbCBJREJFcnJvciBhZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0IElE
QktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yT3JT
aXplIGFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgY29uc3QgSURCS2V5RGF0YSYsIGNv
bnN0IElEQlZhbHVlJikgPSAwOwogICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0UmVjb3JkKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJlY29y
ZERhdGFUeXBlLCBJREJHZXRSZXN1bHQmIG91dFZhbHVlKSA9IDA7CiAgICAgdmlydHVhbCBJREJF
cnJvciBnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIElEQkdldEFsbFJlc3Vs
dCYgb3V0VmFsdWUpID0gMDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGdldEluZGV4UmVjb3JkKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhl
ZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJlc3Vs
dCYgb3V0VmFsdWUpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXgg
OThjZWQ2MzcwOTFkMzYyZGUyYmRjMTNhZGZmMjhiOWI5NTA5ZmZjNS4uOTNhMWU4NmNhYzdlOWRh
Y2ZmM2JmMzBiNWExMTQzYWVlMTRmNGU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9y
ZS5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6
OmNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogICAgIHJl
dHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKK0lEQkVycm9yT3JT
aXplIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0
b3JlSW5mbyYgaW5mbykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0
b3JlOjpjcmVhdGVPYmplY3RTdG9yZSAtIGFkZGluZyBPUyAlcyB3aXRoIElEICUiIFBSSXU2NCwg
aW5mby5uYW1lKCkudXRmOCgpLmRhdGEoKSwgaW5mby5pZGVudGlmaWVyKCkpOwogCkBAIC0xNzMs
NyArMTczLDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RT
dG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKICAgICByZXR1cm4gSURCRXJyb3Ig
eyB9OwogfQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0
b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkKK0lE
QkVycm9yT3JTaXplIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKQogewogICAgIExP
RyhJbmRleGVkREIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlIik7
CiAKQEAgLTIyMCw3ICsyMjAsNyBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNs
ZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cgogICAgIHJldHVy
biBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKK0lEQkVycm9yT3JTaXplIE1lbW9yeUlEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCIpOwogCkBAIC0y
NTAsNyArMjUwLDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRl
eChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICByZXR1cm4gb2JqZWN0
U3RvcmUtPmRlbGV0ZUluZGV4KCpyYXdUcmFuc2FjdGlvbiwgaW5kZXhJZGVudGlmaWVyKTsKIH0K
IAotSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
bmV3TmFtZSkKK0lEQkVycm9yT3JTaXplIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5k
ZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIG5ld05hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJh
Y2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgiKTsKIApAQCAtMzMzLDcgKzMzMyw3IEBAIElEQkVycm9y
IE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjCiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3Ig
TWVtb3J5SURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgb2Jq
ZWN0U3RvcmVJbmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYg
dmFsdWUpCitJREJFcnJvck9yU2l6ZSBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
SURCT2JqZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElEQktleURhdGEmIGtl
eURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVt
b3J5SURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQiKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdT
dG9yZS5oCmluZGV4IGIyYjczNTdlZTNjMGY5ZDQ0ZTBhNmI5YTVmOWRkZmM0MmIzMTJlYTguLjNk
MzViNjIzZGE1NTQ3OGRkNGJkYjhiMTRjOGY1NWRiNmVhYTYwZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURC
QmFja2luZ1N0b3JlLmgKQEAgLTUzLDE2ICs1MywxNiBAQCBwdWJsaWM6CiAgICAgSURCRXJyb3Ig
YmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKSBmaW5hbDsKICAgICBJ
REJFcnJvciBhYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyKSBmaW5hbDsKICAgICBJREJFcnJvciBjb21taXRUcmFuc2FjdGlv
bihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikgZmlu
YWw7Ci0gICAgSURCRXJyb3IgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYp
IGZpbmFsOworICAgIElEQkVycm9yT3JTaXplIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RT
dG9yZUluZm8mKSBmaW5hbDsKICAgICBJREJFcnJvciBkZWxldGVPYmplY3RTdG9yZShjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKSBmaW5hbDsKLSAgICBJREJFcnJvciByZW5hbWVPYmplY3RTdG9y
ZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpIGZpbmFs
OworICAgIElEQkVycm9yT3JTaXplIHJlbmFtZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkgZmluYWw7CiAgICAgSURCRXJyb3IgY2xl
YXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBmaW5hbDsKLSAgICBJREJF
cnJvciBjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJikgZmluYWw7CisgICAgSURCRXJyb3JPclNp
emUgY3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYpIGZpbmFsOwogICAgIElEQkVycm9yIGRlbGV0
ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmll
cikgZmluYWw7Ci0gICAgSURCRXJyb3IgcmVuYW1lSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpIGZp
bmFsOworICAgIElEQkVycm9yT3JTaXplIHJlbmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKSBm
aW5hbDsKICAgICBJREJFcnJvciBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBib29sJiBrZXlFeGlzdHMpIGZpbmFsOwog
ICAgIElEQkVycm9yIGRlbGV0ZVJhbmdlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYpIGZpbmFsOwotICAgIElEQkVycm9yIGFkZFJlY29yZChjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJikgZmluYWw7
CisgICAgSURCRXJyb3JPclNpemUgYWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBjb25z
dCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmKSBmaW5hbDsKICAgICBJREJFcnJvciBnZXRS
ZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwg
SURCR2V0UmVjb3JkRGF0YVR5cGUsIElEQkdldFJlc3VsdCYgb3V0VmFsdWUpIGZpbmFsOwogICAg
IElEQkVycm9yIGdldEFsbFJlY29yZHMoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgSURCR2V0QWxs
UmVzdWx0JiBvdXRWYWx1ZSkgZmluYWw7CiAgICAgSURCRXJyb3IgZ2V0SW5kZXhSZWNvcmQoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVk
REI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSURCR2V0UmVzdWx0
JiBvdXRWYWx1ZSkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4
IDI3OWIzMTU5MTZiZDM5ZDhkNGE4NjA2ZTcwNWRiN2U1NWQxOWFlNzAuLmIzZTNkYjljYWM1YzFl
MGRkYmVjOWYwZjQzYjU3ODNjNGFjZmRhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCkBAIC05MzYsNyArOTM2LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
Ojpjb21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGkKICAgICBy
ZXR1cm4gZXJyb3I7CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
T2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKK0lEQkVycm9yT3JTaXplIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5m
byYgaW5mbykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpj
cmVhdGVPYmplY3RTdG9yZSAtIGFkZGluZyBPUyAlcyB3aXRoIElEICUiIFBSSXU2NCwgaW5mby5u
YW1lKCkudXRmOCgpLmRhdGEoKSwgaW5mby5pZGVudGlmaWVyKCkpOwogCkBAIC05ODQsNyArOTg0
LDggQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKIAogICAgIG1fZGF0YWJhc2VJbmZvLT5hZGRF
eGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAg
ICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBpbmZvLm5hbWUoKS5zaXplSW5CeXRlcygpICsga2V5
UGF0aEJsb2ItPnNpemUoKTsKKyAgICByZXR1cm4gc2l6ZUluY3JlYXNlOwogfQogCiBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIpCkBAIC0xMDc4LDcgKzEwNzksNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dAogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lKQorSURCRXJyb3JPclNpemUgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpyZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIG5ld05hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6cmVuYW1lT2JqZWN0U3RvcmUgLSBvYmplY3Qgc3RvcmUgJSIgUFJJdTY0LCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIpOwogCkBAIC0xMTA1LDkgKzExMDYsMTMgQEAgSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHQKICAgICAgICAgfQogICAgIH0KIAorICAgIFN0cmluZyBvbGROYW1lOworICAgIGlmIChh
dXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2Jq
ZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKSkKKyAgICAgICAgb2xkTmFtZSA9IG9iamVj
dFN0b3JlSW5mby0+bmFtZSgpOwogICAgIG1fZGF0YWJhc2VJbmZvLT5yZW5hbWVPYmplY3RTdG9y
ZShvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpOwogCi0gICAgcmV0dXJuIElEQkVycm9y
IHsgfTsKKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBuZXdOYW1lLnNpemVJbkJ5dGVzKCkg
PiBvbGROYW1lLnNpemVJbkJ5dGVzKCkgPyBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgLSBvbGROYW1l
LnNpemVJbkJ5dGVzKCkgOiAwOworICAgIHJldHVybiBzaXplSW5jcmVhc2U7CiB9CiAKIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJRCkKQEAgLTExNTEsNyArMTE1Niw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyCiAgICAg
cmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQorSURCRXJyb3JPclNpemUgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQogewogICAg
IExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4IC0gT2Jq
ZWN0U3RvcmUgJSIgUFJJdTY0ICIsIEluZGV4ICUiIFBSSXU2NCwgaW5mby5vYmplY3RTdG9yZUlk
ZW50aWZpZXIoKSwgaW5mby5pZGVudGlmaWVyKCkpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsK
QEAgLTExODQsNiArMTE4OSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IGFkZCBpbmRleCAnJXMnIHRvIEluZGV4SW5mbyB0YWJsZSAoJWkp
IC0gJXMiLCBpbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gSURCRXJyb3Ig
eyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNlIl9zIH07
CiAgICAgfQorICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJbkJ5
dGVzKCkgKyBrZXlQYXRoQmxvYi0+c2l6ZSgpOwogCiAgICAgLy8gV3JpdGUgaW5kZXggcmVjb3Jk
cyBmb3IgYW55IHJlY29yZHMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoaXMgb2JqZWN0IHN0b3Jl
LgogCkBAIC0xMjAxLDggKzEyMDcsOCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogCiAgICAg
ICAgIEFTU0VSVChjdXJzb3ItPmN1cnJlbnRSZWNvcmRSb3dJRCgpKTsKIAotICAgICAgICBJREJF
cnJvciBlcnJvciA9IHVwZGF0ZU9uZUluZGV4Rm9yQWRkUmVjb3JkKGluZm8sIGtleSwgdmFsdWVC
dWZmZXIsIGN1cnNvci0+Y3VycmVudFJlY29yZFJvd0lEKCkpOwotICAgICAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKSB7CisgICAgICAgIGF1dG8gZXJyb3JPclNpemUgPSB1cGRhdGVPbmVJbmRleEZv
ckFkZFJlY29yZChpbmZvLCBrZXksIHZhbHVlQnVmZmVyLCBjdXJzb3ItPmN1cnJlbnRSZWNvcmRS
b3dJRCgpKTsKKyAgICAgICAgaWYgKGVycm9yT3JTaXplLmhhc0Vycm9yKCkpIHsKICAgICAgICAg
ICAgIGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkRlbGV0ZUluZGV4SW5mbywgIkRF
TEVURSBGUk9NIEluZGV4SW5mbyBXSEVSRSBpZCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/OyJf
cyk7CiAgICAgICAgICAgICBpZiAoIXNxbAogICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZElu
dDY0KDEsIGluZm8uaWRlbnRpZmllcigpKSAhPSBTUUxJVEVfT0sKQEAgLTEyMTIsOCArMTIxOCw5
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgVW5rbm93bkVycm9yLCAiSW5kZXggY3JlYXRpb24gZmFpbGVkIGR1ZSB0byB1bmlxdWVu
ZXNzIGNvbnN0cmFpbnQgZmFpbHVyZSwgYnV0IHRoZXJlIHdhcyBhbiBlcnJvciBkZWxldGluZyB0
aGUgSW5kZXggcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlIl9zIH07CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgICAgIHJldHVybiBlcnJvck9yU2l6
ZTsKICAgICAgICAgfQorICAgICAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3JPclNpemUuc2l6ZSgp
OwogCiAgICAgICAgIGlmICghY3Vyc29yLT5hZHZhbmNlKDEpKSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIkVycm9yIGFkdmFuY2luZyBjdXJzb3Igd2hpbGUgaW5kZXhpbmcgZXhpc3RpbmcgcmVj
b3JkcyBmb3IgbmV3IGluZGV4LiIpOwpAQCAtMTIzMSw3ICsxMjM4LDcgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWMKICAgICBBU1NFUlQob2JqZWN0U3RvcmUpOwogICAgIG9iamVjdFN0b3JlLT5h
ZGRFeGlzdGluZ0luZGV4KGluZm8pOwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICBy
ZXR1cm4gc2l6ZUluY3JlYXNlOwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OnVuY2hlY2tlZEhhc0luZGV4UmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29uc3Qg
SURCS2V5RGF0YSYgaW5kZXhLZXksIGJvb2wmIGhhc1JlY29yZCkKQEAgLTEyNjcsNyArMTI3NCw3
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkSGFzSW5kZXhSZWNv
cmQoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvCiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0K
IAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtleShj
b25zdCBJREJJbmRleEluZm8mIGluZm8sIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3QgSW5k
ZXhLZXkmIGluZGV4S2V5LCBpbnQ2NF90IHJlY29yZElEKQorSURCRXJyb3JPclNpemUgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJREJJbmRleEluZm8m
IGluZm8sIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3QgSW5kZXhLZXkmIGluZGV4S2V5LCBp
bnQ2NF90IHJlY29yZElEKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5n
U3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5IC0gKCUiIFBSSXU2NCAiKSAlcywgJXMiLCBpbmZv
LmlkZW50aWZpZXIoKSwga2V5LmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpbmRleEtl
eS5hc09uZUtleSgpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTI5MSwy
MCArMTI5OCwyMiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1
dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgYwogICAgICAgICB9CiAgICAgfQog
CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gMDsKICAgICBmb3IgKGF1dG8mIGluZGV4S2V5
IDogaW5kZXhLZXlzKSB7CiAgICAgICAgIGlmICghaW5kZXhLZXkuaXNWYWxpZCgpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gZXJyb3IgPSB1bmNoZWNrZWRQdXRJbmRleFJl
Y29yZChpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBpbmZvLmlkZW50aWZpZXIoKSwga2V5
LCBpbmRleEtleSwgcmVjb3JkSUQpOwotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Cisg
ICAgICAgIGF1dG8gZXJyb3JPclNpemUgPSB1bmNoZWNrZWRQdXRJbmRleFJlY29yZChpbmZvLm9i
amVjdFN0b3JlSWRlbnRpZmllcigpLCBpbmZvLmlkZW50aWZpZXIoKSwga2V5LCBpbmRleEtleSwg
cmVjb3JkSUQpOworICAgICAgICBpZiAoZXJyb3JPclNpemUuaGFzRXJyb3IoKSkgewogICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHV0IGluZGV4IHJlY29yZCBmb3IgbmV3bHkgY3Jl
YXRlZCBpbmRleCIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICAgICAgcmV0
dXJuIGVycm9yT3JTaXplOwogICAgICAgICB9CisgICAgICAgIHNpemVJbmNyZWFzZSArPSBlcnJv
ck9yU2l6ZS5zaXplKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICBy
ZXR1cm4gc2l6ZUluY3JlYXNlOwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBp
bmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiBrZXlWYWx1ZSwgY29uc3QgV2ViQ29y
ZTo6SURCS2V5RGF0YSYgaW5kZXhLZXksIGludDY0X3QgcmVjb3JkSUQpCitJREJFcnJvck9yU2l6
ZSBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRh
JiBrZXlWYWx1ZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYgaW5kZXhLZXksIGludDY0X3Qg
cmVjb3JkSUQpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
dW5jaGVja2VkUHV0SW5kZXhSZWNvcmQgLSAlcywgJXMiLCBrZXlWYWx1ZS5sb2dnaW5nU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgaW5kZXhLZXkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwogCkBAIC0xMzM0LDcgKzEzNDMsOCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRfdCBzaXpl
SW5jcmVhc2UgPSBpbmRleEtleUJ1ZmZlci0+c2l6ZSgpICsgdmFsdWVCdWZmZXItPnNpemUoKTsK
KyAgICByZXR1cm4gc2l6ZUluY3JlYXNlOwogfQogCiAKQEAgLTEzODMsNyArMTM5Myw3IEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFt
ZSkKK0lEQkVycm9yT3JTaXplIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6cmVuYW1lSW5kZXggLSBvYmplY3Qgc3RvcmUgJSIgUFJJdTY0ICIsIGluZGV4ICUiIFBS
SXU2NCwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIpOwogCkBAIC0xNDE5
LDkgKzE0MjksMTEgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRl
eChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAgfQogICAgIH0K
IAorICAgIGF1dG8gb2xkTmFtZSA9IGluZGV4SW5mby0+bmFtZSgpOwogICAgIGluZGV4SW5mby0+
cmVuYW1lKG5ld05hbWUpOwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRf
dCBzaXplSW5jcmVhc2UgPSBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgPiBvbGROYW1lLnNpemVJbkJ5
dGVzKCkgPyBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgLSBvbGROYW1lLnNpemVJbkJ5dGVzKCkgOiAw
OworICAgIHJldHVybiBzaXplSW5jcmVhc2U7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3Qg
SURCS2V5RGF0YSYga2V5RGF0YSwgYm9vbCYga2V5RXhpc3RzKQpAQCAtMTY1OSw3ICsxNjcxLDcg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZShjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUlEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQoY29u
c3QgSURCSW5kZXhJbmZvJiBpbmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXksIGNvbnN0IFRocmVh
ZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSwgaW50NjRfdCByZWNvcmRJRCkKK0lEQkVycm9yT3JTaXpl
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQoY29uc3Qg
SURCSW5kZXhJbmZvJiBpbmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXksIGNvbnN0IFRocmVhZFNh
ZmVEYXRhQnVmZmVyJiB2YWx1ZSwgaW50NjRfdCByZWNvcmRJRCkKIHsKICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKG1fc2VyaWFsaXphdGlvbkNvbnRleHQtPnZtKCkpOwogCkBAIC0xNjc4LDcgKzE2
OTAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZU9uZUluZGV4Rm9y
QWRkUmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYgaQogICAgIHJldHVybiB1bmNoZWNrZWRQdXRJ
bmRleEtleShpbmZvLCBrZXksIGluZGV4S2V5LCByZWNvcmRJRCk7CiB9CiAKLUlEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJ
REJPYmplY3RTdG9yZUluZm8mIGluZm8sIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3QgVGhy
ZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlLCBpbnQ2NF90IHJlY29yZElEKQorSURCRXJyb3JPclNp
emUgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNv
bnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb25z
dCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUsIGludDY0X3QgcmVjb3JkSUQpCiB7CiAgICAg
SlNMb2NrSG9sZGVyIGxvY2tlcihtX3NlcmlhbGl6YXRpb25Db250ZXh0LT52bSgpKTsKIApAQCAt
MTY4Niw4ICsxNjk4LDkgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVB
bGxJbmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKICAgICBpZiAoanNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogCi0g
ICAgSURCRXJyb3IgZXJyb3I7CisgICAgSURCRXJyb3JPclNpemUgZXJyb3JPclNpemU7CiAgICAg
Ym9vbCBhbnlSZWNvcmRzU3VjY2VlZGVkID0gZmFsc2U7CisgICAgdWludDY0X3Qgc2l6ZUluY3Jl
YXNlID0gMDsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygp
KSB7CiAgICAgICAgIEluZGV4S2V5IGluZGV4S2V5OwogICAgICAgICBnZW5lcmF0ZUluZGV4S2V5
Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+ZXhlY1N0YXRlKCksIGluZGV4LCBqc1Zh
bHVlLCBpbmRleEtleSwgaW5mby5rZXlQYXRoKCksIGtleSk7CkBAIC0xNjk1LDE0ICsxNzA4LDE1
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFk
ZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAgICAgICAgIGlmIChpbmRleEtleS5pc051bGwo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGVycm9yID0gdW5jaGVja2VkUHV0
SW5kZXhLZXkoaW5kZXgsIGtleSwgaW5kZXhLZXksIHJlY29yZElEKTsKLSAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSkKKyAgICAgICAgZXJyb3JPclNpemUgPSB1bmNoZWNrZWRQdXRJbmRleEtl
eShpbmRleCwga2V5LCBpbmRleEtleSwgcmVjb3JkSUQpOworICAgICAgICBpZiAoZXJyb3JPclNp
emUuaGFzRXJyb3IoKSkKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIHNpemVJbmNyZWFz
ZSArPSBlcnJvck9yU2l6ZS5zaXplKCk7CiAgICAgICAgIGFueVJlY29yZHNTdWNjZWVkZWQgPSB0
cnVlOwogICAgIH0KIAotICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgYW55UmVjb3Jkc1N1Y2Nl
ZWRlZCkgeworICAgIGlmIChlcnJvck9yU2l6ZS5oYXNFcnJvcigpICYmIGFueVJlY29yZHNTdWNj
ZWVkZWQpIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5QnVmZmVyID0gc2VyaWFs
aXplSURCS2V5RGF0YShrZXkpOwogCiAgICAgICAgIGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVu
dChTUUw6OkRlbGV0ZU9iamVjdFN0b3JlSW5kZXhSZWNvcmQsICJERUxFVEUgRlJPTSBJbmRleFJl
Y29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIHZhbHVlID0gQ0FTVCg/IEFTIFRFWFQp
OyJfcyk7CkBAIC0xNzE2LDEwICsxNzMwLDEzIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgaWYgKGVycm9yT3JTaXpl
Lmhhc0Vycm9yKCkpCisgICAgICAgIHJldHVybiBlcnJvck9yU2l6ZTsKKworICAgIHJldHVybiBz
aXplSW5jcmVhc2U7CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVj
b3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBj
b25zdCBJREJPYmplY3RTdG9yZUluZm8mIG9iamVjdFN0b3JlSW5mbywgY29uc3QgSURCS2V5RGF0
YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlKQorSURCRXJyb3JPclNpemUgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgb2JqZWN0U3Rv
cmVJbmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3Jk
IC0ga2V5ICVzLCBvYmplY3Qgc3RvcmUgJSIgUFJJdTY0LCBrZXlEYXRhLmxvZ2dpbmdTdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBvYmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpKTsKIApAQCAtMTc1
NywxMCArMTc3NCwxMSBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29y
ZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogCiAgICAgICAgIHJlY29y
ZElEID0gbV9zcWxpdGVEQi0+bGFzdEluc2VydFJvd0lEKCk7CiAgICAgfQorICAgIHVpbnQ2NF90
IHNpemVJbmNyZWFzZSA9IGtleUJ1ZmZlci0+c2l6ZSgpICsgdmFsdWUuZGF0YSgpLmRhdGEoKS0+
c2l6ZSgpOwogCi0gICAgYXV0byBlcnJvciA9IHVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQo
b2JqZWN0U3RvcmVJbmZvLCBrZXlEYXRhLCB2YWx1ZS5kYXRhKCksIHJlY29yZElEKTsKKyAgICBh
dXRvIGVycm9yT3JTaXplID0gdXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChvYmplY3RTdG9y
ZUluZm8sIGtleURhdGEsIHZhbHVlLmRhdGEoKSwgcmVjb3JkSUQpOwogCi0gICAgaWYgKCFlcnJv
ci5pc051bGwoKSkgeworICAgIGlmIChlcnJvck9yU2l6ZS5oYXNFcnJvcigpKSB7CiAgICAgICAg
IGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkRlbGV0ZU9iamVjdFN0b3JlUmVjb3Jk
LCAiREVMRVRFIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID0g
Q0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgICAgIGlmICghc3FsCiAgICAgICAgICAgICB8fCBz
cWwtPmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpKSAhPSBTUUxJVEVf
T0sKQEAgLTE3NzAsOCArMTc4OCw5IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAg
ICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJJbmRleGluZyBuZXcgb2JqZWN0
IHN0b3JlIHJlY29yZCBmYWlsZWQsIGJ1dCB1bmFibGUgdG8gcmVtb3ZlIHRoZSBvYmplY3Qgc3Rv
cmUgcmVjb3JkIGl0c2VsZiJfcyB9OwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGVycm9y
OworICAgICAgICByZXR1cm4gZXJyb3JPclNpemU7CiAgICAgfQorICAgIHNpemVJbmNyZWFzZSAr
PSBlcnJvck9yU2l6ZS5zaXplKCk7CiAKICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVS
THMgPSB2YWx1ZS5ibG9iVVJMcygpOwogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmls
ZXMgPSB2YWx1ZS5ibG9iRmlsZVBhdGhzKCk7CkBAIC0xNzg3LDYgKzE4MDYsNyBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25v
d25FcnJvciwgIlVuYWJsZSB0byByZWNvcmQgQmxvYiByZWNvcmQgaW4gZGF0YWJhc2UiX3MgfTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBzaXplSW5jcmVhc2UgKz0gdXJsLnNp
emVJbkJ5dGVzKCk7CiAgICAgICAgIGludDY0X3QgcG90ZW50aWFsRmlsZU5hbWVJbnRlZ2VyID0g
bV9zcWxpdGVEQi0+bGFzdEluc2VydFJvd0lEKCk7CiAKICAgICAgICAgLy8gSWYgd2UgYWxyZWFk
eSBoYXZlIGEgZmlsZSBmb3IgdGhpcyBibG9iVVJMLCBub3RoaW5nIGxlZnQgdG8gZG8uCkBAIC0x
ODI2LDcgKzE4NDYsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29y
ZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogCiAgICAgdHJhbnNhY3Rp
b24tPm5vdGlmeUN1cnNvcnNPZkNoYW5nZXMob2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7
CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgcmV0dXJuIHNpemVJbmNyZWFzZTsKIH0KIAogSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRCbG9iUmVjb3Jkc0Zvck9iamVjdFN0b3Jl
UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVSZWNvcmQsIFZlY3RvcjxTdHJpbmc+JiBibG9iVVJM
cywgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0
b3JlLmgKaW5kZXggY2E2YzMzNmFjNjMwM2U2MmQxNzdiYTM4M2I5MGE3NTlkZTA0YzE1OS4uNGRi
MzNmYjgzMTc0MzcxZjAyMzhkMzcxZWM1NGQxMDhlZGIxMmJhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJC
YWNraW5nU3RvcmUuaApAQCAtNTksMTYgKzU5LDE2IEBAIHB1YmxpYzoKICAgICBJREJFcnJvciBi
ZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpIGZpbmFsOwogICAgIElE
QkVycm9yIGFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIpIGZpbmFsOwogICAgIElEQkVycm9yIGNvbW1pdFRyYW5zYWN0aW9u
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSBmaW5h
bDsKLSAgICBJREJFcnJvciBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJikg
ZmluYWw7CisgICAgSURCRXJyb3JPclNpemUgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0
b3JlSW5mbyYpIGZpbmFsOwogICAgIElEQkVycm9yIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIpIGZpbmFsOwotICAgIElEQkVycm9yIHJlbmFtZU9iamVjdFN0b3Jl
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkgZmluYWw7
CisgICAgSURCRXJyb3JPclNpemUgcmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKSBmaW5hbDsKICAgICBJREJFcnJvciBjbGVh
ck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpIGZpbmFsOwotICAgIElEQkVy
cm9yIGNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mKSBmaW5hbDsKKyAgICBJREJFcnJvck9yU2l6
ZSBjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJikgZmluYWw7CiAgICAgSURCRXJyb3IgZGVsZXRl
SW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVy
KSBmaW5hbDsKLSAgICBJREJFcnJvciByZW5hbWVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkgZmlu
YWw7CisgICAgSURCRXJyb3JPclNpemUgcmVuYW1lSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpIGZp
bmFsOwogICAgIElEQkVycm9yIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGJvb2wmIGtleUV4aXN0cykgZmluYWw7CiAg
ICAgSURCRXJyb3IgZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJikgZmluYWw7Ci0gICAgSURCRXJyb3IgYWRkUmVjb3JkKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmKSBmaW5hbDsK
KyAgICBJREJFcnJvck9yU2l6ZSBhZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0
IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYpIGZpbmFsOwogICAgIElEQkVycm9yIGdldFJl
Y29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJ
REJHZXRSZWNvcmREYXRhVHlwZSwgSURCR2V0UmVzdWx0JiBvdXRWYWx1ZSkgZmluYWw7CiAgICAg
SURCRXJyb3IgZ2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBJREJHZXRBbGxS
ZXN1bHQmIG91dFZhbHVlKSBmaW5hbDsKICAgICBJREJFcnJvciBnZXRJbmRleFJlY29yZChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWRE
Qjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRSZXN1bHQm
IG91dFZhbHVlKSBmaW5hbDsKQEAgLTEyMSwxMCArMTIxLDEwIEBAIHByaXZhdGU6CiAgICAgSURC
RXJyb3IgdW5jaGVja2VkR2V0S2V5R2VuZXJhdG9yVmFsdWUoaW50NjRfdCBvYmplY3RTdG9yZUlE
LCB1aW50NjRfdCYgb3V0VmFsdWUpOwogICAgIElEQkVycm9yIHVuY2hlY2tlZFNldEtleUdlbmVy
YXRvclZhbHVlKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QgdmFsdWUpOwogCi0gICAg
SURCRXJyb3IgdXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9y
ZUluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZh
bHVlLCBpbnQ2NF90IHJlY29yZElEKTsKLSAgICBJREJFcnJvciB1cGRhdGVPbmVJbmRleEZvckFk
ZFJlY29yZChjb25zdCBJREJJbmRleEluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhy
ZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlLCBpbnQ2NF90IHJlY29yZElEKTsKLSAgICBJREJFcnJv
ciB1bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJREJJbmRleEluZm8mLCBjb25zdCBJREJLZXlE
YXRhJiBrZXlWYWx1ZSwgY29uc3QgSW5kZXhLZXkmLCBpbnQ2NF90IHJlY29yZElEKTsKLSAgICBJ
REJFcnJvciB1bmNoZWNrZWRQdXRJbmRleFJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGlu
dDY0X3QgaW5kZXhJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5VmFsdWUsIGNvbnN0IElEQktleURh
dGEmIGluZGV4S2V5LCBpbnQ2NF90IHJlY29yZElEKTsKKyAgICBJREJFcnJvck9yU2l6ZSB1cGRh
dGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0
IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUsIGludDY0X3Qg
cmVjb3JkSUQpOworICAgIElEQkVycm9yT3JTaXplIHVwZGF0ZU9uZUluZGV4Rm9yQWRkUmVjb3Jk
KGNvbnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZl
RGF0YUJ1ZmZlciYgdmFsdWUsIGludDY0X3QgcmVjb3JkSUQpOworICAgIElEQkVycm9yT3JTaXpl
IHVuY2hlY2tlZFB1dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQktleURh
dGEmIGtleVZhbHVlLCBjb25zdCBJbmRleEtleSYsIGludDY0X3QgcmVjb3JkSUQpOworICAgIElE
QkVycm9yT3JTaXplIHVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgaW50NjRfdCBpbmRleElELCBjb25zdCBJREJLZXlEYXRhJiBrZXlWYWx1ZSwgY29uc3QgSURC
S2V5RGF0YSYgaW5kZXhLZXksIGludDY0X3QgcmVjb3JkSUQpOwogICAgIElEQkVycm9yIHVuY2hl
Y2tlZEhhc0luZGV4UmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQktleURhdGEm
LCBib29sJiBoYXNSZWNvcmQpOwogICAgIElEQkVycm9yIHVuY2hlY2tlZEdldEluZGV4UmVjb3Jk
Rm9yT25lS2V5KGludDY0X3QgaW5kZXhlSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgSW5kZXhl
ZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleURhdGEmLCBJREJHZXRSZXN1bHQmKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZDg1YjAwMTQ4YTJhNWMzMDYwYmE1MGMw
ZTEyMjA3NWM2MzViYmM0Zi4uNTU5YTJhMzdlY2E4OWY3Mjk1MWZjN2YzZTIxNjY5YmEwZTZlMmI3
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC01NSw2ICs1NSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAogc3RhdGljIGNvbnN0IHVpbnQ2
NF90IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgPSA0Oworc3RhdGljIGNvbnN0IHVpbnQ2NF90
IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdCA9IDEwICogS0I7CiAKIHN0YXRpYyBpbmxpbmUgdWlu
dDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCiB7CkBAIC0yMDcs
NiArMjA4LDIzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VD
b21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3RpCiAgICAgcmVxdWVzdFNwYWNlKHRy
YW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVp
bnQ2NF90IHRhc2tTaXplKQoreworICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNl
VXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKKyAgICBtX3BlbmRpbmdTcGFj
ZUluY3JlYXNlVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKK30KKwordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmll
ciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcGVu
ZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIpOworICAgIGlmIChpdGVyYXRv
ciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5kKCkpIHsKKyAgICAgICAgbV9zZXJ2
ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRl
cmF0b3ItPnZhbHVlKTsKKyAgICAgICAgaWYgKGFjdHVhbFRhc2tTaXplKQorICAgICAgICAgICAg
bV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0
b3ItPnZhbHVlKTsKKyAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLnJlbW92ZShp
dGVyYXRvcik7CisgICAgfQorfQorCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3Vy
cmVudE9wZW5PcGVyYXRpb24oKQogewogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbiAoJXApIiwgdGhpcyk7CkBA
IC0yMTksNyArMjM3LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRP
cGVuT3BlcmF0aW9uKCkKICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gdHJ1
ZTsKICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBrbm93IHdoZXRoZXIgdGhpcyBpcyBhbiBleGlz
dGluZyBvciBhIG5ldyBkYXRhYmFzZS4KICAgICAgICAgICAgIC8vIFdlIHNldCBhIHNtYWxsIGNv
c3Qgc28gdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gb3BlbiBhbiBpbmZpbml0ZSBudW1iZXIg
b2YgZGF0YWJhc2UuCi0gICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRp
Zmllci5vcmlnaW4oKSwgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCwgW3RoaXMsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIodGhpcyldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgeworICAgICAgICAg
ICAgbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRP
cGVuT3BlcmF0aW9uQ29zdCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNp
emUgPSBkZWZhdWx0T3Blbk9wZXJhdGlvbkNvc3RdKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewog
ICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKIApAQCAtMjM1LDcgKzI1Myw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
dXJyZW50T3Blbk9wZXJhdGlvbigpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRl
Y2lzaW9uOjpHcmFudDoKLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJh
Y2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY2Fs
bGJhY2tJRCA9IHRoaXMtPmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgc2l6ZSk7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMtPnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUsIG1f
aWRlbnRpZmllciwgY2FsbGJhY2tJRCkpOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpAQCAtMzQ4LDE0ICszNjgsMTIgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRl
bnRpZmkKIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICBtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9i
YWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0g
bnVsbHB0cjsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5z
YWN0aW9ucyA9IGZhbHNlOwogICAgICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gZmFs
c2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBiYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+
Y3JlYXRlQmFja2luZ1N0b3JlKGlkZW50aWZpZXIpOwotICAgICAgICBtX2N1cnJlbnREYXRhYmFz
ZVNpemUgPSBiYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCiAgICAgICAgIElEQkRhdGFi
YXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgICAgIGF1dG8gZXJyb3IgPSBiYWNraW5nU3RvcmUt
PmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7CkBAIC0zNjQsNyArMzgy
LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmkKIAogICAgICAgICBkZWxldGVkVmVyc2lvbiA9
IGRhdGFiYXNlSW5mby52ZXJzaW9uKCk7CiAgICAgICAgIGJhY2tpbmdTdG9yZS0+ZGVsZXRlQmFj
a2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gYmFja2luZ1N0b3JlLT5k
YXRhYmFzZVNpemUoKTsKICAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tp
bmdTdG9yZSwgZGVsZXRlZFZlcnNpb24pKTsKQEAgLTQwMCwxMCArNDE3LDggQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSgpCiAKICAgICBMT0coSW5kZXhlZERCLCAi
KGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSIpOwogCi0gICAgaWYgKG1f
YmFja2luZ1N0b3JlKSB7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQogICAgICAgICBtX2JhY2tp
bmdTdG9yZS0+Y2xvc2UoKTsKLSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBtX2JhY2tpbmdT
dG9yZS0+ZGF0YWJhc2VTaXplKCk7Ci0gICAgfQogCiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxs
cHRyOwogICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMg
PSBmYWxzZTsKQEAgLTQyMiw4ICs0MzcsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRT
aHV0ZG93bkZvckNsb3NlKCkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZVJlcGx5UXVldWUuaXNF
bXB0eSgpKTsKICAgICBtX2RhdGFiYXNlUmVwbHlRdWV1ZS5raWxsKCk7Ci0KLSAgICB1cGRhdGVT
cGFjZVVzZWRJZk5lZWRlZCgpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxl
dGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pCkBAIC00NTUsMTMgKzQ2OCwx
MyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0
X3QgZGVsZXRlZFZlcnNpb24pCiAgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QgPSBudWxs
cHRyOwogICAgIH0KIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7Ci0KICAgICBtX2Rl
bGV0ZUJhY2tpbmdTdG9yZUluUHJvZ3Jlc3MgPSBmYWxzZTsKIAogICAgIGlmIChtX2hhcmRDbG9z
ZWRGb3JVc2VyRGVsZXRlKQogICAgICAgICByZXR1cm47CiAKKyAgICBtX3NlcnZlci0+cmVzZXRT
cGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpKTsKKwogICAgIGludm9rZU9wZXJhdGlvbkFu
ZFRyYW5zYWN0aW9uVGltZXIoKTsKIH0KIApAQCAtNTM3LDE0ICs1NTAsMTQgQEAgYm9vbCBVbmlx
dWVJREJEYXRhYmFzZTo6YWxsQ29ubmVjdGlvbnNBcmVDbG9zZWRPckNsb3NpbmcoKSBjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVVbmlxdWVDYWxs
YmFja0lkZW50aWZpZXIoKQordWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OmdlbmVyYXRlVW5p
cXVlQ2FsbGJhY2tJZGVudGlmaWVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIHN0YXRpYyB1aW50NjRfdCBjdXJyZW50SUQgPSAwOwogICAgIHJldHVybiArK2N1cnJlbnRJ
RDsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2ssIHVpbnQ2NF90IHRhc2tTaXplKQordWludDY0
X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxi
YWNrJiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsK
ICAgICAgICAgY2FsbGJhY2soSURCRXJyb3I6OnVzZXJEZWxldGVFcnJvcigpKTsKQEAgLTU1NSwx
NiArNTY4LDExIEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoRXJyb3JDYWxsYmFjayYmIGNhbGxiYWNrLCB1CiAgICAgQVNTRVJUKCFtX2Vycm9y
Q2FsbGJhY2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICBtX2Vycm9yQ2FsbGJhY2tzLmFk
ZChpZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBpZiAodGFza1NpemUpIHsK
LSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdU
YXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotICAgIH0KLQogICAgIG1fY2FsbGJhY2tR
dWV1ZS5hcHBlbmQoaWRlbnRpZmllcik7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLXVp
bnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0
YUNhbGxiYWNrJiYgY2FsbGJhY2ssIHVpbnQ2NF90IHRhc2tTaXplKQordWludDY0X3QgVW5pcXVl
SURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBj
YWxsYmFjaykKIHsKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkgewogICAgICAg
ICBjYWxsYmFjayhJREJFcnJvcjo6dXNlckRlbGV0ZUVycm9yKCksIHsgfSk7CkBAIC01NzUsMTEg
KzU4Myw2IEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYgY2FsbGJhY2ssCiAgICAgQVNTRVJUKCFtX2tleURhdGFD
YWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1fa2V5RGF0YUNhbGxiYWNrcy5h
ZGQoaWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjaykpOwogCi0gICAgaWYgKHRhc2tTaXplKSB7
Ci0gICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZp
ZXIub3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5n
VGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKLSAgICB9Ci0KICAgICBtX2NhbGxiYWNr
UXVldWUuYXBwZW5kKGlkZW50aWZpZXIpOwogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQpAQCAt
NzgwLDcgKzc4Myw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFkZE9wZW5EYXRhYmFzZUNv
bm5lY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvCiAgICAgbV9vcGVuRGF0YWJh
c2VDb25uZWN0aW9ucy5hZGQoYWRvcHRSZWYoY29ubmVjdGlvbi5sZWFrUmVmKCkpKTsKIH0KIAot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFj
a2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0
b3JlICglcCkiLCB0aGlzKTsKQEAgLTc5MiwxNSArNzk1LDE3IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVu
dGlmaWVyCiAKICAgICAvLyBRdW90YVVzZXIgc2hvdWxkIGhhdmUgaW5pdGlsaWF6ZWQgc3RvcmFn
ZSB1c2FnZSwgd2hpY2ggY29udGFpbnMgdGhlCiAgICAgLy8gc2l6ZSBvZiB0aGlzIGRhdGFiYXNl
LgotICAgIG1fY3VycmVudERhdGFiYXNlU2l6ZSA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNp
emUoKTsKKyAgICBhdXRvIGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4gPSBtX2JhY2tpbmdTdG9yZS0+
ZGF0YWJhc2VTaXplKCk7CiAKICAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOwogICAg
IGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8o
ZGF0YWJhc2VJbmZvKTsKIAotICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwg
ZGF0YWJhc2VJbmZvLCBlcnJvcikpOworICAgIGF1dG8gZGF0YWJhc2VTaXplQWZ0ZXJPcGVuID0g
bV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOworICAgIGF1dG8gYWN0dWFsVGFza1NpemUg
PSBkYXRhYmFzZVNpemVBZnRlck9wZW4gPiBkYXRhYmFzZVNpemVCZWZvcmVPcGVuID8gKGRhdGFi
YXNlU2l6ZUFmdGVyT3BlbiAtIGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4pIDogMDsKKyAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJyb3IsIGFjdHVh
bFRhc2tTaXplLCBjYWxsYmFja0lkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNv
bnN0IElEQkVycm9yJiBlcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNr
aW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJy
b3IsIHVpbnQ2NF90IGFjdHVhbFRhc2tTaXplLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1h
aW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlIik7CkBAIC04MTEsNyAr
ODE2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IEkKICAgICBBU1NFUlQobV9pc09wZW5pbmdC
YWNraW5nU3RvcmUpOwogICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFsc2U7CiAKLSAg
ICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCgpOworICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNr
KGNhbGxiYWNrSWRlbnRpZmllciwgYWN0dWFsVGFza1NpemUpOwogCiAgICAgaWYgKG1faGFyZENs
b3NlZEZvclVzZXJEZWxldGUpCiAgICAgICAgIHJldHVybjsKQEAgLTgzNiwxMCArODQxLDExIEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0
ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZv
JiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNr
SUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXpl
KTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdU
Rk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsK
IAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCkBAIC04NDksMTcgKzg1NSwxOSBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVCht
X2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7CisgICAgYXV0byBlcnJvck9yU2l6ZSA9IG1fYmFj
a2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8p
OwogCiAgICAgSURCRXJyb3IgZXJyb3I7Ci0gICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3Jl
YXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGluZm8pKTsKKyAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgZXJyb3JPclNpemUuc2l6ZSgpLCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCT2JqZWN0U3RvcmVJ
bmZvJiBpbmZvKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVj
dFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9y
LCB1aW50NjRfdCBzaXplLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsKIAorICAgIGZpbmlz
aFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgc2l6ZSk7CisKICAgICBpZiAo
ZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVj
dFN0b3JlKGluZm8pOwogCkBAIC05MzUsNyArOTQzLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3Rh
Q2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
bmV3TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFj
a0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6
ZSk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihX
VEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47
CiAKQEAgLTk0NSw2ICs5NTMsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmpl
Y3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0
YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFj
a0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtOTU0LDE3ICs5NjMsMTkgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY28KICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVJlbmFtZU9iamVjdFN0b3JlIik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwot
ICAgIG1fYmFja2luZ1N0b3JlLT5yZW5hbWVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CisgICAgYXV0byBzaXplID0gbV9i
YWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKS5zaXplKCk7CiAKICAgICBJREJFcnJvciBlcnJv
cjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7Cisg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IsIHNpemUsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSkpOwog
fQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKQordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCBzaXplLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCisgICAg
ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBzaXplKTsKKwogICAg
IGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9iamVj
dFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CiAKQEAgLTEwMzAsOSArMTA0
MSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleChVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgYwogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpjcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5m
bywgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0g
c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7Cisg
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3Zl
KGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CisKKyAg
ICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIApAQCAtMTA0NiwxNSArMTA1OSwxNSBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJRAogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUNyZWF0ZUluZGV4OiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7CiAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFs
aWQgZm9yIGNhbGwgdG8gY3JlYXRlIGluZGV4Il9zKTsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGluZm8pKTsK
KyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IsIDAsIGluZm8pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgaW5mbyk7Ci0gICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IsIGluZm8pKTsKKyAgICBhdXRvIGVycm9yT3JTaXplID0gbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7Cisg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmll
ciwgZXJyb3JPclNpemUuZXJyb3IoKSwgZXJyb3JPclNpemUuc2l6ZSgpLCBpbmZvKSk7CiB9CiAK
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCSW5kZXhJ
bmZvJiBpbmZvKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50
NjRfdCBzaXplLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgiKTsKQEAgLTEwNjYsNiArMTA3OSw3IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0CiAgICAgICAgIG9iamVjdFN0b3JlSW5mby0+YWRkRXhpc3RpbmdJbmRl
eChpbmZvKTsKICAgICB9CiAKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lk
ZW50aWZpZXIsIHNpemUpOwogICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IpOwogfQogCkBAIC0xMTQ3LDcgKzExNjEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpyZW5hbWVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgdQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFD
aGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2sp
CiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihX
VEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2Fs
bGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMTYzLDYgKzExNzcsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNr
U2l6ZSwgVW5pcXVlSURCRAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgc3RhcnRTcGFj
ZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVJlbmFtZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQog
CkBAIC0xMTcyLDE3ICsxMTg3LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1S
ZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElECiAgICAgTE9H
KEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCIp
OwogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+cmVu
YW1lSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGlu
ZGV4SWRlbnRpZmllciwgbmV3TmFtZSk7CisgICAgYXV0byBzaXplID0gbV9iYWNraW5nU3RvcmUt
PnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpLnNpemUoKTsKIAogICAgIElEQkVycm9yIGVycm9y
OwotICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lkZW50
aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3
TmFtZSkpOworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCBzaXplLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRl
bnRpZmllciwgbmV3TmFtZSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJv
ciYgZXJyb3IsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IHNpemUsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1h
aW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAorICAgIGZp
bmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgc2l6ZSk7CisKICAgICBp
ZiAoZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9k
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7CiAgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8pOwpAQCAtMTIxMyw5ICsxMjMw
LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJSZXF1
ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElE
QlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3Zlcndy
aXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tT
aXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVy
bjsKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwg
a2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIApAQCAtMTIzMywxNCArMTI1MSwx
NCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZQogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVB1dE9yQWRkOiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7CiAg
ICAgICAgIGVycm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3Jl
IGlzIGludmFsaWQgZm9yIGNhbGwgdG8gcHV0IG9yIGFkZCJfcyk7Ci0gICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2Vk
S2V5KSk7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCAwLCB1c2VkS2V5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2JhY2tpbmdTdG9yZS0+aW5mb0Zvck9i
amVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFvYmplY3RTdG9yZUlu
Zm8pIHsKICAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3RhdGVFcnJvciwgIk9iamVj
dCBzdG9yZSBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIGJhY2tpbmcgc3RvcmUiX3MpOwotICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBl
cnJvciwgdXNlZEtleSkpOworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFk
ZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgMCwgdXNlZEtleSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xMjUzLDcgKzEyNzEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZQogICAgIGlmIChvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiAha2V5RGF0YS5p
c1ZhbGlkKCkpIHsKICAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2VuZXJhdGVLZXlO
dW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleU51
bWJlcik7CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1
c2VkS2V5KSk7CisgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgMCwgdXNlZEtleSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTI2OSw3ICsxMjg3LDcgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCUmUKICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IoQ29uc3RyYWludEVy
cm9yLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUiX3MpOwogCiAgICAg
ICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7Cisg
ICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvciwgMCwgdXNlZEtleSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTI4MCwxNCArMTI5OCwxNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZQogICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgZm9ybWFsbHkgZGVsZXRpbmcgaXQg
ZnJvbSBmcm9tIHRoZSBvYmplY3Qgc3RvcmUgYWxzbyByZW1vdmVzIGl0IGZyb20gdGhlIGFwcHJv
cHJpYXRlIGluZGV4ZXMuCiAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2Uo
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXkpOwog
ICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKKyAgICAg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IsIDAsIHVzZWRLZXkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGVycm9y
ID0gbV9iYWNraW5nU3RvcmUtPmFkZFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsICpvYmpl
Y3RTdG9yZUluZm8sIHVzZWRLZXksIG9yaWdpbmFsUmVjb3JkVmFsdWUpOworICAgIGF1dG8gZXJy
b3JPclNpemUgPSBtX2JhY2tpbmdTdG9yZS0+YWRkUmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgKm9iamVjdFN0b3JlSW5mbywgdXNlZEtleSwgb3JpZ2luYWxSZWNvcmRWYWx1ZSk7CisgICAg
ZXJyb3IgPSBlcnJvck9yU2l6ZS5lcnJvcigpOworICAgIGF1dG8gc2l6ZSA9IGVycm9yT3JTaXpl
LnNpemUoKTsKIAogICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRL
ZXkpKTsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IsIDAsIHVzZWRLZXkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMTI5NSwxNCArMTMxNSwxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZQogICAgICAg
ICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1i
ZXIoKSk7CiAKICAgICBnZW5lcmF0ZWRLZXlSZXNldHRlci5yZWxlYXNlKCk7Ci0gICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVz
ZWRLZXkpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvciwgc2l6ZSwgdXNlZEtleSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKK3ZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3Qgc2l6ZSwgY29uc3QgSURC
S2V5RGF0YSYgcmVzdWx0S2V5KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9y
QWRkIik7CiAKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIs
IHNpemUpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBl
cnJvciwgcmVzdWx0S2V5KTsKIH0KIApAQCAtMjA5Nyw5ICsyMTE4LDYgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFzayhDcm9zc1RocmVhZFRhc2smJiB0YXNrKQogCiB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHkoQ3Jvc3NUaHJlYWRU
YXNrJiYgdGFzaykKIHsKLSAgICBpZiAobV9iYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbmV3RGF0
YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotCiAgICAgbV9kYXRh
YmFzZVJlcGx5UXVldWUuYXBwZW5kKFdURk1vdmUodGFzaykpOwogICAgIG1fc2VydmVyLT5wb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmV4ZWN1dGVOZXh0RGF0YWJhc2VUYXNrUmVwbHkpKTsKIH0KQEAgLTIxNjQsOCAr
MjE4Miw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRl
bGV0ZSgpCiAKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgbV9wZW5kaW5nU3Bh
Y2VJbmNyZWFzaW5nVGFza3MuY2xlYXIoKTsKLSAgICBtX3NlcnZlci0+cmVzZXRTcGFjZVVzZWQo
bV9pZGVudGlmaWVyLm9yaWdpbigpKTsKKyAgICBmb3IgKGF1dG8gc2l6ZSA6IG1fcGVuZGluZ1Nw
YWNlSW5jcmVhc2VUYXNrcy52YWx1ZXMoKSkKKyAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90
ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgc2l6ZSk7CisgICAgbV9wZW5k
aW5nU3BhY2VJbmNyZWFzZVRhc2tzLmNsZWFyKCk7CiAKICAgICAvLyBFcnJvciBvdXQgYWxsIHRy
YW5zYWN0aW9ucwogICAgIGZvciAoYXV0byYgaWRlbnRpZmllciA6IGNvcHlUb1ZlY3RvcihtX2lu
UHJvZ3Jlc3NUcmFuc2FjdGlvbnMua2V5cygpKSkKQEAgLTIyNDEsMzMgKzIyNjAsOCBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKQogICAgIHBv
c3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKSk7CiB9CiAKLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKE9wdGlvbmFsPHVp
bnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgaWYgKG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyKSB7Ci0gICAg
ICAgIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciA9IG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlm
aWVyLnZhbHVlKCk7Ci0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRpbmdTcGFjZUluY3Jl
YXNpbmdUYXNrcy5maW5kKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0gICAgICAgIGlmIChpdGVyYXRv
ciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5lbmQoKSkgewotICAgICAgICAgICAg
bV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4o
KSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2lu
Z1Rhc2tzLnJlbW92ZShpdGVyYXRvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1aW50NjRf
dCBkYXRhYmFzZVNpemUgPSBtX25ld0RhdGFiYXNlU2l6ZTsKLSAgICBpZiAoZGF0YWJhc2VTaXpl
ICE9IG1fY3VycmVudERhdGFiYXNlU2l6ZSkgewotICAgICAgICBpZiAoZGF0YWJhc2VTaXplID4g
bV9jdXJyZW50RGF0YWJhc2VTaXplKQotICAgICAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3Bh
Y2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGF0YWJhc2VTaXplIC0gbV9jdXJyZW50RGF0
YWJhc2VTaXplKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNl
U3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgbV9jdXJyZW50RGF0YWJhc2VTaXplIC0g
ZGF0YWJhc2VTaXplKTsKLSAgICAgICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gZGF0YWJhc2VT
aXplOwotICAgIH0KLX0KLQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2Fs
bGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3Ip
CiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLQog
ICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Vycm9yQ2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlm
aWVyKTsKICAgICBBU1NFUlQoY2FsbGJhY2sgfHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7
CiAgICAgaWYgKGNhbGxiYWNrKSB7CkBAIC0yMjc5LDggKzIyNzMsNiBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1LZXlEYXRhQ2FsbGJh
Y2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNv
bnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKIHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRl
ZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAgICAgYXV0byBjYWxsYmFjayA9IG1fa2V5RGF0YUNh
bGxiYWNrcy50YWtlKGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGNhbGxiYWNrIHx8
IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogICAgIGlmIChjYWxsYmFjaykgewpAQCAtMjMy
NSw4ICsyMzE3LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvdW50Q2FsbGJh
Y2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogCiB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpmb3JnZXRFcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikK
IHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAg
ICAgQVNTRVJUKG1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMoY2FsbGJhY2tJZGVudGlmaWVyKSk7
CiAgICAgQVNTRVJUKG1fY2FsbGJhY2tRdWV1ZS5sYXN0KCkgPT0gY2FsbGJhY2tJZGVudGlmaWVy
KTsKICAgICBtX2NhbGxiYWNrUXVldWUucmVtb3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
aAppbmRleCA1M2IyMWRmZTRkMjFkYTU1ZmZjYTZmMDZmYjA2YjIyNzVjMWVjZjhkLi42YjFlZjgz
ZTA5YTExZWM5MTlkMTZlZGU1ZTUzOGU0NTJkOGRmMjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
aApAQCAtMTE2LDggKzExNiw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFyZENsb3NlZEZvclVz
ZXJEZWxldGUoKSBjb25zdCB7IHJldHVybiBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlOyB9CiAK
LSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdDsKLQogICAgIHZvaWQgZmluaXNoQWN0aXZl
VHJhbnNhY3Rpb25zKCk7CiAKIHByaXZhdGU6CkBAIC0xNjAsNyArMTU4LDcgQEAgcHJpdmF0ZToK
IAogICAgIC8vIERhdGFiYXNlIHRocmVhZCBvcGVyYXRpb25zCiAgICAgdm9pZCBkZWxldGVCYWNr
aW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7Ci0gICAgdm9pZCBvcGVuQmFj
a2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOworICAgIHZvaWQgb3BlbkJh
Y2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImLCB1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybUFib3J0VHJhbnNhY3Rpb24odWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBiZWdpblRyYW5zYWN0aW9uSW5CYWNraW5nU3Rv
cmUoY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJik7CkBAIC0xODgsMTUgKzE4NiwxNSBAQCBwcml2
YXRlOgogCiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVC
YWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJh
Y2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYpOwotICAg
IHZvaWQgZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKKyAgICB2
b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURC
RXJyb3ImLCB1aW50NjRfdCBhY3R1YWxUYXNrU2l6ZSwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyKTsKKyAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0
IElEQk9iamVjdFN0b3JlSW5mbyYpOwogICAgIHZvaWQgZGlkUGVyZm9ybURlbGV0ZU9iamVjdFN0
b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotICAgIHZvaWQgZGlkUGVyZm9ybVJlbmFtZU9iamVj
dFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSk7CisgICAg
dm9pZCBkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IHRhc2tTaXplLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSk7CiAgICAgdm9pZCBkaWRQZXJm
b3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QkVycm9yJik7Ci0gICAgdm9pZCBkaWRQZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQkluZGV4SW5mbyYpOworICAg
IHZvaWQgZGlkUGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCSW5kZXhJbmZvJik7
CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyKTsKLSAgICB2b2lkIGRpZFBlcmZvcm1SZW5hbWVJbmRleCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmV3TmFtZSk7Ci0gICAgdm9pZCBkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQktleURhdGEmKTsKKyAgICB2
b2lkIGRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQkVycm9yJiwgdWludDY0X3QgdGFza1NpemUsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUp
OworICAgIHZvaWQgZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCS2V5RGF0YSYp
OwogICAgIHZvaWQgZGlkUGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCR2V0UmVzdWx0Jik7CiAgICAgdm9pZCBkaWRQ
ZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QkVycm9yJiwgY29uc3QgSURCR2V0QWxsUmVzdWx0Jik7CiAgICAgdm9pZCBkaWRQZXJmb3JtR2V0
Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2
NF90KTsKQEAgLTIxMSw4ICsyMDksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUGVyZm9ybVVu
Y29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGRpZFNodXRkb3duRm9y
Q2xvc2UoKTsKIAotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNh
bGxiYWNrJiYsIHVpbnQ2NF90IHRhc2tTaXplID0gMCk7Ci0gICAgdWludDY0X3Qgc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmLCB1aW50NjRfdCB0YXNrU2l6ZSA9IDAp
OworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYp
OworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2sm
Jik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEdldEFsbFJlc3VsdHND
YWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoR2V0UmVz
dWx0Q2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKENv
dW50Q2FsbGJhY2smJik7CkBAIC0yNDksNyArMjQ3LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3QgdGFz
a1NpemUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChP
cHRpb25hbDxJREJFcnJvcj4mJik+JiYpOwogICAgIHZvaWQgd2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZVNwYWNlVXNl
ZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllciA9
IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90
IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICB2b2lkIGZpbmlzaFNwYWNlSW5j
cmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IGFjdHVhbFRhc2tTaXplKTsK
KworICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigp
OwogCiAgICAgUmVmPElEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAgSURCRGF0YWJhc2VJZGVudGlm
aWVyIG1faWRlbnRpZmllcjsKQEAgLTMwMiw5ICszMDMsNyBAQCBwcml2YXRlOgogCiAgICAgSGFz
aFNldDxJREJSZXNvdXJjZUlkZW50aWZpZXI+IG1fY3Vyc29yUHJlZmV0Y2hlczsKIAotICAgIEhh
c2hNYXA8dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrczsK
LSAgICB1aW50NjRfdCBtX2N1cnJlbnREYXRhYmFzZVNpemUgeyAwIH07Ci0gICAgdWludDY0X3Qg
bV9uZXdEYXRhYmFzZVNpemUgeyAwIH07CisgICAgSGFzaE1hcDx1aW50NjRfdCwgdWludDY0X3Q+
IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNl
cnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQkVycm9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURC
RXJyb3IuaAppbmRleCAzYTk1YmIzODA1MGRlYWIyOGMyZGMxYTdhZTY1ZmUyN2Y2YWY4ODU2Li5j
ZWY0OGFiZDkzNTNhMmNkMmFhMDFjZDZiYjE3YjBlYTUyZTViZDhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaApAQCAtOTcsNiAr
OTcsMjAgQEAgYm9vbCBJREJFcnJvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElEQkVycm9y
JiBlcnJvcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorY2xhc3MgSURCRXJyb3JPclNpemUgewor
cHVibGljOgorICAgIElEQkVycm9yT3JTaXplKCkgPSBkZWZhdWx0OworICAgIElEQkVycm9yT3JT
aXplKHVpbnQ2NF90IHNpemUpIDogbV9zaXplKHNpemUpIHsgfQorICAgIElEQkVycm9yT3JTaXpl
KElEQkVycm9yJiYgZXJyb3IpIDogbV9lcnJvcihXVEZNb3ZlKGVycm9yKSkgeyB9CisgICAgYm9v
bCBoYXNFcnJvcigpIHsgcmV0dXJuICFtX2Vycm9yLmlzTnVsbCgpOyB9CisgICAgdWludDY0X3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIGNvbnN0IElEQkVycm9yJiBlcnJv
cigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KKworcHJpdmF0ZToKKyAgICBJREJFcnJvciBt
X2Vycm9yOworICAgIHVpbnQ2NF90IG1fc2l6ZSB7IDAgfTsKK307CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380273</attachid>
            <date>2019-10-04 17:37:55 -0700</date>
            <delta_ts>2019-10-07 08:46:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202483-20191004173754.patch</filename>
            <type>text/plain</type>
            <size>2295</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzc3YmZmODlhNTRjOGI2
ZGZmMTY4YjRhZWM0YmRiYTU2ZTkxYzU5MS4uM2MxNDk4YzhjZmZlMzVlYzlhYjQ3MzZiZTU1YTgx
ZTM2MjFkMzRlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE5LTEwLTA0ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogaW5jbHVk
ZSBzaXplIG9mIGluZGV4IHJlY29yZHMgaW4gc2l6ZSBlc3RpbWF0ZSBvZiBwdXQvYWRkIHRhc2sK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjQ4Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZSBoYXMgdHdvIHRhYmxlcyBJbmRleFJlY29yZHMgYW5kIFJlY29yZHMuIEZv
ciBhZGQgb3BlcmF0aW9uIGFkZChWQUxVRSwgS0VZKSwgd2UgYWRkIGEgbmV3IAorICAgICAgICBy
ZWNvcmQgdG8gUmVjb3JkcyB0YWJsZS4gSWYgd2UgY2FuIGV4dHJhY3QgaW5kZXggdmFsdWUgZnJv
bSBWQUxVRSBmb3Igc29tZSBpbmRleCwgd2Ugd291bGQgYWRkIGEgbmV3IHJlY29yZCB0bworICAg
ICAgICBJbmRleFJlY29yZHMgdGFibGUuCisKKyAgICAgICAgV2UgZXN0aW1hdGVkIHRoZSB0YXNr
IHN6aWUgb2YgYWRkIHRhc2sgd2l0aCAoS0VZX1NJWkUgKyBWQUxVRV9TSVpFKSwgYnV0IHdlIGRp
ZG4ndCBjb3VudCB0aGUgc2l6ZSB0aGF0IGNvdWxkIGJlCisgICAgICAgIGFkZGVkIHRvIHRoZSBJ
bmRleFJlY29yZHMgdGFibGUuIFRoaXMgY291bGQgbGVhZCB0byBzdG9yYWdlIGFidXNlLgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
KToKKwogMjAxOS0xMC0wNCAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3VuZy5jb20+
CiAKICAgICAgICAgTmVnYXRpdmUgcmFkaWkgaW4gcmFkaWFsIGdyYWRpZW50cyBzaG91bGQgYmUg
cmVqZWN0ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBjZTgxZWIwOTFiZWRmMGUw
ZThkYWY0ZWZlZmRkNDBjMDJlMTdmMzQwLi4zNTU2Zjk1NjMwMDYwNjVjNjljMGY5ZGFhYWE0MTQx
YmUzODk2NTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTEyMTQsNiArMTIxNCwx
MSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29ucwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkIik7CiAKICAgICBhdXRvIHRhc2tTaXplID0gZGVm
YXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRl
U2l6ZSh2YWx1ZSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKKyAgICBhdXRvKiBvYmpl
Y3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3QoU3RvcmVyZXF1
ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CisgICAgaWYgKG9iamVjdFN0b3JlKQor
ICAgICAgICB0YXNrU2l6ZSArPSBvYmplY3RTdG9yZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRh
c2tTaXplOworCiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgInB1dE9y
QWRkIiwgW3RoaXMsIHRhc2tTaXplLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIG92ZXJ3cml0ZU1vZGVdKGF1dG8gZXJyb3IpIG11dGFi
bGUgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUo
KmVycm9yKSwgeyB9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380330</attachid>
            <date>2019-10-07 08:46:19 -0700</date>
            <delta_ts>2019-10-09 13:07:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202483-20191007084618.patch</filename>
            <type>text/plain</type>
            <size>2295</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzc3YmZmODlhNTRjOGI2
ZGZmMTY4YjRhZWM0YmRiYTU2ZTkxYzU5MS4uM2MxNDk4YzhjZmZlMzVlYzlhYjQ3MzZiZTU1YTgx
ZTM2MjFkMzRlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE5LTEwLTA0ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogaW5jbHVk
ZSBzaXplIG9mIGluZGV4IHJlY29yZHMgaW4gc2l6ZSBlc3RpbWF0ZSBvZiBwdXQvYWRkIHRhc2sK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjQ4Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZSBoYXMgdHdvIHRhYmxlcyBJbmRleFJlY29yZHMgYW5kIFJlY29yZHMuIEZv
ciBhZGQgb3BlcmF0aW9uIGFkZChWQUxVRSwgS0VZKSwgd2UgYWRkIGEgbmV3IAorICAgICAgICBy
ZWNvcmQgdG8gUmVjb3JkcyB0YWJsZS4gSWYgd2UgY2FuIGV4dHJhY3QgaW5kZXggdmFsdWUgZnJv
bSBWQUxVRSBmb3Igc29tZSBpbmRleCwgd2Ugd291bGQgYWRkIGEgbmV3IHJlY29yZCB0bworICAg
ICAgICBJbmRleFJlY29yZHMgdGFibGUuCisKKyAgICAgICAgV2UgZXN0aW1hdGVkIHRoZSB0YXNr
IHN6aWUgb2YgYWRkIHRhc2sgd2l0aCAoS0VZX1NJWkUgKyBWQUxVRV9TSVpFKSwgYnV0IHdlIGRp
ZG4ndCBjb3VudCB0aGUgc2l6ZSB0aGF0IGNvdWxkIGJlCisgICAgICAgIGFkZGVkIHRvIHRoZSBJ
bmRleFJlY29yZHMgdGFibGUuIFRoaXMgY291bGQgbGVhZCB0byBzdG9yYWdlIGFidXNlLgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
KToKKwogMjAxOS0xMC0wNCAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3VuZy5jb20+
CiAKICAgICAgICAgTmVnYXRpdmUgcmFkaWkgaW4gcmFkaWFsIGdyYWRpZW50cyBzaG91bGQgYmUg
cmVqZWN0ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBjZTgxZWIwOTFiZWRmMGUw
ZThkYWY0ZWZlZmRkNDBjMDJlMTdmMzQwLi41NTIwOTgzMDM2NWNjZWUzYTY1MmM4NDNmNTA2M2E4
MTEzOTVkNDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTEyMTQsNiArMTIxNCwx
MSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29ucwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkIik7CiAKICAgICBhdXRvIHRhc2tTaXplID0gZGVm
YXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRl
U2l6ZSh2YWx1ZSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKKyAgICBhdXRvKiBvYmpl
Y3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShyZXF1
ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CisgICAgaWYgKG9iamVjdFN0b3JlKQor
ICAgICAgICB0YXNrU2l6ZSArPSBvYmplY3RTdG9yZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRh
c2tTaXplOworCiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgInB1dE9y
QWRkIiwgW3RoaXMsIHRhc2tTaXplLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIG92ZXJ3cml0ZU1vZGVdKGF1dG8gZXJyb3IpIG11dGFi
bGUgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUo
KmVycm9yKSwgeyB9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380558</attachid>
            <date>2019-10-09 13:07:57 -0700</date>
            <delta_ts>2019-10-09 14:16:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202483-20191009130756.patch</filename>
            <type>text/plain</type>
            <size>9985</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwODM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDYwY2I3ZDk1MWYyOTMy
YjliNGI4OTBlZmMyYzVkMTI4ZTcxNTNmYS4uNDQ3N2QxMjMwZjllM2ZlYmQzYjliNGM4NTU4NTVh
YWU2MDg5NzE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTEwLTA5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogaW5jbHVk
ZSBzaXplIG9mIGluZGV4IHJlY29yZHMgaW4gc2l6ZSBlc3RpbWF0ZSBvZiBwdXQvYWRkIHRhc2sK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjQ4Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZSBoYXMgdHdvIHRhYmxlcyBJbmRleFJlY29yZHMgYW5kIFJlY29yZHMuIEZv
ciBhZGQgb3BlcmF0aW9uIGFkZChWQUxVRSwgS0VZKSwgd2UgYWRkIGEgbmV3IAorICAgICAgICBy
ZWNvcmQgdG8gUmVjb3JkcyB0YWJsZS4gSWYgd2UgY2FuIGV4dHJhY3QgaW5kZXggdmFsdWUgZnJv
bSBWQUxVRSBmb3Igc29tZSBpbmRleCwgd2Ugd291bGQgYWRkIGEgbmV3IHJlY29yZCB0bworICAg
ICAgICBJbmRleFJlY29yZHMgdGFibGUuCisKKyAgICAgICAgV2UgZXN0aW1hdGVkIHRoZSB0YXNr
IHN6aWUgb2YgYWRkIHRhc2sgd2l0aCAoS0VZX1NJWkUgKyBWQUxVRV9TSVpFKSwgYnV0IHdlIGRp
ZG4ndCBjb3VudCB0aGUgc2l6ZSB0aGF0IGNvdWxkIGJlCisgICAgICAgIGFkZGVkIHRvIHRoZSBJ
bmRleFJlY29yZHMgdGFibGUuIFRoaXMgY291bGQgbGVhZCB0byBzdG9yYWdlIGFidXNlLgorCisg
ICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS5odG1s
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0
T3JBZGQpOgorCiAyMDE5LTEwLTA4ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBSZXN0YWJpbGl6ZSBub24tdW5pZmllZCBidWls
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGM5MzlhMDAxODI3Zjg5ODA1ZGM4MmI4
YzVhMzlmNjM4YTczNGFhYjQuLjhhNjM1YmQyNzE4ZWM4ZmFiNWU1ZTc1ZDZiNzMwZjMwZjJlYTdi
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTIyOCw2ICsxMjI4LDExIEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zCiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cHV0T3JBZGQiKTsKIAogICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3Jp
dGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsgZXN0aW1hdGVTaXplKHZh
bHVlKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOworICAgIGF1dG8qIG9iamVjdFN0b3Jl
ID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKHJlcXVlc3REYXRh
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKKyAgICBpZiAob2JqZWN0U3RvcmUpCisgICAgICAg
IHRhc2tTaXplICs9IG9iamVjdFN0b3JlLT5pbmRleE5hbWVzKCkuc2l6ZSgpICogdGFza1NpemU7
CisKICAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicHV0T3JBZGQiLCBb
dGhpcywgdGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgb3ZlcndyaXRlTW9kZV0oYXV0byBlcnJvcikgbXV0YWJsZSB7CiAg
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2Vl
ZGVkRXJyb3IpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IGRlMzZhMTJlOWE3NjNjMDEzN2MzYWZiNzljYWYxMTM3NGE0OGRjOWEuLmZiMWQ3MzI4
NGRlOGViYjcyYzNkNjRiNDZmM2MyY2ZmZGVlMjIyOGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAor
MjAxOS0xMC0wOSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBJ
bmRleGVkREI6IGluY2x1ZGUgc2l6ZSBvZiBpbmRleCByZWNvcmRzIGluIHNpemUgZXN0aW1hdGUg
b2YgcHV0L2FkZCB0YXNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDI0ODMKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWly
by9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qt
c2l6ZS1lc3RpbWF0ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5k
ZXhlZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9y
YWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1zaXplLWVzdGltYXRlLmpzOiBBZGRlZC4K
KyAgICAgICAgKHJhbmRvbUtleSk6CisgICAgICAgIChyYW5kb21Qcm9wZXJ0eVZhbHVlKToKKyAg
ICAgICAgKGNyZWF0ZU9iamVjdCk6CisgICAgICAgIChwcmVwYXJlRGF0YWJhc2UpOgorICAgICAg
ICAob25PcGVuU3VjY2Vzcyk6CisKIDIwMTktMTAtMDggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IGRhdGEgY2hhbm5lbCBidWZmZXIgYW1vdW50
IGxvdyB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0
RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRp
b25zCmluZGV4IDJkNzliMWQwMzI5OGQyZGRlYmEyZjA3M2I2MzU5YjM2MGE0Y2IyNzEuLmFhYzZk
MzI1MzRiNzYzM2M5YTc1M2M0OTk0MWE3M2Y5YmFhZjI1MmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTMwMyw2ICszMDMsNyBAQCBodHRw
L3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0Lmh0dHBzLmh0bWwgWyBTa2lwIF0KIGh0dHAv
dGVzdHMvSW5kZXhlZERCL3N0b3JhZ2UtbGltaXQtMS5odHRwcy5odG1sIFsgU2tpcCBdCiBodHRw
L3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0LTIuaHR0cHMuaHRtbCBbIFNraXAgXQogc3Rv
cmFnZS9pbmRleGVkZGIvc3RvcmFnZS1saW1pdC5odG1sIFsgU2tpcCBdCitzdG9yYWdlL2luZGV4
ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUuaHRtbCBbIFNraXAgXQogCiAjIFNraXAgV2ViUlRD
IGZvciBub3cgaW4gV0sxCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0YyBb
IFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3Rh
dGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwppbmRleCAz
ZDUxZjNmZjVkMjQ2ZWYzZTYyY2YxOWVmYjZkYjIxOWUxMzU0MzI3Li5kMDNlNmM2ZmZkYmFmMGY4
ODVlMTAyMjY5NTUwODBmMTE5NmIzMDViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVz
dEV4cGVjdGF0aW9ucwpAQCAtMjQxNyw2ICsyNDE3LDcgQEAgaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC93ZWItYXBwcy8wMTIuaHRtbAogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC93ZWItYXBw
cy8wMTMuaHRtbAogCiBzdG9yYWdlL2luZGV4ZWRkYi9zdG9yYWdlLWxpbWl0Lmh0bWwgWyBTa2lw
IF0KK3N0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS5odG1sIFsgU2tpcCBd
CiBodHRwL3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0Lmh0dHBzLmh0bWwgWyBTa2lwIF0K
IGh0dHAvdGVzdHMvSW5kZXhlZERCL3N0b3JhZ2UtbGltaXQtMS5odHRwcy5odG1sIFsgU2tpcCBd
CiBodHRwL3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0LTIuaHR0cHMuaHRtbCBbIFNraXAg
XQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0
aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggYTdlNWM3MmI3ODdhNTM2MTUxMjFmNzkwMTg5NDI0Y2FhYmEyZWIyZi4uNDQxYTgyZmJjNjk4
N2U0YzUyMjVhYzFiNGVlMmNmYzJhNTlhNmY3OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xNDcxLDYgKzE0NzEsNyBAQCBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vaWRidHJhbnNhY3Rpb24tb2JqZWN0c3RvcmUtZmFpbHVyZXMuaHRt
bCBbIEZhaWx1cmUgUGFzcwogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0
bWwgWyBGYWlsdXJlIFBhc3MgXQogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29y
Lmh0bWwgWyBQYXNzIFRpbWVvdXQgXQogc3RvcmFnZS9pbmRleGVkZGIvc3RvcmFnZS1saW1pdC5o
dG1sIFsgRmFpbHVyZSBdCitzdG9yYWdlL2luZGV4ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUu
aHRtbCBbIEZhaWx1cmUgXQogc3RvcmFnZS9pbmRleGVkZGIvc3RydWN0dXJlZC1jbG9uZS5odG1s
IFsgUGFzcyBUaW1lb3V0IF0KIHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWFib3J0
Lmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogc3RvcmFnZS9pbmRleGVkZGIvd2FzbS1leGNlcHRpb25z
Lmh0bWwgWyBGYWlsdXJlIF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg2MmNjYmIzZTAwNDRkM2I1MWM4OTY2Y2VlNGYxZmQ2NGZiN2UyZTUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1h
dGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0
IGVzdGltYXRlZCBzaXplIG9mIElEQiBkYXRhYmFzZSB0YXNrIGlzIG5vdCBzbWFsbGVyIHRoYW4g
b3IgY2xvc2UgdG8gYWN0dWFsIHNwYWNlIGluY3JlYXNlIChtYXliZSBzdWJqZWN0IHRvIG91ciBp
bXBsZW1lbnRhdGlvbiBvZiBiYWNraW5nIHN0b3JlLikKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK2luZGV4ZWREQiA9IHNlbGYuaW5kZXhlZERCIHx8IHNlbGYud2Via2l0SW5kZXhl
ZERCIHx8IHNlbGYubW96SW5kZXhlZERCIHx8IHNlbGYubXNJbmRleGVkREIgfHwgc2VsZi5PSW5k
ZXhlZERCOworCitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGJuYW1lKQoraW5kZXhlZERCLm9w
ZW4oZGJuYW1lKQorCitwcmVwYXJlRGF0YWJhc2UoKToKK0NyZWF0ZSAyMCBpbmRleGVzCisKK29u
T3BlblN1Y2Nlc3MoKToKK2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorc3RvcmUgPSBkYi50cmFu
c2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykKK3JlcXVl
c3QgPSBzdG9yZS5hZGQoY3JlYXRlT2JqZWN0KCksIHJhbmRvbUtleShrZXlTaXplKSkKK1BBU1Mg
J2Vycm9yJyBpbiByZXF1ZXN0IGlzIHRydWUKK1BBU1MgcmVxdWVzdC5lcnJvci5jb2RlIGlzIERP
TUV4Y2VwdGlvbi5RVU9UQV9FWENFRURFRF9FUlIKK1BBU1MgcmVxdWVzdC5lcnJvci5uYW1lIGlz
ICJRdW90YUV4Y2VlZGVkRXJyb3IiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvcmVxdWVzdC1zaXplLWVzdGltYXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjM5YjYzMjUxYTIw
NjA1Y2QwZjI5NWVlNmIzZTc4ZTJkNGY1NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvcmVxdWVzdC1zaXplLWVzdGltYXRlLmh0bWwKQEAgLTAsMCAr
MSw5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZXF1ZXN0LXNp
emUtZXN0aW1hdGUuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3Jlc291cmNlcy9yZXF1ZXN0LXNpemUtZXN0aW1hdGUuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1zaXplLWVzdGltYXRlLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg0MDAzZDE4ZmU5YzQ3OTIzZWQzMDc2MTI3MjEzOGRiYTE0ZGZlMjgKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1zaXpl
LWVzdGltYXRlLmpzCkBAIC0wLDAgKzEsNzIgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsK
KyAgICBpbXBvcnRTY3JpcHRzKCcuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcycpOworICAg
IGltcG9ydFNjcmlwdHMoJ3NoYXJlZC5qcycpOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgdGVzdFJ1bm5lci5zZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGZhbHNlKTsKKwor
ZGVzY3JpcHRpb24oJ1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGVzdGltYXRlZCBzaXplIG9mIElE
QiBkYXRhYmFzZSB0YXNrIGlzIG5vdCBzbWFsbGVyIHRoYW4gb3IgY2xvc2UgdG8gYWN0dWFsIHNw
YWNlIGluY3JlYXNlIChtYXliZSBzdWJqZWN0IHRvIG91ciBpbXBsZW1lbnRhdGlvbiBjaGFuZ2Ug
b2YgYmFja2luZyBzdG9yZS4pJyk7CisKK2NvbnN0IHF1b3RhID0gNDAwICogMTAyNDsgLy8gQ3Vy
cmVudCBkZWZhdWx0IHF1b3RhIGZvciB0ZXN0LgorY29uc3QgaW5kZXhDb3VudCA9IDIwOworY29u
c3QgaW5kZXhWYWx1ZVNpemUgPSAxMDI0OworY29uc3Qga2V5U2l6ZSA9IDEwMjQ7CisKK2luZGV4
ZWREQlRlc3QocHJlcGFyZURhdGFiYXNlLCBvbk9wZW5TdWNjZXNzKTsKKworZnVuY3Rpb24gcmFu
ZG9tS2V5KGxlbmd0aCkgeworCXZhciBzdHIgPSAiIjsKKwlmb3IgKHZhciBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKQorCSAgICBzdHIgKz0gKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKSkK
KwlyZXR1cm4gc3RyOworfQorCitmdW5jdGlvbiByYW5kb21Qcm9wZXJ0eVZhbHVlKGxlbmd0aCkg
eworICAgIHZhciB2YWx1ZSA9IFtdOworCWZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
CisJICAgIHZhbHVlLnB1c2goTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApKQorCXJldHVy
biB2YWx1ZTsKK30KKworZnVuY3Rpb24gY3JlYXRlT2JqZWN0KCkgeworCXZhciBvYmogPSB7IH07
CisJZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleENvdW50OyBpKyspIAorCQlvYmpbImluZGV4IiAr
IGldID0gcmFuZG9tUHJvcGVydHlWYWx1ZShpbmRleFZhbHVlU2l6ZSk7CisKKwlyZXR1cm4gb2Jq
OworfQorCitmdW5jdGlvbiBwcmVwYXJlRGF0YWJhc2UoZXZlbnQpCit7CisgICAgcHJlYW1ibGUo
ZXZlbnQpOworICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICBzdG9yZSA9IGRiLmNy
ZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIHZhciBpbmRleGVzID0gW107CisKKyAgICBk
ZWJ1ZygiQ3JlYXRlICIgKyBpbmRleENvdW50ICsgIiBpbmRleGVzIik7CisgICAgLy8gVGhpcyBp
cyBhbiBleHRyZW1lIGNhc2Ugd2hlcmUgZWFjaCBvZiBpbmRleGVzIGlzIGNvbXBvc2VkIG9mIGFs
bCBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QuCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRl
eENvdW50OyBpICsrKQorICAgIAlpbmRleGVzLnB1c2goImluZGV4IiArIGkpOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSArKykKKyAgICAJc3RvcmUuY3JlYXRlSW5kZXgo
ImFsbEluZGV4ZXMiICsgaSwgaW5kZXhlcyk7Cit9CisKK2Z1bmN0aW9uIG9uT3BlblN1Y2Nlc3Mo
ZXZlbnQpCit7CisJcHJlYW1ibGUoZXZlbnQpOworCWV2YWxBbmRMb2coImRiID0gZXZlbnQudGFy
Z2V0LnJlc3VsdCIpOworICAgIGV2YWxBbmRMb2coInN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ3N0
b3JlJywgJ3JlYWR3cml0ZScpLm9iamVjdFN0b3JlKCdzdG9yZScpIik7CisgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coInJlcXVlc3QgPSBzdG9yZS5hZGQoY3JlYXRlT2JqZWN0KCksIHJhbmRvbUtl
eShrZXlTaXplKSkiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiB7CisgICAgCXNob3Vs
ZEJlVHJ1ZSgiJ2Vycm9yJyBpbiByZXF1ZXN0Iik7CisgICAgICAgIHNob3VsZEJlKCJyZXF1ZXN0
LmVycm9yLmNvZGUiLCAiRE9NRXhjZXB0aW9uLlFVT1RBX0VYQ0VFREVEX0VSUiIpOworICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlcXVlc3QuZXJyb3IubmFtZSIsICJRdW90YUV4Y2Vl
ZGVkRXJyb3IiKTsKKworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9CisgICAgcmVxdWVz
dC5vbnN1Y2Nlc3MgPSAoKSA9PiB7CisgICAgCXRlc3RGYWlsZWQoIkFkZCBvcGVyYXRpb24gc2hv
dWxkIGZhaWwgYmVjYXVzZSB0YXNrIHNpemUgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxhYmxl
Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380564</attachid>
            <date>2019-10-09 14:16:17 -0700</date>
            <delta_ts>2019-10-09 14:18:58 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-202483-20191009141616.patch</filename>
            <type>text/plain</type>
            <size>9978</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwODM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDYwY2I3ZDk1MWYyOTMy
YjliNGI4OTBlZmMyYzVkMTI4ZTcxNTNmYS4uNDQ3N2QxMjMwZjllM2ZlYmQzYjliNGM4NTU4NTVh
YWU2MDg5NzE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTEwLTA5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogaW5jbHVk
ZSBzaXplIG9mIGluZGV4IHJlY29yZHMgaW4gc2l6ZSBlc3RpbWF0ZSBvZiBwdXQvYWRkIHRhc2sK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjQ4Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZSBoYXMgdHdvIHRhYmxlcyBJbmRleFJlY29yZHMgYW5kIFJlY29yZHMuIEZv
ciBhZGQgb3BlcmF0aW9uIGFkZChWQUxVRSwgS0VZKSwgd2UgYWRkIGEgbmV3IAorICAgICAgICBy
ZWNvcmQgdG8gUmVjb3JkcyB0YWJsZS4gSWYgd2UgY2FuIGV4dHJhY3QgaW5kZXggdmFsdWUgZnJv
bSBWQUxVRSBmb3Igc29tZSBpbmRleCwgd2Ugd291bGQgYWRkIGEgbmV3IHJlY29yZCB0bworICAg
ICAgICBJbmRleFJlY29yZHMgdGFibGUuCisKKyAgICAgICAgV2UgZXN0aW1hdGVkIHRoZSB0YXNr
IHN6aWUgb2YgYWRkIHRhc2sgd2l0aCAoS0VZX1NJWkUgKyBWQUxVRV9TSVpFKSwgYnV0IHdlIGRp
ZG4ndCBjb3VudCB0aGUgc2l6ZSB0aGF0IGNvdWxkIGJlCisgICAgICAgIGFkZGVkIHRvIHRoZSBJ
bmRleFJlY29yZHMgdGFibGUuIFRoaXMgY291bGQgbGVhZCB0byBzdG9yYWdlIGFidXNlLgorCisg
ICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS5odG1s
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0
T3JBZGQpOgorCiAyMDE5LTEwLTA4ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBSZXN0YWJpbGl6ZSBub24tdW5pZmllZCBidWls
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGM5MzlhMDAxODI3Zjg5ODA1ZGM4MmI4
YzVhMzlmNjM4YTczNGFhYjQuLjhhNjM1YmQyNzE4ZWM4ZmFiNWU1ZTc1ZDZiNzMwZjMwZjJlYTdi
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTIyOCw2ICsxMjI4LDExIEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zCiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cHV0T3JBZGQiKTsKIAogICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3Jp
dGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsgZXN0aW1hdGVTaXplKHZh
bHVlKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOworICAgIGF1dG8qIG9iamVjdFN0b3Jl
ID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKHJlcXVlc3REYXRh
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKKyAgICBpZiAob2JqZWN0U3RvcmUpCisgICAgICAg
IHRhc2tTaXplICs9IG9iamVjdFN0b3JlLT5pbmRleE5hbWVzKCkuc2l6ZSgpICogdGFza1NpemU7
CisKICAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicHV0T3JBZGQiLCBb
dGhpcywgdGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgb3ZlcndyaXRlTW9kZV0oYXV0byBlcnJvcikgbXV0YWJsZSB7CiAg
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2Vl
ZGVkRXJyb3IpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IGRlMzZhMTJlOWE3NjNjMDEzN2MzYWZiNzljYWYxMTM3NGE0OGRjOWEuLmZiMWQ3MzI4
NGRlOGViYjcyYzNkNjRiNDZmM2MyY2ZmZGVlMjIyOGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAor
MjAxOS0xMC0wOSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBJ
bmRleGVkREI6IGluY2x1ZGUgc2l6ZSBvZiBpbmRleCByZWNvcmRzIGluIHNpemUgZXN0aW1hdGUg
b2YgcHV0L2FkZCB0YXNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDI0ODMKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWly
by9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qt
c2l6ZS1lc3RpbWF0ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5k
ZXhlZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9y
YWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1zaXplLWVzdGltYXRlLmpzOiBBZGRlZC4K
KyAgICAgICAgKHJhbmRvbUtleSk6CisgICAgICAgIChyYW5kb21Qcm9wZXJ0eVZhbHVlKToKKyAg
ICAgICAgKGNyZWF0ZU9iamVjdCk6CisgICAgICAgIChwcmVwYXJlRGF0YWJhc2UpOgorICAgICAg
ICAob25PcGVuU3VjY2Vzcyk6CisKIDIwMTktMTAtMDggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IGRhdGEgY2hhbm5lbCBidWZmZXIgYW1vdW50
IGxvdyB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0
RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRp
b25zCmluZGV4IDJkNzliMWQwMzI5OGQyZGRlYmEyZjA3M2I2MzU5YjM2MGE0Y2IyNzEuLmFhYzZk
MzI1MzRiNzYzM2M5YTc1M2M0OTk0MWE3M2Y5YmFhZjI1MmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTMwMyw2ICszMDMsNyBAQCBodHRw
L3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0Lmh0dHBzLmh0bWwgWyBTa2lwIF0KIGh0dHAv
dGVzdHMvSW5kZXhlZERCL3N0b3JhZ2UtbGltaXQtMS5odHRwcy5odG1sIFsgU2tpcCBdCiBodHRw
L3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0LTIuaHR0cHMuaHRtbCBbIFNraXAgXQogc3Rv
cmFnZS9pbmRleGVkZGIvc3RvcmFnZS1saW1pdC5odG1sIFsgU2tpcCBdCitzdG9yYWdlL2luZGV4
ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUuaHRtbCBbIFNraXAgXQogCiAjIFNraXAgV2ViUlRD
IGZvciBub3cgaW4gV0sxCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0YyBb
IFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3Rh
dGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwppbmRleCAz
ZDUxZjNmZjVkMjQ2ZWYzZTYyY2YxOWVmYjZkYjIxOWUxMzU0MzI3Li5kMDNlNmM2ZmZkYmFmMGY4
ODVlMTAyMjY5NTUwODBmMTE5NmIzMDViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVz
dEV4cGVjdGF0aW9ucwpAQCAtMjQxNyw2ICsyNDE3LDcgQEAgaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC93ZWItYXBwcy8wMTIuaHRtbAogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC93ZWItYXBw
cy8wMTMuaHRtbAogCiBzdG9yYWdlL2luZGV4ZWRkYi9zdG9yYWdlLWxpbWl0Lmh0bWwgWyBTa2lw
IF0KK3N0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS5odG1sIFsgU2tpcCBd
CiBodHRwL3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0Lmh0dHBzLmh0bWwgWyBTa2lwIF0K
IGh0dHAvdGVzdHMvSW5kZXhlZERCL3N0b3JhZ2UtbGltaXQtMS5odHRwcy5odG1sIFsgU2tpcCBd
CiBodHRwL3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0LTIuaHR0cHMuaHRtbCBbIFNraXAg
XQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0
aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggYTdlNWM3MmI3ODdhNTM2MTUxMjFmNzkwMTg5NDI0Y2FhYmEyZWIyZi4uNDQxYTgyZmJjNjk4
N2U0YzUyMjVhYzFiNGVlMmNmYzJhNTlhNmY3OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xNDcxLDYgKzE0NzEsNyBAQCBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vaWRidHJhbnNhY3Rpb24tb2JqZWN0c3RvcmUtZmFpbHVyZXMuaHRt
bCBbIEZhaWx1cmUgUGFzcwogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0
bWwgWyBGYWlsdXJlIFBhc3MgXQogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29y
Lmh0bWwgWyBQYXNzIFRpbWVvdXQgXQogc3RvcmFnZS9pbmRleGVkZGIvc3RvcmFnZS1saW1pdC5o
dG1sIFsgRmFpbHVyZSBdCitzdG9yYWdlL2luZGV4ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUu
aHRtbCBbIEZhaWx1cmUgXQogc3RvcmFnZS9pbmRleGVkZGIvc3RydWN0dXJlZC1jbG9uZS5odG1s
IFsgUGFzcyBUaW1lb3V0IF0KIHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWFib3J0
Lmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogc3RvcmFnZS9pbmRleGVkZGIvd2FzbS1leGNlcHRpb25z
Lmh0bWwgWyBGYWlsdXJlIF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg2MmNjYmIzZTAwNDRkM2I1MWM4OTY2Y2VlNGYxZmQ2NGZiN2UyZTUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1h
dGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0
IGVzdGltYXRlZCBzaXplIG9mIElEQiBkYXRhYmFzZSB0YXNrIGlzIG5vdCBzbWFsbGVyIHRoYW4g
b3IgY2xvc2UgdG8gYWN0dWFsIHNwYWNlIGluY3JlYXNlIChtYXliZSBzdWJqZWN0IHRvIG91ciBp
bXBsZW1lbnRhdGlvbiBvZiBiYWNraW5nIHN0b3JlLikKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK2luZGV4ZWREQiA9IHNlbGYuaW5kZXhlZERCIHx8IHNlbGYud2Via2l0SW5kZXhl
ZERCIHx8IHNlbGYubW96SW5kZXhlZERCIHx8IHNlbGYubXNJbmRleGVkREIgfHwgc2VsZi5PSW5k
ZXhlZERCOworCitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGJuYW1lKQoraW5kZXhlZERCLm9w
ZW4oZGJuYW1lKQorCitwcmVwYXJlRGF0YWJhc2UoKToKK0NyZWF0ZSAyMCBpbmRleGVzCisKK29u
T3BlblN1Y2Nlc3MoKToKK2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorc3RvcmUgPSBkYi50cmFu
c2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykKK3JlcXVl
c3QgPSBzdG9yZS5hZGQoY3JlYXRlT2JqZWN0KCksIHJhbmRvbUtleShrZXlTaXplKSkKK1BBU1Mg
J2Vycm9yJyBpbiByZXF1ZXN0IGlzIHRydWUKK1BBU1MgcmVxdWVzdC5lcnJvci5jb2RlIGlzIERP
TUV4Y2VwdGlvbi5RVU9UQV9FWENFRURFRF9FUlIKK1BBU1MgcmVxdWVzdC5lcnJvci5uYW1lIGlz
ICJRdW90YUV4Y2VlZGVkRXJyb3IiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvcmVxdWVzdC1zaXplLWVzdGltYXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjM5YjYzMjUxYTIw
NjA1Y2QwZjI5NWVlNmIzZTc4ZTJkNGY1NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvcmVxdWVzdC1zaXplLWVzdGltYXRlLmh0bWwKQEAgLTAsMCAr
MSw5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZXF1ZXN0LXNp
emUtZXN0aW1hdGUuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3Jlc291cmNlcy9yZXF1ZXN0LXNpemUtZXN0aW1hdGUuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1zaXplLWVzdGltYXRlLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmEyYWIwNjAyNjI2MTQ1YjYzOTgzODMxMzc3YjQ3ZTkxNTUzZWU0YmIKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1zaXpl
LWVzdGltYXRlLmpzCkBAIC0wLDAgKzEsNzIgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsK
KyAgICBpbXBvcnRTY3JpcHRzKCcuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcycpOworICAg
IGltcG9ydFNjcmlwdHMoJ3NoYXJlZC5qcycpOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgdGVzdFJ1bm5lci5zZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGZhbHNlKTsKKwor
ZGVzY3JpcHRpb24oJ1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGVzdGltYXRlZCBzaXplIG9mIElE
QiBkYXRhYmFzZSB0YXNrIGlzIG5vdCBzbWFsbGVyIHRoYW4gb3IgY2xvc2UgdG8gYWN0dWFsIHNw
YWNlIGluY3JlYXNlIChtYXliZSBzdWJqZWN0IHRvIG91ciBpbXBsZW1lbnRhdGlvbiBvZiBiYWNr
aW5nIHN0b3JlLiknKTsKKworY29uc3QgcXVvdGEgPSA0MDAgKiAxMDI0OyAvLyBDdXJyZW50IGRl
ZmF1bHQgcXVvdGEgZm9yIHRlc3QuCitjb25zdCBpbmRleENvdW50ID0gMjA7Citjb25zdCBpbmRl
eFZhbHVlU2l6ZSA9IDEwMjQ7Citjb25zdCBrZXlTaXplID0gMTAyNDsKKworaW5kZXhlZERCVGVz
dChwcmVwYXJlRGF0YWJhc2UsIG9uT3BlblN1Y2Nlc3MpOworCitmdW5jdGlvbiByYW5kb21LZXko
bGVuZ3RoKSB7CisJdmFyIHN0ciA9ICIiOworCWZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspCisJICAgIHN0ciArPSAoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApKQorCXJldHVy
biBzdHI7Cit9CisKK2Z1bmN0aW9uIHJhbmRvbVByb3BlcnR5VmFsdWUobGVuZ3RoKSB7CisgICAg
dmFyIHZhbHVlID0gW107CisJZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKwkgICAg
dmFsdWUucHVzaChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkpCisJcmV0dXJuIHZhbHVl
OworfQorCitmdW5jdGlvbiBjcmVhdGVPYmplY3QoKSB7CisJdmFyIG9iaiA9IHsgfTsKKwlmb3Ig
KHZhciBpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKykgCisJCW9ialsiaW5kZXgiICsgaV0gPSBy
YW5kb21Qcm9wZXJ0eVZhbHVlKGluZGV4VmFsdWVTaXplKTsKKworCXJldHVybiBvYmo7Cit9CisK
K2Z1bmN0aW9uIHByZXBhcmVEYXRhYmFzZShldmVudCkKK3sKKyAgICBwcmVhbWJsZShldmVudCk7
CisgICAgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgIHN0b3JlID0gZGIuY3JlYXRlT2Jq
ZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgdmFyIGluZGV4ZXMgPSBbXTsKKworICAgIGRlYnVnKCJD
cmVhdGUgIiArIGluZGV4Q291bnQgKyAiIGluZGV4ZXMiKTsKKyAgICAvLyBUaGlzIGlzIGFuIGV4
dHJlbWUgY2FzZSB3aGVyZSBlYWNoIG9mIGluZGV4ZXMgaXMgY29tcG9zZWQgb2YgYWxsIHByb3Bl
cnRpZXMgb2YgdGhlIG9iamVjdC4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGV4Q291bnQ7
IGkgKyspCisgICAgCWluZGV4ZXMucHVzaCgiaW5kZXgiICsgaSk7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBpbmRleENvdW50OyBpICsrKQorICAgIAlzdG9yZS5jcmVhdGVJbmRleCgiYWxsSW5k
ZXhlcyIgKyBpLCBpbmRleGVzKTsKK30KKworZnVuY3Rpb24gb25PcGVuU3VjY2VzcyhldmVudCkK
K3sKKwlwcmVhbWJsZShldmVudCk7CisJZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVz
dWx0Iik7CisgICAgZXZhbEFuZExvZygic3RvcmUgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAn
cmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykiKTsKKyAgICByZXF1ZXN0ID0gZXZhbEFu
ZExvZygicmVxdWVzdCA9IHN0b3JlLmFkZChjcmVhdGVPYmplY3QoKSwgcmFuZG9tS2V5KGtleVNp
emUpKSIpOworICAgIHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHsKKyAgICAJc2hvdWxkQmVUcnVl
KCInZXJyb3InIGluIHJlcXVlc3QiKTsKKyAgICAgICAgc2hvdWxkQmUoInJlcXVlc3QuZXJyb3Iu
Y29kZSIsICJET01FeGNlcHRpb24uUVVPVEFfRVhDRUVERURfRVJSIik7CisgICAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygicmVxdWVzdC5lcnJvci5uYW1lIiwgIlF1b3RhRXhjZWVkZWRFcnJv
ciIpOworCisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKyAgICByZXF1ZXN0Lm9uc3Vj
Y2VzcyA9ICgpID0+IHsKKyAgICAJdGVzdEZhaWxlZCgiQWRkIG9wZXJhdGlvbiBzaG91bGQgZmFp
bCBiZWNhdXNlIHRhc2sgc2l6ZSBpcyBiaWdnZXIgdGhhbiBzcGFjZSBhdmFpbGFibGUiKTsKKyAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380566</attachid>
            <date>2019-10-09 14:19:00 -0700</date>
            <delta_ts>2019-10-09 15:20:36 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-202483-20191009141859.patch</filename>
            <type>text/plain</type>
            <size>10032</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwODM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDYwY2I3ZDk1MWYyOTMy
YjliNGI4OTBlZmMyYzVkMTI4ZTcxNTNmYS4uNDQ3N2QxMjMwZjllM2ZlYmQzYjliNGM4NTU4NTVh
YWU2MDg5NzE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTEwLTA5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogaW5jbHVk
ZSBzaXplIG9mIGluZGV4IHJlY29yZHMgaW4gc2l6ZSBlc3RpbWF0ZSBvZiBwdXQvYWRkIHRhc2sK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjQ4Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZSBoYXMgdHdvIHRhYmxlcyBJbmRleFJlY29yZHMgYW5kIFJlY29yZHMuIEZv
ciBhZGQgb3BlcmF0aW9uIGFkZChWQUxVRSwgS0VZKSwgd2UgYWRkIGEgbmV3IAorICAgICAgICBy
ZWNvcmQgdG8gUmVjb3JkcyB0YWJsZS4gSWYgd2UgY2FuIGV4dHJhY3QgaW5kZXggdmFsdWUgZnJv
bSBWQUxVRSBmb3Igc29tZSBpbmRleCwgd2Ugd291bGQgYWRkIGEgbmV3IHJlY29yZCB0bworICAg
ICAgICBJbmRleFJlY29yZHMgdGFibGUuCisKKyAgICAgICAgV2UgZXN0aW1hdGVkIHRoZSB0YXNr
IHN6aWUgb2YgYWRkIHRhc2sgd2l0aCAoS0VZX1NJWkUgKyBWQUxVRV9TSVpFKSwgYnV0IHdlIGRp
ZG4ndCBjb3VudCB0aGUgc2l6ZSB0aGF0IGNvdWxkIGJlCisgICAgICAgIGFkZGVkIHRvIHRoZSBJ
bmRleFJlY29yZHMgdGFibGUuIFRoaXMgY291bGQgbGVhZCB0byBzdG9yYWdlIGFidXNlLgorCisg
ICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS5odG1s
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0
T3JBZGQpOgorCiAyMDE5LTEwLTA4ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBSZXN0YWJpbGl6ZSBub24tdW5pZmllZCBidWls
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGM5MzlhMDAxODI3Zjg5ODA1ZGM4MmI4
YzVhMzlmNjM4YTczNGFhYjQuLjhhNjM1YmQyNzE4ZWM4ZmFiNWU1ZTc1ZDZiNzMwZjMwZjJlYTdi
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTIyOCw2ICsxMjI4LDExIEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zCiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cHV0T3JBZGQiKTsKIAogICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3Jp
dGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsgZXN0aW1hdGVTaXplKHZh
bHVlKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOworICAgIGF1dG8qIG9iamVjdFN0b3Jl
ID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKHJlcXVlc3REYXRh
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKKyAgICBpZiAob2JqZWN0U3RvcmUpCisgICAgICAg
IHRhc2tTaXplICs9IG9iamVjdFN0b3JlLT5pbmRleE5hbWVzKCkuc2l6ZSgpICogdGFza1NpemU7
CisKICAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicHV0T3JBZGQiLCBb
dGhpcywgdGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgb3ZlcndyaXRlTW9kZV0oYXV0byBlcnJvcikgbXV0YWJsZSB7CiAg
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2Vl
ZGVkRXJyb3IpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IGRlMzZhMTJlOWE3NjNjMDEzN2MzYWZiNzljYWYxMTM3NGE0OGRjOWEuLmZiMWQ3MzI4
NGRlOGViYjcyYzNkNjRiNDZmM2MyY2ZmZGVlMjIyOGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAor
MjAxOS0xMC0wOSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBJ
bmRleGVkREI6IGluY2x1ZGUgc2l6ZSBvZiBpbmRleCByZWNvcmRzIGluIHNpemUgZXN0aW1hdGUg
b2YgcHV0L2FkZCB0YXNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDI0ODMKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWly
by9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qt
c2l6ZS1lc3RpbWF0ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5k
ZXhlZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9y
YWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1zaXplLWVzdGltYXRlLmpzOiBBZGRlZC4K
KyAgICAgICAgKHJhbmRvbUtleSk6CisgICAgICAgIChyYW5kb21Qcm9wZXJ0eVZhbHVlKToKKyAg
ICAgICAgKGNyZWF0ZU9iamVjdCk6CisgICAgICAgIChwcmVwYXJlRGF0YWJhc2UpOgorICAgICAg
ICAob25PcGVuU3VjY2Vzcyk6CisKIDIwMTktMTAtMDggIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IGRhdGEgY2hhbm5lbCBidWZmZXIgYW1vdW50
IGxvdyB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0
RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRp
b25zCmluZGV4IDJkNzliMWQwMzI5OGQyZGRlYmEyZjA3M2I2MzU5YjM2MGE0Y2IyNzEuLmFhYzZk
MzI1MzRiNzYzM2M5YTc1M2M0OTk0MWE3M2Y5YmFhZjI1MmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTMwMyw2ICszMDMsNyBAQCBodHRw
L3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0Lmh0dHBzLmh0bWwgWyBTa2lwIF0KIGh0dHAv
dGVzdHMvSW5kZXhlZERCL3N0b3JhZ2UtbGltaXQtMS5odHRwcy5odG1sIFsgU2tpcCBdCiBodHRw
L3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0LTIuaHR0cHMuaHRtbCBbIFNraXAgXQogc3Rv
cmFnZS9pbmRleGVkZGIvc3RvcmFnZS1saW1pdC5odG1sIFsgU2tpcCBdCitzdG9yYWdlL2luZGV4
ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUuaHRtbCBbIFNraXAgXQogCiAjIFNraXAgV2ViUlRD
IGZvciBub3cgaW4gV0sxCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0YyBb
IFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3Rh
dGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwppbmRleCAz
ZDUxZjNmZjVkMjQ2ZWYzZTYyY2YxOWVmYjZkYjIxOWUxMzU0MzI3Li5kMDNlNmM2ZmZkYmFmMGY4
ODVlMTAyMjY5NTUwODBmMTE5NmIzMDViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVz
dEV4cGVjdGF0aW9ucwpAQCAtMjQxNyw2ICsyNDE3LDcgQEAgaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC93ZWItYXBwcy8wMTIuaHRtbAogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC93ZWItYXBw
cy8wMTMuaHRtbAogCiBzdG9yYWdlL2luZGV4ZWRkYi9zdG9yYWdlLWxpbWl0Lmh0bWwgWyBTa2lw
IF0KK3N0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS5odG1sIFsgU2tpcCBd
CiBodHRwL3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0Lmh0dHBzLmh0bWwgWyBTa2lwIF0K
IGh0dHAvdGVzdHMvSW5kZXhlZERCL3N0b3JhZ2UtbGltaXQtMS5odHRwcy5odG1sIFsgU2tpcCBd
CiBodHRwL3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0LTIuaHR0cHMuaHRtbCBbIFNraXAg
XQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0
aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggYTdlNWM3MmI3ODdhNTM2MTUxMjFmNzkwMTg5NDI0Y2FhYmEyZWIyZi4uNDQxYTgyZmJjNjk4
N2U0YzUyMjVhYzFiNGVlMmNmYzJhNTlhNmY3OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xNDcxLDYgKzE0NzEsNyBAQCBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vaWRidHJhbnNhY3Rpb24tb2JqZWN0c3RvcmUtZmFpbHVyZXMuaHRt
bCBbIEZhaWx1cmUgUGFzcwogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0
bWwgWyBGYWlsdXJlIFBhc3MgXQogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29y
Lmh0bWwgWyBQYXNzIFRpbWVvdXQgXQogc3RvcmFnZS9pbmRleGVkZGIvc3RvcmFnZS1saW1pdC5o
dG1sIFsgRmFpbHVyZSBdCitzdG9yYWdlL2luZGV4ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUu
aHRtbCBbIEZhaWx1cmUgXQogc3RvcmFnZS9pbmRleGVkZGIvc3RydWN0dXJlZC1jbG9uZS5odG1s
IFsgUGFzcyBUaW1lb3V0IF0KIHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWFib3J0
Lmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogc3RvcmFnZS9pbmRleGVkZGIvd2FzbS1leGNlcHRpb25z
Lmh0bWwgWyBGYWlsdXJlIF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL3JlcXVlc3Qtc2l6ZS1lc3RpbWF0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg2MmNjYmIzZTAwNDRkM2I1MWM4OTY2Y2VlNGYxZmQ2NGZiN2UyZTUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1h
dGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0
IGVzdGltYXRlZCBzaXplIG9mIElEQiBkYXRhYmFzZSB0YXNrIGlzIG5vdCBzbWFsbGVyIHRoYW4g
b3IgY2xvc2UgdG8gYWN0dWFsIHNwYWNlIGluY3JlYXNlIChtYXliZSBzdWJqZWN0IHRvIG91ciBp
bXBsZW1lbnRhdGlvbiBvZiBiYWNraW5nIHN0b3JlLikKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK2luZGV4ZWREQiA9IHNlbGYuaW5kZXhlZERCIHx8IHNlbGYud2Via2l0SW5kZXhl
ZERCIHx8IHNlbGYubW96SW5kZXhlZERCIHx8IHNlbGYubXNJbmRleGVkREIgfHwgc2VsZi5PSW5k
ZXhlZERCOworCitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGJuYW1lKQoraW5kZXhlZERCLm9w
ZW4oZGJuYW1lKQorCitwcmVwYXJlRGF0YWJhc2UoKToKK0NyZWF0ZSAyMCBpbmRleGVzCisKK29u
T3BlblN1Y2Nlc3MoKToKK2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorc3RvcmUgPSBkYi50cmFu
c2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3JlJykKK3JlcXVl
c3QgPSBzdG9yZS5hZGQoY3JlYXRlT2JqZWN0KCksIHJhbmRvbUtleShrZXlTaXplKSkKK1BBU1Mg
J2Vycm9yJyBpbiByZXF1ZXN0IGlzIHRydWUKK1BBU1MgcmVxdWVzdC5lcnJvci5jb2RlIGlzIERP
TUV4Y2VwdGlvbi5RVU9UQV9FWENFRURFRF9FUlIKK1BBU1MgcmVxdWVzdC5lcnJvci5uYW1lIGlz
ICJRdW90YUV4Y2VlZGVkRXJyb3IiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvcmVxdWVzdC1zaXplLWVzdGltYXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9yZXF1ZXN0LXNpemUtZXN0aW1hdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjM5YjYzMjUxYTIw
NjA1Y2QwZjI5NWVlNmIzZTc4ZTJkNGY1NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvcmVxdWVzdC1zaXplLWVzdGltYXRlLmh0bWwKQEAgLTAsMCAr
MSw5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZXF1ZXN0LXNp
emUtZXN0aW1hdGUuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3Jlc291cmNlcy9yZXF1ZXN0LXNpemUtZXN0aW1hdGUuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1zaXplLWVzdGltYXRlLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkzNWEwODVlNzJmYzA3YjU0ZGRiYWNiMzkxNTk3ZWQ4NGFjMTdhYmUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1zaXpl
LWVzdGltYXRlLmpzCkBAIC0wLDAgKzEsNzIgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsK
KyAgICBpbXBvcnRTY3JpcHRzKCcuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcycpOworICAg
IGltcG9ydFNjcmlwdHMoJ3NoYXJlZC5qcycpOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgdGVzdFJ1bm5lci5zZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGZhbHNlKTsKKwor
ZGVzY3JpcHRpb24oJ1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGVzdGltYXRlZCBzaXplIG9mIElE
QiBkYXRhYmFzZSB0YXNrIGlzIG5vdCBzbWFsbGVyIHRoYW4gb3IgY2xvc2UgdG8gYWN0dWFsIHNw
YWNlIGluY3JlYXNlIChtYXliZSBzdWJqZWN0IHRvIG91ciBpbXBsZW1lbnRhdGlvbiBvZiBiYWNr
aW5nIHN0b3JlLiknKTsKKworY29uc3QgcXVvdGEgPSA0MDAgKiAxMDI0OyAvLyBDdXJyZW50IGRl
ZmF1bHQgcXVvdGEgZm9yIHRlc3QuCitjb25zdCBpbmRleENvdW50ID0gMjA7Citjb25zdCBpbmRl
eFZhbHVlU2l6ZSA9IDEwMjQ7Citjb25zdCBrZXlTaXplID0gMTAyNDsKKworaW5kZXhlZERCVGVz
dChwcmVwYXJlRGF0YWJhc2UsIG9uT3BlblN1Y2Nlc3MpOworCitmdW5jdGlvbiByYW5kb21LZXko
bGVuZ3RoKSB7CisgICAgdmFyIHN0ciA9ICIiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspCisgICAgICAgIHN0ciArPSAoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAp
KQorICAgIHJldHVybiBzdHI7Cit9CisKK2Z1bmN0aW9uIHJhbmRvbVByb3BlcnR5VmFsdWUobGVu
Z3RoKSB7CisgICAgdmFyIHZhbHVlID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykKKyAgICAgICAgdmFsdWUucHVzaChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAx
MCkpCisgICAgcmV0dXJuIHZhbHVlOworfQorCitmdW5jdGlvbiBjcmVhdGVPYmplY3QoKSB7Cisg
ICAgdmFyIG9iaiA9IHsgfTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkr
KykgCisgICAgICAgIG9ialsiaW5kZXgiICsgaV0gPSByYW5kb21Qcm9wZXJ0eVZhbHVlKGluZGV4
VmFsdWVTaXplKTsKKworICAgIHJldHVybiBvYmo7Cit9CisKK2Z1bmN0aW9uIHByZXBhcmVEYXRh
YmFzZShldmVudCkKK3sKKyAgICBwcmVhbWJsZShldmVudCk7CisgICAgZGIgPSBldmVudC50YXJn
ZXQucmVzdWx0OworICAgIHN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJyk7Cisg
ICAgdmFyIGluZGV4ZXMgPSBbXTsKKworICAgIGRlYnVnKCJDcmVhdGUgIiArIGluZGV4Q291bnQg
KyAiIGluZGV4ZXMiKTsKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJlbWUgY2FzZSB3aGVyZSBlYWNo
IG9mIGluZGV4ZXMgaXMgY29tcG9zZWQgb2YgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC4K
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkgKyspCisgICAgICAgIGluZGV4
ZXMucHVzaCgiaW5kZXgiICsgaSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleENvdW50
OyBpICsrKQorICAgICAgICBzdG9yZS5jcmVhdGVJbmRleCgiYWxsSW5kZXhlcyIgKyBpLCBpbmRl
eGVzKTsKK30KKworZnVuY3Rpb24gb25PcGVuU3VjY2VzcyhldmVudCkKK3sKKyAgICBwcmVhbWJs
ZShldmVudCk7CisgICAgZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7Cisg
ICAgZXZhbEFuZExvZygic3RvcmUgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRl
Jykub2JqZWN0U3RvcmUoJ3N0b3JlJykiKTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygicmVx
dWVzdCA9IHN0b3JlLmFkZChjcmVhdGVPYmplY3QoKSwgcmFuZG9tS2V5KGtleVNpemUpKSIpOwor
ICAgIHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCInZXJy
b3InIGluIHJlcXVlc3QiKTsKKyAgICAgICAgc2hvdWxkQmUoInJlcXVlc3QuZXJyb3IuY29kZSIs
ICJET01FeGNlcHRpb24uUVVPVEFfRVhDRUVERURfRVJSIik7CisgICAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygicmVxdWVzdC5lcnJvci5uYW1lIiwgIlF1b3RhRXhjZWVkZWRFcnJvciIpOwor
CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9
ICgpID0+IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiQWRkIG9wZXJhdGlvbiBzaG91bGQgZmFpbCBi
ZWNhdXNlIHRhc2sgc2l6ZSBpcyBiaWdnZXIgdGhhbiBzcGFjZSBhdmFpbGFibGUiKTsKKyAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>