<?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>92558</bug_id>
          
          <creation_ts>2012-07-27 15:46:09 -0700</creation_ts>
          <short_desc>IndexedDB: Core upgradeneeded logic</short_desc>
          <delta_ts>2012-08-03 17:28:47 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>93055</dependson>
          <blocked>92883</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Grogan">dgrogan</reporter>
          <assigned_to name="David Grogan">dgrogan</assigned_to>
          <cc>alecflett</cc>
    
    <cc>jsbell</cc>
    
    <cc>levin+threading</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>681172</commentid>
    <comment_count>0</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-27 15:46:09 -0700</bug_when>
    <thetext>IndexedDB: Core upgradeneeded logic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681177</commentid>
    <comment_count>1</comment_count>
      <attachid>155071</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-27 15:46:34 -0700</bug_when>
    <thetext>Created attachment 155071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681192</commentid>
    <comment_count>2</comment_count>
      <attachid>155080</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-27 15:57:37 -0700</bug_when>
    <thetext>Created attachment 155080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681203</commentid>
    <comment_count>3</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-27 16:03:18 -0700</bug_when>
    <thetext>Josh and Alec, could you take a look at this?

This patch has code that only runs in the backend, and is broken off from bug 89505.

I could break this up even further, first doing IDBFactoryBackendImpl and then IDBDatabaseBackendImpl if desired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681217</commentid>
    <comment_count>4</comment_count>
      <attachid>155080</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-27 16:16:39 -0700</bug_when>
    <thetext>Comment on attachment 155080
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:59
&gt; +class IDBDatabaseBackendImpl::PendingOpenWithVersionCall : public RefCounted&lt;PendingOpenWithVersionCall&gt; {

Any reason not to just put the class definition inside the class? I didn&apos;t even know this syntax was legal ! (I guess it&apos;s kind of like a namespace...)

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:425
&gt; +        // The frontend takes care of the following clause, the backend just

This sentence is slightly confusing - is there an &quot;and then..&quot; or something? I&apos;m confused... or something like &quot;, and then the frontend will only deliver to connections with closePending set&quot;? (addition of &apos;and&apos; and &apos;only&apos;)

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:446
&gt; +    RefPtr&lt;IDBTransactionBackendInterface&gt; transactionInterface = this-&gt;transaction(objectStoreNames.get(), IDBTransaction::VERSION_CHANGE, ec);

don&apos;t need &quot;this-&gt;&quot;

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:466
&gt; +            ASSERT(!m_intVersion);

Not sure what this is asserting for - is this different from  NoIntVersion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681219</commentid>
    <comment_count>5</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-27 16:17:22 -0700</bug_when>
    <thetext>my comments are pretty minor not understanding most of it - perhaps monday you can give us an overview, and help educate at least me about some of the states and issues this is tackling?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681258</commentid>
    <comment_count>6</comment_count>
      <attachid>155080</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-27 17:15:05 -0700</bug_when>
    <thetext>Comment on attachment 155080
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:59
&gt;&gt; +class IDBDatabaseBackendImpl::PendingOpenWithVersionCall : public RefCounted&lt;PendingOpenWithVersionCall&gt; {
&gt; 
&gt; Any reason not to just put the class definition inside the class? I didn&apos;t even know this syntax was legal ! (I guess it&apos;s kind of like a namespace...)

They would bloat the header file, cause long local recompiles, etc.  Though I don&apos;t know how big of a deal that actually is.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:425
&gt;&gt; +        // The frontend takes care of the following clause, the backend just
&gt; 
&gt; This sentence is slightly confusing - is there an &quot;and then..&quot; or something? I&apos;m confused... or something like &quot;, and then the frontend will only deliver to connections with closePending set&quot;? (addition of &apos;and&apos; and &apos;only&apos;)

Tried to reword it, let me know if it&apos;s clearer.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:446
&gt;&gt; +    RefPtr&lt;IDBTransactionBackendInterface&gt; transactionInterface = this-&gt;transaction(objectStoreNames.get(), IDBTransaction::VERSION_CHANGE, ec);
&gt; 
&gt; don&apos;t need &quot;this-&gt;&quot;

Removed.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:466
&gt;&gt; +            ASSERT(!m_intVersion);
&gt; 
&gt; Not sure what this is asserting for - is this different from  NoIntVersion?

Ah, thanks, it should be ASSERT(m_intVersion == NoIntVersion).  This means that I have no layout test testing this scenario, I will add one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681267</commentid>
    <comment_count>7</comment_count>
      <attachid>155096</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-27 17:28:57 -0700</bug_when>
    <thetext>Created attachment 155096
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681650</commentid>
    <comment_count>8</comment_count>
      <attachid>155096</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-29 19:20:32 -0700</bug_when>
    <thetext>Comment on attachment 155096
Patch

Looks like a great chunk to break off and get landed. Nits, but also two things which look incorrect to me.

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

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.h:54
&gt; +        ASSERT_NOT_REACHED();

Why this instead of pure virtual, like the others?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:239
&gt; +        callbacks-&gt;onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, String::format(&quot;You can&apos;t use the setVersion function if you&apos;ve already set the version through an open call.  The current integer version is %&quot;PRId64, m_intVersion)));

Shouldn&apos;t this method return here if the error event is fired?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:289
&gt; +    database-&gt;m_intVersion = version;

For kicks, toss an ASSERT in here that version &gt; oldVersion?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:473
&gt; +        m_pendingOpenWithVersionCalls.append(PendingOpenWithVersionCall::create(callbacks, version));

This line here looks a little odd - I&apos;m not sure why we&apos;re add a pending call in this case. If it&apos;s intentional, can you explain?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:530
&gt; +    // FIXME: Instead of relying on transactions.size(), make connectionCount

Ugh, yeah, this is tricky. Thanks for the comment.

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:283
&gt; +    return true;

If you touch this patch again, toss in a FIXME/bug reference here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682482</commentid>
    <comment_count>9</comment_count>
      <attachid>155096</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-30 15:53:46 -0700</bug_when>
    <thetext>Comment on attachment 155096
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.h:54
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Why this instead of pure virtual, like the others?

Don&apos;t recall, changed.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:239
&gt;&gt; +        callbacks-&gt;onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, String::format(&quot;You can&apos;t use the setVersion function if you&apos;ve already set the version through an open call.  The current integer version is %&quot;PRId64, m_intVersion)));
&gt; 
&gt; Shouldn&apos;t this method return here if the error event is fired?

Egads, yes.  Added a layout test that exposes this bug.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:289
&gt;&gt; +    database-&gt;m_intVersion = version;
&gt; 
&gt; For kicks, toss an ASSERT in here that version &gt; oldVersion?

SG

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:473
&gt;&gt; +        m_pendingOpenWithVersionCalls.append(PendingOpenWithVersionCall::create(callbacks, version));
&gt; 
&gt; This line here looks a little odd - I&apos;m not sure why we&apos;re add a pending call in this case. If it&apos;s intentional, can you explain?

It was intentional, but it&apos;s not working out well enough.  The idea was that by the time that pending call is serviced, the existing version would be the one it requested and a success event would be delivered.  Instead, I&apos;m going to replace it with a PendingOpenWithVersionCallSecondHalf queue that gets serviced first in processPendingCalls.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:283
&gt;&gt; +    return true;
&gt; 
&gt; If you touch this patch again, toss in a FIXME/bug reference here.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682551</commentid>
    <comment_count>10</comment_count>
      <attachid>155404</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-30 17:19:46 -0700</bug_when>
    <thetext>Created attachment 155404
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682554</commentid>
    <comment_count>11</comment_count>
      <attachid>155096</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-30 17:20:42 -0700</bug_when>
    <thetext>Comment on attachment 155096
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.h:54
&gt;&gt;&gt; +        ASSERT_NOT_REACHED();
&gt;&gt; 
&gt;&gt; Why this instead of pure virtual, like the others?
&gt; 
&gt; Don&apos;t recall, changed.

To avoid having to update the FakeBackingStore in this patch.  Changed back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683513</commentid>
    <comment_count>12</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-31 15:02:29 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 155096 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155096&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.h:54
&gt; &gt;&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; &gt;&gt; 
&gt; &gt;&gt; Why this instead of pure virtual, like the others?
&gt; &gt; 
&gt; &gt; Don&apos;t recall, changed.
&gt; 
&gt; To avoid having to update the FakeBackingStore in this patch.  Changed back.

Scratch that, FakeBackingStore is already in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683578</commentid>
    <comment_count>13</comment_count>
      <attachid>155659</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-31 16:03:12 -0700</bug_when>
    <thetext>Created attachment 155659
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683743</commentid>
    <comment_count>14</comment_count>
      <attachid>155701</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-31 18:53:22 -0700</bug_when>
    <thetext>Created attachment 155701
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683746</commentid>
    <comment_count>15</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-31 18:56:27 -0700</bug_when>
    <thetext>Tony, could you review this?

It&apos;s the first of the patches mentioned in bug 92560.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684568</commentid>
    <comment_count>16</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-08-01 14:14:28 -0700</bug_when>
    <thetext>Ojan, could you review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684669</commentid>
    <comment_count>17</comment_count>
      <attachid>155701</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-08-01 15:37:07 -0700</bug_when>
    <thetext>Comment on attachment 155701
Patch

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

Still LGTM

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:-290
&gt; -    ASSERT(connectionCount() &lt;= 1);

It&apos;s a shame to lose this strong assertion about state, but I can&apos;t think of an equivalent. Looking forward to simplifying when setVersion is gone.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:339
&gt; +    ASSERT(m_pendingSecondHalfOpenWithVersionCalls.size() &lt;= 1);

Given this, does it need to be a vector? (Maybe FIXME for later to clarify the state machine the spec implies.)

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:423
&gt; +    // Now that we give max priority to open calls that follow upgradeneeded

Reword to remove the &quot;Now that...&quot;, e.g. &quot;We give max priority to open calls that follow upgradeneeded events; trigger the rest of the queues being service when those open calls are finished.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684711</commentid>
    <comment_count>18</comment_count>
      <attachid>155914</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-08-01 16:06:36 -0700</bug_when>
    <thetext>Created attachment 155914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684716</commentid>
    <comment_count>19</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-08-01 16:08:01 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 155701 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155701&amp;action=review
&gt; 
&gt; Still LGTM
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:-290
&gt; &gt; -    ASSERT(connectionCount() &lt;= 1);
&gt; 
&gt; It&apos;s a shame to lose this strong assertion about state, but I can&apos;t think of an equivalent. Looking forward to simplifying when setVersion is gone.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:339
&gt; &gt; +    ASSERT(m_pendingSecondHalfOpenWithVersionCalls.size() &lt;= 1);
&gt; 
&gt; Given this, does it need to be a vector? (Maybe FIXME for later to clarify the state machine the spec implies.)

Probably not, there&apos;s some comments about this in the ChangeLog, but I added a FIXME.

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:423
&gt; &gt; +    // Now that we give max priority to open calls that follow upgradeneeded
&gt; 
&gt; Reword to remove the &quot;Now that...&quot;, e.g. &quot;We give max priority to open calls that follow upgradeneeded events; trigger the rest of the queues being service when those open calls are finished.&quot;

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685938</commentid>
    <comment_count>20</comment_count>
      <attachid>155914</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-08-02 15:58:05 -0700</bug_when>
    <thetext>Comment on attachment 155914
Patch

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

Just a bunch of style nits

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:325
&gt; +        // If this was an open-with-version call, there should be a &quot;second

Make this a FIXME maybe?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:447
&gt; +    ASSERT_NOT_REACHED();

It&apos;s a little confusing to have this without an associated FIXME.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:458
&gt; +    // The spec dictates we wait until all the version change events are

Should this be a FIXME?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:470
&gt; +    RefPtr&lt;DOMStringList&gt; objectStoreNames = DOMStringList::create();

Nit: I&apos;d put a line-break before this line just for readability after the early return.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:478
&gt; +    if (!transaction-&gt;scheduleTask(createCallbackTask(&amp;IDBDatabaseBackendImpl::setIntVersionInternal, database, requestedVersion, callbacks, transaction),
&gt; +                                   createCallbackTask(&amp;IDBDatabaseBackendImpl::resetVersion, database, m_version))) {

This might be a little easier to read if you created the callback tasks before the if-statement.

&gt; Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.cpp:168
&gt; +        databaseBackend = IDBDatabaseBackendImpl::create(name, backingStore.get(), m_transactionCoordinator.get(), this, uniqueIdentifier);

Nit: I&apos;d prefer a line-break before this line for readability.

&gt; Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.cpp:177
&gt; +    if (version == IDBDatabaseMetadata::NoIntVersion)

Nit: would prefer a line-break before this line as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685975</commentid>
    <comment_count>21</comment_count>
      <attachid>155914</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-08-02 16:35:51 -0700</bug_when>
    <thetext>Comment on attachment 155914
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:325
&gt;&gt; +        // If this was an open-with-version call, there should be a &quot;second
&gt; 
&gt; Make this a FIXME maybe?

SG

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:447
&gt;&gt; +    ASSERT_NOT_REACHED();
&gt; 
&gt; It&apos;s a little confusing to have this without an associated FIXME.

Agreed, added.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:458
&gt;&gt; +    // The spec dictates we wait until all the version change events are
&gt; 
&gt; Should this be a FIXME?

Done.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:470
&gt;&gt; +    RefPtr&lt;DOMStringList&gt; objectStoreNames = DOMStringList::create();
&gt; 
&gt; Nit: I&apos;d put a line-break before this line just for readability after the early return.

Done.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:478
&gt;&gt; +                                   createCallbackTask(&amp;IDBDatabaseBackendImpl::resetVersion, database, m_version))) {
&gt; 
&gt; This might be a little easier to read if you created the callback tasks before the if-statement.

Done.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.cpp:168
&gt;&gt; +        databaseBackend = IDBDatabaseBackendImpl::create(name, backingStore.get(), m_transactionCoordinator.get(), this, uniqueIdentifier);
&gt; 
&gt; Nit: I&apos;d prefer a line-break before this line for readability.

Done.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.cpp:177
&gt;&gt; +    if (version == IDBDatabaseMetadata::NoIntVersion)
&gt; 
&gt; Nit: would prefer a line-break before this line as well.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685977</commentid>
    <comment_count>22</comment_count>
      <attachid>156200</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-08-02 16:36:26 -0700</bug_when>
    <thetext>Created attachment 156200
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686032</commentid>
    <comment_count>23</comment_count>
      <attachid>156200</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 17:36:16 -0700</bug_when>
    <thetext>Comment on attachment 156200
Patch for landing

Clearing flags on attachment: 156200

Committed r124540: &lt;http://trac.webkit.org/changeset/124540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686033</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 17:36:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686082</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 18:19:14 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 93055</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687119</commentid>
    <comment_count>26</comment_count>
      <attachid>156451</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-08-03 13:58:54 -0700</bug_when>
    <thetext>Created attachment 156451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687141</commentid>
    <comment_count>27</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-08-03 14:19:03 -0700</bug_when>
    <thetext>Does anyone care to comment on (1) below?  If I don&apos;t hear anything by monday sometime I&apos;ll resubmit.

There were 3 compile problems on windows

1) There&apos;s no PRId64 printf conversion specifier for int64_t, so IDBDatabaseBackendImpl.cpp now casts to long long and uses %lld.  I still want to store integer versions as int64_t to match the WebIDL definition of long long and so that we know exactly how many bytes we have to write to leveldb.

2) IDBLevelDBBackingStore::createIDBDatabaseMetadata had a non-const parameter and a derived class had const

3) IDBCallbacks.h needed some #includes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687236</commentid>
    <comment_count>28</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-08-03 16:14:15 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; Does anyone care to comment on (1) below?  If I don&apos;t hear anything by monday sometime I&apos;ll resubmit.
&gt; 
&gt; There were 3 compile problems on windows
&gt; 
&gt; 1) There&apos;s no PRId64 printf conversion specifier for int64_t, so IDBDatabaseBackendImpl.cpp now casts to long long and uses %lld.  I still want to store integer versions as int64_t to match the WebIDL definition of long long and so that we know exactly how many bytes we have to write to leveldb.

SGTM - verify it compiles everywhere with a git-try?

&gt; 
&gt; 2) IDBLevelDBBackingStore::createIDBDatabaseMetadata had a non-const parameter and a derived class had const
&gt; 
&gt; 3) IDBCallbacks.h needed some #includes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687239</commentid>
    <comment_count>29</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-08-03 16:15:49 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; Does anyone care to comment on (1) below?  If I don&apos;t hear anything by monday sometime I&apos;ll resubmit.
&gt; &gt; 
&gt; &gt; There were 3 compile problems on windows
&gt; &gt; 
&gt; &gt; 1) There&apos;s no PRId64 printf conversion specifier for int64_t, so IDBDatabaseBackendImpl.cpp now casts to long long and uses %lld.  I still want to store integer versions as int64_t to match the WebIDL definition of long long and so that we know exactly how many bytes we have to write to leveldb.
&gt; 
&gt; SGTM - verify it compiles everywhere with a git-try?

I did win_rel and mac_rel, but now that you mention it, I should really try everything.

&gt; 
&gt; &gt; 
&gt; &gt; 2) IDBLevelDBBackingStore::createIDBDatabaseMetadata had a non-const parameter and a derived class had const
&gt; &gt; 
&gt; &gt; 3) IDBCallbacks.h needed some #includes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687286</commentid>
    <comment_count>30</comment_count>
      <attachid>156451</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-03 17:28:42 -0700</bug_when>
    <thetext>Comment on attachment 156451
Patch

Clearing flags on attachment: 156451

Committed r124675: &lt;http://trac.webkit.org/changeset/124675&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687288</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-03 17:28:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155071</attachid>
            <date>2012-07-27 15:46:34 -0700</date>
            <delta_ts>2012-07-27 15:57:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92558-20120727154622.patch</filename>
            <type>text/plain</type>
            <size>26801</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE1Y2MzNDkxMjEyYTJi
ZWMyODUwM2FlMTI4ZWYyMWZiYmViNDYxZC4uYzMzMDNkMGU2ZGVkNjhiYzVkOWIzYzBjMjBjNGE5
NmQ4ZTE1ODExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTA3LTI3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENv
cmUgdXBncmFkZW5lZWRlZCBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI1NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBh
cyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlv
bnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURC
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6dXBkYXRl
SURCRGF0YWJhc2VJbnRWZXJzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
YWxsYmFja3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25CbG9ja2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZTo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZTo6cmVnaXN0ZXJGcm9udGVuZENhbGxiYWNrcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpQZW5kaW5nT3BlbkNhbGwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJz
aW9uQ2FsbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjYWxsYmFja3MpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6
OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVu
ZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3Blbklu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFk
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50VmVy
c2lvbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnByb2Nlc3NQZW5kaW5nQ2FsbHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAg
ICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUNh
bGxiYWNrczo6b25WZXJzaW9uQ2hhbmdlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUlu
dFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZSk6CisKIDIwMTItMDctMjYgIE5heWFuIEt1bWFyIEsgIDxuYXlhbmtrQG1vdG9yb2xh
LmNvbT4KIAogICAgICAgICBbV2ViR0xdIEluaXRpYWwgc2l6ZSBvZiBjYW52YXMgY2FuIGJlIGxh
cmdlciB0aGFuIE1BWF9WSUVXUE9SVF9ESU1TLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCAxZDcwNDc0MGM3ZmFkZDg2MTk5OGRhZTg4NTM4ZTYyYTc0MTUxNmVkLi5jYzE0ODBjMjZmMDZl
NjhiNTAwMmE0OTU4NzJkNzYwYjNjYjkyODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDEyLTA3LTI3ICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENvcmUgdXBncmFkZW5lZWRlZCBsb2dpYwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI1NTgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFs
IGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQ
bGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAg
ICAgICAqIHRlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGYWlsaW5nQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAg
ICAgKiB0ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmg6CisKIDIwMTItMDctMjYgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIxMjM3OTkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDc4YTlmNjY3YWRkMTMwZTYzZTNjMDc0NmQ0
YTcwM2I0ODk1NDZiZDcuLjNlYzc2MzlkMmRlMDQ5ZjM4YThhOTUzMmY4YzA1NzAwMWFiZTViZjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCkBAIC00Nyw4ICs0NywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFja2lu
Z1N0b3JlKCkge307CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8
U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0
X3QmIGZvdW5kSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYg
cm93SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRTdHJpbmdWZXJzaW9uLCBpbnQ2NF90JiBmb3Vu
ZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
c3RyaW5nVmVyc2lvbiwgY29uc3QgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkg
PSAwOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oaW50NjRf
dCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgdmlydHVhbCBib29s
IHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2
ZXJzaW9uKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkNhbGxiYWNrcy5oCmluZGV4IDg1M2ZmYzcyZDI2MDM5MWZjYzQzNjY0ZDU3M2ZjNWRhZTMwMmRj
MGYuLjJhNmFmZWYzODMxNWJlNjViMjY2MjhlNTY4ODZkYmEzMmFjNTM2NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCkBAIC01OSw3ICs1
OSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBjb25zdCBJREJLZXlQYXRo
JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoUHJlZmV0Y2goY29uc3QgVmVjdG9yPFJl
ZlB0cjxJREJLZXk+ID4mIGtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiBwcmlt
YXJ5S2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZh
bHVlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIG9uQmxvY2tlZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgb25CbG9ja2VkKGludDY0X3QgZXhpc3RpbmdWZXJzaW9uKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZChpbnQ2NF90IG9sZFZl
cnNpb24sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggNWMzZGZjYjZiNTQyYzFiZTA2
YjI0MWI0N2NlOWJhY2I5YjY2MjliNC4uYjk0ZmZlMDU2MTMyYjAxMmYxZTRjY2VlOTBiYTlhZTRh
NDIyNDRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcApAQCAtMjA4LDYgKzIwOCw3IEBAIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3Q+IElEQkRhdGFiYXNlOjpzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRlCiAg
ICAgfQogCiAgICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSwgdmVyc2lvbik7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7CiAgICAgbV9iYWNrZW5kLT5zZXRW
ZXJzaW9uKHZlcnNpb24sIHJlcXVlc3QsIG1fZGF0YWJhc2VDYWxsYmFja3MsIGVjKTsKICAgICBy
ZXR1cm4gcmVxdWVzdDsKIH0KQEAgLTMxNCw2ICszMTUsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpv
blZlcnNpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogCiB2b2lkIElEQkRhdGFiYXNl
OjpyZWdpc3RlckZyb250ZW5kQ2FsbGJhY2tzKCkKIHsKKyAgICBBU1NFUlQobV9iYWNrZW5kKTsK
ICAgICBtX2JhY2tlbmQtPnJlZ2lzdGVyRnJvbnRlbmRDYWxsYmFja3MobV9kYXRhYmFzZUNhbGxi
YWNrcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggZTQ1MTQ3ZDVjMGIwYjYyYjMz
ZDNmM2NjZDYzYTYxN2ZiNWI4Yjk4ZS4uYjY5ZmUxYTcxYmM1YmI5MzE5YjZjNDI2ZTA0OTU3YzQ4
MTQyYWQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTUyLDcgKzUyLDI3IEBAIHByaXZh
dGU6CiAgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQogICAgIHsKICAgICB9CisKKyAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsIDogcHVibGljIFJlZkNv
dW50ZWQ8UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGludDY0X3QgdmVyc2lvbikKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwoY2FsbGJhY2tz
LCB2ZXJzaW9uKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorICAgIGludDY0X3QgdmVyc2lvbigpIHsgcmV0
dXJuIG1fdmVyc2lvbjsgfQorCitwcml2YXRlOgorICAgIFBlbmRpbmdPcGVuV2l0aFZlcnNpb25D
YWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGludDY0X3QgdmVyc2lvbikK
KyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgICAgICwgbV92ZXJzaW9uKHZl
cnNpb24pCisgICAgeworICAgIH0KICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKKyAgICBpbnQ2NF90IG1fdmVyc2lvbjsKIH07CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OlBlbmRpbmdEZWxldGVDYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ0RlbGV0
ZUNhbGw+IHsKQEAgLTEwNiw2ICsxMjYsNyBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJE
YXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogICAg
ICwgbV9pZChJbnZhbGlkSWQpCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1fdmVyc2lvbigi
IikKKyAgICAsIG1faW50VmVyc2lvbihJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24p
CiAgICAgLCBtX2lkZW50aWZpZXIodW5pcXVlSWRlbnRpZmllcikKICAgICAsIG1fZmFjdG9yeShm
YWN0b3J5KQogICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKGNvb3JkaW5hdG9yKQpAQCAt
MTE2LDEzICsxMzcsMTMgQEAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG8KIAogYm9vbCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoKQogewotICAgIGJvb2wgc3VjY2VzcyA9IG1f
YmFja2luZ1N0b3JlLT5nZXRJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBt
X2lkKTsKLSAgICBBU1NFUlQoc3VjY2VzcyA9PSAobV9pZCAhPSBJbnZhbGlkSWQpKTsKKyAgICBi
b29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShtX25h
bWUsIG1fdmVyc2lvbiwgbV9pbnRWZXJzaW9uLCBtX2lkKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKHN1Y2Nlc3MgPT0gKG1faWQgIT0gSW52YWxpZElkKSwgInN1Y2Nlc3MgPSAlcywgbV9pZCA9
ICUiUFJJZDY0LCBzdWNjZXNzID8gInRydWUiIDogImZhbHNlIiwgbV9pZCk7CiAgICAgaWYgKHN1
Y2Nlc3MpIHsKICAgICAgICAgbG9hZE9iamVjdFN0b3JlcygpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9Ci0gICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5jcmVhdGVJREJEYXRhYmFzZU1l
dGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkKTsKKyAgICByZXR1cm4gbV9iYWNraW5nU3Rv
cmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faW50VmVy
c2lvbiwgbV9pZCk7CiB9CiAKIElEQkRhdGFiYXNlQmFja2VuZEltcGw6On5JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKCkKQEAgLTEzNiw3ICsxNTcsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YmFja2luZ1N0b3JlKCkgY29uc3QKIAogSURCRGF0
YWJhc2VNZXRhZGF0YSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0CiB7
Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YShtX25hbWUsIG1fdmVyc2lvbiwgSURC
RGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRh
IG1ldGFkYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2ludFZlcnNpb24pOwogICAgIGZvciAoT2Jq
ZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsg
aXQgIT0gbV9vYmplY3RTdG9yZXMuZW5kKCk7ICsraXQpCiAgICAgICAgIG1ldGFkYXRhLm9iamVj
dFN0b3Jlcy5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKICAgICByZXR1
cm4gbWV0YWRhdGE7CkBAIC0yMTQsNiArMjM1LDggQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwK
ICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SURCX0FCT1JUX0VSUiwgIkNvbm5lY3Rpb24gd2FzIGNsb3NlZCBi
ZWZvcmUgc2V0IHZlcnNpb24gdHJhbnNhY3Rpb24gd2FzIGNyZWF0ZWQiKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgaWYgKG1faW50VmVyc2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRh
OjpOb0ludFZlcnNpb24pCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCBTdHJpbmc6OmZv
cm1hdCgiWW91IGNhbid0IHVzZSB0aGUgc2V0VmVyc2lvbiBmdW5jdGlvbiBpZiB5b3UndmUgYWxy
ZWFkeSBzZXQgdGhlIHZlcnNpb24gdGhyb3VnaCBhbiBvcGVuIGNhbGwuICBUaGUgY3VycmVudCBp
bnRlZ2VyIHZlcnNpb24gaXMgJSJQUklkNjQsIG1faW50VmVyc2lvbikpKTsKICAgICBmb3IgKERh
dGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkg
ewogICAgICAgICBpZiAoKml0ICE9IGRhdGFiYXNlQ2FsbGJhY2tzKQogICAgICAgICAgICAgKCpp
dCktPm9uVmVyc2lvbkNoYW5nZSh2ZXJzaW9uKTsKQEAgLTI1OSw2ICsyODIsMTkgQEAgdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWYKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4odHJhbnNhY3Rpb24pKTsKIH0KIAordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2Us
IGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQorewor
ICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlLT5pZCgpOworICAgIGludDY0X3Qgb2xk
VmVyc2lvbiA9IGRhdGFiYXNlLT5tX2ludFZlcnNpb247CisgICAgZGF0YWJhc2UtPm1faW50VmVy
c2lvbiA9IHZlcnNpb247CisgICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0
ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV9pbnRWZXJzaW9u
KSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0
byBzdGFibGUgc3RvcmFnZS4iKSk7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVkKG9sZFZl
cnNpb24sIHRyYW5zYWN0aW9uLCBkYXRhYmFzZSk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CkBAIC0zMjUsNiArMzYxLDEz
IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCiAg
ICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0
VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVy
c2lvbkNhbGw+ID4gcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzOworICAgIG1fcGVuZGluZ09w
ZW5XaXRoVmVyc2lvbkNhbGxzLnN3YXAocGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzKTsKKyAg
ICB3aGlsZSAoIXBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUmVmUHRyPFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsPiBwZW5kaW5nT3BlbldpdGhWZXJz
aW9uQ2FsbCA9IHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy50YWtlRmlyc3QoKTsKKyAgICAg
ICAgb3BlbkNvbm5lY3Rpb25XaXRoVmVyc2lvbihwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbC0+
Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsLT52ZXJzaW9uKCkpOworICAg
IH0KKwogICAgIC8vIEdpdmVuIHRoZSBjaGVjayBhYm92ZSwgaXQgYXBwZWFycyB0aGF0IGNhbGxz
IGNhbm5vdCBiZSByZXF1ZXVlZCBieQogICAgIC8vIG9wZW5Db25uZWN0aW9uLCBidXQgdXNlIGEg
ZGlmZmVyZW50IHF1ZXVlIGZvciBpdGVyYXRpb24gdG8gYmUgc2FmZS4KICAgICBEZXF1ZTxSZWZQ
dHI8UGVuZGluZ09wZW5DYWxsPiA+IHBlbmRpbmdPcGVuQ2FsbHM7CkBAIC0zNzMsNiArNDE2LDcz
IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB9CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGludDY0X3QgcmVxdWVz
dGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MgPSBwcnBDYWxsYmFja3M7CisgICAgQVNTRVJUKGNhbGxiYWNrcyk7CisgICAgZm9yIChEYXRh
YmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgLy8gVGhlIGZyb250ZW5kIHRha2VzIGNhcmUgb2YgdGhlIGZvbGxvd2luZyBjbGF1
c2UsIHRoZSBiYWNrZW5kIGp1c3QKKyAgICAgICAgLy8gZmlyZXMgdmVyc2lvbiBjaGFuZ2UgYXQg
YWxsIHRoZSBjb25uZWN0aW9ucywgdGhlIGZyb250ZW5kIHdpbGwgbm90CisgICAgICAgIC8vIGRl
bGl2ZXIgdG8gY29ubmVjdGlvbnMgd2l0aCBjbG9zZVBlbmRpbmcgc2V0LgorICAgICAgICAvLyAi
VGhlIGV2ZW50IG11c3Qgbm90IGJlIGZpcmVkIG9uIG9iamVjdHMgd2hpY2ggaGFzIHRoZSBjbG9z
ZVBlbmRpbmcKKyAgICAgICAgLy8gZmxhZyBzZXQuIgorICAgICAgICAoKml0KS0+b25WZXJzaW9u
Q2hhbmdlKG1faW50VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbik7CisgICAgfQorICAgIC8vIFRo
ZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQgdW50aWwgYWxsIHRoZSB2ZXJzaW9uIGNoYW5nZSBldmVu
dHMgYXJlCisgICAgLy8gZGVsaXZlcmVkIGFuZCB0aGVuIGNoZWNrIG1fZGF0YWJhc2VDYWxsYmFj
a3MuZW1wdHkoKSBiZWZvcmUgcHJvY2VlZGluZworICAgIC8vIG9yIGZpcmluZyBhIGJsb2NrZWQg
ZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggaG93CisgICAg
Ly8gdGhlIG9sZCBzZXRWZXJzaW9uIChpbmNvcnJlY3RseSkgZGlkIGl0OgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgIGlmIChjb25uZWN0
aW9uQ291bnQoKSA+IDApCisgICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKG1faW50VmVyc2lv
bik7CisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgbV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gfHwgY29ubmVjdGlvbkNvdW50KCkgPiAwKSB7CisgICAgICAgIC8vIEl0J3MgYWxyZWFk
eSBxdWV1ZWQuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiB0cmFuc2FjdGlvbkludGVyZmFjZSA9IHRoaXMtPnRyYW5zYWN0aW9uKG9iamVjdFN0b3Jl
TmFtZXMuZ2V0KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgZWMpOworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25JbnRlcmZhY2UuZ2V0KCkpOworICAgIEFT
U0VSVCghZWMpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
ID0gdGhpczsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwsIGRh
dGFiYXNlLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24sIGRhdGFiYXNlLCBtX3ZlcnNpb24pKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0
aW9uV2l0aFZlcnNpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgaW50
NjRfdCB2ZXJzaW9uKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25D
YWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMu
YXBwZW5kKFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjcmVhdGUoY2FsbGJhY2tzLCB2ZXJz
aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1faWQgPT0gSW52YWxpZElk
KSB7CisgICAgICAgIGlmIChvcGVuSW50ZXJuYWwoKSkKKyAgICAgICAgICAgIEFTU0VSVCghbV9p
bnRWZXJzaW9uKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dO
X0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAodmVyc2lvbiA+IG1faW50VmVyc2lvbikgeworICAgICAgICBtX3Bl
bmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5XaXRoVmVyc2lvbkNh
bGw6OmNyZWF0ZShjYWxsYmFja3MsIHZlcnNpb24pKTsKKyAgICAgICAgcnVuSW50VmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uKHZlcnNpb24sIGNhbGxiYWNrcyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKHZlcnNpb24gPCBtX2ludFZlcnNpb24pIHsKKyAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VkVSX0VSUiwgU3RyaW5nOjpmb3JtYXQoIlRoZSByZXF1ZXN0ZWQgdmVyc2lvbiAoJSJQUklkNjQi
KSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNpb24gKCUiUFJJZDY0IikuIiwgdmVyc2lv
biwgbV9pbnRWZXJzaW9uKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCh2
ZXJzaW9uID09IG1faW50VmVyc2lvbik7CisgICAgKyttX3BlbmRpbmdDb25uZWN0aW9uQ291bnQ7
CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcykKIHsKICAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8
ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CkBAIC0zOTMsMTIgKzUwMywx
NCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFjawogICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tl
ZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7
CiAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2UobV9uYW1lKSkgewogICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBtX3ZlcnNpb24gPSAiIjsKICAgICBtX2lkID0gSW52YWxpZElk
OworICAgIG1faW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsK
ICAgICBtX29iamVjdFN0b3Jlcy5jbGVhcigpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwogfQpAQCAtNDExLDEyICs1MjMsMTcg
QEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MKICAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAx
KQogICAgICAgICByZXR1cm47CiAKKyAgICBUcmFuc2FjdGlvblNldCB0cmFuc2FjdGlvbnMobV90
cmFuc2FjdGlvbnMpOwogICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIAotICAgIGlmICghY29u
bmVjdGlvbkNvdW50KCkpIHsKLSAgICAgICAgVHJhbnNhY3Rpb25TZXQgdHJhbnNhY3Rpb25zKG1f
dHJhbnNhY3Rpb25zKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuc2l6ZSgpIC0gdHJhbnNh
Y3Rpb25zLnNpemUoKSA8PSAxKTsKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiByZWx5aW5nIG9u
IHRyYW5zYWN0aW9ucy5zaXplKCksIG1ha2UgY29ubmVjdGlvbkNvdW50CisgICAgLy8gYXdhcmUg
b2YgaW4tZmxpZ2h0IHVwZ3JhZGVuZWVkZWQgZXZlbnRzIGFzIHdlbGwgYXMgaW4tZmxpZ2h0IHN1
Y2Nlc3MKKyAgICAvLyBldmVudHMuCisgICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9w
ZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpICYmIG1fdHJhbnNhY3Rpb25zLnNpemUoKSA9PSB0cmFu
c2FjdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgIGZvciAoVHJhbnNhY3Rpb25TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gdHJhbnNhY3Rpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zYWN0aW9ucy5lbmQo
KTsgKytpdCkKICAgICAgICAgICAgICgqaXQpLT5hYm9ydCgpOworCiAgICAgICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwogCiAgICAgICAgIG1fYmFja2luZ1N0b3JlLmNsZWFy
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggODA1ZWI2MTdmYjMyMTRkMGJiYjI1NzVmMzJiZjg5
NWE0NWYxMGQxZC4uODM2MjQzZmJlZDQ3OTk2ZGUwZmIzZmE3NGZkYjcwYTdmY2Q4NDI3ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJl
Z2lzdGVyRnJvbnRlbmRDYWxsYmFja3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4p
OwogICAgIHZvaWQgb3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAg
ICB2b2lkIG9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBpbnQ2NF90IHZlcnNpb24pOwogICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+KTsKIAogICAgIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQpAQCAt
NzYsMTMgKzc3LDE2IEBAIHByaXZhdGU6CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25z
dCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IqLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1
ZUlkZW50aWZpZXIpOwogCiAgICAgYm9vbCBvcGVuSW50ZXJuYWwoKTsKKyAgICB2b2lkIHJ1bklu
dFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgdm9pZCBsb2FkT2JqZWN0U3RvcmVzKCk7CiAgICAg
aW50MzJfdCBjb25uZWN0aW9uQ291bnQoKTsKICAgICB2b2lkIHByb2Nlc3NQZW5kaW5nQ2FsbHMo
KTsKKyAgICBzdGF0aWMgdm9pZCBwcm9jZXNzUGVuZGluZ1Rhc2sodm9pZCogZGIpOwogCiAgICAg
c3RhdGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPik7CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgc2V0VmVyc2lvbkludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgc2V0SW50
VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKIAogICAg
IC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3Mu
CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKQEAgLTkzLDYgKzk3LDcgQEAgcHJpdmF0ZToK
ICAgICBpbnQ2NF90IG1faWQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV92ZXJz
aW9uOworICAgIGludDY0X3QgbV9pbnRWZXJzaW9uOwogCiAgICAgU3RyaW5nIG1faWRlbnRpZmll
cjsKICAgICAvLyBUaGlzIG1pZ2h0IG5vdCBuZWVkIHRvIGJlIGEgUmVmUHRyIHNpbmNlIHRoZSBm
YWN0b3J5J3MgbGlmZXRpbWUgaXMgdGhhdCBvZiB0aGUgcGFnZSBncm91cCwgYnV0IGl0J3MgYmV0
dGVyIHRvIGJlIGNvbnNlcnZpdGl2ZSB0aGFuIHNvcnJ5LgpAQCAtMTEzLDYgKzExOCw5IEBAIHBy
aXZhdGU6CiAgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5k
aW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ09w
ZW5XaXRoVmVyc2lvbkNhbGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdPcGVuV2l0aFZlcnNp
b25DYWxsPiA+IG1fcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzOworCiAgICAgY2xhc3MgUGVu
ZGluZ0RlbGV0ZUNhbGw7CiAgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1f
cGVuZGluZ0RlbGV0ZUNhbGxzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaAppbmRleCBiM2YyNDRmNTE2YjY5ODdl
YTExOWNiZjcwMTliN2I1NDM3NWYxMmJmLi4xNmE5ZWE2YzUwOGIwZDkyYjYxZTQ5OTdjNTQzMDEz
MmE2ZDJhY2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUNhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgfklEQkRhdGFiYXNlQ2FsbGJhY2tzKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
b25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBvblZlcnNpb25DaGFuZ2UoaW50NjRfdCBjdXJyZW50VmVyc2lvbiwgaW50NjRfdCByZXF1
ZXN0ZWRWZXJzaW9uKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDMyZTJmNjgxNTc5NDA5YTA5
MDhkMjlhMTg3MmMwY2RjNTZiODllZjkuLjkzNjhiNjg3ZTAxZGYxZDY5NTkzNjI0NzVjZDMwMGQ1
ZGRkZTE5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0yMzQsNyArMjM0LDcgQEAgdm9p
ZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzKQogICAgIH0KIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpn
ZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZl
cnNpb24sIGludDY0X3QmIGZvdW5kSWQpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kU3Ry
aW5nVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJbnRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQog
ewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZSht
X2lkZW50aWZpZXIsIG5hbWUpOwogCkBAIC0yNDIsNyArMjQyLDcgQEAgYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
U3RyaW5nJgogICAgIGlmICghb2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG9rID0g
Z2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShmb3VuZElk
LCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIGZvdW5kVmVyc2lvbik7CisgICAg
b2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGZv
dW5kSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgZm91bmRTdHJpbmdWZXJz
aW9uKTsKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI2NCw3ICsy
NjQsNyBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdEYXRhYmFzZUlkKExldmVsREJEYXRhYmFzZSog
ZGIpCiAgICAgcmV0dXJuIGRhdGFiYXNlSWQ7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpCitib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpCiB7
CiAgICAgcm93SWQgPSBnZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0KCkpOwogICAgIGlmIChyb3dJ
ZCA8IDApCkBAIC0yNzgsNiArMjc4LDExIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURC
RGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lv
bikKIHsKICAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwpAQCAtMzA1LDcgKzMxMCw4
IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3Ry
aW5nJiBuYW1lKQogCiAgICAgaW50NjRfdCBkYXRhYmFzZUlkOwogICAgIFN0cmluZyB2ZXJzaW9u
OwotICAgIGlmICghZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShuYW1lLCB2ZXJzaW9uLCBkYXRhYmFz
ZUlkKSkgeworICAgIGludDY0X3QgaW50VmVyc2lvbjsKKyAgICBpZiAoIWdldElEQkRhdGFiYXNl
TWV0YURhdGEobmFtZSwgdmVyc2lvbiwgaW50VmVyc2lvbiwgZGF0YWJhc2VJZCkpIHsKICAgICAg
ICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuaAppbmRleCBjNWE5ZTJlZTMwOWU4Y2EzZmQ3ZjcwZjBhYTJiYjgwY2Vj
MDQ2YjJlLi42NzNjYTljMTVhZTNjNmRhZDQ1OTdlMTc0ZGIyN2VlYTYxZWQ5ZjcwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oCkBAIC00NSw5ICs0NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFt
ZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24s
IGludDY0X3QmIGZvdW5kSWQpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90
JiByb3dJZCk7CisgICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJbnRWZXJz
aW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJh
c2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50
NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCk7CiAgICAgdmlydHVhbCBib29sIHVwZGF0
ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qg
cm93SWQsIGludDY0X3QgaW50VmVyc2lvbik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3Rv
cmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9y
PFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywg
VmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAKaW5kZXgg
ZDllM2Q2OTdiMTk3Yzc0MDZmNjNiYWViNDgzOTMxYjRlYWM5NTA4NS4uOTFkZjEyNmE1ZmI4ZmI2
N2JjNmVhYWM1MWQ5NDdlOWRhNDFkMDlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcApAQCAtNzQsNyArNzQsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZhaWxpbmdCYWNr
aW5nU3RvcmUpOwogICAgIH0KLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBpbnQ2NF90JikKKyAgICB2aXJ0dWFs
IGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBpbnQ2NF90LCBpbnQ2NF90JikKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdT
dG9yZS5oCmluZGV4IDA4NDA1Y2UwYWI1OGM5NmZjMjk2YzNmMGY4YTE0ZmY2OWQ2NWJhMTguLmQ5
NmY3YzZjYTBlYTk0MmEyNWQzODI0YjVlMTJjZDVjNDllN2M1MWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCkBAIC0zMyw4ICsz
Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIElEQkZha2VCYWNraW5nU3RvcmUgOiBw
dWJsaWMgSURCQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0
YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykgT1ZFUlJJREUgeyB9Ci0gICAg
dmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpIE9W
RVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90
JiBmb3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpIE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IGludDY0X3QgaW50VmVy
c2lvbiwgaW50NjRfdCYgcm93SWQpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24pIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkgT1ZFUlJJREUgeyByZXR1cm4g
ZmFsc2U7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155080</attachid>
            <date>2012-07-27 15:57:37 -0700</date>
            <delta_ts>2012-07-27 17:28:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92558-20120727155724.patch</filename>
            <type>text/plain</type>
            <size>29103</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE1Y2MzNDkxMjEyYTJi
ZWMyODUwM2FlMTI4ZWYyMWZiYmViNDYxZC4uOGE1MWEzYWNkOTcwYTVhNzM5M2VjN2ZjNDUzYzRk
YjZmODMzODUwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA3LTI3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENv
cmUgdXBncmFkZW5lZWRlZCBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI1NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBh
cyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlv
bnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURC
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6dXBkYXRl
SURCRGF0YWJhc2VJbnRWZXJzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
YWxsYmFja3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25CbG9ja2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OmNhbGxi
YWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5n
T3BlbldpdGhWZXJzaW9uQ2FsbDo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6UGVuZGluZ09wZW5X
aXRoVmVyc2lvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5l
Y3Rpb25XaXRoVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpjbG9zZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tzOjpvblZlcnNpb25DaGFuZ2UpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlE
QkRhdGFiYXNlSW50VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJM
ZXZlbERCQmFja2luZ1N0b3JlKToKKwogMjAxMi0wNy0yNiAgTmF5YW4gS3VtYXIgSyAgPG5heWFu
a2tAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFtXZWJHTF0gSW5pdGlhbCBzaXplIG9mIGNhbnZh
cyBjYW4gYmUgbGFyZ2VyIHRoYW4gTUFYX1ZJRVdQT1JUX0RJTVMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDFkNzA0NzQwYzdmYWRkODYxOTk4ZGFlODg1MzhlNjJhNzQxNTE2ZWQuLmNj
MTQ4MGMyNmYwNmU2OGI1MDAyYTQ5NTg3MmQ3NjBiM2NiOTI4NDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDctMjcgIERhdmlkIEdyb2dhbiAgPGRn
cm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogQ29yZSB1cGdyYWRlbmVl
ZGVkIGxvZ2ljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MjU1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCBy
YXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09Q
UyEpLgorCisgICAgICAgICogdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZhaWxpbmdCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEpOgorICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaDoKKwogMjAxMi0wNy0y
NiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMzc5OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNzhhOWY2NjdhZGQxMzBl
NjNlM2MwNzQ2ZDRhNzAzYjQ4OTU0NmJkNy4uM2VjNzYzOWQyZGUwNDlmMzhhOGE5NTMyZjhjMDU3
MDAxYWJlNWJmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKQEAgLTQ3LDggKzQ3LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5JREJCYWNraW5nU3RvcmUoKSB7fTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5h
bWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdl
dElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVy
c2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBpbnQ2NF90JiByb3dJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFN0cmluZ1ZlcnNpb24sIGlu
dDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBzdHJpbmdWZXJzaW9uLCBjb25zdCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0
X3QmIHJvd0lkKSA9IDA7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVy
c2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pCisgICAgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICB2
aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXggODUzZmZjNzJkMjYwMzkxZmNjNDM2NjRkNTcz
ZmM1ZGFlMzAyZGMwZi4uMmE2YWZlZjM4MzE1YmU2NWIyNjYyOGU1Njg4NmRiYTMyYWM1MzY0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgK
QEAgLTU5LDcgKzU5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIGNvbnN0
IElEQktleVBhdGgmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhDb250aW51
YXRpb24oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQcmVmZXRjaChjb25z
dCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJL
ZXk+ID4mIHByaW1hcnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gPiYgdmFsdWVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoaW50NjRfdCBleGlzdGluZ1ZlcnNpb24pIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25VcGdyYWRlTmVlZGVkKGlu
dDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKaW5kZXggZTQ1MTQ3ZDVjMGIwYjYyYjMzZDNmM2NjZDYzYTYxN2ZiNWI4Yjk4ZS4u
YjY5ZmUxYTcxYmM1YmI5MzE5YjZjNDI2ZTA0OTU3YzQ4MTQyYWQyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKQEAgLTUyLDcgKzUyLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIDogbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQogICAgIHsKICAgICB9CisKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKK307CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdP
cGVuV2l0aFZlcnNpb25DYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ09wZW5XaXRoVmVy
c2lvbkNhbGw+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nT3Blbldp
dGhWZXJzaW9uQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IGludDY0X3QgdmVyc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVu
ZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwoY2FsbGJhY2tzLCB2ZXJzaW9uKSk7CisgICAgfQorICAg
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNr
czsgfQorICAgIGludDY0X3QgdmVyc2lvbigpIHsgcmV0dXJuIG1fdmVyc2lvbjsgfQorCitwcml2
YXRlOgorICAgIFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIGludDY0X3QgdmVyc2lvbikKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhj
YWxsYmFja3MpCisgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCisgICAgeworICAgIH0KICAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBpbnQ2NF90IG1fdmVyc2lv
bjsKIH07CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxs
IDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ0RlbGV0ZUNhbGw+IHsKQEAgLTEwNiw2ICsxMjYs
NyBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogICAgICwgbV9pZChJbnZhbGlkSWQpCiAgICAg
LCBtX25hbWUobmFtZSkKICAgICAsIG1fdmVyc2lvbigiIikKKyAgICAsIG1faW50VmVyc2lvbihJ
REJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCiAgICAgLCBtX2lkZW50aWZpZXIodW5p
cXVlSWRlbnRpZmllcikKICAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQogICAgICwgbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKGNvb3JkaW5hdG9yKQpAQCAtMTE2LDEzICsxMzcsMTMgQEAgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkJhY2tpbmdTdG8KIAogYm9vbCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50
ZXJuYWwoKQogewotICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRJREJEYXRh
YmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkKTsKLSAgICBBU1NFUlQoc3VjY2Vz
cyA9PSAobV9pZCAhPSBJbnZhbGlkSWQpKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdT
dG9yZS0+Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUsIG1fdmVyc2lvbiwgbV9pbnRWZXJz
aW9uLCBtX2lkKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHN1Y2Nlc3MgPT0gKG1faWQgIT0g
SW52YWxpZElkKSwgInN1Y2Nlc3MgPSAlcywgbV9pZCA9ICUiUFJJZDY0LCBzdWNjZXNzID8gInRy
dWUiIDogImZhbHNlIiwgbV9pZCk7CiAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgbG9hZE9i
amVjdFN0b3JlcygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIG1f
YmFja2luZ1N0b3JlLT5jcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9u
LCBtX2lkKTsKKyAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faW50VmVyc2lvbiwgbV9pZCk7CiB9CiAKIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6On5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCkKQEAgLTEzNiw3ICsx
NTcsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6YmFja2luZ1N0b3JlKCkgY29uc3QKIAogSURCRGF0YWJhc2VNZXRhZGF0YSBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0CiB7Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0
YSBtZXRhZGF0YShtX25hbWUsIG1fdmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRW
ZXJzaW9uKTsKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV92ZXJz
aW9uLCBtX2ludFZlcnNpb24pOwogICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5k
KCk7ICsraXQpCiAgICAgICAgIG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmZpcnN0LCBp
dC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CkBAIC0yMTQsNiAr
MjM1LDggQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0FC
T1JUX0VSUiwgIkNvbm5lY3Rpb24gd2FzIGNsb3NlZCBiZWZvcmUgc2V0IHZlcnNpb24gdHJhbnNh
Y3Rpb24gd2FzIGNyZWF0ZWQiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG1f
aW50VmVyc2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCisgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVOS05PV05fRVJSLCBTdHJpbmc6OmZvcm1hdCgiWW91IGNhbid0IHVzZSB0aGUg
c2V0VmVyc2lvbiBmdW5jdGlvbiBpZiB5b3UndmUgYWxyZWFkeSBzZXQgdGhlIHZlcnNpb24gdGhy
b3VnaCBhbiBvcGVuIGNhbGwuICBUaGUgY3VycmVudCBpbnRlZ2VyIHZlcnNpb24gaXMgJSJQUklk
NjQsIG1faW50VmVyc2lvbikpKTsKICAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9k
YXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoKml0ICE9IGRh
dGFiYXNlQ2FsbGJhY2tzKQogICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZSh2ZXJz
aW9uKTsKQEAgLTI1OSw2ICsyODIsMTkgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpz
ZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWYKICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4odHJhbnNhY3Rpb24pKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpz
ZXRJbnRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3QgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQoreworICAgIGludDY0X3QgZGF0YWJhc2VJZCA9
IGRhdGFiYXNlLT5pZCgpOworICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IGRhdGFiYXNlLT5tX2lu
dFZlcnNpb247CisgICAgZGF0YWJhc2UtPm1faW50VmVyc2lvbiA9IHZlcnNpb247CisgICAgaWYg
KCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihk
YXRhYmFzZUlkLCBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uKSkgeworICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7Cisg
ICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sIHRyYW5zYWN0aW9uLCBkYXRh
YmFzZSk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFy
dGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24p
CiB7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0g
cHJwVHJhbnNhY3Rpb247CkBAIC0zMjUsNiArMzYxLDEzIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCiAgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8
fCAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+ID4gcGVuZGluZ09wZW5X
aXRoVmVyc2lvbkNhbGxzOworICAgIG1fcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzLnN3YXAo
cGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzKTsKKyAgICB3aGlsZSAoIXBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxsPiBwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbCA9IHBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgb3BlbkNvbm5lY3Rpb25XaXRoVmVy
c2lvbihwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVu
V2l0aFZlcnNpb25DYWxsLT52ZXJzaW9uKCkpOworICAgIH0KKwogICAgIC8vIEdpdmVuIHRoZSBj
aGVjayBhYm92ZSwgaXQgYXBwZWFycyB0aGF0IGNhbGxzIGNhbm5vdCBiZSByZXF1ZXVlZCBieQog
ICAgIC8vIG9wZW5Db25uZWN0aW9uLCBidXQgdXNlIGEgZGlmZmVyZW50IHF1ZXVlIGZvciBpdGVy
YXRpb24gdG8gYmUgc2FmZS4KICAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiA+IHBl
bmRpbmdPcGVuQ2FsbHM7CkBAIC0zNzMsNiArNDE2LDczIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKICAgICB9CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVuSW50VmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAg
QVNTRVJUKGNhbGxiYWNrcyk7CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0
YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgLy8gVGhlIGZyb250ZW5k
IHRha2VzIGNhcmUgb2YgdGhlIGZvbGxvd2luZyBjbGF1c2UsIHRoZSBiYWNrZW5kIGp1c3QKKyAg
ICAgICAgLy8gZmlyZXMgdmVyc2lvbiBjaGFuZ2UgYXQgYWxsIHRoZSBjb25uZWN0aW9ucywgdGhl
IGZyb250ZW5kIHdpbGwgbm90CisgICAgICAgIC8vIGRlbGl2ZXIgdG8gY29ubmVjdGlvbnMgd2l0
aCBjbG9zZVBlbmRpbmcgc2V0LgorICAgICAgICAvLyAiVGhlIGV2ZW50IG11c3Qgbm90IGJlIGZp
cmVkIG9uIG9iamVjdHMgd2hpY2ggaGFzIHRoZSBjbG9zZVBlbmRpbmcKKyAgICAgICAgLy8gZmxh
ZyBzZXQuIgorICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKG1faW50VmVyc2lvbiwgcmVx
dWVzdGVkVmVyc2lvbik7CisgICAgfQorICAgIC8vIFRoZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQg
dW50aWwgYWxsIHRoZSB2ZXJzaW9uIGNoYW5nZSBldmVudHMgYXJlCisgICAgLy8gZGVsaXZlcmVk
IGFuZCB0aGVuIGNoZWNrIG1fZGF0YWJhc2VDYWxsYmFja3MuZW1wdHkoKSBiZWZvcmUgcHJvY2Vl
ZGluZworICAgIC8vIG9yIGZpcmluZyBhIGJsb2NrZWQgZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNo
b3VsZCBiZSBjb25zaXN0ZW50IHdpdGggaG93CisgICAgLy8gdGhlIG9sZCBzZXRWZXJzaW9uIChp
bmNvcnJlY3RseSkgZGlkIGl0OgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MTEzMAorICAgIGlmIChjb25uZWN0aW9uQ291bnQoKSA+IDApCisgICAgICAg
IGNhbGxiYWNrcy0+b25CbG9ja2VkKG1faW50VmVyc2lvbik7CisgICAgLy8gRklYTUU6IEZpZ3Vy
ZSBvdXQgaG93IHRvIHRlc3QgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLgorICAg
IGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgY29ubmVjdGlvbkNvdW50
KCkgPiAwKSB7CisgICAgICAgIC8vIEl0J3MgYWxyZWFkeSBxdWV1ZWQuCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBE
T01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbkludGVyZmFj
ZSA9IHRoaXMtPnRyYW5zYWN0aW9uKG9iamVjdFN0b3JlTmFtZXMuZ2V0KCksIElEQlRyYW5zYWN0
aW9uOjpWRVJTSU9OX0NIQU5HRSwgZWMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJh
bnNhY3Rpb25JbnRlcmZhY2UuZ2V0KCkpOworICAgIEFTU0VSVCghZWMpOworCisgICAgUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKKyAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwsIGRhdGFiYXNlLCByZXF1ZXN0ZWRWZXJzaW9u
LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZl
cnNpb24sIGRhdGFiYXNlLCBtX3ZlcnNpb24pKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgfQorfQorCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24oUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgaW50NjRfdCB2ZXJzaW9uKQoreworICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBpZiAoIW1f
cGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgbV9wZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMuYXBwZW5kKFBlbmRpbmdPcGVuV2l0aFZl
cnNpb25DYWxsOjpjcmVhdGUoY2FsbGJhY2tzLCB2ZXJzaW9uKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKG1faWQgPT0gSW52YWxpZElkKSB7CisgICAgICAgIGlmIChvcGVuSW50
ZXJuYWwoKSkKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbnRWZXJzaW9uKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodmVyc2lv
biA+IG1faW50VmVyc2lvbikgeworICAgICAgICBtX3BlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxs
cy5hcHBlbmQoUGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIHZl
cnNpb24pKTsKKyAgICAgICAgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKHZlcnNpb24s
IGNhbGxiYWNrcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHZlcnNpb24gPCBt
X2ludFZlcnNpb24pIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VkVSX0VSUiwgU3RyaW5nOjpmb3JtYXQo
IlRoZSByZXF1ZXN0ZWQgdmVyc2lvbiAoJSJQUklkNjQiKSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0
aW5nIHZlcnNpb24gKCUiUFJJZDY0IikuIiwgdmVyc2lvbiwgbV9pbnRWZXJzaW9uKSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCh2ZXJzaW9uID09IG1faW50VmVyc2lvbik7
CisgICAgKyttX3BlbmRpbmdDb25uZWN0aW9uQ291bnQ7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3ModGhpcyk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJh
c2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKIHsKICAgICBpZiAobV9y
dW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2Fs
bHMuaXNFbXB0eSgpKSB7CkBAIC0zOTMsMTIgKzUwMywxNCBAQCB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFjawogICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlRGF0YWJhc2UobV9uYW1lKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VS
UiwgIkludGVybmFsIGVycm9yLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3Zl
cnNpb24gPSAiIjsKICAgICBtX2lkID0gSW52YWxpZElkOworICAgIG1faW50VmVyc2lvbiA9IElE
QkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKICAgICBtX29iamVjdFN0b3Jlcy5jbGVh
cigpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVs
bFZhbHVlKCkpOwogfQpAQCAtNDExLDEyICs1MjMsMTcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MKICAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAxKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBUcmFuc2FjdGlvblNldCB0cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOwogICAgIHByb2Nl
c3NQZW5kaW5nQ2FsbHMoKTsKIAotICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkpIHsKLSAgICAg
ICAgVHJhbnNhY3Rpb25TZXQgdHJhbnNhY3Rpb25zKG1fdHJhbnNhY3Rpb25zKTsKKyAgICBBU1NF
UlQobV90cmFuc2FjdGlvbnMuc2l6ZSgpIC0gdHJhbnNhY3Rpb25zLnNpemUoKSA8PSAxKTsKKyAg
ICAvLyBGSVhNRTogSW5zdGVhZCBvZiByZWx5aW5nIG9uIHRyYW5zYWN0aW9ucy5zaXplKCksIG1h
a2UgY29ubmVjdGlvbkNvdW50CisgICAgLy8gYXdhcmUgb2YgaW4tZmxpZ2h0IHVwZ3JhZGVuZWVk
ZWQgZXZlbnRzIGFzIHdlbGwgYXMgaW4tZmxpZ2h0IHN1Y2Nlc3MKKyAgICAvLyBldmVudHMuCisg
ICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgp
ICYmIG1fdHJhbnNhY3Rpb25zLnNpemUoKSA9PSB0cmFuc2FjdGlvbnMuc2l6ZSgpKSB7CiAgICAg
ICAgIGZvciAoVHJhbnNhY3Rpb25TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHJhbnNhY3Rpb25z
LmJlZ2luKCk7IGl0ICE9IHRyYW5zYWN0aW9ucy5lbmQoKTsgKytpdCkKICAgICAgICAgICAgICgq
aXQpLT5hYm9ydCgpOworCiAgICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkp
OwogCiAgICAgICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5k
ZXggODA1ZWI2MTdmYjMyMTRkMGJiYjI1NzVmMzJiZjg5NWE0NWYxMGQxZC4uZTk2OTAzYzUwODQ1
NWY5Y2VjZTNlZGVkNTQwZWVhNTQ2MjFjZTRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTcs
NiArNTcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyRnJvbnRlbmRDYWxsYmFja3Mo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogICAgIHZvaWQgb3BlbkNvbm5lY3Rp
b24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5Db25uZWN0aW9uV2l0
aFZlcnNpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBpbnQ2NF90IHZlcnNpb24pOwogICAg
IHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIC8v
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQpAQCAtNzYsNiArNzcsNyBAQCBwcml2YXRlOgog
ICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5n
U3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKIAogICAgIGJvb2wg
b3BlbkludGVybmFsKCk7CisgICAgdm9pZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24o
aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAg
IHZvaWQgbG9hZE9iamVjdFN0b3JlcygpOwogICAgIGludDMyX3QgY29ubmVjdGlvbkNvdW50KCk7
CiAgICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CkBAIC04Myw2ICs4NSw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgc2V0VmVyc2lvbklu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZv
aWQgc2V0SW50VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
KTsKIAogICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJv
cnQgdGFza3MuCiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKQEAgLTkzLDYgKzk2LDcgQEAg
cHJpdmF0ZToKICAgICBpbnQ2NF90IG1faWQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJp
bmcgbV92ZXJzaW9uOworICAgIGludDY0X3QgbV9pbnRWZXJzaW9uOwogCiAgICAgU3RyaW5nIG1f
aWRlbnRpZmllcjsKICAgICAvLyBUaGlzIG1pZ2h0IG5vdCBuZWVkIHRvIGJlIGEgUmVmUHRyIHNp
bmNlIHRoZSBmYWN0b3J5J3MgbGlmZXRpbWUgaXMgdGhhdCBvZiB0aGUgcGFnZSBncm91cCwgYnV0
IGl0J3MgYmV0dGVyIHRvIGJlIGNvbnNlcnZpdGl2ZSB0aGFuIHNvcnJ5LgpAQCAtMTEzLDYgKzEx
Nyw5IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOwogICAgIERlcXVlPFJl
ZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOwogCisgICAgY2xhc3Mg
UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdPcGVu
V2l0aFZlcnNpb25DYWxsPiA+IG1fcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzOworCiAgICAg
Y2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7CiAgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVD
YWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaAppbmRleCBiM2YyNDRm
NTE2YjY5ODdlYTExOWNiZjcwMTliN2I1NDM3NWYxMmJmLi4xNmE5ZWE2YzUwOGIwZDkyYjYxZTQ5
OTdjNTQzMDEzMmE2ZDJhY2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKQEAgLTM4LDYgKzM4LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQ2FsbGJhY2tzKCkgeyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UoaW50NjRfdCBjdXJyZW50VmVyc2lvbiwgaW50
NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCBkZmIxNDU3YTMw
NmRhYTdhNTY4YzIxYWY2ZWZhMzQ1NDZjZTNmZjQ2Li43NGY5ZmZjZDEzNDhiNjkyN2Q0ZWNkYzJh
NmViMWI0MmY2MmNhYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkxldmVsREJC
YWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTE1MSwzMCArMTUyLDMwIEBAIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5n
U3RvcmUoUGFzc1JlZlB0cjxTCiAKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwU2VjdXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCiB7CisgICAgLy8gRklYTUU6
IE1ha2UgdGhpcyBhIHBhcmFtZXRlciBhbmQgcGx1bWIgdGhyb3VnaCBmcm9tIGphdmFzY3JpcHQu
CisgICAgaW50NjRfdCB2ZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9u
OwogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0
eU9yaWdpbjsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlx
dWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKIAorICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQ7CiAgICAgSURCRGF0YWJhc2VC
YWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVl
SWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7
Ci0gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0
IGZvciBhbnkgcGVuZGluZwotICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRl
LgotICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24g
c2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0
YURpcmVjdG9yeSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0g
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwg
bV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsK
LSAgICBpZiAoZGF0YWJhc2VCYWNrZW5kKSB7Ci0gICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFw
LnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwotICAgICAgICBk
YXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CisgICAgaWYgKGl0ID09
IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRh
dGFEaXJlY3RvcnkpOworICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICAgICAgaWYg
KGRhdGFiYXNlQmFja2VuZCkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1
bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4i
KSk7CisgICAgICAgIGRhdGFiYXNlQmFja2VuZCA9IGl0LT5zZWNvbmQ7CisgICAgaWYgKHZlcnNp
b24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQorICAgICAgICBkYXRhYmFz
ZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CisgICAgZWxzZQorICAgICAgICBk
YXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24oY2FsbGJhY2tzLCB2ZXJz
aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApp
bmRleCAzMmUyZjY4MTU3OTQwOWEwOTA4ZDI5YTE4NzJjMGNkYzU2Yjg5ZWY5Li45MzY4YjY4N2Uw
MWRmMWQ2OTU5MzYyNDc1Y2QzMDBkNWRkZGUxOWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApA
QCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJh
c2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykKICAgICB9CiB9CiAKLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQorYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgU3RyaW5nJiBmb3VuZFN0cmluZ1ZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50VmVyc2lv
biwgaW50NjRfdCYgZm91bmRJZCkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0
YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKIApAQCAtMjQyLDcgKzI0
Miw3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0
YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFE
YXRhS2V5OjplbmNvZGUoZm91bmRJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24p
LCBmb3VuZFZlcnNpb24pOworICAgIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNl
TWV0YURhdGFLZXk6OmVuY29kZShmb3VuZElkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVy
c2lvbiksIGZvdW5kU3RyaW5nVmVyc2lvbik7CiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC0yNjQsNyArMjY0LDcgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3RGF0YWJh
c2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQogICAgIHJldHVybiBkYXRhYmFzZUlkOwogfQogCi1i
b29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkKQor
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNp
b24sIGludDY0X3QmIHJvd0lkKQogewogICAgIHJvd0lkID0gZ2V0TmV3RGF0YWJhc2VJZChtX2Ri
LmdldCgpKTsKICAgICBpZiAocm93SWQgPCAwKQpAQCAtMjc4LDYgKzI3OCwxMSBAQCBib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBp
bnQ2NF90IGludFZlcnNpb24pCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lk
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0
aW9uKTsKQEAgLTMwNSw3ICszMTAsOCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRl
bGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkKIAogICAgIGludDY0X3QgZGF0YWJhc2VJ
ZDsKICAgICBTdHJpbmcgdmVyc2lvbjsKLSAgICBpZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEo
bmFtZSwgdmVyc2lvbiwgZGF0YWJhc2VJZCkpIHsKKyAgICBpbnQ2NF90IGludFZlcnNpb247Cisg
ICAgaWYgKCFnZXRJREJEYXRhYmFzZU1ldGFEYXRhKG5hbWUsIHZlcnNpb24sIGludFZlcnNpb24s
IGRhdGFiYXNlSWQpKSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggYzVhOWUyZWUzMDll
OGNhM2ZkN2Y3MGYwYWEyYmI4MGNlYzA0NmIyZS4uNjczY2E5YzE1YWUzYzZkYWQ0NTk3ZTE3NGRi
MjdlZWE2MWVkOWY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaApAQCAtNDUsOSArNDUsMTAgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfklEQkxldmVsREJCYWNraW5nU3RvcmUoKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKLSAgICB2aXJ0dWFsIGJv
b2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOworICAgIHZpcnR1YWwgYm9vbCBnZXRJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24s
IGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7CisgICAgdmlydHVh
bCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwog
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFi
YXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOwogICAgIHZp
cnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgdmly
dHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2
NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURCS2V5
UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50Rmxh
Z3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9u
Q29ycnVwdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9u
Q29ycnVwdFRlc3QuY3BwCmluZGV4IGQ5ZTNkNjk3YjE5N2M3NDA2ZjYzYmFlYjQ4MzkzMWI0ZWFj
OTUwODUuLjkxZGYxMjZhNWZiOGZiNjdiYzZlYWFjNTFkOTQ3ZTlkYTQxZDA5YTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVz
dC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGYWlsaW5nQmFja2luZ1N0b3JlKTsKICAgICB9Ci0gICAgdmlydHVhbCBib29s
IGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
aW50NjRfdCYpCisgICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgaW50NjRfdCwgaW50NjRfdCYpCiAgICAgewogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCAwODQwNWNlMGFiNThjOTZmYzI5NmMz
ZjBmOGExNGZmNjlkNjViYTE4Li5kOTZmN2M2Y2EwZWE5NDJhMjVkMzgyNGI1ZTEyY2Q1YzQ5ZTdj
NTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNr
aW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNr
aW5nU3RvcmUuaApAQCAtMzMsOCArMzMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJ
REJGYWtlQmFja2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFt
ZXMpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5k
SWQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlE
QkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24sIGludDY0X3QmIHJvd0lkKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcm
IGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJbnRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElk
KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBjb25zdCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKSBPVkVSUklERSB7IHJl
dHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEo
aW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSBPVkVSUklERSB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5h
bWUpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155096</attachid>
            <date>2012-07-27 17:28:57 -0700</date>
            <delta_ts>2012-07-30 17:20:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92558-20120727172845.patch</filename>
            <type>text/plain</type>
            <size>29200</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE1Y2MzNDkxMjEyYTJi
ZWMyODUwM2FlMTI4ZWYyMWZiYmViNDYxZC4uOGE1MWEzYWNkOTcwYTVhNzM5M2VjN2ZjNDUzYzRk
YjZmODMzODUwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA3LTI3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENv
cmUgdXBncmFkZW5lZWRlZCBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI1NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBh
cyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlv
bnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURC
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6dXBkYXRl
SURCRGF0YWJhc2VJbnRWZXJzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
YWxsYmFja3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25CbG9ja2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OmNhbGxi
YWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5n
T3BlbldpdGhWZXJzaW9uQ2FsbDo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6UGVuZGluZ09wZW5X
aXRoVmVyc2lvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5l
Y3Rpb25XaXRoVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpjbG9zZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tzOjpvblZlcnNpb25DaGFuZ2UpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlE
QkRhdGFiYXNlSW50VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJM
ZXZlbERCQmFja2luZ1N0b3JlKToKKwogMjAxMi0wNy0yNiAgTmF5YW4gS3VtYXIgSyAgPG5heWFu
a2tAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFtXZWJHTF0gSW5pdGlhbCBzaXplIG9mIGNhbnZh
cyBjYW4gYmUgbGFyZ2VyIHRoYW4gTUFYX1ZJRVdQT1JUX0RJTVMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDFkNzA0NzQwYzdmYWRkODYxOTk4ZGFlODg1MzhlNjJhNzQxNTE2ZWQuLmNj
MTQ4MGMyNmYwNmU2OGI1MDAyYTQ5NTg3MmQ3NjBiM2NiOTI4NDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDctMjcgIERhdmlkIEdyb2dhbiAgPGRn
cm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogQ29yZSB1cGdyYWRlbmVl
ZGVkIGxvZ2ljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MjU1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCBy
YXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09Q
UyEpLgorCisgICAgICAgICogdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZhaWxpbmdCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEpOgorICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaDoKKwogMjAxMi0wNy0y
NiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMzc5OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNzhhOWY2NjdhZGQxMzBl
NjNlM2MwNzQ2ZDRhNzAzYjQ4OTU0NmJkNy4uM2VjNzYzOWQyZGUwNDlmMzhhOGE5NTMyZjhjMDU3
MDAxYWJlNWJmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKQEAgLTQ3LDggKzQ3LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5JREJCYWNraW5nU3RvcmUoKSB7fTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5h
bWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdl
dElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVy
c2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBpbnQ2NF90JiByb3dJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFN0cmluZ1ZlcnNpb24sIGlu
dDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBzdHJpbmdWZXJzaW9uLCBjb25zdCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0
X3QmIHJvd0lkKSA9IDA7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVy
c2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pCisgICAgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICB2
aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXggODUzZmZjNzJkMjYwMzkxZmNjNDM2NjRkNTcz
ZmM1ZGFlMzAyZGMwZi4uMmE2YWZlZjM4MzE1YmU2NWIyNjYyOGU1Njg4NmRiYTMyYWM1MzY0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgK
QEAgLTU5LDcgKzU5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIGNvbnN0
IElEQktleVBhdGgmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhDb250aW51
YXRpb24oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQcmVmZXRjaChjb25z
dCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJL
ZXk+ID4mIHByaW1hcnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gPiYgdmFsdWVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoaW50NjRfdCBleGlzdGluZ1ZlcnNpb24pIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25VcGdyYWRlTmVlZGVkKGlu
dDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKaW5kZXggZTQ1MTQ3ZDVjMGIwYjYyYjMzZDNmM2NjZDYzYTYxN2ZiNWI4Yjk4ZS4u
MzYxMDM2ZWU2OGQ1OGZjMzBjNTAxZmE5NzhlNTkxZmRjZTBiYWFiZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKQEAgLTUyLDcgKzUyLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIDogbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQogICAgIHsKICAgICB9CisKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKK307CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdP
cGVuV2l0aFZlcnNpb25DYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ09wZW5XaXRoVmVy
c2lvbkNhbGw+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nT3Blbldp
dGhWZXJzaW9uQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IGludDY0X3QgdmVyc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVu
ZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwoY2FsbGJhY2tzLCB2ZXJzaW9uKSk7CisgICAgfQorICAg
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNr
czsgfQorICAgIGludDY0X3QgdmVyc2lvbigpIHsgcmV0dXJuIG1fdmVyc2lvbjsgfQorCitwcml2
YXRlOgorICAgIFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIGludDY0X3QgdmVyc2lvbikKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhj
YWxsYmFja3MpCisgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCisgICAgeworICAgIH0KICAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBpbnQ2NF90IG1fdmVyc2lv
bjsKIH07CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxs
IDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ0RlbGV0ZUNhbGw+IHsKQEAgLTEwNiw2ICsxMjYs
NyBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogICAgICwgbV9pZChJbnZhbGlkSWQpCiAgICAg
LCBtX25hbWUobmFtZSkKICAgICAsIG1fdmVyc2lvbigiIikKKyAgICAsIG1faW50VmVyc2lvbihJ
REJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCiAgICAgLCBtX2lkZW50aWZpZXIodW5p
cXVlSWRlbnRpZmllcikKICAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQogICAgICwgbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKGNvb3JkaW5hdG9yKQpAQCAtMTE2LDEzICsxMzcsMTMgQEAgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkJhY2tpbmdTdG8KIAogYm9vbCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50
ZXJuYWwoKQogewotICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRJREJEYXRh
YmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkKTsKLSAgICBBU1NFUlQoc3VjY2Vz
cyA9PSAobV9pZCAhPSBJbnZhbGlkSWQpKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdT
dG9yZS0+Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUsIG1fdmVyc2lvbiwgbV9pbnRWZXJz
aW9uLCBtX2lkKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHN1Y2Nlc3MgPT0gKG1faWQgIT0g
SW52YWxpZElkKSwgInN1Y2Nlc3MgPSAlcywgbV9pZCA9ICUiUFJJZDY0LCBzdWNjZXNzID8gInRy
dWUiIDogImZhbHNlIiwgbV9pZCk7CiAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgbG9hZE9i
amVjdFN0b3JlcygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIG1f
YmFja2luZ1N0b3JlLT5jcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9u
LCBtX2lkKTsKKyAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faW50VmVyc2lvbiwgbV9pZCk7CiB9CiAKIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6On5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCkKQEAgLTEzNiw3ICsx
NTcsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6YmFja2luZ1N0b3JlKCkgY29uc3QKIAogSURCRGF0YWJhc2VNZXRhZGF0YSBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0CiB7Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0
YSBtZXRhZGF0YShtX25hbWUsIG1fdmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRW
ZXJzaW9uKTsKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV92ZXJz
aW9uLCBtX2ludFZlcnNpb24pOwogICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5k
KCk7ICsraXQpCiAgICAgICAgIG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmZpcnN0LCBp
dC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CkBAIC0yMTQsNiAr
MjM1LDggQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0FC
T1JUX0VSUiwgIkNvbm5lY3Rpb24gd2FzIGNsb3NlZCBiZWZvcmUgc2V0IHZlcnNpb24gdHJhbnNh
Y3Rpb24gd2FzIGNyZWF0ZWQiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG1f
aW50VmVyc2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCisgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVOS05PV05fRVJSLCBTdHJpbmc6OmZvcm1hdCgiWW91IGNhbid0IHVzZSB0aGUg
c2V0VmVyc2lvbiBmdW5jdGlvbiBpZiB5b3UndmUgYWxyZWFkeSBzZXQgdGhlIHZlcnNpb24gdGhy
b3VnaCBhbiBvcGVuIGNhbGwuICBUaGUgY3VycmVudCBpbnRlZ2VyIHZlcnNpb24gaXMgJSJQUklk
NjQsIG1faW50VmVyc2lvbikpKTsKICAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9k
YXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoKml0ICE9IGRh
dGFiYXNlQ2FsbGJhY2tzKQogICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZSh2ZXJz
aW9uKTsKQEAgLTI1OSw2ICsyODIsMTkgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpz
ZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWYKICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4odHJhbnNhY3Rpb24pKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpz
ZXRJbnRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3QgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQoreworICAgIGludDY0X3QgZGF0YWJhc2VJZCA9
IGRhdGFiYXNlLT5pZCgpOworICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IGRhdGFiYXNlLT5tX2lu
dFZlcnNpb247CisgICAgZGF0YWJhc2UtPm1faW50VmVyc2lvbiA9IHZlcnNpb247CisgICAgaWYg
KCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihk
YXRhYmFzZUlkLCBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uKSkgeworICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7Cisg
ICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sIHRyYW5zYWN0aW9uLCBkYXRh
YmFzZSk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFy
dGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24p
CiB7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0g
cHJwVHJhbnNhY3Rpb247CkBAIC0zMjUsNiArMzYxLDEzIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCiAgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8
fCAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+ID4gcGVuZGluZ09wZW5X
aXRoVmVyc2lvbkNhbGxzOworICAgIG1fcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzLnN3YXAo
cGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzKTsKKyAgICB3aGlsZSAoIXBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxsPiBwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbCA9IHBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgb3BlbkNvbm5lY3Rpb25XaXRoVmVy
c2lvbihwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVu
V2l0aFZlcnNpb25DYWxsLT52ZXJzaW9uKCkpOworICAgIH0KKwogICAgIC8vIEdpdmVuIHRoZSBj
aGVjayBhYm92ZSwgaXQgYXBwZWFycyB0aGF0IGNhbGxzIGNhbm5vdCBiZSByZXF1ZXVlZCBieQog
ICAgIC8vIG9wZW5Db25uZWN0aW9uLCBidXQgdXNlIGEgZGlmZmVyZW50IHF1ZXVlIGZvciBpdGVy
YXRpb24gdG8gYmUgc2FmZS4KICAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiA+IHBl
bmRpbmdPcGVuQ2FsbHM7CkBAIC0zNzMsNiArNDE2LDczIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKICAgICB9CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVuSW50VmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAg
QVNTRVJUKGNhbGxiYWNrcyk7CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0
YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHNv
bWUgY29ubmVjdGlvbnMgbWlnaHQgY2xvc2UgaW4gdGhlIHZlcnNpb25jaGFuZ2UgZXZlbnQKKyAg
ICAgICAgLy8gaGFuZGxlciBmb3Igc29tZSBvdGhlciBjb25uZWN0aW9uLCBhZnRlciB3aGljaCBp
dHMgb3duIHZlcnNpb25jaGFuZ2UKKyAgICAgICAgLy8gZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJl
ZC4gVGhlIGJhY2tlbmQgZG9lc24ndCB3b3JyeSBhYm91dCB0aGlzLCB3ZQorICAgICAgICAvLyBq
dXN0IHF1ZXVlIHVwIGEgdmVyc2lvbiBjaGFuZ2UgZXZlbnQgZm9yIGV2ZXJ5IGNvbm5lY3Rpb24u
IFRoZQorICAgICAgICAvLyBmcm9udGVuZCB0YWtlcyBjYXJlIHRvIG9ubHkgZGlzcGF0Y2ggdG8g
b3BlbiBjb25uZWN0aW9ucy4KKyAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX2ludFZl
cnNpb24sIHJlcXVlc3RlZFZlcnNpb24pOworICAgIH0KKyAgICAvLyBUaGUgc3BlYyBkaWN0YXRl
cyB3ZSB3YWl0IHVudGlsIGFsbCB0aGUgdmVyc2lvbiBjaGFuZ2UgZXZlbnRzIGFyZQorICAgIC8v
IGRlbGl2ZXJlZCBhbmQgdGhlbiBjaGVjayBtX2RhdGFiYXNlQ2FsbGJhY2tzLmVtcHR5KCkgYmVm
b3JlIHByb2NlZWRpbmcKKyAgICAvLyBvciBmaXJpbmcgYSBibG9ja2VkIGV2ZW50LCBidXQgaW5z
dGVhZCB3ZSBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGhvdworICAgIC8vIHRoZSBvbGQgc2V0
VmVyc2lvbiAoaW5jb3JyZWN0bHkpIGRpZCBpdDoKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAw
KQorICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX2ludFZlcnNpb24pOworICAgIC8vIEZJ
WE1FOiBGaWd1cmUgb3V0IGhvdyB0byB0ZXN0IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbi4KKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8IGNvbm5l
Y3Rpb25Db3VudCgpID4gMCkgeworICAgICAgICAvLyBJdCdzIGFscmVhZHkgcXVldWVkLgorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9y
ZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b25JbnRlcmZhY2UgPSB0cmFuc2FjdGlvbihvYmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJUcmFu
c2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIGVjKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uSW50ZXJmYWNlLmdldCgpKTsKKyAgICBBU1NFUlQoIWVjKTsKKworICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7CisgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0SW50VmVyc2lvbkludGVybmFsLCBkYXRhYmFzZSwgcmVxdWVzdGVkVmVy
c2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVz
ZXRWZXJzaW9uLCBkYXRhYmFzZSwgbV92ZXJzaW9uKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgIH0KK30KKwordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlvbldpdGhWZXJzaW9uKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIGludDY0X3QgdmVyc2lvbikKK3sKKyAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYg
KCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkgfHwgbV9ydW5uaW5nVmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1fcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzLmFwcGVuZChQZW5kaW5nT3Blbldp
dGhWZXJzaW9uQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywgdmVyc2lvbikpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChtX2lkID09IEludmFsaWRJZCkgeworICAgICAgICBpZiAob3Bl
bkludGVybmFsKCkpCisgICAgICAgICAgICBBU1NFUlQobV9pbnRWZXJzaW9uID09IElEQkRhdGFi
YXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZlcnNpb24gPiBtX2ludFZlcnNpb24p
IHsKKyAgICAgICAgbV9wZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMuYXBwZW5kKFBlbmRpbmdP
cGVuV2l0aFZlcnNpb25DYWxsOjpjcmVhdGUoY2FsbGJhY2tzLCB2ZXJzaW9uKSk7CisgICAgICAg
IHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbih2ZXJzaW9uLCBjYWxsYmFja3MpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh2ZXJzaW9uIDwgbV9pbnRWZXJzaW9uKSB7Cisg
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlZFUl9FUlIsIFN0cmluZzo6Zm9ybWF0KCJUaGUgcmVxdWVzdGVkIHZl
cnNpb24gKCUiUFJJZDY0IikgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGluZyB2ZXJzaW9uICglIlBS
SWQ2NCIpLiIsIHZlcnNpb24sIG1faW50VmVyc2lvbikpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBBU1NFUlQodmVyc2lvbiA9PSBtX2ludFZlcnNpb24pOworICAgICsrbV9wZW5kaW5n
Q29ubmVjdGlvbkNvdW50OworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMpOworfQorCiB2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCiB7CiAgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgewpA
QCAtMzkzLDEyICs1MDMsMTQgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVE
YXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2sKICAgICAgICAgY2Fs
bGJhY2tzLT5vbkJsb2NrZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBBU1NFUlQo
bV9iYWNraW5nU3RvcmUpOwogICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNl
KG1fbmFtZSkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJv
ci4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV92ZXJzaW9uID0gIiI7CiAgICAg
bV9pZCA9IEludmFsaWRJZDsKKyAgICBtX2ludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRh
OjpOb0ludFZlcnNpb247CiAgICAgbV9vYmplY3RTdG9yZXMuY2xlYXIoKTsKICAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKIH0KQEAg
LTQxMSwxMiArNTIzLDE3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzCiAgICAgaWYgKGNvbm5l
Y3Rpb25Db3VudCgpID4gMSkKICAgICAgICAgcmV0dXJuOwogCisgICAgVHJhbnNhY3Rpb25TZXQg
dHJhbnNhY3Rpb25zKG1fdHJhbnNhY3Rpb25zKTsKICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7
CiAKLSAgICBpZiAoIWNvbm5lY3Rpb25Db3VudCgpKSB7Ci0gICAgICAgIFRyYW5zYWN0aW9uU2V0
IHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25z
LnNpemUoKSAtIHRyYW5zYWN0aW9ucy5zaXplKCkgPD0gMSk7CisgICAgLy8gRklYTUU6IEluc3Rl
YWQgb2YgcmVseWluZyBvbiB0cmFuc2FjdGlvbnMuc2l6ZSgpLCBtYWtlIGNvbm5lY3Rpb25Db3Vu
dAorICAgIC8vIGF3YXJlIG9mIGluLWZsaWdodCB1cGdyYWRlbmVlZGVkIGV2ZW50cyBhcyB3ZWxs
IGFzIGluLWZsaWdodCBzdWNjZXNzCisgICAgLy8gZXZlbnRzLgorICAgIGlmICghY29ubmVjdGlv
bkNvdW50KCkgJiYgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLnNpemUoKSAmJiBtX3RyYW5zYWN0aW9u
cy5zaXplKCkgPT0gdHJhbnNhY3Rpb25zLnNpemUoKSkgewogICAgICAgICBmb3IgKFRyYW5zYWN0
aW9uU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRyYW5zYWN0aW9ucy5iZWdpbigpOyBpdCAhPSB0
cmFuc2FjdGlvbnMuZW5kKCk7ICsraXQpCiAgICAgICAgICAgICAoKml0KS0+YWJvcnQoKTsKKwog
ICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKIAogICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCmluZGV4IDgwNWViNjE3ZmIzMjE0
ZDBiYmIyNTc1ZjMyYmY4OTVhNDVmMTBkMWQuLmU5NjkwM2M1MDg0NTVmOWNlY2UzZWRlZDU0MGVl
YTU0NjIxY2U0YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCByZWdpc3RlckZyb250ZW5kQ2FsbGJhY2tzKFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+KTsKICAgICB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPik7CisgICAgdm9pZCBvcGVuQ29ubmVjdGlvbldpdGhWZXJzaW9uKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgaW50NjRfdCB2ZXJzaW9uKTsKICAgICB2b2lkIGRlbGV0ZURhdGFi
YXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICAvLyBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2UKQEAgLTc2LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvciosIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIGNvbnN0
IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7CiAKICAgICBib29sIG9wZW5JbnRlcm5hbCgpOwor
ICAgIHZvaWQgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGludDY0X3QgcmVxdWVzdGVk
VmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICB2b2lkIGxvYWRPYmplY3RT
dG9yZXMoKTsKICAgICBpbnQzMl90IGNvbm5lY3Rpb25Db3VudCgpOwogICAgIHZvaWQgcHJvY2Vz
c1BlbmRpbmdDYWxscygpOwpAQCAtODMsNiArODUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2
b2lkIGNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwog
ICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHNldFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIHN0YXRpYyB2b2lkIHNldEludFZlcnNpb25J
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAKICAgICAvLyBUaGVz
ZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tzLgogICAgIHN0
YXRpYyB2b2lkIHJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPik7CkBAIC05Myw2ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgaW50
NjRfdCBtX2lkOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RyaW5nIG1fdmVyc2lvbjsKKyAg
ICBpbnQ2NF90IG1faW50VmVyc2lvbjsKIAogICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CiAgICAg
Ly8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdz
IGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBi
ZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KQEAgLTExMyw2ICsxMTcsOSBAQCBwcml2YXRlOgog
ICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKICAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5D
YWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKIAorICAgIGNsYXNzIFBlbmRpbmdPcGVuV2l0aFZl
cnNpb25DYWxsOworICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbD4g
PiBtX3BlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsczsKKwogICAgIGNsYXNzIFBlbmRpbmdEZWxl
dGVDYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBtX3BlbmRpbmdE
ZWxldGVDYWxsczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKaW5kZXggYjNmMjQ0ZjUxNmI2OTg3ZWExMTljYmY3
MDE5YjdiNTQzNzVmMTJiZi4uMTZhOWVhNmM1MDhiMGQ5MmI2MWU0OTk3YzU0MzAxMzJhNmQyYWNh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VDYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUNhbGxiYWNrcy5oCkBAIC0zOCw2ICszOCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5JREJEYXRhYmFzZUNhbGxiYWNrcygpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIG9uVmVyc2lv
bkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25W
ZXJzaW9uQ2hhbmdlKGludDY0X3QgY3VycmVudFZlcnNpb24sIGludDY0X3QgcmVxdWVzdGVkVmVy
c2lvbikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggZGZiMTQ1N2EzMDZkYWE3YTU2OGMyMWFmNmVm
YTM0NTQ2Y2UzZmY0Ni4uNzRmOWZmY2QxMzQ4YjY5MjdkNGVjZGMyYTZlYjFiNDJmNjJjYWI4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSURCRGF0
YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgogCkBAIC0xNTEsMzAgKzE1MiwzMCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8
UwogCiB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogeworICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgYSBwYXJh
bWV0ZXIgYW5kIHBsdW1iIHRocm91Z2ggZnJvbSBqYXZhc2NyaXB0LgorICAgIGludDY0X3QgdmVy
c2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKICAgICBSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0gcHJwU2VjdXJpdHlPcmlnaW47CiAgICAgY29u
c3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihuYW1l
LCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4gZGF0YWJhc2VCYWNrZW5kOwogICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOwotICAg
IGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewotICAgICAgICAvLyBJZiBp
dCdzIGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBlbmRpbmcK
LSAgICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KLSAgICAgICAgaXQtPnNl
Y29uZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9u
IGFub3RoZXIgdGhyZWFkLgotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotICAg
IGlmICghYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50
ZXJuYWwgZXJyb3IuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29y
ZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGRhdGFiYXNl
QmFja2VuZCkgewotICAgICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRp
ZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKLSAgICAgICAgZGF0YWJhc2VCYWNrZW5kLT5v
cGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOworICAgIGlmIChpdCA9PSBtX2RhdGFiYXNlQmFja2Vu
ZE1hcC5lbmQoKSkgeworICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKKyAg
ICAgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05f
RVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQo
KSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgICAgIGlmIChkYXRhYmFzZUJhY2tlbmQp
CisgICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwg
ZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICBkYXRh
YmFzZUJhY2tlbmQgPSBpdC0+c2Vjb25kOworICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNl
TWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kLT5vcGVuQ29u
bmVjdGlvbihjYWxsYmFja3MpOworICAgIGVsc2UKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kLT5v
cGVuQ29ubmVjdGlvbldpdGhWZXJzaW9uKGNhbGxiYWNrcywgdmVyc2lvbik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMzJlMmY2ODE1Nzk0
MDlhMDkwOGQyOWExODcyYzBjZGM1NmI4OWVmOS4uOTM2OGI2ODdlMDFkZjFkNjk1OTM2MjQ3NWNk
MzAwZDVkZGRlMTlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIzNCw3ICsyMzQsNyBA
QCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0
cmluZz4mIGZvdW5kTmFtZXMpCiAgICAgfQogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZv
dW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91
bmRTdHJpbmdWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5k
SWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5j
b2RlKG1faWRlbnRpZmllciwgbmFtZSk7CiAKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBTdHJpbmcmCiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
b2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGZv
dW5kSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgZm91bmRWZXJzaW9uKTsK
KyAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZm91bmRJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCBmb3VuZFN0cmlu
Z1ZlcnNpb24pOwogICAgIGlmICghb2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjY0
LDcgKzI2NCw3IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRhdGFi
YXNlKiBkYikKICAgICByZXR1cm4gZGF0YWJhc2VJZDsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkKK2Jvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJ
ZCkKIHsKICAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9kYi5nZXQoKSk7CiAgICAgaWYg
KHJvd0lkIDwgMCkKQEAgLTI3OCw2ICsyNzgsMTEgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRh
dGVJREJEYXRhYmFzZUludFZlcnNpb24oaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9u
KQoreworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2
ZXJzaW9uKQogewogICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CkBAIC0zMDUsNyAr
MzEwLDggQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25z
dCBTdHJpbmcmIG5hbWUpCiAKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7CiAgICAgU3RyaW5nIHZl
cnNpb247Ci0gICAgaWYgKCFnZXRJREJEYXRhYmFzZU1ldGFEYXRhKG5hbWUsIHZlcnNpb24sIGRh
dGFiYXNlSWQpKSB7CisgICAgaW50NjRfdCBpbnRWZXJzaW9uOworICAgIGlmICghZ2V0SURCRGF0
YWJhc2VNZXRhRGF0YShuYW1lLCB2ZXJzaW9uLCBpbnRWZXJzaW9uLCBkYXRhYmFzZUlkKSkgewog
ICAgICAgICB0cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGM1YTllMmVlMzA5ZThjYTNmZDdmNzBmMGFhMmJi
ODBjZWMwNDZiMmUuLjY3M2NhOWMxNWFlM2M2ZGFkNDU5N2UxNzRkYjI3ZWVhNjFlZDlmNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZl
bERCQmFja2luZ1N0b3JlLmgKQEAgLTQ1LDkgKzQ1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5JREJMZXZlbERCQmFja2luZ1N0b3JlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJh
c2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcyk7Ci0gICAgdmlydHVhbCBib29sIGdl
dElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVy
c2lvbiwgaW50NjRfdCYgZm91bmRJZCk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFi
YXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGlu
dDY0X3QmIHJvd0lkKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElu
dFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKTsKICAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24pOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oaW50
NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPYmpl
Y3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBW
ZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPElEQktleVBhdGg+JiBmb3VuZEtleVBh
dGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcApp
bmRleCBkOWUzZDY5N2IxOTdjNzQwNmY2M2JhZWI0ODM5MzFiNGVhYzk1MDg1Li45MWRmMTI2YTVm
YjhmYjY3YmM2ZWFhYzUxZDk0N2U5ZGE0MWQwOWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwCkBAIC03NCw3ICs3
NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmFpbGlu
Z0JhY2tpbmdTdG9yZSk7CiAgICAgfQotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGludDY0X3QmKQorICAgIHZp
cnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIGludDY0X3QsIGludDY0X3QmKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFr
ZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFj
a2luZ1N0b3JlLmgKaW5kZXggMDg0MDVjZTBhYjU4Yzk2ZmMyOTZjM2YwZjhhMTRmZjY5ZDY1YmEx
OC4uZDk2ZjdjNmNhMGVhOTQyYTI1ZDM4MjRiNWUxMmNkNWM0OWU3YzUxYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTMz
LDggKzMzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCRmFrZUJhY2tpbmdTdG9y
ZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBn
ZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKSBPVkVSUklERSB7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKSBPVkVSUklERSB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJ
ZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGlu
dDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgaW50NjRfdCBp
bnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKSBPVkVSUklERSB7IHJl
dHVybiBmYWxzZTsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155404</attachid>
            <date>2012-07-30 17:19:46 -0700</date>
            <delta_ts>2012-07-31 16:03:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92558-20120730171930.patch</filename>
            <type>text/plain</type>
            <size>29348</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE1Y2MzNDkxMjEyYTJi
ZWMyODUwM2FlMTI4ZWYyMWZiYmViNDYxZC4uOGE1MWEzYWNkOTcwYTVhNzM5M2VjN2ZjNDUzYzRk
YjZmODMzODUwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA3LTI3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENv
cmUgdXBncmFkZW5lZWRlZCBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI1NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBh
cyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlv
bnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURC
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6dXBkYXRl
SURCRGF0YWJhc2VJbnRWZXJzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
YWxsYmFja3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25CbG9ja2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OmNhbGxi
YWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5n
T3BlbldpdGhWZXJzaW9uQ2FsbDo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6UGVuZGluZ09wZW5X
aXRoVmVyc2lvbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5l
Y3Rpb25XaXRoVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpjbG9zZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tzOjpvblZlcnNpb25DaGFuZ2UpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlE
QkRhdGFiYXNlSW50VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJM
ZXZlbERCQmFja2luZ1N0b3JlKToKKwogMjAxMi0wNy0yNiAgTmF5YW4gS3VtYXIgSyAgPG5heWFu
a2tAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFtXZWJHTF0gSW5pdGlhbCBzaXplIG9mIGNhbnZh
cyBjYW4gYmUgbGFyZ2VyIHRoYW4gTUFYX1ZJRVdQT1JUX0RJTVMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDFkNzA0NzQwYzdmYWRkODYxOTk4ZGFlODg1MzhlNjJhNzQxNTE2ZWQuLmNj
MTQ4MGMyNmYwNmU2OGI1MDAyYTQ5NTg3MmQ3NjBiM2NiOTI4NDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDctMjcgIERhdmlkIEdyb2dhbiAgPGRn
cm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogQ29yZSB1cGdyYWRlbmVl
ZGVkIGxvZ2ljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MjU1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCBy
YXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09Q
UyEpLgorCisgICAgICAgICogdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZhaWxpbmdCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEpOgorICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaDoKKwogMjAxMi0wNy0y
NiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMzc5OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNzhhOWY2NjdhZGQxMzBl
NjNlM2MwNzQ2ZDRhNzAzYjQ4OTU0NmJkNy4uM2VjNzYzOWQyZGUwNDlmMzhhOGE5NTMyZjhjMDU3
MDAxYWJlNWJmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKQEAgLTQ3LDggKzQ3LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5JREJCYWNraW5nU3RvcmUoKSB7fTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5h
bWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdl
dElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVy
c2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBpbnQ2NF90JiByb3dJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFN0cmluZ1ZlcnNpb24sIGlu
dDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBzdHJpbmdWZXJzaW9uLCBjb25zdCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0
X3QmIHJvd0lkKSA9IDA7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVy
c2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pCisgICAgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICB2
aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXggODUzZmZjNzJkMjYwMzkxZmNjNDM2NjRkNTcz
ZmM1ZGFlMzAyZGMwZi4uMmE2YWZlZjM4MzE1YmU2NWIyNjYyOGU1Njg4NmRiYTMyYWM1MzY0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgK
QEAgLTU5LDcgKzU5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIGNvbnN0
IElEQktleVBhdGgmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhDb250aW51
YXRpb24oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQcmVmZXRjaChjb25z
dCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJL
ZXk+ID4mIHByaW1hcnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gPiYgdmFsdWVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoaW50NjRfdCBleGlzdGluZ1ZlcnNpb24pIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25VcGdyYWRlTmVlZGVkKGlu
dDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKaW5kZXggZTQ1MTQ3ZDVjMGIwYjYyYjMzZDNmM2NjZDYzYTYxN2ZiNWI4Yjk4ZS4u
NjM2YWM5NzRiNmFkOTI3MzMzZmZlMzkxMDg3NmY5NDk1OGJhMDg0NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKQEAgLTUyLDcgKzUyLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIDogbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQogICAgIHsKICAgICB9CisKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKK307CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdP
cGVuV2l0aFZlcnNpb25DYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ09wZW5XaXRoVmVy
c2lvbkNhbGw+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nT3Blbldp
dGhWZXJzaW9uQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IGludDY0X3QgdmVyc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVu
ZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwoY2FsbGJhY2tzLCB2ZXJzaW9uKSk7CisgICAgfQorICAg
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNr
czsgfQorICAgIGludDY0X3QgdmVyc2lvbigpIHsgcmV0dXJuIG1fdmVyc2lvbjsgfQorCitwcml2
YXRlOgorICAgIFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIGludDY0X3QgdmVyc2lvbikKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhj
YWxsYmFja3MpCisgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCisgICAgeworICAgIH0KICAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBpbnQ2NF90IG1fdmVyc2lv
bjsKIH07CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxs
IDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ0RlbGV0ZUNhbGw+IHsKQEAgLTEwNiw2ICsxMjYs
NyBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogICAgICwgbV9pZChJbnZhbGlkSWQpCiAgICAg
LCBtX25hbWUobmFtZSkKICAgICAsIG1fdmVyc2lvbigiIikKKyAgICAsIG1faW50VmVyc2lvbihJ
REJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCiAgICAgLCBtX2lkZW50aWZpZXIodW5p
cXVlSWRlbnRpZmllcikKICAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQogICAgICwgbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKGNvb3JkaW5hdG9yKQpAQCAtMTE2LDEzICsxMzcsMTMgQEAgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkJhY2tpbmdTdG8KIAogYm9vbCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50
ZXJuYWwoKQogewotICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRJREJEYXRh
YmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkKTsKLSAgICBBU1NFUlQoc3VjY2Vz
cyA9PSAobV9pZCAhPSBJbnZhbGlkSWQpKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdT
dG9yZS0+Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUsIG1fdmVyc2lvbiwgbV9pbnRWZXJz
aW9uLCBtX2lkKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHN1Y2Nlc3MgPT0gKG1faWQgIT0g
SW52YWxpZElkKSwgInN1Y2Nlc3MgPSAlcywgbV9pZCA9ICUiUFJJZDY0LCBzdWNjZXNzID8gInRy
dWUiIDogImZhbHNlIiwgbV9pZCk7CiAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgbG9hZE9i
amVjdFN0b3JlcygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIG1f
YmFja2luZ1N0b3JlLT5jcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9u
LCBtX2lkKTsKKyAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faW50VmVyc2lvbiwgbV9pZCk7CiB9CiAKIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6On5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCkKQEAgLTEzNiw3ICsx
NTcsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6YmFja2luZ1N0b3JlKCkgY29uc3QKIAogSURCRGF0YWJhc2VNZXRhZGF0YSBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0CiB7Ci0gICAgSURCRGF0YWJhc2VNZXRhZGF0
YSBtZXRhZGF0YShtX25hbWUsIG1fdmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRW
ZXJzaW9uKTsKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV92ZXJz
aW9uLCBtX2ludFZlcnNpb24pOwogICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9yZXMuZW5k
KCk7ICsraXQpCiAgICAgICAgIG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQoaXQtPmZpcnN0LCBp
dC0+c2Vjb25kLT5tZXRhZGF0YSgpKTsKICAgICByZXR1cm4gbWV0YWRhdGE7CkBAIC0yMTQsNiAr
MjM1LDEwIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbihjb25zdCBT
dHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsCiAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9B
Qk9SVF9FUlIsICJDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIHNldCB2ZXJzaW9uIHRyYW5z
YWN0aW9uIHdhcyBjcmVhdGVkIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICht
X2ludFZlcnNpb24gIT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKSB7CisgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVOS05PV05fRVJSLCBTdHJpbmc6OmZvcm1hdCgiWW91IGNhbid0IHVzZSB0
aGUgc2V0VmVyc2lvbiBmdW5jdGlvbiBpZiB5b3UndmUgYWxyZWFkeSBzZXQgdGhlIHZlcnNpb24g
dGhyb3VnaCBhbiBvcGVuIGNhbGwuICBUaGUgY3VycmVudCBpbnRlZ2VyIHZlcnNpb24gaXMgJSJQ
UklkNjQsIG1faW50VmVyc2lvbikpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBmb3Ig
KERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxs
YmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytp
dCkgewogICAgICAgICBpZiAoKml0ICE9IGRhdGFiYXNlQ2FsbGJhY2tzKQogICAgICAgICAgICAg
KCppdCktPm9uVmVyc2lvbkNoYW5nZSh2ZXJzaW9uKTsKQEAgLTI1OSw2ICsyODQsMjAgQEAgdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWYKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4odHJhbnNhY3Rpb24pKTsKIH0KIAordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2UsIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQor
eworICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlLT5pZCgpOworICAgIGludDY0X3Qg
b2xkVmVyc2lvbiA9IGRhdGFiYXNlLT5tX2ludFZlcnNpb247CisgICAgQVNTRVJUKHZlcnNpb24g
PiBvbGRWZXJzaW9uKTsKKyAgICBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uID0gdmVyc2lvbjsKKyAg
ICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJz
aW9uKGRhdGFiYXNlSWQsIGRhdGFiYXNlLT5tX2ludFZlcnNpb24pKSB7CisgICAgICAgIGNhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIp
KTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FsbGJhY2tzLT5vblVwZ3JhZGVOZWVkZWQob2xkVmVyc2lvbiwgdHJhbnNhY3Rpb24s
IGRhdGFiYXNlKTsKK30KKwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlv
blN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2Fj
dGlvbikKIHsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rp
b24gPSBwcnBUcmFuc2FjdGlvbjsKQEAgLTMyNSw2ICszNjQsMTMgQEAgdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICBpZiAobV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0
eSgpIHx8ICFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAorICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbD4gPiBwZW5kaW5n
T3BlbldpdGhWZXJzaW9uQ2FsbHM7CisgICAgbV9wZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMu
c3dhcChwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMpOworICAgIHdoaWxlICghcGVuZGluZ09w
ZW5XaXRoVmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGVuZGluZ09w
ZW5XaXRoVmVyc2lvbkNhbGw+IHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsID0gcGVuZGluZ09w
ZW5XaXRoVmVyc2lvbkNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBvcGVuQ29ubmVjdGlvbldp
dGhWZXJzaW9uKHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGlu
Z09wZW5XaXRoVmVyc2lvbkNhbGwtPnZlcnNpb24oKSk7CisgICAgfQorCiAgICAgLy8gR2l2ZW4g
dGhlIGNoZWNrIGFib3ZlLCBpdCBhcHBlYXJzIHRoYXQgY2FsbHMgY2Fubm90IGJlIHJlcXVldWVk
IGJ5CiAgICAgLy8gb3BlbkNvbm5lY3Rpb24sIGJ1dCB1c2UgYSBkaWZmZXJlbnQgcXVldWUgZm9y
IGl0ZXJhdGlvbiB0byBiZSBzYWZlLgogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+
ID4gcGVuZGluZ09wZW5DYWxsczsKQEAgLTM3Myw2ICs0MTksNzMgQEAgdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQogICAgIH0KIH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
KyAgICBBU1NFUlQoY2FsbGJhY2tzKTsKKyAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsgaXQgIT0g
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgeworICAgICAgICAvLyBOb3RlIHRo
YXQgc29tZSBjb25uZWN0aW9ucyBtaWdodCBjbG9zZSBpbiB0aGUgdmVyc2lvbmNoYW5nZSBldmVu
dAorICAgICAgICAvLyBoYW5kbGVyIGZvciBzb21lIG90aGVyIGNvbm5lY3Rpb24sIGFmdGVyIHdo
aWNoIGl0cyBvd24gdmVyc2lvbmNoYW5nZQorICAgICAgICAvLyBldmVudCBzaG91bGQgbm90IGJl
IGZpcmVkLiBUaGUgYmFja2VuZCBkb2Vzbid0IHdvcnJ5IGFib3V0IHRoaXMsIHdlCisgICAgICAg
IC8vIGp1c3QgcXVldWUgdXAgYSB2ZXJzaW9uIGNoYW5nZSBldmVudCBmb3IgZXZlcnkgY29ubmVj
dGlvbi4gVGhlCisgICAgICAgIC8vIGZyb250ZW5kIHRha2VzIGNhcmUgdG8gb25seSBkaXNwYXRj
aCB0byBvcGVuIGNvbm5lY3Rpb25zLgorICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKG1f
aW50VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbik7CisgICAgfQorICAgIC8vIFRoZSBzcGVjIGRp
Y3RhdGVzIHdlIHdhaXQgdW50aWwgYWxsIHRoZSB2ZXJzaW9uIGNoYW5nZSBldmVudHMgYXJlCisg
ICAgLy8gZGVsaXZlcmVkIGFuZCB0aGVuIGNoZWNrIG1fZGF0YWJhc2VDYWxsYmFja3MuZW1wdHko
KSBiZWZvcmUgcHJvY2VlZGluZworICAgIC8vIG9yIGZpcmluZyBhIGJsb2NrZWQgZXZlbnQsIGJ1
dCBpbnN0ZWFkIHdlIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggaG93CisgICAgLy8gdGhlIG9s
ZCBzZXRWZXJzaW9uIChpbmNvcnJlY3RseSkgZGlkIGl0OgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgIGlmIChjb25uZWN0aW9uQ291bnQo
KSA+IDApCisgICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKG1faW50VmVyc2lvbik7CisgICAg
Ly8gRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwg
Y29ubmVjdGlvbkNvdW50KCkgPiAwKSB7CisgICAgICAgIC8vIEl0J3MgYWxyZWFkeSBxdWV1ZWQu
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVj
dFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbkludGVyZmFjZSA9IHRyYW5zYWN0aW9uKG9iamVjdFN0b3JlTmFtZXMuZ2V0KCksIElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgZWMpOworICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmZyb20odHJhbnNhY3Rpb25JbnRlcmZhY2UuZ2V0KCkpOworICAgIEFTU0VSVCghZWMpOworCisg
ICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwsIGRhdGFiYXNlLCByZXF1ZXN0
ZWRWZXJzaW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpyZXNldFZlcnNpb24sIGRhdGFiYXNlLCBtX3ZlcnNpb24pKSkgeworICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgfQorfQor
Cit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24o
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgaW50NjRfdCB2ZXJzaW9uKQor
eworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAg
ICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbV9wZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMuYXBwZW5kKFBlbmRpbmdP
cGVuV2l0aFZlcnNpb25DYWxsOjpjcmVhdGUoY2FsbGJhY2tzLCB2ZXJzaW9uKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKG1faWQgPT0gSW52YWxpZElkKSB7CisgICAgICAgIGlm
IChvcGVuSW50ZXJuYWwoKSkKKyAgICAgICAgICAgIEFTU0VSVChtX2ludFZlcnNpb24gPT0gSURC
RGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodmVyc2lvbiA+IG1faW50VmVy
c2lvbikgeworICAgICAgICBtX3BlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy5hcHBlbmQoUGVu
ZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIHZlcnNpb24pKTsKKyAg
ICAgICAgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKHZlcnNpb24sIGNhbGxiYWNrcyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHZlcnNpb24gPCBtX2ludFZlcnNpb24p
IHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VkVSX0VSUiwgU3RyaW5nOjpmb3JtYXQoIlRoZSByZXF1ZXN0
ZWQgdmVyc2lvbiAoJSJQUklkNjQiKSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNpb24g
KCUiUFJJZDY0IikuIiwgdmVyc2lvbiwgbV9pbnRWZXJzaW9uKSkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEFTU0VSVCh2ZXJzaW9uID09IG1faW50VmVyc2lvbik7CisgICAgKyttX3Bl
bmRpbmdDb25uZWN0aW9uQ291bnQ7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7Cit9
CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKIHsKICAgICBpZiAobV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
KSB7CkBAIC0zOTMsMTIgKzUwNiwxNCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRl
bGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFjawogICAgICAg
ICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0
YWJhc2UobV9uYW1lKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFs
IGVycm9yLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3ZlcnNpb24gPSAiIjsK
ICAgICBtX2lkID0gSW52YWxpZElkOworICAgIG1faW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok5vSW50VmVyc2lvbjsKICAgICBtX29iamVjdFN0b3Jlcy5jbGVhcigpOwogICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwog
fQpAQCAtNDExLDEyICs1MjYsMTcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbG9z
ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MKICAgICBpZiAo
Y29ubmVjdGlvbkNvdW50KCkgPiAxKQogICAgICAgICByZXR1cm47CiAKKyAgICBUcmFuc2FjdGlv
blNldCB0cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOwogICAgIHByb2Nlc3NQZW5kaW5nQ2Fs
bHMoKTsKIAotICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkpIHsKLSAgICAgICAgVHJhbnNhY3Rp
b25TZXQgdHJhbnNhY3Rpb25zKG1fdHJhbnNhY3Rpb25zKTsKKyAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbnMuc2l6ZSgpIC0gdHJhbnNhY3Rpb25zLnNpemUoKSA8PSAxKTsKKyAgICAvLyBGSVhNRTog
SW5zdGVhZCBvZiByZWx5aW5nIG9uIHRyYW5zYWN0aW9ucy5zaXplKCksIG1ha2UgY29ubmVjdGlv
bkNvdW50CisgICAgLy8gYXdhcmUgb2YgaW4tZmxpZ2h0IHVwZ3JhZGVuZWVkZWQgZXZlbnRzIGFz
IHdlbGwgYXMgaW4tZmxpZ2h0IHN1Y2Nlc3MKKyAgICAvLyBldmVudHMuCisgICAgaWYgKCFjb25u
ZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpICYmIG1fdHJhbnNh
Y3Rpb25zLnNpemUoKSA9PSB0cmFuc2FjdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgIGZvciAoVHJh
bnNhY3Rpb25TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHJhbnNhY3Rpb25zLmJlZ2luKCk7IGl0
ICE9IHRyYW5zYWN0aW9ucy5lbmQoKTsgKytpdCkKICAgICAgICAgICAgICgqaXQpLT5hYm9ydCgp
OworCiAgICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwogCiAgICAgICAg
IG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggODA1ZWI2MTdm
YjMyMTRkMGJiYjI1NzVmMzJiZjg5NWE0NWYxMGQxZC4uZTk2OTAzYzUwODQ1NWY5Y2VjZTNlZGVk
NTQwZWVhNTQ2MjFjZTRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTcsNiArNTcsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyRnJvbnRlbmRDYWxsYmFja3MoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4pOwogICAgIHZvaWQgb3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBpbnQ2NF90IHZlcnNpb24pOwogICAgIHZvaWQgZGVsZXRl
RGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIC8vIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZQpAQCAtNzYsNiArNzcsNyBAQCBwcml2YXRlOgogICAgIElEQkRhdGFi
YXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFi
YXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwg
Y29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKIAogICAgIGJvb2wgb3BlbkludGVybmFs
KCk7CisgICAgdm9pZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oaW50NjRfdCByZXF1
ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHZvaWQgbG9hZE9i
amVjdFN0b3JlcygpOwogICAgIGludDMyX3QgY29ubmVjdGlvbkNvdW50KCk7CiAgICAgdm9pZCBw
cm9jZXNzUGVuZGluZ0NhbGxzKCk7CkBAIC04Myw2ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Pik7CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgc2V0VmVyc2lvbkludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBj
b25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgc2V0SW50VmVy
c2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKIAogICAgIC8v
IFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCiAg
ICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKQEAgLTkzLDYgKzk2LDcgQEAgcHJpdmF0ZToKICAg
ICBpbnQ2NF90IG1faWQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV92ZXJzaW9u
OworICAgIGludDY0X3QgbV9pbnRWZXJzaW9uOwogCiAgICAgU3RyaW5nIG1faWRlbnRpZmllcjsK
ICAgICAvLyBUaGlzIG1pZ2h0IG5vdCBuZWVkIHRvIGJlIGEgUmVmUHRyIHNpbmNlIHRoZSBmYWN0
b3J5J3MgbGlmZXRpbWUgaXMgdGhhdCBvZiB0aGUgcGFnZSBncm91cCwgYnV0IGl0J3MgYmV0dGVy
IHRvIGJlIGNvbnNlcnZpdGl2ZSB0aGFuIHNvcnJ5LgpAQCAtMTEzLDYgKzExNyw5IEBAIHByaXZh
dGU6CiAgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5n
T3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ09wZW5X
aXRoVmVyc2lvbkNhbGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdPcGVuV2l0aFZlcnNpb25D
YWxsPiA+IG1fcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzOworCiAgICAgY2xhc3MgUGVuZGlu
Z0RlbGV0ZUNhbGw7CiAgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVu
ZGluZ0RlbGV0ZUNhbGxzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaAppbmRleCBiM2YyNDRmNTE2YjY5ODdlYTEx
OWNiZjcwMTliN2I1NDM3NWYxMmJmLi4xNmE5ZWE2YzUwOGIwZDkyYjYxZTQ5OTdjNTQzMDEzMmE2
ZDJhY2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUNhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgfklEQkRhdGFiYXNlQ2FsbGJhY2tzKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgb25W
ZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBvblZlcnNpb25DaGFuZ2UoaW50NjRfdCBjdXJyZW50VmVyc2lvbiwgaW50NjRfdCByZXF1ZXN0
ZWRWZXJzaW9uKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCBkZmIxNDU3YTMwNmRhYTdhNTY4YzIx
YWY2ZWZhMzQ1NDZjZTNmZjQ2Li43NGY5ZmZjZDEzNDhiNjkyN2Q0ZWNkYzJhNmViMWI0MmY2MmNh
Yjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUu
aCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L1VudXNlZFBhcmFtLmg+CiAKQEAgLTE1MSwzMCArMTUyLDMwIEBAIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1Jl
ZlB0cjxTCiAKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gcHJwU2VjdXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCiB7CisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBh
IHBhcmFtZXRlciBhbmQgcGx1bWIgdGhyb3VnaCBmcm9tIGphdmFzY3JpcHQuCisgICAgaW50NjRf
dCB2ZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwogICAgIFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKICAg
ICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVy
KG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKIAorICAgIFJlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQ7CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjpp
dGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7
Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7Ci0gICAgICAgIC8v
IElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBhbnkgcGVu
ZGluZwotICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRlLgotICAgICAgICBp
dC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRv
bmUgb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7
Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIs
ICJJbnRlcm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICBpZiAoZGF0
YWJhc2VCYWNrZW5kKSB7Ci0gICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJ
ZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwotICAgICAgICBkYXRhYmFzZUJhY2tl
bmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CisgICAgaWYgKGl0ID09IG1fZGF0YWJhc2VC
YWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3Rvcnkp
OworICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5L
Tk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlQmFj
a2VuZCkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlm
aWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAg
IGRhdGFiYXNlQmFja2VuZCA9IGl0LT5zZWNvbmQ7CisgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0
YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQorICAgICAgICBkYXRhYmFzZUJhY2tlbmQtPm9w
ZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CisgICAgZWxzZQorICAgICAgICBkYXRhYmFzZUJhY2tl
bmQtPm9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24oY2FsbGJhY2tzLCB2ZXJzaW9uKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAppbmRleCAzMmUyZjY4
MTU3OTQwOWEwOTA4ZDI5YTE4NzJjMGNkYzU2Yjg5ZWY5Li4wYzQ2NDEzYWJlMGJiZWM0ODBjYTEw
ZDdlMjU5YzkzYmI2YWZjZjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtMjM0LDcgKzIz
NCw3IEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJhc2VOYW1lcyhWZWN0
b3I8U3RyaW5nPiYgZm91bmROYW1lcykKICAgICB9CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmlu
ZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQorYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5n
JiBmb3VuZFN0cmluZ1ZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYg
Zm91bmRJZCkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5
OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKIApAQCAtMjQyLDcgKzI0Miw3IEBAIGJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIFN0cmluZyYKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZm91bmRJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCBmb3VuZFZlcnNp
b24pOworICAgIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6
OmVuY29kZShmb3VuZElkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIGZvdW5k
U3RyaW5nVmVyc2lvbik7CiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0yNjQsNyArMjY0LDcgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3RGF0YWJhc2VJZChMZXZlbERC
RGF0YWJhc2UqIGRiKQogICAgIHJldHVybiBkYXRhYmFzZUlkOwogfQogCi1ib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkKQorYm9vbCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3Qm
IHJvd0lkKQogewogICAgIHJvd0lkID0gZ2V0TmV3RGF0YWJhc2VJZChtX2RiLmdldCgpKTsKICAg
ICBpZiAocm93SWQgPCAwKQpAQCAtMjc4LDYgKzI3OCwxMiBAQCBib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZl
cnNpb24pCit7CisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhY3R1YWxseSBkbyBzb21ldGhpbmcu
IChmaXJzdCBjdXQgaXMgaW4gaHR0cDovL3drYi51Zy84OTUwNSkKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZU1ldGFE
YXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKICAgICBBU1NFUlQo
bV9jdXJyZW50VHJhbnNhY3Rpb24pOwpAQCAtMzA1LDcgKzMxMSw4IEBAIGJvb2wgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKQogCiAgICAg
aW50NjRfdCBkYXRhYmFzZUlkOwogICAgIFN0cmluZyB2ZXJzaW9uOwotICAgIGlmICghZ2V0SURC
RGF0YWJhc2VNZXRhRGF0YShuYW1lLCB2ZXJzaW9uLCBkYXRhYmFzZUlkKSkgeworICAgIGludDY0
X3QgaW50VmVyc2lvbjsKKyAgICBpZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVy
c2lvbiwgaW50VmVyc2lvbiwgZGF0YWJhc2VJZCkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPnJv
bGxiYWNrKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaApp
bmRleCBjNWE5ZTJlZTMwOWU4Y2EzZmQ3ZjcwZjBhYTJiYjgwY2VjMDQ2YjJlLi42NzNjYTljMTVh
ZTNjNmRhZDQ1OTdlMTc0ZGIyN2VlYTYxZWQ5ZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC00
NSw5ICs0NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4m
IGZvdW5kTmFtZXMpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQp
OwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCk7CisgICAgdmly
dHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJp
bmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJbnRWZXJzaW9uLCBpbnQ2NF90JiBmb3Vu
ZElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBp
bnQ2NF90JiByb3dJZCk7CiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50
VmVyc2lvbik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJh
c2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFt
ZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3Vu
ZEF1dG9JbmNyZW1lbnRGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAKaW5kZXggZDllM2Q2OTdiMTk3Yzc0MDZm
NjNiYWViNDgzOTMxYjRlYWM5NTA4NS4uOTFkZjEyNmE1ZmI4ZmI2N2JjNmVhYWM1MWQ5NDdlOWRh
NDFkMDlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9y
dE9uQ29ycnVwdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURC
QWJvcnRPbkNvcnJ1cHRUZXN0LmNwcApAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZhaWxpbmdCYWNraW5nU3RvcmUpOwogICAgIH0K
LSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBpbnQ2NF90JikKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0
YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBpbnQ2NF90LCBpbnQ2
NF90JikKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IDA4NDA1
Y2UwYWI1OGM5NmZjMjk2YzNmMGY4YTE0ZmY2OWQ2NWJhMTguLmQ5NmY3YzZjYTBlYTk0MmEyNWQz
ODI0YjVlMTJjZDVjNDllN2M1MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCkBAIC0zMyw4ICszMyw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIElEQkZha2VCYWNraW5nU3RvcmUgOiBwdWJsaWMgSURCQmFja2luZ1N0
b3JlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8
U3RyaW5nPiYgZm91bmROYW1lcykgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBib29sIGdldElE
QkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lv
biwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpIE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZEludFZlcnNpb24s
IGludDY0X3QmIGZvdW5kSWQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93
SWQpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pIE9W
RVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155659</attachid>
            <date>2012-07-31 16:03:12 -0700</date>
            <delta_ts>2012-07-31 18:53:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92558-20120731160255.patch</filename>
            <type>text/plain</type>
            <size>35702</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE1Y2MzNDkxMjEyYTJi
ZWMyODUwM2FlMTI4ZWYyMWZiYmViNDYxZC4uZDYyM2IyOGFkYjM1NDliNTAzNjUwZjYyM2ZmY2Rm
ZDFhZjU0NjBiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA3LTMxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENv
cmUgdXBncmFkZW5lZWRlZCBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI1NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIHRoZSBiYWNrZW5kIHdlYmtpdCBsb2dpYyBuZWVkZWQgZm9y
IGludGVnZXIgdmVyc2lvbnMuIFRoZSByZXN0CisgICAgICAgIGlzIGluIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTUwNS4KKworICAgICAgICBJIHRyaWVkIHRvIG1h
a2UgdXNlIG9mIHRoZSBleGlzdGluZyBwcm9jZXNzUGVuZGluZ0NhbGxzIGFuZCBhZGRlZCB0d28K
KyAgICAgICAgbW9yZSBxdWV1ZXMsIHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscyBhbmQKKyAg
ICAgICAgcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb25DYWxscy4gVGhlICJzZWNvbmQg
aGFsZiIgcmVmZXJzIHRvCisgICAgICAgIGhvdyB0aGVyZSBhcmUgdHdvIGV2ZW50cyB0aGF0IG5l
ZWQgdG8gYmUgZmlyZWQgaW4gcmVzcG9uc2UgdG8gYW4KKyAgICAgICAgb3Blbi13aXRoLXZlcnNp
b24gY2FsbC4gVGhlICJzZWNvbmQgaGFsZiIgcXVldWUgaG9sZHMgdGhlIG9wZW4KKyAgICAgICAg
cmVxdWVzdHMgdGhhdCBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IHRoZSBjYWxsZXIncyB1cGdy
YWRlbmVlZGVkCisgICAgICAgIGhhbmRsZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGVy
ZSBhcmUgc28gbWFueSB0aGV5IGFyZSBpbiB0aGVpciBvd24gcGF0Y2ggLQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI1NjAKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25CbG9ja2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkNhbGxiYWNrczo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCk6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxsOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OnZlcnNpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVyc2lv
bkNhbGw6OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVu
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0
YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVy
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbnRW
ZXJzaW9uSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6dHJhbnNhY3Rpb25GaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kRXZlbnRzRmlyZWQpOgorICAgICAgICBX
aGVuIGFuIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaXMgZmlyZWQgaW4gcmVzcG9uc2UgdG8gYW4KKyAg
ICAgICAgb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0
aW9uIG11c3QgcmVjZWl2ZSBpdHMKKyAgICAgICAgY29tcGxldGUgZXZlbnQgYmVmb3JlIHByb2Nl
c3NQZW5kaW5nQ2FsbHMgZmlyZXMgYSBzdWNjZXNzIGV2ZW50IGF0CisgICAgICAgIElEQk9wZW5E
QlJlcXVlc3QuIEluIHRoZSBmdXR1cmUgdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgY2hhbmdlZAor
ICAgICAgICBpbnN0ZWFkIHRvIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkIGFuZAor
ICAgICAgICB0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCBzbyB0aGF0IHdlJ2xs
IGtub3cgdG8gZmlyZSBhCisgICAgICAgIHN1Y2Nlc3Mgb3IgZXJyb3IgZXZlbnQgYXQgSURCT3Bl
bkRCUmVxdWVzdC4gQ3VycmVudGx5LCBpbnN0ZWFkIG9mCisgICAgICAgIGZpcmluZyBlcnJvciB3
aGVuIHRoZXJlJ3MgYW4gYWJvcnQsIHdlIGRvbid0IGZpcmUgYW55dGhpbmcuCisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKToKKyAg
ICAgICAgTm93IHRoYXQgdGhpcyBpcyBjYWxsZWQgYWZ0ZXIgYSBjb25uZWN0aW9uIGlzIG9wZW5l
ZCwgd2UgdW5mb3J0dW5hdGVseQorICAgICAgICBsb3NlIHRoZSBpbnZhcmlhbnQgdGhhdCB0aGVy
ZSBpcyBvbmx5IG9uZSBleGlzdGluZyBjb25uZWN0aW9uIHdoZW4gdGhpcworICAgICAgICBpcyBj
YWxsZWQsIGJ1dCBub3RoaW5nIGluc2lkZSB0aGVyZSBhY3R1YWxseSByZWxpZWQgb24gdGhhdC4K
KyAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgc2Vjb25kSGFsZk9wZW4gY2FsbHMgb25seSBldmVy
IG5lZWQgdG8gYmUgc2VydmljZWQKKyAgICAgICAgaW4gb25lIHBsYWNlOiByaWdodCBhZnRlciBh
IHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlcywgc28KKyAgICAgICAgaXQgY291
bGQgYmUgbW92ZWQgb3V0IG9mIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpyZWdpc3RlckZyb250ZW5kQ2FsbGJhY2tzKToKKyAgICAgICAgTm93IHRoYXQg
c2V0VmVyc2lvbiBhbmQgZGVsZXRlRGF0YWJhc2UgY2FsbHMgYXJlIHF1ZXVlZCB1cCBiZWhpbmQK
KyAgICAgICAgc2Vjb25kSGFsZk9wZW4gY2FsbHMsIHdlIGhhdmUgdG8gc2VydmljZSB0aG9zZSBx
dWV1ZXMgd2hlbgorICAgICAgICBzZWNvbmRIYWxmT3BlbiBjYWxscyBjb21wbGV0ZSwgd2hpY2gg
aXMgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJ1bklu
dFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlvbldpdGhWZXJzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3NlKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNh
bGxiYWNrcy5oOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M6Om9uVmVy
c2lvbkNoYW5nZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bik6CisgICAgICAgIFRoaXMgaXMgcmVmYWN0b3JlZCBzb21lIHNvIHRoYXQgdGhlIGNhbGwgdG8g
b3BlbkNvbmVjdGlvbntXaXRoVmVyc2lvbn0KKyAgICAgICAgaGFwcGVucyBvbmNlLCBhdCB0aGUg
ZW5kLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0
YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0
ZURhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCk6CisgICAgICAgIFNl
ZSBhYm92ZSBjb21tZW50cyBhYm91dCB0cmFuc2FjdGlvbkZpbmlzaGVkQW5kRXZlbnRzRmlyZWQu
ICBJIHRyaWVkCisgICAgICAgIG1vdmluZyB0aGUgY2FsbCB0byB0cmFuc2FjdGlvbkZpbmlzaGVk
IGFmdGVyIHRoZSBldmVudHMgd2VyZSBmaXJlZCBidXQKKyAgICAgICAgdGhhdCBmYWlsZWQgc29t
ZSBhc3NlcnRzLiBCdXQgZml4aW5nIHRob3NlIGFzc2VydHMgaXMgc3RpbGwgYW4KKyAgICAgICAg
YWx0ZXJuYXRpdmUgdG8gc3BsaXR0aW5nIHVwIHRyYW5zYWN0aW9uRmluaXNoZWQgYXMgaXMgZG9u
ZSBoZXJlLgorCiAyMDEyLTA3LTI2ICBOYXlhbiBLdW1hciBLICA8bmF5YW5ra0Btb3Rvcm9sYS5j
b20+CiAKICAgICAgICAgW1dlYkdMXSBJbml0aWFsIHNpemUgb2YgY2FudmFzIGNhbiBiZSBsYXJn
ZXIgdGhhbiBNQVhfVklFV1BPUlRfRElNUy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MWQ3MDQ3NDBjN2ZhZGQ4NjE5OThkYWU4ODUzOGU2MmE3NDE1MTZlZC4uZmUxYjBjYTAwZmRkYjNi
ZjBjY2JkZTJjZWMyNjMzZTY3MjJkZTZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNiBAQAorMjAxMi0wNy0zMSAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBDb3JlIHVwZ3JhZGVuZWVkZWQgbG9naWMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNTU4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIG92ZXJy
aWRkZW4gbWV0aG9kcyB0byBtYXRjaCBuZXcgc2lnbmF0dXJlcy4KKworICAgICAgICAqIHRlc3Rz
L0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGYWlsaW5nQmFj
a2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKiB0ZXN0cy9J
REJGYWtlQmFja2luZ1N0b3JlLmg6CisKIDIwMTItMDctMjYgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxMjM3OTkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5oCmluZGV4IDc4YTlmNjY3YWRkMTMwZTYzZTNjMDc0NmQ0YTcwM2I0ODk1NDZi
ZDcuLjQ0NGYyMjM1ZjJhNDliMmJlNGU4ODgyZTJlOTdjZDFhOTgwZmU5NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC00
Nyw4ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUoKSB7fTsK
IAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3Vu
ZE5hbWVzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgU3RyaW5nJiBmb3VuZFN0cmluZ1ZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwg
aW50NjRfdCYgZm91bmRJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWZXJzaW9u
LCBjb25zdCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2
NF90IGludFZlcnNpb24pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VN
ZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXgg
ODUzZmZjNzJkMjYwMzkxZmNjNDM2NjRkNTczZmM1ZGFlMzAyZGMwZi4uMmE2YWZlZjM4MzE1YmU2
NWIyNjYyOGU1Njg4NmRiYTMyYWM1MzY0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKQEAgLTU5LDcgKzU5LDkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
LCBQYXNzUmVmUHRyPElEQktleT4sIGNvbnN0IElEQktleVBhdGgmKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIG9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IG9uU3VjY2Vzc1dpdGhQcmVmZXRjaChjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5
cywgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIHByaW1hcnlLZXlzLCBjb25zdCBWZWN0
b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgdmFsdWVzKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIG9uQmxvY2tlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoaW50
NjRfdCBleGlzdGluZ1ZlcnNpb24pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgb25VcGdyYWRlTmVlZGVkKGludDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZT4pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggZTQ1MTQ3ZDVjMGIwYjYy
YjMzZDNmM2NjZDYzYTYxN2ZiNWI4Yjk4ZS4uOTNkMjFmM2ViNGEwYjI0NGVlZmNiNjU1ZmE4MGZm
OWQyOGRhNDc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTUyLDkgKzUyLDI5IEBAIHBy
aXZhdGU6CiAgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQogICAgIHsKICAgICB9CisK
ICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07CiAKK2NsYXNzIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsIDogcHVibGljIFJl
ZkNvdW50ZWQ8UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbD4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGludDY0X3QgdmVyc2lvbikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwoY2FsbGJh
Y2tzLCB2ZXJzaW9uKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorICAgIGludDY0X3QgdmVyc2lvbigpIHsg
cmV0dXJuIG1fdmVyc2lvbjsgfQorCitwcml2YXRlOgorICAgIFBlbmRpbmdPcGVuV2l0aFZlcnNp
b25DYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGludDY0X3QgdmVyc2lv
bikKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgICAgICwgbV92ZXJzaW9u
KHZlcnNpb24pCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxi
YWNrczsKKyAgICBpbnQ2NF90IG1fdmVyc2lvbjsKK307CisKIGNsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ0Rl
bGV0ZUNhbGw+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nRGVsZXRl
Q2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCkBAIC0xMDYs
NiArMTI2LDcgQEAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG8KICAgICAsIG1faWQoSW52YWxpZElk
KQogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX3ZlcnNpb24oIiIpCisgICAgLCBtX2ludFZl
cnNpb24oSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQogICAgICwgbV9pZGVudGlm
aWVyKHVuaXF1ZUlkZW50aWZpZXIpCiAgICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKICAgICAsIG1f
dHJhbnNhY3Rpb25Db29yZGluYXRvcihjb29yZGluYXRvcikKQEAgLTExNiwxMyArMTM3LDEzIEBA
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJCYWNraW5nU3RvCiAKIGJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b3BlbkludGVybmFsKCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0
SURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUsIG1fdmVyc2lvbiwgbV9pZCk7Ci0gICAgQVNTRVJU
KHN1Y2Nlc3MgPT0gKG1faWQgIT0gSW52YWxpZElkKSk7CisgICAgYm9vbCBzdWNjZXNzID0gbV9i
YWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1f
aW50VmVyc2lvbiwgbV9pZCk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzID09ICht
X2lkICE9IEludmFsaWRJZCksICJzdWNjZXNzID0gJXMsIG1faWQgPSAlIlBSSWQ2NCwgc3VjY2Vz
cyA/ICJ0cnVlIiA6ICJmYWxzZSIsIG1faWQpOwogICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAg
IGxvYWRPYmplY3RTdG9yZXMoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJl
dHVybiBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUsIG1f
dmVyc2lvbiwgbV9pZCk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5jcmVhdGVJREJEYXRh
YmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2ludFZlcnNpb24sIG1faWQpOwogfQog
CiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp+SURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpCkBAIC0x
MzYsNyArMTU3LDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmJhY2tpbmdTdG9yZSgpIGNvbnN0CiAKIElEQkRhdGFiYXNlTWV0YWRhdGEgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6bWV0YWRhdGEoKSBjb25zdAogewotICAgIElEQkRhdGFiYXNl
TWV0YWRhdGEgbWV0YWRhdGEobV9uYW1lLCBtX3ZlcnNpb24sIElEQkRhdGFiYXNlTWV0YWRhdGE6
Ok5vSW50VmVyc2lvbik7CisgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YShtX25hbWUs
IG1fdmVyc2lvbiwgbV9pbnRWZXJzaW9uKTsKICAgICBmb3IgKE9iamVjdFN0b3JlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0U3Rv
cmVzLmVuZCgpOyArK2l0KQogICAgICAgICBtZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KGl0LT5m
aXJzdCwgaXQtPnNlY29uZC0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJuIG1ldGFkYXRhOwpAQCAt
MjE0LDYgKzIzNSwxMCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb24o
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbAogICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJREJfQUJPUlRfRVJSLCAiQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBzZXQgdmVyc2lv
biB0cmFuc2FjdGlvbiB3YXMgY3JlYXRlZCIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICBpZiAobV9pbnRWZXJzaW9uICE9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikg
eworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgU3RyaW5nOjpmb3JtYXQoIllvdSBjYW4n
dCB1c2UgdGhlIHNldFZlcnNpb24gZnVuY3Rpb24gaWYgeW91J3ZlIGFscmVhZHkgc2V0IHRoZSB2
ZXJzaW9uIHRocm91Z2ggYW4gb3BlbiBjYWxsLiAgVGhlIGN1cnJlbnQgaW50ZWdlciB2ZXJzaW9u
IGlzICUiUFJJZDY0LCBtX2ludFZlcnNpb24pKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFi
YXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5k
KCk7ICsraXQpIHsKICAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFzZUNhbGxiYWNrcykKICAgICAg
ICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UodmVyc2lvbik7CkBAIC0yNTksNiArMjg0LDIw
IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KHRyYW5zYWN0aW9uKSk7CiB9
CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50VmVyc2lvbkludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
IGRhdGFiYXNlLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2Fj
dGlvbikKK3sKKyAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS0+aWQoKTsKKyAgICBp
bnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uOworICAgIEFTU0VSVCh2
ZXJzaW9uID4gb2xkVmVyc2lvbik7CisgICAgZGF0YWJhc2UtPm1faW50VmVyc2lvbiA9IHZlcnNp
b247CisgICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNl
SW50VmVyc2lvbihkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uKSkgeworICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3Rv
cmFnZS4iKSk7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sIHRyYW5z
YWN0aW9uLCBkYXRhYmFzZSk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJh
bnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJw
VHJhbnNhY3Rpb24pCiB7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CkBAIC0yNzYsNiArMzE1LDE2IEBAIHZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuCiAgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNh
Y3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7CiAgICAgICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5nZXQo
KSA9PSBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgICAgICBt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICB9Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEV2ZW50c0Zp
cmVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24p
Cit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0g
cHJwVHJhbnNhY3Rpb247CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNh
Y3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7CisgICAgICAgIC8vIElmIHRoaXMgd2FzIGFuIG9wZW4t
d2l0aC12ZXJzaW9uIGNhbGwsIHRoZXJlIHNob3VsZCBiZSBhICJzZWNvbmQKKyAgICAgICAgLy8g
aGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcgZm9yIHVzIGluIHByb2Nlc3NQZW5kaW5nQ2FsbHMuCisg
ICAgICAgIC8vIFdoZW4gd2Ugbm8gbG9uZ2VyIHN1cHBvcnQgc2V0VmVyc2lvbiwgd2UgY2FuIGFz
c2VydCBzdWNoIGEgdGhpbmcuCiAgICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKICAgICB9
CiB9CkBAIC0yODcsNyArMzM2LDE1IEBAIGludDMyX3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Y29ubmVjdGlvbkNvdW50KCkKIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwcm9jZXNz
UGVuZGluZ0NhbGxzKCkKIHsKLSAgICBBU1NFUlQoY29ubmVjdGlvbkNvdW50KCkgPD0gMSk7Cisg
ICAgQVNTRVJUKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb25DYWxscy5zaXplKCkg
PD0gMSk7CisgICAgd2hpbGUgKCFtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbldpdGhWZXJzaW9uQ2Fs
bHMuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2Fs
bD4gcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwgPSBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbldp
dGhWZXJzaW9uQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIEFTU0VSVChwZW5kaW5nT3Blbldp
dGhWZXJzaW9uQ2FsbC0+dmVyc2lvbigpID09IG1faW50VmVyc2lvbik7CisgICAgICAgIEFTU0VS
VChtX2lkICE9IEludmFsaWRJZCk7CisgICAgICAgICsrbV9wZW5kaW5nQ29ubmVjdGlvbkNvdW50
OworICAgICAgICBwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbC0+Y2FsbGJhY2tzKCktPm9uU3Vj
Y2Vzcyh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFBlbmRpbmcgY2Fs
bHMgbWF5IGJlIHJlcXVldWVkIG9yIGFib3J0ZWQKICAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ1Nl
dFZlcnNpb25DYWxsPiA+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbHM7CkBAIC0zMjUsNiArMzgyLDEz
IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCiAg
ICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0
VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVy
c2lvbkNhbGw+ID4gcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzOworICAgIG1fcGVuZGluZ09w
ZW5XaXRoVmVyc2lvbkNhbGxzLnN3YXAocGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzKTsKKyAg
ICB3aGlsZSAoIXBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUmVmUHRyPFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsPiBwZW5kaW5nT3BlbldpdGhWZXJz
aW9uQ2FsbCA9IHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy50YWtlRmlyc3QoKTsKKyAgICAg
ICAgb3BlbkNvbm5lY3Rpb25XaXRoVmVyc2lvbihwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbC0+
Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsLT52ZXJzaW9uKCkpOworICAg
IH0KKwogICAgIC8vIEdpdmVuIHRoZSBjaGVjayBhYm92ZSwgaXQgYXBwZWFycyB0aGF0IGNhbGxz
IGNhbm5vdCBiZSByZXF1ZXVlZCBieQogICAgIC8vIG9wZW5Db25uZWN0aW9uLCBidXQgdXNlIGEg
ZGlmZmVyZW50IHF1ZXVlIGZvciBpdGVyYXRpb24gdG8gYmUgc2FmZS4KICAgICBEZXF1ZTxSZWZQ
dHI8UGVuZGluZ09wZW5DYWxsPiA+IHBlbmRpbmdPcGVuQ2FsbHM7CkBAIC0zNTYsNiArNDIwLDEw
IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVnaXN0ZXJGcm9udGVuZENhbGxiYWNr
cyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsCiAgICAgQVNTRVJUKG1fcGVuZGluZ0Nvbm5lY3Rp
b25Db3VudCk7CiAgICAgLS1tX3BlbmRpbmdDb25uZWN0aW9uQ291bnQ7CiAgICAgbV9kYXRhYmFz
ZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPihjYWxsYmFja3Mp
KTsKKyAgICAvLyBOb3cgdGhhdCB3ZSBnaXZlIG1heCBwcmlvcml0eSB0byBvcGVuIGNhbGxzIHRo
YXQgZm9sbG93IHVwZ3JhZGVuZWVkZWQKKyAgICAvLyBldmVudHMsIHNvbWV0aGluZyBoYXMgdG8g
dHJpZ2dlciB0aGUgcmVzdCBvZiB0aGUgcXVldWVzIGJlaW5nIHNlcnZpY2VkCisgICAgLy8gd2hl
biB0aG9zZSBvcGVuIGNhbGxzIGFyZSBmaW5pc2hlZC4KKyAgICBwcm9jZXNzUGVuZGluZ0NhbGxz
KCk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKQEAgLTM3Myw2ICs0NDEsNzMgQEAgdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIH0KIH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oaW50NjRfdCByZXF1ZXN0ZWRWZXJz
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKKyAgICBBU1NFUlQoY2FsbGJhY2tzKTsKKyAgICBmb3IgKERhdGFiYXNlQ2Fs
bGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVn
aW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgeworICAgICAg
ICAvLyBOb3RlIHRoYXQgc29tZSBjb25uZWN0aW9ucyBtaWdodCBjbG9zZSBpbiB0aGUgdmVyc2lv
bmNoYW5nZSBldmVudAorICAgICAgICAvLyBoYW5kbGVyIGZvciBzb21lIG90aGVyIGNvbm5lY3Rp
b24sIGFmdGVyIHdoaWNoIGl0cyBvd24gdmVyc2lvbmNoYW5nZQorICAgICAgICAvLyBldmVudCBz
aG91bGQgbm90IGJlIGZpcmVkLiBUaGUgYmFja2VuZCBkb2Vzbid0IHdvcnJ5IGFib3V0IHRoaXMs
IHdlCisgICAgICAgIC8vIGp1c3QgcXVldWUgdXAgYSB2ZXJzaW9uIGNoYW5nZSBldmVudCBmb3Ig
ZXZlcnkgY29ubmVjdGlvbi4gVGhlCisgICAgICAgIC8vIGZyb250ZW5kIHRha2VzIGNhcmUgdG8g
b25seSBkaXNwYXRjaCB0byBvcGVuIGNvbm5lY3Rpb25zLgorICAgICAgICAoKml0KS0+b25WZXJz
aW9uQ2hhbmdlKG1faW50VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbik7CisgICAgfQorICAgIC8v
IFRoZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQgdW50aWwgYWxsIHRoZSB2ZXJzaW9uIGNoYW5nZSBl
dmVudHMgYXJlCisgICAgLy8gZGVsaXZlcmVkIGFuZCB0aGVuIGNoZWNrIG1fZGF0YWJhc2VDYWxs
YmFja3MuZW1wdHkoKSBiZWZvcmUgcHJvY2VlZGluZworICAgIC8vIG9yIGZpcmluZyBhIGJsb2Nr
ZWQgZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggaG93Cisg
ICAgLy8gdGhlIG9sZCBzZXRWZXJzaW9uIChpbmNvcnJlY3RseSkgZGlkIGl0OgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgIGlmIChjb25u
ZWN0aW9uQ291bnQoKSA+IDApCisgICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKG1faW50VmVy
c2lvbik7CisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgbV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24gfHwgY29ubmVjdGlvbkNvdW50KCkgPiAwKSB7CisgICAgICAgIG1fcGVuZGluZ09w
ZW5XaXRoVmVyc2lvbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y3Jl
YXRlKGNhbGxiYWNrcywgcmVxdWVzdGVkVmVyc2lvbikpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5n
TGlzdDo6Y3JlYXRlKCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25JbnRlcmZhY2UgPSB0cmFu
c2FjdGlvbihvYmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9D
SEFOR0UsIGVjKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uSW50ZXJm
YWNlLmdldCgpKTsKKyAgICBBU1NFUlQoIWVjKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50
VmVyc2lvbkludGVybmFsLCBkYXRhYmFzZSwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCB0
cmFuc2FjdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNh
bGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVzZXRWZXJzaW9uLCBkYXRhYmFz
ZSwgbV92ZXJzaW9uKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgIH0KKyAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Bl
bldpdGhWZXJzaW9uQ2FsbHMuYXBwZW5kKFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjcmVh
dGUoY2FsbGJhY2tzLCByZXF1ZXN0ZWRWZXJzaW9uKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb25XaXRoVmVyc2lvbihQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBpbnQ2NF90IHZlcnNpb24pCit7CisgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmICghbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8
fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRp
bmdPcGVuV2l0aFZlcnNpb25DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6
OmNyZWF0ZShjYWxsYmFja3MsIHZlcnNpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAobV9pZCA9PSBJbnZhbGlkSWQpIHsKKyAgICAgICAgaWYgKG9wZW5JbnRlcm5hbCgpKQor
ICAgICAgICAgICAgQVNTRVJUKG1faW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpO
b0ludFZlcnNpb24pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05P
V05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorICAgIGlmICh2ZXJzaW9uID4gbV9pbnRWZXJzaW9uKSB7CisgICAgICAgIHJ1
bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbih2ZXJzaW9uLCBjYWxsYmFja3MpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICh2ZXJzaW9uIDwgbV9pbnRWZXJzaW9uKSB7CisgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlZFUl9FUlIsIFN0cmluZzo6Zm9ybWF0KCJUaGUgcmVxdWVzdGVkIHZlcnNp
b24gKCUiUFJJZDY0IikgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGluZyB2ZXJzaW9uICglIlBSSWQ2
NCIpLiIsIHZlcnNpb24sIG1faW50VmVyc2lvbikpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBBU1NFUlQodmVyc2lvbiA9PSBtX2ludFZlcnNpb24pOworICAgICsrbV9wZW5kaW5nQ29u
bmVjdGlvbkNvdW50OworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMpOworfQorCiB2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MpCiB7CiAgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgewpAQCAt
Mzg4LDE3ICs1MjMsMTkgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRh
YmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2sKICAgICAvLyBGSVhNRTog
T25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0
aGUKICAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0
IHVwIHRvIGZpcmUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcxMTMwCi0gICAgaWYgKCFtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmlzRW1wdHkoKSkgewor
ICAgIGlmIChjb25uZWN0aW9uQ291bnQoKSA+PSAxKSB7CiAgICAgICAgIG1fcGVuZGluZ0RlbGV0
ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcykpOwogICAg
ICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRl
RGF0YWJhc2UobV9uYW1lKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVy
bmFsIGVycm9yLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3ZlcnNpb24gPSAi
IjsKICAgICBtX2lkID0gSW52YWxpZElkOworICAgIG1faW50VmVyc2lvbiA9IElEQkRhdGFiYXNl
TWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKICAgICBtX29iamVjdFN0b3Jlcy5jbGVhcigpOwogICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkp
OwogfQpAQCAtNDExLDEyICs1NDgsMTcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
bG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MKICAgICBp
ZiAoY29ubmVjdGlvbkNvdW50KCkgPiAxKQogICAgICAgICByZXR1cm47CiAKKyAgICBUcmFuc2Fj
dGlvblNldCB0cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOwogICAgIHByb2Nlc3NQZW5kaW5n
Q2FsbHMoKTsKIAotICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkpIHsKLSAgICAgICAgVHJhbnNh
Y3Rpb25TZXQgdHJhbnNhY3Rpb25zKG1fdHJhbnNhY3Rpb25zKTsKKyAgICBBU1NFUlQobV90cmFu
c2FjdGlvbnMuc2l6ZSgpIC0gdHJhbnNhY3Rpb25zLnNpemUoKSA8PSAxKTsKKyAgICAvLyBGSVhN
RTogSW5zdGVhZCBvZiByZWx5aW5nIG9uIHRyYW5zYWN0aW9ucy5zaXplKCksIG1ha2UgY29ubmVj
dGlvbkNvdW50CisgICAgLy8gYXdhcmUgb2YgaW4tZmxpZ2h0IHVwZ3JhZGVuZWVkZWQgZXZlbnRz
IGFzIHdlbGwgYXMgaW4tZmxpZ2h0IHN1Y2Nlc3MKKyAgICAvLyBldmVudHMuCisgICAgaWYgKCFj
b25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpICYmIG1fdHJh
bnNhY3Rpb25zLnNpemUoKSA9PSB0cmFuc2FjdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgIGZvciAo
VHJhbnNhY3Rpb25TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHJhbnNhY3Rpb25zLmJlZ2luKCk7
IGl0ICE9IHRyYW5zYWN0aW9ucy5lbmQoKTsgKytpdCkKICAgICAgICAgICAgICgqaXQpLT5hYm9y
dCgpOworCiAgICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwogCiAgICAg
ICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggODA1ZWI2
MTdmYjMyMTRkMGJiYjI1NzVmMzJiZjg5NWE0NWYxMGQxZC4uMjIwZGU1MTEzM2Y3N2QxYzE0ZWNi
MzMzODkyZjJkYzZiNjBlYjgzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTcsNiArNTcsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyRnJvbnRlbmRDYWxsYmFja3MoUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogICAgIHZvaWQgb3BlbkNvbm5lY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24o
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBpbnQ2NF90IHZlcnNpb24pOwogICAgIHZvaWQgZGVs
ZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIC8vIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZQpAQCAtNzEsMTEgKzcyLDEzIEBAIHB1YmxpYzoKICAgICBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CiAgICAgdm9pZCB0cmFuc2Fj
dGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAg
dm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEV2ZW50c0ZpcmVkKFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogCiBwcml2YXRlOgogICAgIElEQkRh
dGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRh
dGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tlbmRJbXBs
KiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKIAogICAgIGJvb2wgb3BlbkludGVy
bmFsKCk7CisgICAgdm9pZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oaW50NjRfdCBy
ZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHZvaWQgbG9h
ZE9iamVjdFN0b3JlcygpOwogICAgIGludDMyX3QgY29ubmVjdGlvbkNvdW50KCk7CiAgICAgdm9p
ZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CkBAIC04Myw2ICs4Niw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPik7CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgc2V0VmVyc2lvbkludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgc2V0SW50
VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKIAogICAg
IC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3Mu
CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKQEAgLTkzLDYgKzk3LDcgQEAgcHJpdmF0ZToK
ICAgICBpbnQ2NF90IG1faWQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV92ZXJz
aW9uOworICAgIGludDY0X3QgbV9pbnRWZXJzaW9uOwogCiAgICAgU3RyaW5nIG1faWRlbnRpZmll
cjsKICAgICAvLyBUaGlzIG1pZ2h0IG5vdCBuZWVkIHRvIGJlIGEgUmVmUHRyIHNpbmNlIHRoZSBm
YWN0b3J5J3MgbGlmZXRpbWUgaXMgdGhhdCBvZiB0aGUgcGFnZSBncm91cCwgYnV0IGl0J3MgYmV0
dGVyIHRvIGJlIGNvbnNlcnZpdGl2ZSB0aGFuIHNvcnJ5LgpAQCAtMTEzLDYgKzExOCwxMCBAQCBw
cml2YXRlOgogICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKICAgICBEZXF1ZTxSZWZQdHI8UGVu
ZGluZ09wZW5DYWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKIAorICAgIGNsYXNzIFBlbmRpbmdP
cGVuV2l0aFZlcnNpb25DYWxsOworICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbldpdGhWZXJz
aW9uQ2FsbD4gPiBtX3BlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsczsKKyAgICBEZXF1ZTxSZWZQ
dHI8UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+ID4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW5X
aXRoVmVyc2lvbkNhbGxzOworCiAgICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7CiAgICAgRGVx
dWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNh
bGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VD
YWxsYmFja3MuaAppbmRleCBiM2YyNDRmNTE2YjY5ODdlYTExOWNiZjcwMTliN2I1NDM3NWYxMmJm
Li4xNmE5ZWE2YzUwOGIwZDkyYjYxZTQ5OTdjNTQzMDEzMmE2ZDJhY2FhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tz
LmgKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQ2Fs
bGJhY2tzKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0
cmluZyYgdmVyc2lvbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UoaW50
NjRfdCBjdXJyZW50VmVyc2lvbiwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcAppbmRleCBkZmIxNDU3YTMwNmRhYTdhNTY4YzIxYWY2ZWZhMzQ1NDZjZTNmZjQ2Li5i
OTUxOGQ1NDUxOGQwMTA0Yzc5NmNkMGRhN2E0NjIyYTdmMDM3MzgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5o
IgogI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAg
LTE1MSwzMCArMTUyLDMyIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5
QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTCiAKIHZvaWQgSURCRmFj
dG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwU2VjdXJp
dHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJl
Y3RvcnkpCiB7CisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhIHBhcmFtZXRlciBhbmQgcGx1bWIg
dGhyb3VnaCBmcm9tIGphdmFzY3JpcHQuCisgICAgaW50NjRfdCB2ZXJzaW9uID0gSURCRGF0YWJh
c2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVl
SWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2lu
LmdldCgpKTsKIAorICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJh
Y2tlbmQ7CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJh
c2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0
YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7Ci0gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVu
IG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBhbnkgcGVuZGluZwotICAgICAgICAvLyBzZXRW
ZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRlLgotICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVj
dGlvbihjYWxsYmFja3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6
IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQu
Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdT
dG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7Ci0gICAgaWYgKCFiYWNraW5nU3Rv
cmUpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5h
bWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0
aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICBpZiAoZGF0YWJhc2VCYWNrZW5kKSB7Ci0gICAg
ICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJh
Y2tlbmQuZ2V0KCkpOwotICAgICAgICBkYXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNh
bGxiYWNrcyk7CisgICAgaWYgKGl0ID09IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7Cisg
ICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5n
U3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworICAgICAgICBpZiAoIWJhY2tp
bmdTdG9yZSkgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBl
cnJvci4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGF0YWJh
c2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdT
dG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJ
ZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlQmFja2VuZCkKKyAgICAgICAgICAgIG1f
ZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQu
Z2V0KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJS
LCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAg
ICAgfSBlbHNlCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3Iu
IikpOworICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBpdC0+c2Vjb25kOworICAgIGlmICh2ZXJz
aW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgZGF0YWJh
c2VCYWNrZW5kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOworICAgIGVsc2UKKyAgICAgICAg
ZGF0YWJhc2VCYWNrZW5kLT5vcGVuQ29ubmVjdGlvbldpdGhWZXJzaW9uKGNhbGxiYWNrcywgdmVy
c2lvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAK
aW5kZXggMzJlMmY2ODE1Nzk0MDlhMDkwOGQyOWExODcyYzBjZGM1NmI4OWVmOS4uMGM0NjQxM2Fi
ZTBiYmVjNDgwY2ExMGQ3ZTI1OWM5M2JiNmFmY2YxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAK
QEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFi
YXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpCiAgICAgfQogfQogCi1ib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5n
JiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkKK2Jvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIFN0cmluZyYgZm91bmRTdHJpbmdWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZEludFZlcnNp
b24sIGludDY0X3QmIGZvdW5kSWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERh
dGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7CiAKQEAgLTI0Miw3ICsy
NDIsNyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmCiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgb2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6ZW5jb2RlKGZvdW5kSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9u
KSwgZm91bmRWZXJzaW9uKTsKKyAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFz
ZU1ldGFEYXRhS2V5OjplbmNvZGUoZm91bmRJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZl
cnNpb24pLCBmb3VuZFN0cmluZ1ZlcnNpb24pOwogICAgIGlmICghb2spCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMjY0LDcgKzI2NCw3IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld0RhdGFi
YXNlSWQoTGV2ZWxEQkRhdGFiYXNlKiBkYikKICAgICByZXR1cm4gZGF0YWJhc2VJZDsKIH0KIAot
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkK
K2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJz
aW9uLCBpbnQ2NF90JiByb3dJZCkKIHsKICAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9k
Yi5nZXQoKSk7CiAgICAgaWYgKHJvd0lkIDwgMCkKQEAgLTI3OCw2ICsyNzgsMTIgQEAgYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oaW50NjRfdCByb3dJZCwg
aW50NjRfdCBpbnRWZXJzaW9uKQoreworICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgYWN0dWFsbHkg
ZG8gc29tZXRoaW5nLiAoZmlyc3QgY3V0IGlzIGluIGh0dHA6Ly93a2IudWcvODk1MDUpCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7
CiAgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKQEAgLTMwNSw3ICszMTEsOCBAQCBi
b29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYg
bmFtZSkKIAogICAgIGludDY0X3QgZGF0YWJhc2VJZDsKICAgICBTdHJpbmcgdmVyc2lvbjsKLSAg
ICBpZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVyc2lvbiwgZGF0YWJhc2VJZCkp
IHsKKyAgICBpbnQ2NF90IGludFZlcnNpb247CisgICAgaWYgKCFnZXRJREJEYXRhYmFzZU1ldGFE
YXRhKG5hbWUsIHZlcnNpb24sIGludFZlcnNpb24sIGRhdGFiYXNlSWQpKSB7CiAgICAgICAgIHRy
YW5zYWN0aW9uLT5yb2xsYmFjaygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmgKaW5kZXggYzVhOWUyZWUzMDllOGNhM2ZkN2Y3MGYwYWEyYmI4MGNlYzA0NmIy
ZS4uNjczY2E5YzE1YWUzYzZkYWQ0NTk3ZTE3NGRiMjdlZWE2MWVkOWY3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5n
U3RvcmUuaApAQCAtNDUsOSArNDUsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfklEQkxldmVs
REJCYWNraW5nU3RvcmUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZl
Y3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJh
c2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2
NF90JiBmb3VuZElkKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0
YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93
SWQpOworICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwg
aW50NjRfdCYgZm91bmRJZCk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3Qg
aW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwogICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Cisg
ICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lk
LCBpbnQ2NF90IGludFZlcnNpb24pOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3Jlcyhp
bnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJp
bmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURCS2V5UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rv
cjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmNwcAppbmRleCA3MGYzMzY3YWJmYmMxYTA0YTlmZWNhMWNhYjRlNDMzMGRkNjM3MzQxLi4xYmJk
MjNiNTZiYmEwZjllNmVmMzQ0OTlkZWI4MDZiM2MwODQ3MGVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmNwcApAQCAtMjI3LDYgKzIyNyw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6Y29tbWl0KCkKICAgICBlbHNlCiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KCk7
CiAKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kRXZlbnRzRmlyZWQodGhp
cyk7CisKICAgICBtX2RhdGFiYXNlID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwCmluZGV4IGQ5ZTNkNjk3
YjE5N2M3NDA2ZjYzYmFlYjQ4MzkzMWI0ZWFjOTUwODUuLjkxZGYxMjZhNWZiOGZiNjdiYzZlYWFj
NTFkOTQ3ZTlkYTQxZDA5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGYWlsaW5nQmFja2luZ1N0b3Jl
KTsKICAgICB9Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgaW50NjRfdCYpCisgICAgdmlydHVhbCBib29sIGNy
ZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgaW50
NjRfdCwgaW50NjRfdCYpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3Jl
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApp
bmRleCAwODQwNWNlMGFiNThjOTZmYzI5NmMzZjBmOGExNGZmNjlkNjViYTE4Li41ZTIzMWE5Mjli
ZDQzNzQyYjMyNzk1YjM5NDNmYThlMjFhNmE4MjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApAQCAtMzMsOSArMzMsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCRmFrZUJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJ
REJCYWNraW5nU3RvcmUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5h
bWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYg
Zm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkgT1ZFUlJJREUg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5k
SW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgaW50NjRfdCBpbnRWZXJzaW9uLCBp
bnQ2NF90JiByb3dJZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYg
dmVyc2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXBk
YXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgdmVyc2lvbikg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBuYW1lKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAg
dmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3Rvcjxp
bnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURC
S2V5UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50
RmxhZ3MpIE9WRVJSSURFIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155701</attachid>
            <date>2012-07-31 18:53:22 -0700</date>
            <delta_ts>2012-08-01 16:06:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92558-20120731185305.patch</filename>
            <type>text/plain</type>
            <size>35889</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGNlMjE4YjAyYzNjMmNh
N2I5YTMzZDliMWM2MjFjZGE4NTFhMWU3MS4uY2U0NmFjOWYxMmY0MGE0MDEzYjFiOTJkYzAxOTRk
ZmM0NDFiYzcwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTA3LTMxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENv
cmUgdXBncmFkZW5lZWRlZCBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI1NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIHRoZSBiYWNrZW5kIHdlYmtpdCBsb2dpYyBuZWVkZWQgZm9y
IGludGVnZXIgdmVyc2lvbnMuIFRoZSByZXN0CisgICAgICAgIGlzIGluIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTUwNS4KKworICAgICAgICBJIHRyaWVkIHRvIG1h
a2UgdXNlIG9mIHRoZSBleGlzdGluZyBwcm9jZXNzUGVuZGluZ0NhbGxzIGFuZCBhZGRlZCB0d28K
KyAgICAgICAgbW9yZSBxdWV1ZXMsIHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscyBhbmQKKyAg
ICAgICAgcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb25DYWxscy4gVGhlICJzZWNvbmQg
aGFsZiIgcmVmZXJzIHRvCisgICAgICAgIGhvdyB0aGVyZSBhcmUgdHdvIGV2ZW50cyB0aGF0IG5l
ZWQgdG8gYmUgZmlyZWQgaW4gcmVzcG9uc2UgdG8gYW4KKyAgICAgICAgb3Blbi13aXRoLXZlcnNp
b24gY2FsbC4gVGhlICJzZWNvbmQgaGFsZiIgcXVldWUgaG9sZHMgdGhlIG9wZW4KKyAgICAgICAg
cmVxdWVzdHMgdGhhdCBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IHRoZSBjYWxsZXIncyB1cGdy
YWRlbmVlZGVkCisgICAgICAgIGhhbmRsZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGVy
ZSBhcmUgc28gbWFueSB0aGV5IGFyZSBpbiB0aGVpciBvd24gcGF0Y2g6CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjU2MAorCisgICAgICAgIFRob3Vn
aCB0aGlzIHBhdGNoIGRvZXNuJ3QgY2hhbmdlIGFueSBleHBlY3RlZCBiZWhhdmlvciBhbnl3YXks
IGxhY2sgb2YKKyAgICAgICAgcmVncmVzc2lvbnMgaXMgd2hhdCB3ZSdyZSBob3BpbmcgZm9yIGhl
cmUuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDoKKyAg
ICAgICAgKElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
Q2FsbGJhY2tzLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDYWxsYmFja3M6Om9uQmxvY2tlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDYWxsYmFja3M6Om9uVXBncmFkZU5lZWRlZCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbkNhbGwpOgorICAgICAgICAo
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVy
c2lvbkNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxs
Ojp2ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBl
bmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0SW50VmVyc2lvbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEV2ZW50
c0ZpcmVkKToKKyAgICAgICAgV2hlbiBhbiB1cGdyYWRlbmVlZGVkIGV2ZW50IGlzIGZpcmVkIGlu
IHJlc3BvbnNlIHRvIGFuCisgICAgICAgIG9wZW4td2l0aC12ZXJzaW9uIGNhbGwsIHRoZSB2ZXJz
aW9uIGNoYW5nZSB0cmFuc2FjdGlvbiBtdXN0IHJlY2VpdmUgaXRzCisgICAgICAgIGNvbXBsZXRl
IGV2ZW50IGJlZm9yZSBwcm9jZXNzUGVuZGluZ0NhbGxzIGZpcmVzIGEgc3VjY2VzcyBldmVudCBh
dAorICAgICAgICBJREJPcGVuREJSZXF1ZXN0LiBJbiB0aGUgZnV0dXJlIHRoaXMgc2hvdWxkIHBy
b2JhYmx5IGJlIGNoYW5nZWQKKyAgICAgICAgaW5zdGVhZCB0byB0cmFuc2FjdGlvbkZpbmlzaGVk
QW5kQWJvcnRGaXJlZCBhbmQKKyAgICAgICAgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRl
RmlyZWQgc28gdGhhdCB3ZSdsbCBrbm93IHRvIGZpcmUgYQorICAgICAgICBzdWNjZXNzIG9yIGVy
cm9yIGV2ZW50IGF0IElEQk9wZW5EQlJlcXVlc3QuIEN1cnJlbnRseSwgaW5zdGVhZCBvZgorICAg
ICAgICBmaXJpbmcgZXJyb3Igd2hlbiB0aGVyZSdzIGFuIGFib3J0LCB3ZSBkb24ndCBmaXJlIGFu
eXRoaW5nLgorCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwcm9j
ZXNzUGVuZGluZ0NhbGxzKToKKyAgICAgICAgTm93IHRoYXQgdGhpcyBpcyBjYWxsZWQgYWZ0ZXIg
YSBjb25uZWN0aW9uIGlzIG9wZW5lZCwgd2UgdW5mb3J0dW5hdGVseQorICAgICAgICBsb3NlIHRo
ZSBpbnZhcmlhbnQgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBleGlzdGluZyBjb25uZWN0aW9uIHdo
ZW4gdGhpcworICAgICAgICBpcyBjYWxsZWQsIGJ1dCBub3RoaW5nIGluc2lkZSB0aGlzIGZ1bmN0
aW9uIGFjdHVhbGx5IHJlbGllZCBvbiB0aGF0LgorICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSBz
ZWNvbmRIYWxmT3BlbiBjYWxscyBvbmx5IGV2ZXIgbmVlZCB0byBiZSBzZXJ2aWNlZAorICAgICAg
ICBpbiBvbmUgcGxhY2U6IHJpZ2h0IGFmdGVyIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24g
Y29tcGxldGVzLCBzbworICAgICAgICBpdCBjb3VsZCBiZSBtb3ZlZCBvdXQgb2YgaGVyZS4KKwor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVnaXN0ZXJGcm9udGVu
ZENhbGxiYWNrcyk6CisgICAgICAgIE5vdyB0aGF0IHNldFZlcnNpb24gYW5kIGRlbGV0ZURhdGFi
YXNlIGNhbGxzIGFyZSBxdWV1ZWQgdXAgYmVoaW5kCisgICAgICAgIHNlY29uZEhhbGZPcGVuIGNh
bGxzLCB3ZSBoYXZlIHRvIHNlcnZpY2UgdGhvc2UgcXVldWVzIHdoZW4KKyAgICAgICAgc2Vjb25k
SGFsZk9wZW4gY2FsbHMgY29tcGxldGUsIHdoaWNoIGlzIGhlcmUuICBTbyBjYWxsCisgICAgICAg
IHByb2Nlc3NQZW5kaW5nQ2FsbHMoKS4KKworICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAg
ICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUNhbGxiYWNrczo6b25WZXJzaW9uQ2hhbmdlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgVGhpcyBpcyByZWZhY3RvcmVkIHNvbWUgc28g
dGhhdCB0aGUgY2FsbCB0byBvcGVuQ29uZWN0aW9ue1dpdGhWZXJzaW9ufQorICAgICAgICBoYXBw
ZW5zIG9uY2UsIGF0IHRoZSBlbmQuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZl
cnNpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpj
b21taXQpOgorICAgICAgICBTZWUgYWJvdmUgY29tbWVudHMgYWJvdXQgdHJhbnNhY3Rpb25GaW5p
c2hlZEFuZEV2ZW50c0ZpcmVkLiBJIHRyaWVkCisgICAgICAgIG1vdmluZyB0aGUgY2FsbCB0byB0
cmFuc2FjdGlvbkZpbmlzaGVkIGFmdGVyIHRoZSBldmVudHMgd2VyZSBmaXJlZCBidXQKKyAgICAg
ICAgdGhhdCBmYWlsZWQgc29tZSBhc3NlcnRzLiBCdXQgY2hhbmdpbmcgdGhvc2UgYXNzZXJ0cyBp
cyBzdGlsbCBhbgorICAgICAgICBhbHRlcm5hdGl2ZSB0byBzcGxpdHRpbmcgdXAgdHJhbnNhY3Rp
b25GaW5pc2hlZCBhcyBpcyBkb25lIGhlcmUuCisKIDIwMTItMDctMzEgIFJhdWwgSHVkZWEgIDxy
aHVkZWFAYWRvYmUuY29tPgogCiAgICAgICAgIEluc3BlY3RvciBjcmFzaGVzIHdoZW4gdHJ5aW5n
IHRvIGluc3BlY3QgYSBwYWdlIHdpdGggQ1NTIHJlZ2lvbiBzdHlsaW5nCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDVkMDc4MTdmMGMxZDJiZDliM2E1MGE4MTczODg3NzZmZmI5MmEzNTMu
LmQwZmE1NjI2ZWY5NzhiYTllYTZlNDM0MWRkZmZkZWViZjEzYTlkNDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDctMzEgIERhdmlkIEdyb2dhbiAg
PGRncm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogQ29yZSB1cGdyYWRl
bmVlZGVkIGxvZ2ljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MjU1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0ZSBvdmVycmlkZGVuIG1ldGhvZHMgdG8gbWF0Y2ggbmV3IHNpZ25hdHVyZXMuCisK
KyAgICAgICAgKiB0ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmFpbGluZ0JhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6Cisg
ICAgICAgICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgorCiAyMDEyLTA3LTMxICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMTI0MTc5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAppbmRleCBmOGRlNjgyMDI3ZmMyNTNmNzdmYTU1
OTk0YzFlYjBlYmZjMzA0MTU2Li5kOWM1MWM0MzUyM2I0NjMyODczOGI0NWIxNmIzMzU2NjlhZmYz
OWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaApAQCAtNDcsOCArNDcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFj
a2luZ1N0b3JlKCkge307CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0
b3I8U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGlu
dDY0X3QmIGZvdW5kSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRf
dCYgcm93SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRTdHJpbmdWZXJzaW9uLCBpbnQ2NF90JiBm
b3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nVmVyc2lvbiwgY29uc3QgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJ
ZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oaW50
NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHVw
ZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJz
aW9uKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYg
bmFtZSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNh
bGxiYWNrcy5oCmluZGV4IDg1M2ZmYzcyZDI2MDM5MWZjYzQzNjY0ZDU3M2ZjNWRhZTMwMmRjMGYu
LjJhNmFmZWYzODMxNWJlNjViMjY2MjhlNTY4ODZkYmEzMmFjNTM2NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCkBAIC01OSw3ICs1OSw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBjb25zdCBJREJLZXlQYXRoJikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoUHJlZmV0Y2goY29uc3QgVmVjdG9yPFJlZlB0
cjxJREJLZXk+ID4mIGtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiBwcmltYXJ5
S2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZhbHVl
cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIG9uQmxvY2tlZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgb25CbG9ja2VkKGludDY0X3QgZXhpc3RpbmdWZXJzaW9uKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZChpbnQ2NF90IG9sZFZlcnNp
b24sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4
IGU0NTE0N2Q1YzBiMGI2MmIzM2QzZjNjY2Q2M2E2MTdmYjViOGI5OGUuLjkzZDIxZjNlYjRhMGIy
NDRlZWZjYjY1NWZhODBmZjlkMjhkYTQ3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC01
Miw5ICs1MiwyOSBAQCBwcml2YXRlOgogICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
ICAgICB7CiAgICAgfQorCiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9
OwogCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9u
Q2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBpbnQ2NF90IHZlcnNp
b24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdPcGVuV2l0aFZl
cnNpb25DYWxsKGNhbGxiYWNrcywgdmVyc2lvbikpOworICAgIH0KKyAgICBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KKyAgICBpbnQ2
NF90IHZlcnNpb24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0KKworcHJpdmF0ZToKKyAgICBQZW5k
aW5nT3BlbldpdGhWZXJzaW9uQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBpbnQ2NF90IHZlcnNpb24pCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAg
ICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7CisgICAgaW50NjRfdCBtX3ZlcnNpb247Cit9OworCiBjbGFz
cyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6IHB1YmxpYyBSZWZD
b3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQpAQCAtMTA2LDYgKzEyNiw3IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRh
dGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvCiAgICAg
LCBtX2lkKEludmFsaWRJZCkKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV92ZXJzaW9uKCIi
KQorICAgICwgbV9pbnRWZXJzaW9uKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikK
ICAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVyKQogICAgICwgbV9mYWN0b3J5KGZh
Y3RvcnkpCiAgICAgLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IoY29vcmRpbmF0b3IpCkBAIC0x
MTYsMTMgKzEzNywxMyBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogCiBib29sIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbCgpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gbV9i
YWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1f
aWQpOwotICAgIEFTU0VSVChzdWNjZXNzID09IChtX2lkICE9IEludmFsaWRJZCkpOworICAgIGJv
b2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFt
ZSwgbV92ZXJzaW9uLCBtX2ludFZlcnNpb24sIG1faWQpOworICAgIEFTU0VSVF9XSVRIX01FU1NB
R0Uoc3VjY2VzcyA9PSAobV9pZCAhPSBJbnZhbGlkSWQpLCAic3VjY2VzcyA9ICVzLCBtX2lkID0g
JSJQUklkNjQsIHN1Y2Nlc3MgPyAidHJ1ZSIgOiAiZmFsc2UiLCBtX2lkKTsKICAgICBpZiAoc3Vj
Y2VzcykgewogICAgICAgICBsb2FkT2JqZWN0U3RvcmVzKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOworICAgIHJldHVybiBtX2JhY2tpbmdTdG9y
ZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUsIG1fdmVyc2lvbiwgbV9pbnRWZXJz
aW9uLCBtX2lkKTsKIH0KIAogSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6fklEQkRhdGFiYXNlQmFj
a2VuZEltcGwoKQpAQCAtMTM2LDcgKzE1Nyw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAogCiBJREJEYXRh
YmFzZU1ldGFkYXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsK
LSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBJREJE
YXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pOworICAgIElEQkRhdGFiYXNlTWV0YWRhdGEg
bWV0YWRhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faW50VmVyc2lvbik7CiAgICAgZm9yIChPYmpl
Y3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5iZWdpbigpOyBp
dCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKICAgICAgICAgbWV0YWRhdGEub2JqZWN0
U3RvcmVzLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQtPm1ldGFkYXRhKCkpOwogICAgIHJldHVy
biBtZXRhZGF0YTsKQEAgLTIxNCw2ICsyMzUsMTAgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwK
ICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SURCX0FCT1JUX0VSUiwgIkNvbm5lY3Rpb24gd2FzIGNsb3NlZCBi
ZWZvcmUgc2V0IHZlcnNpb24gdHJhbnNhY3Rpb24gd2FzIGNyZWF0ZWQiKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgaWYgKG1faW50VmVyc2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRh
OjpOb0ludFZlcnNpb24pIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsIFN0cmluZzo6
Zm9ybWF0KCJZb3UgY2FuJ3QgdXNlIHRoZSBzZXRWZXJzaW9uIGZ1bmN0aW9uIGlmIHlvdSd2ZSBh
bHJlYWR5IHNldCB0aGUgdmVyc2lvbiB0aHJvdWdoIGFuIG9wZW4gY2FsbC4gIFRoZSBjdXJyZW50
IGludGVnZXIgdmVyc2lvbiBpcyAlIlBSSWQ2NCwgbV9pbnRWZXJzaW9uKSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNl
Q2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VD
YWxsYmFja3MpCiAgICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOwpA
QCAtMjU5LDYgKzI4NCwyMCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNp
b25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZgogICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPih0
cmFuc2FjdGlvbikpOwogfQogCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEludFZl
cnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0YWJh
c2UtPmlkKCk7CisgICAgaW50NjRfdCBvbGRWZXJzaW9uID0gZGF0YWJhc2UtPm1faW50VmVyc2lv
bjsKKyAgICBBU1NFUlQodmVyc2lvbiA+IG9sZFZlcnNpb24pOworICAgIGRhdGFiYXNlLT5tX2lu
dFZlcnNpb24gPSB2ZXJzaW9uOworICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51
cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oZGF0YWJhc2VJZCwgZGF0YWJhc2UtPm1faW50VmVy
c2lvbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRh
dGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChv
bGRWZXJzaW9uLCB0cmFuc2FjdGlvbiwgZGF0YWJhc2UpOworfQorCiB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQogewogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwpAQCAtMjc2LDYgKzMx
NSwxNiBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWQo
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbgogICAgIGlmICh0cmFuc2FjdGlvbi0+bW9k
ZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewogICAgICAgICBBU1NFUlQo
dHJhbnNhY3Rpb24uZ2V0KCkgPT0gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdl
dCgpKTsKICAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmNsZWFyKCk7
CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmlu
aXNoZWRBbmRFdmVudHNGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHBycFRyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9k
ZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAgICAvLyBJZiB0
aGlzIHdhcyBhbiBvcGVuLXdpdGgtdmVyc2lvbiBjYWxsLCB0aGVyZSBzaG91bGQgYmUgYSAic2Vj
b25kCisgICAgICAgIC8vIGhhbGYiIG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1cyBpbiBwcm9jZXNz
UGVuZGluZ0NhbGxzLgorICAgICAgICAvLyBXaGVuIHdlIG5vIGxvbmdlciBzdXBwb3J0IHNldFZl
cnNpb24sIHdlIGNhbiBhc3NlcnQgc3VjaCBhIHRoaW5nLgogICAgICAgICBwcm9jZXNzUGVuZGlu
Z0NhbGxzKCk7CiAgICAgfQogfQpAQCAtMjg3LDcgKzMzNiwxNSBAQCBpbnQzMl90IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNvbm5lY3Rpb25Db3VudCgpCiAKIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCiB7Ci0gICAgQVNTRVJUKGNvbm5lY3Rpb25D
b3VudCgpIDw9IDEpOworICAgIEFTU0VSVChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbldpdGhWZXJz
aW9uQ2FsbHMuc2l6ZSgpIDw9IDEpOworICAgIHdoaWxlICghbV9wZW5kaW5nU2Vjb25kSGFsZk9w
ZW5XaXRoVmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGVuZGluZ09w
ZW5XaXRoVmVyc2lvbkNhbGw+IHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsID0gbV9wZW5kaW5n
U2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbkNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBBU1NF
UlQocGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwtPnZlcnNpb24oKSA9PSBtX2ludFZlcnNpb24p
OworICAgICAgICBBU1NFUlQobV9pZCAhPSBJbnZhbGlkSWQpOworICAgICAgICArK21fcGVuZGlu
Z0Nvbm5lY3Rpb25Db3VudDsKKyAgICAgICAgcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwtPmNh
bGxiYWNrcygpLT5vblN1Y2Nlc3ModGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAg
ICAvLyBQZW5kaW5nIGNhbGxzIG1heSBiZSByZXF1ZXVlZCBvciBhYm9ydGVkCiAgICAgRGVxdWU8
UmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGxzOwpA
QCAtMzI1LDYgKzM4MiwxMyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQ
ZW5kaW5nQ2FsbHMoKQogICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24g
fHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ0RlbGV0
ZUNhbGxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgRGVxdWU8UmVmUHRyPFBl
bmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsPiA+IHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsczsK
KyAgICBtX3BlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy5zd2FwKHBlbmRpbmdPcGVuV2l0aFZl
cnNpb25DYWxscyk7CisgICAgd2hpbGUgKCFwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMuaXNF
bXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbD4gcGVu
ZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwgPSBwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMudGFr
ZUZpcnN0KCk7CisgICAgICAgIG9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24ocGVuZGluZ09wZW5X
aXRoVmVyc2lvbkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbC0+
dmVyc2lvbigpKTsKKyAgICB9CisKICAgICAvLyBHaXZlbiB0aGUgY2hlY2sgYWJvdmUsIGl0IGFw
cGVhcnMgdGhhdCBjYWxscyBjYW5ub3QgYmUgcmVxdWV1ZWQgYnkKICAgICAvLyBvcGVuQ29ubmVj
dGlvbiwgYnV0IHVzZSBhIGRpZmZlcmVudCBxdWV1ZSBmb3IgaXRlcmF0aW9uIHRvIGJlIHNhZmUu
CiAgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gPiBwZW5kaW5nT3BlbkNhbGxzOwpA
QCAtMzU2LDYgKzQyMCwxMCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlZ2lzdGVy
RnJvbnRlbmRDYWxsYmFja3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbAogICAgIEFTU0VSVCht
X3BlbmRpbmdDb25uZWN0aW9uQ291bnQpOwogICAgIC0tbV9wZW5kaW5nQ29ubmVjdGlvbkNvdW50
OwogICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4oY2FsbGJhY2tzKSk7CisgICAgLy8gTm93IHRoYXQgd2UgZ2l2ZSBtYXggcHJpb3JpdHkg
dG8gb3BlbiBjYWxscyB0aGF0IGZvbGxvdyB1cGdyYWRlbmVlZGVkCisgICAgLy8gZXZlbnRzLCBz
b21ldGhpbmcgaGFzIHRvIHRyaWdnZXIgdGhlIHJlc3Qgb2YgdGhlIHF1ZXVlcyBiZWluZyBzZXJ2
aWNlZAorICAgIC8vIHdoZW4gdGhvc2Ugb3BlbiBjYWxscyBhcmUgZmluaXNoZWQuCisgICAgcHJv
Y2Vzc1BlbmRpbmdDYWxscygpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCkBAIC0zNzMs
NiArNDQxLDczIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24o
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB9CiB9CiAKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGludDY0
X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cykKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgQVNTRVJUKGNhbGxiYWNrcyk7CisgICAg
Zm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNl
Q2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHNvbWUgY29ubmVjdGlvbnMgbWlnaHQgY2xv
c2UgaW4gdGhlIHZlcnNpb25jaGFuZ2UgZXZlbnQKKyAgICAgICAgLy8gaGFuZGxlciBmb3Igc29t
ZSBvdGhlciBjb25uZWN0aW9uLCBhZnRlciB3aGljaCBpdHMgb3duIHZlcnNpb25jaGFuZ2UKKyAg
ICAgICAgLy8gZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZC4gVGhlIGJhY2tlbmQgZG9lc24ndCB3
b3JyeSBhYm91dCB0aGlzLCB3ZQorICAgICAgICAvLyBqdXN0IHF1ZXVlIHVwIGEgdmVyc2lvbiBj
aGFuZ2UgZXZlbnQgZm9yIGV2ZXJ5IGNvbm5lY3Rpb24uIFRoZQorICAgICAgICAvLyBmcm9udGVu
ZCB0YWtlcyBjYXJlIHRvIG9ubHkgZGlzcGF0Y2ggdG8gb3BlbiBjb25uZWN0aW9ucy4KKyAgICAg
ICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX2ludFZlcnNpb24sIHJlcXVlc3RlZFZlcnNpb24p
OworICAgIH0KKyAgICAvLyBUaGUgc3BlYyBkaWN0YXRlcyB3ZSB3YWl0IHVudGlsIGFsbCB0aGUg
dmVyc2lvbiBjaGFuZ2UgZXZlbnRzIGFyZQorICAgIC8vIGRlbGl2ZXJlZCBhbmQgdGhlbiBjaGVj
ayBtX2RhdGFiYXNlQ2FsbGJhY2tzLmVtcHR5KCkgYmVmb3JlIHByb2NlZWRpbmcKKyAgICAvLyBv
ciBmaXJpbmcgYSBibG9ja2VkIGV2ZW50LCBidXQgaW5zdGVhZCB3ZSBzaG91bGQgYmUgY29uc2lz
dGVudCB3aXRoIGhvdworICAgIC8vIHRoZSBvbGQgc2V0VmVyc2lvbiAoaW5jb3JyZWN0bHkpIGRp
ZCBpdDoKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEx
MzAKKyAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAwKQorICAgICAgICBjYWxsYmFja3MtPm9u
QmxvY2tlZChtX2ludFZlcnNpb24pOworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0byB0
ZXN0IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi4KKyAgICBpZiAobV9ydW5uaW5n
VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8IGNvbm5lY3Rpb25Db3VudCgpID4gMCkgeworICAg
ICAgICBtX3BlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5XaXRo
VmVyc2lvbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIHJlcXVlc3RlZFZlcnNpb24pKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVO
YW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
SW50ZXJmYWNlID0gdHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVOYW1lcy5nZXQoKSwgSURCVHJhbnNh
Y3Rpb246OlZFUlNJT05fQ0hBTkdFLCBlYyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0
cmFuc2FjdGlvbkludGVyZmFjZS5nZXQoKSk7CisgICAgQVNTRVJUKCFlYyk7CisKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOworICAgIGlmICghdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnNldEludFZlcnNpb25JbnRlcm5hbCwgZGF0YWJhc2UsIHJlcXVlc3RlZFZlcnNp
b24sIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlc2V0
VmVyc2lvbiwgZGF0YWJhc2UsIG1fdmVyc2lvbikpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICB9CisgICAgbV9wZW5k
aW5nU2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbldpdGhW
ZXJzaW9uQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywgcmVxdWVzdGVkVmVyc2lvbikpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgaW50NjRfdCB2ZXJzaW9uKQorewor
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBp
ZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgbV9wZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMuYXBwZW5kKFBlbmRpbmdPcGVu
V2l0aFZlcnNpb25DYWxsOjpjcmVhdGUoY2FsbGJhY2tzLCB2ZXJzaW9uKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKG1faWQgPT0gSW52YWxpZElkKSB7CisgICAgICAgIGlmIChv
cGVuSW50ZXJuYWwoKSkKKyAgICAgICAgICAgIEFTU0VSVChtX2ludFZlcnNpb24gPT0gSURCRGF0
YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodmVyc2lvbiA+IG1faW50VmVyc2lv
bikgeworICAgICAgICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24odmVyc2lvbiwgY2Fs
bGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodmVyc2lvbiA8IG1faW50
VmVyc2lvbikgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpWRVJfRVJSLCBTdHJpbmc6OmZvcm1hdCgiVGhl
IHJlcXVlc3RlZCB2ZXJzaW9uICglIlBSSWQ2NCIpIGlzIGxlc3MgdGhhbiB0aGUgZXhpc3Rpbmcg
dmVyc2lvbiAoJSJQUklkNjQiKS4iLCB2ZXJzaW9uLCBtX2ludFZlcnNpb24pKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKHZlcnNpb24gPT0gbV9pbnRWZXJzaW9uKTsKKyAg
ICArK21fcGVuZGluZ0Nvbm5lY3Rpb25Db3VudDsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0
aGlzKTsKK30KKwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQogewogICAgIGlmIChtX3J1bm5p
bmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5p
c0VtcHR5KCkpIHsKQEAgLTM4OCwxNyArNTIzLDE5IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
CiAgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29u
bmVjdGlvbnMgYWZ0ZXIgdGhlCiAgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2
ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAotICAgIGlmICghbV9kYXRhYmFzZUNhbGxiYWNrc1Nl
dC5pc0VtcHR5KCkpIHsKKyAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPj0gMSkgewogICAgICAg
ICBtX3BlbmRpbmdEZWxldGVDYWxscy5hcHBlbmQoUGVuZGluZ0RlbGV0ZUNhbGw6OmNyZWF0ZShj
YWxsYmFja3MpKTsKICAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIGlmICghbV9iYWNr
aW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbmFtZSkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5L
Tk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgbV92ZXJzaW9uID0gIiI7CiAgICAgbV9pZCA9IEludmFsaWRJZDsKKyAgICBtX2ludFZlcnNp
b24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb247CiAgICAgbV9vYmplY3RTdG9y
ZXMuY2xlYXIoKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6Om51bGxWYWx1ZSgpKTsKIH0KQEAgLTQxMSwxMiArNTQ4LDE3IEBAIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzCiAgICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpID4gMSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgVHJhbnNhY3Rpb25TZXQgdHJhbnNhY3Rpb25zKG1fdHJhbnNhY3Rpb25zKTsKICAg
ICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CiAKLSAgICBpZiAoIWNvbm5lY3Rpb25Db3VudCgpKSB7
Ci0gICAgICAgIFRyYW5zYWN0aW9uU2V0IHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7Cisg
ICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLnNpemUoKSAtIHRyYW5zYWN0aW9ucy5zaXplKCkgPD0g
MSk7CisgICAgLy8gRklYTUU6IEluc3RlYWQgb2YgcmVseWluZyBvbiB0cmFuc2FjdGlvbnMuc2l6
ZSgpLCBtYWtlIGNvbm5lY3Rpb25Db3VudAorICAgIC8vIGF3YXJlIG9mIGluLWZsaWdodCB1cGdy
YWRlbmVlZGVkIGV2ZW50cyBhcyB3ZWxsIGFzIGluLWZsaWdodCBzdWNjZXNzCisgICAgLy8gZXZl
bnRzLgorICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkgJiYgIW1fcGVuZGluZ0RlbGV0ZUNhbGxz
LnNpemUoKSAmJiBtX3RyYW5zYWN0aW9ucy5zaXplKCkgPT0gdHJhbnNhY3Rpb25zLnNpemUoKSkg
ewogICAgICAgICBmb3IgKFRyYW5zYWN0aW9uU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRyYW5z
YWN0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2FjdGlvbnMuZW5kKCk7ICsraXQpCiAgICAgICAg
ICAgICAoKml0KS0+YWJvcnQoKTsKKwogICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNF
bXB0eSgpKTsKIAogICAgICAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oCmluZGV4IDgwNWViNjE3ZmIzMjE0ZDBiYmIyNTc1ZjMyYmY4OTVhNDVmMTBkMWQuLjIyMGRl
NTExMzNmNzdkMWMxNGVjYjMzMzg5MmYyZGM2YjYwZWI4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
QEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWdpc3RlckZyb250ZW5kQ2Fs
bGJhY2tzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKICAgICB2b2lkIG9wZW5D
b25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBvcGVuQ29ubmVj
dGlvbldpdGhWZXJzaW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgaW50NjRfdCB2ZXJzaW9u
KTsKICAgICB2b2lkIGRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAK
ICAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UKQEAgLTcxLDExICs3MiwxMyBAQCBw
dWJsaWM6CiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQog
ICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4pOwogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRF
dmVudHNGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKIAogcHJp
dmF0ZToKICAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
QmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciosIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7CiAKICAg
ICBib29sIG9wZW5JbnRlcm5hbCgpOworICAgIHZvaWQgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
KTsKICAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMoKTsKICAgICBpbnQzMl90IGNvbm5lY3Rpb25D
b3VudCgpOwogICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwpAQCAtODMsNiArODYsNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHNldFZl
cnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIHN0
YXRpYyB2b2lkIHNldEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPik7CiAKICAgICAvLyBUaGVzZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0
aW9uIGFib3J0IHRhc2tzLgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU9iamVjdFN0b3JlRnJvbU1h
cChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7CkBAIC05Myw2ICs5
Nyw3IEBAIHByaXZhdGU6CiAgICAgaW50NjRfdCBtX2lkOwogICAgIFN0cmluZyBtX25hbWU7CiAg
ICAgU3RyaW5nIG1fdmVyc2lvbjsKKyAgICBpbnQ2NF90IG1faW50VmVyc2lvbjsKIAogICAgIFN0
cmluZyBtX2lkZW50aWZpZXI7CiAgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJl
ZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3Jv
dXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KQEAgLTEx
Myw2ICsxMTgsMTAgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBQZW5kaW5nT3BlbkNhbGw7CiAgICAg
RGVxdWU8UmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gPiBtX3BlbmRpbmdPcGVuQ2FsbHM7CiAKKyAg
ICBjbGFzcyBQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDsKKyAgICBEZXF1ZTxSZWZQdHI8UGVu
ZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+ID4gbV9wZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHM7
CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsPiA+IG1fcGVuZGlu
Z1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb25DYWxsczsKKwogICAgIGNsYXNzIFBlbmRpbmdEZWxl
dGVDYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBtX3BlbmRpbmdE
ZWxldGVDYWxsczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKaW5kZXggYjNmMjQ0ZjUxNmI2OTg3ZWExMTljYmY3
MDE5YjdiNTQzNzVmMTJiZi4uMTZhOWVhNmM1MDhiMGQ5MmI2MWU0OTk3YzU0MzAxMzJhNmQyYWNh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VDYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUNhbGxiYWNrcy5oCkBAIC0zOCw2ICszOCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5JREJEYXRhYmFzZUNhbGxiYWNrcygpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIG9uVmVyc2lv
bkNoYW5nZShjb25zdCBTdHJpbmcmIHZlcnNpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25W
ZXJzaW9uQ2hhbmdlKGludDY0X3QgY3VycmVudFZlcnNpb24sIGludDY0X3QgcmVxdWVzdGVkVmVy
c2lvbikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggZGZiMTQ1N2EzMDZkYWE3YTU2OGMyMWFmNmVm
YTM0NTQ2Y2UzZmY0Ni4uYjk1MThkNTQ1MThkMDEwNGM3OTZjZDBkYTdhNDYyMmE3ZjAzNzM4MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSURCRGF0
YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgogCkBAIC0xNTEsMzAgKzE1MiwzMiBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8
UwogCiB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogeworICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgYSBwYXJh
bWV0ZXIgYW5kIHBsdW1iIHRocm91Z2ggZnJvbSBqYXZhc2NyaXB0LgorICAgIGludDY0X3QgdmVy
c2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKICAgICBSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0gcHJwU2VjdXJpdHlPcmlnaW47CiAgICAgY29u
c3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihuYW1l
LCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4gZGF0YWJhc2VCYWNrZW5kOwogICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOwotICAg
IGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewotICAgICAgICAvLyBJZiBp
dCdzIGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBlbmRpbmcK
LSAgICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KLSAgICAgICAgaXQtPnNl
Y29uZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9u
IGFub3RoZXIgdGhyZWFkLgotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotICAg
IGlmICghYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50
ZXJuYWwgZXJyb3IuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29y
ZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGRhdGFiYXNl
QmFja2VuZCkgewotICAgICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRp
ZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKLSAgICAgICAgZGF0YWJhc2VCYWNrZW5kLT5v
cGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOworICAgIGlmIChpdCA9PSBtX2RhdGFiYXNlQmFja2Vu
ZE1hcC5lbmQoKSkgeworICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKKyAg
ICAgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05f
RVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQo
KSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgICAgIGlmIChkYXRhYmFzZUJhY2tlbmQp
CisgICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwg
ZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwg
IkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gaXQtPnNlY29u
ZDsKKyAgICBpZiAodmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24p
CisgICAgICAgIGRhdGFiYXNlQmFja2VuZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKKyAg
ICBlbHNlCisgICAgICAgIGRhdGFiYXNlQmFja2VuZC0+b3BlbkNvbm5lY3Rpb25XaXRoVmVyc2lv
bihjYWxsYmFja3MsIHZlcnNpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuY3BwCmluZGV4IDA1MTNjMzUzM2ZjYWIwZmY4NTJkYzBhOTEzNDQ1N2VjZjM2
Mjk3ZjMuLmU4OTg3MDI2Zjc5MDZmM2EzYTlmOTI0MTc0N2U1NDJiMmI4OWYyMWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuY3BwCkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKQogICAg
IH0KIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFE
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZv
dW5kSWQpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kU3RyaW5nVmVyc2lvbiwgaW50NjRf
dCYgZm91bmRJbnRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQogewogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUp
OwogCkBAIC0yNDIsNyArMjQyLDcgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJgogICAgIGlmICgh
b2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0
KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShmb3VuZElkLCBEYXRhYmFzZU1ldGFEYXRh
S2V5OjpVc2VyVmVyc2lvbiksIGZvdW5kVmVyc2lvbik7CisgICAgb2sgPSBnZXRTdHJpbmcobV9k
Yi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGZvdW5kSWQsIERhdGFiYXNlTWV0
YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgZm91bmRTdHJpbmdWZXJzaW9uKTsKICAgICBpZiAoIW9r
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI2NCw3ICsyNjQsNyBAQCBzdGF0aWMgaW50
NjRfdCBnZXROZXdEYXRhYmFzZUlkKExldmVsREJEYXRhYmFzZSogZGIpCiAgICAgcmV0dXJuIGRh
dGFiYXNlSWQ7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0
YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwg
aW50NjRfdCYgcm93SWQpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRh
dGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24s
IGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpCiB7CiAgICAgcm93SWQgPSBnZXRO
ZXdEYXRhYmFzZUlkKG1fZGIuZ2V0KCkpOwogICAgIGlmIChyb3dJZCA8IDApCkBAIC0yNzgsNiAr
Mjc4LDEyIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9u
KGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikKK3sKKyAgICAvLyBGSVhNRTogTWFr
ZSB0aGlzIGFjdHVhbGx5IGRvIHNvbWV0aGluZy4gKGZpcnN0IGN1dCBpcyBpbiBodHRwOi8vd2ti
LnVnLzg5NTA1KQorICAgIHJldHVybiB0cnVlOworfQorCiBib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKQogewogICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CkBAIC0z
MDUsNyArMzExLDggQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFz
ZShjb25zdCBTdHJpbmcmIG5hbWUpCiAKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7CiAgICAgU3Ry
aW5nIHZlcnNpb247Ci0gICAgaWYgKCFnZXRJREJEYXRhYmFzZU1ldGFEYXRhKG5hbWUsIHZlcnNp
b24sIGRhdGFiYXNlSWQpKSB7CisgICAgaW50NjRfdCBpbnRWZXJzaW9uOworICAgIGlmICghZ2V0
SURCRGF0YWJhc2VNZXRhRGF0YShuYW1lLCB2ZXJzaW9uLCBpbnRWZXJzaW9uLCBkYXRhYmFzZUlk
KSkgewogICAgICAgICB0cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDBiZTkzNGZmZGE5YmNmODA5MWQ1MzQx
MGE2YWJjYzgwMGY1OTBkMzYuLjQ3OWVmZWNjMDVhYmIxNjA4MzMxNTJiMjI4ZWNlNmVlNzc2NjM5
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmgKQEAgLTQ1LDkgKzQ1LDEwIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5JREJMZXZlbERCQmFja2luZ1N0b3JlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0
RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcyk7Ci0gICAgdmlydHVhbCBi
b29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZv
dW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlE
QkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24sIGludDY0X3QmIHJvd0lkKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBm
b3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOworICAgIHZpcnR1YWwgYm9vbCBjcmVh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKTsKICAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNp
b24oaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKTsKICAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHZpcnR1YWwgdm9pZCBn
ZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5k
SWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPElEQktleVBhdGg+JiBmb3Vu
ZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5jcHAKaW5kZXggNzBmMzM2N2FiZmJjMWEwNGE5ZmVjYTFjYWI0ZTQz
MzBkZDYzNzM0MS4uMWJiZDIzYjU2YmJhMGY5ZTZlZjM0NDk5ZGViODA2YjNjMDg0NzBlZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAgLTIyNyw2ICsyMjcsOCBAQCB2b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCiAgICAgZWxzZQogICAgICAgICBtX2NhbGxi
YWNrcy0+b25BYm9ydCgpOwogCisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFu
ZEV2ZW50c0ZpcmVkKHRoaXMpOworCiAgICAgbV9kYXRhYmFzZSA9IDA7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNw
cAppbmRleCBkOWUzZDY5N2IxOTdjNzQwNmY2M2JhZWI0ODM5MzFiNGVhYzk1MDg1Li45MWRmMTI2
YTVmYjhmYjY3YmM2ZWFhYzUxZDk0N2U5ZGE0MWQwOWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwCkBAIC03NCw3
ICs3NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmFp
bGluZ0JhY2tpbmdTdG9yZSk7CiAgICAgfQotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGludDY0X3QmKQorICAg
IHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIGludDY0X3QsIGludDY0X3QmKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURC
RmFrZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtl
QmFja2luZ1N0b3JlLmgKaW5kZXggNTM2ZDc4NWI5M2FlZTQzYjlmNTMzMjUyNWM2M2VjNzllNzA5
NTliZi4uN2VkNGU2N2UzNWJkNzAwMzFmZjYyODg5Yjk3NjVmOTkwOTRiOWIyMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAg
LTMzLDkgKzMzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIElEQkZha2VCYWNraW5n
U3RvcmUgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykgT1ZFUlJJREUg
eyB9Ci0gICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5n
JiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYg
cm93SWQpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9u
LCBpbnQ2NF90JiBmb3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpIE9WRVJSSURFIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IGludDY0
X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lk
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24pIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBp
bnQ2NF90IHZlcnNpb24pIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkgT1ZFUlJJREUgeyByZXR1cm4g
ZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRh
YmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRO
YW1lcywgVmVjdG9yPElEQktleVBhdGg+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZv
dW5kQXV0b0luY3JlbWVudEZsYWdzKSBPVkVSUklERSB7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155914</attachid>
            <date>2012-08-01 16:06:36 -0700</date>
            <delta_ts>2012-08-02 16:36:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92558-20120801160618.patch</filename>
            <type>text/plain</type>
            <size>35927</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGNlMjE4YjAyYzNjMmNh
N2I5YTMzZDliMWM2MjFjZGE4NTFhMWU3MS4uY2U0NmFjOWYxMmY0MGE0MDEzYjFiOTJkYzAxOTRk
ZmM0NDFiYzcwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTA3LTMxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENv
cmUgdXBncmFkZW5lZWRlZCBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI1NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIHRoZSBiYWNrZW5kIHdlYmtpdCBsb2dpYyBuZWVkZWQgZm9y
IGludGVnZXIgdmVyc2lvbnMuIFRoZSByZXN0CisgICAgICAgIGlzIGluIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTUwNS4KKworICAgICAgICBJIHRyaWVkIHRvIG1h
a2UgdXNlIG9mIHRoZSBleGlzdGluZyBwcm9jZXNzUGVuZGluZ0NhbGxzIGFuZCBhZGRlZCB0d28K
KyAgICAgICAgbW9yZSBxdWV1ZXMsIHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscyBhbmQKKyAg
ICAgICAgcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb25DYWxscy4gVGhlICJzZWNvbmQg
aGFsZiIgcmVmZXJzIHRvCisgICAgICAgIGhvdyB0aGVyZSBhcmUgdHdvIGV2ZW50cyB0aGF0IG5l
ZWQgdG8gYmUgZmlyZWQgaW4gcmVzcG9uc2UgdG8gYW4KKyAgICAgICAgb3Blbi13aXRoLXZlcnNp
b24gY2FsbC4gVGhlICJzZWNvbmQgaGFsZiIgcXVldWUgaG9sZHMgdGhlIG9wZW4KKyAgICAgICAg
cmVxdWVzdHMgdGhhdCBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IHRoZSBjYWxsZXIncyB1cGdy
YWRlbmVlZGVkCisgICAgICAgIGhhbmRsZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGVy
ZSBhcmUgc28gbWFueSB0aGV5IGFyZSBpbiB0aGVpciBvd24gcGF0Y2g6CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjU2MAorCisgICAgICAgIFRob3Vn
aCB0aGlzIHBhdGNoIGRvZXNuJ3QgY2hhbmdlIGFueSBleHBlY3RlZCBiZWhhdmlvciBhbnl3YXks
IGxhY2sgb2YKKyAgICAgICAgcmVncmVzc2lvbnMgaXMgd2hhdCB3ZSdyZSBob3BpbmcgZm9yIGhl
cmUuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDoKKyAg
ICAgICAgKElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
Q2FsbGJhY2tzLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDYWxsYmFja3M6Om9uQmxvY2tlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDYWxsYmFja3M6Om9uVXBncmFkZU5lZWRlZCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbkNhbGwpOgorICAgICAgICAo
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVy
c2lvbkNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxs
Ojp2ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBl
bmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0SW50VmVyc2lvbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEV2ZW50
c0ZpcmVkKToKKyAgICAgICAgV2hlbiBhbiB1cGdyYWRlbmVlZGVkIGV2ZW50IGlzIGZpcmVkIGlu
IHJlc3BvbnNlIHRvIGFuCisgICAgICAgIG9wZW4td2l0aC12ZXJzaW9uIGNhbGwsIHRoZSB2ZXJz
aW9uIGNoYW5nZSB0cmFuc2FjdGlvbiBtdXN0IHJlY2VpdmUgaXRzCisgICAgICAgIGNvbXBsZXRl
IGV2ZW50IGJlZm9yZSBwcm9jZXNzUGVuZGluZ0NhbGxzIGZpcmVzIGEgc3VjY2VzcyBldmVudCBh
dAorICAgICAgICBJREJPcGVuREJSZXF1ZXN0LiBJbiB0aGUgZnV0dXJlIHRoaXMgc2hvdWxkIHBy
b2JhYmx5IGJlIGNoYW5nZWQKKyAgICAgICAgaW5zdGVhZCB0byB0cmFuc2FjdGlvbkZpbmlzaGVk
QW5kQWJvcnRGaXJlZCBhbmQKKyAgICAgICAgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRl
RmlyZWQgc28gdGhhdCB3ZSdsbCBrbm93IHRvIGZpcmUgYQorICAgICAgICBzdWNjZXNzIG9yIGVy
cm9yIGV2ZW50IGF0IElEQk9wZW5EQlJlcXVlc3QuIEN1cnJlbnRseSwgaW5zdGVhZCBvZgorICAg
ICAgICBmaXJpbmcgZXJyb3Igd2hlbiB0aGVyZSdzIGFuIGFib3J0LCB3ZSBkb24ndCBmaXJlIGFu
eXRoaW5nLgorCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwcm9j
ZXNzUGVuZGluZ0NhbGxzKToKKyAgICAgICAgTm93IHRoYXQgdGhpcyBpcyBjYWxsZWQgYWZ0ZXIg
YSBjb25uZWN0aW9uIGlzIG9wZW5lZCwgd2UgdW5mb3J0dW5hdGVseQorICAgICAgICBsb3NlIHRo
ZSBpbnZhcmlhbnQgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBleGlzdGluZyBjb25uZWN0aW9uIHdo
ZW4gdGhpcworICAgICAgICBpcyBjYWxsZWQsIGJ1dCBub3RoaW5nIGluc2lkZSB0aGlzIGZ1bmN0
aW9uIGFjdHVhbGx5IHJlbGllZCBvbiB0aGF0LgorICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSBz
ZWNvbmRIYWxmT3BlbiBjYWxscyBvbmx5IGV2ZXIgbmVlZCB0byBiZSBzZXJ2aWNlZAorICAgICAg
ICBpbiBvbmUgcGxhY2U6IHJpZ2h0IGFmdGVyIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24g
Y29tcGxldGVzLCBzbworICAgICAgICBpdCBjb3VsZCBiZSBtb3ZlZCBvdXQgb2YgaGVyZS4KKwor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVnaXN0ZXJGcm9udGVu
ZENhbGxiYWNrcyk6CisgICAgICAgIE5vdyB0aGF0IHNldFZlcnNpb24gYW5kIGRlbGV0ZURhdGFi
YXNlIGNhbGxzIGFyZSBxdWV1ZWQgdXAgYmVoaW5kCisgICAgICAgIHNlY29uZEhhbGZPcGVuIGNh
bGxzLCB3ZSBoYXZlIHRvIHNlcnZpY2UgdGhvc2UgcXVldWVzIHdoZW4KKyAgICAgICAgc2Vjb25k
SGFsZk9wZW4gY2FsbHMgY29tcGxldGUsIHdoaWNoIGlzIGhlcmUuICBTbyBjYWxsCisgICAgICAg
IHByb2Nlc3NQZW5kaW5nQ2FsbHMoKS4KKworICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAg
ICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUNhbGxiYWNrczo6b25WZXJzaW9uQ2hhbmdlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgVGhpcyBpcyByZWZhY3RvcmVkIHNvbWUgc28g
dGhhdCB0aGUgY2FsbCB0byBvcGVuQ29uZWN0aW9ue1dpdGhWZXJzaW9ufQorICAgICAgICBoYXBw
ZW5zIG9uY2UsIGF0IHRoZSBlbmQuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZl
cnNpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpj
b21taXQpOgorICAgICAgICBTZWUgYWJvdmUgY29tbWVudHMgYWJvdXQgdHJhbnNhY3Rpb25GaW5p
c2hlZEFuZEV2ZW50c0ZpcmVkLiBJIHRyaWVkCisgICAgICAgIG1vdmluZyB0aGUgY2FsbCB0byB0
cmFuc2FjdGlvbkZpbmlzaGVkIGFmdGVyIHRoZSBldmVudHMgd2VyZSBmaXJlZCBidXQKKyAgICAg
ICAgdGhhdCBmYWlsZWQgc29tZSBhc3NlcnRzLiBCdXQgY2hhbmdpbmcgdGhvc2UgYXNzZXJ0cyBp
cyBzdGlsbCBhbgorICAgICAgICBhbHRlcm5hdGl2ZSB0byBzcGxpdHRpbmcgdXAgdHJhbnNhY3Rp
b25GaW5pc2hlZCBhcyBpcyBkb25lIGhlcmUuCisKIDIwMTItMDctMzEgIFJhdWwgSHVkZWEgIDxy
aHVkZWFAYWRvYmUuY29tPgogCiAgICAgICAgIEluc3BlY3RvciBjcmFzaGVzIHdoZW4gdHJ5aW5n
IHRvIGluc3BlY3QgYSBwYWdlIHdpdGggQ1NTIHJlZ2lvbiBzdHlsaW5nCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDVkMDc4MTdmMGMxZDJiZDliM2E1MGE4MTczODg3NzZmZmI5MmEzNTMu
LmQwZmE1NjI2ZWY5NzhiYTllYTZlNDM0MWRkZmZkZWViZjEzYTlkNDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDctMzEgIERhdmlkIEdyb2dhbiAg
PGRncm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogQ29yZSB1cGdyYWRl
bmVlZGVkIGxvZ2ljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MjU1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0ZSBvdmVycmlkZGVuIG1ldGhvZHMgdG8gbWF0Y2ggbmV3IHNpZ25hdHVyZXMuCisK
KyAgICAgICAgKiB0ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmFpbGluZ0JhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6Cisg
ICAgICAgICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgorCiAyMDEyLTA3LTMxICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMTI0MTc5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAppbmRleCBmOGRlNjgyMDI3ZmMyNTNmNzdmYTU1
OTk0YzFlYjBlYmZjMzA0MTU2Li5kOWM1MWM0MzUyM2I0NjMyODczOGI0NWIxNmIzMzU2NjlhZmYz
OWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaApAQCAtNDcsOCArNDcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFj
a2luZ1N0b3JlKCkge307CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0
b3I8U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGlu
dDY0X3QmIGZvdW5kSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRf
dCYgcm93SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRTdHJpbmdWZXJzaW9uLCBpbnQ2NF90JiBm
b3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nVmVyc2lvbiwgY29uc3QgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJ
ZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oaW50
NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHVw
ZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJz
aW9uKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYg
bmFtZSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNh
bGxiYWNrcy5oCmluZGV4IDg1M2ZmYzcyZDI2MDM5MWZjYzQzNjY0ZDU3M2ZjNWRhZTMwMmRjMGYu
LjJhNmFmZWYzODMxNWJlNjViMjY2MjhlNTY4ODZkYmEzMmFjNTM2NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCkBAIC01OSw3ICs1OSw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBjb25zdCBJREJLZXlQYXRoJikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoUHJlZmV0Y2goY29uc3QgVmVjdG9yPFJlZlB0
cjxJREJLZXk+ID4mIGtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiBwcmltYXJ5
S2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZhbHVl
cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIG9uQmxvY2tlZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgb25CbG9ja2VkKGludDY0X3QgZXhpc3RpbmdWZXJzaW9uKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZChpbnQ2NF90IG9sZFZlcnNp
b24sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4
IGU0NTE0N2Q1YzBiMGI2MmIzM2QzZjNjY2Q2M2E2MTdmYjViOGI5OGUuLmJlNTcwMTY2ZmQ4YTFm
NDdkZmQyOGMwNWFkZmMyYmVjNGNkZDg0YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC01
Miw5ICs1MiwyOSBAQCBwcml2YXRlOgogICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
ICAgICB7CiAgICAgfQorCiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9
OwogCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9u
Q2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBpbnQ2NF90IHZlcnNp
b24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdPcGVuV2l0aFZl
cnNpb25DYWxsKGNhbGxiYWNrcywgdmVyc2lvbikpOworICAgIH0KKyAgICBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KKyAgICBpbnQ2
NF90IHZlcnNpb24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0KKworcHJpdmF0ZToKKyAgICBQZW5k
aW5nT3BlbldpdGhWZXJzaW9uQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBpbnQ2NF90IHZlcnNpb24pCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAg
ICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7CisgICAgaW50NjRfdCBtX3ZlcnNpb247Cit9OworCiBjbGFz
cyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6IHB1YmxpYyBSZWZD
b3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQpAQCAtMTA2LDYgKzEyNiw3IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRh
dGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvCiAgICAg
LCBtX2lkKEludmFsaWRJZCkKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV92ZXJzaW9uKCIi
KQorICAgICwgbV9pbnRWZXJzaW9uKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikK
ICAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVyKQogICAgICwgbV9mYWN0b3J5KGZh
Y3RvcnkpCiAgICAgLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IoY29vcmRpbmF0b3IpCkBAIC0x
MTYsMTMgKzEzNywxMyBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogCiBib29sIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbCgpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gbV9i
YWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1f
aWQpOwotICAgIEFTU0VSVChzdWNjZXNzID09IChtX2lkICE9IEludmFsaWRJZCkpOworICAgIGJv
b2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFt
ZSwgbV92ZXJzaW9uLCBtX2ludFZlcnNpb24sIG1faWQpOworICAgIEFTU0VSVF9XSVRIX01FU1NB
R0Uoc3VjY2VzcyA9PSAobV9pZCAhPSBJbnZhbGlkSWQpLCAic3VjY2VzcyA9ICVzLCBtX2lkID0g
JSJQUklkNjQsIHN1Y2Nlc3MgPyAidHJ1ZSIgOiAiZmFsc2UiLCBtX2lkKTsKICAgICBpZiAoc3Vj
Y2VzcykgewogICAgICAgICBsb2FkT2JqZWN0U3RvcmVzKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOworICAgIHJldHVybiBtX2JhY2tpbmdTdG9y
ZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUsIG1fdmVyc2lvbiwgbV9pbnRWZXJz
aW9uLCBtX2lkKTsKIH0KIAogSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6fklEQkRhdGFiYXNlQmFj
a2VuZEltcGwoKQpAQCAtMTM2LDcgKzE1Nyw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAogCiBJREJEYXRh
YmFzZU1ldGFkYXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsK
LSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBJREJE
YXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pOworICAgIElEQkRhdGFiYXNlTWV0YWRhdGEg
bWV0YWRhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faW50VmVyc2lvbik7CiAgICAgZm9yIChPYmpl
Y3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5iZWdpbigpOyBp
dCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKICAgICAgICAgbWV0YWRhdGEub2JqZWN0
U3RvcmVzLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQtPm1ldGFkYXRhKCkpOwogICAgIHJldHVy
biBtZXRhZGF0YTsKQEAgLTIxNCw2ICsyMzUsMTAgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwK
ICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SURCX0FCT1JUX0VSUiwgIkNvbm5lY3Rpb24gd2FzIGNsb3NlZCBi
ZWZvcmUgc2V0IHZlcnNpb24gdHJhbnNhY3Rpb24gd2FzIGNyZWF0ZWQiKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgaWYgKG1faW50VmVyc2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRh
OjpOb0ludFZlcnNpb24pIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsIFN0cmluZzo6
Zm9ybWF0KCJZb3UgY2FuJ3QgdXNlIHRoZSBzZXRWZXJzaW9uIGZ1bmN0aW9uIGlmIHlvdSd2ZSBh
bHJlYWR5IHNldCB0aGUgdmVyc2lvbiB0aHJvdWdoIGFuIG9wZW4gY2FsbC4gIFRoZSBjdXJyZW50
IGludGVnZXIgdmVyc2lvbiBpcyAlIlBSSWQ2NCwgbV9pbnRWZXJzaW9uKSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNl
Q2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VD
YWxsYmFja3MpCiAgICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOwpA
QCAtMjU5LDYgKzI4NCwyMCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNp
b25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZgogICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPih0
cmFuc2FjdGlvbikpOwogfQogCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEludFZl
cnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0YWJh
c2UtPmlkKCk7CisgICAgaW50NjRfdCBvbGRWZXJzaW9uID0gZGF0YWJhc2UtPm1faW50VmVyc2lv
bjsKKyAgICBBU1NFUlQodmVyc2lvbiA+IG9sZFZlcnNpb24pOworICAgIGRhdGFiYXNlLT5tX2lu
dFZlcnNpb24gPSB2ZXJzaW9uOworICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51
cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oZGF0YWJhc2VJZCwgZGF0YWJhc2UtPm1faW50VmVy
c2lvbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRh
dGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChv
bGRWZXJzaW9uLCB0cmFuc2FjdGlvbiwgZGF0YWJhc2UpOworfQorCiB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQogewogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwpAQCAtMjc2LDYgKzMx
NSwxNiBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWQo
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbgogICAgIGlmICh0cmFuc2FjdGlvbi0+bW9k
ZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewogICAgICAgICBBU1NFUlQo
dHJhbnNhY3Rpb24uZ2V0KCkgPT0gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdl
dCgpKTsKICAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmNsZWFyKCk7
CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmlu
aXNoZWRBbmRFdmVudHNGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHBycFRyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9k
ZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAgICAvLyBJZiB0
aGlzIHdhcyBhbiBvcGVuLXdpdGgtdmVyc2lvbiBjYWxsLCB0aGVyZSBzaG91bGQgYmUgYSAic2Vj
b25kCisgICAgICAgIC8vIGhhbGYiIG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1cyBpbiBwcm9jZXNz
UGVuZGluZ0NhbGxzLgorICAgICAgICAvLyBXaGVuIHdlIG5vIGxvbmdlciBzdXBwb3J0IHNldFZl
cnNpb24sIHdlIGNhbiBhc3NlcnQgc3VjaCBhIHRoaW5nLgogICAgICAgICBwcm9jZXNzUGVuZGlu
Z0NhbGxzKCk7CiAgICAgfQogfQpAQCAtMjg3LDcgKzMzNiwxNiBAQCBpbnQzMl90IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNvbm5lY3Rpb25Db3VudCgpCiAKIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCiB7Ci0gICAgQVNTRVJUKGNvbm5lY3Rpb25D
b3VudCgpIDw9IDEpOworICAgIC8vIEZJWE1FOiBDaGFuZ2UgZnJvbSBxdWV1ZSB0byBqdXN0IGEg
c2luZ2xlIHBsYWNlIGhvbGRlci4KKyAgICBBU1NFUlQobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW5X
aXRoVmVyc2lvbkNhbGxzLnNpemUoKSA8PSAxKTsKKyAgICB3aGlsZSAoIW1fcGVuZGluZ1NlY29u
ZEhhbGZPcGVuV2l0aFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFBl
bmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsPiBwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbCA9IG1f
cGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb25DYWxscy50YWtlRmlyc3QoKTsKKyAgICAg
ICAgQVNTRVJUKHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsLT52ZXJzaW9uKCkgPT0gbV9pbnRW
ZXJzaW9uKTsKKyAgICAgICAgQVNTRVJUKG1faWQgIT0gSW52YWxpZElkKTsKKyAgICAgICAgKytt
X3BlbmRpbmdDb25uZWN0aW9uQ291bnQ7CisgICAgICAgIHBlbmRpbmdPcGVuV2l0aFZlcnNpb25D
YWxsLT5jYWxsYmFja3MoKS0+b25TdWNjZXNzKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAg
fQogCiAgICAgLy8gUGVuZGluZyBjYWxscyBtYXkgYmUgcmVxdWV1ZWQgb3IgYWJvcnRlZAogICAg
IERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+ID4gcGVuZGluZ1NldFZlcnNpb25D
YWxsczsKQEAgLTMyNSw2ICszODMsMTMgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpw
cm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpIHx8ICFtX3BlbmRp
bmdEZWxldGVDYWxscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIERlcXVlPFJl
ZlB0cjxQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbD4gPiBwZW5kaW5nT3BlbldpdGhWZXJzaW9u
Q2FsbHM7CisgICAgbV9wZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMuc3dhcChwZW5kaW5nT3Bl
bldpdGhWZXJzaW9uQ2FsbHMpOworICAgIHdoaWxlICghcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNh
bGxzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNh
bGw+IHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsID0gcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNh
bGxzLnRha2VGaXJzdCgpOworICAgICAgICBvcGVuQ29ubmVjdGlvbldpdGhWZXJzaW9uKHBlbmRp
bmdPcGVuV2l0aFZlcnNpb25DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGluZ09wZW5XaXRoVmVyc2lv
bkNhbGwtPnZlcnNpb24oKSk7CisgICAgfQorCiAgICAgLy8gR2l2ZW4gdGhlIGNoZWNrIGFib3Zl
LCBpdCBhcHBlYXJzIHRoYXQgY2FsbHMgY2Fubm90IGJlIHJlcXVldWVkIGJ5CiAgICAgLy8gb3Bl
bkNvbm5lY3Rpb24sIGJ1dCB1c2UgYSBkaWZmZXJlbnQgcXVldWUgZm9yIGl0ZXJhdGlvbiB0byBi
ZSBzYWZlLgogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gcGVuZGluZ09wZW5D
YWxsczsKQEAgLTM1Niw2ICs0MjEsMTAgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpy
ZWdpc3RlckZyb250ZW5kQ2FsbGJhY2tzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWwKICAgICBB
U1NFUlQobV9wZW5kaW5nQ29ubmVjdGlvbkNvdW50KTsKICAgICAtLW1fcGVuZGluZ0Nvbm5lY3Rp
b25Db3VudDsKICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+KGNhbGxiYWNrcykpOworICAgIC8vIFdlIGdpdmUgbWF4IHByaW9yaXR5IHRv
IG9wZW4gY2FsbHMgdGhhdCBmb2xsb3cgdXBncmFkZW5lZWRlZAorICAgIC8vIGV2ZW50czsgdHJp
Z2dlciB0aGUgcmVzdCBvZiB0aGUgcXVldWVzIHRvIGJlIHNlcnZpY2VkIHdoZW4gdGhvc2Ugb3Bl
bgorICAgIC8vIGNhbGxzIGFyZSBmaW5pc2hlZC4KKyAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7
CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKQEAgLTM3Myw2ICs0NDIsNzMgQEAgdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQogICAgIH0KIH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKKyAgICBBU1NFUlQoY2FsbGJhY2tzKTsKKyAgICBmb3IgKERhdGFiYXNlQ2FsbGJh
Y2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4o
KTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgeworICAgICAgICAv
LyBOb3RlIHRoYXQgc29tZSBjb25uZWN0aW9ucyBtaWdodCBjbG9zZSBpbiB0aGUgdmVyc2lvbmNo
YW5nZSBldmVudAorICAgICAgICAvLyBoYW5kbGVyIGZvciBzb21lIG90aGVyIGNvbm5lY3Rpb24s
IGFmdGVyIHdoaWNoIGl0cyBvd24gdmVyc2lvbmNoYW5nZQorICAgICAgICAvLyBldmVudCBzaG91
bGQgbm90IGJlIGZpcmVkLiBUaGUgYmFja2VuZCBkb2Vzbid0IHdvcnJ5IGFib3V0IHRoaXMsIHdl
CisgICAgICAgIC8vIGp1c3QgcXVldWUgdXAgYSB2ZXJzaW9uIGNoYW5nZSBldmVudCBmb3IgZXZl
cnkgY29ubmVjdGlvbi4gVGhlCisgICAgICAgIC8vIGZyb250ZW5kIHRha2VzIGNhcmUgdG8gb25s
eSBkaXNwYXRjaCB0byBvcGVuIGNvbm5lY3Rpb25zLgorICAgICAgICAoKml0KS0+b25WZXJzaW9u
Q2hhbmdlKG1faW50VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbik7CisgICAgfQorICAgIC8vIFRo
ZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQgdW50aWwgYWxsIHRoZSB2ZXJzaW9uIGNoYW5nZSBldmVu
dHMgYXJlCisgICAgLy8gZGVsaXZlcmVkIGFuZCB0aGVuIGNoZWNrIG1fZGF0YWJhc2VDYWxsYmFj
a3MuZW1wdHkoKSBiZWZvcmUgcHJvY2VlZGluZworICAgIC8vIG9yIGZpcmluZyBhIGJsb2NrZWQg
ZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggaG93CisgICAg
Ly8gdGhlIG9sZCBzZXRWZXJzaW9uIChpbmNvcnJlY3RseSkgZGlkIGl0OgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgIGlmIChjb25uZWN0
aW9uQ291bnQoKSA+IDApCisgICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKG1faW50VmVyc2lv
bik7CisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgbV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gfHwgY29ubmVjdGlvbkNvdW50KCkgPiAwKSB7CisgICAgICAgIG1fcGVuZGluZ09wZW5X
aXRoVmVyc2lvbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y3JlYXRl
KGNhbGxiYWNrcywgcmVxdWVzdGVkVmVyc2lvbikpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlz
dDo6Y3JlYXRlKCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25JbnRlcmZhY2UgPSB0cmFuc2Fj
dGlvbihvYmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFO
R0UsIGVjKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rp
b24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uSW50ZXJmYWNl
LmdldCgpKTsKKyAgICBBU1NFUlQoIWVjKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50VmVy
c2lvbkludGVybmFsLCBkYXRhYmFzZSwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFu
c2FjdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVzZXRWZXJzaW9uLCBkYXRhYmFzZSwg
bV92ZXJzaW9uKSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNB
Q1RJT05fSU5BQ1RJVkVfRVJSOworICAgIH0KKyAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbldp
dGhWZXJzaW9uQ2FsbHMuYXBwZW5kKFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjcmVhdGUo
Y2FsbGJhY2tzLCByZXF1ZXN0ZWRWZXJzaW9uKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb25XaXRoVmVyc2lvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzLCBpbnQ2NF90IHZlcnNpb24pCit7CisgICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmICghbV9wZW5kaW5nRGVsZXRl
Q2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAh
bV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdP
cGVuV2l0aFZlcnNpb25DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OmNy
ZWF0ZShjYWxsYmFja3MsIHZlcnNpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAobV9pZCA9PSBJbnZhbGlkSWQpIHsKKyAgICAgICAgaWYgKG9wZW5JbnRlcm5hbCgpKQorICAg
ICAgICAgICAgQVNTRVJUKG1faW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0lu
dFZlcnNpb24pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05f
RVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorICAgIGlmICh2ZXJzaW9uID4gbV9pbnRWZXJzaW9uKSB7CisgICAgICAgIHJ1bklu
dFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbih2ZXJzaW9uLCBjYWxsYmFja3MpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmICh2ZXJzaW9uIDwgbV9pbnRWZXJzaW9uKSB7CisgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlZFUl9FUlIsIFN0cmluZzo6Zm9ybWF0KCJUaGUgcmVxdWVzdGVkIHZlcnNpb24g
KCUiUFJJZDY0IikgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGluZyB2ZXJzaW9uICglIlBSSWQ2NCIp
LiIsIHZlcnNpb24sIG1faW50VmVyc2lvbikpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBBU1NFUlQodmVyc2lvbiA9PSBtX2ludFZlcnNpb24pOworICAgICsrbV9wZW5kaW5nQ29ubmVj
dGlvbkNvdW50OworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMpOworfQorCiB2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBwcnBDYWxsYmFja3MpCiB7CiAgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgewpAQCAtMzg4
LDE3ICs1MjQsMTkgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFz
ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2sKICAgICAvLyBGSVhNRTogT25s
eSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUK
ICAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0IHVw
IHRvIGZpcmUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcxMTMwCi0gICAgaWYgKCFtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmlzRW1wdHkoKSkgeworICAg
IGlmIChjb25uZWN0aW9uQ291bnQoKSA+PSAxKSB7CiAgICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNh
bGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcykpOwogICAgICAg
ICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0
YWJhc2UobV9uYW1lKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFs
IGVycm9yLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3ZlcnNpb24gPSAiIjsK
ICAgICBtX2lkID0gSW52YWxpZElkOworICAgIG1faW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok5vSW50VmVyc2lvbjsKICAgICBtX29iamVjdFN0b3Jlcy5jbGVhcigpOwogICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwog
fQpAQCAtNDExLDEyICs1NDksMTcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbG9z
ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MKICAgICBpZiAo
Y29ubmVjdGlvbkNvdW50KCkgPiAxKQogICAgICAgICByZXR1cm47CiAKKyAgICBUcmFuc2FjdGlv
blNldCB0cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOwogICAgIHByb2Nlc3NQZW5kaW5nQ2Fs
bHMoKTsKIAotICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkpIHsKLSAgICAgICAgVHJhbnNhY3Rp
b25TZXQgdHJhbnNhY3Rpb25zKG1fdHJhbnNhY3Rpb25zKTsKKyAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbnMuc2l6ZSgpIC0gdHJhbnNhY3Rpb25zLnNpemUoKSA8PSAxKTsKKyAgICAvLyBGSVhNRTog
SW5zdGVhZCBvZiByZWx5aW5nIG9uIHRyYW5zYWN0aW9ucy5zaXplKCksIG1ha2UgY29ubmVjdGlv
bkNvdW50CisgICAgLy8gYXdhcmUgb2YgaW4tZmxpZ2h0IHVwZ3JhZGVuZWVkZWQgZXZlbnRzIGFz
IHdlbGwgYXMgaW4tZmxpZ2h0IHN1Y2Nlc3MKKyAgICAvLyBldmVudHMuCisgICAgaWYgKCFjb25u
ZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpICYmIG1fdHJhbnNh
Y3Rpb25zLnNpemUoKSA9PSB0cmFuc2FjdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgIGZvciAoVHJh
bnNhY3Rpb25TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHJhbnNhY3Rpb25zLmJlZ2luKCk7IGl0
ICE9IHRyYW5zYWN0aW9ucy5lbmQoKTsgKytpdCkKICAgICAgICAgICAgICgqaXQpLT5hYm9ydCgp
OworCiAgICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwogCiAgICAgICAg
IG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggODA1ZWI2MTdm
YjMyMTRkMGJiYjI1NzVmMzJiZjg5NWE0NWYxMGQxZC4uMjIwZGU1MTEzM2Y3N2QxYzE0ZWNiMzMz
ODkyZjJkYzZiNjBlYjgzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTcsNiArNTcsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyRnJvbnRlbmRDYWxsYmFja3MoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4pOwogICAgIHZvaWQgb3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBpbnQ2NF90IHZlcnNpb24pOwogICAgIHZvaWQgZGVsZXRl
RGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIC8vIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZQpAQCAtNzEsMTEgKzcyLDEzIEBAIHB1YmxpYzoKICAgICBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CiAgICAgdm9pZCB0cmFuc2FjdGlv
blN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgdm9p
ZCB0cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEV2ZW50c0ZpcmVkKFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogCiBwcml2YXRlOgogICAgIElEQkRhdGFi
YXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFi
YXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwg
Y29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKIAogICAgIGJvb2wgb3BlbkludGVybmFs
KCk7CisgICAgdm9pZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oaW50NjRfdCByZXF1
ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHZvaWQgbG9hZE9i
amVjdFN0b3JlcygpOwogICAgIGludDMyX3QgY29ubmVjdGlvbkNvdW50KCk7CiAgICAgdm9pZCBw
cm9jZXNzUGVuZGluZ0NhbGxzKCk7CkBAIC04Myw2ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Pik7CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgc2V0VmVyc2lvbkludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBj
b25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgc2V0SW50VmVy
c2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKIAogICAgIC8v
IFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCiAg
ICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKQEAgLTkzLDYgKzk3LDcgQEAgcHJpdmF0ZToKICAg
ICBpbnQ2NF90IG1faWQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV92ZXJzaW9u
OworICAgIGludDY0X3QgbV9pbnRWZXJzaW9uOwogCiAgICAgU3RyaW5nIG1faWRlbnRpZmllcjsK
ICAgICAvLyBUaGlzIG1pZ2h0IG5vdCBuZWVkIHRvIGJlIGEgUmVmUHRyIHNpbmNlIHRoZSBmYWN0
b3J5J3MgbGlmZXRpbWUgaXMgdGhhdCBvZiB0aGUgcGFnZSBncm91cCwgYnV0IGl0J3MgYmV0dGVy
IHRvIGJlIGNvbnNlcnZpdGl2ZSB0aGFuIHNvcnJ5LgpAQCAtMTEzLDYgKzExOCwxMCBAQCBwcml2
YXRlOgogICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKICAgICBEZXF1ZTxSZWZQdHI8UGVuZGlu
Z09wZW5DYWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKIAorICAgIGNsYXNzIFBlbmRpbmdPcGVu
V2l0aFZlcnNpb25DYWxsOworICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbldpdGhWZXJzaW9u
Q2FsbD4gPiBtX3BlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsczsKKyAgICBEZXF1ZTxSZWZQdHI8
UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+ID4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW5XaXRo
VmVyc2lvbkNhbGxzOworCiAgICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7CiAgICAgRGVxdWU8
UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxi
YWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxs
YmFja3MuaAppbmRleCBiM2YyNDRmNTE2YjY5ODdlYTExOWNiZjcwMTliN2I1NDM3NWYxMmJmLi4x
NmE5ZWE2YzUwOGIwZDkyYjYxZTQ5OTdjNTQzMDEzMmE2ZDJhY2FhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgK
QEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQ2FsbGJh
Y2tzKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UoaW50NjRf
dCBjdXJyZW50VmVyc2lvbiwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcAppbmRleCBkZmIxNDU3YTMwNmRhYTdhNTY4YzIxYWY2ZWZhMzQ1NDZjZTNmZjQ2Li5iOTUx
OGQ1NDUxOGQwMTA0Yzc5NmNkMGRhN2E0NjIyYTdmMDM3MzgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5j
cHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgog
I2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTE1
MSwzMCArMTUyLDMyIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTCiAKIHZvaWQgSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwU2VjdXJpdHlP
cmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3Rv
cnkpCiB7CisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhIHBhcmFtZXRlciBhbmQgcGx1bWIgdGhy
b3VnaCBmcm9tIGphdmFzY3JpcHQuCisgICAgaW50NjRfdCB2ZXJzaW9uID0gSURCRGF0YWJhc2VN
ZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRl
bnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdl
dCgpKTsKIAorICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tl
bmQ7CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VC
YWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJh
c2VCYWNrZW5kTWFwLmVuZCgpKSB7Ci0gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9w
ZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBhbnkgcGVuZGluZwotICAgICAgICAvLyBzZXRWZXJz
aW9uIGNhbGxzIHRvIGNvbXBsZXRlLgotICAgICAgICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlv
bihjYWxsYmFja3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEV2
ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCi0g
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9y
ZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUp
IHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUs
IGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlz
LCB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICBpZiAoZGF0YWJhc2VCYWNrZW5kKSB7Ci0gICAgICAg
IG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tl
bmQuZ2V0KCkpOwotICAgICAgICBkYXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxi
YWNrcyk7CisgICAgaWYgKGl0ID09IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAg
ICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3Rv
cmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworICAgICAgICBpZiAoIWJhY2tpbmdT
dG9yZSkgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJv
ci4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGF0YWJhc2VC
YWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9y
ZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVu
dGlmaWVyKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlQmFja2VuZCkKKyAgICAgICAgICAgIG1fZGF0
YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0
KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAi
SW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAg
fSBlbHNlCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikp
OworICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBpdC0+c2Vjb25kOworICAgIGlmICh2ZXJzaW9u
ID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgZGF0YWJhc2VC
YWNrZW5kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOworICAgIGVsc2UKKyAgICAgICAgZGF0
YWJhc2VCYWNrZW5kLT5vcGVuQ29ubmVjdGlvbldpdGhWZXJzaW9uKGNhbGxiYWNrcywgdmVyc2lv
bik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5k
ZXggMDUxM2MzNTMzZmNhYjBmZjg1MmRjMGE5MTM0NDU3ZWNmMzYyOTdmMy4uZTg5ODcwMjZmNzkw
NmYzYTNhOWY5MjQxNzQ3ZTU0MmIyYjg5ZjIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAg
LTIzNCw3ICsyMzQsNyBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNl
TmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpCiAgICAgfQogfQogCi1ib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkKK2Jvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIFN0cmluZyYgZm91bmRTdHJpbmdWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZEludFZlcnNpb24s
IGludDY0X3QmIGZvdW5kSWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFi
YXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7CiAKQEAgLTI0Miw3ICsyNDIs
NyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmCiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgb2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0
YUtleTo6ZW5jb2RlKGZvdW5kSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwg
Zm91bmRWZXJzaW9uKTsKKyAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjplbmNvZGUoZm91bmRJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNp
b24pLCBmb3VuZFN0cmluZ1ZlcnNpb24pOwogICAgIGlmICghb2spCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtMjY0LDcgKzI2NCw3IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld0RhdGFiYXNl
SWQoTGV2ZWxEQkRhdGFiYXNlKiBkYikKICAgICByZXR1cm4gZGF0YWJhc2VJZDsKIH0KIAotYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkKK2Jv
b2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9u
LCBpbnQ2NF90JiByb3dJZCkKIHsKICAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9kYi5n
ZXQoKSk7CiAgICAgaWYgKHJvd0lkIDwgMCkKQEAgLTI3OCw2ICsyNzgsMTIgQEAgYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oaW50NjRfdCByb3dJZCwgaW50
NjRfdCBpbnRWZXJzaW9uKQoreworICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgYWN0dWFsbHkgZG8g
c29tZXRoaW5nLiAoZmlyc3QgY3V0IGlzIGluIGh0dHA6Ly93a2IudWcvODk1MDUpCisgICAgcmV0
dXJuIHRydWU7Cit9CisKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0
YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7CiAg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKQEAgLTMwNSw3ICszMTEsOCBAQCBib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSkKIAogICAgIGludDY0X3QgZGF0YWJhc2VJZDsKICAgICBTdHJpbmcgdmVyc2lvbjsKLSAgICBp
ZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVyc2lvbiwgZGF0YWJhc2VJZCkpIHsK
KyAgICBpbnQ2NF90IGludFZlcnNpb247CisgICAgaWYgKCFnZXRJREJEYXRhYmFzZU1ldGFEYXRh
KG5hbWUsIHZlcnNpb24sIGludFZlcnNpb24sIGRhdGFiYXNlSWQpKSB7CiAgICAgICAgIHRyYW5z
YWN0aW9uLT5yb2xsYmFjaygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmgKaW5kZXggMGJlOTM0ZmZkYTliY2Y4MDkxZDUzNDEwYTZhYmNjODAwZjU5MGQzNi4u
NDc5ZWZlY2MwNWFiYjE2MDgzMzE1MmIyMjhlY2U2ZWU3NzY2MzllYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuaApAQCAtNDUsOSArNDUsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfklEQkxldmVsREJC
YWNraW5nU3RvcmUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90
JiBmb3VuZElkKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQp
OworICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50
NjRfdCYgZm91bmRJZCk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50
VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwogICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRh
YmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAg
dmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBp
bnQ2NF90IGludFZlcnNpb24pOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25z
dCBTdHJpbmcmIG5hbWUpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2
NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURCS2V5UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxi
b29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNw
cAppbmRleCA3MGYzMzY3YWJmYmMxYTA0YTlmZWNhMWNhYjRlNDMzMGRkNjM3MzQxLi4xYmJkMjNi
NTZiYmEwZjllNmVmMzQ0OTlkZWI4MDZiM2MwODQ3MGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmNwcApAQCAtMjI3LDYgKzIyNyw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6Y29tbWl0KCkKICAgICBlbHNlCiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KCk7CiAK
KyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kRXZlbnRzRmlyZWQodGhpcyk7
CisKICAgICBtX2RhdGFiYXNlID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwCmluZGV4IGQ5ZTNkNjk3YjE5
N2M3NDA2ZjYzYmFlYjQ4MzkzMWI0ZWFjOTUwODUuLjkxZGYxMjZhNWZiOGZiNjdiYzZlYWFjNTFk
OTQ3ZTlkYTQxZDA5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
SURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGYWlsaW5nQmFja2luZ1N0b3JlKTsK
ICAgICB9Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgaW50NjRfdCYpCisgICAgdmlydHVhbCBib29sIGNyZWF0
ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgaW50NjRf
dCwgaW50NjRfdCYpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRl
eCA1MzZkNzg1YjkzYWVlNDNiOWY1MzMyNTI1YzYzZWM3OWU3MDk1OWJmLi43ZWQ0ZTY3ZTM1YmQ3
MDAzMWZmNjI4ODliOTc2NWY5OTA5NGI5YjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApAQCAtMzMsOSArMzMsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCRmFrZUJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJC
YWNraW5nU3RvcmUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVz
KFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91
bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkgT1ZFUlJJREUgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50
VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2
NF90JiByb3dJZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCB1
cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
SURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgdmVyc2lvbikgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBuYW1lKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmly
dHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2
NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURCS2V5
UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50Rmxh
Z3MpIE9WRVJSSURFIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156200</attachid>
            <date>2012-08-02 16:36:26 -0700</date>
            <delta_ts>2012-08-03 13:58:50 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-92558-20120802163607.patch</filename>
            <type>text/plain</type>
            <size>36370</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDkxZWY3NmMyM2UxZDA2
YTdlZGM3OGEyZmZjZTQ5NTI4MGI1ZGM5NC4uNWVjYzQxOWE5YWMzODM3YjZiM2Q0YTg4Yzk2NzJk
MzhlZGEyOTA5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTA3LTMxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENv
cmUgdXBncmFkZW5lZWRlZCBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI1NTgKKworICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgor
CisgICAgICAgIFRoaXMgaXMgdGhlIGJhY2tlbmQgd2Via2l0IGxvZ2ljIG5lZWRlZCBmb3IgaW50
ZWdlciB2ZXJzaW9ucy4gVGhlIHJlc3QKKyAgICAgICAgaXMgaW4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg5NTA1LgorCisgICAgICAgIEkgdHJpZWQgdG8gbWFrZSB1
c2Ugb2YgdGhlIGV4aXN0aW5nIHByb2Nlc3NQZW5kaW5nQ2FsbHMgYW5kIGFkZGVkIHR3bworICAg
ICAgICBtb3JlIHF1ZXVlcywgcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzIGFuZAorICAgICAg
ICBwZW5kaW5nU2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbkNhbGxzLiBUaGUgInNlY29uZCBoYWxm
IiByZWZlcnMgdG8KKyAgICAgICAgaG93IHRoZXJlIGFyZSB0d28gZXZlbnRzIHRoYXQgbmVlZCB0
byBiZSBmaXJlZCBpbiByZXNwb25zZSB0byBhbgorICAgICAgICBvcGVuLXdpdGgtdmVyc2lvbiBj
YWxsLiBUaGUgInNlY29uZCBoYWxmIiBxdWV1ZSBob2xkcyB0aGUgb3BlbgorICAgICAgICByZXF1
ZXN0cyB0aGF0IHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgdGhlIGNhbGxlcidzIHVwZ3JhZGVu
ZWVkZWQKKyAgICAgICAgaGFuZGxlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoZXJlIGFy
ZSBzbyBtYW55IHRoZXkgYXJlIGluIHRoZWlyIG93biBwYXRjaDoKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNTYwCisKKyAgICAgICAgVGhvdWdoIHRo
aXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYW55IGV4cGVjdGVkIGJlaGF2aW9yIGFueXdheSwgbGFj
ayBvZgorICAgICAgICByZWdyZXNzaW9ucyBpcyB3aGF0IHdlJ3JlIGhvcGluZyBmb3IgaGVyZS4K
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAg
ICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxs
YmFja3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25CbG9ja2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCk6CisgICAgICAgIChJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9u
Q2FsbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OnZl
cnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGlu
Z09wZW5XaXRoVmVyc2lvbkNhbGw6OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
SURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kRXZlbnRzRmly
ZWQpOgorICAgICAgICBXaGVuIGFuIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaXMgZmlyZWQgaW4gcmVz
cG9uc2UgdG8gYW4KKyAgICAgICAgb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlIHZlcnNpb24g
Y2hhbmdlIHRyYW5zYWN0aW9uIG11c3QgcmVjZWl2ZSBpdHMKKyAgICAgICAgY29tcGxldGUgZXZl
bnQgYmVmb3JlIHByb2Nlc3NQZW5kaW5nQ2FsbHMgZmlyZXMgYSBzdWNjZXNzIGV2ZW50IGF0Cisg
ICAgICAgIElEQk9wZW5EQlJlcXVlc3QuIEluIHRoZSBmdXR1cmUgdGhpcyBzaG91bGQgcHJvYmFi
bHkgYmUgY2hhbmdlZAorICAgICAgICBpbnN0ZWFkIHRvIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRB
Ym9ydEZpcmVkIGFuZAorICAgICAgICB0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJl
ZCBzbyB0aGF0IHdlJ2xsIGtub3cgdG8gZmlyZSBhCisgICAgICAgIHN1Y2Nlc3Mgb3IgZXJyb3Ig
ZXZlbnQgYXQgSURCT3BlbkRCUmVxdWVzdC4gQ3VycmVudGx5LCBpbnN0ZWFkIG9mCisgICAgICAg
IGZpcmluZyBlcnJvciB3aGVuIHRoZXJlJ3MgYW4gYWJvcnQsIHdlIGRvbid0IGZpcmUgYW55dGhp
bmcuCisKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQ
ZW5kaW5nQ2FsbHMpOgorICAgICAgICBOb3cgdGhhdCB0aGlzIGlzIGNhbGxlZCBhZnRlciBhIGNv
bm5lY3Rpb24gaXMgb3BlbmVkLCB3ZSB1bmZvcnR1bmF0ZWx5CisgICAgICAgIGxvc2UgdGhlIGlu
dmFyaWFudCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGV4aXN0aW5nIGNvbm5lY3Rpb24gd2hlbiB0
aGlzCisgICAgICAgIGlzIGNhbGxlZCwgYnV0IG5vdGhpbmcgaW5zaWRlIHRoaXMgZnVuY3Rpb24g
YWN0dWFsbHkgcmVsaWVkIG9uIHRoYXQuCisgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHNlY29u
ZEhhbGZPcGVuIGNhbGxzIG9ubHkgZXZlciBuZWVkIHRvIGJlIHNlcnZpY2VkCisgICAgICAgIGlu
IG9uZSBwbGFjZTogcmlnaHQgYWZ0ZXIgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiBjb21w
bGV0ZXMsIHNvCisgICAgICAgIGl0IGNvdWxkIGJlIG1vdmVkIG91dCBvZiBoZXJlLgorCisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZWdpc3RlckZyb250ZW5kQ2Fs
bGJhY2tzKToKKyAgICAgICAgTm93IHRoYXQgc2V0VmVyc2lvbiBhbmQgZGVsZXRlRGF0YWJhc2Ug
Y2FsbHMgYXJlIHF1ZXVlZCB1cCBiZWhpbmQKKyAgICAgICAgc2Vjb25kSGFsZk9wZW4gY2FsbHMs
IHdlIGhhdmUgdG8gc2VydmljZSB0aG9zZSBxdWV1ZXMgd2hlbgorICAgICAgICBzZWNvbmRIYWxm
T3BlbiBjYWxscyBjb21wbGV0ZSwgd2hpY2ggaXMgaGVyZS4gIFNvIGNhbGwKKyAgICAgICAgcHJv
Y2Vzc1BlbmRpbmdDYWxscygpLgorCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb25XaXRoVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbG9zZSk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAg
ICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VDYWxsYmFja3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQ2Fs
bGJhY2tzOjpvblZlcnNpb25DaGFuZ2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW4pOgorICAgICAgICBUaGlzIGlzIHJlZmFjdG9yZWQgc29tZSBzbyB0aGF0
IHRoZSBjYWxsIHRvIG9wZW5Db25lY3Rpb257V2l0aFZlcnNpb259CisgICAgICAgIGhhcHBlbnMg
b25jZSwgYXQgdGhlIGVuZC4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1p
dCk6CisgICAgICAgIFNlZSBhYm92ZSBjb21tZW50cyBhYm91dCB0cmFuc2FjdGlvbkZpbmlzaGVk
QW5kRXZlbnRzRmlyZWQuIEkgdHJpZWQKKyAgICAgICAgbW92aW5nIHRoZSBjYWxsIHRvIHRyYW5z
YWN0aW9uRmluaXNoZWQgYWZ0ZXIgdGhlIGV2ZW50cyB3ZXJlIGZpcmVkIGJ1dAorICAgICAgICB0
aGF0IGZhaWxlZCBzb21lIGFzc2VydHMuIEJ1dCBjaGFuZ2luZyB0aG9zZSBhc3NlcnRzIGlzIHN0
aWxsIGFuCisgICAgICAgIGFsdGVybmF0aXZlIHRvIHNwbGl0dGluZyB1cCB0cmFuc2FjdGlvbkZp
bmlzaGVkIGFzIGlzIGRvbmUgaGVyZS4KKwogMjAxMi0wOC0wMSAgSmFtZXMgUm9iaW5zb24gIDxq
YW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gV3JhcCBzaGFyZWQgY29u
dGV4dCBnZXR0ZXJzIGluIFdlYktpdCBBUEkgYW5kIGF2b2lkIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEIHVzZSBpbiBjb21wb3NpdG9yIGludGVybmFscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCBjN2IzNmY4NjIxM2E1ZTc4MDBlYWRmZTU0ZTRlZTZjMzk4ZDhkZTdhLi44NTMxMWUz
NTNlMDUzOGMwNmNjMGMyZTVlNzhjYWFmMmI5NTlmNTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA3LTMxICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2Fu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENvcmUgdXBncmFkZW5lZWRlZCBs
b2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI1
NTgKKworICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgorCisgICAgICAgIFVwZGF0ZSBv
dmVycmlkZGVuIG1ldGhvZHMgdG8gbWF0Y2ggbmV3IHNpZ25hdHVyZXMuCisKKyAgICAgICAgKiB0
ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmFpbGlu
Z0JhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgICogdGVz
dHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgorCiAyMDEyLTA4LTAyICBQZXRlciBCZXZlcmxvbyAg
PHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEFkZCBhIHN0dWIgZm9y
IFdlYlZpZXc6OmdldFRvdWNoSGlnaGxpZ2h0UXVhZHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAppbmRleCBmOGRlNjgyMDI3ZmMy
NTNmNzdmYTU1OTk0YzFlYjBlYmZjMzA0MTU2Li5kOWM1MWM0MzUyM2I0NjMyODczOGI0NWIxNmIz
MzU2NjlhZmYzOWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaApAQCAtNDcsOCArNDcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+SURCQmFja2luZ1N0b3JlKCkge307CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VO
YW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBn
ZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZl
cnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgaW50NjRfdCYgcm93SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRTdHJpbmdWZXJzaW9uLCBp
bnQ2NF90JiBmb3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgc3RyaW5nVmVyc2lvbiwgY29uc3QgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2
NF90JiByb3dJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZl
cnNpb24oaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKSA9IDA7CiAgICAgdmlydHVh
bCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0
IFN0cmluZyYgbmFtZSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkNhbGxiYWNrcy5oCmluZGV4IDg1M2ZmYzcyZDI2MDM5MWZjYzQzNjY0ZDU3M2ZjNWRh
ZTMwMmRjMGYuLjJhNmFmZWYzODMxNWJlNjViMjY2MjhlNTY4ODZkYmEzMmFjNTM2NDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCkBAIC01
OSw3ICs1OSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBjb25zdCBJREJL
ZXlQYXRoJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9u
KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoUHJlZmV0Y2goY29uc3QgVmVj
dG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+
JiBwcmltYXJ5S2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
ID4mIHZhbHVlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgb25CbG9ja2VkKGludDY0X3QgZXhpc3RpbmdWZXJzaW9uKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZChpbnQ2NF90
IG9sZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwCmluZGV4IGU0NTE0N2Q1YzBiMGI2MmIzM2QzZjNjY2Q2M2E2MTdmYjViOGI5OGUuLmQ0Zjhk
MTM3M2NiZmMwMGJhMWFkMTE3MzRhZmY2YmQzYjU1NTdkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwCkBAIC01Miw5ICs1MiwyOSBAQCBwcml2YXRlOgogICAgICAgICA6IG1fY2FsbGJhY2tzKGNh
bGxiYWNrcykKICAgICB7CiAgICAgfQorCiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxs
YmFja3M7CiB9OwogCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3Blbldp
dGhWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdPcGVuV2l0aFZlcnNpb25D
YWxsPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVy
c2lvbkNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBpbnQ2
NF90IHZlcnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdP
cGVuV2l0aFZlcnNpb25DYWxsKGNhbGxiYWNrcywgdmVyc2lvbikpOworICAgIH0KKyAgICBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0K
KyAgICBpbnQ2NF90IHZlcnNpb24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0KKworcHJpdmF0ZToK
KyAgICBQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBpbnQ2NF90IHZlcnNpb24pCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQorICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgIHsKKyAgICB9CisgICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CisgICAgaW50NjRfdCBtX3ZlcnNpb247Cit9
OworCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6IHB1
YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQpAQCAtMTA2LDYgKzEyNiw3IEBAIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5n
U3RvCiAgICAgLCBtX2lkKEludmFsaWRJZCkKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV92
ZXJzaW9uKCIiKQorICAgICwgbV9pbnRWZXJzaW9uKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50
VmVyc2lvbikKICAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVyKQogICAgICwgbV9m
YWN0b3J5KGZhY3RvcnkpCiAgICAgLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IoY29vcmRpbmF0
b3IpCkBAIC0xMTYsMTMgKzEzNywxMyBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogCiBib29s
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbCgpCiB7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gbV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3Zl
cnNpb24sIG1faWQpOwotICAgIEFTU0VSVChzdWNjZXNzID09IChtX2lkICE9IEludmFsaWRJZCkp
OworICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRJREJEYXRhYmFzZU1ldGFE
YXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2ludFZlcnNpb24sIG1faWQpOworICAgIEFTU0VSVF9X
SVRIX01FU1NBR0Uoc3VjY2VzcyA9PSAobV9pZCAhPSBJbnZhbGlkSWQpLCAic3VjY2VzcyA9ICVz
LCBtX2lkID0gJSJQUklkNjQsIHN1Y2Nlc3MgPyAidHJ1ZSIgOiAiZmFsc2UiLCBtX2lkKTsKICAg
ICBpZiAoc3VjY2VzcykgewogICAgICAgICBsb2FkT2JqZWN0U3RvcmVzKCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRh
dGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOworICAgIHJldHVybiBtX2Jh
Y2tpbmdTdG9yZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUsIG1fdmVyc2lvbiwg
bV9pbnRWZXJzaW9uLCBtX2lkKTsKIH0KIAogSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6fklEQkRh
dGFiYXNlQmFja2VuZEltcGwoKQpAQCAtMTM2LDcgKzE1Nyw3IEBAIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpiYWNraW5nU3RvcmUoKSBjb25zdAog
CiBJREJEYXRhYmFzZU1ldGFkYXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkg
Y29uc3QKIHsKLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fbmFtZSwgbV92ZXJz
aW9uLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pOworICAgIElEQkRhdGFiYXNl
TWV0YWRhdGEgbWV0YWRhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faW50VmVyc2lvbik7CiAgICAg
Zm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5i
ZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytpdCkKICAgICAgICAgbWV0YWRh
dGEub2JqZWN0U3RvcmVzLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQtPm1ldGFkYXRhKCkpOwog
ICAgIHJldHVybiBtZXRhZGF0YTsKQEAgLTIxNCw2ICsyMzUsMTAgQEAgdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0
cjxJREJDYWwKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0FCT1JUX0VSUiwgIkNvbm5lY3Rpb24gd2Fz
IGNsb3NlZCBiZWZvcmUgc2V0IHZlcnNpb24gdHJhbnNhY3Rpb24gd2FzIGNyZWF0ZWQiKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG1faW50VmVyc2lvbiAhPSBJREJEYXRhYmFz
ZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIs
IFN0cmluZzo6Zm9ybWF0KCJZb3UgY2FuJ3QgdXNlIHRoZSBzZXRWZXJzaW9uIGZ1bmN0aW9uIGlm
IHlvdSd2ZSBhbHJlYWR5IHNldCB0aGUgdmVyc2lvbiB0aHJvdWdoIGFuIG9wZW4gY2FsbC4gIFRo
ZSBjdXJyZW50IGludGVnZXIgdmVyc2lvbiBpcyAlIlBSSWQ2NCwgbV9pbnRWZXJzaW9uKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBt
X2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmICgqaXQgIT0g
ZGF0YWJhc2VDYWxsYmFja3MpCiAgICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKHZl
cnNpb24pOwpAQCAtMjU5LDYgKzI4NCwyMCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnNldFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZgogICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPih0cmFuc2FjdGlvbikpOwogfQogCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnNldEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgaW50NjRfdCBkYXRhYmFzZUlk
ID0gZGF0YWJhc2UtPmlkKCk7CisgICAgaW50NjRfdCBvbGRWZXJzaW9uID0gZGF0YWJhc2UtPm1f
aW50VmVyc2lvbjsKKyAgICBBU1NFUlQodmVyc2lvbiA+IG9sZFZlcnNpb24pOworICAgIGRhdGFi
YXNlLT5tX2ludFZlcnNpb24gPSB2ZXJzaW9uOworICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2lu
Z1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oZGF0YWJhc2VJZCwgZGF0YWJhc2Ut
Pm1faW50VmVyc2lvbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3
cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOworICAgICAgICB0cmFuc2FjdGlvbi0+
YWJvcnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYWxsYmFja3MtPm9uVXBncmFk
ZU5lZWRlZChvbGRWZXJzaW9uLCB0cmFuc2FjdGlvbiwgZGF0YWJhc2UpOworfQorCiB2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQogewogICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwpAQCAt
Mjc2LDYgKzMxNSwxNiBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9u
RmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbgogICAgIGlmICh0cmFuc2Fj
dGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewogICAgICAg
ICBBU1NFUlQodHJhbnNhY3Rpb24uZ2V0KCkgPT0gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uLmdldCgpKTsKICAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
LmNsZWFyKCk7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5z
YWN0aW9uRmluaXNoZWRBbmRFdmVudHNGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFuc2Fj
dGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAg
ICAvLyBJZiB0aGlzIHdhcyBhbiBvcGVuLXdpdGgtdmVyc2lvbiBjYWxsLCB0aGVyZSB3aWxsIGJl
IGEgInNlY29uZAorICAgICAgICAvLyBoYWxmIiBvcGVuIGNhbGwgd2FpdGluZyBmb3IgdXMgaW4g
cHJvY2Vzc1BlbmRpbmdDYWxscy4KKyAgICAgICAgLy8gRklYTUU6IFdoZW4gd2Ugbm8gbG9uZ2Vy
IHN1cHBvcnQgc2V0VmVyc2lvbiwgYXNzZXJ0IHN1Y2ggYSB0aGluZy4KICAgICAgICAgcHJvY2Vz
c1BlbmRpbmdDYWxscygpOwogICAgIH0KIH0KQEAgLTI4Nyw3ICszMzYsMTYgQEAgaW50MzJfdCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb25uZWN0aW9uQ291bnQoKQogCiB2b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQogewotICAgIEFTU0VSVChjb25u
ZWN0aW9uQ291bnQoKSA8PSAxKTsKKyAgICAvLyBGSVhNRTogQ2hhbmdlIGZyb20gcXVldWUgdG8g
anVzdCBhIHNpbmdsZSBwbGFjZSBob2xkZXIuCisgICAgQVNTRVJUKG1fcGVuZGluZ1NlY29uZEhh
bGZPcGVuV2l0aFZlcnNpb25DYWxscy5zaXplKCkgPD0gMSk7CisgICAgd2hpbGUgKCFtX3BlbmRp
bmdTZWNvbmRIYWxmT3BlbldpdGhWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIFJl
ZlB0cjxQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbD4gcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNh
bGwgPSBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbldpdGhWZXJzaW9uQ2FsbHMudGFrZUZpcnN0KCk7
CisgICAgICAgIEFTU0VSVChwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbC0+dmVyc2lvbigpID09
IG1faW50VmVyc2lvbik7CisgICAgICAgIEFTU0VSVChtX2lkICE9IEludmFsaWRJZCk7CisgICAg
ICAgICsrbV9wZW5kaW5nQ29ubmVjdGlvbkNvdW50OworICAgICAgICBwZW5kaW5nT3BlbldpdGhW
ZXJzaW9uQ2FsbC0+Y2FsbGJhY2tzKCktPm9uU3VjY2Vzcyh0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAogICAgIC8vIFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkIG9yIGFib3J0
ZWQKICAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiA+IHBlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHM7CkBAIC0zMjUsNiArMzgzLDEzIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCiAgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8fCAh
bV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBE
ZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+ID4gcGVuZGluZ09wZW5XaXRo
VmVyc2lvbkNhbGxzOworICAgIG1fcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzLnN3YXAocGVu
ZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzKTsKKyAgICB3aGlsZSAoIXBlbmRpbmdPcGVuV2l0aFZl
cnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdPcGVuV2l0aFZl
cnNpb25DYWxsPiBwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbCA9IHBlbmRpbmdPcGVuV2l0aFZl
cnNpb25DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgb3BlbkNvbm5lY3Rpb25XaXRoVmVyc2lv
bihwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuV2l0
aFZlcnNpb25DYWxsLT52ZXJzaW9uKCkpOworICAgIH0KKwogICAgIC8vIEdpdmVuIHRoZSBjaGVj
ayBhYm92ZSwgaXQgYXBwZWFycyB0aGF0IGNhbGxzIGNhbm5vdCBiZSByZXF1ZXVlZCBieQogICAg
IC8vIG9wZW5Db25uZWN0aW9uLCBidXQgdXNlIGEgZGlmZmVyZW50IHF1ZXVlIGZvciBpdGVyYXRp
b24gdG8gYmUgc2FmZS4KICAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiA+IHBlbmRp
bmdPcGVuQ2FsbHM7CkBAIC0zNTYsNiArNDIxLDEwIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cmVnaXN0ZXJGcm9udGVuZENhbGxiYWNrcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
CiAgICAgQVNTRVJUKG1fcGVuZGluZ0Nvbm5lY3Rpb25Db3VudCk7CiAgICAgLS1tX3BlbmRpbmdD
b25uZWN0aW9uQ291bnQ7CiAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPihjYWxsYmFja3MpKTsKKyAgICAvLyBXZSBnaXZlIG1heCBwcmlv
cml0eSB0byBvcGVuIGNhbGxzIHRoYXQgZm9sbG93IHVwZ3JhZGVuZWVkZWQKKyAgICAvLyBldmVu
dHM7IHRyaWdnZXIgdGhlIHJlc3Qgb2YgdGhlIHF1ZXVlcyB0byBiZSBzZXJ2aWNlZCB3aGVuIHRo
b3NlIG9wZW4KKyAgICAvLyBjYWxscyBhcmUgZmluaXNoZWQuCisgICAgcHJvY2Vzc1BlbmRpbmdD
YWxscygpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9u
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCkBAIC0zNzMsNiArNDQyLDgwIEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB9CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGludDY0X3QgcmVxdWVzdGVk
VmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICAv
LyBGSVhNRTogVGhpcyBmdW5jdGlvbiB3b24ndCBiZSByZWFjaGVkIHVudGlsIGl0J3MgZXhwb3Nl
ZCB0byBzY3JpcHQgaW4KKyAgICAvLyB3YmsudWcvOTI4OTcuCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7CisgICAgQVNTRVJUKGNhbGxiYWNrcyk7CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1Nl
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0
ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgLy8gTm90
ZSB0aGF0IHNvbWUgY29ubmVjdGlvbnMgbWlnaHQgY2xvc2UgaW4gdGhlIHZlcnNpb25jaGFuZ2Ug
ZXZlbnQKKyAgICAgICAgLy8gaGFuZGxlciBmb3Igc29tZSBvdGhlciBjb25uZWN0aW9uLCBhZnRl
ciB3aGljaCBpdHMgb3duIHZlcnNpb25jaGFuZ2UKKyAgICAgICAgLy8gZXZlbnQgc2hvdWxkIG5v
dCBiZSBmaXJlZC4gVGhlIGJhY2tlbmQgZG9lc24ndCB3b3JyeSBhYm91dCB0aGlzLCB3ZQorICAg
ICAgICAvLyBqdXN0IHF1ZXVlIHVwIGEgdmVyc2lvbiBjaGFuZ2UgZXZlbnQgZm9yIGV2ZXJ5IGNv
bm5lY3Rpb24uIFRoZQorICAgICAgICAvLyBmcm9udGVuZCB0YWtlcyBjYXJlIHRvIG9ubHkgZGlz
cGF0Y2ggdG8gb3BlbiBjb25uZWN0aW9ucy4KKyAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5n
ZShtX2ludFZlcnNpb24sIHJlcXVlc3RlZFZlcnNpb24pOworICAgIH0KKyAgICAvLyBUaGUgc3Bl
YyBkaWN0YXRlcyB3ZSB3YWl0IHVudGlsIGFsbCB0aGUgdmVyc2lvbiBjaGFuZ2UgZXZlbnRzIGFy
ZQorICAgIC8vIGRlbGl2ZXJlZCBhbmQgdGhlbiBjaGVjayBtX2RhdGFiYXNlQ2FsbGJhY2tzLmVt
cHR5KCkgYmVmb3JlIHByb2NlZWRpbmcKKyAgICAvLyBvciBmaXJpbmcgYSBibG9ja2VkIGV2ZW50
LCBidXQgaW5zdGVhZCB3ZSBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGhvdworICAgIC8vIHRo
ZSBvbGQgc2V0VmVyc2lvbiAoaW5jb3JyZWN0bHkpIGRpZCBpdC4KKyAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoZSBjYWxsIHRvIG9uQmxvY2tlZCBhbmQgaW5zdGVhZCB3YWl0IHVudGlsIHRoZSBmcm9u
dGVuZAorICAgIC8vIHRlbGxzIHVzIHRoYXQgYWxsIHRoZSBibG9ja2VkIGV2ZW50cyBoYXZlIGJl
ZW4gZGVsaXZlcmVkLiAgU2VlCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcxMTMwCisgICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpID4gMCkKKyAgICAgICAg
Y2FsbGJhY2tzLT5vbkJsb2NrZWQobV9pbnRWZXJzaW9uKTsKKyAgICAvLyBGSVhNRTogQWRkIHRl
c3QgZm9yIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi4KKyAgICBpZiAobV9ydW5u
aW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8IGNvbm5lY3Rpb25Db3VudCgpID4gMCkgewor
ICAgICAgICBtX3BlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5X
aXRoVmVyc2lvbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIHJlcXVlc3RlZFZlcnNpb24pKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RT
dG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CisgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNh
Y3Rpb25JbnRlcmZhY2UgPSB0cmFuc2FjdGlvbihvYmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJU
cmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIGVjKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpm
cm9tKHRyYW5zYWN0aW9uSW50ZXJmYWNlLmdldCgpKTsKKyAgICBBU1NFUlQoIWVjKTsKKworICAg
IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7CisgICAgUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBpbnRWZXJzaW9uVGFzayA9IGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50VmVyc2lvbklu
dGVybmFsLCBkYXRhYmFzZSwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlv
bik7CisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyByZXNldCB0aGUgaW50ZWdlciB2ZXJzaW9uIGFz
IHdlbGwuCisgICAgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiByZXNl
dFZlcnNpb25PbkFib3J0VGFzayA9IGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6cmVzZXRWZXJzaW9uLCBkYXRhYmFzZSwgbV92ZXJzaW9uKTsKKyAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soaW50VmVyc2lvblRhc2ssIHJlc2V0VmVyc2lvbk9uQWJv
cnRUYXNrKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05f
SU5BQ1RJVkVfRVJSOworICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb25DYWxs
cy5hcHBlbmQoUGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIHJl
cXVlc3RlZFZlcnNpb24pKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVu
Q29ubmVjdGlvbldpdGhWZXJzaW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MsIGludDY0X3QgdmVyc2lvbikKK3sKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5
KCkgfHwgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGVuZGluZ09wZW5XaXRoVmVyc2lv
bkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y3JlYXRlKGNhbGxiYWNr
cywgdmVyc2lvbikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2lkID09IElu
dmFsaWRJZCkgeworICAgICAgICBpZiAob3BlbkludGVybmFsKCkpCisgICAgICAgICAgICBBU1NF
UlQobV9pbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbik7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5h
bCBlcnJvci4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKHZlcnNpb24gPiBtX2ludFZlcnNpb24pIHsKKyAgICAgICAgcnVuSW50VmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uKHZlcnNpb24sIGNhbGxiYWNrcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKHZlcnNpb24gPCBtX2ludFZlcnNpb24pIHsKKyAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VkVS
X0VSUiwgU3RyaW5nOjpmb3JtYXQoIlRoZSByZXF1ZXN0ZWQgdmVyc2lvbiAoJSJQUklkNjQiKSBp
cyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNpb24gKCUiUFJJZDY0IikuIiwgdmVyc2lvbiwg
bV9pbnRWZXJzaW9uKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCh2ZXJz
aW9uID09IG1faW50VmVyc2lvbik7CisgICAgKyttX3BlbmRpbmdDb25uZWN0aW9uQ291bnQ7Cisg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxi
YWNrcykKIHsKICAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFt
X3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CkBAIC0zODgsMTcgKzUzMSwxOSBA
QCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFjawogICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9j
a2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQogICAgIC8vIFZlcnNp
b25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKLSAgICBp
ZiAoIW1fZGF0YWJhc2VDYWxsYmFja3NTZXQuaXNFbXB0eSgpKSB7CisgICAgaWYgKGNvbm5lY3Rp
b25Db3VudCgpID49IDEpIHsKICAgICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBl
bmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7CiAgICAgICAgIGNhbGxiYWNrcy0+
b25CbG9ja2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgQVNTRVJUKG1fYmFja2lu
Z1N0b3JlKTsKICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5kZWxldGVEYXRhYmFzZShtX25hbWUp
KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fdmVyc2lvbiA9ICIiOwogICAgIG1faWQgPSBJ
bnZhbGlkSWQ7CisgICAgbV9pbnRWZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRW
ZXJzaW9uOwogICAgIG1fb2JqZWN0U3RvcmVzLmNsZWFyKCk7CiAgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CiB9CkBAIC00MTEsMTIg
KzU1NiwxNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3NlKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcwogICAgIGlmIChjb25uZWN0aW9uQ291
bnQoKSA+IDEpCiAgICAgICAgIHJldHVybjsKIAorICAgIFRyYW5zYWN0aW9uU2V0IHRyYW5zYWN0
aW9ucyhtX3RyYW5zYWN0aW9ucyk7CiAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwogCi0gICAg
aWYgKCFjb25uZWN0aW9uQ291bnQoKSkgewotICAgICAgICBUcmFuc2FjdGlvblNldCB0cmFuc2Fj
dGlvbnMobV90cmFuc2FjdGlvbnMpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5zaXplKCkg
LSB0cmFuc2FjdGlvbnMuc2l6ZSgpIDw9IDEpOworICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIHJl
bHlpbmcgb24gdHJhbnNhY3Rpb25zLnNpemUoKSwgbWFrZSBjb25uZWN0aW9uQ291bnQKKyAgICAv
LyBhd2FyZSBvZiBpbi1mbGlnaHQgdXBncmFkZW5lZWRlZCBldmVudHMgYXMgd2VsbCBhcyBpbi1m
bGlnaHQgc3VjY2VzcworICAgIC8vIGV2ZW50cy4KKyAgICBpZiAoIWNvbm5lY3Rpb25Db3VudCgp
ICYmICFtX3BlbmRpbmdEZWxldGVDYWxscy5zaXplKCkgJiYgbV90cmFuc2FjdGlvbnMuc2l6ZSgp
ID09IHRyYW5zYWN0aW9ucy5zaXplKCkpIHsKICAgICAgICAgZm9yIChUcmFuc2FjdGlvblNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSB0cmFuc2FjdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNhY3Rp
b25zLmVuZCgpOyArK2l0KQogICAgICAgICAgICAgKCppdCktPmFib3J0KCk7CisKICAgICAgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CiAKICAgICAgICAgbV9iYWNraW5nU3Rv
cmUuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAppbmRleCA4MDVlYjYxN2ZiMzIxNGQwYmJiMjU3
NWYzMmJmODk1YTQ1ZjEwZDFkLi4yMjBkZTUxMTMzZjc3ZDFjMTRlY2IzMzM4OTJmMmRjNmI2MGVi
ODM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgcmVnaXN0ZXJGcm9udGVuZENhbGxiYWNrcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPik7CiAgICAgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4pOworICAgIHZvaWQgb3BlbkNvbm5lY3Rpb25XaXRoVmVyc2lvbihQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIGludDY0X3QgdmVyc2lvbik7CiAgICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pOwogCiAgICAgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlCkBAIC03MSwxMSArNzIsMTMgQEAgcHVibGljOgogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICB2b2lkIHRyYW5zYWN0aW9u
RmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgdm9p
ZCB0cmFuc2FjdGlvbkZpbmlzaGVkQW5kRXZlbnRzRmlyZWQoUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPik7CiAKIHByaXZhdGU6CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IqLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcm
IHVuaXF1ZUlkZW50aWZpZXIpOwogCiAgICAgYm9vbCBvcGVuSW50ZXJuYWwoKTsKKyAgICB2b2lk
IHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgdm9pZCBsb2FkT2JqZWN0U3RvcmVzKCk7
CiAgICAgaW50MzJfdCBjb25uZWN0aW9uQ291bnQoKTsKICAgICB2b2lkIHByb2Nlc3NQZW5kaW5n
Q2FsbHMoKTsKQEAgLTgzLDYgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBjcmVh
dGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICBzdGF0
aWMgdm9pZCBkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
KTsKICAgICBzdGF0aWMgdm9pZCBzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbnRWZXJzaW9uSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4sIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogCiAgICAgLy8gVGhlc2UgYXJlIHVz
ZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBhYm9ydCB0YXNrcy4KICAgICBzdGF0aWMgdm9p
ZCByZW1vdmVPYmplY3RTdG9yZUZyb21NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4pOwpAQCAtOTMsNiArOTcsNyBAQCBwcml2YXRlOgogICAgIGludDY0X3QgbV9p
ZDsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX3ZlcnNpb247CisgICAgaW50NjRf
dCBtX2ludFZlcnNpb247CiAKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAgIC8vIFRoaXMg
bWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhlIGZhY3RvcnkncyBsaWZldGlt
ZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBiZXR0ZXIgdG8gYmUgY29uc2Vy
dml0aXZlIHRoYW4gc29ycnkuCkBAIC0xMTMsNiArMTE4LDEwIEBAIHByaXZhdGU6CiAgICAgY2xh
c3MgUGVuZGluZ09wZW5DYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4g
bV9wZW5kaW5nT3BlbkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ09wZW5XaXRoVmVyc2lvbkNh
bGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsPiA+IG1fcGVu
ZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzOworICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3Blbldp
dGhWZXJzaW9uQ2FsbD4gPiBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbldpdGhWZXJzaW9uQ2FsbHM7
CisKICAgICBjbGFzcyBQZW5kaW5nRGVsZXRlQ2FsbDsKICAgICBEZXF1ZTxSZWZQdHI8UGVuZGlu
Z0RlbGV0ZUNhbGw+ID4gbV9wZW5kaW5nRGVsZXRlQ2FsbHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCmluZGV4
IGIzZjI0NGY1MTZiNjk4N2VhMTE5Y2JmNzAxOWI3YjU0Mzc1ZjEyYmYuLjE2YTllYTZjNTA4YjBk
OTJiNjFlNDk5N2M1NDMwMTMyYTZkMmFjYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaApAQCAtMzgsNiArMzgs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCRGF0YWJhc2VDYWxsYmFja3MoKSB7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIG9uVmVyc2lvbkNoYW5nZShpbnQ2NF90IGN1cnJlbnRWZXJz
aW9uLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IGRm
YjE0NTdhMzA2ZGFhN2E1NjhjMjFhZjZlZmEzNDU0NmNlM2ZmNDYuLjYzYmQ0NzgzZTU0YWUzMWY0
ZDQ5NTk2ZjNiNjBkOWFmODI1NGM5ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApAQCAtMTUxLDMwICsxNTIsMzQg
QEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFMKIAogdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6
Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKKyAgICAv
LyBGSVhNRTogTWFrZSB0aGlzIGEgcGFyYW1ldGVyIGFuZCBwbHVtYiB0aHJvdWdoIGZyb20gamF2
YXNjcmlwdC4KKyAgICBpbnQ2NF90IHZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0lu
dFZlcnNpb247CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IHBy
cFNlY3VyaXR5T3JpZ2luOwogICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29t
cHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwogCisgICAg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZDsKICAgICBJREJE
YXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmlu
ZCh1bmlxdWVJZGVudGlmaWVyKTsKLSAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAu
ZW5kKCkpIHsKLSAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3ZSBoYXZl
IHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nCi0gICAgICAgIC8vIHNldFZlcnNpb24gY2FsbHMgdG8g
Y29tcGxldGUuCi0gICAgICAgIGl0LT5zZWNvbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9t
IG5vdyBvbiBzaG91bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KLSAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3Jp
Z2luLCBkYXRhRGlyZWN0b3J5KTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAoaXQgPT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKKyAg
ICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdT
dG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CisgICAgICAgIGlmICghYmFja2lu
Z1N0b3JlKSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVy
cm9yLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFi
YXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5n
U3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVl
SWRlbnRpZmllcik7CisgICAgICAgIGlmIChkYXRhYmFzZUJhY2tlbmQpCisgICAgICAgICAgICBt
X2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5k
LmdldCgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VS
UiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0gZWxzZQorICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBpdC0+c2Vjb25kOwogCi0gICAg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNh
Y3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYg
KGRhdGFiYXNlQmFja2VuZCkgewotICAgICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5p
cXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICBpZiAodmVyc2lvbiA9
PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCiAgICAgICAgIGRhdGFiYXNlQmFj
a2VuZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgZWxzZQorICAgICAg
ICBkYXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uV2l0aFZlcnNpb24oY2FsbGJhY2tzLCB2
ZXJzaW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNw
cAppbmRleCAwNTEzYzM1MzNmY2FiMGZmODUyZGMwYTkxMzQ0NTdlY2YzNjI5N2YzLi43NjI4YTgw
ODlhMGMxMjIyNjkwZjdmYmZmNTVjYjVkYzgzMGJkMzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNw
cApAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0
YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykKICAgICB9CiB9CiAKLWJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQorYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFN0cmluZ1ZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50VmVy
c2lvbiwgaW50NjRfdCYgZm91bmRJZCkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0g
RGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKIApAQCAtMjQyLDcg
KzI0Miw3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYKICAgICBpZiAoIW9rKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjplbmNvZGUoZm91bmRJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNp
b24pLCBmb3VuZFZlcnNpb24pOworICAgIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFi
YXNlTWV0YURhdGFLZXk6OmVuY29kZShmb3VuZElkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2Vy
VmVyc2lvbiksIGZvdW5kU3RyaW5nVmVyc2lvbik7CiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0yNjQsNyArMjY0LDcgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3RGF0
YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQogICAgIHJldHVybiBkYXRhYmFzZUlkOwogfQog
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lk
KQorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZl
cnNpb24sIGludDY0X3QmIHJvd0lkKQogewogICAgIHJvd0lkID0gZ2V0TmV3RGF0YWJhc2VJZCht
X2RiLmdldCgpKTsKICAgICBpZiAocm93SWQgPCAwKQpAQCAtMjc4LDYgKzI3OCwxMiBAQCBib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lk
LCBpbnQ2NF90IGludFZlcnNpb24pCit7CisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhY3R1YWxs
eSBkbyBzb21ldGhpbmcuIGh0dHA6Ly93a2IudWcvOTI4ODMKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRh
KGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKICAgICBBU1NFUlQobV9j
dXJyZW50VHJhbnNhY3Rpb24pOwpAQCAtMzA1LDcgKzMxMSw4IEBAIGJvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKQogCiAgICAgaW50
NjRfdCBkYXRhYmFzZUlkOwogICAgIFN0cmluZyB2ZXJzaW9uOwotICAgIGlmICghZ2V0SURCRGF0
YWJhc2VNZXRhRGF0YShuYW1lLCB2ZXJzaW9uLCBkYXRhYmFzZUlkKSkgeworICAgIGludDY0X3Qg
aW50VmVyc2lvbjsKKyAgICBpZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVyc2lv
biwgaW50VmVyc2lvbiwgZGF0YWJhc2VJZCkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxi
YWNrKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAppbmRl
eCAwYmU5MzRmZmRhOWJjZjgwOTFkNTM0MTBhNmFiY2M4MDBmNTkwZDM2Li40NzllZmVjYzA1YWJi
MTYwODMzMTUyYjIyOGVjZTZlZTc3NjYzOWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC00NSw5
ICs0NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgp
OwogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZv
dW5kTmFtZXMpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0
IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOwot
ICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCk7CisgICAgdmlydHVh
bCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcm
IGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJbnRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElk
KTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2
NF90JiByb3dJZCk7CiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEo
aW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVy
c2lvbik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJ
ZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMs
IFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1
dG9JbmNyZW1lbnRGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCmluZGV4IDcwZjMz
NjdhYmZiYzFhMDRhOWZlY2ExY2FiNGU0MzMwZGQ2MzczNDEuLjFiYmQyM2I1NmJiYTBmOWU2ZWYz
NDQ5OWRlYjgwNmIzYzA4NDcwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCkBAIC0y
MjcsNiArMjI3LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQog
ICAgIGVsc2UKICAgICAgICAgbV9jYWxsYmFja3MtPm9uQWJvcnQoKTsKIAorICAgIG1fZGF0YWJh
c2UtPnRyYW5zYWN0aW9uRmluaXNoZWRBbmRFdmVudHNGaXJlZCh0aGlzKTsKKwogICAgIG1fZGF0
YWJhc2UgPSAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAKaW5kZXggZDllM2Q2OTdiMTk3Yzc0MDZmNjNiYWVi
NDgzOTMxYjRlYWM5NTA4NS4uOTFkZjEyNmE1ZmI4ZmI2N2JjNmVhYWM1MWQ5NDdlOWRhNDFkMDlh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29y
cnVwdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRP
bkNvcnJ1cHRUZXN0LmNwcApAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZhaWxpbmdCYWNraW5nU3RvcmUpOwogICAgIH0KLSAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmLCBpbnQ2NF90JikKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBpbnQ2NF90LCBpbnQ2NF90JikK
ICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IDUzNmQ3ODViOTNh
ZWU0M2I5ZjUzMzI1MjVjNjNlYzc5ZTcwOTU5YmYuLjdlZDRlNjdlMzViZDcwMDMxZmY2Mjg4OWI5
NzY1Zjk5MDk0YjliMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
SURCRmFrZUJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
SURCRmFrZUJhY2tpbmdTdG9yZS5oCkBAIC0zMyw5ICszMywxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBJREJGYWtlQmFja2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmlu
Zz4mIGZvdW5kTmFtZXMpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGlu
dDY0X3QmIGZvdW5kSWQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJbnRWZXJzaW9uLCBpbnQ2
NF90JiBmb3VuZElkKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uLCBjb25zdCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKSBP
VkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFi
YXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSBPVkVSUklE
RSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUlu
dFZlcnNpb24oaW50NjRfdCByb3dJZCwgaW50NjRfdCB2ZXJzaW9uKSBPVkVSUklERSB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0
T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElk
cywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRL
ZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgT1ZFUlJJREUg
eyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156451</attachid>
            <date>2012-08-03 13:58:54 -0700</date>
            <delta_ts>2012-08-03 17:28:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92558-20120803135834.patch</filename>
            <type>text/plain</type>
            <size>36965</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTcwNWFiNTY0N2FiOTk2
NjEyMDY0Y2U3N2YzODdmYjM0MWYwMWI1Yy4uODQ0ZGUyZDgyODE4ZTU2OGNmMmE1MDU5ZTg2YTNj
OTZkM2I5M2MxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTA3LTMxICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENv
cmUgdXBncmFkZW5lZWRlZCBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI1NTgKKworICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgor
CisgICAgICAgIFRoaXMgaXMgdGhlIGJhY2tlbmQgd2Via2l0IGxvZ2ljIG5lZWRlZCBmb3IgaW50
ZWdlciB2ZXJzaW9ucy4gVGhlIHJlc3QKKyAgICAgICAgaXMgaW4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg5NTA1LgorCisgICAgICAgIEkgdHJpZWQgdG8gbWFrZSB1
c2Ugb2YgdGhlIGV4aXN0aW5nIHByb2Nlc3NQZW5kaW5nQ2FsbHMgYW5kIGFkZGVkIHR3bworICAg
ICAgICBtb3JlIHF1ZXVlcywgcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzIGFuZAorICAgICAg
ICBwZW5kaW5nU2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbkNhbGxzLiBUaGUgInNlY29uZCBoYWxm
IiByZWZlcnMgdG8KKyAgICAgICAgaG93IHRoZXJlIGFyZSB0d28gZXZlbnRzIHRoYXQgbmVlZCB0
byBiZSBmaXJlZCBpbiByZXNwb25zZSB0byBhbgorICAgICAgICBvcGVuLXdpdGgtdmVyc2lvbiBj
YWxsLiBUaGUgInNlY29uZCBoYWxmIiBxdWV1ZSBob2xkcyB0aGUgb3BlbgorICAgICAgICByZXF1
ZXN0cyB0aGF0IHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgdGhlIGNhbGxlcidzIHVwZ3JhZGVu
ZWVkZWQKKyAgICAgICAgaGFuZGxlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoZXJlIGFy
ZSBzbyBtYW55IHRoZXkgYXJlIGluIHRoZWlyIG93biBwYXRjaDoKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNTYwCisKKyAgICAgICAgVGhvdWdoIHRo
aXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYW55IGV4cGVjdGVkIGJlaGF2aW9yIGFueXdheSwgbGFj
ayBvZgorICAgICAgICByZWdyZXNzaW9ucyBpcyB3aGF0IHdlJ3JlIGhvcGluZyBmb3IgaGVyZS4K
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAg
ICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxs
YmFja3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25CbG9ja2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrczo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCk6CisgICAgICAgIChJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhWZXJzaW9u
Q2FsbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OnZl
cnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGlu
Z09wZW5XaXRoVmVyc2lvbkNhbGw6OlBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
SURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6bWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kRXZlbnRzRmly
ZWQpOgorICAgICAgICBXaGVuIGFuIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaXMgZmlyZWQgaW4gcmVz
cG9uc2UgdG8gYW4KKyAgICAgICAgb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlIHZlcnNpb24g
Y2hhbmdlIHRyYW5zYWN0aW9uIG11c3QgcmVjZWl2ZSBpdHMKKyAgICAgICAgY29tcGxldGUgZXZl
bnQgYmVmb3JlIHByb2Nlc3NQZW5kaW5nQ2FsbHMgZmlyZXMgYSBzdWNjZXNzIGV2ZW50IGF0Cisg
ICAgICAgIElEQk9wZW5EQlJlcXVlc3QuIEluIHRoZSBmdXR1cmUgdGhpcyBzaG91bGQgcHJvYmFi
bHkgYmUgY2hhbmdlZAorICAgICAgICBpbnN0ZWFkIHRvIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRB
Ym9ydEZpcmVkIGFuZAorICAgICAgICB0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJl
ZCBzbyB0aGF0IHdlJ2xsIGtub3cgdG8gZmlyZSBhCisgICAgICAgIHN1Y2Nlc3Mgb3IgZXJyb3Ig
ZXZlbnQgYXQgSURCT3BlbkRCUmVxdWVzdC4gQ3VycmVudGx5LCBpbnN0ZWFkIG9mCisgICAgICAg
IGZpcmluZyBlcnJvciB3aGVuIHRoZXJlJ3MgYW4gYWJvcnQsIHdlIGRvbid0IGZpcmUgYW55dGhp
bmcuCisKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQ
ZW5kaW5nQ2FsbHMpOgorICAgICAgICBOb3cgdGhhdCB0aGlzIGlzIGNhbGxlZCBhZnRlciBhIGNv
bm5lY3Rpb24gaXMgb3BlbmVkLCB3ZSB1bmZvcnR1bmF0ZWx5CisgICAgICAgIGxvc2UgdGhlIGlu
dmFyaWFudCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGV4aXN0aW5nIGNvbm5lY3Rpb24gd2hlbiB0
aGlzCisgICAgICAgIGlzIGNhbGxlZCwgYnV0IG5vdGhpbmcgaW5zaWRlIHRoaXMgZnVuY3Rpb24g
YWN0dWFsbHkgcmVsaWVkIG9uIHRoYXQuCisgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHNlY29u
ZEhhbGZPcGVuIGNhbGxzIG9ubHkgZXZlciBuZWVkIHRvIGJlIHNlcnZpY2VkCisgICAgICAgIGlu
IG9uZSBwbGFjZTogcmlnaHQgYWZ0ZXIgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiBjb21w
bGV0ZXMsIHNvCisgICAgICAgIGl0IGNvdWxkIGJlIG1vdmVkIG91dCBvZiBoZXJlLgorCisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZWdpc3RlckZyb250ZW5kQ2Fs
bGJhY2tzKToKKyAgICAgICAgTm93IHRoYXQgc2V0VmVyc2lvbiBhbmQgZGVsZXRlRGF0YWJhc2Ug
Y2FsbHMgYXJlIHF1ZXVlZCB1cCBiZWhpbmQKKyAgICAgICAgc2Vjb25kSGFsZk9wZW4gY2FsbHMs
IHdlIGhhdmUgdG8gc2VydmljZSB0aG9zZSBxdWV1ZXMgd2hlbgorICAgICAgICBzZWNvbmRIYWxm
T3BlbiBjYWxscyBjb21wbGV0ZSwgd2hpY2ggaXMgaGVyZS4gIFNvIGNhbGwKKyAgICAgICAgcHJv
Y2Vzc1BlbmRpbmdDYWxscygpLgorCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb25XaXRoVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbG9zZSk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAg
ICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VDYWxsYmFja3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQ2Fs
bGJhY2tzOjpvblZlcnNpb25DaGFuZ2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW4pOgorICAgICAgICBUaGlzIGlzIHJlZmFjdG9yZWQgc29tZSBzbyB0aGF0
IHRoZSBjYWxsIHRvIG9wZW5Db25lY3Rpb257V2l0aFZlcnNpb259CisgICAgICAgIGhhcHBlbnMg
b25jZSwgYXQgdGhlIGVuZC4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1p
dCk6CisgICAgICAgIFNlZSBhYm92ZSBjb21tZW50cyBhYm91dCB0cmFuc2FjdGlvbkZpbmlzaGVk
QW5kRXZlbnRzRmlyZWQuIEkgdHJpZWQKKyAgICAgICAgbW92aW5nIHRoZSBjYWxsIHRvIHRyYW5z
YWN0aW9uRmluaXNoZWQgYWZ0ZXIgdGhlIGV2ZW50cyB3ZXJlIGZpcmVkIGJ1dAorICAgICAgICB0
aGF0IGZhaWxlZCBzb21lIGFzc2VydHMuIEJ1dCBjaGFuZ2luZyB0aG9zZSBhc3NlcnRzIGlzIHN0
aWxsIGFuCisgICAgICAgIGFsdGVybmF0aXZlIHRvIHNwbGl0dGluZyB1cCB0cmFuc2FjdGlvbkZp
bmlzaGVkIGFzIGlzIGRvbmUgaGVyZS4KKwogMjAxMi0wOC0wMiAgU2hlcmlmZiBCb3QgIDx3ZWJr
aXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjEyNDU0MC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDE2YmJjMzY3ZTQwMjEz
ODgzZGY1MWMzYWFkODhhNjMyMDEyZTBmNS4uN2Q3NTFmN2MwNzhiNzFjNjdmYTg3OWNmOTViMmY1
MTYwYTVmMmEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAor
MjAxMi0wNy0zMSAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgSW5kZXhlZERCOiBDb3JlIHVwZ3JhZGVuZWVkZWQgbG9naWMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNTU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgT2phbiBWYWZhaS4KKworICAgICAgICBVcGRhdGUgb3ZlcnJpZGRlbiBtZXRob2RzIHRvIG1h
dGNoIG5ldyBzaWduYXR1cmVzLgorCisgICAgICAgICogdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRU
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZhaWxpbmdCYWNraW5nU3RvcmU6OmNyZWF0ZUlE
QkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUu
aDoKKwogMjAxMi0wOC0wMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyNDU0MC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXgg
ZjhkZTY4MjAyN2ZjMjUzZjc3ZmE1NTk5NGMxZWIwZWJmYzMwNDE1Ni4uOTBjODVjMTgwYTEwNGE3
ZDk3Yjg1MzBhODA5MDk1OTM4YjY0ZTRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTQ3LDggKzQ3LDkgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgpIHt9OwogCiAgICAgdmlydHVhbCB2b2lk
IGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0
cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdl
dElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kU3Ry
aW5nVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJbnRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZlcnNpb24sIGludDY0X3QgaW50VmVyc2lv
biwgaW50NjRfdCYgcm93SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJh
c2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFz
ZShjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaAppbmRleCA4NTNmZmM3MmQyNjAzOTFmY2M0MzY2NGQ1
NzNmYzVkYWUzMDJkYzBmLi44ZTg1YzQyMDE5ZDE3NmMxZWNjNjdlODQwOGE4OTE0OTE2Y2E5NmVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFj
a3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3Mu
aApAQCAtMzAsOSArMzAsMTEgQEAKICNkZWZpbmUgSURCQ2FsbGJhY2tzX2gKIAogI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2Uu
aCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAj
aW5jbHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNDAsOSArNDIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOwogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOwot
Y2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwogCiAvLyBGSVhNRTogQWxsIGNo
aWxkIGNsYXNzZXMgbmVlZCB0byBiZSBtYWRlIHRocmVhZHNhZmUuCiBjbGFzcyBJREJDYWxsYmFj
a3MgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPiB7CkBAIC01OSw3
ICs1OSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBjb25zdCBJREJLZXlQ
YXRoJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NXaXRoUHJlZmV0Y2goY29uc3QgVmVjdG9y
PFJlZlB0cjxJREJLZXk+ID4mIGtleXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiBw
cmltYXJ5S2V5cywgY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4m
IHZhbHVlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIG9uQmxvY2tlZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgb25CbG9ja2VkKGludDY0X3QgZXhpc3RpbmdWZXJzaW9uKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZChpbnQ2NF90IG9s
ZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
CmluZGV4IGU0NTE0N2Q1YzBiMGI2MmIzM2QzZjNjY2Q2M2E2MTdmYjViOGI5OGUuLmEzMTI1MWM4
ZDYzNzg1MGNmODdhZDhjYTRjMmU5ZWUxYTVhMjhlYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
CkBAIC01Miw5ICs1MiwyOSBAQCBwcml2YXRlOgogICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxi
YWNrcykKICAgICB7CiAgICAgfQorCiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7CiB9OwogCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbldpdGhW
ZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxs
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVyc2lv
bkNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBpbnQ2NF90
IHZlcnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdPcGVu
V2l0aFZlcnNpb25DYWxsKGNhbGxiYWNrcywgdmVyc2lvbikpOworICAgIH0KKyAgICBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KKyAg
ICBpbnQ2NF90IHZlcnNpb24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0KKworcHJpdmF0ZToKKyAg
ICBQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBpbnQ2NF90IHZlcnNpb24pCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tz
KQorICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CisgICAgaW50NjRfdCBtX3ZlcnNpb247Cit9Owor
CiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6IHB1Ymxp
YyBSZWZDb3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQpAQCAtMTA2LDYgKzEyNiw3IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3Rv
CiAgICAgLCBtX2lkKEludmFsaWRJZCkKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV92ZXJz
aW9uKCIiKQorICAgICwgbV9pbnRWZXJzaW9uKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVy
c2lvbikKICAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVyKQogICAgICwgbV9mYWN0
b3J5KGZhY3RvcnkpCiAgICAgLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IoY29vcmRpbmF0b3Ip
CkBAIC0xMTYsMTMgKzEzNywxMyBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogCiBib29sIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbCgpCiB7Ci0gICAgYm9vbCBzdWNjZXNz
ID0gbV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNp
b24sIG1faWQpOwotICAgIEFTU0VSVChzdWNjZXNzID09IChtX2lkICE9IEludmFsaWRJZCkpOwor
ICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5nZXRJREJEYXRhYmFzZU1ldGFEYXRh
KG1fbmFtZSwgbV92ZXJzaW9uLCBtX2ludFZlcnNpb24sIG1faWQpOworICAgIEFTU0VSVF9XSVRI
X01FU1NBR0Uoc3VjY2VzcyA9PSAobV9pZCAhPSBJbnZhbGlkSWQpLCAic3VjY2VzcyA9ICVzLCBt
X2lkID0gJWxsZCIsIHN1Y2Nlc3MgPyAidHJ1ZSIgOiAiZmFsc2UiLCBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KG1faWQpKTsKICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICBsb2FkT2JqZWN0U3Rv
cmVzKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gbV9iYWNraW5n
U3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQp
OworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSht
X25hbWUsIG1fdmVyc2lvbiwgbV9pbnRWZXJzaW9uLCBtX2lkKTsKIH0KIAogSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6fklEQkRhdGFiYXNlQmFja2VuZEltcGwoKQpAQCAtMTM2LDcgKzE1Nyw3IEBA
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpiYWNr
aW5nU3RvcmUoKSBjb25zdAogCiBJREJEYXRhYmFzZU1ldGFkYXRhIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKIHsKLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFk
YXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24p
OworICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1f
aW50VmVyc2lvbik7CiAgICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX29iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsgKytp
dCkKICAgICAgICAgbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNv
bmQtPm1ldGFkYXRhKCkpOwogICAgIHJldHVybiBtZXRhZGF0YTsKQEAgLTIxNCw2ICsyMzUsMTAg
QEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0FCT1JUX0VS
UiwgIkNvbm5lY3Rpb24gd2FzIGNsb3NlZCBiZWZvcmUgc2V0IHZlcnNpb24gdHJhbnNhY3Rpb24g
d2FzIGNyZWF0ZWQiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG1faW50VmVy
c2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pIHsKKyAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VU5LTk9XTl9FUlIsIFN0cmluZzo6Zm9ybWF0KCJZb3UgY2FuJ3QgdXNlIHRoZSBzZXRW
ZXJzaW9uIGZ1bmN0aW9uIGlmIHlvdSd2ZSBhbHJlYWR5IHNldCB0aGUgdmVyc2lvbiB0aHJvdWdo
IGFuIG9wZW4gY2FsbC4gIFRoZSBjdXJyZW50IGludGVnZXIgdmVyc2lvbiBpcyAlbGxkIiwgc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPihtX2ludFZlcnNpb24pKSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3Mp
CiAgICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOwpAQCAtMjU5LDYg
KzI4NCwyMCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZgogICAgIGNhbGxiYWNrcy0+b25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPih0cmFuc2FjdGlv
bikpOwogfQogCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEludFZlcnNpb25JbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
dHJhbnNhY3Rpb24pCit7CisgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0YWJhc2UtPmlkKCk7
CisgICAgaW50NjRfdCBvbGRWZXJzaW9uID0gZGF0YWJhc2UtPm1faW50VmVyc2lvbjsKKyAgICBB
U1NFUlQodmVyc2lvbiA+IG9sZFZlcnNpb24pOworICAgIGRhdGFiYXNlLT5tX2ludFZlcnNpb24g
PSB2ZXJzaW9uOworICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51cGRhdGVJREJE
YXRhYmFzZUludFZlcnNpb24oZGF0YWJhc2VJZCwgZGF0YWJhc2UtPm1faW50VmVyc2lvbikpIHsK
KyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3Rh
YmxlIHN0b3JhZ2UuIikpOworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChvbGRWZXJzaW9u
LCB0cmFuc2FjdGlvbiwgZGF0YWJhc2UpOworfQorCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OnRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHBycFRyYW5zYWN0aW9uKQogewogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwpAQCAtMjc2LDYgKzMxNSwxNiBAQCB2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWQoUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbgogICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewogICAgICAgICBBU1NFUlQodHJhbnNhY3Rp
b24uZ2V0KCkgPT0gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKICAg
ICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgfQor
fQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRF
dmVudHNGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5z
YWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2Fj
dGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAgICAvLyBJZiB0aGlzIHdhcyBh
biBvcGVuLXdpdGgtdmVyc2lvbiBjYWxsLCB0aGVyZSB3aWxsIGJlIGEgInNlY29uZAorICAgICAg
ICAvLyBoYWxmIiBvcGVuIGNhbGwgd2FpdGluZyBmb3IgdXMgaW4gcHJvY2Vzc1BlbmRpbmdDYWxs
cy4KKyAgICAgICAgLy8gRklYTUU6IFdoZW4gd2Ugbm8gbG9uZ2VyIHN1cHBvcnQgc2V0VmVyc2lv
biwgYXNzZXJ0IHN1Y2ggYSB0aGluZy4KICAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwog
ICAgIH0KIH0KQEAgLTI4Nyw3ICszMzYsMTYgQEAgaW50MzJfdCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpjb25uZWN0aW9uQ291bnQoKQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnBy
b2Nlc3NQZW5kaW5nQ2FsbHMoKQogewotICAgIEFTU0VSVChjb25uZWN0aW9uQ291bnQoKSA8PSAx
KTsKKyAgICAvLyBGSVhNRTogQ2hhbmdlIGZyb20gcXVldWUgdG8ganVzdCBhIHNpbmdsZSBwbGFj
ZSBob2xkZXIuCisgICAgQVNTRVJUKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb25D
YWxscy5zaXplKCkgPD0gMSk7CisgICAgd2hpbGUgKCFtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbldp
dGhWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nT3Blbldp
dGhWZXJzaW9uQ2FsbD4gcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGwgPSBtX3BlbmRpbmdTZWNv
bmRIYWxmT3BlbldpdGhWZXJzaW9uQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIEFTU0VSVChw
ZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbC0+dmVyc2lvbigpID09IG1faW50VmVyc2lvbik7Cisg
ICAgICAgIEFTU0VSVChtX2lkICE9IEludmFsaWRJZCk7CisgICAgICAgICsrbV9wZW5kaW5nQ29u
bmVjdGlvbkNvdW50OworICAgICAgICBwZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbC0+Y2FsbGJh
Y2tzKCktPm9uU3VjY2Vzcyh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8v
IFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkIG9yIGFib3J0ZWQKICAgICBEZXF1ZTxSZWZQ
dHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiA+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbHM7CkBAIC0z
MjUsNiArMzgzLDEzIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRp
bmdDYWxscygpCiAgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAh
bV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5nRGVsZXRlQ2Fs
bHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGlu
Z09wZW5XaXRoVmVyc2lvbkNhbGw+ID4gcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzOworICAg
IG1fcGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGxzLnN3YXAocGVuZGluZ09wZW5XaXRoVmVyc2lv
bkNhbGxzKTsKKyAgICB3aGlsZSAoIXBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsPiBwZW5kaW5n
T3BlbldpdGhWZXJzaW9uQ2FsbCA9IHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxscy50YWtlRmly
c3QoKTsKKyAgICAgICAgb3BlbkNvbm5lY3Rpb25XaXRoVmVyc2lvbihwZW5kaW5nT3BlbldpdGhW
ZXJzaW9uQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsLT52ZXJz
aW9uKCkpOworICAgIH0KKwogICAgIC8vIEdpdmVuIHRoZSBjaGVjayBhYm92ZSwgaXQgYXBwZWFy
cyB0aGF0IGNhbGxzIGNhbm5vdCBiZSByZXF1ZXVlZCBieQogICAgIC8vIG9wZW5Db25uZWN0aW9u
LCBidXQgdXNlIGEgZGlmZmVyZW50IHF1ZXVlIGZvciBpdGVyYXRpb24gdG8gYmUgc2FmZS4KICAg
ICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiA+IHBlbmRpbmdPcGVuQ2FsbHM7CkBAIC0z
NTYsNiArNDIxLDEwIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVnaXN0ZXJGcm9u
dGVuZENhbGxiYWNrcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsCiAgICAgQVNTRVJUKG1fcGVu
ZGluZ0Nvbm5lY3Rpb25Db3VudCk7CiAgICAgLS1tX3BlbmRpbmdDb25uZWN0aW9uQ291bnQ7CiAg
ICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PihjYWxsYmFja3MpKTsKKyAgICAvLyBXZSBnaXZlIG1heCBwcmlvcml0eSB0byBvcGVuIGNhbGxz
IHRoYXQgZm9sbG93IHVwZ3JhZGVuZWVkZWQKKyAgICAvLyBldmVudHM7IHRyaWdnZXIgdGhlIHJl
c3Qgb2YgdGhlIHF1ZXVlcyB0byBiZSBzZXJ2aWNlZCB3aGVuIHRob3NlIG9wZW4KKyAgICAvLyBj
YWxscyBhcmUgZmluaXNoZWQuCisgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwogfQogCiB2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCkBAIC0zNzMsNiArNDQyLDgwIEBAIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKICAgICB9CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVuSW50VmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiB3b24ndCBiZSByZWFjaGVkIHVudGlsIGl0J3MgZXhwb3NlZCB0byBzY3JpcHQgaW4KKyAg
ICAvLyB3YmsudWcvOTI4OTcuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgQVNTRVJUKGNh
bGxiYWNrcyk7CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxs
YmFja3NTZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHNvbWUgY29ubmVj
dGlvbnMgbWlnaHQgY2xvc2UgaW4gdGhlIHZlcnNpb25jaGFuZ2UgZXZlbnQKKyAgICAgICAgLy8g
aGFuZGxlciBmb3Igc29tZSBvdGhlciBjb25uZWN0aW9uLCBhZnRlciB3aGljaCBpdHMgb3duIHZl
cnNpb25jaGFuZ2UKKyAgICAgICAgLy8gZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZC4gVGhlIGJh
Y2tlbmQgZG9lc24ndCB3b3JyeSBhYm91dCB0aGlzLCB3ZQorICAgICAgICAvLyBqdXN0IHF1ZXVl
IHVwIGEgdmVyc2lvbiBjaGFuZ2UgZXZlbnQgZm9yIGV2ZXJ5IGNvbm5lY3Rpb24uIFRoZQorICAg
ICAgICAvLyBmcm9udGVuZCB0YWtlcyBjYXJlIHRvIG9ubHkgZGlzcGF0Y2ggdG8gb3BlbiBjb25u
ZWN0aW9ucy4KKyAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX2ludFZlcnNpb24sIHJl
cXVlc3RlZFZlcnNpb24pOworICAgIH0KKyAgICAvLyBUaGUgc3BlYyBkaWN0YXRlcyB3ZSB3YWl0
IHVudGlsIGFsbCB0aGUgdmVyc2lvbiBjaGFuZ2UgZXZlbnRzIGFyZQorICAgIC8vIGRlbGl2ZXJl
ZCBhbmQgdGhlbiBjaGVjayBtX2RhdGFiYXNlQ2FsbGJhY2tzLmVtcHR5KCkgYmVmb3JlIHByb2Nl
ZWRpbmcKKyAgICAvLyBvciBmaXJpbmcgYSBibG9ja2VkIGV2ZW50LCBidXQgaW5zdGVhZCB3ZSBz
aG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGhvdworICAgIC8vIHRoZSBvbGQgc2V0VmVyc2lvbiAo
aW5jb3JyZWN0bHkpIGRpZCBpdC4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBjYWxsIHRvIG9u
QmxvY2tlZCBhbmQgaW5zdGVhZCB3YWl0IHVudGlsIHRoZSBmcm9udGVuZAorICAgIC8vIHRlbGxz
IHVzIHRoYXQgYWxsIHRoZSBibG9ja2VkIGV2ZW50cyBoYXZlIGJlZW4gZGVsaXZlcmVkLiBTZWUK
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKKyAg
ICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAwKQorICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tl
ZChtX2ludFZlcnNpb24pOworICAgIC8vIEZJWE1FOiBBZGQgdGVzdCBmb3IgbV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24gfHwgY29ubmVjdGlvbkNvdW50KCkgPiAwKSB7CisgICAgICAgIG1fcGVuZGluZ09w
ZW5XaXRoVmVyc2lvbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y3Jl
YXRlKGNhbGxiYWNrcywgcmVxdWVzdGVkVmVyc2lvbikpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJp
bmdMaXN0OjpjcmVhdGUoKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbkludGVyZmFjZSA9IHRy
YW5zYWN0aW9uKG9iamVjdFN0b3JlTmFtZXMuZ2V0KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9O
X0NIQU5HRSwgZWMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25JbnRl
cmZhY2UuZ2V0KCkpOworICAgIEFTU0VSVCghZWMpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKKyAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gaW50VmVyc2lvblRhc2sgPSBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnNldEludFZlcnNpb25JbnRlcm5hbCwgZGF0YWJhc2UsIHJlcXVl
c3RlZFZlcnNpb24sIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgIC8vIEZJWE1FOiBNYWtl
IHRoaXMgcmVzZXQgdGhlIGludGVnZXIgdmVyc2lvbiBhcyB3ZWxsLgorICAgIE93blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiByZXNldFZlcnNpb25PbkFib3J0VGFzayA9IGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVzZXRWZXJzaW9uLCBkYXRh
YmFzZSwgbV92ZXJzaW9uKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soaW50
VmVyc2lvblRhc2sucmVsZWFzZSgpLCByZXNldFZlcnNpb25PbkFib3J0VGFzay5yZWxlYXNlKCkp
KQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CisgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbkNhbGxzLmFwcGVu
ZChQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywgcmVxdWVzdGVk
VmVyc2lvbikpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0
aW9uV2l0aFZlcnNpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgaW50
NjRfdCB2ZXJzaW9uKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25D
YWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbHMu
YXBwZW5kKFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjcmVhdGUoY2FsbGJhY2tzLCB2ZXJz
aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1faWQgPT0gSW52YWxpZElk
KSB7CisgICAgICAgIGlmIChvcGVuSW50ZXJuYWwoKSkKKyAgICAgICAgICAgIEFTU0VSVChtX2lu
dFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9y
LiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodmVy
c2lvbiA+IG1faW50VmVyc2lvbikgeworICAgICAgICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24odmVyc2lvbiwgY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAodmVyc2lvbiA8IG1faW50VmVyc2lvbikgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpWRVJfRVJSLCBT
dHJpbmc6OmZvcm1hdCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9uICglbGxkKSBpcyBsZXNzIHRoYW4g
dGhlIGV4aXN0aW5nIHZlcnNpb24gKCVsbGQpLiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmVy
c2lvbiksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9pbnRWZXJzaW9uKSkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQodmVyc2lvbiA9PSBtX2ludFZlcnNpb24pOworICAg
ICsrbV9wZW5kaW5nQ29ubmVjdGlvbkNvdW50OworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRo
aXMpOworfQorCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCiB7CiAgICAgaWYgKG1fcnVubmlu
Z1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlz
RW1wdHkoKSkgewpAQCAtMzg4LDE3ICs1MzEsMTkgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2sK
ICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25u
ZWN0aW9ucyBhZnRlciB0aGUKICAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZl
ZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCi0gICAgaWYgKCFtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LmlzRW1wdHkoKSkgeworICAgIGlmIChjb25uZWN0aW9uQ291bnQoKSA+PSAxKSB7CiAgICAgICAg
IG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKGNh
bGxiYWNrcykpOwogICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFtX2JhY2tp
bmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2UobV9uYW1lKSkgewogICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktO
T1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBtX3ZlcnNpb24gPSAiIjsKICAgICBtX2lkID0gSW52YWxpZElkOworICAgIG1faW50VmVyc2lv
biA9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKICAgICBtX29iamVjdFN0b3Jl
cy5jbGVhcigpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6bnVsbFZhbHVlKCkpOwogfQpAQCAtNDExLDEyICs1NTYsMTcgQEAgdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MKICAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAxKQogICAgICAgICByZXR1cm47
CiAKKyAgICBUcmFuc2FjdGlvblNldCB0cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOwogICAg
IHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIAotICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkpIHsK
LSAgICAgICAgVHJhbnNhY3Rpb25TZXQgdHJhbnNhY3Rpb25zKG1fdHJhbnNhY3Rpb25zKTsKKyAg
ICBBU1NFUlQobV90cmFuc2FjdGlvbnMuc2l6ZSgpIC0gdHJhbnNhY3Rpb25zLnNpemUoKSA8PSAx
KTsKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiByZWx5aW5nIG9uIHRyYW5zYWN0aW9ucy5zaXpl
KCksIG1ha2UgY29ubmVjdGlvbkNvdW50CisgICAgLy8gYXdhcmUgb2YgaW4tZmxpZ2h0IHVwZ3Jh
ZGVuZWVkZWQgZXZlbnRzIGFzIHdlbGwgYXMgaW4tZmxpZ2h0IHN1Y2Nlc3MKKyAgICAvLyBldmVu
dHMuCisgICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMu
c2l6ZSgpICYmIG1fdHJhbnNhY3Rpb25zLnNpemUoKSA9PSB0cmFuc2FjdGlvbnMuc2l6ZSgpKSB7
CiAgICAgICAgIGZvciAoVHJhbnNhY3Rpb25TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHJhbnNh
Y3Rpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zYWN0aW9ucy5lbmQoKTsgKytpdCkKICAgICAgICAg
ICAgICgqaXQpLT5hYm9ydCgpOworCiAgICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5pc0Vt
cHR5KCkpOwogCiAgICAgICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmgKaW5kZXggODA1ZWI2MTdmYjMyMTRkMGJiYjI1NzVmMzJiZjg5NWE0NWYxMGQxZC4uMjIwZGU1
MTEzM2Y3N2QxYzE0ZWNiMzMzODkyZjJkYzZiNjBlYjgzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApA
QCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyRnJvbnRlbmRDYWxs
YmFja3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogICAgIHZvaWQgb3BlbkNv
bm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5Db25uZWN0
aW9uV2l0aFZlcnNpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBpbnQ2NF90IHZlcnNpb24p
OwogICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAog
ICAgIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQpAQCAtNzEsMTEgKzcyLDEzIEBAIHB1
YmxpYzoKICAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5h
dG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CiAg
ICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPik7CiAgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEV2
ZW50c0ZpcmVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogCiBwcml2
YXRlOgogICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJC
YWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFj
dG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKIAogICAg
IGJvb2wgb3BlbkludGVybmFsKCk7CisgICAgdm9pZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24oaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4p
OwogICAgIHZvaWQgbG9hZE9iamVjdFN0b3JlcygpOwogICAgIGludDMyX3QgY29ubmVjdGlvbkNv
dW50KCk7CiAgICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CkBAIC04Myw2ICs4Niw3IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgc2V0VmVy
c2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgc3Rh
dGljIHZvaWQgc2V0SW50VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+KTsKIAogICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rp
b24gYWJvcnQgdGFza3MuCiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFw
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKQEAgLTkzLDYgKzk3
LDcgQEAgcHJpdmF0ZToKICAgICBpbnQ2NF90IG1faWQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAg
ICBTdHJpbmcgbV92ZXJzaW9uOworICAgIGludDY0X3QgbV9pbnRWZXJzaW9uOwogCiAgICAgU3Ry
aW5nIG1faWRlbnRpZmllcjsKICAgICAvLyBUaGlzIG1pZ2h0IG5vdCBuZWVkIHRvIGJlIGEgUmVm
UHRyIHNpbmNlIHRoZSBmYWN0b3J5J3MgbGlmZXRpbWUgaXMgdGhhdCBvZiB0aGUgcGFnZSBncm91
cCwgYnV0IGl0J3MgYmV0dGVyIHRvIGJlIGNvbnNlcnZpdGl2ZSB0aGFuIHNvcnJ5LgpAQCAtMTEz
LDYgKzExOCwxMCBAQCBwcml2YXRlOgogICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKICAgICBE
ZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKIAorICAg
IGNsYXNzIFBlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOworICAgIERlcXVlPFJlZlB0cjxQZW5k
aW5nT3BlbldpdGhWZXJzaW9uQ2FsbD4gPiBtX3BlbmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsczsK
KyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw+ID4gbV9wZW5kaW5n
U2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbkNhbGxzOworCiAgICAgY2xhc3MgUGVuZGluZ0RlbGV0
ZUNhbGw7CiAgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0Rl
bGV0ZUNhbGxzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaAppbmRleCBiM2YyNDRmNTE2YjY5ODdlYTExOWNiZjcw
MTliN2I1NDM3NWYxMmJmLi4xNmE5ZWE2YzUwOGIwZDkyYjYxZTQ5OTdjNTQzMDEzMmE2ZDJhY2Fh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUNhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQ2FsbGJhY2tzLmgKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
fklEQkRhdGFiYXNlQ2FsbGJhY2tzKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgb25WZXJzaW9u
Q2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvblZl
cnNpb25DaGFuZ2UoaW50NjRfdCBjdXJyZW50VmVyc2lvbiwgaW50NjRfdCByZXF1ZXN0ZWRWZXJz
aW9uKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCBkZmIxNDU3YTMwNmRhYTdhNTY4YzIxYWY2ZWZh
MzQ1NDZjZTNmZjQ2Li42M2JkNDc4M2U1NGFlMzFmNGQ0OTU5NmYzYjYwZDlhZjgyNTRjOWRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNp
bmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNl
ZFBhcmFtLmg+CiAKQEAgLTE1MSwzMCArMTUyLDM0IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxT
CiAKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gcHJwU2VjdXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXJlY3RvcnkpCiB7CisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhIHBhcmFt
ZXRlciBhbmQgcGx1bWIgdGhyb3VnaCBmcm9tIGphdmFzY3JpcHQuCisgICAgaW50NjRfdCB2ZXJz
aW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwogICAgIFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKICAgICBjb25z
dCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUs
IHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKIAorICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBkYXRhYmFzZUJhY2tlbmQ7CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRv
ciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7Ci0gICAg
aWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7Ci0gICAgICAgIC8vIElmIGl0
J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBhbnkgcGVuZGluZwot
ICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRlLgotICAgICAgICBpdC0+c2Vj
b25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24g
YW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
ID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7Ci0gICAg
aWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRl
cm5hbCBlcnJvci4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1f
ZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXJlY3RvcnkpOworICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOworICAgICAgICBpZiAo
ZGF0YWJhc2VCYWNrZW5kKQorICAgICAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVu
aXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgZGF0YWJh
c2VCYWNrZW5kID0gaXQtPnNlY29uZDsKIAotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFt
ZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCksIHRo
aXMsIHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIGlmIChkYXRhYmFzZUJhY2tlbmQpIHsKLSAgICAg
ICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFj
a2VuZC5nZXQoKSk7CisgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9J
bnRWZXJzaW9uKQogICAgICAgICBkYXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxi
YWNrcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJu
YWwgZXJyb3IuIikpOworICAgIGVsc2UKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kLT5vcGVuQ29u
bmVjdGlvbldpdGhWZXJzaW9uKGNhbGxiYWNrcywgdmVyc2lvbik7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMDUxM2MzNTMzZmNhYjBmZjg1
MmRjMGE5MTM0NDU3ZWNmMzYyOTdmMy4uNzYyOGE4MDg5YTBjMTIyMjY5MGY3ZmJmZjU1Y2I1ZGM4
MzBiZDMwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4m
IGZvdW5kTmFtZXMpCiAgICAgfQogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVy
c2lvbiwgaW50NjRfdCYgZm91bmRJZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0
SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRTdHJp
bmdWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpCiB7
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1f
aWRlbnRpZmllciwgbmFtZSk7CiAKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmCiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgb2sgPSBn
ZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGZvdW5kSWQs
IERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgZm91bmRWZXJzaW9uKTsKKyAgICBv
ayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZm91
bmRJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCBmb3VuZFN0cmluZ1ZlcnNp
b24pOwogICAgIGlmICghb2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjY0LDcgKzI2
NCw3IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRhdGFiYXNlKiBk
YikKICAgICByZXR1cm4gZGF0YWJhc2VJZDsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkKIHsK
ICAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9kYi5nZXQoKSk7CiAgICAgaWYgKHJvd0lk
IDwgMCkKQEAgLTI3OCw2ICsyNzgsMTIgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpj
cmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJE
YXRhYmFzZUludFZlcnNpb24oaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKQorewor
ICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgYWN0dWFsbHkgZG8gc29tZXRoaW5nLiBodHRwOi8vd2ti
LnVnLzkyODgzCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKQEAgLTMw
NSw3ICszMTEsOCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSkKIAogICAgIGludDY0X3QgZGF0YWJhc2VJZDsKICAgICBTdHJp
bmcgdmVyc2lvbjsKLSAgICBpZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVyc2lv
biwgZGF0YWJhc2VJZCkpIHsKKyAgICBpbnQ2NF90IGludFZlcnNpb247CisgICAgaWYgKCFnZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKG5hbWUsIHZlcnNpb24sIGludFZlcnNpb24sIGRhdGFiYXNlSWQp
KSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggMGJlOTM0ZmZkYTliY2Y4MDkxZDUzNDEw
YTZhYmNjODAwZjU5MGQzNi4uNDc5ZWZlY2MwNWFiYjE2MDgzMzE1MmIyMjhlY2U2ZWU3NzY2Mzll
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuaApAQCAtNDUsOSArNDUsMTAgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgfklEQkxldmVsREJCYWNraW5nU3RvcmUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRE
YXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91
bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgaW50NjRfdCYgcm93SWQpOworICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFE
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZv
dW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7CisgICAgdmlydHVhbCBib29sIGNyZWF0
ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwogICAgIHZpcnR1YWwg
Ym9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbik7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lv
bihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOwogICAgIHZpcnR1YWwgYm9vbCBk
ZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgdmlydHVhbCB2b2lkIGdl
dE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJ
ZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURCS2V5UGF0aD4mIGZvdW5k
S2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCA3MGYzMzY3YWJmYmMxYTA0YTlmZWNhMWNhYjRlNDMz
MGRkNjM3MzQxLi4xYmJkMjNiNTZiYmEwZjllNmVmMzQ0OTlkZWI4MDZiM2MwODQ3MGVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMjI3LDYgKzIyNyw4IEBAIHZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKICAgICBlbHNlCiAgICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkFib3J0KCk7CiAKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5k
RXZlbnRzRmlyZWQodGhpcyk7CisKICAgICBtX2RhdGFiYXNlID0gMDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3Bw
CmluZGV4IGQ5ZTNkNjk3YjE5N2M3NDA2ZjYzYmFlYjQ4MzkzMWI0ZWFjOTUwODUuLjkxZGYxMjZh
NWZiOGZiNjdiYzZlYWFjNTFkOTQ3ZTlkYTQxZDA5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGYWls
aW5nQmFja2luZ1N0b3JlKTsKICAgICB9Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFi
YXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgaW50NjRfdCYpCisgICAg
dmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgaW50NjRfdCwgaW50NjRfdCYpCiAgICAgewogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJG
YWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VC
YWNraW5nU3RvcmUuaAppbmRleCA1MzZkNzg1YjkzYWVlNDNiOWY1MzMyNTI1YzYzZWM3OWU3MDk1
OWJmLi44ODYyYjU4ZDRmMTY3MjBjY2FiMWNiZTk1ZDBmN2NjN2IxYTNmNzk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApAQCAt
MzMsOSArMzMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCRmFrZUJhY2tpbmdT
dG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKSBPVkVSUklERSB7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKSBPVkVSUklERSB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFE
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiBy
b3dJZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBnZXRJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24s
IGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0
YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRW
ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3Qg
dmVyc2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGVs
ZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQs
IFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBW
ZWN0b3I8SURCS2V5UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRv
SW5jcmVtZW50RmxhZ3MpIE9WRVJSSURFIHsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>