<?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>69307</bug_id>
          
          <creation_ts>2011-10-03 16:58:41 -0700</creation_ts>
          <short_desc>make IDBFactory.open wait for pending setVersion transactions to complete</short_desc>
          <delta_ts>2011-10-13 16:07:25 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Grogan">dgrogan</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>hans</cc>
    
    <cc>jochen</cc>
    
    <cc>jsbell</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>477350</commentid>
    <comment_count>0</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-10-03 16:58:41 -0700</bug_when>
    <thetext>make IDBFactory.open wait for pending setVersion transactions to complete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477351</commentid>
    <comment_count>1</comment_count>
      <attachid>109553</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-10-03 17:00:40 -0700</bug_when>
    <thetext>Created attachment 109553
unfinished patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477991</commentid>
    <comment_count>2</comment_count>
      <attachid>109700</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-04 15:10:51 -0700</bug_when>
    <thetext>Created attachment 109700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477997</commentid>
    <comment_count>3</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-04 15:20:05 -0700</bug_when>
    <thetext>Can you take an initial peek at the patch? 

* This is based on initial code by dgrogan, with additions to ensure that when open() is called during a running VERSION_CHANGE transaction it becomes a pending action as well.

* Tests are pending. I have a test page, just need to morph it into a proper layouttest.

* This adds new public methods to IDBDatabaseBackendImpl (transactionStarted/Finished) and explicit calls from the transaction. This is simple, but seems limited. Another approach I considered was to add two more callback queues to transaction, one for started callbacks and one for finished callbacks. This is much heavier weight, but would allow the database to selectively subscribe to only VERSION_CHANGE transaction start/finish states, and possibly other uses. However, since the version change mechanism is changing soon this seems premature. 

* It feels... odd that both the front end IDBDatabase and back end need to keep track of the active version change transactions. I worry they could get out of sync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478040</commentid>
    <comment_count>4</comment_count>
      <attachid>109712</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-04 16:04:07 -0700</bug_when>
    <thetext>Created attachment 109712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478041</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-04 16:04:40 -0700</bug_when>
    <thetext>Latest patch adds tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478042</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-04 16:08:25 -0700</bug_when>
    <thetext>... but don&apos;t look too closely at the details, other tests turn up a crash. :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478052</commentid>
    <comment_count>7</comment_count>
      <attachid>109713</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-04 16:37:29 -0700</bug_when>
    <thetext>Created attachment 109713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478074</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-04 17:14:02 -0700</bug_when>
    <thetext>The source of the crash (fixed in latest patch) was an assertion failure (yay!) firing when calling setVersion was called inside a VERSION_CHANGE transaction. The new patch now defers this, but the spec is hazy on exactly what should happen . Since that is being obsoleted by the new versioning mechanism, this approach seems acceptable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478081</commentid>
    <comment_count>9</comment_count>
      <attachid>109713</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-04 17:21:33 -0700</bug_when>
    <thetext>Comment on attachment 109713
Patch

Attachment 109713 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9959014

New failing tests:
inspector/debugger/debugger-activation-crash2.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478353</commentid>
    <comment_count>10</comment_count>
      <attachid>109713</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-05 08:00:18 -0700</bug_when>
    <thetext>Comment on attachment 109713
Patch

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

&gt; LayoutTests/storage/indexeddb/version-change-exclusive.html:67
&gt; +	        debug(&quot;ending work in VERSION_CHANGE transaction&quot;);

nit: indentation

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:251
&gt; +        // FIXME: if setVersion returns w/o initiating a transaction, pending opens will never run

This sounds like a problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478645</commentid>
    <comment_count>11</comment_count>
      <attachid>109852</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-05 13:40:09 -0700</bug_when>
    <thetext>Created attachment 109852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478731</commentid>
    <comment_count>12</comment_count>
      <attachid>109852</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-10-05 15:23:07 -0700</bug_when>
    <thetext>Comment on attachment 109852
Patch

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

Could you come up with a gnarly layout test that interleaves some opens, closes and setversions?  Anything to get the new code in this subtle area to as close to 100% test-covered as possible.  (Or is it already?)

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:187
&gt; +        processPendingCalls();

Does your new layout test fail without this line or does an existing one?

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:249
&gt; +    if (!m_pendingSetVersionCalls.isEmpty()) {

This &quot;if&quot; doesn&apos;t have to be &quot;while&quot; because processPendingCalls is called again when the first pending setVersion call is called, is that right?  Maybe that means that the while on line old 232 / new 297 should be an if also?  Maybe that while loop can just be replaced with a call to processPendingCalls()?

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:258
&gt; +      RefPtr&lt;PendingOpenCall&gt; pendingOpenCall = m_pendingOpenCalls.takeFirst();

this should be indented 4 spaces.  (apologies, that was probably from me)

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:281
&gt; +void IDBDatabaseBackendImpl::openEventually(PassRefPtr&lt;IDBCallbacks&gt; callbacks)

I think I named both open and openEventually, but they are confusing.  open&apos;s job is just to give the backend some callbacks that are created after openEventually succeeds.  Could you take a stab at renaming one or both of these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478762</commentid>
    <comment_count>13</comment_count>
      <attachid>109852</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-05 16:03:11 -0700</bug_when>
    <thetext>Comment on attachment 109852
Patch

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

&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:187
&gt;&gt; +        processPendingCalls();
&gt; 
&gt; Does your new layout test fail without this line or does an existing one?

Nope and nope. I&apos;ll see if I can come up with something, now that it seems like this CL is on the right track.

&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:249
&gt;&gt; +    if (!m_pendingSetVersionCalls.isEmpty()) {
&gt; 
&gt; This &quot;if&quot; doesn&apos;t have to be &quot;while&quot; because processPendingCalls is called again when the first pending setVersion call is called, is that right?  Maybe that means that the while on line old 232 / new 297 should be an if also?  Maybe that while loop can just be replaced with a call to processPendingCalls()?

Re: &quot;doesn&apos;t have to be a while&quot; - exactly.

And... yes, good catch.

&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:281
&gt;&gt; +void IDBDatabaseBackendImpl::openEventually(PassRefPtr&lt;IDBCallbacks&gt; callbacks)
&gt; 
&gt; I think I named both open and openEventually, but they are confusing.  open&apos;s job is just to give the backend some callbacks that are created after openEventually succeeds.  Could you take a stab at renaming one or both of these?

I&apos;ll ponder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480348</commentid>
    <comment_count>14</comment_count>
      <attachid>110227</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-07 15:28:21 -0700</bug_when>
    <thetext>Created attachment 110227
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480349</commentid>
    <comment_count>15</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-07 15:34:24 -0700</bug_when>
    <thetext>New patch that includes more fun test permutations. It caught one bug in the implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482159</commentid>
    <comment_count>16</comment_count>
      <attachid>110227</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-10-11 19:11:27 -0700</bug_when>
    <thetext>Comment on attachment 110227
Patch

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

I think the only substantive issue is the potential ref-counting cycle.  The rest of the comments are style stuff or making sure I understand what&apos;s going on.

Hopefully most of this can be reused when we switch to the new open/version API.

&gt; LayoutTests/storage/indexeddb/open-close-version-expected.txt:78
&gt; +&apos;h2.open.onsuccess&apos;

I think these last two would be in this same order before your patch because h1.setVersion.onsuccess is printed before all the async puts.  But if you passed in something to h1.setVersion, like h1.setVersion({onsuccess: function() { debug (&quot;something&quot;) }}), then the order of &quot;something&quot; and &quot;h2.open.onsuccess&quot; would be different pre-patch vs post-patch.

&gt; LayoutTests/storage/indexeddb/open-close-version.html:95
&gt; +    run([function(c) { h1.open({onsuccess: c}); },

c stands for commands?

&gt; LayoutTests/storage/indexeddb/open-close-version.html:99
&gt; +                                    setTimeout(h2.close.bind(h2), 0);

without bind, h2.close would try to call test1.handle.close() instead of h2.handle.close()?

&gt; LayoutTests/storage/indexeddb/open-close-version.html:183
&gt; +                               &quot;h2.setVersion.onerror&quot;,

This is the ABORT_ERR from IDBDatabaseBackendImpl.cpp line new186?

&gt; LayoutTests/storage/indexeddb/open-close-version.html:202
&gt; +         function(c) { h2.close(); c(); },

IIUC, explicitly calling c() runs the next command immediately.  If so, the c() on the last command is a no-op?

&gt; LayoutTests/storage/indexeddb/open-close-version.html:214
&gt; +                               &quot;h1.setVersion.onblocked&quot;,

This onblocked should go away when we fix the FIXME that causes test2 to fail, right?

&gt; LayoutTests/storage/indexeddb/open-close-version.html:229
&gt; +    run([function(c) { h1.open({onsuccess: c}); },

It seems that this scenario is covered by your other test, version-change-exclusive?  Is there something different that I missed?

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:231
&gt; +    if (prpTransaction-&gt;mode() == IDBTransaction::VERSION_CHANGE) {

It won&apos;t make any difference in this function, but it&apos;s common practice to not use prp parameters for anything except assigning or passing through.

(You&apos;ve probably already seen it, but in case not, there&apos;s a long discussion on RefPtr and PassRefPtr at http://www.webkit.org/coding/RefPtr.html)

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:241
&gt; +        m_runningVersionChangeTransaction = 0;

I think the conventional idiom here is to use .clear() insted of = 0.  Though I&apos;m less certain about this.  And I think I use = 0 :-[

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:250
&gt; +    m_pendingSetVersionCalls.swap(pendingSetVersionCalls);

You put this swap in here to avoid an infinite loop where we would just keep popping and adding the same setVersion call?  How did the old code not fall into that trap?

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:251
&gt; +    while (!pendingSetVersionCalls.isEmpty()) {

Using a while here instead of an if lets you avoid putting a processPendingCalls() where ABORT_ERR is fired on line 186, right?  And using a while is needed because of the swap.

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.h:105
&gt; +    RefPtr&lt;IDBTransactionBackendInterface&gt; m_runningVersionChangeTransaction;

Do you know if there are potential ref-counting cycles between IDBTransactionBackendImpl and IDBDatabaseBackendImpl?  Off the top of my head I think this is fine but am not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482590</commentid>
    <comment_count>17</comment_count>
      <attachid>110227</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-12 12:03:45 -0700</bug_when>
    <thetext>Comment on attachment 110227
Patch

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

&gt;&gt; LayoutTests/storage/indexeddb/open-close-version-expected.txt:78
&gt;&gt; +&apos;h2.open.onsuccess&apos;
&gt; 
&gt; I think these last two would be in this same order before your patch because h1.setVersion.onsuccess is printed before all the async puts.  But if you passed in something to h1.setVersion, like h1.setVersion({onsuccess: function() { debug (&quot;something&quot;) }}), then the order of &quot;something&quot; and &quot;h2.open.onsuccess&quot; would be different pre-patch vs post-patch.

You&apos;re right; I think this predates some test refactoring. I&apos;ll make the &quot;after all the async puts&quot; step always add something to the list of steps so this would show up.

&gt;&gt; LayoutTests/storage/indexeddb/open-close-version.html:95
&gt;&gt; +    run([function(c) { h1.open({onsuccess: c}); },
&gt; 
&gt; c stands for commands?

&quot;continuation&quot;, i.e. go on to the next step in the sequence passed to run(). I&apos;ll brainstorm on better naming, and/or unwrapping all of this stuff

&gt;&gt; LayoutTests/storage/indexeddb/open-close-version.html:99
&gt;&gt; +                                    setTimeout(h2.close.bind(h2), 0);
&gt; 
&gt; without bind, h2.close would try to call test1.handle.close() instead of h2.handle.close()?

h2.close.bind(h2) is a shortcut for function() { h2.close(); } that was standardized in ES5. I&apos;ll switch to the explicit-function version because I agree it&apos;s clearer.

&gt;&gt; LayoutTests/storage/indexeddb/open-close-version.html:202
&gt;&gt; +         function(c) { h2.close(); c(); },
&gt; 
&gt; IIUC, explicitly calling c() runs the next command immediately.  If so, the c() on the last command is a no-op?

True, that&apos;s a leftover.

&gt;&gt; LayoutTests/storage/indexeddb/open-close-version.html:214
&gt;&gt; +                               &quot;h1.setVersion.onblocked&quot;,
&gt; 
&gt; This onblocked should go away when we fix the FIXME that causes test2 to fail, right?

Correct. I&apos;ll remove it here as well and mark this as expected to FAIL.

&gt;&gt; LayoutTests/storage/indexeddb/open-close-version.html:229
&gt;&gt; +    run([function(c) { h1.open({onsuccess: c}); },
&gt; 
&gt; It seems that this scenario is covered by your other test, version-change-exclusive?  Is there something different that I missed?

Nope, that&apos;s correct. Should one or the other be eliminated? version-change-exclusive is very straightforward. This test file has the infrastructure for verifying more elaborate sequences with less per-test code.

&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:250
&gt;&gt; +    m_pendingSetVersionCalls.swap(pendingSetVersionCalls);
&gt; 
&gt; You put this swap in here to avoid an infinite loop where we would just keep popping and adding the same setVersion call?  How did the old code not fall into that trap?

Correct. And... the old code would not try to loop over the pending calls if there was more than one open connection (line 295, in close()).  This doesn&apos;t change in new code in the close() case, although it&apos;s not strictly necessary - if there are multiple connections the calls will get requeued even if processPendingCalls() ran. 

(I&apos;m unsure of the behavior if setVersion is called more than once from the same connection, and will dig further.)

&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:251
&gt;&gt; +    while (!pendingSetVersionCalls.isEmpty()) {
&gt; 
&gt; Using a while here instead of an if lets you avoid putting a processPendingCalls() where ABORT_ERR is fired on line 186, right?  And using a while is needed because of the swap.

Correct. Calling processPendingCalls() from inside setVersion() (line 186) would process the list by recursion, but could end up in an infinite loop when there was a setVersion that was deferred again.

&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.h:105
&gt;&gt; +    RefPtr&lt;IDBTransactionBackendInterface&gt; m_runningVersionChangeTransaction;
&gt; 
&gt; Do you know if there are potential ref-counting cycles between IDBTransactionBackendImpl and IDBDatabaseBackendImpl?  Off the top of my head I think this is fine but am not sure.

There is already a cycle of IDBDatabaseBackendImpl -(has a)-&gt; IDBTransactionCoordinator -(references)-&gt;IDBTransaction -(references)-&gt; IDBDatabaseBackendImpl, so I don&apos;t think this adds one. If we can stop a transaction without aborting, that would leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482691</commentid>
    <comment_count>18</comment_count>
      <attachid>110227</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-10-12 14:13:54 -0700</bug_when>
    <thetext>Comment on attachment 110227
Patch

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

Thanks for digging into this.

&gt;&gt;&gt; LayoutTests/storage/indexeddb/open-close-version.html:229
&gt;&gt;&gt; +    run([function(c) { h1.open({onsuccess: c}); },
&gt;&gt; 
&gt;&gt; It seems that this scenario is covered by your other test, version-change-exclusive?  Is there something different that I missed?
&gt; 
&gt; Nope, that&apos;s correct. Should one or the other be eliminated? version-change-exclusive is very straightforward. This test file has the infrastructure for verifying more elaborate sequences with less per-test code.

We can (and should) keep both.  I just wanted to ensure I wasn&apos;t missing anything.

&gt;&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:250
&gt;&gt;&gt; +    m_pendingSetVersionCalls.swap(pendingSetVersionCalls);
&gt;&gt; 
&gt;&gt; You put this swap in here to avoid an infinite loop where we would just keep popping and adding the same setVersion call?  How did the old code not fall into that trap?
&gt; 
&gt; Correct. And... the old code would not try to loop over the pending calls if there was more than one open connection (line 295, in close()).  This doesn&apos;t change in new code in the close() case, although it&apos;s not strictly necessary - if there are multiple connections the calls will get requeued even if processPendingCalls() ran. 
&gt; 
&gt; (I&apos;m unsure of the behavior if setVersion is called more than once from the same connection, and will dig further.)

Ah I see, the code would only loop over multiple pending setVersion calls if some of the connections associated with those setVersion calls had closed, in which case they wouldn&apos;t be requeue&apos;d.  And good call on checking what happens if setVersion is called more than once from the same connection.

&gt;&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:251
&gt;&gt;&gt; +    while (!pendingSetVersionCalls.isEmpty()) {
&gt;&gt; 
&gt;&gt; Using a while here instead of an if lets you avoid putting a processPendingCalls() where ABORT_ERR is fired on line 186, right?  And using a while is needed because of the swap.
&gt; 
&gt; Correct. Calling processPendingCalls() from inside setVersion() (line 186) would process the list by recursion, but could end up in an infinite loop when there was a setVersion that was deferred again.

I just convinced myself that the line295 check in close would prevent a setversion from being deferred again.  Is that wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482700</commentid>
    <comment_count>19</comment_count>
      <attachid>110227</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-12 14:20:19 -0700</bug_when>
    <thetext>Comment on attachment 110227
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:251
&gt;&gt;&gt;&gt; +    while (!pendingSetVersionCalls.isEmpty()) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Using a while here instead of an if lets you avoid putting a processPendingCalls() where ABORT_ERR is fired on line 186, right?  And using a while is needed because of the swap.
&gt;&gt; 
&gt;&gt; Correct. Calling processPendingCalls() from inside setVersion() (line 186) would process the list by recursion, but could end up in an infinite loop when there was a setVersion that was deferred again.
&gt; 
&gt; I just convinced myself that the line295 check in close would prevent a setversion from being deferred again.  Is that wrong?

Not wrong, but that only applies from close(). If processPendingCalls() is called from transactionFinished() it could loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482830</commentid>
    <comment_count>20</comment_count>
      <attachid>110763</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-12 16:05:39 -0700</bug_when>
    <thetext>Created attachment 110763
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482870</commentid>
    <comment_count>21</comment_count>
      <attachid>110775</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-12 17:08:06 -0700</bug_when>
    <thetext>Created attachment 110775
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482933</commentid>
    <comment_count>22</comment_count>
      <attachid>110775</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-10-12 18:35:42 -0700</bug_when>
    <thetext>Comment on attachment 110775
Patch

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

LGTM

&gt; LayoutTests/storage/indexeddb/open-close-version-expected.txt:37
&gt; +NOTE: Will FAIL with extra bogus h1.setVersion.onblocked step; there&apos;s a FIXME

I just filed crbug.com/100123.  Can you add a link to it in the FIXME in the code and replace these references to the FIXME with references to the bug?

&gt; LayoutTests/storage/indexeddb/open-close-version.html:290
&gt; +        test7();

should this just be done()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483455</commentid>
    <comment_count>23</comment_count>
      <attachid>110900</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-13 13:55:56 -0700</bug_when>
    <thetext>Created attachment 110900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483458</commentid>
    <comment_count>24</comment_count>
      <attachid>110900</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-13 13:57:09 -0700</bug_when>
    <thetext>Comment on attachment 110900
Patch

Incorporating last bit of feedback - comment changes, and removing an empty test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483486</commentid>
    <comment_count>25</comment_count>
      <attachid>110900</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-10-13 14:23:59 -0700</bug_when>
    <thetext>Comment on attachment 110900
Patch

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

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.h:58
&gt; +    // FIXME: rename &quot;open&quot; to something more descriptive, like registerFrontEndCallbacks

Nit: Capitalize first letter and end in a period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483502</commentid>
    <comment_count>26</comment_count>
      <attachid>110907</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-13 14:36:05 -0700</bug_when>
    <thetext>Created attachment 110907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483529</commentid>
    <comment_count>27</comment_count>
      <attachid>110907</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-10-13 14:59:30 -0700</bug_when>
    <thetext>Comment on attachment 110907
Patch

Protip: If you already have r+, you can use &quot;webkit-patch land-safely&quot; to upload a new diff iwth cq+ .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483598</commentid>
    <comment_count>28</comment_count>
      <attachid>110907</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-13 16:07:19 -0700</bug_when>
    <thetext>Comment on attachment 110907
Patch

Clearing flags on attachment: 110907

Committed r97417: &lt;http://trac.webkit.org/changeset/97417&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483599</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-13 16:07:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109553</attachid>
            <date>2011-10-03 17:00:40 -0700</date>
            <delta_ts>2011-10-04 15:10:49 -0700</delta_ts>
            <desc>unfinished patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>5610</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
CmluZGV4IDhmZTk3MWEuLjQ0NDhlMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMzksNiArMzksMjIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3Bl
bkNhbGwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nT3BlbkNhbGw+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQZW5kaW5nT3BlbkNhbGwoY2FsbGJhY2tzKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorCitwcml2YXRl
OgorICAgIFBlbmRpbmdPcGVuQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQorICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKwogY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6UGVuZGluZ1NldFZlcnNpb25DYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVu
ZGluZ1NldFZlcnNpb25DYWxsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVu
ZGluZ1NldFZlcnNpb25DYWxsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKQEAgLTE3NCw2ICsxOTAsOCBAQCB2b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVm
UHRyPElEQkNhbAogICAgICAgICBpZiAoKml0ICE9IGRhdGFiYXNlQ2FsbGJhY2tzKQogICAgICAg
ICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZSh2ZXJzaW9uKTsKICAgICB9CisgICAgLy8gRklY
TUU6IE9ubHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0
ZXIgdGhlCisgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0
IHNldCB1cCB0byBmaXJlLgogICAgIGlmIChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKSA+
IDEpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQoKTsKICAgICAgICAgUmVmUHRyPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gUGVuZGluZ1NldFZl
cnNpb25DYWxsOjpjcmVhdGUodmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7
CkBAIC0xOTAsNiArMjA4LDE1IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVy
c2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsCiAgICAgfQogfQog
Cit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbERvbmUoKSB7
CisgICAgLy8gVGVzdCB3aGVyZSB0aGVyZSBpcyBhIHNldFZlcnNpb24gaW4gZmxpZ2h0LCBzbyBu
b3QgcGVuZGluZywgYW5kIGFuIG9wZW4KKyAgICAvLyBpcyBjYWxsZWQuCisgICAgd2hpbGUgKG1f
cGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5p
c0VtcHR5KCkpIHsKKyAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2Fs
bCA9IG1fcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgIG9wZW5FdmVudHVhbGx5
KHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCkpOworICAgIH0KK30KKwogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogewogICAg
IGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlLT5pZCgpOwpAQCAtMjAxLDYgKzIyOCw3IEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3ModHJhbnNhY3Rpb24pOworICAgIGRhdGFiYXNlLT5zZXRWZXJzaW9u
SW50ZXJuYWxEb25lKCk7CiB9CiAKIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0
KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBl
YykKQEAgLTIyMSw2ICsyNDksMTQgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVu
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICBtX2RhdGFi
YXNlQ2FsbGJhY2tzU2V0LmFkZChSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KGNhbGxiYWNr
cykpOwogfQogCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5FdmVudHVhbGx5KFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpIHsKKyAgICBpZiAoIW1fcGVuZGluZ1Nl
dFZlcnNpb25DYWxscy5pc0VtcHR5KCkgPiAwKSB7CisgICAgICAgIG1fcGVuZGluZ09wZW5DYWxs
cy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7CisgICAgfQorfQorCiB2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IHBycENhbGxiYWNrcykKIHsKICAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggZjc3OTEyNS4uMTBiOWNkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKQEAgLTU1LDYg
KzU1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7
CiAgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICB2b2lkIG9wZW4o
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOworICAgIHZvaWQgb3BlbkV2ZW50dWFs
bHkoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CkBAIC03Myw2ICs3NCw3IEBAIHByaXZhdGU6CiAg
ICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdT
dG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqLCBJREJGYWN0b3J5QmFj
a2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwogCiAgICAgdm9pZCBs
b2FkT2JqZWN0U3RvcmVzKCk7CisgICAgdm9pZCBzZXRWZXJzaW9uSW50ZXJuYWxEb25lKCk7CiAK
ICAgICBzdGF0aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlSW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CkBAIC0xMDAsNiArMTAyLDkgQEAgcHJp
dmF0ZToKICAgICBjbGFzcyBQZW5kaW5nU2V0VmVyc2lvbkNhbGw7CiAgICAgRGVxdWU8UmVmUHRy
PFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gPiBtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHM7CiAKKyAg
ICBjbGFzcyBQZW5kaW5nT3BlbkNhbGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdPcGVuQ2Fs
bD4gPiBtX3BlbmRpbmdPcGVuQ2FsbHM7CisKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gPiBEYXRhYmFzZUNhbGxiYWNrc1NldDsKICAgICBEYXRh
YmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCBlMWEzZjcx
Li41MGYyNDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwCkBAIC0xMTAsNyArMTEwLDkgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EK
IAogICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFj
a2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOwogICAgIGlmIChpdCAhPSBtX2RhdGFiYXNl
QmFja2VuZE1hcC5lbmQoKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhpdC0+c2Vj
b25kKTsKKyAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3ZSBoYXZlIHRv
IHdhaXQgZm9yIGFueSBwZW5kaW5nCisgICAgICAgIC8vIHNldFZlcnNpb24gY2FsbHMgdG8gY29t
cGxldGUuCisgICAgICAgIGl0LT5zZWNvbmQtPm9wZW5FdmVudHVhbGx5KGNhbGxiYWNrcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109700</attachid>
            <date>2011-10-04 15:10:51 -0700</date>
            <delta_ts>2011-10-04 16:04:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69307-20111004151050.patch</filename>
            <type>text/plain</type>
            <size>9402</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2MDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNGFkYjRkNDZkOGRjYTEw
NGYxNWI5ZGMxZDBlZDgwNWE3ODUxMmJlLi4yY2UwZWRlZmM0YWNjN2JmMzA1MzM4MTFiNTNmY2Vl
NWY4OWJjMTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMDQgIEpvc2h1
YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnku
b3BlbiB3YWl0IGZvciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdP
cGVuQ2FsbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OlBlbmRpbmdPcGVuQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbDo6UGVuZGluZ09wZW5DYWxsKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFydGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9u
RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0
VmVyc2lvbkludGVybmFsRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpvcGVuRXZlbnR1YWxseSk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKToKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KToKKwogMjAxMS0xMC0wNCAgTGVhbmRy
byBQZXJlaXJhICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBbQ01ha2VdIFVu
cmV2aWV3ZWQ6IHBhc3MgZmVhdHVyZSBkZWZpbml0aW9ucyBpbiB0aGUgcmlnaHQgZm9ybWF0IGZv
ciB0aGUgQ1NTIHNjcmlwdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA4ZmU5NzFhMjdjOTExMjQ3NTljZmYzMjAzZGU4ZGNk
ODU0NWY2ODZkLi5jZWRmNWJjMTAxOGI4MzQxMzk0YmY4ZmQ2OTNkODUzOGRlOGUzMzFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAK
QEAgLTM5LDYgKzM5LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVu
ZGluZ09wZW5DYWxsPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ09w
ZW5DYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVuZGluZ09wZW5DYWxsKGNhbGxiYWNrcykp
OworICAgIH0KKyAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1
cm4gbV9jYWxsYmFja3M7IH0KKworcHJpdmF0ZToKKyAgICBQZW5kaW5nT3BlbkNhbGwoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKK307CisKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9u
Q2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gewogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCkBAIC0x
NzQsNiArMTkwLDggQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNv
bnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICAgICAgaWYgKCppdCAh
PSBkYXRhYmFzZUNhbGxiYWNrcykKICAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2Uo
dmVyc2lvbik7CiAgICAgfQorICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRo
ZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQorICAgIC8vIFZlcnNpb25DaGFuZ2VF
dmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KICAgICBpZiAobV9k
YXRhYmFzZUNhbGxiYWNrc1NldC5zaXplKCkgPiAxKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25C
bG9ja2VkKCk7CiAgICAgICAgIFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbCA9IFBlbmRpbmdTZXRWZXJzaW9uQ2FsbDo6Y3JlYXRlKHZlcnNpb24sIGNh
bGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpOwpAQCAtMjAzLDYgKzIyMSwzMyBAQCB2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZgogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRyYW5zYWN0aW9uKTsK
IH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHBycFRyYW5zYWN0aW9uKQor
eworICAgIGlmIChwcnBUcmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJT
SU9OX0NIQU5HRSkgeworICAgICAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbik7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHBy
cFRyYW5zYWN0aW9uOworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0
cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBwcnBUcmFuc2FjdGlvbikKK3sKKyAgICBpZiAocHJwVHJhbnNhY3Rpb24tPm1vZGUoKSA9
PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKKyAgICAgICAgQVNTRVJUKHBycFRy
YW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQo
KSk7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IDA7CisgICAg
ICAgIHNldFZlcnNpb25JbnRlcm5hbERvbmUoKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsRG9uZSgpCit7CisgICAgLy8gVGVzdCB3
aGVyZSB0aGVyZSBpcyBhIHNldFZlcnNpb24gaW4gZmxpZ2h0LCBzbyBub3QgcGVuZGluZywgYW5k
IGFuIG9wZW4KKyAgICAvLyBpcyBjYWxsZWQuCisgICAgd2hpbGUgKG1fcGVuZGluZ1NldFZlcnNp
b25DYWxscy5pc0VtcHR5KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5KCkpIHsKKyAg
ICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCA9IG1fcGVuZGluZ09w
ZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgIG9wZW5FdmVudHVhbGx5KHBlbmRpbmdPcGVuQ2Fs
bC0+Y2FsbGJhY2tzKCkpOworICAgIH0KK30KKwogUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKERPTVN0
cmluZ0xpc3QqIG9iamVjdFN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVOYW1l
cy0+bGVuZ3RoKCk7ICsraSkgewpAQCAtMjIxLDYgKzI2NiwxNCBAQCB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQogICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4oY2FsbGJhY2tzKSk7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b3BlbkV2ZW50dWFsbHkoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAg
ICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKQorICAgICAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5k
KFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgIGVsc2UKKyAgICAgICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
KQogewogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2Fs
bGJhY2tzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuaAppbmRleCBmNzc5MTI1MGQ5MThhYTE5ODQ0MTU5YjI5N2IyNTNiM2JlNjQ4ZWZlLi45Y2Jm
NmZiMzdhMjI4OWFmMmU4NjU0MmRkMjY4OWU2MTViZTE0ZDA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTUsNiArNTUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKICAgICBpbnQ2
NF90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQogICAgIHZvaWQgb3BlbihQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7CisgICAgdm9pZCBvcGVuRXZlbnR1YWxseShQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pOwogCiAgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX3ZlcnNpb247IH0KQEAgLTY4LDExICs2OSwxNCBAQCBwdWJsaWM6CiAKICAgICBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lKTsKICAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdl
dCgpOyB9CisgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKIAogcHJpdmF0ZToKICAg
ICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0
b3JlKiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciosIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7CiAKICAgICB2b2lkIGxv
YWRPYmplY3RTdG9yZXMoKTsKKyAgICB2b2lkIHNldFZlcnNpb25JbnRlcm5hbERvbmUoKTsKIAog
ICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPik7CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKQEAgLTk2LDEwICsxMDAsMTQgQEAgcHJp
dmF0ZToKICAgICBPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlczsKIAogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9ydW5uaW5nVmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uOwogCiAgICAgY2xhc3MgUGVuZGluZ1NldFZlcnNpb25DYWxsOwogICAg
IERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+ID4gbV9wZW5kaW5nU2V0VmVyc2lv
bkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOworICAgIERlcXVlPFJlZlB0cjxQ
ZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOworCiAgICAgdHlwZWRlZiBMaXN0
SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0YWJhc2VDYWxsYmFja3NT
ZXQ7CiAgICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAK
aW5kZXggZTFhM2Y3MTlhYzk0YWFhMDE4MGM3OTg4OGZjNDE2N2RiZTdiMDRjZi4uNTBmMjQ1ZmY4
ZDQxMTAwNmI3Y2JkZDY2YjZmZTM2NzM1Y2ZiMzdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMTEwLDcgKzExMCw5IEBAIHZv
aWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhCiAKICAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsKICAg
ICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKLSAgICAgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoaXQtPnNlY29uZCk7CisgICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBi
ZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBhbnkgcGVuZGluZworICAgICAgICAvLyBz
ZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRlLgorICAgICAgICBpdC0+c2Vjb25kLT5vcGVuRXZl
bnR1YWxseShjYWxsYmFja3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRl
eCAxNTZjYjg5YTlmYjA5ZGE1MDRmNDVhOTc4ZTAyNzNlYTNhNmE1NjRhLi4wMTVkYTE4ZDY5YTgy
OGM1NTcxNzlhMGZjMWFmMGMxMjkzMzYyYmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAgLTEzMSw2ICsxMzEsNyBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KCkKICAgICBtX2NhbGxiYWNr
cy0+b25BYm9ydCgpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+
ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMpKTsKKyAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwogICAgIG1fZGF0YWJhc2UgPSAwOwogfQogCkBAIC0x
NzEsNiArMTcyLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzdGFydCgpCiAK
ICAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6Y29tbWl0KCkKQEAgLTE4Niw2ICsxODgsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OmNvbW1pdCgpCiAgICAgbV90cmFuc2FjdGlvbi0+Y29tbWl0KCk7CiAgICAg
bV9jYWxsYmFja3MtPm9uQ29tcGxldGUoKTsKICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNv
b3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2Ut
PnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CiAgICAgbV9kYXRhYmFzZSA9IDA7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109712</attachid>
            <date>2011-10-04 16:04:07 -0700</date>
            <delta_ts>2011-10-04 16:37:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69307-20111004160406.patch</filename>
            <type>text/plain</type>
            <size>15069</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2MDgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhZTQ3MDFhMGYyNjI5OGI1MDY1ZjBj
YzRmMTM2ZDk4ODMzNGVkMmRhLi4zZmFkMDc5OWNmNjk0NDZjNDhkODRjYTZmMzkwODMyZDdmMGYx
NjI1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMDQgIEpvc2h1YSBCZWxsICA8anNi
ZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZv
ciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
dmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLmh0bWw6IEFkZGVkLgor
CiAyMDExLTEwLTA0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmVzdG9yZSBMaW51eCBiYXNlbGluZSBmb3IgdGhpcyB0ZXN0LiAgVGhlIExpbnV4IGJhc2VsaW5l
IGdvdCBjbG9iYmVyZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM4OWU2N2I2ZjkwZWIwZDIxNjExZTdhZWZiZmIxZDFmNTA4NzQzZWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1l
eGNsdXNpdmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0Vuc3VyZSBWRVJTSU9OX0NI
QU5HRSB0cmFuc2FjdGlvbiBkb2Vzbid0IHJ1biBjb25jdXJyZW50bHkgd2l0aCBvdGhlciB0cmFu
c2FjdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWREQiA9IHdp
bmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5k
ZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQord2luZG93LnN0YXRlID0g
J3N0YXJ0aW5nJworaW5kZXhlZERCLm9wZW4oJ3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZScpCitk
YiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2NhbGxpbmcgc2V0VmVyc2lvbigpIC0gY2FsbGJhY2sg
c2hvdWxkIHJ1biBpbW1lZGlhdGVseQorZGIuc2V0VmVyc2lvbigndmVyc2lvbiAxJykKK2NhbGxp
bmcgb3BlbigpIC0gY2FsbGJhY2sgc2hvdWxkIHdhaXQgdW50aWwgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gaXMgY29tcGxldGUKK2luZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5nZS1leGNs
dXNpdmUnKQorc2V0VmVyc2lvbigpIGNhbGxiYWNrCitzdGFydGluZyB3b3JrIGluIFZFUlNJT05f
Q0hBTkdFIHRyYW5zYWN0aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0Ugc3RhcnRl
ZCcKK3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUnKQorc3RvcmUucHV0
KDAsIDApCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCgxLCAxKQoraW4gcHV0J3Mgb25z
dWNjZXNzCitzdG9yZS5wdXQoMiwgMikKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDMs
IDMpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg0LCA0KQoraW4gcHV0J3Mgb25zdWNj
ZXNzCitzdG9yZS5wdXQoNSwgNSkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDYsIDYp
CitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg3LCA3KQoraW4gcHV0J3Mgb25zdWNjZXNz
CitzdG9yZS5wdXQoOCwgOCkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDksIDkpCitp
biBwdXQncyBvbnN1Y2Nlc3MKK2VuZGluZyB3b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0
aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0UgZmluaXNoZWQnCitvcGVuKCkgY2Fs
bGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIgYWZ0ZXIgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rp
b24gZW5kcworUEFTUyB3aW5kb3cuc3RhdGUgaXMgIlZFUlNJT05fQ0hBTkdFIGZpbmlzaGVkIgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1
c2l2ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2Ut
ZXhjbHVzaXZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzZkNjIyMjQyZTZiOTUyYTRlNDk5ZjRkMTc2ZWFl
NTUxMWUyNDE2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1s
Pg0KKzxoZWFkPg0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPg0KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+DQorPHNjcmlwdCBzcmM9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+DQor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8
Ym9keT4NCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4NCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4NCis8c2NyaXB0Pg0KKw0KK2Rlc2NyaXB0aW9uKCJFbnN1cmUgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gZG9lc24ndCBydW4gY29uY3VycmVudGx5IHdpdGggb3RoZXIgdHJhbnNhY3Rpb25z
Iik7DQoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikNCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOw0KKw0KKw0KK2Z1bmN0aW9uIHRlc3QoKSB7DQorICAg
IGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwg
d2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOw0KKyAgICBz
aG91bGRCZUZhbHNlKCJpbmRleGVkREIgPT0gbnVsbCIpOw0KKyAgICBvcGVuREJDb25uZWN0aW9u
KCk7DQorfQ0KKw0KK2Z1bmN0aW9uIG9wZW5EQkNvbm5lY3Rpb24oKQ0KK3sNCisgICAgZXZhbEFu
ZExvZygid2luZG93LnN0YXRlID0gJ3N0YXJ0aW5nJyIpOw0KKyAgICByZXF1ZXN0ID0gZXZhbEFu
ZExvZygiaW5kZXhlZERCLm9wZW4oJ3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZScpIik7DQorICAg
IHJlcXVlc3Qub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7DQorICAgIHJlcXVlc3Qub25lcnJvciA9
IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOw0KK30NCisNCitmdW5jdGlvbiBvcGVuU3VjY2Vzcygp
DQorew0KKyAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1
bHQiKTsNCisNCisgICAgZGVidWcoImNhbGxpbmcgc2V0VmVyc2lvbigpIC0gY2FsbGJhY2sgc2hv
dWxkIHJ1biBpbW1lZGlhdGVseSIpOw0KKyAgICB2YXIgdmVyc2lvbkNoYW5nZVJlcXVlc3QgPSBl
dmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEnKSIpOw0KKyAgICB2ZXJzaW9uQ2hh
bmdlUmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7DQorICAgIHZlcnNp
b25DaGFuZ2VSZXF1ZXN0Lm9uc3VjY2VzcyA9IGluU2V0VmVyc2lvbjsNCisNCisgICAgLy8gYW5k
IGNvbmN1cnJlbnRseS4uLg0KKw0KKyAgICBkZWJ1ZygiY2FsbGluZyBvcGVuKCkgLSBjYWxsYmFj
ayBzaG91bGQgd2FpdCB1bnRpbCBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0
ZSIpOw0KKyAgICB2YXIgb3BlblJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3Blbign
dmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlJykiKTsNCisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNz
ID0gb3BlbkFnYWluU3VjY2VzczsNCisgICAgb3BlblJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOw0KK30NCisNCitmdW5jdGlvbiBpblNldFZlcnNpb24oKQ0KK3sNCisg
ICAgZGVidWcoInNldFZlcnNpb24oKSBjYWxsYmFjayIpOw0KKyAgICBkZWJ1Zygic3RhcnRpbmcg
d29yayBpbiBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiIpOw0KKyAgICBldmFsQW5kTG9nKCJ3
aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0Ugc3RhcnRlZCciKTsNCisNCisgICAgd2luZG93
LnN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdC1z
dG9yZScpIik7DQorICAgIHdpbmRvdy5jb3VudCA9IDA7DQorICAgIGRvX2FzeW5jX3B1dHMoKTsN
CisNCisgICAgZnVuY3Rpb24gZG9fYXN5bmNfcHV0cygpIHsNCisgICAgICAgIHZhciByZXEgPSBl
dmFsQW5kTG9nKCJzdG9yZS5wdXQoIiArIGNvdW50ICsgIiwgIiArIGNvdW50ICsgIikiKTsNCisg
ICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7DQorICAgICAgICBy
ZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICBkZWJ1ZygiaW4gcHV0
J3Mgb25zdWNjZXNzIik7DQorICAgICAgICAgICAgaWYgKCsrd2luZG93LmNvdW50IDwgMTApIHsN
CisgICAgICAgICAgICAgICAgZG9fYXN5bmNfcHV0cygpOw0KKyAgICAgICAgICAgIH0gZWxzZSB7
DQorCSAgICAgICAgZGVidWcoImVuZGluZyB3b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0
aW9uIik7DQorCSAgICAgICAgZXZhbEFuZExvZygid2luZG93LnN0YXRlID0gJ1ZFUlNJT05fQ0hB
TkdFIGZpbmlzaGVkJyIpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH07DQorICAgIH0NCit9
DQorDQorZnVuY3Rpb24gb3BlbkFnYWluU3VjY2VzcygpDQorew0KKyAgICBkZWJ1Zygib3Blbigp
IGNhbGxiYWNrIC0gdGhpcyBzaG91bGQgYXBwZWFyIGFmdGVyIFZFUlNJT05fQ0hBTkdFIHRyYW5z
YWN0aW9uIGVuZHMiKTsNCisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RhdGUi
LCAiVkVSU0lPTl9DSEFOR0UgZmluaXNoZWQiKTsNCisgICAgZG9uZSgpOw0KK30NCisNCit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsNCisNCit0ZXN0KCk7DQorDQorPC9zY3JpcHQ+DQor
PC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzRhZGI0ZDQ2ZDhkY2ExMDRmMTViOWRj
MWQwZWQ4MDVhNzg1MTJiZS4uNzkyNjQ2ZTMwZDIyYjAyMjdjOTNlNjA1YzcwYWQ4MmRlYWY2OGJh
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTEwLTA0ICBKb3NodWEgQmVsbCAg
PGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgbWFrZSBJREJGYWN0b3J5Lm9wZW4gd2Fp
dCBmb3IgcGVuZGluZyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9ucyB0byBjb21wbGV0ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzMDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBzdG9yYWdlL2lu
ZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUuaHRtbAorCisgICAgICAgICogc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbDo6Y2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2Fs
bDo6UGVuZGluZ09wZW5DYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6dHJhbnNhY3Rpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsRG9uZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuRXZlbnR1YWxseSk6CisgICAgICAg
ICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0
KToKKwogMjAxMS0xMC0wNCAgTGVhbmRybyBQZXJlaXJhICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9i
aT4KIAogICAgICAgICBbQ01ha2VdIFVucmV2aWV3ZWQ6IHBhc3MgZmVhdHVyZSBkZWZpbml0aW9u
cyBpbiB0aGUgcmlnaHQgZm9ybWF0IGZvciB0aGUgQ1NTIHNjcmlwdHMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA4ZmU5NzFh
MjdjOTExMjQ3NTljZmYzMjAzZGU4ZGNkODU0NWY2ODZkLi5jZWRmNWJjMTAxOGI4MzQxMzk0YmY4
ZmQ2OTNkODUzOGRlOGUzMzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTM5LDYgKzM5LDIyIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxs
IDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ09wZW5DYWxsPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVu
ZGluZ09wZW5DYWxsKGNhbGxiYWNrcykpOworICAgIH0KKyAgICBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KKworcHJpdmF0ZToKKyAg
ICBQZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAg
ICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKIGNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbD4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
ZGF0YWJhc2VDYWxsYmFja3MpCkBAIC0xNzQsNiArMTkwLDggQEAgdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJ
REJDYWwKICAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFzZUNhbGxiYWNrcykKICAgICAgICAgICAg
ICgqaXQpLT5vblZlcnNpb25DaGFuZ2UodmVyc2lvbik7CiAgICAgfQorICAgIC8vIEZJWE1FOiBP
bmx5IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRo
ZQorICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQg
dXAgdG8gZmlyZS4KICAgICBpZiAobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5zaXplKCkgPiAxKSB7
CiAgICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKCk7CiAgICAgICAgIFJlZlB0cjxQZW5kaW5n
U2V0VmVyc2lvbkNhbGw+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA9IFBlbmRpbmdTZXRWZXJzaW9u
Q2FsbDo6Y3JlYXRlKHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpOwpAQCAt
MjAzLDYgKzIyMSwzMyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25J
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZgogICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKHRyYW5zYWN0aW9uKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
Ojp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHBycFRyYW5zYWN0aW9uKQoreworICAgIGlmIChwcnBUcmFuc2FjdGlvbi0+bW9kZSgp
ID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAgICBBU1NFUlQoIW1f
cnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CisgICAgICAgIG1fcnVubmluZ1ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIH0KK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBUcmFuc2FjdGlvbikKK3sKKyAgICBpZiAo
cHJwVHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0Up
IHsKKyAgICAgICAgQVNTRVJUKHBycFRyYW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbiA9IDA7CisgICAgICAgIHNldFZlcnNpb25JbnRlcm5hbERvbmUoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFs
RG9uZSgpCit7CisgICAgLy8gVGVzdCB3aGVyZSB0aGVyZSBpcyBhIHNldFZlcnNpb24gaW4gZmxp
Z2h0LCBzbyBub3QgcGVuZGluZywgYW5kIGFuIG9wZW4KKyAgICAvLyBpcyBjYWxsZWQuCisgICAg
d2hpbGUgKG1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkgJiYgIW1fcGVuZGluZ09w
ZW5DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRp
bmdPcGVuQ2FsbCA9IG1fcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgIG9wZW5F
dmVudHVhbGx5KHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCkpOworICAgIH0KK30KKwogUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlTmFtZXMsIHVuc2ln
bmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgb2JqZWN0U3RvcmVOYW1lcy0+bGVuZ3RoKCk7ICsraSkgewpAQCAtMjIxLDYgKzI2
NiwxNCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQu
YWRkKFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4oY2FsbGJhY2tzKSk7CiB9CiAKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkV2ZW50dWFsbHkoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKQorICAgICAgICBt
X3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKGNhbGxiYWNr
cykpOworICAgIGVsc2UKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7Cit9CisK
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQogewogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAppbmRleCBmNzc5MTI1MGQ5MThhYTE5ODQ0MTU5
YjI5N2IyNTNiM2JlNjQ4ZWZlLi45Y2JmNmZiMzdhMjI4OWFmMmU4NjU0MmRkMjY4OWU2MTViZTE0
ZDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuaApAQCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludDY0X3Qg
SW52YWxpZElkID0gMDsKICAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQog
ICAgIHZvaWQgb3BlbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7CisgICAgdm9p
ZCBvcGVuRXZlbnR1YWxseShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogCiAgICAgdmlydHVh
bCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIHZpcnR1YWwgU3Ry
aW5nIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KQEAgLTY4LDExICs2OSwx
NCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CisgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0
ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB2b2lk
IHRyYW5zYWN0aW9uRmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+KTsKIAogcHJpdmF0ZToKICAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0
cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvciosIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRl
bnRpZmllcik7CiAKICAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMoKTsKKyAgICB2b2lkIHNldFZl
cnNpb25JbnRlcm5hbERvbmUoKTsKIAogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9iamVjdFN0b3Jl
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAgICAgc3RhdGljIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsK
QEAgLTk2LDEwICsxMDAsMTQgQEAgcHJpdmF0ZToKICAgICBPYmplY3RTdG9yZU1hcCBtX29iamVj
dFN0b3JlczsKIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5z
YWN0aW9uQ29vcmRpbmF0b3I7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOwogCiAgICAgY2xhc3MgUGVu
ZGluZ1NldFZlcnNpb25DYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNh
bGw+ID4gbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ09wZW5D
YWxsOworICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNh
bGxzOworCiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7CiAgICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9k
YXRhYmFzZUNhbGxiYWNrc1NldDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggZTFhM2Y3MTlhYzk0YWFhMDE4MGM3OTg4OGZj
NDE2N2RiZTdiMDRjZi4uNTBmMjQ1ZmY4ZDQxMTAwNmI3Y2JkZDY2YjZmZTM2NzM1Y2ZiMzdmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNw
cApAQCAtMTEwLDcgKzExMCw5IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhCiAKICAgICBJREJE
YXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmlu
ZCh1bmlxdWVJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAu
ZW5kKCkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoaXQtPnNlY29uZCk7CisgICAg
ICAgIC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBh
bnkgcGVuZGluZworICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRlLgorICAg
ICAgICBpdC0+c2Vjb25kLT5vcGVuRXZlbnR1YWxseShjYWxsYmFja3MpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCAxNTZjYjg5YTlmYjA5ZGE1MDRmNDVhOTc4ZTAyNzNl
YTNhNmE1NjRhLi4wMTVkYTE4ZDY5YTgyOGM1NTcxNzlhMGZjMWFmMGMxMjkzMzYyYmVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5jcHAKQEAgLTEzMSw2ICsxMzEsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmFib3J0KCkKICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydCgpOwogICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CiAgICAg
QVNTRVJUKCFtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRo
aXMpKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwogICAgIG1f
ZGF0YWJhc2UgPSAwOwogfQogCkBAIC0xNzEsNiArMTcyLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpzdGFydCgpCiAKICAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOwogICAg
IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlv
bih0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7CiB9CiAK
IHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKQEAgLTE4Niw2ICsxODgs
NyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCiAgICAgbV90cmFu
c2FjdGlvbi0+Y29tbWl0KCk7CiAgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUoKTsKICAgICBt
X2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9u
KHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CiAgICAg
bV9kYXRhYmFzZSA9IDA7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109713</attachid>
            <date>2011-10-04 16:37:29 -0700</date>
            <delta_ts>2011-10-05 13:40:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69307-20111004163728.patch</filename>
            <type>text/plain</type>
            <size>15922</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2MDgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhZTQ3MDFhMGYyNjI5OGI1MDY1ZjBj
YzRmMTM2ZDk4ODMzNGVkMmRhLi4zZmFkMDc5OWNmNjk0NDZjNDhkODRjYTZmMzkwODMyZDdmMGYx
NjI1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMDQgIEpvc2h1YSBCZWxsICA8anNi
ZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZv
ciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
dmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLmh0bWw6IEFkZGVkLgor
CiAyMDExLTEwLTA0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmVzdG9yZSBMaW51eCBiYXNlbGluZSBmb3IgdGhpcyB0ZXN0LiAgVGhlIExpbnV4IGJhc2VsaW5l
IGdvdCBjbG9iYmVyZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM4OWU2N2I2ZjkwZWIwZDIxNjExZTdhZWZiZmIxZDFmNTA4NzQzZWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1l
eGNsdXNpdmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0Vuc3VyZSBWRVJTSU9OX0NI
QU5HRSB0cmFuc2FjdGlvbiBkb2Vzbid0IHJ1biBjb25jdXJyZW50bHkgd2l0aCBvdGhlciB0cmFu
c2FjdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWREQiA9IHdp
bmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5k
ZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQord2luZG93LnN0YXRlID0g
J3N0YXJ0aW5nJworaW5kZXhlZERCLm9wZW4oJ3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZScpCitk
YiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2NhbGxpbmcgc2V0VmVyc2lvbigpIC0gY2FsbGJhY2sg
c2hvdWxkIHJ1biBpbW1lZGlhdGVseQorZGIuc2V0VmVyc2lvbigndmVyc2lvbiAxJykKK2NhbGxp
bmcgb3BlbigpIC0gY2FsbGJhY2sgc2hvdWxkIHdhaXQgdW50aWwgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gaXMgY29tcGxldGUKK2luZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5nZS1leGNs
dXNpdmUnKQorc2V0VmVyc2lvbigpIGNhbGxiYWNrCitzdGFydGluZyB3b3JrIGluIFZFUlNJT05f
Q0hBTkdFIHRyYW5zYWN0aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0Ugc3RhcnRl
ZCcKK3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUnKQorc3RvcmUucHV0
KDAsIDApCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCgxLCAxKQoraW4gcHV0J3Mgb25z
dWNjZXNzCitzdG9yZS5wdXQoMiwgMikKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDMs
IDMpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg0LCA0KQoraW4gcHV0J3Mgb25zdWNj
ZXNzCitzdG9yZS5wdXQoNSwgNSkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDYsIDYp
CitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg3LCA3KQoraW4gcHV0J3Mgb25zdWNjZXNz
CitzdG9yZS5wdXQoOCwgOCkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDksIDkpCitp
biBwdXQncyBvbnN1Y2Nlc3MKK2VuZGluZyB3b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0
aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0UgZmluaXNoZWQnCitvcGVuKCkgY2Fs
bGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIgYWZ0ZXIgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rp
b24gZW5kcworUEFTUyB3aW5kb3cuc3RhdGUgaXMgIlZFUlNJT05fQ0hBTkdFIGZpbmlzaGVkIgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1
c2l2ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2Ut
ZXhjbHVzaXZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzZkNjIyMjQyZTZiOTUyYTRlNDk5ZjRkMTc2ZWFl
NTUxMWUyNDE2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1s
Pg0KKzxoZWFkPg0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPg0KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+DQorPHNjcmlwdCBzcmM9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+DQor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8
Ym9keT4NCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4NCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4NCis8c2NyaXB0Pg0KKw0KK2Rlc2NyaXB0aW9uKCJFbnN1cmUgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gZG9lc24ndCBydW4gY29uY3VycmVudGx5IHdpdGggb3RoZXIgdHJhbnNhY3Rpb25z
Iik7DQoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikNCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOw0KKw0KKw0KK2Z1bmN0aW9uIHRlc3QoKSB7DQorICAg
IGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwg
d2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOw0KKyAgICBz
aG91bGRCZUZhbHNlKCJpbmRleGVkREIgPT0gbnVsbCIpOw0KKyAgICBvcGVuREJDb25uZWN0aW9u
KCk7DQorfQ0KKw0KK2Z1bmN0aW9uIG9wZW5EQkNvbm5lY3Rpb24oKQ0KK3sNCisgICAgZXZhbEFu
ZExvZygid2luZG93LnN0YXRlID0gJ3N0YXJ0aW5nJyIpOw0KKyAgICByZXF1ZXN0ID0gZXZhbEFu
ZExvZygiaW5kZXhlZERCLm9wZW4oJ3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZScpIik7DQorICAg
IHJlcXVlc3Qub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7DQorICAgIHJlcXVlc3Qub25lcnJvciA9
IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOw0KK30NCisNCitmdW5jdGlvbiBvcGVuU3VjY2Vzcygp
DQorew0KKyAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1
bHQiKTsNCisNCisgICAgZGVidWcoImNhbGxpbmcgc2V0VmVyc2lvbigpIC0gY2FsbGJhY2sgc2hv
dWxkIHJ1biBpbW1lZGlhdGVseSIpOw0KKyAgICB2YXIgdmVyc2lvbkNoYW5nZVJlcXVlc3QgPSBl
dmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEnKSIpOw0KKyAgICB2ZXJzaW9uQ2hh
bmdlUmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7DQorICAgIHZlcnNp
b25DaGFuZ2VSZXF1ZXN0Lm9uc3VjY2VzcyA9IGluU2V0VmVyc2lvbjsNCisNCisgICAgLy8gYW5k
IGNvbmN1cnJlbnRseS4uLg0KKw0KKyAgICBkZWJ1ZygiY2FsbGluZyBvcGVuKCkgLSBjYWxsYmFj
ayBzaG91bGQgd2FpdCB1bnRpbCBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0
ZSIpOw0KKyAgICB2YXIgb3BlblJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3Blbign
dmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlJykiKTsNCisgICAgb3BlblJlcXVlc3Qub25zdWNjZXNz
ID0gb3BlbkFnYWluU3VjY2VzczsNCisgICAgb3BlblJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOw0KK30NCisNCitmdW5jdGlvbiBpblNldFZlcnNpb24oKQ0KK3sNCisg
ICAgZGVidWcoInNldFZlcnNpb24oKSBjYWxsYmFjayIpOw0KKyAgICBkZWJ1Zygic3RhcnRpbmcg
d29yayBpbiBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiIpOw0KKyAgICBldmFsQW5kTG9nKCJ3
aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0Ugc3RhcnRlZCciKTsNCisNCisgICAgd2luZG93
LnN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdC1z
dG9yZScpIik7DQorICAgIHdpbmRvdy5jb3VudCA9IDA7DQorICAgIGRvX2FzeW5jX3B1dHMoKTsN
CisNCisgICAgZnVuY3Rpb24gZG9fYXN5bmNfcHV0cygpIHsNCisgICAgICAgIHZhciByZXEgPSBl
dmFsQW5kTG9nKCJzdG9yZS5wdXQoIiArIGNvdW50ICsgIiwgIiArIGNvdW50ICsgIikiKTsNCisg
ICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7DQorICAgICAgICBy
ZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICBkZWJ1ZygiaW4gcHV0
J3Mgb25zdWNjZXNzIik7DQorICAgICAgICAgICAgaWYgKCsrd2luZG93LmNvdW50IDwgMTApIHsN
CisgICAgICAgICAgICAgICAgZG9fYXN5bmNfcHV0cygpOw0KKyAgICAgICAgICAgIH0gZWxzZSB7
DQorCSAgICAgICAgZGVidWcoImVuZGluZyB3b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0
aW9uIik7DQorCSAgICAgICAgZXZhbEFuZExvZygid2luZG93LnN0YXRlID0gJ1ZFUlNJT05fQ0hB
TkdFIGZpbmlzaGVkJyIpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH07DQorICAgIH0NCit9
DQorDQorZnVuY3Rpb24gb3BlbkFnYWluU3VjY2VzcygpDQorew0KKyAgICBkZWJ1Zygib3Blbigp
IGNhbGxiYWNrIC0gdGhpcyBzaG91bGQgYXBwZWFyIGFmdGVyIFZFUlNJT05fQ0hBTkdFIHRyYW5z
YWN0aW9uIGVuZHMiKTsNCisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RhdGUi
LCAiVkVSU0lPTl9DSEFOR0UgZmluaXNoZWQiKTsNCisgICAgZG9uZSgpOw0KK30NCisNCit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsNCisNCit0ZXN0KCk7DQorDQorPC9zY3JpcHQ+DQor
PC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzRhZGI0ZDQ2ZDhkY2ExMDRmMTViOWRj
MWQwZWQ4MDVhNzg1MTJiZS4uNzkyNjQ2ZTMwZDIyYjAyMjdjOTNlNjA1YzcwYWQ4MmRlYWY2OGJh
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTEwLTA0ICBKb3NodWEgQmVsbCAg
PGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgbWFrZSBJREJGYWN0b3J5Lm9wZW4gd2Fp
dCBmb3IgcGVuZGluZyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9ucyB0byBjb21wbGV0ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzMDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBzdG9yYWdlL2lu
ZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUuaHRtbAorCisgICAgICAgICogc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbDo6Y2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2Fs
bDo6UGVuZGluZ09wZW5DYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6dHJhbnNhY3Rpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsRG9uZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuRXZlbnR1YWxseSk6CisgICAgICAg
ICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0
KToKKwogMjAxMS0xMC0wNCAgTGVhbmRybyBQZXJlaXJhICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9i
aT4KIAogICAgICAgICBbQ01ha2VdIFVucmV2aWV3ZWQ6IHBhc3MgZmVhdHVyZSBkZWZpbml0aW9u
cyBpbiB0aGUgcmlnaHQgZm9ybWF0IGZvciB0aGUgQ1NTIHNjcmlwdHMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA4ZmU5NzFh
MjdjOTExMjQ3NTljZmYzMjAzZGU4ZGNkODU0NWY2ODZkLi43YTMzZDVmYjI1NmRjMDJmMTZlNWNj
ZDhkYmEyYzBlNTJmNmRhNWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTM5LDYgKzM5LDIyIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxs
IDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ09wZW5DYWxsPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVu
ZGluZ09wZW5DYWxsKGNhbGxiYWNrcykpOworICAgIH0KKyAgICBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KKworcHJpdmF0ZToKKyAg
ICBQZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAg
ICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKIGNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbD4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
ZGF0YWJhc2VDYWxsYmFja3MpCkBAIC0xNzQsMTIgKzE5MCwxOSBAQCB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRy
PElEQkNhbAogICAgICAgICBpZiAoKml0ICE9IGRhdGFiYXNlQ2FsbGJhY2tzKQogICAgICAgICAg
ICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZSh2ZXJzaW9uKTsKICAgICB9CisgICAgLy8gRklYTUU6
IE9ubHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIg
dGhlCisgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNl
dCB1cCB0byBmaXJlLgogICAgIGlmIChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKSA+IDEp
IHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQoKTsKICAgICAgICAgUmVmUHRyPFBlbmRp
bmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gUGVuZGluZ1NldFZlcnNp
b25DYWxsOjpjcmVhdGUodmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7CiAg
ICAgICAgIG1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5hcHBlbmQocGVuZGluZ1NldFZlcnNpb25D
YWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uKSB7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+
IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA9IFBlbmRpbmdTZXRWZXJzaW9uQ2FsbDo6Y3JlYXRlKHZl
cnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpOworICAgICAgICBtX3BlbmRpbmdT
ZXRWZXJzaW9uQ2FsbHMuYXBwZW5kKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1l
cyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7CkBAIC0yMDMsNiArMjI2LDQwIEBAIHZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModHJhbnNhY3Rpb24pOwogfQog
Cit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwVHJhbnNhY3Rpb24pCit7Cisg
ICAgaWYgKHBycFRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05f
Q0hBTkdFKSB7CisgICAgICAgIEFTU0VSVCghbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uKTsKKyAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gcHJwVHJh
bnNhY3Rpb247CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5z
YWN0aW9uRmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHBycFRyYW5zYWN0aW9uKQoreworICAgIGlmIChwcnBUcmFuc2FjdGlvbi0+bW9kZSgpID09IElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAgICBBU1NFUlQocHJwVHJhbnNh
Y3Rpb24uZ2V0KCkgPT0gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsK
KyAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gMDsKKyAgICAgICAg
c2V0VmVyc2lvbkludGVybmFsRG9uZSgpOworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWxEb25lKCkKK3sKKyAgICBpZiAoIW1fcGVuZGlu
Z1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHBlbmRpbmdTZXRWZXJz
aW9uQ2FsbCA9IG1fcGVuZGluZ1NldFZlcnNpb25DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAg
Ly8gRklYTUU6IGlmIHNldFZlcnNpb24gcmV0dXJucyB3L28gaW5pdGlhdGluZyBhIHRyYW5zYWN0
aW9uLCBwZW5kaW5nIG9wZW5zIHdpbGwgbmV2ZXIgcnVuCisgICAgICAgIHNldFZlcnNpb24ocGVu
ZGluZ1NldFZlcnNpb25DYWxsLT52ZXJzaW9uKCksIHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+Y2Fs
bGJhY2tzKCksIHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgZWMp
OworICAgICAgICBBU1NFUlQoIWVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdo
aWxlIChtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpICYmICFtX3BlbmRpbmdPcGVu
Q2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICBSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5n
T3BlbkNhbGwgPSBtX3BlbmRpbmdPcGVuQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICBvcGVuRXZl
bnR1YWxseShwZW5kaW5nT3BlbkNhbGwtPmNhbGxiYWNrcygpKTsKKyAgICB9Cit9CisKIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25l
ZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9iamVjdFN0b3JlTmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKQEAgLTIyMSw2ICsyNzgs
MTQgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuKFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFk
ZChSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KGNhbGxiYWNrcykpOwogfQogCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5FdmVudHVhbGx5KFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCit7CisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9w
ZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3Mp
KTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMpOworfQorCiB2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+IHBycENhbGxiYWNrcykKIHsKICAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggZjc3OTEyNTBkOTE4YWExOTg0NDE1OWIy
OTdiMjUzYjNiZTY0OGVmZS4uOWNiZjZmYjM3YTIyODlhZjJlODY1NDJkZDI2ODllNjE1YmUxNGQw
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmgKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IElu
dmFsaWRJZCA9IDA7CiAgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAg
ICB2b2lkIG9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOworICAgIHZvaWQg
b3BlbkV2ZW50dWFsbHkoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIHZpcnR1YWwg
U3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICB2aXJ0dWFsIFN0cmlu
ZyB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CkBAIC02OCwxMSArNjksMTQg
QEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQorICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVk
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgdm9pZCB0
cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPik7CiAKIHByaXZhdGU6CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJp
bmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IqLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50
aWZpZXIpOwogCiAgICAgdm9pZCBsb2FkT2JqZWN0U3RvcmVzKCk7CisgICAgdm9pZCBzZXRWZXJz
aW9uSW50ZXJuYWxEb25lKCk7CiAKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUlu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogICAgIHN0YXRpYyB2b2lkIGRl
bGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CkBA
IC05NiwxMCArMTAwLDE0IEBAIHByaXZhdGU6CiAgICAgT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RT
dG9yZXM7CiAKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKIAogICAgIGNsYXNzIFBlbmRp
bmdTZXRWZXJzaW9uQ2FsbDsKICAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxs
PiA+IG1fcGVuZGluZ1NldFZlcnNpb25DYWxsczsKIAorICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2Fs
bDsKKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiA+IG1fcGVuZGluZ09wZW5DYWxs
czsKKwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiA+IERhdGFiYXNlQ2FsbGJhY2tzU2V0OwogICAgIERhdGFiYXNlQ2FsbGJhY2tzU2V0IG1fZGF0
YWJhc2VDYWxsYmFja3NTZXQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IGUxYTNmNzE5YWM5NGFhYTAxODBjNzk4ODhmYzQx
NjdkYmU3YjA0Y2YuLjUwZjI0NWZmOGQ0MTEwMDZiN2NiZGQ2NmI2ZmUzNjczNWNmYjM3ZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAK
QEAgLTExMCw3ICsxMTAsOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYQogCiAgICAgSURCRGF0
YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQo
dW5pcXVlSWRlbnRpZmllcik7CiAgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVu
ZCgpKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGl0LT5zZWNvbmQpOworICAgICAg
ICAvLyBJZiBpdCdzIGFscmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55
IHBlbmRpbmcKKyAgICAgICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KKyAgICAg
ICAgaXQtPnNlY29uZC0+b3BlbkV2ZW50dWFsbHkoY2FsbGJhY2tzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5jcHAKaW5kZXggMTU2Y2I4OWE5ZmIwOWRhNTA0ZjQ1YTk3OGUwMjczZWEz
YTZhNTY0YS4uMDE1ZGExOGQ2OWE4MjhjNTU3MTc5YTBmYzFhZjBjMTI5MzM2MmJlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwCkBAIC0xMzEsNiArMTMxLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjph
Ym9ydCgpCiAgICAgbV9jYWxsYmFja3MtPm9uQWJvcnQoKTsKICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIEFT
U0VSVCghbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5pc0FjdGl2ZSh0aGlz
KSk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKICAgICBtX2Rh
dGFiYXNlID0gMDsKIH0KIApAQCAtMTcxLDYgKzE3Miw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6c3RhcnQoKQogCiAgICAgbV9zdGF0ZSA9IFN0YXJ0UGVuZGluZzsKICAgICBt
X2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZFN0YXJ0VHJhbnNhY3Rpb24o
dGhpcyk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25TdGFydGVkKHRoaXMpOwogfQogCiB2
b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCkBAIC0xODYsNiArMTg4LDcg
QEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQogICAgIG1fdHJhbnNh
Y3Rpb24tPmNvbW1pdCgpOwogICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKCk7CiAgICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0
aGlzKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwogICAgIG1f
ZGF0YWJhc2UgPSAwOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109852</attachid>
            <date>2011-10-05 13:40:09 -0700</date>
            <delta_ts>2011-10-07 15:28:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69307-20111005134008.patch</filename>
            <type>text/plain</type>
            <size>16220</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2MDgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhZTQ3MDFhMGYyNjI5OGI1MDY1ZjBj
YzRmMTM2ZDk4ODMzNGVkMmRhLi4zZmFkMDc5OWNmNjk0NDZjNDhkODRjYTZmMzkwODMyZDdmMGYx
NjI1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMDQgIEpvc2h1YSBCZWxsICA8anNi
ZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZv
ciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
dmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLmh0bWw6IEFkZGVkLgor
CiAyMDExLTEwLTA0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmVzdG9yZSBMaW51eCBiYXNlbGluZSBmb3IgdGhpcyB0ZXN0LiAgVGhlIExpbnV4IGJhc2VsaW5l
IGdvdCBjbG9iYmVyZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM4OWU2N2I2ZjkwZWIwZDIxNjExZTdhZWZiZmIxZDFmNTA4NzQzZWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1l
eGNsdXNpdmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0Vuc3VyZSBWRVJTSU9OX0NI
QU5HRSB0cmFuc2FjdGlvbiBkb2Vzbid0IHJ1biBjb25jdXJyZW50bHkgd2l0aCBvdGhlciB0cmFu
c2FjdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWREQiA9IHdp
bmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5k
ZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQord2luZG93LnN0YXRlID0g
J3N0YXJ0aW5nJworaW5kZXhlZERCLm9wZW4oJ3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZScpCitk
YiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2NhbGxpbmcgc2V0VmVyc2lvbigpIC0gY2FsbGJhY2sg
c2hvdWxkIHJ1biBpbW1lZGlhdGVseQorZGIuc2V0VmVyc2lvbigndmVyc2lvbiAxJykKK2NhbGxp
bmcgb3BlbigpIC0gY2FsbGJhY2sgc2hvdWxkIHdhaXQgdW50aWwgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gaXMgY29tcGxldGUKK2luZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5nZS1leGNs
dXNpdmUnKQorc2V0VmVyc2lvbigpIGNhbGxiYWNrCitzdGFydGluZyB3b3JrIGluIFZFUlNJT05f
Q0hBTkdFIHRyYW5zYWN0aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0Ugc3RhcnRl
ZCcKK3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUnKQorc3RvcmUucHV0
KDAsIDApCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCgxLCAxKQoraW4gcHV0J3Mgb25z
dWNjZXNzCitzdG9yZS5wdXQoMiwgMikKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDMs
IDMpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg0LCA0KQoraW4gcHV0J3Mgb25zdWNj
ZXNzCitzdG9yZS5wdXQoNSwgNSkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDYsIDYp
CitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg3LCA3KQoraW4gcHV0J3Mgb25zdWNjZXNz
CitzdG9yZS5wdXQoOCwgOCkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDksIDkpCitp
biBwdXQncyBvbnN1Y2Nlc3MKK2VuZGluZyB3b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0
aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0UgZmluaXNoZWQnCitvcGVuKCkgY2Fs
bGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIgYWZ0ZXIgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rp
b24gZW5kcworUEFTUyB3aW5kb3cuc3RhdGUgaXMgIlZFUlNJT05fQ0hBTkdFIGZpbmlzaGVkIgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1
c2l2ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2Ut
ZXhjbHVzaXZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVlZDBhMzk0ZDk3ZTgzNzBiMDBkNmYzYmJjNzRm
ZDQ5MzBlZDQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQ+CisKK2Rlc2NyaXB0aW9uKCJFbnN1cmUgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gZG9l
c24ndCBydW4gY29uY3VycmVudGx5IHdpdGggb3RoZXIgdHJhbnNhY3Rpb25zIik7CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKworCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGluZGV4ZWREQiA9IGV2YWxB
bmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4
ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOworICAgIHNob3VsZEJlRmFsc2UoImluZGV4
ZWREQiA9PSBudWxsIik7CisgICAgb3BlbkRCQ29ubmVjdGlvbigpOworfQorCitmdW5jdGlvbiBv
cGVuREJDb25uZWN0aW9uKCkKK3sKKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuc3RhdGUgPSAnc3Rh
cnRpbmcnIik7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVuKCd2ZXJz
aW9uLWNoYW5nZS1leGNsdXNpdmUnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gb3BlblN1
Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9
CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkKK3sKKyAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9n
KCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKworICAgIGRlYnVnKCJjYWxsaW5nIHNldFZl
cnNpb24oKSAtIGNhbGxiYWNrIHNob3VsZCBydW4gaW1tZWRpYXRlbHkiKTsKKyAgICB2YXIgdmVy
c2lvbkNoYW5nZVJlcXVlc3QgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEn
KSIpOworICAgIHZlcnNpb25DaGFuZ2VSZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjazsKKyAgICB2ZXJzaW9uQ2hhbmdlUmVxdWVzdC5vbnN1Y2Nlc3MgPSBpblNldFZlcnNp
b247CisKKyAgICAvLyBhbmQgY29uY3VycmVudGx5Li4uCisKKyAgICBkZWJ1ZygiY2FsbGluZyBv
cGVuKCkgLSBjYWxsYmFjayBzaG91bGQgd2FpdCB1bnRpbCBWRVJTSU9OX0NIQU5HRSB0cmFuc2Fj
dGlvbiBpcyBjb21wbGV0ZSIpOworICAgIHZhciBvcGVuUmVxdWVzdCA9IGV2YWxBbmRMb2coImlu
ZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUnKSIpOworICAgIG9wZW5SZXF1
ZXN0Lm9uc3VjY2VzcyA9IG9wZW5BZ2FpblN1Y2Nlc3M7CisgICAgb3BlblJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBpblNldFZlcnNpb24o
KQoreworICAgIGRlYnVnKCJzZXRWZXJzaW9uKCkgY2FsbGJhY2siKTsKKyAgICBkZWJ1Zygic3Rh
cnRpbmcgd29yayBpbiBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiIpOworICAgIGV2YWxBbmRM
b2coIndpbmRvdy5zdGF0ZSA9ICdWRVJTSU9OX0NIQU5HRSBzdGFydGVkJyIpOworCisgICAgd2lu
ZG93LnN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgndGVz
dC1zdG9yZScpIik7CisgICAgd2luZG93LmNvdW50ID0gMDsKKyAgICBkb19hc3luY19wdXRzKCk7
CisKKyAgICBmdW5jdGlvbiBkb19hc3luY19wdXRzKCkgeworICAgICAgICB2YXIgcmVxID0gZXZh
bEFuZExvZygic3RvcmUucHV0KCIgKyBjb3VudCArICIsICIgKyBjb3VudCArICIpIik7CisgICAg
ICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgZGVidWcoImluIHB1dCdzIG9u
c3VjY2VzcyIpOworICAgICAgICAgICAgaWYgKCsrd2luZG93LmNvdW50IDwgMTApIHsKKyAgICAg
ICAgICAgICAgICBkb19hc3luY19wdXRzKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGRlYnVnKCJlbmRpbmcgd29yayBpbiBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlv
biIpOworICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coIndpbmRvdy5zdGF0ZSA9ICdWRVJTSU9O
X0NIQU5HRSBmaW5pc2hlZCciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIG9wZW5BZ2FpblN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJvcGVuKCkgY2Fs
bGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIgYWZ0ZXIgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rp
b24gZW5kcyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0YXRlIiwgIlZF
UlNJT05fQ0hBTkdFIGZpbmlzaGVkIik7CisgICAgZG9uZSgpOworfQorCit2YXIgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAzNGFkYjRkNDZkOGRjYTEwNGYxNWI5ZGMxZDBlZDgwNWE3ODUxMmJl
Li43OTI2NDZlMzBkMjJiMDIyN2M5M2U2MDVjNzBhZDgyZGVhZjY4YmFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMDQgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZvciBwZW5kaW5nIHNl
dFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24t
Y2hhbmdlLWV4Y2x1c2l2ZS5odG1sCisKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
UGVuZGluZ09wZW5DYWxsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsOjpQZW5kaW5nT3BlbkNh
bGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlv
blN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJh
bnNhY3Rpb25GaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpzZXRWZXJzaW9uSW50ZXJuYWxEb25lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlQmFja2VuZEltcGw6Om9wZW5FdmVudHVhbGx5KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5k
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4p
OgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzdGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQpOgorCiAyMDExLTEwLTA0
ICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFtD
TWFrZV0gVW5yZXZpZXdlZDogcGFzcyBmZWF0dXJlIGRlZmluaXRpb25zIGluIHRoZSByaWdodCBm
b3JtYXQgZm9yIHRoZSBDU1Mgc2NyaXB0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IDhmZTk3MWEyN2M5MTEyNDc1OWNmZjMy
MDNkZThkY2Q4NTQ1ZjY4NmQuLmI4YzcyOGVhN2MzNzJkNGRlYTZhYWNkZDliODVhMmZhMWM5OWFh
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcApAQCAtMzksNiArMzksMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbkNhbGwgOiBwdWJsaWMgUmVmQ291
bnRlZDxQZW5kaW5nT3BlbkNhbGw+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
ZW5kaW5nT3BlbkNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQZW5kaW5nT3BlbkNhbGwoY2Fs
bGJhY2tzKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mo
KSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorCitwcml2YXRlOgorICAgIFBlbmRpbmdPcGVuQ2Fs
bChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY2FsbGJh
Y2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1f
Y2FsbGJhY2tzOworfTsKKwogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ1Nl
dFZlcnNpb25DYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ1NldFZlcnNpb25DYWxsPiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNr
cykKQEAgLTE2OCwxOCArMTg0LDI2IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0
VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsCiAgICAgUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERhdGFiYXNl
Q2FsbGJhY2tzOwogICAgIGlmICghbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhkYXRh
YmFzZUNhbGxiYWNrcykpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QUJPUlRfRVJSLCAiQ29ubmVjdGlv
biB3YXMgY2xvc2VkIGJlZm9yZSBzZXQgdmVyc2lvbiB0cmFuc2FjdGlvbiB3YXMgY3JlYXRlZCIp
KTsKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9k
YXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCiAg
ICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOwogICAgIH0KKyAgICAv
LyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9u
cyBhZnRlciB0aGUKKyAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90
IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCiAgICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6
ZSgpID4gMSkgewogICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwogICAgICAgICBSZWZQ
dHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBQZW5kaW5n
U2V0VmVyc2lvbkNhbGw6OmNyZWF0ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJh
Y2tzKTsKICAgICAgICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmFwcGVuZChwZW5kaW5nU2V0
VmVyc2lvbkNhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJz
aW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gUGVuZGluZ1NldFZlcnNpb25DYWxsOjpj
cmVhdGUodmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgICAgIG1f
cGVuZGluZ1NldFZlcnNpb25DYWxscy5hcHBlbmQocGVuZGluZ1NldFZlcnNpb25DYWxsKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RT
dG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKQEAgLTIwMyw2ICsyMjcsMzkgQEAgdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWYKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0cmFuc2FjdGlv
bik7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFydGVk
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBUcmFuc2FjdGlv
bikKK3sKKyAgICBpZiAocHJwVHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6
VkVSU0lPTl9DSEFOR0UpIHsKKyAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24pOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24g
PSBwcnBUcmFuc2FjdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6dHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gcHJwVHJhbnNhY3Rpb24pCit7CisgICAgaWYgKHBycFRyYW5zYWN0aW9uLT5tb2Rl
KCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7CisgICAgICAgIEFTU0VSVChw
cnBUcmFuc2FjdGlvbi5nZXQoKSA9PSBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24u
Z2V0KCkpOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSAwOwor
ICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQoreworICAgIGlmICghbV9wZW5k
aW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZl
cnNpb25DYWxsID0gbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLnRha2VGaXJzdCgpOworICAgICAg
ICBzZXRWZXJzaW9uKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+dmVyc2lvbigpLCBwZW5kaW5nU2V0
VmVyc2lvbkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPmRhdGFiYXNl
Q2FsbGJhY2tzKCksIGVjKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICB3aGlsZSAobV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSAm
JiAhbV9wZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgUmVmUHRyPFBlbmRpbmdP
cGVuQ2FsbD4gcGVuZGluZ09wZW5DYWxsID0gbV9wZW5kaW5nT3BlbkNhbGxzLnRha2VGaXJzdCgp
OworICAgICAgb3BlbkV2ZW50dWFsbHkocGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSk7Cisg
ICAgfQorfQorCiBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7
CkBAIC0yMjEsNiArMjc4LDE0IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbihQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgbV9kYXRhYmFz
ZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPihjYWxsYmFja3Mp
KTsKIH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuRXZlbnR1YWxseShQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIGlmIChtX3J1bm5pbmdWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5
KCkpCisgICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpj
cmVhdGUoY2FsbGJhY2tzKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyh0aGlzKTsKK30KKwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbG9zZShQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCiB7CiAgICAgUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCmluZGV4IGY3NzkxMjUw
ZDkxOGFhMTk4NDQxNTliMjk3YjI1M2IzYmU2NDhlZmUuLjNiZjdkMTJmNGNkNWZlODQzODRiMWFh
YWM3YzdhZDQ0MGFlYzBjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwogICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJl
dHVybiBtX2lkOyB9CiAgICAgdm9pZCBvcGVuKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+KTsKKyAgICB2b2lkIG9wZW5FdmVudHVhbGx5KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7
CiAKICAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAg
ICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQpA
QCAtNjgsMTEgKzY5LDE0IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25z
dCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KKyAgICB2b2lkIHRy
YW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4pOwogCiBwcml2YXRlOgogICAgIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3Ry
aW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgbG9hZE9iamVjdFN0b3JlcygpOwor
ICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwogCiAgICAgc3RhdGljIHZvaWQgY3JlYXRl
T2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICBz
dGF0aWMgdm9pZCBkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4pOwpAQCAtOTYsMTAgKzEwMCwxNCBAQCBwcml2YXRlOgogICAgIE9iamVjdFN0b3Jl
TWFwIG1fb2JqZWN0U3RvcmVzOwogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcjsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247CiAKICAg
ICBjbGFzcyBQZW5kaW5nU2V0VmVyc2lvbkNhbGw7CiAgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbD4gPiBtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHM7CiAKKyAgICBjbGFzcyBQ
ZW5kaW5nT3BlbkNhbGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gPiBtX3Bl
bmRpbmdPcGVuQ2FsbHM7CisKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gPiBEYXRhYmFzZUNhbGxiYWNrc1NldDsKICAgICBEYXRhYmFzZUNhbGxi
YWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCBlMWEzZjcxOWFjOTRhYWEw
MTgwYzc5ODg4ZmM0MTY3ZGJlN2IwNGNmLi41MGYyNDVmZjhkNDExMDA2YjdjYmRkNjZiNmZlMzY3
MzVjZmIzN2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwCkBAIC0xMTAsNyArMTEwLDkgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EK
IAogICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFj
a2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOwogICAgIGlmIChpdCAhPSBtX2RhdGFiYXNl
QmFja2VuZE1hcC5lbmQoKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhpdC0+c2Vj
b25kKTsKKyAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGJlZW4gb3BlbmVkLCB3ZSBoYXZlIHRv
IHdhaXQgZm9yIGFueSBwZW5kaW5nCisgICAgICAgIC8vIHNldFZlcnNpb24gY2FsbHMgdG8gY29t
cGxldGUuCisgICAgICAgIGl0LT5zZWNvbmQtPm9wZW5FdmVudHVhbGx5KGNhbGxiYWNrcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCmluZGV4IDE1NmNiODlhOWZiMDlkYTUwNGY0
NWE5NzhlMDI3M2VhM2E2YTU2NGEuLjAxNWRhMThkNjlhODI4YzU1NzE3OWEwZmMxYWYwYzEyOTMz
NjJiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmNwcApAQCAtMTMxLDYgKzEzMSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6YWJvcnQoKQogICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KCk7CiAgICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0
aGlzKTsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+
aXNBY3RpdmUodGhpcykpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhp
cyk7CiAgICAgbV9kYXRhYmFzZSA9IDA7CiB9CiAKQEAgLTE3MSw2ICsxNzIsNyBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnN0YXJ0KCkKIAogICAgIG1fc3RhdGUgPSBTdGFydFBl
bmRpbmc7CiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFy
dFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0
aGlzKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQpAQCAt
MTg2LDYgKzE4OCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkK
ICAgICBtX3RyYW5zYWN0aW9uLT5jb21taXQoKTsKICAgICBtX2NhbGxiYWNrcy0+b25Db21wbGV0
ZSgpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNo
VHJhbnNhY3Rpb24odGhpcyk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0
aGlzKTsKICAgICBtX2RhdGFiYXNlID0gMDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110227</attachid>
            <date>2011-10-07 15:28:21 -0700</date>
            <delta_ts>2011-10-12 16:05:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69307-20111007152820.patch</filename>
            <type>text/plain</type>
            <size>30614</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2MDgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhZTQ3MDFhMGYyNjI5OGI1MDY1ZjBj
YzRmMTM2ZDk4ODMzNGVkMmRhLi4zZmFkMDc5OWNmNjk0NDZjNDhkODRjYTZmMzkwODMyZDdmMGYx
NjI1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMDQgIEpvc2h1YSBCZWxsICA8anNi
ZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZv
ciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
dmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLmh0bWw6IEFkZGVkLgor
CiAyMDExLTEwLTA0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmVzdG9yZSBMaW51eCBiYXNlbGluZSBmb3IgdGhpcyB0ZXN0LiAgVGhlIExpbnV4IGJhc2VsaW5l
IGdvdCBjbG9iYmVyZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L29wZW4tY2xvc2UtdmVyc2lvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4Yjg2
NDQ3YjViZjYzM2NhOTRiNDk3YmIxZTZjMjNiOWUyNmEzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24tZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsODMgQEAKK1Rlc3QgaW50ZXJsZWF2ZWQgb3Blbi9jbG9zZS9zZXRWZXJz
aW9uIGNhbGxzIGluIHZhcmlvdXMgcGVybXV0YXRpb25zCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJ
bmRleGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsKK1BBU1MgaW5kZXhlZERCID09IG51bGwg
aXMgZmFsc2UKKworVEVTVDogc2V0VmVyc2lvbiBibG9ja2VkIG9uIG9wZW4gaGFuZGxlcword2lu
ZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQor
J2gxLm9wZW4nCisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDIub3BlbicKKydoMi5vcGVuLm9uc3Vj
Y2VzcycKKydoMS5zZXRWZXJzaW9uJworJ2gyLm9udmVyc2lvbmNoYW5nZScKKyAgICBoMiBjbG9z
aW5nLCBidXQgbm90IGltbWVkaWF0ZWx5CisnaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQnCisnaDIu
Y2xvc2UnCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRvdy5zdGVwcy50b1N0
cmluZygpIGlzICJoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1
Y2Nlc3MsaDEuc2V0VmVyc2lvbixoMi5vbnZlcnNpb25jaGFuZ2UsaDEuc2V0VmVyc2lvbi5vbmJs
b2NrZWQsaDIuY2xvc2UsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MiCisKK1RFU1Q6IHNldFZlcnNp
b24gbm90IGJsb2NrZWQgaWYgaGFuZGxlIGNsb3NlZCBpbW1lZGlhdGVseQord2luZG93LmRibmFt
ZSA9ICd0ZXN0Mic7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gxLm9wZW4n
CisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDIub3BlbicKKydoMi5vcGVuLm9uc3VjY2VzcycKKydo
MS5zZXRWZXJzaW9uJworJ2gyLm9udmVyc2lvbmNoYW5nZScKKyAgICBoMiBjbG9zaW5nIGltbWVk
aWF0ZWx5CisnaDIuY2xvc2UnCisnaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQnCisnaDEuc2V0VmVy
c2lvbi5vbnN1Y2Nlc3MnCitGQUlMIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIHNob3VsZCBiZSBo
MS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1Y2Nlc3MsaDEuc2V0
VmVyc2lvbixoMi5vbnZlcnNpb25jaGFuZ2UsaDIuY2xvc2UsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nl
c3MuIFdhcyBoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1Y2Nl
c3MsaDEuc2V0VmVyc2lvbixoMi5vbnZlcnNpb25jaGFuZ2UsaDIuY2xvc2UsaDEuc2V0VmVyc2lv
bi5vbmJsb2NrZWQsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MuCisKK1RFU1Q6IG9wZW4gYW5kIHNl
dFZlcnNpb24gYmxvY2tlZCBpZiBhIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5p
bmcgLSBjbG9zZSB3aGVuIGJsb2NrZWQKK3dpbmRvdy5kYm5hbWUgPSAndGVzdDMnOyB3aW5kb3cu
dmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KKydoMS5vcGVuJworJ2gxLm9wZW4ub25zdWNjZXNz
JworJ2gyLm9wZW4nCisnaDIub3Blbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbicKKydoMi5z
ZXRWZXJzaW9uJworJ2gyLm9udmVyc2lvbmNoYW5nZScKKydoMS5zZXRWZXJzaW9uLm9uYmxvY2tl
ZCcKKydoMS5vbnZlcnNpb25jaGFuZ2UnCisnaDIuc2V0VmVyc2lvbi5vbmJsb2NrZWQnCisgICAg
aDIgYmxvY2tlZCBzbyBjbG9zaW5nCisnaDIuY2xvc2UnCisnaDMub3BlbicKKydoMi5zZXRWZXJz
aW9uLm9uZXJyb3InCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaDMub3Blbi5vbnN1Y2Nl
c3MnCitQQVNTIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIGlzICJoMS5vcGVuLGgxLm9wZW4ub25z
dWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbixoMi5zZXRWZXJz
aW9uLGgyLm9udmVyc2lvbmNoYW5nZSxoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCxoMS5vbnZlcnNp
b25jaGFuZ2UsaDIuc2V0VmVyc2lvbi5vbmJsb2NrZWQsaDIuY2xvc2UsaDMub3BlbixoMi5zZXRW
ZXJzaW9uLm9uZXJyb3IsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDMub3Blbi5vbnN1Y2Nlc3Mi
CisKK1RFU1Q6IG9wZW4gYW5kIHNldFZlcnNpb24gYmxvY2tlZCBpZiBhIFZFUlNJT05fQ0hBTkdF
IHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgLSBqdXN0IGNsb3NlCit3aW5kb3cuZGJuYW1lID0gJ3Rl
c3Q0Jzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdCisnaDEub3BlbicKKydoMS5v
cGVuLm9uc3VjY2VzcycKKydoMi5vcGVuJworJ2gyLm9wZW4ub25zdWNjZXNzJworJ2gxLnNldFZl
cnNpb24nCisnaDMub3BlbicKKydoMi5jbG9zZScKKydoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCcK
KydoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcycKKydoMy5vcGVuLm9uc3VjY2VzcycKK1BBU1Mgd2lu
ZG93LnN0ZXBzLnRvU3RyaW5nKCkgaXMgImgxLm9wZW4saDEub3Blbi5vbnN1Y2Nlc3MsaDIub3Bl
bixoMi5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgzLm9wZW4saDIuY2xvc2UsaDEuc2V0
VmVyc2lvbi5vbmJsb2NrZWQsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDMub3Blbi5vbnN1Y2Nl
c3MiCisKK1RFU1Q6IG9wZW4gYmxvY2tlZCBpZiBhIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9u
IGlzIHJ1bm5pbmcKK3dpbmRvdy5kYm5hbWUgPSAndGVzdDUnOyB3aW5kb3cudmVyID0gMTsgd2lu
ZG93LnN0ZXBzID0gW10KKydoMS5vcGVuJworJ2gxLm9wZW4ub25zdWNjZXNzJworJ2gxLnNldFZl
cnNpb24nCisnaDIub3BlbicKKydoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcycKKydoMi5vcGVuLm9u
c3VjY2VzcycKK1BBU1Mgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgaXMgImgxLm9wZW4saDEub3Bl
bi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbixoMi5vcGVuLGgxLnNldFZlcnNpb24ub25zdWNjZXNz
LGgyLm9wZW4ub25zdWNjZXNzIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L29wZW4tY2xvc2UtdmVyc2lvbi5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
b3Blbi1jbG9zZS12ZXJzaW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4ZjljZGM5MTEzNTcyMTA5NGQ1
ZDQ4ZTcxMTM2OGRiMjhlZDg0NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi5odG1sCkBAIC0wLDAgKzEsMjU3IEBACis8
aHRtbD4NCis8aGVhZD4NCis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4NCis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pg0KKzxzY3JpcHQgc3JjPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0
Pg0KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4NCis8L2hlYWQ+
DQorPGJvZHk+DQorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+DQorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+DQorPHNjcmlwdD4NCisNCitkZXNjcmlwdGlvbigiVGVzdCBpbnRlcmxlYXZlZCBvcGVu
L2Nsb3NlL3NldFZlcnNpb24gY2FsbHMgaW4gdmFyaW91cyBwZXJtdXRhdGlvbnMiKTsNCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQ0KKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7DQorDQorZnVuY3Rpb24gQ29ubmVjdGlvbihpZCkgew0KKyAgICBpZCA9
IFN0cmluZyhpZCk7DQorICAgIHZhciBzZWxmID0gdGhpczsNCisgICAgdGhpcy5vcGVuID0gZnVu
Y3Rpb24ob3B0cykgew0KKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIg
KyBpZCArICIub3BlbiciKSk7DQorICAgICAgICB2YXIgcmVxID0gaW5kZXhlZERCLm9wZW4od2lu
ZG93LmRibmFtZSk7DQorICAgICAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxi
YWNrOw0KKyAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAg
ICAgc2VsZi5oYW5kbGUgPSBlLnRhcmdldC5yZXN1bHQ7DQorICAgICAgICAgICAgd2luZG93LnN0
ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIub3Blbi5vbnN1Y2Nlc3MnIikpOw0KKyAg
ICAgICAgICAgIHNlbGYuaGFuZGxlLm9udmVyc2lvbmNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsNCisg
ICAgICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIu
b252ZXJzaW9uY2hhbmdlJyIpKTsNCisgICAgICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5v
bnZlcnNpb24pIHsgb3B0cy5vbnZlcnNpb24uY2FsbChzZWxmKTsgfQ0KKyAgICAgICAgICAgIH07
DQorICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nl
c3MuY2FsbChzZWxmKTsgfQ0KKyAgICAgICAgfTsNCisgICAgfTsNCisNCisgICAgdGhpcy5jbG9z
ZSA9IGZ1bmN0aW9uKCkgew0KKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygi
JyIgKyBpZCArICIuY2xvc2UnIikpOw0KKyAgICAgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsNCisg
ICAgfTsNCisNCisgICAgdGhpcy5zZXRWZXJzaW9uID0gZnVuY3Rpb24ob3B0cykgew0KKyAgICAg
ICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbici
KSk7DQorICAgICAgICB2YXIgcmVxID0gdGhpcy5oYW5kbGUuc2V0VmVyc2lvbihTdHJpbmcod2lu
ZG93LnZlcisrKSk7DQorICAgICAgICByZXEub25hYm9ydCA9IGZ1bmN0aW9uIChlKSB7DQorICAg
ICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVy
c2lvbi5vbmFib3J0JyIpKTsNCisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYWJvcnQp
IHsgb3B0cy5vbmFib3J0LmNhbGwoc2VsZik7IH0NCisgICAgICAgIH07DQorICAgICAgICByZXEu
b25ibG9ja2VkID0gZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVz
aChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uYmxvY2tlZCciKSk7DQorICAg
ICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmJsb2NrZWQpIHsgb3B0cy5vbmJsb2NrZWQuY2Fs
bChzZWxmKTsgfQ0KKyAgICAgICAgfTsNCisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlv
biAoZSkgew0KKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsg
aWQgKyAiLnNldFZlcnNpb24ub25zdWNjZXNzJyIpKTsNCisgICAgICAgICAgICB2YXIgc3RvcmUg
PSBzZWxmLmhhbmRsZS5jcmVhdGVPYmplY3RTdG9yZSgidGVzdC1zdG9yZSIgKyB3aW5kb3cudmVy
KTsNCisgICAgICAgICAgICB2YXIgY291bnQgPSAwOw0KKyAgICAgICAgICAgIGRvX2FzeW5jX3B1
dHMoKTsgLy8gS2VlcCB0aGlzIHRyYW5zYWN0aW9uIHJ1bm5pbmcgZm9yIGEgd2hpbGUNCisgICAg
ICAgICAgICBmdW5jdGlvbiBkb19hc3luY19wdXRzKCkgew0KKyAgICAgICAgICAgICAgICB2YXIg
cmVxID0gc3RvcmUucHV0KGNvdW50LCBjb3VudCk7DQorICAgICAgICAgICAgICAgIHJlcS5vbmVy
cm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7DQorICAgICAgICAgICAgICAgIHJlcS5vbnN1
Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrY291bnQg
PCAxMCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRvX2FzeW5jX3B1dHMoKTsNCisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9w
dHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsgfQ0KKyAg
ICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9Ow0KKyAgICAgICAgICAgIH0N
CisgICAgICAgIH07DQorICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7DQorICAg
ICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVy
c2lvbi5vbmVycm9yJyIpKTsNCisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uZXJyb3Ip
IHsgb3B0cy5vbmVycm9yLmNhbGwoc2VsZik7IH0NCisgICAgICAgIH07DQorICAgIH07DQorfQ0K
Kw0KKy8vIHJ1biBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHRha2UgYSBjb250aW51YXRpb24gZnVu
Y3Rpb24NCitmdW5jdGlvbiBydW4oY29tbWFuZHMpIHsNCisgICAgaWYgKGNvbW1hbmRzLmxlbmd0
aCkgew0KKyAgICAgICAgdmFyIGNvbW1hbmQgPSBjb21tYW5kcy5zaGlmdCgpOw0KKyAgICAgICAg
Y29tbWFuZChmdW5jdGlvbigpIHsgcnVuKGNvbW1hbmRzKTsgfSk7DQorICAgIH0NCit9DQorDQor
ZnVuY3Rpb24gdGVzdCgpIHsNCisgICAgaW5kZXhlZERCID0gZXZhbEFuZExvZygiaW5kZXhlZERC
ID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5t
b3pJbmRleGVkREI7Iik7DQorICAgIHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7
DQorICAgIHRlc3QxKCk7DQorfQ0KKw0KK2Z1bmN0aW9uIHRlc3QxKCkgew0KKyAgICBkZWJ1Zygi
Iik7DQorICAgIGRlYnVnKCJURVNUOiBzZXRWZXJzaW9uIGJsb2NrZWQgb24gb3BlbiBoYW5kbGVz
Iik7DQorICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDEnOyB3aW5kb3cudmVy
ID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsNCisgICAgdmFyIGgxID0gbmV3IENvbm5lY3Rpb24o
ImgxIik7DQorICAgIHZhciBoMiA9IG5ldyBDb25uZWN0aW9uKCJoMiIpOw0KKyAgICBydW4oW2Z1
bmN0aW9uKGMpIHsgaDEub3Blbih7b25zdWNjZXNzOiBjfSk7IH0sDQorICAgICAgICAgZnVuY3Rp
b24oYykgeyBoMi5vcGVuKHtvbnN1Y2Nlc3M6IGMsDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlYnVnKCIgICAgaDIgY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIp
Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoaDIuY2xv
c2UuYmluZChoMiksIDApOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9
LA0KKyAgICAgICAgIGZ1bmN0aW9uKGMpIHsgaDEuc2V0VmVyc2lvbih7b25zdWNjZXNzOiBmaW5p
c2hUZXN0fSk7IH0sDQorICAgICAgICAgXSk7DQorICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7
DQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygp
IiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgxLm9wZW4iLA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaDEub3Blbi5vbnN1Y2Nlc3MiLA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaDIub3BlbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJoMi5vcGVuLm9uc3VjY2VzcyIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoMS5zZXRWZXJzaW9uIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgy
Lm9udmVyc2lvbmNoYW5nZSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5z
ZXRWZXJzaW9uLm9uYmxvY2tlZCIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
Mi5jbG9zZSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9u
Lm9uc3VjY2VzcyINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygp
KTsNCisgICAgICAgIHRlc3QyKCk7DQorICAgIH0NCit9DQorDQorZnVuY3Rpb24gdGVzdDIoKSB7
DQorICAgIGRlYnVnKCIiKTsNCisgICAgZGVidWcoIlRFU1Q6IHNldFZlcnNpb24gbm90IGJsb2Nr
ZWQgaWYgaGFuZGxlIGNsb3NlZCBpbW1lZGlhdGVseSIpOw0KKyAgICBldmFsQW5kTG9nKCJ3aW5k
b3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdIik7
DQorICAgIHZhciBoMSA9IG5ldyBDb25uZWN0aW9uKCJoMSIpOw0KKyAgICB2YXIgaDIgPSBuZXcg
Q29ubmVjdGlvbigiaDIiKTsNCisgICAgcnVuKFtmdW5jdGlvbihjKSB7IGgxLm9wZW4oe29uc3Vj
Y2VzczogY30pOyB9LA0KKyAgICAgICAgIGZ1bmN0aW9uKGMpIHsgaDIub3Blbih7b25zdWNjZXNz
OiBjLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlv
bigpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgIGgy
IGNsb3NpbmcgaW1tZWRpYXRlbHkiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoMi5jbG9zZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9
LA0KKyAgICAgICAgZnVuY3Rpb24oYykgeyBoMS5zZXRWZXJzaW9uKHtvbnN1Y2Nlc3M6IGN9KTsg
fSwNCisgICAgICAgIGZpbmlzaFRlc3QNCisgICAgICAgIF0pOw0KKw0KKyAgICBmdW5jdGlvbiBm
aW5pc2hUZXN0KCkgew0KKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3Rl
cHMudG9TdHJpbmcoKSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoMS5vcGVu
IiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLm9wZW4ub25zdWNjZXNzIiwN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9wZW4iLA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaDIub3Blbi5vbnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbiIsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJoMi5vbnZlcnNpb25jaGFuZ2UiLA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaDIuY2xvc2UiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEu
c2V0VmVyc2lvbi5vbnN1Y2Nlc3MiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0u
dG9TdHJpbmcoKSk7DQorICAgICAgICB0ZXN0MygpOw0KKyAgICB9DQorfQ0KKw0KK2Z1bmN0aW9u
IHRlc3QzKCkgew0KKyAgICBkZWJ1ZygiIik7DQorICAgIGRlYnVnKCJURVNUOiBvcGVuIGFuZCBz
ZXRWZXJzaW9uIGJsb2NrZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5u
aW5nIC0gY2xvc2Ugd2hlbiBibG9ja2VkIik7DQorICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5h
bWUgPSAndGVzdDMnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsNCisgICAg
dmFyIGgxID0gbmV3IENvbm5lY3Rpb24oImgxIik7DQorICAgIHZhciBoMiA9IG5ldyBDb25uZWN0
aW9uKCJoMiIpOw0KKyAgICB2YXIgaDMgPSBuZXcgQ29ubmVjdGlvbigiaDMiKTsNCisgICAgcnVu
KFtmdW5jdGlvbihjKSB7IGgxLm9wZW4oe29uc3VjY2VzczogY30pOyB9LA0KKyAgICAgICAgIGZ1
bmN0aW9uKGMpIHsgaDIub3Blbih7b25zdWNjZXNzOiBjfSk7IH0sDQorICAgICAgICAgZnVuY3Rp
b24oYykgeyBoMS5zZXRWZXJzaW9uKCk7IGMoKTsgfSwNCisgICAgICAgICBmdW5jdGlvbihjKSB7
IGgyLnNldFZlcnNpb24oew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25ibG9j
a2VkOiBmdW5jdGlvbigpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWJ1ZygiICAgIGgyIGJsb2NrZWQgc28gY2xvc2luZyIpOw0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGgyLmNsb3NlKCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYygpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LA0K
KyAgICAgICAgIGZ1bmN0aW9uKCkgeyBoMy5vcGVuKHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTt9
DQorICAgICAgICAgXSk7DQorDQorICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7DQorICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbImgxLm9wZW4iLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaDEub3Blbi5vbnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaDIub3BlbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
Mi5vcGVuLm9uc3VjY2VzcyIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5z
ZXRWZXJzaW9uIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLnNldFZlcnNp
b24iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIub252ZXJzaW9uY2hhbmdl
IiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24ub25ibG9j
a2VkIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLm9udmVyc2lvbmNoYW5n
ZSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5zZXRWZXJzaW9uLm9uYmxv
Y2tlZCIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5jbG9zZSIsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMy5vcGVuIiwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImgyLnNldFZlcnNpb24ub25lcnJvciIsDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyIsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJoMy5vcGVuLm9uc3VjY2VzcyINCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsNCisgICAgICAgIHRlc3Q0KCk7DQorICAgIH0N
Cit9DQorDQorZnVuY3Rpb24gdGVzdDQoKSB7DQorICAgIGRlYnVnKCIiKTsNCisgICAgZGVidWco
IlRFU1Q6IG9wZW4gYW5kIHNldFZlcnNpb24gYmxvY2tlZCBpZiBhIFZFUlNJT05fQ0hBTkdFIHRy
YW5zYWN0aW9uIGlzIHJ1bm5pbmcgLSBqdXN0IGNsb3NlIik7DQorICAgIGV2YWxBbmRMb2coIndp
bmRvdy5kYm5hbWUgPSAndGVzdDQnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10i
KTsNCisgICAgdmFyIGgxID0gbmV3IENvbm5lY3Rpb24oImgxIik7DQorICAgIHZhciBoMiA9IG5l
dyBDb25uZWN0aW9uKCJoMiIpOw0KKyAgICB2YXIgaDMgPSBuZXcgQ29ubmVjdGlvbigiaDMiKTsN
CisgICAgcnVuKFtmdW5jdGlvbihjKSB7IGgxLm9wZW4oe29uc3VjY2VzczogY30pOyB9LA0KKyAg
ICAgICAgIGZ1bmN0aW9uKGMpIHsgaDIub3Blbih7b25zdWNjZXNzOiBjfSk7IH0sDQorICAgICAg
ICAgZnVuY3Rpb24oYykgeyBoMS5zZXRWZXJzaW9uKCk7IGMoKTsgfSwNCisgICAgICAgICBmdW5j
dGlvbihjKSB7IGgzLm9wZW4oe29uc3VjY2VzczogZmluaXNoVGVzdH0pOyBjKCk7IH0sDQorICAg
ICAgICAgZnVuY3Rpb24oYykgeyBoMi5jbG9zZSgpOyBjKCk7IH0sDQorICAgICAgICAgXSk7DQor
DQorICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7DQorICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbImgxLm9wZW4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEu
b3Blbi5vbnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIub3Bl
biIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vcGVuLm9uc3VjY2VzcyIs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uIiwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImgzLm9wZW4iLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaDIuY2xvc2UiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaDMub3Blbi5vbnN1Y2Nlc3MiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF0udG9TdHJpbmcoKSk7DQorICAgICAgICB0ZXN0NSgpOw0KKyAgICB9DQorfQ0KKw0KK2Z1
bmN0aW9uIHRlc3Q1KCkgew0KKyAgICBkZWJ1ZygiIik7DQorICAgIGRlYnVnKCJURVNUOiBvcGVu
IGJsb2NrZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIik7DQor
ICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDUnOyB3aW5kb3cudmVyID0gMTsg
d2luZG93LnN0ZXBzID0gW10iKTsNCisgICAgdmFyIGgxID0gbmV3IENvbm5lY3Rpb24oImgxIik7
DQorICAgIHZhciBoMiA9IG5ldyBDb25uZWN0aW9uKCJoMiIpOw0KKw0KKyAgICBydW4oW2Z1bmN0
aW9uKGMpIHsgaDEub3Blbih7b25zdWNjZXNzOiBjfSk7IH0sDQorICAgICAgICAgZnVuY3Rpb24o
YykgeyBoMS5zZXRWZXJzaW9uKCk7IGMoKTsgfSwNCisgICAgICAgICBmdW5jdGlvbihjKSB7IGgy
Lm9wZW4oe29uc3VjY2VzczogZmluaXNoVGVzdH0pOyBjKCk7IH0NCisgICAgICAgICBdKTsNCisN
CisgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsNCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCkiLA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsiaDEub3BlbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5v
cGVuLm9uc3VjY2VzcyIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRW
ZXJzaW9uIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9wZW4iLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MiLA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIub3Blbi5vbnN1Y2Nlc3MiDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7DQorICAgICAgICB0ZXN0
NigpOw0KKyAgICB9DQorfQ0KKw0KK2Z1bmN0aW9uIHRlc3Q2KCkgew0KKyAgICBkb25lKCk7DQor
fQ0KKw0KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOw0KKw0KK3Rlc3QoKTsNCisNCis8
L3NjcmlwdD4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4OWU2N2I2ZjkwZWIwZDIxNjExZTdhZWZiZmIxZDFmNTA4
NzQzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi92
ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0Vu
c3VyZSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBkb2Vzbid0IHJ1biBjb25jdXJyZW50bHkg
d2l0aCBvdGhlciB0cmFuc2FjdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K2luZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8
fCB3aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQor
d2luZG93LnN0YXRlID0gJ3N0YXJ0aW5nJworaW5kZXhlZERCLm9wZW4oJ3ZlcnNpb24tY2hhbmdl
LWV4Y2x1c2l2ZScpCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2NhbGxpbmcgc2V0VmVyc2lv
bigpIC0gY2FsbGJhY2sgc2hvdWxkIHJ1biBpbW1lZGlhdGVseQorZGIuc2V0VmVyc2lvbigndmVy
c2lvbiAxJykKK2NhbGxpbmcgb3BlbigpIC0gY2FsbGJhY2sgc2hvdWxkIHdhaXQgdW50aWwgVkVS
U0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUKK2luZGV4ZWREQi5vcGVuKCd2ZXJz
aW9uLWNoYW5nZS1leGNsdXNpdmUnKQorc2V0VmVyc2lvbigpIGNhbGxiYWNrCitzdGFydGluZyB3
b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lP
Tl9DSEFOR0Ugc3RhcnRlZCcKK3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3Qtc3Rv
cmUnKQorc3RvcmUucHV0KDAsIDApCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCgxLCAx
KQoraW4gcHV0J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoMiwgMikKK2luIHB1dCdzIG9uc3VjY2Vz
cworc3RvcmUucHV0KDMsIDMpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg0LCA0KQor
aW4gcHV0J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoNSwgNSkKK2luIHB1dCdzIG9uc3VjY2Vzcwor
c3RvcmUucHV0KDYsIDYpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg3LCA3KQoraW4g
cHV0J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoOCwgOCkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3Rv
cmUucHV0KDksIDkpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK2VuZGluZyB3b3JrIGluIFZFUlNJT05f
Q0hBTkdFIHRyYW5zYWN0aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0UgZmluaXNo
ZWQnCitvcGVuKCkgY2FsbGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIgYWZ0ZXIgVkVSU0lPTl9D
SEFOR0UgdHJhbnNhY3Rpb24gZW5kcworUEFTUyB3aW5kb3cuc3RhdGUgaXMgIlZFUlNJT05fQ0hB
TkdFIGZpbmlzaGVkIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNp
b24tY2hhbmdlLWV4Y2x1c2l2ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
dmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVlZDBhMzk0ZDk3ZTgz
NzBiMDBkNmYzYmJjNzRmZDQ5MzBlZDQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS5odG1sCkBAIC0wLDAg
KzEsODcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJFbnN1cmUgVkVSU0lPTl9DSEFOR0Ug
dHJhbnNhY3Rpb24gZG9lc24ndCBydW4gY29uY3VycmVudGx5IHdpdGggb3RoZXIgdHJhbnNhY3Rp
b25zIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGlu
ZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2lu
ZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOworICAgIHNob3Vs
ZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7CisgICAgb3BlbkRCQ29ubmVjdGlvbigpOwor
fQorCitmdW5jdGlvbiBvcGVuREJDb25uZWN0aW9uKCkKK3sKKyAgICBldmFsQW5kTG9nKCJ3aW5k
b3cuc3RhdGUgPSAnc3RhcnRpbmcnIik7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4
ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUnKSIpOworICAgIHJlcXVlc3Qub25z
dWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkKK3sKKyAgICB3aW5kb3cu
ZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKworICAgIGRlYnVn
KCJjYWxsaW5nIHNldFZlcnNpb24oKSAtIGNhbGxiYWNrIHNob3VsZCBydW4gaW1tZWRpYXRlbHki
KTsKKyAgICB2YXIgdmVyc2lvbkNoYW5nZVJlcXVlc3QgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJz
aW9uKCd2ZXJzaW9uIDEnKSIpOworICAgIHZlcnNpb25DaGFuZ2VSZXF1ZXN0Lm9uZXJyb3IgPSB1
bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB2ZXJzaW9uQ2hhbmdlUmVxdWVzdC5vbnN1Y2Nl
c3MgPSBpblNldFZlcnNpb247CisKKyAgICAvLyBhbmQgY29uY3VycmVudGx5Li4uCisKKyAgICBk
ZWJ1ZygiY2FsbGluZyBvcGVuKCkgLSBjYWxsYmFjayBzaG91bGQgd2FpdCB1bnRpbCBWRVJTSU9O
X0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZSIpOworICAgIHZhciBvcGVuUmVxdWVzdCA9
IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUnKSIp
OworICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5BZ2FpblN1Y2Nlc3M7CisgICAgb3Bl
blJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlv
biBpblNldFZlcnNpb24oKQoreworICAgIGRlYnVnKCJzZXRWZXJzaW9uKCkgY2FsbGJhY2siKTsK
KyAgICBkZWJ1Zygic3RhcnRpbmcgd29yayBpbiBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiIp
OworICAgIGV2YWxBbmRMb2coIndpbmRvdy5zdGF0ZSA9ICdWRVJTSU9OX0NIQU5HRSBzdGFydGVk
JyIpOworCisgICAgd2luZG93LnN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVP
YmplY3RTdG9yZSgndGVzdC1zdG9yZScpIik7CisgICAgd2luZG93LmNvdW50ID0gMDsKKyAgICBk
b19hc3luY19wdXRzKCk7CisKKyAgICBmdW5jdGlvbiBkb19hc3luY19wdXRzKCkgeworICAgICAg
ICB2YXIgcmVxID0gZXZhbEFuZExvZygic3RvcmUucHV0KCIgKyBjb3VudCArICIsICIgKyBjb3Vu
dCArICIpIik7CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
CisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgZGVi
dWcoImluIHB1dCdzIG9uc3VjY2VzcyIpOworICAgICAgICAgICAgaWYgKCsrd2luZG93LmNvdW50
IDwgMTApIHsKKyAgICAgICAgICAgICAgICBkb19hc3luY19wdXRzKCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGRlYnVnKCJlbmRpbmcgd29yayBpbiBWRVJTSU9OX0NI
QU5HRSB0cmFuc2FjdGlvbiIpOworICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coIndpbmRvdy5z
dGF0ZSA9ICdWRVJTSU9OX0NIQU5HRSBmaW5pc2hlZCciKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIG9wZW5BZ2FpblN1Y2Nlc3MoKQoreworICAgIGRl
YnVnKCJvcGVuKCkgY2FsbGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIgYWZ0ZXIgVkVSU0lPTl9D
SEFOR0UgdHJhbnNhY3Rpb24gZW5kcyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2lu
ZG93LnN0YXRlIiwgIlZFUlNJT05fQ0hBTkdFIGZpbmlzaGVkIik7CisgICAgZG9uZSgpOworfQor
Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwordGVzdCgpOworCis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNGFkYjRkNDZkOGRjYTEwNGYxNWI5ZGMx
ZDBlZDgwNWE3ODUxMmJlLi43OTI2NDZlMzBkMjJiMDIyN2M5M2U2MDVjNzBhZDgyZGVhZjY4YmFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMDQgIEpvc2h1YSBCZWxsICA8
anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0
IGZvciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5k
ZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS5odG1sCisKKyAgICAgICAgKiBzdG9yYWdl
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsOjpjYWxsYmFja3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxs
OjpQZW5kaW5nT3BlbkNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWxEb25lKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5FdmVudHVhbGx5KToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjph
Ym9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQp
OgorCiAyMDExLTEwLTA0ICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2Jp
PgogCiAgICAgICAgIFtDTWFrZV0gVW5yZXZpZXdlZDogcGFzcyBmZWF0dXJlIGRlZmluaXRpb25z
IGluIHRoZSByaWdodCBmb3JtYXQgZm9yIHRoZSBDU1Mgc2NyaXB0cy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IDhmZTk3MWEy
N2M5MTEyNDc1OWNmZjMyMDNkZThkY2Q4NTQ1ZjY4NmQuLjk1YTBjNGE1Y2MxYWE3YjZkZTljNDEx
ODhmOWFmZjEzNzRhNDY5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMzksNiArMzksMjIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbkNhbGwg
OiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nT3BlbkNhbGw+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQZW5k
aW5nT3BlbkNhbGwoY2FsbGJhY2tzKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorCitwcml2YXRlOgorICAg
IFBlbmRpbmdPcGVuQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAg
ICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKwogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6UGVuZGluZ1NldFZlcnNpb25DYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ1Nl
dFZlcnNpb25DYWxsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVuZGluZ1Nl
dFZlcnNpb25DYWxsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBk
YXRhYmFzZUNhbGxiYWNrcykKQEAgLTE3NCwxMiArMTkwLDE5IEBAIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8
SURCQ2FsCiAgICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCiAgICAgICAgICAg
ICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOwogICAgIH0KKyAgICAvLyBGSVhNRTog
T25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0
aGUKKyAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0
IHVwIHRvIGZpcmUuCiAgICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpID4gMSkg
ewogICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwogICAgICAgICBSZWZQdHI8UGVuZGlu
Z1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBQZW5kaW5nU2V0VmVyc2lv
bkNhbGw6OmNyZWF0ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKTsKICAg
ICAgICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmFwcGVuZChwZW5kaW5nU2V0VmVyc2lvbkNh
bGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4g
cGVuZGluZ1NldFZlcnNpb25DYWxsID0gUGVuZGluZ1NldFZlcnNpb25DYWxsOjpjcmVhdGUodmVy
c2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgICAgIG1fcGVuZGluZ1Nl
dFZlcnNpb25DYWxscy5hcHBlbmQocGVuZGluZ1NldFZlcnNpb25DYWxsKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVz
ID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlID0gdGhpczsKQEAgLTIwMyw2ICsyMjYsNDEgQEAgdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWYKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0cmFuc2FjdGlvbik7CiB9CiAK
K3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBUcmFuc2FjdGlvbikKK3sKKyAg
ICBpZiAocHJwVHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9D
SEFOR0UpIHsKKyAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSBwcnBUcmFu
c2FjdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNh
Y3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
cHJwVHJhbnNhY3Rpb24pCit7CisgICAgaWYgKHBycFRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURC
VHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7CisgICAgICAgIEFTU0VSVChwcnBUcmFuc2Fj
dGlvbi5nZXQoKSA9PSBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwor
ICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSAwOworICAgICAgICBw
cm9jZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQoreworICAgIC8vIFBlbmRpbmcgY2FsbHMgbWF5
IGJlIHJlcXVldWVkIG9yIGFib3J0ZWQKKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ1NldFZlcnNp
b25DYWxsPiA+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbHM7CisgICAgbV9wZW5kaW5nU2V0VmVyc2lv
bkNhbGxzLnN3YXAocGVuZGluZ1NldFZlcnNpb25DYWxscyk7CisgICAgd2hpbGUgKCFwZW5kaW5n
U2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNp
b25DYWxsID0gcGVuZGluZ1NldFZlcnNpb25DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgc2V0
VmVyc2lvbihwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPnZlcnNpb24oKSwgcGVuZGluZ1NldFZlcnNp
b25DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGluZ1NldFZlcnNpb25DYWxsLT5kYXRhYmFzZUNhbGxi
YWNrcygpLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAgIH0KKworICAgIHdoaWxlICgh
bV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uICYmIG1fcGVuZGluZ1NldFZlcnNpb25D
YWxscy5pc0VtcHR5KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gcGVuZGluZ09wZW5DYWxsID0gbV9wZW5kaW5nT3Bl
bkNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBvcGVuQ29ubmVjdGlvbihwZW5kaW5nT3BlbkNh
bGwtPmNhbGxiYWNrcygpKTsKKyAgICB9Cit9CisKIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01T
dHJpbmdMaXN0KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3JlTmFt
ZXMtPmxlbmd0aCgpOyArK2kpIHsKQEAgLTIyMSw2ICsyNzksMTQgQEAgdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpvcGVuKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxi
YWNrcykKICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+KGNhbGxiYWNrcykpOwogfQogCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
Om9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7Cisg
ICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0
VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVu
ZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MpKTsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMpOworfQorCiB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNr
cykKIHsKICAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKQEAgLTIyOSwxMiArMjk1LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MKICAg
ICBpZiAobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5zaXplKCkgPiAxKQogICAgICAgICByZXR1cm47
CiAKLSAgICB3aGlsZSAoIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIFJlZlB0cjxQZW5kaW5nU2V0VmVy
c2lvbkNhbGw+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA9IG1fcGVuZGluZ1NldFZlcnNpb25DYWxs
cy50YWtlRmlyc3QoKTsKLSAgICAgICAgc2V0VmVyc2lvbihwZW5kaW5nU2V0VmVyc2lvbkNhbGwt
PnZlcnNpb24oKSwgcGVuZGluZ1NldFZlcnNpb25DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGluZ1Nl
dFZlcnNpb25DYWxsLT5kYXRhYmFzZUNhbGxiYWNrcygpLCBlYyk7Ci0gICAgICAgIEFTU0VSVCgh
ZWMpOwotICAgIH0KKyAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CiB9CiAKIHZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6bG9hZE9iamVjdFN0b3JlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCmluZGV4IGY3NzkxMjUwZDkxOGFhMTk4
NDQxNTliMjk3YjI1M2IzYmU2NDhlZmUuLjQ2MWI4Yjk2ZjgwZjA1ZmIwZTUyZjgyYjE5YzZmOTgz
Y2VkNTc0ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oCkBAIC01NCw3ICs1NCwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3Qg
aW50NjRfdCBJbnZhbGlkSWQgPSAwOwogICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9CisKKyAgICAvLyBGSVhNRTogcmVuYW1lICJvcGVuIiB0byBzb21ldGhpbmcgbW9yZSBk
ZXNjcmlwdGl2ZSwgbGlrZSByZWdpc3RlckZyb250RW5kQ2FsbGJhY2tzCiAgICAgdm9pZCBvcGVu
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5Db25uZWN0
aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQpAQCAtNjgsMTEgKzcxLDE0IEBAIHB1YmxpYzoK
IAogICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iq
IHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuZ2V0KCk7IH0KKyAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25G
aW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogCiBw
cml2YXRlOgogICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKIAog
ICAgIHZvaWQgbG9hZE9iamVjdFN0b3JlcygpOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxs
cygpOwogCiAgICAgc3RhdGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICBzdGF0aWMgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwpAQCAtOTYsMTAgKzEwMiwx
NCBAQCBwcml2YXRlOgogICAgIE9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVzOwogCiAgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
cjsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247CiAKICAgICBjbGFzcyBQZW5kaW5nU2V0VmVyc2lvbkNh
bGw7CiAgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gPiBtX3BlbmRpbmdT
ZXRWZXJzaW9uQ2FsbHM7CiAKKyAgICBjbGFzcyBQZW5kaW5nT3BlbkNhbGw7CisgICAgRGVxdWU8
UmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gPiBtX3BlbmRpbmdPcGVuQ2FsbHM7CisKICAgICB0eXBl
ZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gPiBEYXRhYmFzZUNh
bGxiYWNrc1NldDsKICAgICBEYXRhYmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcAppbmRleCBlMWEzZjcxOWFjOTRhYWEwMTgwYzc5ODg4ZmM0MTY3ZGJlN2IwNGNmLi5l
NWI2ZmFhYjdkYTk3NTQzOWVmNWQ1NzMzYjkzYThjNjVhNjlmOTMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC0xMTAsNyArMTEw
LDkgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKIAogICAgIElEQkRhdGFiYXNlQmFja2VuZE1h
cDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZp
ZXIpOwogICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewotICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhpdC0+c2Vjb25kKTsKKyAgICAgICAgLy8gSWYgaXQncyBh
bHJlYWR5IGJlZW4gb3BlbmVkLCB3ZSBoYXZlIHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nCisgICAg
ICAgIC8vIHNldFZlcnNpb24gY2FsbHMgdG8gY29tcGxldGUuCisgICAgICAgIGl0LT5zZWNvbmQt
Pm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwCmluZGV4IDE1NmNiODlhOWZiMDlkYTUwNGY0NWE5NzhlMDI3M2VhM2E2YTU2NGEuLjAxNWRh
MThkNjlhODI4YzU1NzE3OWEwZmMxYWYwYzEyOTMzNjJiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMTMxLDYg
KzEzMSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQoKQogICAgIG1f
Y2FsbGJhY2tzLT5vbkFib3J0KCk7CiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKICAgICBBU1NFUlQoIW1fZGF0YWJh
c2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOworICAgIG1fZGF0
YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CiAgICAgbV9kYXRhYmFzZSA9IDA7CiB9
CiAKQEAgLTE3MSw2ICsxNzIsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnN0
YXJ0KCkKIAogICAgIG1fc3RhdGUgPSBTdGFydFBlbmRpbmc7CiAgICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFydFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1f
ZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0aGlzKTsKIH0KIAogdm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQpAQCAtMTg2LDYgKzE4OCw3IEBAIHZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKICAgICBtX3RyYW5zYWN0aW9uLT5jb21taXQo
KTsKICAgICBtX2NhbGxiYWNrcy0+b25Db21wbGV0ZSgpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKICAgICBtX2RhdGFiYXNlID0gMDsK
IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110763</attachid>
            <date>2011-10-12 16:05:39 -0700</date>
            <delta_ts>2011-10-12 17:08:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69307-20111012160538.patch</filename>
            <type>text/plain</type>
            <size>40146</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcyNzYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4YzU2NTIxMGEyODdhNDFkNmQ1MGZi
YzUzZDhjODE1NzFjYzlhZTVjLi5mZmI3Y2FkNmUyYzk5NGIxOTk3MzIzNGJjOThiMWU2NGFlYTBh
MTI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTAtMTIgIEpvc2h1YSBCZWxsICA8anNi
ZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZv
ciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNvbWUgdGVzdHMgbWFya2VkIEZB
SUwgZHVlIHRvIGtub3duIEZJWE1FIGZvciBleHRyYW5lb3VzIG9uYmxvY2tlZCBldmVudHMuCisK
KyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNo
YW5nZS1leGNsdXNpdmUuaHRtbDogQWRkZWQuCisKIDIwMTEtMTAtMTIgIERpbWl0cmkgR2xhemtv
diAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEZpeCBleHBl
Y3RhdGlvbiBhbWJpZ3VpdGllcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJkYzAyNGExNmRlZTEwMzE0Yjg5MmNlNTUyYjE1NTNmODM0YjMwMDEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24tZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAzIEBACitUZXN0IGludGVybGVhdmVkIG9wZW4vY2xvc2Uv
c2V0VmVyc2lvbiBjYWxscyBpbiB2YXJpb3VzIHBlcm11dGF0aW9ucworCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cu
d2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7CitQQVNTIGluZGV4ZWREQiA9
PSBudWxsIGlzIGZhbHNlCisKK1RFU1Q6IHNldFZlcnNpb24gYmxvY2tlZCBvbiBvcGVuIGhhbmRs
ZXMKK3dpbmRvdy5kYm5hbWUgPSAndGVzdDEnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBz
ID0gW10KKydoMS5vcGVuJworJ2gxLm9wZW4ub25zdWNjZXNzJworJ2gyLm9wZW4nCisnaDIub3Bl
bi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbicKKydoMi5vbnZlcnNpb25jaGFuZ2UnCisgICAg
aDIgY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseQorJ2gxLnNldFZlcnNpb24ub25ibG9ja2Vk
JworJ2gyLmNsb3NlJworJ2gxLnNldFZlcnNpb24ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24u
dHJhbnNhY3Rpb24tY29tcGxldGUnCitQQVNTIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIGlzICJo
MS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1Y2Nlc3MsaDEuc2V0
VmVyc2lvbixoMi5vbnZlcnNpb25jaGFuZ2UsaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQsaDIuY2xv
c2UsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21w
bGV0ZSIKKworVEVTVDogc2V0VmVyc2lvbiBub3QgYmxvY2tlZCBpZiBoYW5kbGUgY2xvc2VkIGlt
bWVkaWF0ZWx5Cit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaDEub3BlbicKKydoMS5vcGVuLm9uc3VjY2VzcycKKydoMi5vcGVuJwor
J2gyLm9wZW4ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24nCisnaDIub252ZXJzaW9uY2hhbmdl
JworICAgIGgyIGNsb3NpbmcgaW1tZWRpYXRlbHkKKydoMi5jbG9zZScKKydoMS5zZXRWZXJzaW9u
Lm9uYmxvY2tlZCcKKydoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcycKKydoMS5zZXRWZXJzaW9uLnRy
YW5zYWN0aW9uLWNvbXBsZXRlJworTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaDEu
c2V0VmVyc2lvbi5vbmJsb2NrZWQgc3RlcDsgdGhlcmUncyBhIEZJWE1FCitGQUlMIHdpbmRvdy5z
dGVwcy50b1N0cmluZygpIHNob3VsZCBiZSBoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgyLm9w
ZW4saDIub3Blbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbixoMi5vbnZlcnNpb25jaGFuZ2UsaDIu
Y2xvc2UsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1j
b21wbGV0ZS4gV2FzIGgxLm9wZW4saDEub3Blbi5vbnN1Y2Nlc3MsaDIub3BlbixoMi5vcGVuLm9u
c3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgyLm9udmVyc2lvbmNoYW5nZSxoMi5jbG9zZSxoMS5zZXRW
ZXJzaW9uLm9uYmxvY2tlZCxoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLnRy
YW5zYWN0aW9uLWNvbXBsZXRlLgorCitURVNUOiBvcGVuIGFuZCBzZXRWZXJzaW9uIGJsb2NrZWQg
aWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIC0gY2xvc2Ugd2hlbiBi
bG9ja2VkCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QzJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5z
dGVwcyA9IFtdCisnaDEub3BlbicKKydoMS5vcGVuLm9uc3VjY2VzcycKKydoMi5vcGVuJworJ2gy
Lm9wZW4ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24nCisnaDIuc2V0VmVyc2lvbicKKydoMi5v
bnZlcnNpb25jaGFuZ2UnCisnaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQnCisnaDEub252ZXJzaW9u
Y2hhbmdlJworJ2gyLnNldFZlcnNpb24ub25ibG9ja2VkJworICAgIGgyIGJsb2NrZWQgc28gY2xv
c2luZworJ2gyLmNsb3NlJworJ2gzLm9wZW4nCisnaDIuc2V0VmVyc2lvbi5vbmVycm9yJworJ2gx
LnNldFZlcnNpb24ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxl
dGUnCisnaDMub3Blbi5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIGlz
ICJoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1Y2Nlc3MsaDEu
c2V0VmVyc2lvbixoMi5zZXRWZXJzaW9uLGgyLm9udmVyc2lvbmNoYW5nZSxoMS5zZXRWZXJzaW9u
Lm9uYmxvY2tlZCxoMS5vbnZlcnNpb25jaGFuZ2UsaDIuc2V0VmVyc2lvbi5vbmJsb2NrZWQsaDIu
Y2xvc2UsaDMub3BlbixoMi5zZXRWZXJzaW9uLm9uZXJyb3IsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nl
c3MsaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSxoMy5vcGVuLm9uc3VjY2VzcyIK
KworVEVTVDogb3BlbiBhbmQgc2V0VmVyc2lvbiBibG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0Ug
dHJhbnNhY3Rpb24gaXMgcnVubmluZyAtIGp1c3QgY2xvc2UKK3dpbmRvdy5kYm5hbWUgPSAndGVz
dDQnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KKydoMS5vcGVuJworJ2gxLm9w
ZW4ub25zdWNjZXNzJworJ2gyLm9wZW4nCisnaDIub3Blbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVy
c2lvbicKKydoMy5vcGVuJworJ2gyLmNsb3NlJworJ2gxLnNldFZlcnNpb24ub25ibG9ja2VkJwor
J2gxLnNldFZlcnNpb24ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29t
cGxldGUnCisnaDMub3Blbi5vbnN1Y2Nlc3MnCitOT1RFOiBXaWxsIEZBSUwgd2l0aCBleHRyYSBi
b2d1cyBoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCBzdGVwOyB0aGVyZSdzIGEgRklYTUUKK0ZBSUwg
d2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJlIGgxLm9wZW4saDEub3Blbi5vbnN1Y2Nl
c3MsaDIub3BlbixoMi5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgzLm9wZW4saDIuY2xv
c2UsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21w
bGV0ZSxoMy5vcGVuLm9uc3VjY2Vzcy4gV2FzIGgxLm9wZW4saDEub3Blbi5vbnN1Y2Nlc3MsaDIu
b3BlbixoMi5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgzLm9wZW4saDIuY2xvc2UsaDEu
c2V0VmVyc2lvbi5vbmJsb2NrZWQsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lv
bi50cmFuc2FjdGlvbi1jb21wbGV0ZSxoMy5vcGVuLm9uc3VjY2Vzcy4KKworVEVTVDogb3BlbiBi
bG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVubmluZword2luZG93
LmRibmFtZSA9ICd0ZXN0NSc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gx
Lm9wZW4nCisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbicKKydoMi5vcGVuJwor
J2gxLnNldFZlcnNpb24ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29t
cGxldGUnCisnaDIub3Blbi5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRvdy5zdGVwcy50b1N0cmluZygp
IGlzICJoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgxLnNldFZlcnNpb24saDIub3BlbixoMS5z
ZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlLGgy
Lm9wZW4ub25zdWNjZXNzIgorCitURVNUOiB0d28gc2V0VmVyc2lvbnMgZnJvbSB0aGUgc2FtZSBj
b25uZWN0aW9uCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q2Jzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaDEub3BlbicKKydoMS5vcGVuLm9uc3VjY2VzcycKKydoMS5zZXRWZXJz
aW9uJworJ2gxLnNldFZlcnNpb24nCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaDEuc2V0
VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZScKK2hhbGYgZG9uZQorJ2gxLnNldFZlcnNpb24u
b25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUnCitQQVNTIHdp
bmRvdy5zdGVwcy50b1N0cmluZygpIGlzICJoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgxLnNl
dFZlcnNpb24saDEuc2V0VmVyc2lvbixoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRWZXJz
aW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlLGgxLnNldFZlcnNpb24ub25zdWNjZXNzLGgxLnNldFZl
cnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTI2MWQ1NzM0M2Rk
ZGU2MTU5NDE1MWJjN2VhNzNmZTdjNjY3NDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLmh0bWwKQEAgLTAsMCArMSwz
MDQgQEAKKzxodG1sPg0KKzxoZWFkPg0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPg0KKzxzY3JpcHQgc3JjPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+DQorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+
PC9zY3JpcHQ+DQorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0Pg0K
KzwvaGVhZD4NCis8Ym9keT4NCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4NCis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4NCis8c2NyaXB0Pg0KKw0KK2Rlc2NyaXB0aW9uKCJUZXN0IGludGVybGVh
dmVkIG9wZW4vY2xvc2Uvc2V0VmVyc2lvbiBjYWxscyBpbiB2YXJpb3VzIHBlcm11dGF0aW9ucyIp
Ow0KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpDQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsNCisNCitmdW5jdGlvbiBDb25uZWN0aW9uKGlkKSB7DQor
ICAgIGlkID0gU3RyaW5nKGlkKTsNCisgICAgdmFyIHNlbGYgPSB0aGlzOw0KKyAgICB0aGlzLm9w
ZW4gPSBmdW5jdGlvbihvcHRzKSB7DQorICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5k
TG9nKCInIiArIGlkICsgIi5vcGVuJyIpKTsNCisgICAgICAgIHZhciByZXEgPSBpbmRleGVkREIu
b3Blbih3aW5kb3cuZGJuYW1lKTsNCisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7DQorICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsNCisg
ICAgICAgICAgICBzZWxmLmhhbmRsZSA9IGUudGFyZ2V0LnJlc3VsdDsNCisgICAgICAgICAgICB3
aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5vcGVuLm9uc3VjY2Vzcyci
KSk7DQorICAgICAgICAgICAgc2VsZi5oYW5kbGUub252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24o
ZSkgew0KKyAgICAgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiAr
IGlkICsgIi5vbnZlcnNpb25jaGFuZ2UnIikpOw0KKyAgICAgICAgICAgICAgICBpZiAob3B0cyAm
JiBvcHRzLm9udmVyc2lvbikgeyBvcHRzLm9udmVyc2lvbi5jYWxsKHNlbGYpOyB9DQorICAgICAg
ICAgICAgfTsNCisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uc3VjY2VzcykgeyBvcHRz
Lm9uc3VjY2Vzcy5jYWxsKHNlbGYpOyB9DQorICAgICAgICB9Ow0KKyAgICB9Ow0KKw0KKyAgICB0
aGlzLmNsb3NlID0gZnVuY3Rpb24oKSB7DQorICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFs
QW5kTG9nKCInIiArIGlkICsgIi5jbG9zZSciKSk7DQorICAgICAgICB0aGlzLmhhbmRsZS5jbG9z
ZSgpOw0KKyAgICB9Ow0KKw0KKyAgICB0aGlzLnNldFZlcnNpb24gPSBmdW5jdGlvbihvcHRzKSB7
DQorICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRW
ZXJzaW9uJyIpKTsNCisgICAgICAgIHZhciByZXEgPSB0aGlzLmhhbmRsZS5zZXRWZXJzaW9uKFN0
cmluZyh3aW5kb3cudmVyKyspKTsNCisgICAgICAgIHJlcS5vbmFib3J0ID0gZnVuY3Rpb24gKGUp
IHsNCisgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsg
Ii5zZXRWZXJzaW9uLm9uYWJvcnQnIikpOw0KKyAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMu
b25hYm9ydCkgeyBvcHRzLm9uYWJvcnQuY2FsbChzZWxmKTsgfQ0KKyAgICAgICAgfTsNCisgICAg
ICAgIHJlcS5vbmJsb2NrZWQgPSBmdW5jdGlvbiAoZSkgew0KKyAgICAgICAgICAgIHdpbmRvdy5z
dGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25ibG9ja2VkJyIp
KTsNCisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYmxvY2tlZCkgeyBvcHRzLm9uYmxv
Y2tlZC5jYWxsKHNlbGYpOyB9DQorICAgICAgICB9Ow0KKyAgICAgICAgcmVxLm9uc3VjY2VzcyA9
IGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExv
ZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnIikpOw0KKyAgICAgICAgICAgIGlm
IChzZWxmLmhhbmRsZS5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCJ0ZXN0LXN0b3JlIiArIHdp
bmRvdy52ZXIpKSB7DQorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlLmRlbGV0ZU9iamVjdFN0
b3JlKCJ0ZXN0LXN0b3JlIiArIHdpbmRvdy52ZXIpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICB2YXIgc3RvcmUgPSBzZWxmLmhhbmRsZS5jcmVhdGVPYmplY3RTdG9yZSgidGVzdC1zdG9y
ZSIgKyB3aW5kb3cudmVyKTsNCisgICAgICAgICAgICB2YXIgY291bnQgPSAwOw0KKyAgICAgICAg
ICAgIGRvX2FzeW5jX3B1dHMoKTsgLy8gS2VlcCB0aGlzIHRyYW5zYWN0aW9uIHJ1bm5pbmcgZm9y
IGEgd2hpbGUNCisgICAgICAgICAgICBmdW5jdGlvbiBkb19hc3luY19wdXRzKCkgew0KKyAgICAg
ICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUucHV0KGNvdW50LCBjb3VudCk7DQorICAgICAgICAg
ICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7DQorICAgICAgICAg
ICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgew0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCsrY291bnQgPCAxMCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRvX2FzeW5j
X3B1dHMoKTsNCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVy
c2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSciKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsg
fQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9Ow0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgIH07DQorICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7
DQorICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIu
c2V0VmVyc2lvbi5vbmVycm9yJyIpKTsNCisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9u
ZXJyb3IpIHsgb3B0cy5vbmVycm9yLmNhbGwoc2VsZik7IH0NCisgICAgICAgIH07DQorICAgIH07
DQorfQ0KKw0KKy8vIHJ1biBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHRha2UgYSBjb250aW51YXRp
b24gZnVuY3Rpb24NCitmdW5jdGlvbiBydW5TdGVwcyhjb21tYW5kcykgew0KKyAgICBpZiAoY29t
bWFuZHMubGVuZ3RoKSB7DQorICAgICAgICB2YXIgY29tbWFuZCA9IGNvbW1hbmRzLnNoaWZ0KCk7
DQorICAgICAgICBjb21tYW5kKGZ1bmN0aW9uKCkgeyBydW5TdGVwcyhjb21tYW5kcyk7IH0pOw0K
KyAgICB9DQorfQ0KKw0KK2Z1bmN0aW9uIHRlc3QoKSB7DQorICAgIGluZGV4ZWREQiA9IGV2YWxB
bmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4
ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOw0KKyAgICBzaG91bGRCZUZhbHNlKCJpbmRl
eGVkREIgPT0gbnVsbCIpOw0KKyAgICB0ZXN0MSgpOw0KK30NCisNCitmdW5jdGlvbiB0ZXN0MSgp
IHsNCisgICAgZGVidWcoIiIpOw0KKyAgICBkZWJ1ZygiVEVTVDogc2V0VmVyc2lvbiBibG9ja2Vk
IG9uIG9wZW4gaGFuZGxlcyIpOw0KKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rl
c3QxJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdIik7DQorICAgIHZhciBoMSA9
IG5ldyBDb25uZWN0aW9uKCJoMSIpOw0KKyAgICB2YXIgaDIgPSBuZXcgQ29ubmVjdGlvbigiaDIi
KTsNCisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkgeyBoMS5vcGVuKHtvbnN1Y2Nlc3M6
IGRvTmV4dH0pOyB9LA0KKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMi5vcGVuKHtvbnN1
Y2Nlc3M6IGRvTmV4dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lv
bjogZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVi
dWcoIiAgICBoMiBjbG9zaW5nLCBidXQgbm90IGltbWVkaWF0ZWx5Iik7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaDIuY2xvc2Uo
KTsgfSwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk7IH0sDQorICAg
ICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgxLnNldFZlcnNpb24oe29uc3VjY2VzczogZmluaXNo
VGVzdH0pOyB9LA0KKyAgICAgICAgIF0pOw0KKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgew0K
KyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoMS5vcGVuIiwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImgxLm9wZW4ub25zdWNjZXNzIiwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImgyLm9wZW4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaDIub3Blbi5vbnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaDEuc2V0VmVyc2lvbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5v
bnZlcnNpb25jaGFuZ2UiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0
VmVyc2lvbi5vbmJsb2NrZWQiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIu
Y2xvc2UiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbi5v
bnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lv
bi50cmFuc2FjdGlvbi1jb21wbGV0ZSINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XS50b1N0cmluZygpKTsNCisgICAgICAgIHRlc3QyKCk7DQorICAgIH0NCit9DQorDQorZnVuY3Rp
b24gdGVzdDIoKSB7DQorICAgIGRlYnVnKCIiKTsNCisgICAgZGVidWcoIlRFU1Q6IHNldFZlcnNp
b24gbm90IGJsb2NrZWQgaWYgaGFuZGxlIGNsb3NlZCBpbW1lZGlhdGVseSIpOw0KKyAgICBldmFs
QW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5z
dGVwcyA9IFtdIik7DQorICAgIHZhciBoMSA9IG5ldyBDb25uZWN0aW9uKCJoMSIpOw0KKyAgICB2
YXIgaDIgPSBuZXcgQ29ubmVjdGlvbigiaDIiKTsNCisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRv
TmV4dCkgeyBoMS5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dH0pOyB9LA0KKyAgICAgICAgICAgICAg
ZnVuY3Rpb24oZG9OZXh0KSB7IGgyLm9wZW4oe29uc3VjY2VzczogZG9OZXh0LA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVuY3Rpb24oKSB7
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIg
ICAgaDIgY2xvc2luZyBpbW1lZGlhdGVseSIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoMi5jbG9zZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH19KTsgfSwNCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4
dCkgeyBoMS5zZXRWZXJzaW9uKHtvbnN1Y2Nlc3M6IGRvTmV4dH0pOyB9LA0KKyAgICAgICAgICAg
ICAgZmluaXNoVGVzdA0KKyAgICAgICAgICAgICAgXSk7DQorDQorICAgIGZ1bmN0aW9uIGZpbmlz
aFRlc3QoKSB7DQorICAgICAgICBkZWJ1ZygiTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9n
dXMgaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQgc3RlcDsgdGhlcmUncyBhIEZJWE1FIik7DQorICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgxLm9wZW4iLA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaDEub3Blbi5vbnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaDIub3BlbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJoMi5vcGVuLm9uc3VjY2VzcyIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
MS5zZXRWZXJzaW9uIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9udmVy
c2lvbmNoYW5nZSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5jbG9zZSIs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLm9uc3VjY2Vz
cyIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLnRyYW5z
YWN0aW9uLWNvbXBsZXRlIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3Ry
aW5nKCkpOw0KKyAgICAgICAgdGVzdDMoKTsNCisgICAgfQ0KK30NCisNCitmdW5jdGlvbiB0ZXN0
MygpIHsNCisgICAgZGVidWcoIiIpOw0KKyAgICBkZWJ1ZygiVEVTVDogb3BlbiBhbmQgc2V0VmVy
c2lvbiBibG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVubmluZyAt
IGNsb3NlIHdoZW4gYmxvY2tlZCIpOw0KKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0g
J3Rlc3QzJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdIik7DQorICAgIHZhciBo
MSA9IG5ldyBDb25uZWN0aW9uKCJoMSIpOw0KKyAgICB2YXIgaDIgPSBuZXcgQ29ubmVjdGlvbigi
aDIiKTsNCisgICAgdmFyIGgzID0gbmV3IENvbm5lY3Rpb24oImgzIik7DQorICAgIHJ1blN0ZXBz
KFtmdW5jdGlvbihkb05leHQpIHsgaDEub3Blbih7b25zdWNjZXNzOiBkb05leHR9KTsgfSwNCisg
ICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMi5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4
dH0pOyB9LA0KKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgxLnNldFZlcnNpb24o
KTsgZG9OZXh0KCk7IH0sDQorICAgICAgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgaDIuc2V0
VmVyc2lvbih7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb25ibG9ja2VkOiBmdW5jdGlvbigpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgICBoMiBibG9ja2VkIHNvIGNs
b3NpbmciKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaDIuY2xvc2UoKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9OZXh0KCk7DQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LA0KKyAgICAgICAgICAgICAgZnVuY3Rp
b24oKSB7IGgzLm9wZW4oe29uc3VjY2VzczogZmluaXNoVGVzdH0pO30NCisgICAgICAgICAgICAg
IF0pOw0KKw0KKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgew0KKyAgICAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWyJoMS5vcGVuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImgxLm9wZW4ub25zdWNjZXNzIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImgyLm9wZW4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIub3Blbi5vbnN1
Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbiIs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5zZXRWZXJzaW9uIiwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9udmVyc2lvbmNoYW5nZSIsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCIsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5vbnZlcnNpb25jaGFuZ2UiLA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIuc2V0VmVyc2lvbi5vbmJsb2NrZWQiLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIuY2xvc2UiLA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaDMub3BlbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoMi5zZXRWZXJzaW9uLm9uZXJyb3IiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSIsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJoMy5vcGVuLm9uc3VjY2VzcyINCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsNCisgICAgICAgIHRlc3Q0KCk7DQorICAg
IH0NCit9DQorDQorZnVuY3Rpb24gdGVzdDQoKSB7DQorICAgIGRlYnVnKCIiKTsNCisgICAgZGVi
dWcoIlRFU1Q6IG9wZW4gYW5kIHNldFZlcnNpb24gYmxvY2tlZCBpZiBhIFZFUlNJT05fQ0hBTkdF
IHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgLSBqdXN0IGNsb3NlIik7DQorICAgIGV2YWxBbmRMb2co
IndpbmRvdy5kYm5hbWUgPSAndGVzdDQnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0g
W10iKTsNCisgICAgdmFyIGgxID0gbmV3IENvbm5lY3Rpb24oImgxIik7DQorICAgIHZhciBoMiA9
IG5ldyBDb25uZWN0aW9uKCJoMiIpOw0KKyAgICB2YXIgaDMgPSBuZXcgQ29ubmVjdGlvbigiaDMi
KTsNCisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkgeyBoMS5vcGVuKHtvbnN1Y2Nlc3M6
IGRvTmV4dH0pOyB9LA0KKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgyLm9wZW4o
e29uc3VjY2VzczogZG9OZXh0fSk7IH0sDQorICAgICAgICAgICAgICBmdW5jdGlvbihkb05leHQp
IHsgaDEuc2V0VmVyc2lvbigpOyBkb05leHQoKTsgfSwNCisgICAgICAgICAgICAgIGZ1bmN0aW9u
KGRvTmV4dCkgeyBoMy5vcGVuKHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgZG9OZXh0KCk7IH0s
DQorICAgICAgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgaDIuY2xvc2UoKTsgfSwNCisgICAg
ICAgICAgICAgIF0pOw0KKw0KKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgew0KKyAgICAgICAg
ZGVidWcoIk5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24ub25i
bG9ja2VkIHN0ZXA7IHRoZXJlJ3MgYSBGSVhNRSIpOw0KKyAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWyJoMS5vcGVuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgx
Lm9wZW4ub25zdWNjZXNzIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9w
ZW4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIub3Blbi5vbnN1Y2Nlc3Mi
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbiIsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMy5vcGVuIiwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImgyLmNsb3NlIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImgxLnNldFZlcnNpb24ub25zdWNjZXNzIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUiLA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaDMub3Blbi5vbnN1Y2Nlc3MiDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7DQorICAgICAgICB0ZXN0NSgpOw0KKyAgICB9
DQorfQ0KKw0KK2Z1bmN0aW9uIHRlc3Q1KCkgew0KKyAgICBkZWJ1ZygiIik7DQorICAgIGRlYnVn
KCJURVNUOiBvcGVuIGJsb2NrZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBy
dW5uaW5nIik7DQorICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDUnOyB3aW5k
b3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsNCisgICAgdmFyIGgxID0gbmV3IENvbm5l
Y3Rpb24oImgxIik7DQorICAgIHZhciBoMiA9IG5ldyBDb25uZWN0aW9uKCJoMiIpOw0KKw0KKyAg
ICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgxLm9wZW4oe29uc3VjY2VzczogZG9OZXh0
fSk7IH0sDQorICAgICAgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgaDEuc2V0VmVyc2lvbigp
OyBkb05leHQoKTsgfSwNCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMi5vcGVu
KHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfQ0KKyAgICAgICAgICAgICAgXSk7DQorDQorICAg
IGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7DQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
IndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbImgxLm9wZW4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEub3Blbi5v
bnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lv
biIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vcGVuIiwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24ub25zdWNjZXNzIiwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29t
cGxldGUiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIub3Blbi5vbnN1Y2Nl
c3MiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7DQorICAg
ICAgICB0ZXN0NigpOw0KKyAgICB9DQorfQ0KKw0KKw0KK2Z1bmN0aW9uIHRlc3Q2KCkgew0KKyAg
ICBkZWJ1ZygiIik7DQorICAgIGRlYnVnKCJURVNUOiB0d28gc2V0VmVyc2lvbnMgZnJvbSB0aGUg
c2FtZSBjb25uZWN0aW9uIik7DQorICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVz
dDYnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsNCisgICAgdmFyIGgxID0g
bmV3IENvbm5lY3Rpb24oImgxIik7DQorDQorICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQp
IHsgaDEub3Blbih7b25zdWNjZXNzOiBkb05leHR9KTsgfSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgDQorICAgICAgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgaDEuc2V0VmVy
c2lvbih7b25zdWNjZXNzOiBoYWxmRG9uZX0pOyANCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoMS5zZXRWZXJzaW9uKHtvbnN1Y2Nlc3M6IGhhbGZEb25lfSk7IH0NCisgICAgICAg
ICAgICAgIF0pOw0KKw0KKyAgICB2YXIgY291bnRlciA9IDA7DQorICAgIGZ1bmN0aW9uIGhhbGZE
b25lKCkgew0KKyAgICAgICAgY291bnRlcisrOw0KKyAgICAgICAgaWYgKGNvdW50ZXIgPCAyKSB7
DQorICAgICAgICAgICAgZGVidWcoJ2hhbGYgZG9uZScpOw0KKyAgICAgICAgfSBlbHNlIHsNCisg
ICAgICAgICAgICBmaW5pc2hUZXN0KCk7DQorICAgICAgICB9DQorICAgIH0gIA0KKw0KKyAgICBm
dW5jdGlvbiBmaW5pc2hUZXN0KCkgew0KKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3
aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyJoMS5vcGVuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLm9wZW4ub25z
dWNjZXNzIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24i
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbiIsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyIsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9u
LWNvbXBsZXRlIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNp
b24ub25zdWNjZXNzIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZl
cnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF0udG9TdHJpbmcoKSk7DQorICAgICAgICB0ZXN0NygpOw0KKyAgICB9DQorfQ0KKw0KK2Z1
bmN0aW9uIHRlc3Q3KCkgew0KKyAgICBkb25lKCk7DQorfQ0KKw0KK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOw0KKw0KK3Rlc3QoKTsNCisNCis8L3NjcmlwdD4NCis8L2JvZHk+DQorPC9o
dG1sPg0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R3by12ZXJz
aW9uLWNoYW5nZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
dHdvLXZlcnNpb24tY2hhbmdlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTI3NzM0YjE0ZDNi
NmFiNWVjMDBjYWEwYjE5OGEzMGRhMmMzYTEyZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R3by12ZXJzaW9uLWNoYW5nZXMtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsNDAgQEAKK1Rlc3QgYmVoYXZpb3Igd2hlbiB0aGUgc2FtZSBjb25uZWN0aW9uIGNh
bGxzIHNldFZlcnNpb24gdHdpY2UKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2lu
ZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3
aW5kb3cubW96SW5kZXhlZERCOworSURCVHJhbnNhY3Rpb24gPSB3aW5kb3cuSURCVHJhbnNhY3Rp
b24gfHwgd2luZG93LndlYmtpdElEQlRyYW5zYWN0aW9uIHx8IHdpbmRvdy5tb3pJREJUcmFuc2Fj
dGlvbjsKK1BBU1MgaW5kZXhlZERCID09IG51bGwgaXMgZmFsc2UKK1BBU1MgSURCVHJhbnNhY3Rp
b24gPT0gbnVsbCBpcyBmYWxzZQord2luZG93LnN0YXRlID0gJ3N0YXJ0aW5nJworaW5kZXhlZERC
Lm9wZW4oJ3R3by12ZXJzaW9ucy1vbmUtY29ubmVjdGlvbicpCitkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQKK3dpbmRvdy5zdGF0ZSA9IDAKK2RiLnNldFZlcnNpb24oJ3ZlcnNpb24gMScpCitkYi5z
ZXRWZXJzaW9uKCd2ZXJzaW9uIDInKQorc2V0VmVyc2lvbigpICMxIGNhbGxiYWNrCit3aW5kb3cu
c3RvcmUxID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUxJykKK1BBU1MgKyt3aW5k
b3cuc3RhdGUgaXMgMQord2luZG93LnN0b3JlMS5wdXQoJ2FhYScsIDExMSkKK1BBU1MgKyt3aW5k
b3cuc3RhdGUgaXMgMgorUEFTUyArK3dpbmRvdy5zdGF0ZSBpcyAzCitoYWxmd2F5IHRoZXJlLi4u
CitzZXRWZXJzaW9uKCkgIzIgY2FsbGJhY2sKK1BBU1MgKyt3aW5kb3cuc3RhdGUgaXMgNAord2lu
ZG93LnN0b3JlMiA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0LXN0b3JlMicpCit3aW5kb3cu
c3RvcmUyLnB1dCgnYmJiJywgMjIyKQorUEFTUyArK3dpbmRvdy5zdGF0ZSBpcyA1CitQQVNTICsr
d2luZG93LnN0YXRlIGlzIDYKK1BBU1Mgd2luZG93LmRiLnZlcnNpb24gaXMgInZlcnNpb24gMiIK
K3dpbmRvdy50cmFucyA9IGRiLnRyYW5zYWN0aW9uKFsndGVzdC1zdG9yZTEnLCAndGVzdC1zdG9y
ZTInXSkKK3dpbmRvdy5zdG9yZSA9IHdpbmRvdy50cmFucy5vYmplY3RTdG9yZSgndGVzdC1zdG9y
ZTEnKQord2luZG93LnJlcSA9IHdpbmRvdy5zdG9yZS5nZXQoMTExKQorUEFTUyBldmVudC50YXJn
ZXQucmVzdWx0IGlzICJhYWEiCit3aW5kb3cuc3RvcmUgPSB3aW5kb3cudHJhbnMub2JqZWN0U3Rv
cmUoJ3Rlc3Qtc3RvcmUyJykKK3dpbmRvdy5yZXEgPSB3aW5kb3cuc3RvcmUuZ2V0KDIyMikKK1BB
U1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAiYmJiIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL3R3by12ZXJzaW9uLWNoYW5nZXMuaHRtbCBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL3R3by12ZXJzaW9uLWNoYW5nZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNmY1M2M5
YTI5YWJlM2FkY2EyM2RjNTUyMDJjMWRkYzQ5MWNkZGViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHdvLXZlcnNpb24tY2hhbmdlcy5odG1sCkBAIC0w
LDAgKzEsMTE2IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCBiZWhhdmlvciB3aGVu
IHRoZSBzYW1lIGNvbm5lY3Rpb24gY2FsbHMgc2V0VmVyc2lvbiB0d2ljZSIpOworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBpbmRleGVkREIgPSBldmFsQW5k
TG9nKCJpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVk
REIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsiKTsKKyAgICBJREJUcmFuc2FjdGlvbiA9IGV2YWxB
bmRMb2coIklEQlRyYW5zYWN0aW9uID0gd2luZG93LklEQlRyYW5zYWN0aW9uIHx8IHdpbmRvdy53
ZWJraXRJREJUcmFuc2FjdGlvbiB8fCB3aW5kb3cubW96SURCVHJhbnNhY3Rpb247Iik7CisKKyAg
ICBzaG91bGRCZUZhbHNlKCJpbmRleGVkREIgPT0gbnVsbCIpOworICAgIHNob3VsZEJlRmFsc2Uo
IklEQlRyYW5zYWN0aW9uID09IG51bGwiKTsKKyAgICBvcGVuREJDb25uZWN0aW9uKCk7Cit9CisK
K2Z1bmN0aW9uIG9wZW5EQkNvbm5lY3Rpb24oKQoreworICAgIGV2YWxBbmRMb2coIndpbmRvdy5z
dGF0ZSA9ICdzdGFydGluZyciKTsKKyAgICB2YXIgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4
ZWREQi5vcGVuKCd0d28tdmVyc2lvbnMtb25lLWNvbm5lY3Rpb24nKSIpOworICAgIHJlcXVlc3Qu
b25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkKK3sKKyAgICB3aW5k
b3cuZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBldmFs
QW5kTG9nKCJ3aW5kb3cuc3RhdGUgPSAwIik7CisKKyAgICB2YXIgdmVyc2lvbkNoYW5nZVJlcXVl
c3QxID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbigndmVyc2lvbiAxJykiKTsKKyAgICB2ZXJz
aW9uQ2hhbmdlUmVxdWVzdDEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAg
IHZlcnNpb25DaGFuZ2VSZXF1ZXN0MS5vbnN1Y2Nlc3MgPSBpblNldFZlcnNpb24xOworCisgICAg
Ly8gYW5kIGNvbmN1cnJlbnRseS4uLgorCisgICAgdmFyIHZlcnNpb25DaGFuZ2VSZXF1ZXN0MiA9
IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ3ZlcnNpb24gMicpIik7CisgICAgdmVyc2lvbkNo
YW5nZVJlcXVlc3QyLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB2ZXJz
aW9uQ2hhbmdlUmVxdWVzdDIub25zdWNjZXNzID0gaW5TZXRWZXJzaW9uMjsKK30KKworZnVuY3Rp
b24gaW5TZXRWZXJzaW9uMSgpCit7CisgICAgZGVidWcoInNldFZlcnNpb24oKSAjMSBjYWxsYmFj
ayIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5zdG9yZTEgPSBkYi5jcmVhdGVPYmplY3RTdG9y
ZSgndGVzdC1zdG9yZTEnKSIpOworICAgIHNob3VsZEJlKCIrK3dpbmRvdy5zdGF0ZSIsICIxIik7
CisgICAgdmFyIHJlcSA9IGV2YWxBbmRMb2coIndpbmRvdy5zdG9yZTEucHV0KCdhYWEnLCAxMTEp
Iik7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXEu
b25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgc2hvdWxkQmUoIisrd2luZG93LnN0
YXRlIiwgIjIiKTsKKyAgICAgICAgaGFsZndheURvbmUoKTsKKyAgICB9OworfQorCitmdW5jdGlv
biBpblNldFZlcnNpb24yKCkKK3sKKyAgICBkZWJ1Zygic2V0VmVyc2lvbigpICMyIGNhbGxiYWNr
Iik7CisgICAgc2hvdWxkQmUoIisrd2luZG93LnN0YXRlIiwgIjQiKTsKKyAgICBldmFsQW5kTG9n
KCJ3aW5kb3cuc3RvcmUyID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUyJykiKTsK
KworICAgIHZhciByZXEgPSBldmFsQW5kTG9nKCJ3aW5kb3cuc3RvcmUyLnB1dCgnYmJiJywgMjIy
KSIpOworICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVx
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHNob3VsZEJlKCIrK3dpbmRvdy5z
dGF0ZSIsICI1Iik7CisgICAgICAgIGhhbGZ3YXlEb25lKCk7CisgICAgfTsKK30KKwordmFyIGNv
dW50ZXIgPSAwOworZnVuY3Rpb24gaGFsZndheURvbmUoKSAKK3sKKyAgICBjb3VudGVyICs9IDE7
CisgICAgaWYgKGNvdW50ZXIgPCAyKSB7CisgICAgICAgIHNob3VsZEJlKCIrK3dpbmRvdy5zdGF0
ZSIsICIzIik7CisgICAgICAgIGRlYnVnKCJoYWxmd2F5IHRoZXJlLi4uIiApOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHNob3VsZEJlKCIrK3dpbmRvdy5zdGF0ZSIsICI2Iik7CisgICAgICAgIGNo
ZWNrUmVzdWx0cygpOworICAgIH0KK30KKworZnVuY3Rpb24gY2hlY2tSZXN1bHRzKCkgeworICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LmRiLnZlcnNpb24iLCAidmVyc2lvbiAyIik7
CisgICAgdHJhbnMgPSBldmFsQW5kTG9nKCJ3aW5kb3cudHJhbnMgPSBkYi50cmFuc2FjdGlvbihb
J3Rlc3Qtc3RvcmUxJywgJ3Rlc3Qtc3RvcmUyJ10pIik7CisgICAgc3RvcmUgPSBldmFsQW5kTG9n
KCJ3aW5kb3cuc3RvcmUgPSB3aW5kb3cudHJhbnMub2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUxJyki
KTsKKyAgICByZXEgPSBldmFsQW5kTG9nKCJ3aW5kb3cucmVxID0gd2luZG93LnN0b3JlLmdldCgx
MTEpIik7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICBy
ZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJldmVudC50YXJnZXQucmVzdWx0IiwgImFhYSIpOworCisgICAgICAgIHN0b3JlID0gZXZh
bEFuZExvZygid2luZG93LnN0b3JlID0gd2luZG93LnRyYW5zLm9iamVjdFN0b3JlKCd0ZXN0LXN0
b3JlMicpIik7CisgICAgICAgIHJlcSA9IGV2YWxBbmRMb2coIndpbmRvdy5yZXEgPSB3aW5kb3cu
c3RvcmUuZ2V0KDIyMikiKTsKKyAgICAgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjazsKKyAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAiYmJiIik7
CisgICAgICAgICAgICBkb25lKCk7ICAgIAorICAgICAgICB9OworICAgIH07Cit9CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdmVy
c2lvbi1jaGFuZ2UtZXhjbHVzaXZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzg5ZTY3YjZmOTBlYjBkMjE2MTFlN2FlZmJmYjFkMWY1MDg3NDNlZgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1
c2l2ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0NiBAQAorRW5zdXJlIFZFUlNJT05fQ0hBTkdF
IHRyYW5zYWN0aW9uIGRvZXNuJ3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoIG90aGVyIHRyYW5zYWN0
aW9ucworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworaW5kZXhlZERCID0gd2luZG93
LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVk
REI7CitQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlzIGZhbHNlCit3aW5kb3cuc3RhdGUgPSAnc3Rh
cnRpbmcnCitpbmRleGVkREIub3BlbigndmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlJykKK2RiID0g
ZXZlbnQudGFyZ2V0LnJlc3VsdAorY2FsbGluZyBzZXRWZXJzaW9uKCkgLSBjYWxsYmFjayBzaG91
bGQgcnVuIGltbWVkaWF0ZWx5CitkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEnKQorY2FsbGluZyBv
cGVuKCkgLSBjYWxsYmFjayBzaG91bGQgd2FpdCB1bnRpbCBWRVJTSU9OX0NIQU5HRSB0cmFuc2Fj
dGlvbiBpcyBjb21wbGV0ZQoraW5kZXhlZERCLm9wZW4oJ3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2
ZScpCitzZXRWZXJzaW9uKCkgY2FsbGJhY2sKK3N0YXJ0aW5nIHdvcmsgaW4gVkVSU0lPTl9DSEFO
R0UgdHJhbnNhY3Rpb24KK3dpbmRvdy5zdGF0ZSA9ICdWRVJTSU9OX0NIQU5HRSBzdGFydGVkJwor
c3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdC1zdG9yZScpCitzdG9yZS5wdXQoMCwg
MCkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDEsIDEpCitpbiBwdXQncyBvbnN1Y2Nl
c3MKK3N0b3JlLnB1dCgyLCAyKQoraW4gcHV0J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoMywgMykK
K2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDQsIDQpCitpbiBwdXQncyBvbnN1Y2Nlc3MK
K3N0b3JlLnB1dCg1LCA1KQoraW4gcHV0J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoNiwgNikKK2lu
IHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDcsIDcpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0
b3JlLnB1dCg4LCA4KQoraW4gcHV0J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoOSwgOSkKK2luIHB1
dCdzIG9uc3VjY2VzcworZW5kaW5nIHdvcmsgaW4gVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24K
K3dpbmRvdy5zdGF0ZSA9ICdWRVJTSU9OX0NIQU5HRSBmaW5pc2hlZCcKK29wZW4oKSBjYWxsYmFj
ayAtIHRoaXMgc2hvdWxkIGFwcGVhciBhZnRlciBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBl
bmRzCitQQVNTIHdpbmRvdy5zdGF0ZSBpcyAiVkVSU0lPTl9DSEFOR0UgZmluaXNoZWQiCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNs
dXNpdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NWVkMGEzOTRkOTdlODM3MGIwMGQ2ZjNiYmM3NGZkNDkz
MGVkNDhmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
dmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLmh0bWwKQEAgLTAsMCArMSw4NyBAQAorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4K
KworZGVzY3JpcHRpb24oIkVuc3VyZSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBkb2Vzbid0
IHJ1biBjb25jdXJyZW50bHkgd2l0aCBvdGhlciB0cmFuc2FjdGlvbnMiKTsKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworCisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaW5kZXhlZERCID0gZXZhbEFuZExv
ZygiaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERC
IHx8IHdpbmRvdy5tb3pJbmRleGVkREI7Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERC
ID09IG51bGwiKTsKKyAgICBvcGVuREJDb25uZWN0aW9uKCk7Cit9CisKK2Z1bmN0aW9uIG9wZW5E
QkNvbm5lY3Rpb24oKQoreworICAgIGV2YWxBbmRMb2coIndpbmRvdy5zdGF0ZSA9ICdzdGFydGlu
ZyciKTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4oJ3ZlcnNpb24t
Y2hhbmdlLWV4Y2x1c2l2ZScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBvcGVuU3VjY2Vz
czsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKwor
ZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQoreworICAgIHdpbmRvdy5kYiA9IGV2YWxBbmRMb2coImRi
ID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworCisgICAgZGVidWcoImNhbGxpbmcgc2V0VmVyc2lv
bigpIC0gY2FsbGJhY2sgc2hvdWxkIHJ1biBpbW1lZGlhdGVseSIpOworICAgIHZhciB2ZXJzaW9u
Q2hhbmdlUmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ3ZlcnNpb24gMScpIik7
CisgICAgdmVyc2lvbkNoYW5nZVJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxi
YWNrOworICAgIHZlcnNpb25DaGFuZ2VSZXF1ZXN0Lm9uc3VjY2VzcyA9IGluU2V0VmVyc2lvbjsK
KworICAgIC8vIGFuZCBjb25jdXJyZW50bHkuLi4KKworICAgIGRlYnVnKCJjYWxsaW5nIG9wZW4o
KSAtIGNhbGxiYWNrIHNob3VsZCB3YWl0IHVudGlsIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9u
IGlzIGNvbXBsZXRlIik7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhl
ZERCLm9wZW4oJ3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZScpIik7CisgICAgb3BlblJlcXVlc3Qu
b25zdWNjZXNzID0gb3BlbkFnYWluU3VjY2VzczsKKyAgICBvcGVuUmVxdWVzdC5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGluU2V0VmVyc2lvbigpCit7
CisgICAgZGVidWcoInNldFZlcnNpb24oKSBjYWxsYmFjayIpOworICAgIGRlYnVnKCJzdGFydGlu
ZyB3b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uIik7CisgICAgZXZhbEFuZExvZygi
d2luZG93LnN0YXRlID0gJ1ZFUlNJT05fQ0hBTkdFIHN0YXJ0ZWQnIik7CisKKyAgICB3aW5kb3cu
c3RvcmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0LXN0
b3JlJykiKTsKKyAgICB3aW5kb3cuY291bnQgPSAwOworICAgIGRvX2FzeW5jX3B1dHMoKTsKKwor
ICAgIGZ1bmN0aW9uIGRvX2FzeW5jX3B1dHMoKSB7CisgICAgICAgIHZhciByZXEgPSBldmFsQW5k
TG9nKCJzdG9yZS5wdXQoIiArIGNvdW50ICsgIiwgIiArIGNvdW50ICsgIikiKTsKKyAgICAgICAg
cmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAgcmVxLm9uc3Vj
Y2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICBkZWJ1ZygiaW4gcHV0J3Mgb25zdWNj
ZXNzIik7CisgICAgICAgICAgICBpZiAoKyt3aW5kb3cuY291bnQgPCAxMCkgeworICAgICAgICAg
ICAgICAgIGRvX2FzeW5jX3B1dHMoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgZGVidWcoImVuZGluZyB3b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uIik7
CisgICAgICAgICAgICAgICAgZXZhbEFuZExvZygid2luZG93LnN0YXRlID0gJ1ZFUlNJT05fQ0hB
TkdFIGZpbmlzaGVkJyIpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KKwor
ZnVuY3Rpb24gb3BlbkFnYWluU3VjY2VzcygpCit7CisgICAgZGVidWcoIm9wZW4oKSBjYWxsYmFj
ayAtIHRoaXMgc2hvdWxkIGFwcGVhciBhZnRlciBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBl
bmRzIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RhdGUiLCAiVkVSU0lP
Tl9DSEFOR0UgZmluaXNoZWQiKTsKKyAgICBkb25lKCk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGJlZjg4NmIyMDc2ODljMDA3ODRkZThlYjJmN2VlMWFiMDQ3NGFkNGUuLmU0
NmVjMmI3Y2Q2MGQ5OWNhZGQ4YWI1ZTg3Mjg4OTZjYTMzYTJlZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxMS0xMC0xMiAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIG1ha2UgSURCRmFjdG9yeS5vcGVuIHdhaXQgZm9yIHBlbmRpbmcgc2V0VmVy
c2lvbiB0cmFuc2FjdGlvbnMgdG8gY29tcGxldGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY5MzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFu
Z2UtZXhjbHVzaXZlLmh0bWwKKworICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5k
aW5nT3BlbkNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpQZW5kaW5nT3BlbkNhbGw6OmNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbkNhbGw6OlBlbmRpbmdPcGVuQ2FsbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3Rh
cnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2Fj
dGlvbkZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnNldFZlcnNpb25JbnRlcm5hbERvbmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6b3BlbkV2ZW50dWFsbHkpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbik6Cisg
ICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCk6CisKIDIwMTEtMTAtMTIgIEpp
YW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN1cHBvcnQgcGFzc2luZyBv
cHRpb25hbCBmaWxlbmFtZSB3aGVuIEZvcm1EYXRhLmFwcGVuZCgpIGlzIHVzZWQgdG8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4
IDhmZTk3MWEyN2M5MTEyNDc1OWNmZjMyMDNkZThkY2Q4NTQ1ZjY4NmQuLjJhMTY0ZTMyNTcwNGJi
MjczYWE3MThkMzQwYTZkYjhjM2ZhMTFmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMzksNiArMzksMjIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5n
T3BlbkNhbGwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nT3BlbkNhbGw+IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBQZW5kaW5nT3BlbkNhbGwoY2FsbGJhY2tzKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorCitwcml2
YXRlOgorICAgIFBlbmRpbmdPcGVuQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQorICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKwogY2xhc3MgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6UGVuZGluZ1NldFZlcnNpb25DYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8
UGVuZGluZ1NldFZlcnNpb25DYWxsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UGVuZGluZ1NldFZlcnNpb25DYWxsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKQEAgLTE3NCwxMiArMTkwLDE5IEBAIHZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBh
c3NSZWZQdHI8SURCQ2FsCiAgICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCiAg
ICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKHZlcnNpb24pOwogICAgIH0KKyAgICAv
LyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9u
cyBhZnRlciB0aGUKKyAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90
IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCiAgICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6
ZSgpID4gMSkgewogICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwogICAgICAgICBSZWZQ
dHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBQZW5kaW5n
U2V0VmVyc2lvbkNhbGw6OmNyZWF0ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJh
Y2tzKTsKICAgICAgICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmFwcGVuZChwZW5kaW5nU2V0
VmVyc2lvbkNhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJz
aW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gUGVuZGluZ1NldFZlcnNpb25DYWxsOjpj
cmVhdGUodmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgICAgIG1f
cGVuZGluZ1NldFZlcnNpb25DYWxscy5hcHBlbmQocGVuZGluZ1NldFZlcnNpb25DYWxsKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RT
dG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKQEAgLTIwMyw2ICsyMjYsNDEgQEAgdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWYKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0cmFuc2FjdGlv
bik7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFydGVk
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBUcmFuc2FjdGlv
bikKK3sKKyAgICBpZiAocHJwVHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6
VkVSU0lPTl9DSEFOR0UpIHsKKyAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24pOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24g
PSBwcnBUcmFuc2FjdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6dHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gcHJwVHJhbnNhY3Rpb24pCit7CisgICAgaWYgKHBycFRyYW5zYWN0aW9uLT5tb2Rl
KCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7CisgICAgICAgIEFTU0VSVChw
cnBUcmFuc2FjdGlvbi5nZXQoKSA9PSBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24u
Z2V0KCkpOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uY2xlYXIo
KTsKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworICAgIH0KK30KKwordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKK3sKKyAgICAvLyBQZW5k
aW5nIGNhbGxzIG1heSBiZSByZXF1ZXVlZCBvciBhYm9ydGVkCisgICAgRGVxdWU8UmVmUHRyPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGxzOworICAgIG1fcGVu
ZGluZ1NldFZlcnNpb25DYWxscy5zd2FwKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbHMpOworICAgIHdo
aWxlICghcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHBl
bmRpbmdTZXRWZXJzaW9uQ2FsbCA9IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbHMudGFrZUZpcnN0KCk7
CisgICAgICAgIHNldFZlcnNpb24ocGVuZGluZ1NldFZlcnNpb25DYWxsLT52ZXJzaW9uKCksIHBl
bmRpbmdTZXRWZXJzaW9uQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+
ZGF0YWJhc2VDYWxsYmFja3MoKSwgZWMpOworICAgICAgICBBU1NFUlQoIWVjKTsKKyAgICB9CisK
KyAgICB3aGlsZSAoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiAmJiBtX3BlbmRp
bmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpICYmICFtX3BlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0
eSgpKSB7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCA9
IG1fcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgb3BlbkNvbm5lY3Rpb24o
cGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorfQorCiBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJh
bnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQg
bW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
YmplY3RTdG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CkBAIC0yMjEsNiArMjc5LDE0IEBAIHZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCiAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPihjYWxsYmFja3MpKTsKIH0KIAordm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQoreworICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwg
IW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIG1fcGVuZGluZ09w
ZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAg
ZWxzZQorICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKK30KKwogdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MpCiB7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxs
YmFja3MgPSBwcnBDYWxsYmFja3M7CkBAIC0yMjksMTIgKzI5NSw3IEBAIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzCiAgICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpID4gMSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgd2hpbGUgKCFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8
UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBtX3BlbmRpbmdT
ZXRWZXJzaW9uQ2FsbHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIHNldFZlcnNpb24ocGVuZGluZ1Nl
dFZlcnNpb25DYWxsLT52ZXJzaW9uKCksIHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+Y2FsbGJhY2tz
KCksIHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgZWMpOwotICAg
ICAgICBBU1NFUlQoIWVjKTsKLSAgICB9CisgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwogfQog
CiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAppbmRleCBmNzc5
MTI1MGQ5MThhYTE5ODQ0MTU5YjI5N2IyNTNiM2JlNjQ4ZWZlLi40NjFiOGI5NmY4MGYwNWZiMGU1
MmY4MmIxOWM2Zjk4M2NlZDU3NGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTQsNyArNTQsMTAgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKICAgICBpbnQ2NF90IGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAgLy8gRklYTUU6IHJlbmFtZSAib3BlbiIgdG8gc29t
ZXRoaW5nIG1vcmUgZGVzY3JpcHRpdmUsIGxpa2UgcmVnaXN0ZXJGcm9udEVuZENhbGxiYWNrcwog
ICAgIHZvaWQgb3BlbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7CisgICAgdm9p
ZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogCiAgICAgdmlydHVh
bCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIHZpcnR1YWwgU3Ry
aW5nIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KQEAgLTY4LDExICs3MSwx
NCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CisgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0
ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB2b2lk
IHRyYW5zYWN0aW9uRmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+KTsKIAogcHJpdmF0ZToKICAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0
cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvciosIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRl
bnRpZmllcik7CiAKICAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMoKTsKKyAgICB2b2lkIHByb2Nl
c3NQZW5kaW5nQ2FsbHMoKTsKIAogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlSW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAgICAgc3RhdGljIHZvaWQgZGVs
ZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKQEAg
LTk2LDEwICsxMDIsMTQgQEAgcHJpdmF0ZToKICAgICBPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0
b3JlczsKIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0
aW9uQ29vcmRpbmF0b3I7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOwogCiAgICAgY2xhc3MgUGVuZGlu
Z1NldFZlcnNpb25DYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+
ID4gbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxs
OworICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxz
OworCiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7CiAgICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRh
YmFzZUNhbGxiYWNrc1NldDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggNTFjNTBjNDU5MDI4NDQzYjc2NmY2OTAyNzlmY2Iw
MGJmNDNkZjk3ZS4uNGM4YjkwYjZhM2QzZTJmNWI1Njc5NzM1NDU2ZjFkMDBiMTllZDAwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApA
QCAtMTA5LDcgKzEwOSw5IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhCiAKICAgICBJREJEYXRh
YmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1
bmlxdWVJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5k
KCkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoaXQtPnNlY29uZCk7CisgICAgICAg
IC8vIElmIGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBhbnkg
cGVuZGluZworICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRlLgorICAgICAg
ICBpdC0+c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmNwcAppbmRleCAxNTZjYjg5YTlmYjA5ZGE1MDRmNDVhOTc4ZTAyNzNlYTNh
NmE1NjRhLi4wMTVkYTE4ZDY5YTgyOGM1NTcxNzlhMGZjMWFmMGMxMjkzMzYyYmVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5j
cHAKQEAgLTEzMSw2ICsxMzEsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFi
b3J0KCkKICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydCgpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CiAgICAgQVNT
RVJUKCFtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMp
KTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwogICAgIG1fZGF0
YWJhc2UgPSAwOwogfQogCkBAIC0xNzEsNiArMTcyLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpzdGFydCgpCiAKICAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOwogICAgIG1f
ZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0
aGlzKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7CiB9CiAKIHZv
aWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKQEAgLTE4Niw2ICsxODgsNyBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCiAgICAgbV90cmFuc2Fj
dGlvbi0+Y29tbWl0KCk7CiAgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUoKTsKICAgICBtX2Rh
dGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRo
aXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CiAgICAgbV9k
YXRhYmFzZSA9IDA7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110775</attachid>
            <date>2011-10-12 17:08:06 -0700</date>
            <delta_ts>2011-10-13 13:55:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69307-20111012170805.patch</filename>
            <type>text/plain</type>
            <size>40710</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcyNzYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4YzU2NTIxMGEyODdhNDFkNmQ1MGZi
YzUzZDhjODE1NzFjYzlhZTVjLi44OGNiMWYyMDlhZmY2NDIwMzdmNzE5MDk3YzdiZWM3M2M3ZWVl
ODk3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTAtMTIgIEpvc2h1YSBCZWxsICA8anNi
ZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZv
ciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNvbWUgdGVzdHMgbWFya2VkIEZB
SUwgZHVlIHRvIGtub3duIEZJWE1FIGZvciBleHRyYW5lb3VzIG9uYmxvY2tlZCBldmVudHMuCisK
KyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24tZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNp
b24uaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvdHdvLXZlcnNpb24t
Y2hhbmdlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRi
L3R3by12ZXJzaW9uLWNoYW5nZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRl
eGVkZGIvdmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLmh0bWw6IEFk
ZGVkLgorCiAyMDExLTEwLTEyICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBGaXggZXhwZWN0YXRpb24gYW1iaWd1aXRpZXMuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNp
b24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9z
ZS12ZXJzaW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZGMwMjRhMTZkZWUxMDMxNGI4OTJj
ZTU1MmIxNTUzZjgzNGIzMDAxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEw
MyBAQAorVGVzdCBpbnRlcmxlYXZlZCBvcGVuL2Nsb3NlL3NldFZlcnNpb24gY2FsbHMgaW4gdmFy
aW91cyBwZXJtdXRhdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4
ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5k
b3cubW96SW5kZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQorCitURVNU
OiBzZXRWZXJzaW9uIGJsb2NrZWQgb24gb3BlbiBoYW5kbGVzCit3aW5kb3cuZGJuYW1lID0gJ3Rl
c3QxJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdCisnaDEub3BlbicKKydoMS5v
cGVuLm9uc3VjY2VzcycKKydoMi5vcGVuJworJ2gyLm9wZW4ub25zdWNjZXNzJworJ2gxLnNldFZl
cnNpb24nCisnaDIub252ZXJzaW9uY2hhbmdlJworICAgIGgyIGNsb3NpbmcsIGJ1dCBub3QgaW1t
ZWRpYXRlbHkKKydoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCcKKydoMi5jbG9zZScKKydoMS5zZXRW
ZXJzaW9uLm9uc3VjY2VzcycKKydoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJwor
UEFTUyB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBpcyAiaDEub3BlbixoMS5vcGVuLm9uc3VjY2Vz
cyxoMi5vcGVuLGgyLm9wZW4ub25zdWNjZXNzLGgxLnNldFZlcnNpb24saDIub252ZXJzaW9uY2hh
bmdlLGgxLnNldFZlcnNpb24ub25ibG9ja2VkLGgyLmNsb3NlLGgxLnNldFZlcnNpb24ub25zdWNj
ZXNzLGgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUiCisKK1RFU1Q6IHNldFZlcnNp
b24gbm90IGJsb2NrZWQgaWYgaGFuZGxlIGNsb3NlZCBpbW1lZGlhdGVseQord2luZG93LmRibmFt
ZSA9ICd0ZXN0Mic7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gxLm9wZW4n
CisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDIub3BlbicKKydoMi5vcGVuLm9uc3VjY2VzcycKKydo
MS5zZXRWZXJzaW9uJworJ2gyLm9udmVyc2lvbmNoYW5nZScKKyAgICBoMiBjbG9zaW5nIGltbWVk
aWF0ZWx5CisnaDIuY2xvc2UnCisnaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQnCisnaDEuc2V0VmVy
c2lvbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZScKK05P
VEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24ub25ibG9ja2VkIHN0
ZXA7IHRoZXJlJ3MgYSBGSVhNRQorRkFJTCB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBzaG91bGQg
YmUgaDEub3BlbixoMS5vcGVuLm9uc3VjY2VzcyxoMi5vcGVuLGgyLm9wZW4ub25zdWNjZXNzLGgx
LnNldFZlcnNpb24saDIub252ZXJzaW9uY2hhbmdlLGgyLmNsb3NlLGgxLnNldFZlcnNpb24ub25z
dWNjZXNzLGgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUuIFdhcyBoMS5vcGVuLGgx
Lm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbixo
Mi5vbnZlcnNpb25jaGFuZ2UsaDIuY2xvc2UsaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQsaDEuc2V0
VmVyc2lvbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZS4KKwor
VEVTVDogb3BlbiBhbmQgc2V0VmVyc2lvbiBibG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gaXMgcnVubmluZyAtIGNsb3NlIHdoZW4gYmxvY2tlZAord2luZG93LmRibmFtZSA9
ICd0ZXN0Myc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gxLm9wZW4nCisn
aDEub3Blbi5vbnN1Y2Nlc3MnCisnaDIub3BlbicKKydoMi5vcGVuLm9uc3VjY2VzcycKKydoMS5z
ZXRWZXJzaW9uJworJ2gyLnNldFZlcnNpb24nCisnaDIub252ZXJzaW9uY2hhbmdlJworJ2gxLnNl
dFZlcnNpb24ub25ibG9ja2VkJworJ2gxLm9udmVyc2lvbmNoYW5nZScKKydoMi5zZXRWZXJzaW9u
Lm9uYmxvY2tlZCcKKyAgICBoMiBibG9ja2VkIHNvIGNsb3NpbmcKKydoMi5jbG9zZScKKydoMy5v
cGVuJworJ2gyLnNldFZlcnNpb24ub25lcnJvcicKKydoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcycK
KydoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJworJ2gzLm9wZW4ub25zdWNjZXNz
JworUEFTUyB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBpcyAiaDEub3BlbixoMS5vcGVuLm9uc3Vj
Y2VzcyxoMi5vcGVuLGgyLm9wZW4ub25zdWNjZXNzLGgxLnNldFZlcnNpb24saDIuc2V0VmVyc2lv
bixoMi5vbnZlcnNpb25jaGFuZ2UsaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQsaDEub252ZXJzaW9u
Y2hhbmdlLGgyLnNldFZlcnNpb24ub25ibG9ja2VkLGgyLmNsb3NlLGgzLm9wZW4saDIuc2V0VmVy
c2lvbi5vbmVycm9yLGgxLnNldFZlcnNpb24ub25zdWNjZXNzLGgxLnNldFZlcnNpb24udHJhbnNh
Y3Rpb24tY29tcGxldGUsaDMub3Blbi5vbnN1Y2Nlc3MiCisKK1RFU1Q6IG9wZW4gYW5kIHNldFZl
cnNpb24gYmxvY2tlZCBpZiBhIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcg
LSBqdXN0IGNsb3NlCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q0Jzsgd2luZG93LnZlciA9IDE7IHdp
bmRvdy5zdGVwcyA9IFtdCisnaDEub3BlbicKKydoMS5vcGVuLm9uc3VjY2VzcycKKydoMi5vcGVu
JworJ2gyLm9wZW4ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24nCisnaDMub3BlbicKKydoMi5j
bG9zZScKKydoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCcKKydoMS5zZXRWZXJzaW9uLm9uc3VjY2Vz
cycKKydoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJworJ2gzLm9wZW4ub25zdWNj
ZXNzJworTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaDEuc2V0VmVyc2lvbi5vbmJs
b2NrZWQgc3RlcDsgdGhlcmUncyBhIEZJWE1FCitGQUlMIHdpbmRvdy5zdGVwcy50b1N0cmluZygp
IHNob3VsZCBiZSBoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1
Y2Nlc3MsaDEuc2V0VmVyc2lvbixoMy5vcGVuLGgyLmNsb3NlLGgxLnNldFZlcnNpb24ub25zdWNj
ZXNzLGgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUsaDMub3Blbi5vbnN1Y2Nlc3Mu
IFdhcyBoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1Y2Nlc3Ms
aDEuc2V0VmVyc2lvbixoMy5vcGVuLGgyLmNsb3NlLGgxLnNldFZlcnNpb24ub25ibG9ja2VkLGgx
LnNldFZlcnNpb24ub25zdWNjZXNzLGgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUs
aDMub3Blbi5vbnN1Y2Nlc3MuCisKK1RFU1Q6IG9wZW4gYmxvY2tlZCBpZiBhIFZFUlNJT05fQ0hB
TkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcKK3dpbmRvdy5kYm5hbWUgPSAndGVzdDUnOyB3aW5k
b3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KKydoMS5vcGVuJworJ2gxLm9wZW4ub25zdWNj
ZXNzJworJ2gxLnNldFZlcnNpb24nCisnaDIub3BlbicKKydoMS5zZXRWZXJzaW9uLm9uc3VjY2Vz
cycKKydoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJworJ2gyLm9wZW4ub25zdWNj
ZXNzJworUEFTUyB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBpcyAiaDEub3BlbixoMS5vcGVuLm9u
c3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgyLm9wZW4saDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEu
c2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSxoMi5vcGVuLm9uc3VjY2VzcyIKKworVEVT
VDogdHdvIHNldFZlcnNpb25zIGZyb20gdGhlIHNhbWUgY29ubmVjdGlvbgord2luZG93LmRibmFt
ZSA9ICd0ZXN0Nic7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gxLm9wZW4n
CisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbicKKydoMS5zZXRWZXJzaW9uJwor
J2gxLnNldFZlcnNpb24ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29t
cGxldGUnCitoYWxmIGRvbmUKKydoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcycKKydoMS5zZXRWZXJz
aW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJworUEFTUyB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBp
cyAiaDEub3BlbixoMS5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgxLnNldFZlcnNpb24s
aDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0
ZSxoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBs
ZXRlIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVy
c2lvbi5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJz
aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjEyNjFkNTczNDNkZGRlNjE1OTQxNTFiYzdlYTczZmU3YzY2
NzQ0NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29w
ZW4tY2xvc2UtdmVyc2lvbi5odG1sCkBAIC0wLDAgKzEsMzA0IEBACis8aHRtbD4NCis8aGVhZD4N
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4NCis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pg0KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0Pg0KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4NCis8L2hlYWQ+DQorPGJvZHk+DQorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+DQorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+DQorPHNjcmlw
dD4NCisNCitkZXNjcmlwdGlvbigiVGVzdCBpbnRlcmxlYXZlZCBvcGVuL2Nsb3NlL3NldFZlcnNp
b24gY2FsbHMgaW4gdmFyaW91cyBwZXJtdXRhdGlvbnMiKTsNCitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQ0KKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
DQorDQorZnVuY3Rpb24gQ29ubmVjdGlvbihpZCkgew0KKyAgICBpZCA9IFN0cmluZyhpZCk7DQor
ICAgIHZhciBzZWxmID0gdGhpczsNCisgICAgdGhpcy5vcGVuID0gZnVuY3Rpb24ob3B0cykgew0K
KyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIub3Blbici
KSk7DQorICAgICAgICB2YXIgcmVxID0gaW5kZXhlZERCLm9wZW4od2luZG93LmRibmFtZSk7DQor
ICAgICAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOw0KKyAgICAgICAg
cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgc2VsZi5oYW5kbGUg
PSBlLnRhcmdldC5yZXN1bHQ7DQorICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFu
ZExvZygiJyIgKyBpZCArICIub3Blbi5vbnN1Y2Nlc3MnIikpOw0KKyAgICAgICAgICAgIHNlbGYu
aGFuZGxlLm9udmVyc2lvbmNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsNCisgICAgICAgICAgICAgICAg
d2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIub252ZXJzaW9uY2hhbmdl
JyIpKTsNCisgICAgICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnZlcnNpb24pIHsgb3B0
cy5vbnZlcnNpb24uY2FsbChzZWxmKTsgfQ0KKyAgICAgICAgICAgIH07DQorICAgICAgICAgICAg
aWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsg
fQ0KKyAgICAgICAgfTsNCisgICAgfTsNCisNCisgICAgdGhpcy5jbG9zZSA9IGZ1bmN0aW9uKCkg
ew0KKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuY2xv
c2UnIikpOw0KKyAgICAgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsNCisgICAgfTsNCisNCisgICAg
dGhpcy5zZXRWZXJzaW9uID0gZnVuY3Rpb24ob3B0cykgew0KKyAgICAgICAgd2luZG93LnN0ZXBz
LnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbiciKSk7DQorICAgICAgICB2
YXIgcmVxID0gdGhpcy5oYW5kbGUuc2V0VmVyc2lvbihTdHJpbmcod2luZG93LnZlcisrKSk7DQor
ICAgICAgICByZXEub25hYm9ydCA9IGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgd2luZG93
LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi5vbmFib3J0JyIp
KTsNCisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYWJvcnQpIHsgb3B0cy5vbmFib3J0
LmNhbGwoc2VsZik7IH0NCisgICAgICAgIH07DQorICAgICAgICByZXEub25ibG9ja2VkID0gZnVu
Y3Rpb24gKGUpIHsNCisgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCIn
IiArIGlkICsgIi5zZXRWZXJzaW9uLm9uYmxvY2tlZCciKSk7DQorICAgICAgICAgICAgaWYgKG9w
dHMgJiYgb3B0cy5vbmJsb2NrZWQpIHsgb3B0cy5vbmJsb2NrZWQuY2FsbChzZWxmKTsgfQ0KKyAg
ICAgICAgfTsNCisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgew0KKyAgICAg
ICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNp
b24ub25zdWNjZXNzJyIpKTsNCisgICAgICAgICAgICBpZiAoc2VsZi5oYW5kbGUub2JqZWN0U3Rv
cmVOYW1lcy5jb250YWlucygidGVzdC1zdG9yZSIgKyB3aW5kb3cudmVyKSkgew0KKyAgICAgICAg
ICAgICAgICBzZWxmLmhhbmRsZS5kZWxldGVPYmplY3RTdG9yZSgidGVzdC1zdG9yZSIgKyB3aW5k
b3cudmVyKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgdmFyIHN0b3JlID0gc2VsZi5o
YW5kbGUuY3JlYXRlT2JqZWN0U3RvcmUoInRlc3Qtc3RvcmUiICsgd2luZG93LnZlcik7DQorICAg
ICAgICAgICAgdmFyIGNvdW50ID0gMDsNCisgICAgICAgICAgICBkb19hc3luY19wdXRzKCk7IC8v
IEtlZXAgdGhpcyB0cmFuc2FjdGlvbiBydW5uaW5nIGZvciBhIHdoaWxlDQorICAgICAgICAgICAg
ZnVuY3Rpb24gZG9fYXN5bmNfcHV0cygpIHsNCisgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0
b3JlLnB1dChjb3VudCwgY291bnQpOw0KKyAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrOw0KKyAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0g
ZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgICAgIGlmICgrK2NvdW50IDwgMTApIHsN
CisgICAgICAgICAgICAgICAgICAgICAgICBkb19hc3luY19wdXRzKCk7DQorICAgICAgICAgICAg
ICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5w
dXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxl
dGUnIikpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25zdWNj
ZXNzKSB7IG9wdHMub25zdWNjZXNzLmNhbGwoc2VsZik7IH0NCisgICAgICAgICAgICAgICAgICAg
IH0NCisgICAgICAgICAgICAgICAgfTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9Ow0KKyAg
ICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgew0KKyAgICAgICAgICAgIHdpbmRvdy5z
dGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25lcnJvciciKSk7
DQorICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmVycm9yKSB7IG9wdHMub25lcnJvci5j
YWxsKHNlbGYpOyB9DQorICAgICAgICB9Ow0KKyAgICB9Ow0KK30NCisNCisvLyBydW4gYSBzZXJp
ZXMgb2Ygc3RlcHMgdGhhdCB0YWtlIGEgY29udGludWF0aW9uIGZ1bmN0aW9uDQorZnVuY3Rpb24g
cnVuU3RlcHMoY29tbWFuZHMpIHsNCisgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkgew0KKyAgICAg
ICAgdmFyIGNvbW1hbmQgPSBjb21tYW5kcy5zaGlmdCgpOw0KKyAgICAgICAgY29tbWFuZChmdW5j
dGlvbigpIHsgcnVuU3RlcHMoY29tbWFuZHMpOyB9KTsNCisgICAgfQ0KK30NCisNCitmdW5jdGlv
biB0ZXN0KCkgew0KKyAgICBpbmRleGVkREIgPSBldmFsQW5kTG9nKCJpbmRleGVkREIgPSB3aW5k
b3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVkREIgfHwgd2luZG93Lm1vekluZGV4
ZWREQjsiKTsNCisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09IG51bGwiKTsNCisgICAg
dGVzdDEoKTsNCit9DQorDQorZnVuY3Rpb24gdGVzdDEoKSB7DQorICAgIGRlYnVnKCIiKTsNCisg
ICAgZGVidWcoIlRFU1Q6IHNldFZlcnNpb24gYmxvY2tlZCBvbiBvcGVuIGhhbmRsZXMiKTsNCisg
ICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAxOyB3
aW5kb3cuc3RlcHMgPSBbXSIpOw0KKyAgICB2YXIgaDEgPSBuZXcgQ29ubmVjdGlvbigiaDEiKTsN
CisgICAgdmFyIGgyID0gbmV3IENvbm5lY3Rpb24oImgyIik7DQorICAgIHJ1blN0ZXBzKFtmdW5j
dGlvbihkb05leHQpIHsgaDEub3Blbih7b25zdWNjZXNzOiBkb05leHR9KTsgfSwNCisgICAgICAg
ICBmdW5jdGlvbihkb05leHQpIHsgaDIub3Blbih7b25zdWNjZXNzOiBkb05leHQsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgew0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaDIgY2xvc2luZywgYnV0
IG5vdCBpbW1lZGlhdGVseSIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGgyLmNsb3NlKCk7IH0sIDApOw0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LA0KKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkg
eyBoMS5zZXRWZXJzaW9uKHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwNCisgICAgICAgICBd
KTsNCisgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsNCisgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCkiLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFsiaDEub3BlbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
MS5vcGVuLm9uc3VjY2VzcyIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5v
cGVuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9wZW4ub25zdWNjZXNz
IiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24iLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIub252ZXJzaW9uY2hhbmdlIiwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24ub25ibG9ja2VkIiwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLmNsb3NlIiwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24ub25zdWNjZXNzIiwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUi
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7DQorICAgICAg
ICB0ZXN0MigpOw0KKyAgICB9DQorfQ0KKw0KK2Z1bmN0aW9uIHRlc3QyKCkgew0KKyAgICBkZWJ1
ZygiIik7DQorICAgIGRlYnVnKCJURVNUOiBzZXRWZXJzaW9uIG5vdCBibG9ja2VkIGlmIGhhbmRs
ZSBjbG9zZWQgaW1tZWRpYXRlbHkiKTsNCisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9
ICd0ZXN0Mic7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOw0KKyAgICB2YXIg
aDEgPSBuZXcgQ29ubmVjdGlvbigiaDEiKTsNCisgICAgdmFyIGgyID0gbmV3IENvbm5lY3Rpb24o
ImgyIik7DQorICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaDEub3Blbih7b25zdWNj
ZXNzOiBkb05leHR9KTsgfSwNCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMi5v
cGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgew0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgIGgyIGNsb3NpbmcgaW1tZWRpYXRl
bHkiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIu
Y2xvc2UoKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk7
IH0sDQorICAgICAgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgaDEuc2V0VmVyc2lvbih7b25z
dWNjZXNzOiBkb05leHR9KTsgfSwNCisgICAgICAgICAgICAgIGZpbmlzaFRlc3QNCisgICAgICAg
ICAgICAgIF0pOw0KKw0KKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgew0KKyAgICAgICAgZGVi
dWcoIk5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24ub25ibG9j
a2VkIHN0ZXA7IHRoZXJlJ3MgYSBGSVhNRSIpOw0KKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWyJoMS5vcGVuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLm9w
ZW4ub25zdWNjZXNzIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9wZW4i
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIub3Blbi5vbnN1Y2Nlc3MiLA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbiIsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vbnZlcnNpb25jaGFuZ2UiLA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaDIuY2xvc2UiLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSINCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsNCisgICAgICAgIHRlc3Qz
KCk7DQorICAgIH0NCit9DQorDQorZnVuY3Rpb24gdGVzdDMoKSB7DQorICAgIGRlYnVnKCIiKTsN
CisgICAgZGVidWcoIlRFU1Q6IG9wZW4gYW5kIHNldFZlcnNpb24gYmxvY2tlZCBpZiBhIFZFUlNJ
T05fQ0hBTkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgLSBjbG9zZSB3aGVuIGJsb2NrZWQiKTsN
CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0Myc7IHdpbmRvdy52ZXIgPSAx
OyB3aW5kb3cuc3RlcHMgPSBbXSIpOw0KKyAgICB2YXIgaDEgPSBuZXcgQ29ubmVjdGlvbigiaDEi
KTsNCisgICAgdmFyIGgyID0gbmV3IENvbm5lY3Rpb24oImgyIik7DQorICAgIHZhciBoMyA9IG5l
dyBDb25uZWN0aW9uKCJoMyIpOw0KKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgx
Lm9wZW4oe29uc3VjY2VzczogZG9OZXh0fSk7IH0sDQorICAgICAgICAgICAgICBmdW5jdGlvbihk
b05leHQpIHsgaDIub3Blbih7b25zdWNjZXNzOiBkb05leHR9KTsgfSwNCisgICAgICAgICAgICAg
IGZ1bmN0aW9uKGRvTmV4dCkgeyBoMS5zZXRWZXJzaW9uKCk7IGRvTmV4dCgpOyB9LA0KKyAgICAg
ICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgyLnNldFZlcnNpb24oew0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uYmxvY2tlZDogZnVuY3Rp
b24oKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlYnVnKCIgICAgaDIgYmxvY2tlZCBzbyBjbG9zaW5nIik7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyLmNsb3NlKCk7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
TmV4dCgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH19KTsgfSwNCisgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyBoMy5vcGVuKHtvbnN1Y2Nl
c3M6IGZpbmlzaFRlc3R9KTt9DQorICAgICAgICAgICAgICBdKTsNCisNCisgICAgZnVuY3Rpb24g
ZmluaXNoVGVzdCgpIHsNCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0
ZXBzLnRvU3RyaW5nKCkiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaDEub3Bl
biIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5vcGVuLm9uc3VjY2VzcyIs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vcGVuIiwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImgyLm9wZW4ub25zdWNjZXNzIiwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24iLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaDIuc2V0VmVyc2lvbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoMi5vbnZlcnNpb25jaGFuZ2UiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaDEub252ZXJzaW9uY2hhbmdlIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImgyLnNldFZlcnNpb24ub25ibG9ja2VkIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImgyLmNsb3NlIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgzLm9w
ZW4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIuc2V0VmVyc2lvbi5vbmVy
cm9yIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24ub25z
dWNjZXNzIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24u
dHJhbnNhY3Rpb24tY29tcGxldGUiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aDMub3Blbi5vbnN1Y2Nlc3MiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9T
dHJpbmcoKSk7DQorICAgICAgICB0ZXN0NCgpOw0KKyAgICB9DQorfQ0KKw0KK2Z1bmN0aW9uIHRl
c3Q0KCkgew0KKyAgICBkZWJ1ZygiIik7DQorICAgIGRlYnVnKCJURVNUOiBvcGVuIGFuZCBzZXRW
ZXJzaW9uIGJsb2NrZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5uaW5n
IC0ganVzdCBjbG9zZSIpOw0KKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q0
Jzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdIik7DQorICAgIHZhciBoMSA9IG5l
dyBDb25uZWN0aW9uKCJoMSIpOw0KKyAgICB2YXIgaDIgPSBuZXcgQ29ubmVjdGlvbigiaDIiKTsN
CisgICAgdmFyIGgzID0gbmV3IENvbm5lY3Rpb24oImgzIik7DQorICAgIHJ1blN0ZXBzKFtmdW5j
dGlvbihkb05leHQpIHsgaDEub3Blbih7b25zdWNjZXNzOiBkb05leHR9KTsgfSwNCisgICAgICAg
ICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMi5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dH0pOyB9
LA0KKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgxLnNldFZlcnNpb24oKTsgZG9O
ZXh0KCk7IH0sDQorICAgICAgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgaDMub3Blbih7b25z
dWNjZXNzOiBmaW5pc2hUZXN0fSk7IGRvTmV4dCgpOyB9LA0KKyAgICAgICAgICAgICAgZnVuY3Rp
b24oZG9OZXh0KSB7IGgyLmNsb3NlKCk7IH0sDQorICAgICAgICAgICAgICBdKTsNCisNCisgICAg
ZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsNCisgICAgICAgIGRlYnVnKCJOT1RFOiBXaWxsIEZBSUwg
d2l0aCBleHRyYSBib2d1cyBoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCBzdGVwOyB0aGVyZSdzIGEg
RklYTUUiKTsNCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRv
U3RyaW5nKCkiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaDEub3BlbiIsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5vcGVuLm9uc3VjY2VzcyIsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vcGVuIiwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImgyLm9wZW4ub25zdWNjZXNzIiwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImgxLnNldFZlcnNpb24iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaDMub3BlbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5jbG9z
ZSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLm9uc3Vj
Y2VzcyIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLnRy
YW5zYWN0aW9uLWNvbXBsZXRlIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgz
Lm9wZW4ub25zdWNjZXNzIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3Ry
aW5nKCkpOw0KKyAgICAgICAgdGVzdDUoKTsNCisgICAgfQ0KK30NCisNCitmdW5jdGlvbiB0ZXN0
NSgpIHsNCisgICAgZGVidWcoIiIpOw0KKyAgICBkZWJ1ZygiVEVTVDogb3BlbiBibG9ja2VkIGlm
IGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVubmluZyIpOw0KKyAgICBldmFsQW5k
TG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q1Jzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVw
cyA9IFtdIik7DQorICAgIHZhciBoMSA9IG5ldyBDb25uZWN0aW9uKCJoMSIpOw0KKyAgICB2YXIg
aDIgPSBuZXcgQ29ubmVjdGlvbigiaDIiKTsNCisNCisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRv
TmV4dCkgeyBoMS5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dH0pOyB9LA0KKyAgICAgICAgICAgICAg
ZnVuY3Rpb24oZG9OZXh0KSB7IGgxLnNldFZlcnNpb24oKTsgZG9OZXh0KCk7IH0sDQorICAgICAg
ICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgaDIub3Blbih7b25zdWNjZXNzOiBmaW5pc2hUZXN0
fSk7IH0NCisgICAgICAgICAgICAgIF0pOw0KKw0KKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkg
ew0KKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmco
KSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoMS5vcGVuIiwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImgxLm9wZW4ub25zdWNjZXNzIiwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24iLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaDIub3BlbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlIiwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImgyLm9wZW4ub25zdWNjZXNzIg0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBdLnRvU3RyaW5nKCkpOw0KKyAgICAgICAgdGVzdDYoKTsNCisgICAgfQ0K
K30NCisNCisNCitmdW5jdGlvbiB0ZXN0NigpIHsNCisgICAgZGVidWcoIiIpOw0KKyAgICBkZWJ1
ZygiVEVTVDogdHdvIHNldFZlcnNpb25zIGZyb20gdGhlIHNhbWUgY29ubmVjdGlvbiIpOw0KKyAg
ICBldmFsQW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q2Jzsgd2luZG93LnZlciA9IDE7IHdp
bmRvdy5zdGVwcyA9IFtdIik7DQorICAgIHZhciBoMSA9IG5ldyBDb25uZWN0aW9uKCJoMSIpOw0K
Kw0KKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgxLm9wZW4oe29uc3VjY2Vzczog
ZG9OZXh0fSk7IH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAg
ICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgxLnNldFZlcnNpb24oe29uc3VjY2VzczogaGFsZkRv
bmV9KTsgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEuc2V0VmVyc2lvbih7
b25zdWNjZXNzOiBoYWxmRG9uZX0pOyB9DQorICAgICAgICAgICAgICBdKTsNCisNCisgICAgdmFy
IGNvdW50ZXIgPSAwOw0KKyAgICBmdW5jdGlvbiBoYWxmRG9uZSgpIHsNCisgICAgICAgIGNvdW50
ZXIrKzsNCisgICAgICAgIGlmIChjb3VudGVyIDwgMikgew0KKyAgICAgICAgICAgIGRlYnVnKCdo
YWxmIGRvbmUnKTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgZmluaXNoVGVzdCgp
Ow0KKyAgICAgICAgfQ0KKyAgICB9ICANCisNCisgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsN
CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCki
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaDEub3BlbiIsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJoMS5vcGVuLm9uc3VjY2VzcyIsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uIiwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImgxLnNldFZlcnNpb24iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MiLA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSIsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyIsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBs
ZXRlIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCkpOw0KKyAg
ICAgICAgdGVzdDcoKTsNCisgICAgfQ0KK30NCisNCitmdW5jdGlvbiB0ZXN0NygpIHsNCisgICAg
ZG9uZSgpOw0KK30NCisNCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsNCisNCit0ZXN0
KCk7DQorDQorPC9zY3JpcHQ+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R3by12ZXJzaW9uLWNoYW5nZXMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyNzczNGIxNGQzYjZhYjVlYzAwY2FhMGIxOThhMzBkYTJj
M2ExMmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90
d28tdmVyc2lvbi1jaGFuZ2VzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQwIEBACitUZXN0IGJl
aGF2aW9yIHdoZW4gdGhlIHNhbWUgY29ubmVjdGlvbiBjYWxscyBzZXRWZXJzaW9uIHR3aWNlCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhl
ZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsKK0lE
QlRyYW5zYWN0aW9uID0gd2luZG93LklEQlRyYW5zYWN0aW9uIHx8IHdpbmRvdy53ZWJraXRJREJU
cmFuc2FjdGlvbiB8fCB3aW5kb3cubW96SURCVHJhbnNhY3Rpb247CitQQVNTIGluZGV4ZWREQiA9
PSBudWxsIGlzIGZhbHNlCitQQVNTIElEQlRyYW5zYWN0aW9uID09IG51bGwgaXMgZmFsc2UKK3dp
bmRvdy5zdGF0ZSA9ICdzdGFydGluZycKK2luZGV4ZWREQi5vcGVuKCd0d28tdmVyc2lvbnMtb25l
LWNvbm5lY3Rpb24nKQorZGIgPSBldmVudC50YXJnZXQucmVzdWx0Cit3aW5kb3cuc3RhdGUgPSAw
CitkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEnKQorZGIuc2V0VmVyc2lvbigndmVyc2lvbiAyJykK
K3NldFZlcnNpb24oKSAjMSBjYWxsYmFjaword2luZG93LnN0b3JlMSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCd0ZXN0LXN0b3JlMScpCitQQVNTICsrd2luZG93LnN0YXRlIGlzIDEKK3dpbmRvdy5z
dG9yZTEucHV0KCdhYWEnLCAxMTEpCitQQVNTICsrd2luZG93LnN0YXRlIGlzIDIKK1BBU1MgKyt3
aW5kb3cuc3RhdGUgaXMgMworaGFsZndheSB0aGVyZS4uLgorc2V0VmVyc2lvbigpICMyIGNhbGxi
YWNrCitQQVNTICsrd2luZG93LnN0YXRlIGlzIDQKK3dpbmRvdy5zdG9yZTIgPSBkYi5jcmVhdGVP
YmplY3RTdG9yZSgndGVzdC1zdG9yZTInKQord2luZG93LnN0b3JlMi5wdXQoJ2JiYicsIDIyMikK
K1BBU1MgKyt3aW5kb3cuc3RhdGUgaXMgNQorUEFTUyArK3dpbmRvdy5zdGF0ZSBpcyA2CitQQVNT
IHdpbmRvdy5kYi52ZXJzaW9uIGlzICJ2ZXJzaW9uIDIiCit3aW5kb3cudHJhbnMgPSBkYi50cmFu
c2FjdGlvbihbJ3Rlc3Qtc3RvcmUxJywgJ3Rlc3Qtc3RvcmUyJ10pCit3aW5kb3cuc3RvcmUgPSB3
aW5kb3cudHJhbnMub2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUxJykKK3dpbmRvdy5yZXEgPSB3aW5k
b3cuc3RvcmUuZ2V0KDExMSkKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAiYWFhIgord2lu
ZG93LnN0b3JlID0gd2luZG93LnRyYW5zLm9iamVjdFN0b3JlKCd0ZXN0LXN0b3JlMicpCit3aW5k
b3cucmVxID0gd2luZG93LnN0b3JlLmdldCgyMjIpCitQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQg
aXMgImJiYiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lv
bi1jaGFuZ2VzLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lv
bi1jaGFuZ2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTZmNTNjOWEyOWFiZTNhZGNhMjNkYzU1MjAyYzFk
ZGM0OTFjZGRlYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL3R3by12ZXJzaW9uLWNoYW5nZXMuaHRtbApAQCAtMCwwICsxLDExNiBAQAorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4K
KworZGVzY3JpcHRpb24oIlRlc3QgYmVoYXZpb3Igd2hlbiB0aGUgc2FtZSBjb25uZWN0aW9uIGNh
bGxzIHNldFZlcnNpb24gdHdpY2UiKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCisKK2Z1bmN0aW9u
IHRlc3QoKSB7CisgICAgaW5kZXhlZERCID0gZXZhbEFuZExvZygiaW5kZXhlZERCID0gd2luZG93
LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVk
REI7Iik7CisgICAgSURCVHJhbnNhY3Rpb24gPSBldmFsQW5kTG9nKCJJREJUcmFuc2FjdGlvbiA9
IHdpbmRvdy5JREJUcmFuc2FjdGlvbiB8fCB3aW5kb3cud2Via2l0SURCVHJhbnNhY3Rpb24gfHwg
d2luZG93Lm1veklEQlRyYW5zYWN0aW9uOyIpOworCisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhl
ZERCID09IG51bGwiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJJREJUcmFuc2FjdGlvbiA9PSBudWxs
Iik7CisgICAgb3BlbkRCQ29ubmVjdGlvbigpOworfQorCitmdW5jdGlvbiBvcGVuREJDb25uZWN0
aW9uKCkKK3sKKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuc3RhdGUgPSAnc3RhcnRpbmcnIik7Cisg
ICAgdmFyIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3BlbigndHdvLXZlcnNpb25z
LW9uZS1jb25uZWN0aW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNz
OworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitm
dW5jdGlvbiBvcGVuU3VjY2VzcygpCit7CisgICAgd2luZG93LmRiID0gZXZhbEFuZExvZygiZGIg
PSBldmVudC50YXJnZXQucmVzdWx0Iik7CisgICAgZXZhbEFuZExvZygid2luZG93LnN0YXRlID0g
MCIpOworCisgICAgdmFyIHZlcnNpb25DaGFuZ2VSZXF1ZXN0MSA9IGV2YWxBbmRMb2coImRiLnNl
dFZlcnNpb24oJ3ZlcnNpb24gMScpIik7CisgICAgdmVyc2lvbkNoYW5nZVJlcXVlc3QxLm9uZXJy
b3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB2ZXJzaW9uQ2hhbmdlUmVxdWVzdDEu
b25zdWNjZXNzID0gaW5TZXRWZXJzaW9uMTsKKworICAgIC8vIGFuZCBjb25jdXJyZW50bHkuLi4K
KworICAgIHZhciB2ZXJzaW9uQ2hhbmdlUmVxdWVzdDIgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJz
aW9uKCd2ZXJzaW9uIDInKSIpOworICAgIHZlcnNpb25DaGFuZ2VSZXF1ZXN0Mi5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgdmVyc2lvbkNoYW5nZVJlcXVlc3QyLm9uc3Vj
Y2VzcyA9IGluU2V0VmVyc2lvbjI7Cit9CisKK2Z1bmN0aW9uIGluU2V0VmVyc2lvbjEoKQorewor
ICAgIGRlYnVnKCJzZXRWZXJzaW9uKCkgIzEgY2FsbGJhY2siKTsKKyAgICBldmFsQW5kTG9nKCJ3
aW5kb3cuc3RvcmUxID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUxJykiKTsKKyAg
ICBzaG91bGRCZSgiKyt3aW5kb3cuc3RhdGUiLCAiMSIpOworICAgIHZhciByZXEgPSBldmFsQW5k
TG9nKCJ3aW5kb3cuc3RvcmUxLnB1dCgnYWFhJywgMTExKSIpOworICAgIHJlcS5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChl
KSB7CisgICAgICAgIHNob3VsZEJlKCIrK3dpbmRvdy5zdGF0ZSIsICIyIik7CisgICAgICAgIGhh
bGZ3YXlEb25lKCk7CisgICAgfTsKK30KKworZnVuY3Rpb24gaW5TZXRWZXJzaW9uMigpCit7Cisg
ICAgZGVidWcoInNldFZlcnNpb24oKSAjMiBjYWxsYmFjayIpOworICAgIHNob3VsZEJlKCIrK3dp
bmRvdy5zdGF0ZSIsICI0Iik7CisgICAgZXZhbEFuZExvZygid2luZG93LnN0b3JlMiA9IGRiLmNy
ZWF0ZU9iamVjdFN0b3JlKCd0ZXN0LXN0b3JlMicpIik7CisKKyAgICB2YXIgcmVxID0gZXZhbEFu
ZExvZygid2luZG93LnN0b3JlMi5wdXQoJ2JiYicsIDIyMikiKTsKKyAgICByZXEub25lcnJvciA9
IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAo
ZSkgeworICAgICAgICBzaG91bGRCZSgiKyt3aW5kb3cuc3RhdGUiLCAiNSIpOworICAgICAgICBo
YWxmd2F5RG9uZSgpOworICAgIH07Cit9CisKK3ZhciBjb3VudGVyID0gMDsKK2Z1bmN0aW9uIGhh
bGZ3YXlEb25lKCkgCit7CisgICAgY291bnRlciArPSAxOworICAgIGlmIChjb3VudGVyIDwgMikg
eworICAgICAgICBzaG91bGRCZSgiKyt3aW5kb3cuc3RhdGUiLCAiMyIpOworICAgICAgICBkZWJ1
ZygiaGFsZndheSB0aGVyZS4uLiIgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzaG91bGRCZSgi
Kyt3aW5kb3cuc3RhdGUiLCAiNiIpOworICAgICAgICBjaGVja1Jlc3VsdHMoKTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIGNoZWNrUmVzdWx0cygpIHsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
IndpbmRvdy5kYi52ZXJzaW9uIiwgInZlcnNpb24gMiIpOworICAgIHRyYW5zID0gZXZhbEFuZExv
Zygid2luZG93LnRyYW5zID0gZGIudHJhbnNhY3Rpb24oWyd0ZXN0LXN0b3JlMScsICd0ZXN0LXN0
b3JlMiddKSIpOworICAgIHN0b3JlID0gZXZhbEFuZExvZygid2luZG93LnN0b3JlID0gd2luZG93
LnRyYW5zLm9iamVjdFN0b3JlKCd0ZXN0LXN0b3JlMScpIik7CisgICAgcmVxID0gZXZhbEFuZExv
Zygid2luZG93LnJlcSA9IHdpbmRvdy5zdG9yZS5nZXQoMTExKSIpOworICAgIHJlcS5vbmVycm9y
ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9u
IChlKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXZlbnQudGFyZ2V0LnJlc3Vs
dCIsICJhYWEiKTsKKworICAgICAgICBzdG9yZSA9IGV2YWxBbmRMb2coIndpbmRvdy5zdG9yZSA9
IHdpbmRvdy50cmFucy5vYmplY3RTdG9yZSgndGVzdC1zdG9yZTInKSIpOworICAgICAgICByZXEg
PSBldmFsQW5kTG9nKCJ3aW5kb3cucmVxID0gd2luZG93LnN0b3JlLmdldCgyMjIpIik7CisgICAg
ICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJldmVudC50YXJnZXQucmVzdWx0IiwgImJiYiIpOworICAgICAgICAgICAgZG9uZSgpOyAg
ICAKKyAgICAgICAgfTsKKyAgICB9OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5n
ZS1leGNsdXNpdmUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4OWU2N2I2ZjkwZWIwZDIxNjEx
ZTdhZWZiZmIxZDFmNTA4NzQzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsNDYgQEAKK0Vuc3VyZSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBkb2Vzbid0IHJ1
biBjb25jdXJyZW50bHkgd2l0aCBvdGhlciB0cmFuc2FjdGlvbnMKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK2luZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93Lndl
YmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0g
bnVsbCBpcyBmYWxzZQord2luZG93LnN0YXRlID0gJ3N0YXJ0aW5nJworaW5kZXhlZERCLm9wZW4o
J3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZScpCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2Nh
bGxpbmcgc2V0VmVyc2lvbigpIC0gY2FsbGJhY2sgc2hvdWxkIHJ1biBpbW1lZGlhdGVseQorZGIu
c2V0VmVyc2lvbigndmVyc2lvbiAxJykKK2NhbGxpbmcgb3BlbigpIC0gY2FsbGJhY2sgc2hvdWxk
IHdhaXQgdW50aWwgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUKK2luZGV4
ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUnKQorc2V0VmVyc2lvbigpIGNhbGxi
YWNrCitzdGFydGluZyB3b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uCit3aW5kb3cu
c3RhdGUgPSAnVkVSU0lPTl9DSEFOR0Ugc3RhcnRlZCcKK3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ3Rlc3Qtc3RvcmUnKQorc3RvcmUucHV0KDAsIDApCitpbiBwdXQncyBvbnN1Y2Nlc3MK
K3N0b3JlLnB1dCgxLCAxKQoraW4gcHV0J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoMiwgMikKK2lu
IHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDMsIDMpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0
b3JlLnB1dCg0LCA0KQoraW4gcHV0J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoNSwgNSkKK2luIHB1
dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDYsIDYpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3Jl
LnB1dCg3LCA3KQoraW4gcHV0J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoOCwgOCkKK2luIHB1dCdz
IG9uc3VjY2Vzcworc3RvcmUucHV0KDksIDkpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK2VuZGluZyB3
b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lP
Tl9DSEFOR0UgZmluaXNoZWQnCitvcGVuKCkgY2FsbGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIg
YWZ0ZXIgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gZW5kcworUEFTUyB3aW5kb3cuc3RhdGUg
aXMgIlZFUlNJT05fQ0hBTkdFIGZpbmlzaGVkIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTVlZDBhMzk0ZDk3ZTgzNzBiMDBkNmYzYmJjNzRmZDQ5MzBlZDQ4ZgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2
ZS5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJFbnN1cmUg
VkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gZG9lc24ndCBydW4gY29uY3VycmVudGx5IHdpdGgg
b3RoZXIgdHJhbnNhY3Rpb25zIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworCitmdW5jdGlvbiB0
ZXN0KCkgeworICAgIGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5p
bmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERC
OyIpOworICAgIHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7CisgICAgb3BlbkRC
Q29ubmVjdGlvbigpOworfQorCitmdW5jdGlvbiBvcGVuREJDb25uZWN0aW9uKCkKK3sKKyAgICBl
dmFsQW5kTG9nKCJ3aW5kb3cuc3RhdGUgPSAnc3RhcnRpbmcnIik7CisgICAgcmVxdWVzdCA9IGV2
YWxBbmRMb2coImluZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUnKSIpOwor
ICAgIHJlcXVlc3Qub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9y
ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkK
K3sKKyAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQi
KTsKKworICAgIGRlYnVnKCJjYWxsaW5nIHNldFZlcnNpb24oKSAtIGNhbGxiYWNrIHNob3VsZCBy
dW4gaW1tZWRpYXRlbHkiKTsKKyAgICB2YXIgdmVyc2lvbkNoYW5nZVJlcXVlc3QgPSBldmFsQW5k
TG9nKCJkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEnKSIpOworICAgIHZlcnNpb25DaGFuZ2VSZXF1
ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB2ZXJzaW9uQ2hhbmdl
UmVxdWVzdC5vbnN1Y2Nlc3MgPSBpblNldFZlcnNpb247CisKKyAgICAvLyBhbmQgY29uY3VycmVu
dGx5Li4uCisKKyAgICBkZWJ1ZygiY2FsbGluZyBvcGVuKCkgLSBjYWxsYmFjayBzaG91bGQgd2Fp
dCB1bnRpbCBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZSIpOworICAgIHZh
ciBvcGVuUmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5n
ZS1leGNsdXNpdmUnKSIpOworICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5BZ2FpblN1
Y2Nlc3M7CisgICAgb3BlblJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OworfQorCitmdW5jdGlvbiBpblNldFZlcnNpb24oKQoreworICAgIGRlYnVnKCJzZXRWZXJzaW9u
KCkgY2FsbGJhY2siKTsKKyAgICBkZWJ1Zygic3RhcnRpbmcgd29yayBpbiBWRVJTSU9OX0NIQU5H
RSB0cmFuc2FjdGlvbiIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5zdGF0ZSA9ICdWRVJTSU9O
X0NIQU5HRSBzdGFydGVkJyIpOworCisgICAgd2luZG93LnN0b3JlID0gZXZhbEFuZExvZygic3Rv
cmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdC1zdG9yZScpIik7CisgICAgd2luZG93LmNv
dW50ID0gMDsKKyAgICBkb19hc3luY19wdXRzKCk7CisKKyAgICBmdW5jdGlvbiBkb19hc3luY19w
dXRzKCkgeworICAgICAgICB2YXIgcmVxID0gZXZhbEFuZExvZygic3RvcmUucHV0KCIgKyBjb3Vu
dCArICIsICIgKyBjb3VudCArICIpIik7CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgewor
ICAgICAgICAgICAgZGVidWcoImluIHB1dCdzIG9uc3VjY2VzcyIpOworICAgICAgICAgICAgaWYg
KCsrd2luZG93LmNvdW50IDwgMTApIHsKKyAgICAgICAgICAgICAgICBkb19hc3luY19wdXRzKCk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlYnVnKCJlbmRpbmcgd29y
ayBpbiBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiIpOworICAgICAgICAgICAgICAgIGV2YWxB
bmRMb2coIndpbmRvdy5zdGF0ZSA9ICdWRVJTSU9OX0NIQU5HRSBmaW5pc2hlZCciKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIG9wZW5BZ2FpblN1Y2Nl
c3MoKQoreworICAgIGRlYnVnKCJvcGVuKCkgY2FsbGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIg
YWZ0ZXIgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gZW5kcyIpOworICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygid2luZG93LnN0YXRlIiwgIlZFUlNJT05fQ0hBTkdFIGZpbmlzaGVkIik7Cisg
ICAgZG9uZSgpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwordGVzdCgp
OworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiZWY4ODZiMjA3
Njg5YzAwNzg0ZGU4ZWIyZjdlZTFhYjA0NzRhZDRlLi5mMGJkMDI0YzU5OWJiZTM2ZjhmMDRlYjEx
MTU2ZTA1ODkzYzU4ODYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMTAtMTIg
IEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZh
Y3Rvcnkub3BlbiB3YWl0IGZvciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNv
bXBsZXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
OTMwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3RzOiBzdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24uaHRtbAorICAgICAgICAg
ICAgICAgc3RvcmFnZS9pbmRleGVkZGIvdHdvLXZlcnNpb24tY2hhbmdlcy5odG1sCisgICAgICAg
ICAgICAgICBzdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUuaHRtbAor
CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVu
Q2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OlBlbmRpbmdPcGVuQ2FsbDo6UGVuZGluZ09wZW5DYWxsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFydGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxs
cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbG9zZSk6
CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAgICog
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
RmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6Y29tbWl0KToKKwogMjAxMS0xMC0xMiAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgU3VwcG9ydCBwYXNzaW5nIG9wdGlvbmFsIGZpbGVuYW1lIHdoZW4gRm9ybURh
dGEuYXBwZW5kKCkgaXMgdXNlZCB0bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggOGZlOTcxYTI3YzkxMTI0NzU5Y2ZmMzIwM2Rl
OGRjZDg1NDVmNjg2ZC4uZjlhMzgzOGQ4OTIyYWNhYzcyZTIzOTk2NTFhN2ZlYWRlMDU3YTVmYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwCkBAIC0zOSw2ICszOSwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVk
PFBlbmRpbmdPcGVuQ2FsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRp
bmdPcGVuQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBlbmRpbmdPcGVuQ2FsbChjYWxsYmFj
a3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsg
cmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6CisgICAgUGVuZGluZ09wZW5DYWxsKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFja3Mo
Y2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxs
YmFja3M7Cit9OworCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nU2V0VmVy
c2lvbkNhbGwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQpA
QCAtMTc0LDEyICsxOTAsMTkgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJz
aW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICAgICAgaWYg
KCppdCAhPSBkYXRhYmFzZUNhbGxiYWNrcykKICAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25D
aGFuZ2UodmVyc2lvbik7CiAgICAgfQorICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2Vk
IGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQorICAgIC8vIFZlcnNpb25D
aGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KICAgICBp
ZiAobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5zaXplKCkgPiAxKSB7CiAgICAgICAgIGNhbGxiYWNr
cy0+b25CbG9ja2VkKCk7CiAgICAgICAgIFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHBl
bmRpbmdTZXRWZXJzaW9uQ2FsbCA9IFBlbmRpbmdTZXRWZXJzaW9uQ2FsbDo6Y3JlYXRlKHZlcnNp
b24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpOwogICAgICAgICBtX3BlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHMuYXBwZW5kKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgewor
ICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNh
bGwgPSBQZW5kaW5nU2V0VmVyc2lvbkNhbGw6OmNyZWF0ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRh
dGFiYXNlQ2FsbGJhY2tzKTsKKyAgICAgICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmFwcGVu
ZChwZW5kaW5nU2V0VmVyc2lvbkNhbGwpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAg
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0Ojpj
cmVhdGUoKTsKICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0
aGlzOwpAQCAtMjAzLDYgKzIyNiw0MyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNl
dFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZgogICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKHRyYW5zYWN0aW9uKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHBycFRyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CisgICAg
aWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdF
KSB7CisgICAgICAgIEFTU0VSVCghbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsK
KyAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247
CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmlu
aXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHBycFRyYW5z
YWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
PT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKSB7CisgICAgICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi5nZXQoKSA9PSBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkp
OworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAg
ICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKK3sKKyAgICAvLyBQZW5kaW5nIGNh
bGxzIG1heSBiZSByZXF1ZXVlZCBvciBhYm9ydGVkCisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbD4gPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGxzOworICAgIG1fcGVuZGluZ1Nl
dFZlcnNpb25DYWxscy5zd2FwKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbHMpOworICAgIHdoaWxlICgh
cGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbCA9IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbHMudGFrZUZpcnN0KCk7CisgICAg
ICAgIHNldFZlcnNpb24ocGVuZGluZ1NldFZlcnNpb25DYWxsLT52ZXJzaW9uKCksIHBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+ZGF0YWJh
c2VDYWxsYmFja3MoKSwgZWMpOworICAgICAgICBBU1NFUlQoIWVjKTsKKyAgICB9CisKKyAgICB3
aGlsZSAoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiAmJiBtX3BlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHMuaXNFbXB0eSgpICYmICFtX3BlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7
CisgICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCA9IG1fcGVu
ZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgb3BlbkNvbm5lY3Rpb24ocGVuZGlu
Z09wZW5DYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorfQorCiBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rp
b24oRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
dG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CkBAIC0yMjEsNiArMjgxLDE0IEBAIHZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCiAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPihjYWxsYmFja3MpKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQoreworICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVu
ZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIG1fcGVuZGluZ09wZW5DYWxs
cy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKK30KKwogdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MpCiB7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3Mg
PSBwcnBDYWxsYmFja3M7CkBAIC0yMjksMTIgKzI5Nyw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzCiAgICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpID4gMSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgd2hpbGUgKCFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8UGVuZGlu
Z1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBtX3BlbmRpbmdTZXRWZXJz
aW9uQ2FsbHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIHNldFZlcnNpb24ocGVuZGluZ1NldFZlcnNp
b25DYWxsLT52ZXJzaW9uKCksIHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+Y2FsbGJhY2tzKCksIHBl
bmRpbmdTZXRWZXJzaW9uQ2FsbC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgZWMpOwotICAgICAgICBB
U1NFUlQoIWVjKTsKLSAgICB9CisgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwogfQogCiB2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAppbmRleCBmNzc5MTI1MGQ5
MThhYTE5ODQ0MTU5YjI5N2IyNTNiM2JlNjQ4ZWZlLi40NjFiOGI5NmY4MGYwNWZiMGU1MmY4MmIx
OWM2Zjk4M2NlZDU3NGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaApAQCAtNTQsNyArNTQsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKICAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZDsgfQorCisgICAgLy8gRklYTUU6IHJlbmFtZSAib3BlbiIgdG8gc29tZXRoaW5n
IG1vcmUgZGVzY3JpcHRpdmUsIGxpa2UgcmVnaXN0ZXJGcm9udEVuZENhbGxiYWNrcwogICAgIHZv
aWQgb3BlbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7CisgICAgdm9pZCBvcGVu
Q29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogCiAgICAgdmlydHVhbCBTdHJp
bmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIHZl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KQEAgLTY4LDExICs3MSwxNCBAQCBw
dWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CisgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB2b2lkIHRyYW5z
YWN0aW9uRmluaXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
KTsKIAogcHJpdmF0ZToKICAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ciosIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmll
cik7CiAKICAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMoKTsKKyAgICB2b2lkIHByb2Nlc3NQZW5k
aW5nQ2FsbHMoKTsKIAogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlT2Jq
ZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKQEAgLTk2LDEw
ICsxMDIsMTQgQEAgcHJpdmF0ZToKICAgICBPYmplY3RTdG9yZU1hcCBtX29iamVjdFN0b3JlczsK
IAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3I7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9y
dW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOwogCiAgICAgY2xhc3MgUGVuZGluZ1NldFZl
cnNpb25DYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+ID4gbV9w
ZW5kaW5nU2V0VmVyc2lvbkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOworICAg
IERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOworCiAg
ICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0
YWJhc2VDYWxsYmFja3NTZXQ7CiAgICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNh
bGxiYWNrc1NldDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAKaW5kZXggNTFjNTBjNDU5MDI4NDQzYjc2NmY2OTAyNzlmY2IwMGJmNDNk
Zjk3ZS4uNGM4YjkwYjZhM2QzZTJmNWI1Njc5NzM1NDU2ZjFkMDBiMTllZDAwZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMTA5
LDcgKzEwOSw5IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhCiAKICAgICBJREJEYXRhYmFzZUJh
Y2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJ
ZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsK
LSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoaXQtPnNlY29uZCk7CisgICAgICAgIC8vIElm
IGl0J3MgYWxyZWFkeSBiZWVuIG9wZW5lZCwgd2UgaGF2ZSB0byB3YWl0IGZvciBhbnkgcGVuZGlu
ZworICAgICAgICAvLyBzZXRWZXJzaW9uIGNhbGxzIHRvIGNvbXBsZXRlLgorICAgICAgICBpdC0+
c2Vjb25kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmNwcAppbmRleCAxNTZjYjg5YTlmYjA5ZGE1MDRmNDVhOTc4ZTAyNzNlYTNhNmE1NjRh
Li4wMTVkYTE4ZDY5YTgyOGM1NTcxNzlhMGZjMWFmMGMxMjkzMzYyYmVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAg
LTEzMSw2ICsxMzEsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KCkK
ICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydCgpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CiAgICAgQVNTRVJUKCFt
X2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMpKTsKKyAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwogICAgIG1fZGF0YWJhc2Ug
PSAwOwogfQogCkBAIC0xNzEsNiArMTcyLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpzdGFydCgpCiAKICAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOwogICAgIG1fZGF0YWJh
c2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0aGlzKTsK
KyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7CiB9CiAKIHZvaWQgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKQEAgLTE4Niw2ICsxODgsNyBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCiAgICAgbV90cmFuc2FjdGlvbi0+
Y29tbWl0KCk7CiAgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUoKTsKICAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwor
ICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CiAgICAgbV9kYXRhYmFz
ZSA9IDA7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110900</attachid>
            <date>2011-10-13 13:55:56 -0700</date>
            <delta_ts>2011-10-13 14:36:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69307-20111013135555.patch</filename>
            <type>text/plain</type>
            <size>40588</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0Njc3YTYzMjRjNWU1NDc5NjhlNGE4
NDY4ZTY2ODJhMmQzMmVmNzNjLi4yZjVlNDA5NTIyMTRjMmFjOTE0NjMxZDcxZGNmNmQxYjE2YmM3
OGI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTAtMTMgIEpvc2h1YSBCZWxsICA8anNi
ZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZv
ciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNvbWUgdGVzdHMgbWFya2VkIEZB
SUwgZHVlIHRvIGNyYnVnLmNvbS8xMDAxMjMKKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRi
L29wZW4tY2xvc2UtdmVyc2lvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBz
dG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvdHdvLXZlcnNpb24tY2hhbmdlcy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNp
dmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi92ZXJz
aW9uLWNoYW5nZS1leGNsdXNpdmUuaHRtbDogQWRkZWQuCisKIDIwMTEtMTAtMTMgIEtlbnQgVGFt
dXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gRml4IGVycm9y
cyBpbiB0ZXN0X2V4cGVjdGF0aW9ucy50eHQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNzI4YTI5ZDEzMWJlOGMzZDExNGVhZTE2YmUyZmQ5YzI0ZGMwZTBjCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJz
aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwMyBAQAorVGVzdCBpbnRlcmxlYXZlZCBvcGVu
L2Nsb3NlL3NldFZlcnNpb24gY2FsbHMgaW4gdmFyaW91cyBwZXJtdXRhdGlvbnMKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwg
d2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBpbmRl
eGVkREIgPT0gbnVsbCBpcyBmYWxzZQorCitURVNUOiBzZXRWZXJzaW9uIGJsb2NrZWQgb24gb3Bl
biBoYW5kbGVzCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QxJzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaDEub3BlbicKKydoMS5vcGVuLm9uc3VjY2VzcycKKydoMi5vcGVuJwor
J2gyLm9wZW4ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24nCisnaDIub252ZXJzaW9uY2hhbmdl
JworICAgIGgyIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkKKydoMS5zZXRWZXJzaW9uLm9u
YmxvY2tlZCcKKydoMi5jbG9zZScKKydoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcycKKydoMS5zZXRW
ZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJworUEFTUyB3aW5kb3cuc3RlcHMudG9TdHJpbmco
KSBpcyAiaDEub3BlbixoMS5vcGVuLm9uc3VjY2VzcyxoMi5vcGVuLGgyLm9wZW4ub25zdWNjZXNz
LGgxLnNldFZlcnNpb24saDIub252ZXJzaW9uY2hhbmdlLGgxLnNldFZlcnNpb24ub25ibG9ja2Vk
LGgyLmNsb3NlLGgxLnNldFZlcnNpb24ub25zdWNjZXNzLGgxLnNldFZlcnNpb24udHJhbnNhY3Rp
b24tY29tcGxldGUiCisKK1RFU1Q6IHNldFZlcnNpb24gbm90IGJsb2NrZWQgaWYgaGFuZGxlIGNs
b3NlZCBpbW1lZGlhdGVseQord2luZG93LmRibmFtZSA9ICd0ZXN0Mic7IHdpbmRvdy52ZXIgPSAx
OyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gxLm9wZW4nCisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDIu
b3BlbicKKydoMi5vcGVuLm9uc3VjY2VzcycKKydoMS5zZXRWZXJzaW9uJworJ2gyLm9udmVyc2lv
bmNoYW5nZScKKyAgICBoMiBjbG9zaW5nIGltbWVkaWF0ZWx5CisnaDIuY2xvc2UnCisnaDEuc2V0
VmVyc2lvbi5vbmJsb2NrZWQnCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVy
c2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZScKK05PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJv
Z3VzIGgxLnNldFZlcnNpb24ub25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAxMjMKK0ZBSUwg
d2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJlIGgxLm9wZW4saDEub3Blbi5vbnN1Y2Nl
c3MsaDIub3BlbixoMi5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgyLm9udmVyc2lvbmNo
YW5nZSxoMi5jbG9zZSxoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLnRyYW5z
YWN0aW9uLWNvbXBsZXRlLiBXYXMgaDEub3BlbixoMS5vcGVuLm9uc3VjY2VzcyxoMi5vcGVuLGgy
Lm9wZW4ub25zdWNjZXNzLGgxLnNldFZlcnNpb24saDIub252ZXJzaW9uY2hhbmdlLGgyLmNsb3Nl
LGgxLnNldFZlcnNpb24ub25ibG9ja2VkLGgxLnNldFZlcnNpb24ub25zdWNjZXNzLGgxLnNldFZl
cnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUuCisKK1RFU1Q6IG9wZW4gYW5kIHNldFZlcnNpb24g
YmxvY2tlZCBpZiBhIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgLSBjbG9z
ZSB3aGVuIGJsb2NrZWQKK3dpbmRvdy5kYm5hbWUgPSAndGVzdDMnOyB3aW5kb3cudmVyID0gMTsg
d2luZG93LnN0ZXBzID0gW10KKydoMS5vcGVuJworJ2gxLm9wZW4ub25zdWNjZXNzJworJ2gyLm9w
ZW4nCisnaDIub3Blbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbicKKydoMi5zZXRWZXJzaW9u
JworJ2gyLm9udmVyc2lvbmNoYW5nZScKKydoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCcKKydoMS5v
bnZlcnNpb25jaGFuZ2UnCisnaDIuc2V0VmVyc2lvbi5vbmJsb2NrZWQnCisgICAgaDIgYmxvY2tl
ZCBzbyBjbG9zaW5nCisnaDIuY2xvc2UnCisnaDMub3BlbicKKydoMi5zZXRWZXJzaW9uLm9uZXJy
b3InCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlv
bi1jb21wbGV0ZScKKydoMy5vcGVuLm9uc3VjY2VzcycKK1BBU1Mgd2luZG93LnN0ZXBzLnRvU3Ry
aW5nKCkgaXMgImgxLm9wZW4saDEub3Blbi5vbnN1Y2Nlc3MsaDIub3BlbixoMi5vcGVuLm9uc3Vj
Y2VzcyxoMS5zZXRWZXJzaW9uLGgyLnNldFZlcnNpb24saDIub252ZXJzaW9uY2hhbmdlLGgxLnNl
dFZlcnNpb24ub25ibG9ja2VkLGgxLm9udmVyc2lvbmNoYW5nZSxoMi5zZXRWZXJzaW9uLm9uYmxv
Y2tlZCxoMi5jbG9zZSxoMy5vcGVuLGgyLnNldFZlcnNpb24ub25lcnJvcixoMS5zZXRWZXJzaW9u
Lm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlLGgzLm9wZW4ub25z
dWNjZXNzIgorCitURVNUOiBvcGVuIGFuZCBzZXRWZXJzaW9uIGJsb2NrZWQgaWYgYSBWRVJTSU9O
X0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIC0ganVzdCBjbG9zZQord2luZG93LmRibmFt
ZSA9ICd0ZXN0NCc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gxLm9wZW4n
CisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDIub3BlbicKKydoMi5vcGVuLm9uc3VjY2VzcycKKydo
MS5zZXRWZXJzaW9uJworJ2gzLm9wZW4nCisnaDIuY2xvc2UnCisnaDEuc2V0VmVyc2lvbi5vbmJs
b2NrZWQnCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbi50cmFuc2Fj
dGlvbi1jb21wbGV0ZScKKydoMy5vcGVuLm9uc3VjY2VzcycKK05PVEU6IFdpbGwgRkFJTCB3aXRo
IGV4dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24ub25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAx
MjMKK0ZBSUwgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJlIGgxLm9wZW4saDEub3Bl
bi5vbnN1Y2Nlc3MsaDIub3BlbixoMi5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgzLm9w
ZW4saDIuY2xvc2UsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbi50cmFuc2Fj
dGlvbi1jb21wbGV0ZSxoMy5vcGVuLm9uc3VjY2Vzcy4gV2FzIGgxLm9wZW4saDEub3Blbi5vbnN1
Y2Nlc3MsaDIub3BlbixoMi5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgzLm9wZW4saDIu
Y2xvc2UsaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEu
c2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSxoMy5vcGVuLm9uc3VjY2Vzcy4KKworVEVT
VDogb3BlbiBibG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVubmlu
Zword2luZG93LmRibmFtZSA9ICd0ZXN0NSc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMg
PSBbXQorJ2gxLm9wZW4nCisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbicKKydo
Mi5vcGVuJworJ2gxLnNldFZlcnNpb24ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24udHJhbnNh
Y3Rpb24tY29tcGxldGUnCisnaDIub3Blbi5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRvdy5zdGVwcy50
b1N0cmluZygpIGlzICJoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgxLnNldFZlcnNpb24saDIu
b3BlbixoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNv
bXBsZXRlLGgyLm9wZW4ub25zdWNjZXNzIgorCitURVNUOiB0d28gc2V0VmVyc2lvbnMgZnJvbSB0
aGUgc2FtZSBjb25uZWN0aW9uCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q2Jzsgd2luZG93LnZlciA9
IDE7IHdpbmRvdy5zdGVwcyA9IFtdCisnaDEub3BlbicKKydoMS5vcGVuLm9uc3VjY2VzcycKKydo
MS5zZXRWZXJzaW9uJworJ2gxLnNldFZlcnNpb24nCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3Mn
CisnaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZScKK2hhbGYgZG9uZQorJ2gxLnNl
dFZlcnNpb24ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUn
CitQQVNTIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIGlzICJoMS5vcGVuLGgxLm9wZW4ub25zdWNj
ZXNzLGgxLnNldFZlcnNpb24saDEuc2V0VmVyc2lvbixoMS5zZXRWZXJzaW9uLm9uc3VjY2Vzcyxo
MS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlLGgxLnNldFZlcnNpb24ub25zdWNjZXNz
LGgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUiCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjA5
ZDhmNDgxYzMwMmQwNTVjMmUzYjFhMzgxMTU4ZGJiZmUwYjYxCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLmh0bWwKQEAg
LTAsMCArMSwzMDAgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9u
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IGludGVybGVhdmVk
IG9wZW4vY2xvc2Uvc2V0VmVyc2lvbiBjYWxscyBpbiB2YXJpb3VzIHBlcm11dGF0aW9ucyIpOwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIENvbm5lY3Rpb24oaWQpIHsKKyAgICBpZCA9
IFN0cmluZyhpZCk7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHRoaXMub3BlbiA9IGZ1bmN0
aW9uKG9wdHMpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBp
ZCArICIub3BlbiciKSk7CisgICAgICAgIHZhciByZXEgPSBpbmRleGVkREIub3Blbih3aW5kb3cu
ZGJuYW1lKTsKKyAgICAgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsK
KyAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICBzZWxm
LmhhbmRsZSA9IGUudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNo
KGV2YWxBbmRMb2coIiciICsgaWQgKyAiLm9wZW4ub25zdWNjZXNzJyIpKTsKKyAgICAgICAgICAg
IHNlbGYuaGFuZGxlLm9udmVyc2lvbmNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg
ICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5vbnZlcnNpb25j
aGFuZ2UnIikpOworICAgICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub252ZXJzaW9uKSB7
IG9wdHMub252ZXJzaW9uLmNhbGwoc2VsZik7IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBpZiAob3B0cyAmJiBvcHRzLm9uc3VjY2VzcykgeyBvcHRzLm9uc3VjY2Vzcy5jYWxsKHNlbGYp
OyB9CisgICAgICAgIH07CisgICAgfTsKKworICAgIHRoaXMuY2xvc2UgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuY2xvc2Un
IikpOworICAgICAgICB0aGlzLmhhbmRsZS5jbG9zZSgpOworICAgIH07CisKKyAgICB0aGlzLnNl
dFZlcnNpb24gPSBmdW5jdGlvbihvcHRzKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2
YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24nIikpOworICAgICAgICB2YXIgcmVxID0g
dGhpcy5oYW5kbGUuc2V0VmVyc2lvbihTdHJpbmcod2luZG93LnZlcisrKSk7CisgICAgICAgIHJl
cS5vbmFib3J0ID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNo
KGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25hYm9ydCciKSk7CisgICAgICAg
ICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYWJvcnQpIHsgb3B0cy5vbmFib3J0LmNhbGwoc2VsZik7
IH0KKyAgICAgICAgfTsKKyAgICAgICAgcmVxLm9uYmxvY2tlZCA9IGZ1bmN0aW9uIChlKSB7Cisg
ICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRW
ZXJzaW9uLm9uYmxvY2tlZCciKSk7CisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYmxv
Y2tlZCkgeyBvcHRzLm9uYmxvY2tlZC5jYWxsKHNlbGYpOyB9CisgICAgICAgIH07CisgICAgICAg
IHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgd2luZG93LnN0ZXBz
LnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnIikpOwor
ICAgICAgICAgICAgaWYgKHNlbGYuaGFuZGxlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoInRl
c3Qtc3RvcmUiICsgd2luZG93LnZlcikpIHsKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZS5k
ZWxldGVPYmplY3RTdG9yZSgidGVzdC1zdG9yZSIgKyB3aW5kb3cudmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBzdG9yZSA9IHNlbGYuaGFuZGxlLmNyZWF0ZU9iamVjdFN0b3Jl
KCJ0ZXN0LXN0b3JlIiArIHdpbmRvdy52ZXIpOworICAgICAgICAgICAgdmFyIGNvdW50ID0gMDsK
KyAgICAgICAgICAgIGRvX2FzeW5jX3B1dHMoKTsgLy8gS2VlcCB0aGlzIHRyYW5zYWN0aW9uIHJ1
bm5pbmcgZm9yIGEgd2hpbGUKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRvX2FzeW5jX3B1dHMoKSB7
CisgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLnB1dChjb3VudCwgY291bnQpOworICAg
ICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAg
ICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICgrK2NvdW50IDwgMTApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvX2Fz
eW5jX3B1dHMoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZl
cnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUnIikpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfTsKKyAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgeworICAg
ICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVy
c2lvbi5vbmVycm9yJyIpKTsKKyAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25lcnJvcikg
eyBvcHRzLm9uZXJyb3IuY2FsbChzZWxmKTsgfQorICAgICAgICB9OworICAgIH07Cit9CisKKy8v
IHJ1biBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHRha2UgYSBjb250aW51YXRpb24gZnVuY3Rpb24K
K2Z1bmN0aW9uIHJ1blN0ZXBzKGNvbW1hbmRzKSB7CisgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkg
eworICAgICAgICB2YXIgY29tbWFuZCA9IGNvbW1hbmRzLnNoaWZ0KCk7CisgICAgICAgIGNvbW1h
bmQoZnVuY3Rpb24oKSB7IHJ1blN0ZXBzKGNvbW1hbmRzKTsgfSk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0KCkgeworICAgIGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdp
bmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5k
ZXhlZERCOyIpOworICAgIHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7CisgICAg
dGVzdDEoKTsKK30KKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRl
YnVnKCJURVNUOiBzZXRWZXJzaW9uIGJsb2NrZWQgb24gb3BlbiBoYW5kbGVzIik7CisgICAgZXZh
bEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cu
c3RlcHMgPSBbXSIpOworICAgIHZhciBoMSA9IG5ldyBDb25uZWN0aW9uKCJoMSIpOworICAgIHZh
ciBoMiA9IG5ldyBDb25uZWN0aW9uKCJoMiIpOworICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05l
eHQpIHsgaDEub3Blbih7b25zdWNjZXNzOiBkb05leHR9KTsgfSwKKyAgICAgICAgIGZ1bmN0aW9u
KGRvTmV4dCkgeyBoMi5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaDIgY2xvc2luZywgYnV0IG5vdCBpbW1lZGlh
dGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsgaDIuY2xvc2UoKTsgfSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH19KTsgfSwKKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMS5zZXRWZXJzaW9u
KHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgIF0pOworICAgIGZ1bmN0aW9u
IGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0
ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoMS5vcGVu
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEub3Blbi5vbnN1Y2Nlc3MiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vcGVuIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaDIub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaDIub252ZXJzaW9uY2hhbmdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoMi5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZl
cnNpb24ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0
VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0MigpOworICAgIH0KK30KKworZnVuY3Rp
b24gdGVzdDIoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJURVNUOiBzZXRWZXJzaW9u
IG5vdCBibG9ja2VkIGlmIGhhbmRsZSBjbG9zZWQgaW1tZWRpYXRlbHkiKTsKKyAgICBldmFsQW5k
TG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVw
cyA9IFtdIik7CisgICAgdmFyIGgxID0gbmV3IENvbm5lY3Rpb24oImgxIik7CisgICAgdmFyIGgy
ID0gbmV3IENvbm5lY3Rpb24oImgyIik7CisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkg
eyBoMS5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dH0pOyB9LAorICAgICAgICAgICAgICBmdW5jdGlv
bihkb05leHQpIHsgaDIub3Blbih7b25zdWNjZXNzOiBkb05leHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaDIgY2xv
c2luZyBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGgyLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9fSk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMS5zZXRW
ZXJzaW9uKHtvbnN1Y2Nlc3M6IGRvTmV4dH0pOyB9LAorICAgICAgICAgICAgICBmaW5pc2hUZXN0
CisgICAgICAgICAgICAgIF0pOworCisgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAg
ICAgZGVidWcoIk5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24u
b25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAxMjMiKTsKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbImgxLm9wZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
MS5vcGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9w
ZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vcGVuLm9uc3VjY2VzcyIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJoMi5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImgxLnNldFZlcnNpb24ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0MygpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDMoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVn
KCJURVNUOiBvcGVuIGFuZCBzZXRWZXJzaW9uIGJsb2NrZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0
cmFuc2FjdGlvbiBpcyBydW5uaW5nIC0gY2xvc2Ugd2hlbiBibG9ja2VkIik7CisgICAgZXZhbEFu
ZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0Myc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3Rl
cHMgPSBbXSIpOworICAgIHZhciBoMSA9IG5ldyBDb25uZWN0aW9uKCJoMSIpOworICAgIHZhciBo
MiA9IG5ldyBDb25uZWN0aW9uKCJoMiIpOworICAgIHZhciBoMyA9IG5ldyBDb25uZWN0aW9uKCJo
MyIpOworICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaDEub3Blbih7b25zdWNjZXNz
OiBkb05leHR9KTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgyLm9wZW4o
e29uc3VjY2VzczogZG9OZXh0fSk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkg
eyBoMS5zZXRWZXJzaW9uKCk7IGRvTmV4dCgpOyB9LAorICAgICAgICAgICAgICBmdW5jdGlvbihk
b05leHQpIHsgaDIuc2V0VmVyc2lvbih7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvbmJsb2NrZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaDIg
YmxvY2tlZCBzbyBjbG9zaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaDIuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb05leHQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgICAg
ICAgZnVuY3Rpb24oKSB7IGgzLm9wZW4oe29uc3VjY2VzczogZmluaXNoVGVzdH0pO30KKyAgICAg
ICAgICAgICAgXSk7CisKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsiaDEub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImgxLm9wZW4ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaDIub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9wZW4ub25z
dWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLnNldFZlcnNpb24iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImgxLm9udmVyc2lvbmNoYW5nZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImgyLnNldFZlcnNpb24ub25ibG9ja2VkIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaDIuY2xvc2UiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJoMy5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIu
c2V0VmVyc2lvbi5vbmVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEu
c2V0VmVyc2lvbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
MS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaDMub3Blbi5vbnN1Y2Nlc3MiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgdGVzdDQoKTsKKyAgICB9Cit9CisKK2Z1bmN0
aW9uIHRlc3Q0KCkgeworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZygiVEVTVDogb3BlbiBhbmQg
c2V0VmVyc2lvbiBibG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVu
bmluZyAtIGp1c3QgY2xvc2UiKTsKKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rl
c3Q0Jzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdIik7CisgICAgdmFyIGgxID0g
bmV3IENvbm5lY3Rpb24oImgxIik7CisgICAgdmFyIGgyID0gbmV3IENvbm5lY3Rpb24oImgyIik7
CisgICAgdmFyIGgzID0gbmV3IENvbm5lY3Rpb24oImgzIik7CisgICAgcnVuU3RlcHMoW2Z1bmN0
aW9uKGRvTmV4dCkgeyBoMS5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dH0pOyB9LAorICAgICAgICAg
ICAgICBmdW5jdGlvbihkb05leHQpIHsgaDIub3Blbih7b25zdWNjZXNzOiBkb05leHR9KTsgfSwK
KyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgxLnNldFZlcnNpb24oKTsgZG9OZXh0
KCk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMy5vcGVuKHtvbnN1Y2Nl
c3M6IGZpbmlzaFRlc3R9KTsgZG9OZXh0KCk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRv
TmV4dCkgeyBoMi5jbG9zZSgpOyB9LAorICAgICAgICAgICAgICBdKTsKKworICAgIGZ1bmN0aW9u
IGZpbmlzaFRlc3QoKSB7CisgICAgICAgIGRlYnVnKCJOT1RFOiBXaWxsIEZBSUwgd2l0aCBleHRy
YSBib2d1cyBoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCBzdGVwOyBjcmJ1Zy5jb20vMTAwMTIzIik7
CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCki
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoMS5vcGVuIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaDEub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJoMi5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaDIub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
MS5zZXRWZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDMub3BlbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLmNsb3NlIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDMub3Blbi5vbnN1Y2Nlc3MiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgdGVz
dDUoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q1KCkgeworICAgIGRlYnVnKCIiKTsKKyAg
ICBkZWJ1ZygiVEVTVDogb3BlbiBibG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rp
b24gaXMgcnVubmluZyIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDUn
OyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaDEgPSBuZXcg
Q29ubmVjdGlvbigiaDEiKTsKKyAgICB2YXIgaDIgPSBuZXcgQ29ubmVjdGlvbigiaDIiKTsKKwor
ICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaDEub3Blbih7b25zdWNjZXNzOiBkb05l
eHR9KTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgxLnNldFZlcnNpb24o
KTsgZG9OZXh0KCk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMi5vcGVu
KHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfQorICAgICAgICAgICAgICBdKTsKKworICAgIGZ1
bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2lu
ZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJo
MS5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEub3Blbi5vbnN1Y2Nl
c3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIub3BlbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9wZW4ub25zdWNjZXNzIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIHRlc3Q2KCk7
CisgICAgfQorfQorCisKK2Z1bmN0aW9uIHRlc3Q2KCkgeworICAgIGRlYnVnKCIiKTsKKyAgICBk
ZWJ1ZygiVEVTVDogdHdvIHNldFZlcnNpb25zIGZyb20gdGhlIHNhbWUgY29ubmVjdGlvbiIpOwor
ICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDYnOyB3aW5kb3cudmVyID0gMTsg
d2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaDEgPSBuZXcgQ29ubmVjdGlvbigiaDEiKTsK
KworICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaDEub3Blbih7b25zdWNjZXNzOiBk
b05leHR9KTsgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMS5zZXRWZXJzaW9uKHtvbnN1Y2Nlc3M6IGhhbGZEb25l
fSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEuc2V0VmVyc2lvbih7b25z
dWNjZXNzOiBoYWxmRG9uZX0pOyB9CisgICAgICAgICAgICAgIF0pOworCisgICAgdmFyIGNvdW50
ZXIgPSAwOworICAgIGZ1bmN0aW9uIGhhbGZEb25lKCkgeworICAgICAgICBjb3VudGVyKys7Cisg
ICAgICAgIGlmIChjb3VudGVyIDwgMikgeworICAgICAgICAgICAgZGVidWcoJ2hhbGYgZG9uZScp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICB9
CisgICAgfSAgCisKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsiaDEub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImgxLm9wZW4ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aDEuc2V0VmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZl
cnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLm9u
c3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24u
dHJhbnNhY3Rpb24tY29tcGxldGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
MS5zZXRWZXJzaW9uLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KK30KKwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKK3Rlc3QoKTsKKworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi90d28tdmVyc2lvbi1jaGFuZ2VzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL3R3by12ZXJzaW9uLWNoYW5nZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUy
NzczNGIxNGQzYjZhYjVlYzAwY2FhMGIxOThhMzBkYTJjM2ExMmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDQwIEBACitUZXN0IGJlaGF2aW9yIHdoZW4gdGhlIHNhbWUgY29u
bmVjdGlvbiBjYWxscyBzZXRWZXJzaW9uIHR3aWNlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRl
eGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsKK0lEQlRyYW5zYWN0aW9uID0gd2luZG93LklE
QlRyYW5zYWN0aW9uIHx8IHdpbmRvdy53ZWJraXRJREJUcmFuc2FjdGlvbiB8fCB3aW5kb3cubW96
SURCVHJhbnNhY3Rpb247CitQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlzIGZhbHNlCitQQVNTIElE
QlRyYW5zYWN0aW9uID09IG51bGwgaXMgZmFsc2UKK3dpbmRvdy5zdGF0ZSA9ICdzdGFydGluZycK
K2luZGV4ZWREQi5vcGVuKCd0d28tdmVyc2lvbnMtb25lLWNvbm5lY3Rpb24nKQorZGIgPSBldmVu
dC50YXJnZXQucmVzdWx0Cit3aW5kb3cuc3RhdGUgPSAwCitkYi5zZXRWZXJzaW9uKCd2ZXJzaW9u
IDEnKQorZGIuc2V0VmVyc2lvbigndmVyc2lvbiAyJykKK3NldFZlcnNpb24oKSAjMSBjYWxsYmFj
aword2luZG93LnN0b3JlMSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0LXN0b3JlMScpCitQ
QVNTICsrd2luZG93LnN0YXRlIGlzIDEKK3dpbmRvdy5zdG9yZTEucHV0KCdhYWEnLCAxMTEpCitQ
QVNTICsrd2luZG93LnN0YXRlIGlzIDIKK1BBU1MgKyt3aW5kb3cuc3RhdGUgaXMgMworaGFsZndh
eSB0aGVyZS4uLgorc2V0VmVyc2lvbigpICMyIGNhbGxiYWNrCitQQVNTICsrd2luZG93LnN0YXRl
IGlzIDQKK3dpbmRvdy5zdG9yZTIgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdC1zdG9yZTIn
KQord2luZG93LnN0b3JlMi5wdXQoJ2JiYicsIDIyMikKK1BBU1MgKyt3aW5kb3cuc3RhdGUgaXMg
NQorUEFTUyArK3dpbmRvdy5zdGF0ZSBpcyA2CitQQVNTIHdpbmRvdy5kYi52ZXJzaW9uIGlzICJ2
ZXJzaW9uIDIiCit3aW5kb3cudHJhbnMgPSBkYi50cmFuc2FjdGlvbihbJ3Rlc3Qtc3RvcmUxJywg
J3Rlc3Qtc3RvcmUyJ10pCit3aW5kb3cuc3RvcmUgPSB3aW5kb3cudHJhbnMub2JqZWN0U3RvcmUo
J3Rlc3Qtc3RvcmUxJykKK3dpbmRvdy5yZXEgPSB3aW5kb3cuc3RvcmUuZ2V0KDExMSkKK1BBU1Mg
ZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAiYWFhIgord2luZG93LnN0b3JlID0gd2luZG93LnRyYW5z
Lm9iamVjdFN0b3JlKCd0ZXN0LXN0b3JlMicpCit3aW5kb3cucmVxID0gd2luZG93LnN0b3JlLmdl
dCgyMjIpCitQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQgaXMgImJiYiIKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTZmNTNjOWEyOWFiZTNhZGNhMjNkYzU1MjAyYzFkZGM0OTFjZGRlYgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R3by12ZXJzaW9uLWNoYW5nZXMu
aHRtbApAQCAtMCwwICsxLDExNiBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qt
ZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgYmVo
YXZpb3Igd2hlbiB0aGUgc2FtZSBjb25uZWN0aW9uIGNhbGxzIHNldFZlcnNpb24gdHdpY2UiKTsK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworCisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaW5kZXhlZERC
ID0gZXZhbEFuZExvZygiaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Vi
a2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7Iik7CisgICAgSURCVHJhbnNhY3Rp
b24gPSBldmFsQW5kTG9nKCJJREJUcmFuc2FjdGlvbiA9IHdpbmRvdy5JREJUcmFuc2FjdGlvbiB8
fCB3aW5kb3cud2Via2l0SURCVHJhbnNhY3Rpb24gfHwgd2luZG93Lm1veklEQlRyYW5zYWN0aW9u
OyIpOworCisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09IG51bGwiKTsKKyAgICBzaG91
bGRCZUZhbHNlKCJJREJUcmFuc2FjdGlvbiA9PSBudWxsIik7CisgICAgb3BlbkRCQ29ubmVjdGlv
bigpOworfQorCitmdW5jdGlvbiBvcGVuREJDb25uZWN0aW9uKCkKK3sKKyAgICBldmFsQW5kTG9n
KCJ3aW5kb3cuc3RhdGUgPSAnc3RhcnRpbmcnIik7CisgICAgdmFyIHJlcXVlc3QgPSBldmFsQW5k
TG9nKCJpbmRleGVkREIub3BlbigndHdvLXZlcnNpb25zLW9uZS1jb25uZWN0aW9uJykiKTsKKyAg
ICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9
IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBvcGVuU3VjY2VzcygpCit7
CisgICAgd2luZG93LmRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7
CisgICAgZXZhbEFuZExvZygid2luZG93LnN0YXRlID0gMCIpOworCisgICAgdmFyIHZlcnNpb25D
aGFuZ2VSZXF1ZXN0MSA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ3ZlcnNpb24gMScpIik7
CisgICAgdmVyc2lvbkNoYW5nZVJlcXVlc3QxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKKyAgICB2ZXJzaW9uQ2hhbmdlUmVxdWVzdDEub25zdWNjZXNzID0gaW5TZXRWZXJzaW9u
MTsKKworICAgIC8vIGFuZCBjb25jdXJyZW50bHkuLi4KKworICAgIHZhciB2ZXJzaW9uQ2hhbmdl
UmVxdWVzdDIgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDInKSIpOworICAg
IHZlcnNpb25DaGFuZ2VSZXF1ZXN0Mi5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
CisgICAgdmVyc2lvbkNoYW5nZVJlcXVlc3QyLm9uc3VjY2VzcyA9IGluU2V0VmVyc2lvbjI7Cit9
CisKK2Z1bmN0aW9uIGluU2V0VmVyc2lvbjEoKQoreworICAgIGRlYnVnKCJzZXRWZXJzaW9uKCkg
IzEgY2FsbGJhY2siKTsKKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuc3RvcmUxID0gZGIuY3JlYXRl
T2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUxJykiKTsKKyAgICBzaG91bGRCZSgiKyt3aW5kb3cuc3Rh
dGUiLCAiMSIpOworICAgIHZhciByZXEgPSBldmFsQW5kTG9nKCJ3aW5kb3cuc3RvcmUxLnB1dCgn
YWFhJywgMTExKSIpOworICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
CisgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHNob3VsZEJlKCIr
K3dpbmRvdy5zdGF0ZSIsICIyIik7CisgICAgICAgIGhhbGZ3YXlEb25lKCk7CisgICAgfTsKK30K
KworZnVuY3Rpb24gaW5TZXRWZXJzaW9uMigpCit7CisgICAgZGVidWcoInNldFZlcnNpb24oKSAj
MiBjYWxsYmFjayIpOworICAgIHNob3VsZEJlKCIrK3dpbmRvdy5zdGF0ZSIsICI0Iik7CisgICAg
ZXZhbEFuZExvZygid2luZG93LnN0b3JlMiA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0LXN0
b3JlMicpIik7CisKKyAgICB2YXIgcmVxID0gZXZhbEFuZExvZygid2luZG93LnN0b3JlMi5wdXQo
J2JiYicsIDIyMikiKTsKKyAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OworICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICBzaG91bGRCZSgi
Kyt3aW5kb3cuc3RhdGUiLCAiNSIpOworICAgICAgICBoYWxmd2F5RG9uZSgpOworICAgIH07Cit9
CisKK3ZhciBjb3VudGVyID0gMDsKK2Z1bmN0aW9uIGhhbGZ3YXlEb25lKCkgCit7CisgICAgY291
bnRlciArPSAxOworICAgIGlmIChjb3VudGVyIDwgMikgeworICAgICAgICBzaG91bGRCZSgiKyt3
aW5kb3cuc3RhdGUiLCAiMyIpOworICAgICAgICBkZWJ1ZygiaGFsZndheSB0aGVyZS4uLiIgKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBzaG91bGRCZSgiKyt3aW5kb3cuc3RhdGUiLCAiNiIpOwor
ICAgICAgICBjaGVja1Jlc3VsdHMoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNoZWNrUmVzdWx0
cygpIHsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5kYi52ZXJzaW9uIiwgInZl
cnNpb24gMiIpOworICAgIHRyYW5zID0gZXZhbEFuZExvZygid2luZG93LnRyYW5zID0gZGIudHJh
bnNhY3Rpb24oWyd0ZXN0LXN0b3JlMScsICd0ZXN0LXN0b3JlMiddKSIpOworICAgIHN0b3JlID0g
ZXZhbEFuZExvZygid2luZG93LnN0b3JlID0gd2luZG93LnRyYW5zLm9iamVjdFN0b3JlKCd0ZXN0
LXN0b3JlMScpIik7CisgICAgcmVxID0gZXZhbEFuZExvZygid2luZG93LnJlcSA9IHdpbmRvdy5z
dG9yZS5nZXQoMTExKSIpOworICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7CisgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICJhYWEiKTsKKworICAgICAgICBz
dG9yZSA9IGV2YWxBbmRMb2coIndpbmRvdy5zdG9yZSA9IHdpbmRvdy50cmFucy5vYmplY3RTdG9y
ZSgndGVzdC1zdG9yZTInKSIpOworICAgICAgICByZXEgPSBldmFsQW5kTG9nKCJ3aW5kb3cucmVx
ID0gd2luZG93LnN0b3JlLmdldCgyMjIpIik7CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkg
eworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJldmVudC50YXJnZXQucmVzdWx0
IiwgImJiYiIpOworICAgICAgICAgICAgZG9uZSgpOyAgICAKKyAgICAgICAgfTsKKyAgICB9Owor
fQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwordGVzdCgpOworCis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM4OWU2N2I2ZjkwZWIwZDIxNjExZTdhZWZiZmIxZDFmNTA4NzQzZWYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNo
YW5nZS1leGNsdXNpdmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0Vuc3VyZSBWRVJT
SU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBkb2Vzbid0IHJ1biBjb25jdXJyZW50bHkgd2l0aCBvdGhl
ciB0cmFuc2FjdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWRE
QiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cu
bW96SW5kZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQord2luZG93LnN0
YXRlID0gJ3N0YXJ0aW5nJworaW5kZXhlZERCLm9wZW4oJ3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2
ZScpCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2NhbGxpbmcgc2V0VmVyc2lvbigpIC0gY2Fs
bGJhY2sgc2hvdWxkIHJ1biBpbW1lZGlhdGVseQorZGIuc2V0VmVyc2lvbigndmVyc2lvbiAxJykK
K2NhbGxpbmcgb3BlbigpIC0gY2FsbGJhY2sgc2hvdWxkIHdhaXQgdW50aWwgVkVSU0lPTl9DSEFO
R0UgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUKK2luZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5n
ZS1leGNsdXNpdmUnKQorc2V0VmVyc2lvbigpIGNhbGxiYWNrCitzdGFydGluZyB3b3JrIGluIFZF
UlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0Ug
c3RhcnRlZCcKK3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUnKQorc3Rv
cmUucHV0KDAsIDApCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCgxLCAxKQoraW4gcHV0
J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoMiwgMikKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUu
cHV0KDMsIDMpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg0LCA0KQoraW4gcHV0J3Mg
b25zdWNjZXNzCitzdG9yZS5wdXQoNSwgNSkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0
KDYsIDYpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg3LCA3KQoraW4gcHV0J3Mgb25z
dWNjZXNzCitzdG9yZS5wdXQoOCwgOCkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDks
IDkpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK2VuZGluZyB3b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRy
YW5zYWN0aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0UgZmluaXNoZWQnCitvcGVu
KCkgY2FsbGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIgYWZ0ZXIgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gZW5kcworUEFTUyB3aW5kb3cuc3RhdGUgaXMgIlZFUlNJT05fQ0hBTkdFIGZpbmlz
aGVkIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdl
LWV4Y2x1c2l2ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1j
aGFuZ2UtZXhjbHVzaXZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVlZDBhMzk0ZDk3ZTgzNzBiMDBkNmYz
YmJjNzRmZDQ5MzBlZDQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS5odG1sCkBAIC0wLDAgKzEsODcgQEAK
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJFbnN1cmUgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rp
b24gZG9lc24ndCBydW4gY29uY3VycmVudGx5IHdpdGggb3RoZXIgdHJhbnNhY3Rpb25zIik7Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKworCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGluZGV4ZWREQiA9
IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtp
dEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOworICAgIHNob3VsZEJlRmFsc2Uo
ImluZGV4ZWREQiA9PSBudWxsIik7CisgICAgb3BlbkRCQ29ubmVjdGlvbigpOworfQorCitmdW5j
dGlvbiBvcGVuREJDb25uZWN0aW9uKCkKK3sKKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuc3RhdGUg
PSAnc3RhcnRpbmcnIik7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVu
KCd2ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0g
b3BlblN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkKK3sKKyAgICB3aW5kb3cuZGIgPSBldmFs
QW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKworICAgIGRlYnVnKCJjYWxsaW5n
IHNldFZlcnNpb24oKSAtIGNhbGxiYWNrIHNob3VsZCBydW4gaW1tZWRpYXRlbHkiKTsKKyAgICB2
YXIgdmVyc2lvbkNoYW5nZVJlcXVlc3QgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCd2ZXJz
aW9uIDEnKSIpOworICAgIHZlcnNpb25DaGFuZ2VSZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVk
RXJyb3JDYWxsYmFjazsKKyAgICB2ZXJzaW9uQ2hhbmdlUmVxdWVzdC5vbnN1Y2Nlc3MgPSBpblNl
dFZlcnNpb247CisKKyAgICAvLyBhbmQgY29uY3VycmVudGx5Li4uCisKKyAgICBkZWJ1ZygiY2Fs
bGluZyBvcGVuKCkgLSBjYWxsYmFjayBzaG91bGQgd2FpdCB1bnRpbCBWRVJTSU9OX0NIQU5HRSB0
cmFuc2FjdGlvbiBpcyBjb21wbGV0ZSIpOworICAgIHZhciBvcGVuUmVxdWVzdCA9IGV2YWxBbmRM
b2coImluZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUnKSIpOworICAgIG9w
ZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5BZ2FpblN1Y2Nlc3M7CisgICAgb3BlblJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBpblNldFZl
cnNpb24oKQoreworICAgIGRlYnVnKCJzZXRWZXJzaW9uKCkgY2FsbGJhY2siKTsKKyAgICBkZWJ1
Zygic3RhcnRpbmcgd29yayBpbiBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiIpOworICAgIGV2
YWxBbmRMb2coIndpbmRvdy5zdGF0ZSA9ICdWRVJTSU9OX0NIQU5HRSBzdGFydGVkJyIpOworCisg
ICAgd2luZG93LnN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9y
ZSgndGVzdC1zdG9yZScpIik7CisgICAgd2luZG93LmNvdW50ID0gMDsKKyAgICBkb19hc3luY19w
dXRzKCk7CisKKyAgICBmdW5jdGlvbiBkb19hc3luY19wdXRzKCkgeworICAgICAgICB2YXIgcmVx
ID0gZXZhbEFuZExvZygic3RvcmUucHV0KCIgKyBjb3VudCArICIsICIgKyBjb3VudCArICIpIik7
CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAg
IHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgZGVidWcoImluIHB1
dCdzIG9uc3VjY2VzcyIpOworICAgICAgICAgICAgaWYgKCsrd2luZG93LmNvdW50IDwgMTApIHsK
KyAgICAgICAgICAgICAgICBkb19hc3luY19wdXRzKCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGRlYnVnKCJlbmRpbmcgd29yayBpbiBWRVJTSU9OX0NIQU5HRSB0cmFu
c2FjdGlvbiIpOworICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coIndpbmRvdy5zdGF0ZSA9ICdW
RVJTSU9OX0NIQU5HRSBmaW5pc2hlZCciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIG9wZW5BZ2FpblN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJvcGVu
KCkgY2FsbGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIgYWZ0ZXIgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gZW5kcyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0YXRl
IiwgIlZFUlNJT05fQ0hBTkdFIGZpbmlzaGVkIik7CisgICAgZG9uZSgpOworfQorCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZjBjNjMzYWM5MGUyZmVjYjYxMzE1MzE5NDQ2ZDZiNTUy
ODIzZjIwLi43NmMzNDZmNTY2OWU2N2JmZmJjOTM5ZGU4ZDJlM2MzZGU5MjIzMjg5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMTMgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZvciBwZW5k
aW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgcXVldWUgb2YgcGVuZGluZyBv
cGVuIGNhbGxzLCBzaW1pbGFyIHRvIHRoZSBxdWV1ZSBvZiBwZW5kaW5nCisgICAgICAgIHNldFZl
cnNpb24gY2FsbHMuIEVuc3VyZSBwZW5kaW5nIGNhbGxzIGFyZSBwcm9jZXNzZWQgaW4gdGhlIGNv
cnJlY3QKKyAgICAgICAgb3JkZXIgd2hlbiB0cmFuc2FjdGlvbnMgY29tcGxldGUuCisKKyAgICAg
ICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi5odG1sCisgICAg
ICAgICAgICAgICBzdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLmh0bWwKKyAg
ICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS5o
dG1sCisKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGlu
Z09wZW5DYWxsOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsOjpQZW5kaW5nT3BlbkNhbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwcm9jZXNzUGVuZGlu
Z0NhbGxzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5D
b25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNs
b3NlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpjb21taXQpOgorCiAyMDExLTEwLTEzICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHI4OTkxNSk6IDxpbnB1dCB0eXBlPWVtYWls
IG11bHRpcGxlPiBkb24ndCBzaG93IHRoZSBkZWZhdWx0IHZhbHVlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA4ZmU5NzFhMjdj
OTExMjQ3NTljZmYzMjAzZGU4ZGNkODU0NWY2ODZkLi41ODFhYThjMDE1M2Q5NmUwOTkwODQxYzQ4
NjdmNTRmYTVhZmFiZjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTM5LDYgKzM5LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsIDog
cHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ09wZW5DYWxsPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVuZGlu
Z09wZW5DYWxsKGNhbGxiYWNrcykpOworICAgIH0KKyAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KKworcHJpdmF0ZToKKyAgICBQ
ZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAg
ICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTZXRW
ZXJzaW9uQ2FsbD4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdTZXRW
ZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0
YWJhc2VDYWxsYmFja3MpCkBAIC0xNzQsMTIgKzE5MCwyMCBAQCB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElE
QkNhbAogICAgICAgICBpZiAoKml0ICE9IGRhdGFiYXNlQ2FsbGJhY2tzKQogICAgICAgICAgICAg
KCppdCktPm9uVmVyc2lvbkNoYW5nZSh2ZXJzaW9uKTsKICAgICB9CisgICAgLy8gRklYTUU6IE9u
bHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhl
CisgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1
cCB0byBmaXJlLgorICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAwMTIzCiAgICAgaWYgKG1fZGF0
YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpID4gMSkgewogICAgICAgICBjYWxsYmFja3MtPm9uQmxv
Y2tlZCgpOwogICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0
VmVyc2lvbkNhbGwgPSBQZW5kaW5nU2V0VmVyc2lvbkNhbGw6OmNyZWF0ZSh2ZXJzaW9uLCBjYWxs
YmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKTsKICAgICAgICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNh
bGxzLmFwcGVuZChwZW5kaW5nU2V0VmVyc2lvbkNhbGwpOwogICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAg
UmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gUGVu
ZGluZ1NldFZlcnNpb25DYWxsOjpjcmVhdGUodmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNh
bGxiYWNrcyk7CisgICAgICAgIG1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5hcHBlbmQocGVuZGlu
Z1NldFZlcnNpb25DYWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFJlZlB0cjxE
T01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7
CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKQEAg
LTIwMyw2ICsyMjcsNDMgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9u
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWYKICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2Vzcyh0cmFuc2FjdGlvbik7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6dHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiBwcnBUcmFuc2FjdGlvbikKK3sKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFu
c2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAg
ICAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CisgICAgICAg
IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworICAgIH0K
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkKFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBUcmFuc2FjdGlvbikK
K3sKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlv
biA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRy
YW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAgICBBU1NFUlQodHJhbnNhY3Rpb24u
Z2V0KCkgPT0gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICAg
ICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgICAgIHBy
b2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCit7CisgICAgLy8gUGVuZGluZyBjYWxscyBtYXkg
YmUgcmVxdWV1ZWQgb3IgYWJvcnRlZAorICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lv
bkNhbGw+ID4gcGVuZGluZ1NldFZlcnNpb25DYWxsczsKKyAgICBtX3BlbmRpbmdTZXRWZXJzaW9u
Q2FsbHMuc3dhcChwZW5kaW5nU2V0VmVyc2lvbkNhbGxzKTsKKyAgICB3aGlsZSAoIXBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lv
bkNhbGwgPSBwZW5kaW5nU2V0VmVyc2lvbkNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBzZXRW
ZXJzaW9uKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+dmVyc2lvbigpLCBwZW5kaW5nU2V0VmVyc2lv
bkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPmRhdGFiYXNlQ2FsbGJh
Y2tzKCksIGVjKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgfQorCisgICAgd2hpbGUgKCFt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJiYgbV9wZW5kaW5nU2V0VmVyc2lvbkNh
bGxzLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAg
ICBSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBtX3BlbmRpbmdPcGVu
Q2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIG9wZW5Db25uZWN0aW9uKHBlbmRpbmdPcGVuQ2Fs
bC0+Y2FsbGJhY2tzKCkpOworICAgIH0KK30KKwogUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKERPTVN0
cmluZ0xpc3QqIG9iamVjdFN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVOYW1l
cy0+bGVuZ3RoKCk7ICsraSkgewpAQCAtMjIxLDYgKzI4MiwxNCBAQCB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQogICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4oY2FsbGJhY2tzKSk7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAg
ICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKQorICAgICAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5k
KFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgIGVsc2UKKyAgICAgICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
KQogewogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2Fs
bGJhY2tzOwpAQCAtMjI5LDEyICsyOTgsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcwogICAg
IGlmIChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKSA+IDEpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHdoaWxlICghbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgewotICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJz
aW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxz
LnRha2VGaXJzdCgpOwotICAgICAgICBzZXRWZXJzaW9uKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+
dmVyc2lvbigpLCBwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nU2V0
VmVyc2lvbkNhbGwtPmRhdGFiYXNlQ2FsbGJhY2tzKCksIGVjKTsKLSAgICAgICAgQVNTRVJUKCFl
Yyk7Ci0gICAgfQorICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggZjc3OTEyNTBkOTE4YWExOTg0
NDE1OWIyOTdiMjUzYjNiZTY0OGVmZS4uNDYxYjhiOTZmODBmMDVmYjBlNTJmODJiMTljNmY5ODNj
ZWQ1NzRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmgKQEAgLTU0LDcgKzU0LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBp
bnQ2NF90IEludmFsaWRJZCA9IDA7CiAgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aWQ7IH0KKworICAgIC8vIEZJWE1FOiByZW5hbWUgIm9wZW4iIHRvIHNvbWV0aGluZyBtb3JlIGRl
c2NyaXB0aXZlLCBsaWtlIHJlZ2lzdGVyRnJvbnRFbmRDYWxsYmFja3MKICAgICB2b2lkIG9wZW4o
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOworICAgIHZvaWQgb3BlbkNvbm5lY3Rp
b24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CkBAIC02OCwxMSArNzEsMTQgQEAgcHVibGljOgog
CiAgICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0
b3JlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciog
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29y
ZGluYXRvci5nZXQoKTsgfQorICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgdm9pZCB0cmFuc2FjdGlvbkZp
bmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAKIHBy
aXZhdGU6CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElE
QkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqLCBJREJG
YWN0b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwogCiAg
ICAgdm9pZCBsb2FkT2JqZWN0U3RvcmVzKCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxz
KCk7CiAKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CkBAIC05NiwxMCArMTAyLDE0
IEBAIHByaXZhdGU6CiAgICAgT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RTdG9yZXM7CiAKICAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9y
OworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fcnVubmluZ1Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKIAogICAgIGNsYXNzIFBlbmRpbmdTZXRWZXJzaW9uQ2Fs
bDsKICAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiA+IG1fcGVuZGluZ1Nl
dFZlcnNpb25DYWxsczsKIAorICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKKyAgICBEZXF1ZTxS
ZWZQdHI8UGVuZGluZ09wZW5DYWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKKwogICAgIHR5cGVk
ZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiA+IERhdGFiYXNlQ2Fs
bGJhY2tzU2V0OwogICAgIERhdGFiYXNlQ2FsbGJhY2tzU2V0IG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwCmluZGV4IDUxYzUwYzQ1OTAyODQ0M2I3NjZmNjkwMjc5ZmNiMDBiZjQzZGY5N2UuLjRj
OGI5MGI2YTNkM2UyZjViNTY3OTczNTQ1NmYxZDAwYjE5ZWQwMGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTEwOSw3ICsxMDks
OSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYQogCiAgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFw
OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmll
cik7CiAgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7Ci0gICAgICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKGl0LT5zZWNvbmQpOworICAgICAgICAvLyBJZiBpdCdzIGFs
cmVhZHkgYmVlbiBvcGVuZWQsIHdlIGhhdmUgdG8gd2FpdCBmb3IgYW55IHBlbmRpbmcKKyAgICAg
ICAgLy8gc2V0VmVyc2lvbiBjYWxscyB0byBjb21wbGV0ZS4KKyAgICAgICAgaXQtPnNlY29uZC0+
b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5j
cHAKaW5kZXggMTU2Y2I4OWE5ZmIwOWRhNTA0ZjQ1YTk3OGUwMjczZWEzYTZhNTY0YS4uMDE1ZGEx
OGQ2OWE4MjhjNTU3MTc5YTBmYzFhZjBjMTI5MzM2MmJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCkBAIC0xMzEsNiAr
MTMxLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCiAgICAgbV9j
YWxsYmFja3MtPm9uQWJvcnQoKTsKICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5h
dG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIEFTU0VSVCghbV9kYXRhYmFz
ZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5pc0FjdGl2ZSh0aGlzKSk7CisgICAgbV9kYXRh
YmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKICAgICBtX2RhdGFiYXNlID0gMDsKIH0K
IApAQCAtMTcxLDYgKzE3Miw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c3Rh
cnQoKQogCiAgICAgbV9zdGF0ZSA9IFN0YXJ0UGVuZGluZzsKICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZFN0YXJ0VHJhbnNhY3Rpb24odGhpcyk7CisgICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25TdGFydGVkKHRoaXMpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCkBAIC0xODYsNiArMTg4LDcgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQogICAgIG1fdHJhbnNhY3Rpb24tPmNvbW1pdCgp
OwogICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKCk7CiAgICAgbV9kYXRhYmFzZS0+dHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBtX2Rh
dGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwogICAgIG1fZGF0YWJhc2UgPSAwOwog
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110907</attachid>
            <date>2011-10-13 14:36:05 -0700</date>
            <delta_ts>2011-10-13 16:07:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69307-20111013143604.patch</filename>
            <type>text/plain</type>
            <size>40589</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0Njc3YTYzMjRjNWU1NDc5NjhlNGE4
NDY4ZTY2ODJhMmQzMmVmNzNjLi4yZjVlNDA5NTIyMTRjMmFjOTE0NjMxZDcxZGNmNmQxYjE2YmM3
OGI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTAtMTMgIEpvc2h1YSBCZWxsICA8anNi
ZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZv
ciBwZW5kaW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNvbWUgdGVzdHMgbWFya2VkIEZB
SUwgZHVlIHRvIGNyYnVnLmNvbS8xMDAxMjMKKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRi
L29wZW4tY2xvc2UtdmVyc2lvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBz
dG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvdHdvLXZlcnNpb24tY2hhbmdlcy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNp
dmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi92ZXJz
aW9uLWNoYW5nZS1leGNsdXNpdmUuaHRtbDogQWRkZWQuCisKIDIwMTEtMTAtMTMgIEtlbnQgVGFt
dXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gRml4IGVycm9y
cyBpbiB0ZXN0X2V4cGVjdGF0aW9ucy50eHQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNzI4YTI5ZDEzMWJlOGMzZDExNGVhZTE2YmUyZmQ5YzI0ZGMwZTBjCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJz
aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwMyBAQAorVGVzdCBpbnRlcmxlYXZlZCBvcGVu
L2Nsb3NlL3NldFZlcnNpb24gY2FsbHMgaW4gdmFyaW91cyBwZXJtdXRhdGlvbnMKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwg
d2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBpbmRl
eGVkREIgPT0gbnVsbCBpcyBmYWxzZQorCitURVNUOiBzZXRWZXJzaW9uIGJsb2NrZWQgb24gb3Bl
biBoYW5kbGVzCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QxJzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaDEub3BlbicKKydoMS5vcGVuLm9uc3VjY2VzcycKKydoMi5vcGVuJwor
J2gyLm9wZW4ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24nCisnaDIub252ZXJzaW9uY2hhbmdl
JworICAgIGgyIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkKKydoMS5zZXRWZXJzaW9uLm9u
YmxvY2tlZCcKKydoMi5jbG9zZScKKydoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcycKKydoMS5zZXRW
ZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJworUEFTUyB3aW5kb3cuc3RlcHMudG9TdHJpbmco
KSBpcyAiaDEub3BlbixoMS5vcGVuLm9uc3VjY2VzcyxoMi5vcGVuLGgyLm9wZW4ub25zdWNjZXNz
LGgxLnNldFZlcnNpb24saDIub252ZXJzaW9uY2hhbmdlLGgxLnNldFZlcnNpb24ub25ibG9ja2Vk
LGgyLmNsb3NlLGgxLnNldFZlcnNpb24ub25zdWNjZXNzLGgxLnNldFZlcnNpb24udHJhbnNhY3Rp
b24tY29tcGxldGUiCisKK1RFU1Q6IHNldFZlcnNpb24gbm90IGJsb2NrZWQgaWYgaGFuZGxlIGNs
b3NlZCBpbW1lZGlhdGVseQord2luZG93LmRibmFtZSA9ICd0ZXN0Mic7IHdpbmRvdy52ZXIgPSAx
OyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gxLm9wZW4nCisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDIu
b3BlbicKKydoMi5vcGVuLm9uc3VjY2VzcycKKydoMS5zZXRWZXJzaW9uJworJ2gyLm9udmVyc2lv
bmNoYW5nZScKKyAgICBoMiBjbG9zaW5nIGltbWVkaWF0ZWx5CisnaDIuY2xvc2UnCisnaDEuc2V0
VmVyc2lvbi5vbmJsb2NrZWQnCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVy
c2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZScKK05PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJv
Z3VzIGgxLnNldFZlcnNpb24ub25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAxMjMKK0ZBSUwg
d2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJlIGgxLm9wZW4saDEub3Blbi5vbnN1Y2Nl
c3MsaDIub3BlbixoMi5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgyLm9udmVyc2lvbmNo
YW5nZSxoMi5jbG9zZSxoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLnRyYW5z
YWN0aW9uLWNvbXBsZXRlLiBXYXMgaDEub3BlbixoMS5vcGVuLm9uc3VjY2VzcyxoMi5vcGVuLGgy
Lm9wZW4ub25zdWNjZXNzLGgxLnNldFZlcnNpb24saDIub252ZXJzaW9uY2hhbmdlLGgyLmNsb3Nl
LGgxLnNldFZlcnNpb24ub25ibG9ja2VkLGgxLnNldFZlcnNpb24ub25zdWNjZXNzLGgxLnNldFZl
cnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUuCisKK1RFU1Q6IG9wZW4gYW5kIHNldFZlcnNpb24g
YmxvY2tlZCBpZiBhIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgLSBjbG9z
ZSB3aGVuIGJsb2NrZWQKK3dpbmRvdy5kYm5hbWUgPSAndGVzdDMnOyB3aW5kb3cudmVyID0gMTsg
d2luZG93LnN0ZXBzID0gW10KKydoMS5vcGVuJworJ2gxLm9wZW4ub25zdWNjZXNzJworJ2gyLm9w
ZW4nCisnaDIub3Blbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbicKKydoMi5zZXRWZXJzaW9u
JworJ2gyLm9udmVyc2lvbmNoYW5nZScKKydoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCcKKydoMS5v
bnZlcnNpb25jaGFuZ2UnCisnaDIuc2V0VmVyc2lvbi5vbmJsb2NrZWQnCisgICAgaDIgYmxvY2tl
ZCBzbyBjbG9zaW5nCisnaDIuY2xvc2UnCisnaDMub3BlbicKKydoMi5zZXRWZXJzaW9uLm9uZXJy
b3InCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlv
bi1jb21wbGV0ZScKKydoMy5vcGVuLm9uc3VjY2VzcycKK1BBU1Mgd2luZG93LnN0ZXBzLnRvU3Ry
aW5nKCkgaXMgImgxLm9wZW4saDEub3Blbi5vbnN1Y2Nlc3MsaDIub3BlbixoMi5vcGVuLm9uc3Vj
Y2VzcyxoMS5zZXRWZXJzaW9uLGgyLnNldFZlcnNpb24saDIub252ZXJzaW9uY2hhbmdlLGgxLnNl
dFZlcnNpb24ub25ibG9ja2VkLGgxLm9udmVyc2lvbmNoYW5nZSxoMi5zZXRWZXJzaW9uLm9uYmxv
Y2tlZCxoMi5jbG9zZSxoMy5vcGVuLGgyLnNldFZlcnNpb24ub25lcnJvcixoMS5zZXRWZXJzaW9u
Lm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlLGgzLm9wZW4ub25z
dWNjZXNzIgorCitURVNUOiBvcGVuIGFuZCBzZXRWZXJzaW9uIGJsb2NrZWQgaWYgYSBWRVJTSU9O
X0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIC0ganVzdCBjbG9zZQord2luZG93LmRibmFt
ZSA9ICd0ZXN0NCc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gxLm9wZW4n
CisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDIub3BlbicKKydoMi5vcGVuLm9uc3VjY2VzcycKKydo
MS5zZXRWZXJzaW9uJworJ2gzLm9wZW4nCisnaDIuY2xvc2UnCisnaDEuc2V0VmVyc2lvbi5vbmJs
b2NrZWQnCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbi50cmFuc2Fj
dGlvbi1jb21wbGV0ZScKKydoMy5vcGVuLm9uc3VjY2VzcycKK05PVEU6IFdpbGwgRkFJTCB3aXRo
IGV4dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24ub25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAx
MjMKK0ZBSUwgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJlIGgxLm9wZW4saDEub3Bl
bi5vbnN1Y2Nlc3MsaDIub3BlbixoMi5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgzLm9w
ZW4saDIuY2xvc2UsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbi50cmFuc2Fj
dGlvbi1jb21wbGV0ZSxoMy5vcGVuLm9uc3VjY2Vzcy4gV2FzIGgxLm9wZW4saDEub3Blbi5vbnN1
Y2Nlc3MsaDIub3BlbixoMi5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgzLm9wZW4saDIu
Y2xvc2UsaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEu
c2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSxoMy5vcGVuLm9uc3VjY2Vzcy4KKworVEVT
VDogb3BlbiBibG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVubmlu
Zword2luZG93LmRibmFtZSA9ICd0ZXN0NSc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMg
PSBbXQorJ2gxLm9wZW4nCisnaDEub3Blbi5vbnN1Y2Nlc3MnCisnaDEuc2V0VmVyc2lvbicKKydo
Mi5vcGVuJworJ2gxLnNldFZlcnNpb24ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24udHJhbnNh
Y3Rpb24tY29tcGxldGUnCisnaDIub3Blbi5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRvdy5zdGVwcy50
b1N0cmluZygpIGlzICJoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgxLnNldFZlcnNpb24saDIu
b3BlbixoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNv
bXBsZXRlLGgyLm9wZW4ub25zdWNjZXNzIgorCitURVNUOiB0d28gc2V0VmVyc2lvbnMgZnJvbSB0
aGUgc2FtZSBjb25uZWN0aW9uCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q2Jzsgd2luZG93LnZlciA9
IDE7IHdpbmRvdy5zdGVwcyA9IFtdCisnaDEub3BlbicKKydoMS5vcGVuLm9uc3VjY2VzcycKKydo
MS5zZXRWZXJzaW9uJworJ2gxLnNldFZlcnNpb24nCisnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3Mn
CisnaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZScKK2hhbGYgZG9uZQorJ2gxLnNl
dFZlcnNpb24ub25zdWNjZXNzJworJ2gxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUn
CitQQVNTIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIGlzICJoMS5vcGVuLGgxLm9wZW4ub25zdWNj
ZXNzLGgxLnNldFZlcnNpb24saDEuc2V0VmVyc2lvbixoMS5zZXRWZXJzaW9uLm9uc3VjY2Vzcyxo
MS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlLGgxLnNldFZlcnNpb24ub25zdWNjZXNz
LGgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUiCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjA5
ZDhmNDgxYzMwMmQwNTVjMmUzYjFhMzgxMTU4ZGJiZmUwYjYxCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLmh0bWwKQEAg
LTAsMCArMSwzMDAgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9u
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IGludGVybGVhdmVk
IG9wZW4vY2xvc2Uvc2V0VmVyc2lvbiBjYWxscyBpbiB2YXJpb3VzIHBlcm11dGF0aW9ucyIpOwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIENvbm5lY3Rpb24oaWQpIHsKKyAgICBpZCA9
IFN0cmluZyhpZCk7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHRoaXMub3BlbiA9IGZ1bmN0
aW9uKG9wdHMpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBp
ZCArICIub3BlbiciKSk7CisgICAgICAgIHZhciByZXEgPSBpbmRleGVkREIub3Blbih3aW5kb3cu
ZGJuYW1lKTsKKyAgICAgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsK
KyAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICBzZWxm
LmhhbmRsZSA9IGUudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNo
KGV2YWxBbmRMb2coIiciICsgaWQgKyAiLm9wZW4ub25zdWNjZXNzJyIpKTsKKyAgICAgICAgICAg
IHNlbGYuaGFuZGxlLm9udmVyc2lvbmNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg
ICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5vbnZlcnNpb25j
aGFuZ2UnIikpOworICAgICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub252ZXJzaW9uKSB7
IG9wdHMub252ZXJzaW9uLmNhbGwoc2VsZik7IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBpZiAob3B0cyAmJiBvcHRzLm9uc3VjY2VzcykgeyBvcHRzLm9uc3VjY2Vzcy5jYWxsKHNlbGYp
OyB9CisgICAgICAgIH07CisgICAgfTsKKworICAgIHRoaXMuY2xvc2UgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuY2xvc2Un
IikpOworICAgICAgICB0aGlzLmhhbmRsZS5jbG9zZSgpOworICAgIH07CisKKyAgICB0aGlzLnNl
dFZlcnNpb24gPSBmdW5jdGlvbihvcHRzKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2
YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24nIikpOworICAgICAgICB2YXIgcmVxID0g
dGhpcy5oYW5kbGUuc2V0VmVyc2lvbihTdHJpbmcod2luZG93LnZlcisrKSk7CisgICAgICAgIHJl
cS5vbmFib3J0ID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNo
KGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25hYm9ydCciKSk7CisgICAgICAg
ICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYWJvcnQpIHsgb3B0cy5vbmFib3J0LmNhbGwoc2VsZik7
IH0KKyAgICAgICAgfTsKKyAgICAgICAgcmVxLm9uYmxvY2tlZCA9IGZ1bmN0aW9uIChlKSB7Cisg
ICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRW
ZXJzaW9uLm9uYmxvY2tlZCciKSk7CisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYmxv
Y2tlZCkgeyBvcHRzLm9uYmxvY2tlZC5jYWxsKHNlbGYpOyB9CisgICAgICAgIH07CisgICAgICAg
IHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgd2luZG93LnN0ZXBz
LnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnIikpOwor
ICAgICAgICAgICAgaWYgKHNlbGYuaGFuZGxlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoInRl
c3Qtc3RvcmUiICsgd2luZG93LnZlcikpIHsKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZS5k
ZWxldGVPYmplY3RTdG9yZSgidGVzdC1zdG9yZSIgKyB3aW5kb3cudmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBzdG9yZSA9IHNlbGYuaGFuZGxlLmNyZWF0ZU9iamVjdFN0b3Jl
KCJ0ZXN0LXN0b3JlIiArIHdpbmRvdy52ZXIpOworICAgICAgICAgICAgdmFyIGNvdW50ID0gMDsK
KyAgICAgICAgICAgIGRvX2FzeW5jX3B1dHMoKTsgLy8gS2VlcCB0aGlzIHRyYW5zYWN0aW9uIHJ1
bm5pbmcgZm9yIGEgd2hpbGUKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRvX2FzeW5jX3B1dHMoKSB7
CisgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLnB1dChjb3VudCwgY291bnQpOworICAg
ICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAg
ICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICgrK2NvdW50IDwgMTApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvX2Fz
eW5jX3B1dHMoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZl
cnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUnIikpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfTsKKyAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgeworICAg
ICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVy
c2lvbi5vbmVycm9yJyIpKTsKKyAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25lcnJvcikg
eyBvcHRzLm9uZXJyb3IuY2FsbChzZWxmKTsgfQorICAgICAgICB9OworICAgIH07Cit9CisKKy8v
IHJ1biBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHRha2UgYSBjb250aW51YXRpb24gZnVuY3Rpb24K
K2Z1bmN0aW9uIHJ1blN0ZXBzKGNvbW1hbmRzKSB7CisgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkg
eworICAgICAgICB2YXIgY29tbWFuZCA9IGNvbW1hbmRzLnNoaWZ0KCk7CisgICAgICAgIGNvbW1h
bmQoZnVuY3Rpb24oKSB7IHJ1blN0ZXBzKGNvbW1hbmRzKTsgfSk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0KCkgeworICAgIGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdp
bmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5k
ZXhlZERCOyIpOworICAgIHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7CisgICAg
dGVzdDEoKTsKK30KKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRl
YnVnKCJURVNUOiBzZXRWZXJzaW9uIGJsb2NrZWQgb24gb3BlbiBoYW5kbGVzIik7CisgICAgZXZh
bEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cu
c3RlcHMgPSBbXSIpOworICAgIHZhciBoMSA9IG5ldyBDb25uZWN0aW9uKCJoMSIpOworICAgIHZh
ciBoMiA9IG5ldyBDb25uZWN0aW9uKCJoMiIpOworICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05l
eHQpIHsgaDEub3Blbih7b25zdWNjZXNzOiBkb05leHR9KTsgfSwKKyAgICAgICAgIGZ1bmN0aW9u
KGRvTmV4dCkgeyBoMi5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaDIgY2xvc2luZywgYnV0IG5vdCBpbW1lZGlh
dGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsgaDIuY2xvc2UoKTsgfSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH19KTsgfSwKKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMS5zZXRWZXJzaW9u
KHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgIF0pOworICAgIGZ1bmN0aW9u
IGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0
ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoMS5vcGVu
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEub3Blbi5vbnN1Y2Nlc3MiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vcGVuIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaDIub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaDIub252ZXJzaW9uY2hhbmdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoMi5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZl
cnNpb24ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0
VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0MigpOworICAgIH0KK30KKworZnVuY3Rp
b24gdGVzdDIoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJURVNUOiBzZXRWZXJzaW9u
IG5vdCBibG9ja2VkIGlmIGhhbmRsZSBjbG9zZWQgaW1tZWRpYXRlbHkiKTsKKyAgICBldmFsQW5k
TG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVw
cyA9IFtdIik7CisgICAgdmFyIGgxID0gbmV3IENvbm5lY3Rpb24oImgxIik7CisgICAgdmFyIGgy
ID0gbmV3IENvbm5lY3Rpb24oImgyIik7CisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkg
eyBoMS5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dH0pOyB9LAorICAgICAgICAgICAgICBmdW5jdGlv
bihkb05leHQpIHsgaDIub3Blbih7b25zdWNjZXNzOiBkb05leHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaDIgY2xv
c2luZyBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGgyLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9fSk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMS5zZXRW
ZXJzaW9uKHtvbnN1Y2Nlc3M6IGRvTmV4dH0pOyB9LAorICAgICAgICAgICAgICBmaW5pc2hUZXN0
CisgICAgICAgICAgICAgIF0pOworCisgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAg
ICAgZGVidWcoIk5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24u
b25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAxMjMiKTsKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbImgxLm9wZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
MS5vcGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9w
ZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vcGVuLm9uc3VjY2VzcyIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJoMi5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImgxLnNldFZlcnNpb24ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0MygpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDMoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVn
KCJURVNUOiBvcGVuIGFuZCBzZXRWZXJzaW9uIGJsb2NrZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0
cmFuc2FjdGlvbiBpcyBydW5uaW5nIC0gY2xvc2Ugd2hlbiBibG9ja2VkIik7CisgICAgZXZhbEFu
ZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0Myc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3Rl
cHMgPSBbXSIpOworICAgIHZhciBoMSA9IG5ldyBDb25uZWN0aW9uKCJoMSIpOworICAgIHZhciBo
MiA9IG5ldyBDb25uZWN0aW9uKCJoMiIpOworICAgIHZhciBoMyA9IG5ldyBDb25uZWN0aW9uKCJo
MyIpOworICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaDEub3Blbih7b25zdWNjZXNz
OiBkb05leHR9KTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgyLm9wZW4o
e29uc3VjY2VzczogZG9OZXh0fSk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkg
eyBoMS5zZXRWZXJzaW9uKCk7IGRvTmV4dCgpOyB9LAorICAgICAgICAgICAgICBmdW5jdGlvbihk
b05leHQpIHsgaDIuc2V0VmVyc2lvbih7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvbmJsb2NrZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaDIg
YmxvY2tlZCBzbyBjbG9zaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaDIuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb05leHQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgICAg
ICAgZnVuY3Rpb24oKSB7IGgzLm9wZW4oe29uc3VjY2VzczogZmluaXNoVGVzdH0pO30KKyAgICAg
ICAgICAgICAgXSk7CisKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsiaDEub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImgxLm9wZW4ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaDIub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9wZW4ub25z
dWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLnNldFZlcnNpb24iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoMi5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImgxLm9udmVyc2lvbmNoYW5nZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImgyLnNldFZlcnNpb24ub25ibG9ja2VkIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaDIuY2xvc2UiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJoMy5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIu
c2V0VmVyc2lvbi5vbmVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEu
c2V0VmVyc2lvbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
MS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaDMub3Blbi5vbnN1Y2Nlc3MiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgdGVzdDQoKTsKKyAgICB9Cit9CisKK2Z1bmN0
aW9uIHRlc3Q0KCkgeworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZygiVEVTVDogb3BlbiBhbmQg
c2V0VmVyc2lvbiBibG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVu
bmluZyAtIGp1c3QgY2xvc2UiKTsKKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rl
c3Q0Jzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdIik7CisgICAgdmFyIGgxID0g
bmV3IENvbm5lY3Rpb24oImgxIik7CisgICAgdmFyIGgyID0gbmV3IENvbm5lY3Rpb24oImgyIik7
CisgICAgdmFyIGgzID0gbmV3IENvbm5lY3Rpb24oImgzIik7CisgICAgcnVuU3RlcHMoW2Z1bmN0
aW9uKGRvTmV4dCkgeyBoMS5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dH0pOyB9LAorICAgICAgICAg
ICAgICBmdW5jdGlvbihkb05leHQpIHsgaDIub3Blbih7b25zdWNjZXNzOiBkb05leHR9KTsgfSwK
KyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgxLnNldFZlcnNpb24oKTsgZG9OZXh0
KCk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMy5vcGVuKHtvbnN1Y2Nl
c3M6IGZpbmlzaFRlc3R9KTsgZG9OZXh0KCk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRv
TmV4dCkgeyBoMi5jbG9zZSgpOyB9LAorICAgICAgICAgICAgICBdKTsKKworICAgIGZ1bmN0aW9u
IGZpbmlzaFRlc3QoKSB7CisgICAgICAgIGRlYnVnKCJOT1RFOiBXaWxsIEZBSUwgd2l0aCBleHRy
YSBib2d1cyBoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCBzdGVwOyBjcmJ1Zy5jb20vMTAwMTIzIik7
CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCki
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoMS5vcGVuIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaDEub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJoMi5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaDIub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
MS5zZXRWZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDMub3BlbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLmNsb3NlIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDMub3Blbi5vbnN1Y2Nlc3MiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgdGVz
dDUoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q1KCkgeworICAgIGRlYnVnKCIiKTsKKyAg
ICBkZWJ1ZygiVEVTVDogb3BlbiBibG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rp
b24gaXMgcnVubmluZyIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDUn
OyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaDEgPSBuZXcg
Q29ubmVjdGlvbigiaDEiKTsKKyAgICB2YXIgaDIgPSBuZXcgQ29ubmVjdGlvbigiaDIiKTsKKwor
ICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaDEub3Blbih7b25zdWNjZXNzOiBkb05l
eHR9KTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGgxLnNldFZlcnNpb24o
KTsgZG9OZXh0KCk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMi5vcGVu
KHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfQorICAgICAgICAgICAgICBdKTsKKworICAgIGZ1
bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2lu
ZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJo
MS5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDEub3Blbi5vbnN1Y2Nl
c3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaDIub3BlbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgyLm9wZW4ub25zdWNjZXNzIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIHRlc3Q2KCk7
CisgICAgfQorfQorCisKK2Z1bmN0aW9uIHRlc3Q2KCkgeworICAgIGRlYnVnKCIiKTsKKyAgICBk
ZWJ1ZygiVEVTVDogdHdvIHNldFZlcnNpb25zIGZyb20gdGhlIHNhbWUgY29ubmVjdGlvbiIpOwor
ICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDYnOyB3aW5kb3cudmVyID0gMTsg
d2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaDEgPSBuZXcgQ29ubmVjdGlvbigiaDEiKTsK
KworICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaDEub3Blbih7b25zdWNjZXNzOiBk
b05leHR9KTsgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoMS5zZXRWZXJzaW9uKHtvbnN1Y2Nlc3M6IGhhbGZEb25l
fSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEuc2V0VmVyc2lvbih7b25z
dWNjZXNzOiBoYWxmRG9uZX0pOyB9CisgICAgICAgICAgICAgIF0pOworCisgICAgdmFyIGNvdW50
ZXIgPSAwOworICAgIGZ1bmN0aW9uIGhhbGZEb25lKCkgeworICAgICAgICBjb3VudGVyKys7Cisg
ICAgICAgIGlmIChjb3VudGVyIDwgMikgeworICAgICAgICAgICAgZGVidWcoJ2hhbGYgZG9uZScp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICB9
CisgICAgfSAgCisKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsiaDEub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImgxLm9wZW4ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aDEuc2V0VmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZl
cnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5zZXRWZXJzaW9uLm9u
c3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLnNldFZlcnNpb24u
dHJhbnNhY3Rpb24tY29tcGxldGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
MS5zZXRWZXJzaW9uLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KK30KKwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKK3Rlc3QoKTsKKworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi90d28tdmVyc2lvbi1jaGFuZ2VzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL3R3by12ZXJzaW9uLWNoYW5nZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUy
NzczNGIxNGQzYjZhYjVlYzAwY2FhMGIxOThhMzBkYTJjM2ExMmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDQwIEBACitUZXN0IGJlaGF2aW9yIHdoZW4gdGhlIHNhbWUgY29u
bmVjdGlvbiBjYWxscyBzZXRWZXJzaW9uIHR3aWNlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRl
eGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsKK0lEQlRyYW5zYWN0aW9uID0gd2luZG93LklE
QlRyYW5zYWN0aW9uIHx8IHdpbmRvdy53ZWJraXRJREJUcmFuc2FjdGlvbiB8fCB3aW5kb3cubW96
SURCVHJhbnNhY3Rpb247CitQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlzIGZhbHNlCitQQVNTIElE
QlRyYW5zYWN0aW9uID09IG51bGwgaXMgZmFsc2UKK3dpbmRvdy5zdGF0ZSA9ICdzdGFydGluZycK
K2luZGV4ZWREQi5vcGVuKCd0d28tdmVyc2lvbnMtb25lLWNvbm5lY3Rpb24nKQorZGIgPSBldmVu
dC50YXJnZXQucmVzdWx0Cit3aW5kb3cuc3RhdGUgPSAwCitkYi5zZXRWZXJzaW9uKCd2ZXJzaW9u
IDEnKQorZGIuc2V0VmVyc2lvbigndmVyc2lvbiAyJykKK3NldFZlcnNpb24oKSAjMSBjYWxsYmFj
aword2luZG93LnN0b3JlMSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0LXN0b3JlMScpCitQ
QVNTICsrd2luZG93LnN0YXRlIGlzIDEKK3dpbmRvdy5zdG9yZTEucHV0KCdhYWEnLCAxMTEpCitQ
QVNTICsrd2luZG93LnN0YXRlIGlzIDIKK1BBU1MgKyt3aW5kb3cuc3RhdGUgaXMgMworaGFsZndh
eSB0aGVyZS4uLgorc2V0VmVyc2lvbigpICMyIGNhbGxiYWNrCitQQVNTICsrd2luZG93LnN0YXRl
IGlzIDQKK3dpbmRvdy5zdG9yZTIgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdC1zdG9yZTIn
KQord2luZG93LnN0b3JlMi5wdXQoJ2JiYicsIDIyMikKK1BBU1MgKyt3aW5kb3cuc3RhdGUgaXMg
NQorUEFTUyArK3dpbmRvdy5zdGF0ZSBpcyA2CitQQVNTIHdpbmRvdy5kYi52ZXJzaW9uIGlzICJ2
ZXJzaW9uIDIiCit3aW5kb3cudHJhbnMgPSBkYi50cmFuc2FjdGlvbihbJ3Rlc3Qtc3RvcmUxJywg
J3Rlc3Qtc3RvcmUyJ10pCit3aW5kb3cuc3RvcmUgPSB3aW5kb3cudHJhbnMub2JqZWN0U3RvcmUo
J3Rlc3Qtc3RvcmUxJykKK3dpbmRvdy5yZXEgPSB3aW5kb3cuc3RvcmUuZ2V0KDExMSkKK1BBU1Mg
ZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAiYWFhIgord2luZG93LnN0b3JlID0gd2luZG93LnRyYW5z
Lm9iamVjdFN0b3JlKCd0ZXN0LXN0b3JlMicpCit3aW5kb3cucmVxID0gd2luZG93LnN0b3JlLmdl
dCgyMjIpCitQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQgaXMgImJiYiIKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTZmNTNjOWEyOWFiZTNhZGNhMjNkYzU1MjAyYzFkZGM0OTFjZGRlYgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R3by12ZXJzaW9uLWNoYW5nZXMu
aHRtbApAQCAtMCwwICsxLDExNiBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qt
ZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgYmVo
YXZpb3Igd2hlbiB0aGUgc2FtZSBjb25uZWN0aW9uIGNhbGxzIHNldFZlcnNpb24gdHdpY2UiKTsK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworCisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaW5kZXhlZERC
ID0gZXZhbEFuZExvZygiaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Vi
a2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7Iik7CisgICAgSURCVHJhbnNhY3Rp
b24gPSBldmFsQW5kTG9nKCJJREJUcmFuc2FjdGlvbiA9IHdpbmRvdy5JREJUcmFuc2FjdGlvbiB8
fCB3aW5kb3cud2Via2l0SURCVHJhbnNhY3Rpb24gfHwgd2luZG93Lm1veklEQlRyYW5zYWN0aW9u
OyIpOworCisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09IG51bGwiKTsKKyAgICBzaG91
bGRCZUZhbHNlKCJJREJUcmFuc2FjdGlvbiA9PSBudWxsIik7CisgICAgb3BlbkRCQ29ubmVjdGlv
bigpOworfQorCitmdW5jdGlvbiBvcGVuREJDb25uZWN0aW9uKCkKK3sKKyAgICBldmFsQW5kTG9n
KCJ3aW5kb3cuc3RhdGUgPSAnc3RhcnRpbmcnIik7CisgICAgdmFyIHJlcXVlc3QgPSBldmFsQW5k
TG9nKCJpbmRleGVkREIub3BlbigndHdvLXZlcnNpb25zLW9uZS1jb25uZWN0aW9uJykiKTsKKyAg
ICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9
IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBvcGVuU3VjY2VzcygpCit7
CisgICAgd2luZG93LmRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7
CisgICAgZXZhbEFuZExvZygid2luZG93LnN0YXRlID0gMCIpOworCisgICAgdmFyIHZlcnNpb25D
aGFuZ2VSZXF1ZXN0MSA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ3ZlcnNpb24gMScpIik7
CisgICAgdmVyc2lvbkNoYW5nZVJlcXVlc3QxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKKyAgICB2ZXJzaW9uQ2hhbmdlUmVxdWVzdDEub25zdWNjZXNzID0gaW5TZXRWZXJzaW9u
MTsKKworICAgIC8vIGFuZCBjb25jdXJyZW50bHkuLi4KKworICAgIHZhciB2ZXJzaW9uQ2hhbmdl
UmVxdWVzdDIgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDInKSIpOworICAg
IHZlcnNpb25DaGFuZ2VSZXF1ZXN0Mi5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
CisgICAgdmVyc2lvbkNoYW5nZVJlcXVlc3QyLm9uc3VjY2VzcyA9IGluU2V0VmVyc2lvbjI7Cit9
CisKK2Z1bmN0aW9uIGluU2V0VmVyc2lvbjEoKQoreworICAgIGRlYnVnKCJzZXRWZXJzaW9uKCkg
IzEgY2FsbGJhY2siKTsKKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuc3RvcmUxID0gZGIuY3JlYXRl
T2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUxJykiKTsKKyAgICBzaG91bGRCZSgiKyt3aW5kb3cuc3Rh
dGUiLCAiMSIpOworICAgIHZhciByZXEgPSBldmFsQW5kTG9nKCJ3aW5kb3cuc3RvcmUxLnB1dCgn
YWFhJywgMTExKSIpOworICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
CisgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHNob3VsZEJlKCIr
K3dpbmRvdy5zdGF0ZSIsICIyIik7CisgICAgICAgIGhhbGZ3YXlEb25lKCk7CisgICAgfTsKK30K
KworZnVuY3Rpb24gaW5TZXRWZXJzaW9uMigpCit7CisgICAgZGVidWcoInNldFZlcnNpb24oKSAj
MiBjYWxsYmFjayIpOworICAgIHNob3VsZEJlKCIrK3dpbmRvdy5zdGF0ZSIsICI0Iik7CisgICAg
ZXZhbEFuZExvZygid2luZG93LnN0b3JlMiA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0LXN0
b3JlMicpIik7CisKKyAgICB2YXIgcmVxID0gZXZhbEFuZExvZygid2luZG93LnN0b3JlMi5wdXQo
J2JiYicsIDIyMikiKTsKKyAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OworICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICBzaG91bGRCZSgi
Kyt3aW5kb3cuc3RhdGUiLCAiNSIpOworICAgICAgICBoYWxmd2F5RG9uZSgpOworICAgIH07Cit9
CisKK3ZhciBjb3VudGVyID0gMDsKK2Z1bmN0aW9uIGhhbGZ3YXlEb25lKCkgCit7CisgICAgY291
bnRlciArPSAxOworICAgIGlmIChjb3VudGVyIDwgMikgeworICAgICAgICBzaG91bGRCZSgiKyt3
aW5kb3cuc3RhdGUiLCAiMyIpOworICAgICAgICBkZWJ1ZygiaGFsZndheSB0aGVyZS4uLiIgKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBzaG91bGRCZSgiKyt3aW5kb3cuc3RhdGUiLCAiNiIpOwor
ICAgICAgICBjaGVja1Jlc3VsdHMoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNoZWNrUmVzdWx0
cygpIHsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5kYi52ZXJzaW9uIiwgInZl
cnNpb24gMiIpOworICAgIHRyYW5zID0gZXZhbEFuZExvZygid2luZG93LnRyYW5zID0gZGIudHJh
bnNhY3Rpb24oWyd0ZXN0LXN0b3JlMScsICd0ZXN0LXN0b3JlMiddKSIpOworICAgIHN0b3JlID0g
ZXZhbEFuZExvZygid2luZG93LnN0b3JlID0gd2luZG93LnRyYW5zLm9iamVjdFN0b3JlKCd0ZXN0
LXN0b3JlMScpIik7CisgICAgcmVxID0gZXZhbEFuZExvZygid2luZG93LnJlcSA9IHdpbmRvdy5z
dG9yZS5nZXQoMTExKSIpOworICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7CisgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICJhYWEiKTsKKworICAgICAgICBz
dG9yZSA9IGV2YWxBbmRMb2coIndpbmRvdy5zdG9yZSA9IHdpbmRvdy50cmFucy5vYmplY3RTdG9y
ZSgndGVzdC1zdG9yZTInKSIpOworICAgICAgICByZXEgPSBldmFsQW5kTG9nKCJ3aW5kb3cucmVx
ID0gd2luZG93LnN0b3JlLmdldCgyMjIpIik7CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkg
eworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJldmVudC50YXJnZXQucmVzdWx0
IiwgImJiYiIpOworICAgICAgICAgICAgZG9uZSgpOyAgICAKKyAgICAgICAgfTsKKyAgICB9Owor
fQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwordGVzdCgpOworCis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM4OWU2N2I2ZjkwZWIwZDIxNjExZTdhZWZiZmIxZDFmNTA4NzQzZWYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNo
YW5nZS1leGNsdXNpdmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0Vuc3VyZSBWRVJT
SU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBkb2Vzbid0IHJ1biBjb25jdXJyZW50bHkgd2l0aCBvdGhl
ciB0cmFuc2FjdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWRE
QiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cu
bW96SW5kZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQord2luZG93LnN0
YXRlID0gJ3N0YXJ0aW5nJworaW5kZXhlZERCLm9wZW4oJ3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2
ZScpCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2NhbGxpbmcgc2V0VmVyc2lvbigpIC0gY2Fs
bGJhY2sgc2hvdWxkIHJ1biBpbW1lZGlhdGVseQorZGIuc2V0VmVyc2lvbigndmVyc2lvbiAxJykK
K2NhbGxpbmcgb3BlbigpIC0gY2FsbGJhY2sgc2hvdWxkIHdhaXQgdW50aWwgVkVSU0lPTl9DSEFO
R0UgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUKK2luZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5n
ZS1leGNsdXNpdmUnKQorc2V0VmVyc2lvbigpIGNhbGxiYWNrCitzdGFydGluZyB3b3JrIGluIFZF
UlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0Ug
c3RhcnRlZCcKK3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3Qtc3RvcmUnKQorc3Rv
cmUucHV0KDAsIDApCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCgxLCAxKQoraW4gcHV0
J3Mgb25zdWNjZXNzCitzdG9yZS5wdXQoMiwgMikKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUu
cHV0KDMsIDMpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg0LCA0KQoraW4gcHV0J3Mg
b25zdWNjZXNzCitzdG9yZS5wdXQoNSwgNSkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0
KDYsIDYpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK3N0b3JlLnB1dCg3LCA3KQoraW4gcHV0J3Mgb25z
dWNjZXNzCitzdG9yZS5wdXQoOCwgOCkKK2luIHB1dCdzIG9uc3VjY2Vzcworc3RvcmUucHV0KDks
IDkpCitpbiBwdXQncyBvbnN1Y2Nlc3MKK2VuZGluZyB3b3JrIGluIFZFUlNJT05fQ0hBTkdFIHRy
YW5zYWN0aW9uCit3aW5kb3cuc3RhdGUgPSAnVkVSU0lPTl9DSEFOR0UgZmluaXNoZWQnCitvcGVu
KCkgY2FsbGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIgYWZ0ZXIgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gZW5kcworUEFTUyB3aW5kb3cuc3RhdGUgaXMgIlZFUlNJT05fQ0hBTkdFIGZpbmlz
aGVkIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdl
LWV4Y2x1c2l2ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1j
aGFuZ2UtZXhjbHVzaXZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVlZDBhMzk0ZDk3ZTgzNzBiMDBkNmYz
YmJjNzRmZDQ5MzBlZDQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS5odG1sCkBAIC0wLDAgKzEsODcgQEAK
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJFbnN1cmUgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rp
b24gZG9lc24ndCBydW4gY29uY3VycmVudGx5IHdpdGggb3RoZXIgdHJhbnNhY3Rpb25zIik7Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKworCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGluZGV4ZWREQiA9
IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtp
dEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOworICAgIHNob3VsZEJlRmFsc2Uo
ImluZGV4ZWREQiA9PSBudWxsIik7CisgICAgb3BlbkRCQ29ubmVjdGlvbigpOworfQorCitmdW5j
dGlvbiBvcGVuREJDb25uZWN0aW9uKCkKK3sKKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuc3RhdGUg
PSAnc3RhcnRpbmcnIik7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVu
KCd2ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0g
b3BlblN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkKK3sKKyAgICB3aW5kb3cuZGIgPSBldmFs
QW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKworICAgIGRlYnVnKCJjYWxsaW5n
IHNldFZlcnNpb24oKSAtIGNhbGxiYWNrIHNob3VsZCBydW4gaW1tZWRpYXRlbHkiKTsKKyAgICB2
YXIgdmVyc2lvbkNoYW5nZVJlcXVlc3QgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCd2ZXJz
aW9uIDEnKSIpOworICAgIHZlcnNpb25DaGFuZ2VSZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVk
RXJyb3JDYWxsYmFjazsKKyAgICB2ZXJzaW9uQ2hhbmdlUmVxdWVzdC5vbnN1Y2Nlc3MgPSBpblNl
dFZlcnNpb247CisKKyAgICAvLyBhbmQgY29uY3VycmVudGx5Li4uCisKKyAgICBkZWJ1ZygiY2Fs
bGluZyBvcGVuKCkgLSBjYWxsYmFjayBzaG91bGQgd2FpdCB1bnRpbCBWRVJTSU9OX0NIQU5HRSB0
cmFuc2FjdGlvbiBpcyBjb21wbGV0ZSIpOworICAgIHZhciBvcGVuUmVxdWVzdCA9IGV2YWxBbmRM
b2coImluZGV4ZWREQi5vcGVuKCd2ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUnKSIpOworICAgIG9w
ZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5BZ2FpblN1Y2Nlc3M7CisgICAgb3BlblJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBpblNldFZl
cnNpb24oKQoreworICAgIGRlYnVnKCJzZXRWZXJzaW9uKCkgY2FsbGJhY2siKTsKKyAgICBkZWJ1
Zygic3RhcnRpbmcgd29yayBpbiBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiIpOworICAgIGV2
YWxBbmRMb2coIndpbmRvdy5zdGF0ZSA9ICdWRVJTSU9OX0NIQU5HRSBzdGFydGVkJyIpOworCisg
ICAgd2luZG93LnN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9y
ZSgndGVzdC1zdG9yZScpIik7CisgICAgd2luZG93LmNvdW50ID0gMDsKKyAgICBkb19hc3luY19w
dXRzKCk7CisKKyAgICBmdW5jdGlvbiBkb19hc3luY19wdXRzKCkgeworICAgICAgICB2YXIgcmVx
ID0gZXZhbEFuZExvZygic3RvcmUucHV0KCIgKyBjb3VudCArICIsICIgKyBjb3VudCArICIpIik7
CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAg
IHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgZGVidWcoImluIHB1
dCdzIG9uc3VjY2VzcyIpOworICAgICAgICAgICAgaWYgKCsrd2luZG93LmNvdW50IDwgMTApIHsK
KyAgICAgICAgICAgICAgICBkb19hc3luY19wdXRzKCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGRlYnVnKCJlbmRpbmcgd29yayBpbiBWRVJTSU9OX0NIQU5HRSB0cmFu
c2FjdGlvbiIpOworICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coIndpbmRvdy5zdGF0ZSA9ICdW
RVJTSU9OX0NIQU5HRSBmaW5pc2hlZCciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIG9wZW5BZ2FpblN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJvcGVu
KCkgY2FsbGJhY2sgLSB0aGlzIHNob3VsZCBhcHBlYXIgYWZ0ZXIgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gZW5kcyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0YXRl
IiwgIlZFUlNJT05fQ0hBTkdFIGZpbmlzaGVkIik7CisgICAgZG9uZSgpOworfQorCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZjBjNjMzYWM5MGUyZmVjYjYxMzE1MzE5NDQ2ZDZiNTUy
ODIzZjIwLi43NmMzNDZmNTY2OWU2N2JmZmJjOTM5ZGU4ZDJlM2MzZGU5MjIzMjg5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMTMgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBtYWtlIElEQkZhY3Rvcnkub3BlbiB3YWl0IGZvciBwZW5k
aW5nIHNldFZlcnNpb24gdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMwNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgcXVldWUgb2YgcGVuZGluZyBv
cGVuIGNhbGxzLCBzaW1pbGFyIHRvIHRoZSBxdWV1ZSBvZiBwZW5kaW5nCisgICAgICAgIHNldFZl
cnNpb24gY2FsbHMuIEVuc3VyZSBwZW5kaW5nIGNhbGxzIGFyZSBwcm9jZXNzZWQgaW4gdGhlIGNv
cnJlY3QKKyAgICAgICAgb3JkZXIgd2hlbiB0cmFuc2FjdGlvbnMgY29tcGxldGUuCisKKyAgICAg
ICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi5odG1sCisgICAg
ICAgICAgICAgICBzdG9yYWdlL2luZGV4ZWRkYi90d28tdmVyc2lvbi1jaGFuZ2VzLmh0bWwKKyAg
ICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS5o
dG1sCisKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGlu
Z09wZW5DYWxsOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsOjpQZW5kaW5nT3BlbkNhbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwcm9jZXNzUGVuZGlu
Z0NhbGxzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5D
b25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNs
b3NlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpjb21taXQpOgorCiAyMDExLTEwLTEzICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHI4OTkxNSk6IDxpbnB1dCB0eXBlPWVtYWls
IG11bHRpcGxlPiBkb24ndCBzaG93IHRoZSBkZWZhdWx0IHZhbHVlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA4ZmU5NzFhMjdj
OTExMjQ3NTljZmYzMjAzZGU4ZGNkODU0NWY2ODZkLi41ODFhYThjMDE1M2Q5NmUwOTkwODQxYzQ4
NjdmNTRmYTVhZmFiZjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTM5LDYgKzM5LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsIDog
cHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ09wZW5DYWxsPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVuZGlu
Z09wZW5DYWxsKGNhbGxiYWNrcykpOworICAgIH0KKyAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KKworcHJpdmF0ZToKKyAgICBQ
ZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAg
ICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTZXRW
ZXJzaW9uQ2FsbD4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdTZXRW
ZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0
YWJhc2VDYWxsYmFja3MpCkBAIC0xNzQsMTIgKzE5MCwyMCBAQCB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElE
QkNhbAogICAgICAgICBpZiAoKml0ICE9IGRhdGFiYXNlQ2FsbGJhY2tzKQogICAgICAgICAgICAg
KCppdCktPm9uVmVyc2lvbkNoYW5nZSh2ZXJzaW9uKTsKICAgICB9CisgICAgLy8gRklYTUU6IE9u
bHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhl
CisgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1
cCB0byBmaXJlLgorICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAwMTIzCiAgICAgaWYgKG1fZGF0
YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpID4gMSkgewogICAgICAgICBjYWxsYmFja3MtPm9uQmxv
Y2tlZCgpOwogICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0
VmVyc2lvbkNhbGwgPSBQZW5kaW5nU2V0VmVyc2lvbkNhbGw6OmNyZWF0ZSh2ZXJzaW9uLCBjYWxs
YmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKTsKICAgICAgICAgbV9wZW5kaW5nU2V0VmVyc2lvbkNh
bGxzLmFwcGVuZChwZW5kaW5nU2V0VmVyc2lvbkNhbGwpOwogICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAg
UmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gUGVu
ZGluZ1NldFZlcnNpb25DYWxsOjpjcmVhdGUodmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNh
bGxiYWNrcyk7CisgICAgICAgIG1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5hcHBlbmQocGVuZGlu
Z1NldFZlcnNpb25DYWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFJlZlB0cjxE
T01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7
CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKQEAg
LTIwMyw2ICsyMjcsNDMgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9u
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWYKICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2Vzcyh0cmFuc2FjdGlvbik7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6dHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiBwcnBUcmFuc2FjdGlvbikKK3sKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFu
c2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAg
ICAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CisgICAgICAg
IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworICAgIH0K
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkKFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBUcmFuc2FjdGlvbikK
K3sKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlv
biA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRy
YW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgeworICAgICAgICBBU1NFUlQodHJhbnNhY3Rpb24u
Z2V0KCkgPT0gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICAg
ICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgICAgIHBy
b2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCit7CisgICAgLy8gUGVuZGluZyBjYWxscyBtYXkg
YmUgcmVxdWV1ZWQgb3IgYWJvcnRlZAorICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nU2V0VmVyc2lv
bkNhbGw+ID4gcGVuZGluZ1NldFZlcnNpb25DYWxsczsKKyAgICBtX3BlbmRpbmdTZXRWZXJzaW9u
Q2FsbHMuc3dhcChwZW5kaW5nU2V0VmVyc2lvbkNhbGxzKTsKKyAgICB3aGlsZSAoIXBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgICAgICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lv
bkNhbGwgPSBwZW5kaW5nU2V0VmVyc2lvbkNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBzZXRW
ZXJzaW9uKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+dmVyc2lvbigpLCBwZW5kaW5nU2V0VmVyc2lv
bkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPmRhdGFiYXNlQ2FsbGJh
Y2tzKCksIGVjKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgfQorCisgICAgd2hpbGUgKCFt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJiYgbV9wZW5kaW5nU2V0VmVyc2lvbkNh
bGxzLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAg
ICBSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBtX3BlbmRpbmdPcGVu
Q2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIG9wZW5Db25uZWN0aW9uKHBlbmRpbmdPcGVuQ2Fs
bC0+Y2FsbGJhY2tzKCkpOworICAgIH0KK30KKwogUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKERPTVN0
cmluZ0xpc3QqIG9iamVjdFN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVOYW1l
cy0+bGVuZ3RoKCk7ICsraSkgewpAQCAtMjIxLDYgKzI4MiwxNCBAQCB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQogICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4oY2FsbGJhY2tzKSk7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAg
ICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKQorICAgICAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5k
KFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgIGVsc2UKKyAgICAgICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7Cit9CisKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
KQogewogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2Fs
bGJhY2tzOwpAQCAtMjI5LDEyICsyOTgsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcwogICAg
IGlmIChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKSA+IDEpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHdoaWxlICghbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgewotICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgUmVmUHRyPFBlbmRpbmdTZXRWZXJz
aW9uQ2FsbD4gcGVuZGluZ1NldFZlcnNpb25DYWxsID0gbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxz
LnRha2VGaXJzdCgpOwotICAgICAgICBzZXRWZXJzaW9uKHBlbmRpbmdTZXRWZXJzaW9uQ2FsbC0+
dmVyc2lvbigpLCBwZW5kaW5nU2V0VmVyc2lvbkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nU2V0
VmVyc2lvbkNhbGwtPmRhdGFiYXNlQ2FsbGJhY2tzKCksIGVjKTsKLSAgICAgICAgQVNTRVJUKCFl
Yyk7Ci0gICAgfQorICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggZjc3OTEyNTBkOTE4YWExOTg0
NDE1OWIyOTdiMjUzYjNiZTY0OGVmZS4uZThiMTA4NDUwMTMwNGNkMThmNWZmNjZhMWFkNDllOGFi
ZjZhY2JmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmgKQEAgLTU0LDcgKzU0LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBp
bnQ2NF90IEludmFsaWRJZCA9IDA7CiAgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aWQ7IH0KKworICAgIC8vIEZJWE1FOiBSZW5hbWUgIm9wZW4iIHRvIHNvbWV0aGluZyBtb3JlIGRl
c2NyaXB0aXZlLCBsaWtlIHJlZ2lzdGVyRnJvbnRFbmRDYWxsYmFja3MuCiAgICAgdm9pZCBvcGVu
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5Db25uZWN0
aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQpAQCAtNjgsMTEgKzcxLDE0IEBAIHB1YmxpYzoK
IAogICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iq
IHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuZ2V0KCk7IH0KKyAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25G
aW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogCiBw
cml2YXRlOgogICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKIAog
ICAgIHZvaWQgbG9hZE9iamVjdFN0b3JlcygpOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxs
cygpOwogCiAgICAgc3RhdGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICBzdGF0aWMgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwpAQCAtOTYsMTAgKzEwMiwx
NCBAQCBwcml2YXRlOgogICAgIE9iamVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVzOwogCiAgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
cjsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247CiAKICAgICBjbGFzcyBQZW5kaW5nU2V0VmVyc2lvbkNh
bGw7CiAgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdTZXRWZXJzaW9uQ2FsbD4gPiBtX3BlbmRpbmdT
ZXRWZXJzaW9uQ2FsbHM7CiAKKyAgICBjbGFzcyBQZW5kaW5nT3BlbkNhbGw7CisgICAgRGVxdWU8
UmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gPiBtX3BlbmRpbmdPcGVuQ2FsbHM7CisKICAgICB0eXBl
ZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gPiBEYXRhYmFzZUNh
bGxiYWNrc1NldDsKICAgICBEYXRhYmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcAppbmRleCA1MWM1MGM0NTkwMjg0NDNiNzY2ZjY5MDI3OWZjYjAwYmY0M2RmOTdlLi40
YzhiOTBiNmEzZDNlMmY1YjU2Nzk3MzU0NTZmMWQwMGIxOWVkMDBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC0xMDksNyArMTA5
LDkgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKIAogICAgIElEQkRhdGFiYXNlQmFja2VuZE1h
cDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZp
ZXIpOwogICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewotICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhpdC0+c2Vjb25kKTsKKyAgICAgICAgLy8gSWYgaXQncyBh
bHJlYWR5IGJlZW4gb3BlbmVkLCB3ZSBoYXZlIHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nCisgICAg
ICAgIC8vIHNldFZlcnNpb24gY2FsbHMgdG8gY29tcGxldGUuCisgICAgICAgIGl0LT5zZWNvbmQt
Pm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwCmluZGV4IDE1NmNiODlhOWZiMDlkYTUwNGY0NWE5NzhlMDI3M2VhM2E2YTU2NGEuLjAxNWRh
MThkNjlhODI4YzU1NzE3OWEwZmMxYWYwYzEyOTMzNjJiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMTMxLDYg
KzEzMSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQoKQogICAgIG1f
Y2FsbGJhY2tzLT5vbkFib3J0KCk7CiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKICAgICBBU1NFUlQoIW1fZGF0YWJh
c2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOworICAgIG1fZGF0
YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CiAgICAgbV9kYXRhYmFzZSA9IDA7CiB9
CiAKQEAgLTE3MSw2ICsxNzIsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnN0
YXJ0KCkKIAogICAgIG1fc3RhdGUgPSBTdGFydFBlbmRpbmc7CiAgICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFydFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1f
ZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0aGlzKTsKIH0KIAogdm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQpAQCAtMTg2LDYgKzE4OCw3IEBAIHZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKICAgICBtX3RyYW5zYWN0aW9uLT5jb21taXQo
KTsKICAgICBtX2NhbGxiYWNrcy0+b25Db21wbGV0ZSgpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKICAgICBtX2RhdGFiYXNlID0gMDsK
IH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>