<?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>67684</bug_id>
          
          <creation_ts>2011-09-06 16:40:15 -0700</creation_ts>
          <short_desc>[Chromium/FileWriter] race condition in FileWriter completion can lead to assert</short_desc>
          <delta_ts>2011-09-27 18:45:22 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Eric U.">ericu</reporter>
          <assigned_to name="Eric U.">ericu</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>462989</commentid>
    <comment_count>0</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-09-06 16:40:15 -0700</bug_when>
    <thetext>In FileWriter.cpp, when we complete a FileWriter action [didWrite, didTruncate, or didFail] we post a task to notify the user asynchronously.  We only update m_readyState when that task gets executed.  If, in the window between completion and the notification, we get a cancel request, we&apos;ll pass it through to a backend that knows it&apos;s already done.  On Chromium&apos;s implementation, this leads to an assertion failure.

The fix is to prevent any action that would be illegal in that interim state, perhaps by keying off of m_blobBeingWritten not being set or m_truncateLength being invalid.  The assertion fix is just to fix stop(), but abort() should also be handled.

See http://code.google.com/p/chromium/issues/detail?id=94895 for sample code that will cause the assertion failure [also attached].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462990</commentid>
    <comment_count>1</comment_count>
      <attachid>106516</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-09-06 16:40:48 -0700</bug_when>
    <thetext>Created attachment 106516
Repro case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471283</commentid>
    <comment_count>2</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-09-21 17:09:24 -0700</bug_when>
    <thetext>The spec for these events has just changed as well [rolling in changes discussed in May].  This bug will require enough changes that it&apos;s worth taking the new spec into account while fixing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471290</commentid>
    <comment_count>3</comment_count>
      <attachid>108256</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-09-21 17:20:50 -0700</bug_when>
    <thetext>Created attachment 108256
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473441</commentid>
    <comment_count>4</comment_count>
      <attachid>108256</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-26 15:22:37 -0700</bug_when>
    <thetext>Comment on attachment 108256
Patch

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

Looks close!

&gt; LayoutTests/fast/filesystem/resources/file-writer-abort-continue.js:20
&gt; +    onwritestart : onWriteStart0,

I think these methods like &quot;onWriteStart0&quot; would be better named if they indicated what they did as opposed to when they are called.

For example &quot;onWriteStart0&quot; could be &quot;abortWriter&quot;.

&quot;onAbort0&quot; could be &quot;logAbort&quot;

&gt; LayoutTests/fast/filesystem/resources/file-writer-abort-continue.js:21
&gt; +    onwrite : onError,

I don&apos;t see onError defined anywhere.

&gt; LayoutTests/fast/filesystem/resources/file-writer-abort-continue.js:62
&gt; +// the followon action.

follow on?

&gt; LayoutTests/fast/filesystem/resources/file-writer-abort.js:58
&gt; +    cleanUp();

where is cleanUp?

&gt; Source/WebCore/fileapi/FileWriter.cpp:82
&gt; +    if (writer() &amp;&amp; m_readyState == WRITING &amp;&amp; m_backendIsActive &amp;&amp; (m_queuedOperation == QueuedOperationNone))

Odd to add parens for the == at the end when the other == doesn&apos;t have them. (I think we avoid them in this case but if you want them, add them for m_readyState as well.)

&gt; Source/WebCore/fileapi/FileWriter.cpp:100
&gt; +    if (m_recursionDepth &gt; kMaxRecursionDepth) {

Where is the test for this?

&gt; Source/WebCore/fileapi/FileWriter.cpp:109
&gt; +    if (m_backendIsActive) // We must be waiting for an abort to complete.

&quot; // We must be waiting for an abort to complete.&quot;
How do you know that? ok, I see because m_readyState != WRITING and m_backendIsActive

&gt; Source/WebCore/fileapi/FileWriter.cpp:112
&gt; +        writer()-&gt;write(position(), m_blobBeingWritten.get());

It feels ugly to have this here an in the switch statement.

Can you pull that out to one place?

I&apos;m thinking of something like this:

ASSERT(m_readyState != WRITING);
ASSERT(m_queuedOperation == QueuedOperationNone);

if (m_backendIsActive) // We must be waiting for an abort to complete.
  m_queuedOperation = operation;
else {
  switch (operation) {
// Something similar to what you have in FileWriter::didFail right now.
  }
}

&gt; Source/WebCore/fileapi/FileWriter.cpp:136
&gt; +    if (m_recursionDepth &gt; kMaxRecursionDepth) {

Where is the test for this?

&gt; Source/WebCore/fileapi/FileWriter.cpp:-132
&gt; -        setError(FileError::INVALID_STATE_ERR, ec);

Is there is test that verifies this is no longer an error?

&gt; Source/WebCore/fileapi/FileWriter.cpp:211
&gt; +            writer()-&gt;write(position(), m_blobBeingWritten.get());

Do I get an event from this? If so, could I do an abort and then another write which would get messed up by the m_queuedOperation = QueuedOperationNone; below?

&gt; Source/WebCore/fileapi/FileWriter.cpp:219
&gt; +        default:

Omit the &quot;default&quot; to get the benefit of the compiler detecting when other enums are added.

Shouldn&apos;t this case also be able to do ASSERT(m_readyState == WRITING);?

&gt; Source/WebCore/fileapi/FileWriter.cpp:224
&gt; +    } else {

ASSERT(m_queuedOperation == QueuedOperationNone); ?

&gt; Source/WebCore/fileapi/FileWriter.cpp:234
&gt; +    m_truncateLength = -1;

Is there a test that would fail if this were not set here?

&gt; Source/WebCore/fileapi/FileWriter.cpp:240
&gt; +            fireEvent(eventNames().errorEvent);

There were no tests affected by this change? Why not?

(Does one of the added tests fail if I were to revert this part of the change?)

&gt; Source/WebCore/fileapi/FileWriter.h:110
&gt; +      QueuedOperationNone,

indent further

&gt; Source/WebCore/fileapi/FileWriter.h:118
&gt; +    bool m_backendIsActive;

What does this mean &quot;backendIsAction&quot;?

I think it means &quot;m_isOperationInProgress&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473442</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-26 15:23:25 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; The spec for these events has just changed as well [rolling in changes discussed in May].  This bug will require enough changes that it&apos;s worth taking the new spec into account while fixing it.

It is nice to keep changes more focused if possible. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474160</commentid>
    <comment_count>6</comment_count>
      <attachid>108884</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-09-27 12:51:24 -0700</bug_when>
    <thetext>Created attachment 108884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474162</commentid>
    <comment_count>7</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-09-27 12:52:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 108256 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108256&amp;action=review
&gt; 
&gt; Looks close!
&gt; 
&gt; &gt; LayoutTests/fast/filesystem/resources/file-writer-abort-continue.js:20
&gt; &gt; +    onwritestart : onWriteStart0,
&gt; 
&gt; I think these methods like &quot;onWriteStart0&quot; would be better named if they indicated what they did as opposed to when they are called.
&gt; 
&gt; For example &quot;onWriteStart0&quot; could be &quot;abortWriter&quot;.
&gt; 
&gt; &quot;onAbort0&quot; could be &quot;logAbort&quot;

Done.

&gt; &gt; LayoutTests/fast/filesystem/resources/file-writer-abort-continue.js:21
&gt; &gt; +    onwrite : onError,
&gt; 
&gt; I don&apos;t see onError defined anywhere.

It&apos;s in file-writer-utils.js.

&gt; &gt; LayoutTests/fast/filesystem/resources/file-writer-abort-continue.js:62
&gt; &gt; +// the followon action.
&gt; 
&gt; follow on?

Done.

&gt; &gt; LayoutTests/fast/filesystem/resources/file-writer-abort.js:58
&gt; &gt; +    cleanUp();
&gt; 
&gt; where is cleanUp?

file-writer-utils.js.  Also, I&apos;d forgotten to set fileEntryForCleanup for it; fixed.

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:82
&gt; &gt; +    if (writer() &amp;&amp; m_readyState == WRITING &amp;&amp; m_backendIsActive &amp;&amp; (m_queuedOperation == QueuedOperationNone))
&gt; 
&gt; Odd to add parens for the == at the end when the other == doesn&apos;t have them. (I think we avoid them in this case but if you want them, add them for m_readyState as well.)

Yup; removed.

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:100
&gt; &gt; +    if (m_recursionDepth &gt; kMaxRecursionDepth) {
&gt; 
&gt; Where is the test for this?

Added file-writer-abort-depth.js

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:109
&gt; &gt; +    if (m_backendIsActive) // We must be waiting for an abort to complete.
&gt; 
&gt; &quot; // We must be waiting for an abort to complete.&quot;
&gt; How do you know that? ok, I see because m_readyState != WRITING and m_backendIsActive

Expanded comment.

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:112
&gt; &gt; +        writer()-&gt;write(position(), m_blobBeingWritten.get());
&gt; 
&gt; It feels ugly to have this here an in the switch statement.
&gt; 
&gt; Can you pull that out to one place?
&gt; 
&gt; I&apos;m thinking of something like this:
&gt; 
&gt; ASSERT(m_readyState != WRITING);
&gt; ASSERT(m_queuedOperation == QueuedOperationNone);
&gt; 
&gt; if (m_backendIsActive) // We must be waiting for an abort to complete.
&gt;   m_queuedOperation = operation;
&gt; else {
&gt;   switch (operation) {
&gt; // Something similar to what you have in FileWriter::didFail right now.
&gt;   }
&gt; }

I see what you&apos;re getting at, but I don&apos;t see how to make it cleaner than it is.
The three callsites that start operations in the backend are in write, truncate, and didFail.
The first is picking between write and enqueue-a-write.  The second is choosing between truncate and enqueue-a-truncation.  The third is choosing between start-enqueued-write, start-enqueued-truncation, and signalCompletion.  If I combine them, I need a function that can choose between write, truncate, [start-enqueued is pretty much the same code with different asserts], enqueue-a-write, enqueue-a-truncation, and signalCompletion.  That seems like a much more complex solution than what I&apos;ve got now.  Also, either I pass in flags to tell it which operation I&apos;m requesting, making it a lot like two functions combined with a flag to pick between them, or I don&apos;t, and it&apos;s got to figure it out all over again, despite the caller knowing which it was.

In terms of code size, I think you&apos;re shortening write and truncate by a maximum of 3 lines each, and adding significantly more than that to the shared function.

Given the choice, I guess I&apos;d go with the flags approach; I&apos;ll do that if you feel strongly about it.

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:136
&gt; &gt; +    if (m_recursionDepth &gt; kMaxRecursionDepth) {
&gt; 
&gt; Where is the test for this?

Added file-writer-abort-depth.js.

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:-132
&gt; &gt; -        setError(FileError::INVALID_STATE_ERR, ec);
&gt; 
&gt; Is there is test that verifies this is no longer an error?

Added to file-writer-abort.js

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:211
&gt; &gt; +            writer()-&gt;write(position(), m_blobBeingWritten.get());
&gt; 
&gt; Do I get an event from this? If so, could I do an abort and then another write which would get messed up by the m_queuedOperation = QueuedOperationNone; below?

No, the event gets send when the user calls write() or truncate(), so we don&apos;t need to send an event here.
And those methods check+set readyState, so you can&apos;t queue more than one operation at a time; you have to abort in between.

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:219
&gt; &gt; +        default:
&gt; 
&gt; Omit the &quot;default&quot; to get the benefit of the compiler detecting when other enums are added.

Hmm...I usually add the default to get the benefit of a sensible runtime error on invalid/uninitialized values.  Does WebKit have a standard behavior in this case?  It seems ugly to add a runtime check before the switch, then use the switch for the compile-time check.

&gt; Shouldn&apos;t this case also be able to do ASSERT(m_readyState == WRITING);?

Yup; added.

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:224
&gt; &gt; +    } else {
&gt; 
&gt; ASSERT(m_queuedOperation == QueuedOperationNone); ?

Added.

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:234
&gt; &gt; +    m_truncateLength = -1;
&gt; 
&gt; Is there a test that would fail if this were not set here?

No; I&apos;ll add some asserts.  It&apos;s really just for cleanliness and ease of debugging problems--there&apos;s no way a user should be able to detect that value, and no path that should use it.  But since the asserts can check it, I should add them.

&gt; &gt; Source/WebCore/fileapi/FileWriter.cpp:240
&gt; &gt; +            fireEvent(eventNames().errorEvent);
&gt; 
&gt; There were no tests affected by this change? Why not?
&gt; 
&gt; (Does one of the added tests fail if I were to revert this part of the change?)

file-writer-abort-continue.js will fail if you revert this part of the change.
It sets onerror to onError, which will log it if we get an error event when we shouldn&apos;t.
Previously we weren&apos;t testing the abort path at all.

&gt; &gt; Source/WebCore/fileapi/FileWriter.h:110
&gt; &gt; +      QueuedOperationNone,
&gt; 
&gt; indent further

Fixed.

&gt; &gt; Source/WebCore/fileapi/FileWriter.h:118
&gt; &gt; +    bool m_backendIsActive;
&gt; 
&gt; What does this mean &quot;backendIsAction&quot;?
&gt; 
&gt; I think it means &quot;m_isOperationInProgress&quot;?

If you prefer ;&apos;&gt;.
Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474186</commentid>
    <comment_count>8</comment_count>
      <attachid>108884</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 13:25:13 -0700</bug_when>
    <thetext>Comment on attachment 108884
Patch

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

New failing tests:
fast/filesystem/file-writer-abort-depth.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474217</commentid>
    <comment_count>9</comment_count>
      <attachid>108884</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-27 14:11:06 -0700</bug_when>
    <thetext>Comment on attachment 108884
Patch

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

r- because I know you are doing one more revision (regarding the code rearrangement thing we discussed in email).

There are a few things below that might be nice to address but it looks good.

&gt; LayoutTests/fast/filesystem/resources/file-writer-abort-continue.js:23
&gt; +    onwriteend : checkLengthAndCallFollowOnAction

Thanks. I find it much easier to figure out what this test is doing now!

I personally think this FollowOnAction makes the code harder to read for very minimal gain but it is ok to leave it as is....

&gt; LayoutTests/fast/filesystem/resources/file-writer-abort-continue.js:47
&gt; +    onwriteend : onWriteEnd3

&quot;onWriteEnd3&quot; vestige of the old unreadable code? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474237</commentid>
    <comment_count>10</comment_count>
      <attachid>108898</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-09-27 14:29:37 -0700</bug_when>
    <thetext>Created attachment 108898
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474240</commentid>
    <comment_count>11</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-09-27 14:30:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 108884 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108884&amp;action=review
&gt; 
&gt; r- because I know you are doing one more revision (regarding the code rearrangement thing we discussed in email).

Done; thanks again.

&gt; There are a few things below that might be nice to address but it looks good.
&gt; 
&gt; &gt; LayoutTests/fast/filesystem/resources/file-writer-abort-continue.js:23
&gt; &gt; +    onwriteend : checkLengthAndCallFollowOnAction
&gt; 
&gt; Thanks. I find it much easier to figure out what this test is doing now!
&gt; 
&gt; I personally think this FollowOnAction makes the code harder to read for very minimal gain but it is ok to leave it as is....
&gt; 
&gt; &gt; LayoutTests/fast/filesystem/resources/file-writer-abort-continue.js:47
&gt; &gt; +    onwriteend : onWriteEnd3
&gt; 
&gt; &quot;onWriteEnd3&quot; vestige of the old unreadable code? :)

Fixed.

Also fixed a typo in a test name and changed QueuedOperation to Operation, since it&apos;s now in more general use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474241</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-27 14:32:34 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt;  changed QueuedOperation to Operation, since it&apos;s now in more general use.

Yeah, I was thinking something like that might be good with the code re-use change (but I didn&apos;t mention it). I&apos;m glad you did that!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474281</commentid>
    <comment_count>13</comment_count>
      <attachid>108898</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 15:15:58 -0700</bug_when>
    <thetext>Comment on attachment 108898
Patch

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

New failing tests:
fast/filesystem/file-writer-abort-depth.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474380</commentid>
    <comment_count>14</comment_count>
      <attachid>108938</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-09-27 17:12:01 -0700</bug_when>
    <thetext>Created attachment 108938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474381</commentid>
    <comment_count>15</comment_count>
      <attachid>108938</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-27 17:13:11 -0700</bug_when>
    <thetext>Comment on attachment 108938
Patch

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

&gt; LayoutTests/fast/filesystem/resources/file-writer-abort-depth.js:53
&gt; +        }

So this was the culprit :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474428</commentid>
    <comment_count>16</comment_count>
      <attachid>108938</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 18:45:16 -0700</bug_when>
    <thetext>Comment on attachment 108938
Patch

Clearing flags on attachment: 108938

Committed r96177: &lt;http://trac.webkit.org/changeset/96177&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474429</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 18:45:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>106516</attachid>
            <date>2011-09-06 16:40:48 -0700</date>
            <delta_ts>2011-09-06 16:40:48 -0700</delta_ts>
            <desc>Repro case</desc>
            <filename>timerbased_renderer_null-ptr_crash_repro.html</filename>
            <type>text/html</type>
            <size>1342</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">PGh0bWw+DQo8Ym9keT4NCg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KDQpmdW5j
dGlvbiBlbXB0eUZ1bmN0aW9uKCkgew0KfQ0KDQpmdW5jdGlvbiBlcnJvckhhbmRsZXIoZSkgew0K
ICBjb25zb2xlLmxvZygnRXJyb3IgJytlLm1lc3NhZ2UpOw0KDQp9DQoNCmZ1bmN0aW9uIHJlYWRG
aWxlKGZFbnRyeSkNCnsNCiAgZkVudHJ5LmZpbGUoZnVuY3Rpb24oZmlsZSkgew0KICAgIHZhciBy
ZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOw0KICAgIHJlYWRlci5vbmVycm9yPWZ1bmN0aW9uKGUp
IHsNCiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciAnK2UubWVzc2FnZSk7DQogICAgfQ0KICAgIHJl
YWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbihlKSB7DQogICAgICBjb25zb2xlLmxvZyh0aGlzLnJl
c3VsdC50b1N0cmluZygpKTsgLy8gdG8gY2hlY2sgcmVzdWx0CQ0KICAgICAgd3JpdGVGaWxlKGZF
bnRyeSk7CQ0KDQogICAgfQ0KICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOw0KICB9LCBlcnJv
ckhhbmRsZXIpOw0KDQp9DQoNCmZ1bmN0aW9uIHdyaXRlRmlsZShmRW50cnkpDQp7DQoNCiAgZkVu
dHJ5LmNyZWF0ZVdyaXRlcihmdW5jdGlvbihGaWxlV3JpdGVyKSB7DQoNCiAgICBGaWxlV3JpdGVy
Lm9uZXJyb3I9ZnVuY3Rpb24oZSkgew0KICAgICAgY29uc29sZS5sb2coJ0Vycm9yICcrZS5tZXNz
YWdlKTsNCiAgICB9DQogICAgRmlsZVdyaXRlci5vbndyaXRlZW5kID0gZnVuY3Rpb24oZSkgew0K
ICAgICAgc2V0SW50ZXJ2YWwoIndpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTt3aW5kb3cuY2xvc2Uo
KTsiLDIwMCk7DQogICAgICByZWFkRmlsZShmRW50cnkpOwkNCiAgICB9Ow0KDQogICAgdmFyIGJi
ID0gbmV3IHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcigpOw0KICAgIGJiLmFwcGVuZCgnSGVsbG8g
V29ybGQnKTsNCiAgICBGaWxlV3JpdGVyLndyaXRlKGJiLmdldEJsb2IoJ3RleHQvcGxhaW4nKSk7
DQogIH0sIGVycm9ySGFuZGxlcik7IA0KfQ0KDQpmdW5jdGlvbiBvbkluaXRGcyhmcykgew0KICBm
cy5yb290LmdldEZpbGUoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjExMTExMTExKS50b1N0cmlu
ZygpLCB7Y3JlYXRlOiB0cnVlfSwgZnVuY3Rpb24oZmlsZUVudHJ5KSB7DQogICAgd3JpdGVGaWxl
KGZpbGVFbnRyeSk7DQogICANCiAgfSwgZXJyb3JIYW5kbGVyKTsgICANCn0NCg0Kc2V0SW50ZXJ2
YWwoImVtcHR5RnVuY3Rpb24oKSIsMSk7DQp3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0o
d2luZG93LlRFTVBPUkFSWSwgMTAyNCoxMDI0LCBvbkluaXRGcywgZXJyb3JIYW5kbGVyKTsNCg0K
PC9zY3JpcHQ+DQoNCg0KPC9ib2R5Pg0KPC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108256</attachid>
            <date>2011-09-21 17:20:50 -0700</date>
            <delta_ts>2011-09-27 12:51:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67684-20110921172044.patch</filename>
            <type>text/plain</type>
            <size>21878</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU2ODUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ODFhZGUzMjViNDBiOWMwYWVkN2Rj
OWE4YTFjNDRlZDZiMWVmOTI4Li4wOTVkN2ZmMmMyZGRjZDE5MDEyOGZlOTI1OGQwNDM2NmUyYWQ4
MjU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMjEgIEVyaWMgVWhyaGFuZSAgPGVy
aWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW0vRmlsZVdyaXRlcl0gcmFjZSBj
b25kaXRpb24gaW4gRmlsZVdyaXRlciBjb21wbGV0aW9uIGNhbiBsZWFkIHRvIGFzc2VydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZmlsZXN5
c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJv
cnQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci1hYm9ydC1jb250aW51ZS5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qczogQWRkZWQuCisgICAgICAgICogZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanM6IEZpeGVkIGEgY29w
eS1wYXN0ZSBlcnJvci4KKwogMjAxMS0wOS0yMSAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJh
aXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBSZW5kZXJCb3g6OnBhaW50TWFza0lt
YWdlcyB3aGVuIEdyYXBoaWNzQ29udGV4dCdzIHBhaW50aW5nIGlzIGRpc2FibGVkCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtY29udGlu
dWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVy
LWFib3J0LWNvbnRpbnVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGQ2MDk5ZTU1N2JmNmQz
MDcxMzA0OGFjMTZlM2U3NGRhYjk2N2RlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDI2IEBACitUZXN0IHRoYXQgRmlsZVdyaXRlciBjYW4gY29udGludWUgaW1tZWRp
YXRlbHkgYWZ0ZXIgYW4gYWJvcnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworc3Rh
cnRpbmcgdGVzdAorUEFTUyAxMTAwMDAwIGlzIGJsb2JTaXplCitQQVNTIENhbGxpbmcgYWJvcnQK
K1BBU1MgU2F3IGFib3J0CitQQVNTIFNhdyB3cml0ZWVuZCAwLgorUEFTUyB3cml0ZXIubGVuZ3Ro
IGlzIDAKK1BBU1MgZm9sbG93T25BY3Rpb24gPT0gMSB8fCBmb2xsb3dPbkFjdGlvbiA9PSAzIGlz
IHRydWUKK1BBU1MgMTEwMDAwMCBpcyBibG9iU2l6ZQorUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDEx
MDAwMDAKK1BBU1MgU2F3IHdyaXRlZW5kIDEuCitQQVNTIDExMDAwMDAgaXMgYmxvYlNpemUKK1BB
U1MgQ2FsbGluZyBhYm9ydAorUEFTUyBTYXcgYWJvcnQKK1BBU1MgU2F3IHdyaXRlZW5kIDAuCitQ
QVNTIHdyaXRlci5sZW5ndGggaXMgMTEwMDAwMAorUEFTUyBmb2xsb3dPbkFjdGlvbiA9PSAxIHx8
IGZvbGxvd09uQWN0aW9uID09IDMgaXMgdHJ1ZQorUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDcKK1BB
U1MgQWxsIHRlc3RzIGNvbXBsZXRlLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzViZmE3
ODFhOWI1YzMxY2I1ZDY0YjhlNjYzNWExZTg2OGMyNTcyNAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1s
CkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorICAgIDx0aXRsZT5GaWxlIFdyaXRlciBBYm9ydCBhbmQgQ29udGludWU8L3RpdGxl
PgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwv
c2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9k
eT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGUtd3JpdGVyLWFib3J0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS9maWxlLXdyaXRlci1hYm9ydC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM5ZDUzNGYzYzZm
YmFmMWE0MzAzZTM3OGQ4ZTUzYWEzNzFkNWQwMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMiBAQAorVGVzdCB0aGF0IEZpbGVXcml0ZXIgaGFuZGxlcyBhYm9ydCBwcm9wZXJseS4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitzdGFydGluZyB0ZXN0CitQQVNTIENhbGxp
bmcgYWJvcnQKK1BBU1MgU2F3IGFib3J0CitQQVNTIFNhdyB3cml0ZWVuZC4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1
NGY2OWJiZGZkZWQxNTlhZDFjZWE3ZWM2MjAzNTczYzljMDc5NjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQuaHRtbApAQCAt
MCwwICsxLDE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorIDxoZWFkPgorICAgIDxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKyAgICA8dGl0bGU+RmlsZSBXcml0ZXIgQWJvcnQ8L3RpdGxlPgorICAgIDxzY3JpcHQgc3Jj
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4K
KyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLXdyaXRlci1h
Ym9ydC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1j
b250aW51ZS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13
cml0ZXItYWJvcnQtY29udGludWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODVhMTA0ZDJjOGE5ZjNjMzNmZmIz
NmMzMmRjZDI0ZWM4NjY3YmYxNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGludWUuanMKQEAgLTAs
MCArMSwxMzcgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRz
KCdmcy13b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnZmlsZS13cml0ZXIt
dXRpbHMuanMnKTsKK30KKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBGaWxlV3JpdGVyIGNhbiBj
b250aW51ZSBpbW1lZGlhdGVseSBhZnRlciBhbiBhYm9ydC4iKTsKKwordmFyIHNhd1dyaXRlU3Rh
cnQ7Cit2YXIgc2F3QWJvcnQ7Cit2YXIgc2F3V3JpdGVFbmQ7Cit2YXIgd3JpdGVyOwordmFyIGV4
cGVjdGVkTGVuZ3RoOwordmFyIHRydW5jYXRlTGVuZ3RoID0gNzsKK3ZhciBibG9iU2l6ZSA9IDEx
MDAwMDA7CisKK3ZhciBtZXRob2RTZXQgPSBbCisgIHsgIC8vIFNldHVwIG1ldGhvZCBzZXQgdGhh
dCB3cml0ZXMsIHRoZW4gYWJvcnRzIHRoYXQgd3JpdGUgYmVmb3JlIGNvbXBsZXRpb24uCisgICAg
YWN0aW9uIDogc3RhcnRXcml0ZSwKKyAgICB2ZXJpZnlMZW5ndGggOiAwLAorICAgIG9ud3JpdGVz
dGFydCA6IG9uV3JpdGVTdGFydDAsCisgICAgb253cml0ZSA6IG9uRXJyb3IsCisgICAgb25hYm9y
dCA6IG9uQWJvcnQwLAorICAgIG9ud3JpdGVlbmQgOiBvbldyaXRlRW5kMAorICB9LAorICB7ICAv
LyBNZXRob2Qgc2V0IHRoYXQgZG9lcyBhIGNvbXBsZXRlIHdyaXRlLgorICAgIGFjdGlvbiA6IHN0
YXJ0V3JpdGUsCisgICAgdmVyaWZ5TGVuZ3RoIDogYmxvYlNpemUsCisgICAgb253cml0ZXN0YXJ0
IDogbm9wLAorICAgIG9ud3JpdGUgOiBub3AsCisgICAgb25hYm9ydCA6IG9uRXJyb3IsCisgICAg
b253cml0ZWVuZCA6IG9uV3JpdGVFbmQxCisgIH0sCisgIHsgIC8vIFNldHVwIG1ldGhvZCBzZXQg
dGhhdCB3cml0ZXMsIHRoZW4gYWJvcnRzIHRoYXQgd3JpdGUgYmVmb3JlIGNvbXBsZXRpb24uCisg
ICAgYWN0aW9uIDogc3RhcnRXcml0ZSwKKyAgICB2ZXJpZnlMZW5ndGggOiBibG9iU2l6ZSwgIC8v
IExlZnQgb3ZlciBmcm9tIHRoZSBwcmV2aW91cyB0ZXN0LgorICAgIG9ud3JpdGVzdGFydCA6IG9u
V3JpdGVTdGFydDAsCisgICAgb253cml0ZSA6IG9uRXJyb3IsCisgICAgb25hYm9ydCA6IG9uQWJv
cnQwLAorICAgIG9ud3JpdGVlbmQgOiBvbldyaXRlRW5kMAorICB9LAorICB7IC8vIE1ldGhvZCBz
ZXQgdGhhdCBkb2VzIGEgY29tcGxldGUgdHJ1bmNhdGUuCisgICAgYWN0aW9uIDogc3RhcnRUcnVu
Y2F0ZSwKKyAgICB2ZXJpZnlMZW5ndGggOiB0cnVuY2F0ZUxlbmd0aCwKKyAgICBvbndyaXRlc3Rh
cnQgOiBub3AsCisgICAgb253cml0ZSA6IG5vcCwKKyAgICBvbmFib3J0IDogb25FcnJvciwKKyAg
ICBvbndyaXRlZW5kIDogb25Xcml0ZUVuZDMKKyAgfV07CisKK2Z1bmN0aW9uIG5vcCgpIHsKK30K
KworZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgeworICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9i
QnVpbGRlcigpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICBi
Yi5hcHBlbmQoYmxvYik7CisgICAgfQorICAgIHJldHVybiBiYi5nZXRCbG9iKCk7Cit9CisKKy8v
IFRoZXNlIG1ldGhvZHMgc2V0IHVwIGEgd3JpdGUsIGFib3J0IGl0IGFzIHNvb24gYXMgaXQgc3Rh
cnRzLCB0aGVuIGluaXRpYXRlCisvLyB0aGUgZm9sbG93b24gYWN0aW9uLgorZnVuY3Rpb24gb25X
cml0ZVN0YXJ0MChlKSB7CisgICAgdGVzdFBhc3NlZCgiQ2FsbGluZyBhYm9ydCIpOworICAgIHdy
aXRlci5hYm9ydCgpOworfQorCitmdW5jdGlvbiBvbkFib3J0MChlKSB7CisgICAgdGVzdFBhc3Nl
ZCgiU2F3IGFib3J0Iik7Cit9CisKK2Z1bmN0aW9uIG9uV3JpdGVFbmQwKGUpIHsKKyAgICB0ZXN0
UGFzc2VkKCJTYXcgd3JpdGVlbmQgMC4iKTsKKyAgICBzaG91bGRCZSgid3JpdGVyLmxlbmd0aCIs
ICIiICsgZXhwZWN0ZWRMZW5ndGgpOworICAgIGRvRm9sbG93T25BY3Rpb24oKTsKK30KKworLy8g
Rm9yIHRoZSBzZWNvbmQgbWV0aG9kIHNldCwgdmVyaWZ5IGNvbXBsZXRpb24gYW5kIG1vdmUgb24g
dG8gdGhlIG5leHQgdGVzdC4KK2Z1bmN0aW9uIG9uV3JpdGVFbmQxKGUpIHsKKyAgICBzaG91bGRC
ZSgid3JpdGVyLmxlbmd0aCIsICIiICsgZXhwZWN0ZWRMZW5ndGgpOworICAgIHRlc3RQYXNzZWQo
IlNhdyB3cml0ZWVuZCAxLiIpOworICAgIHJ1blRlc3QoMiwgMyk7Cit9CisKK2Z1bmN0aW9uIG9u
V3JpdGVFbmQzKGUpIHsKKyAgICBzaG91bGRCZSgid3JpdGVyLmxlbmd0aCIsICIiICsgZXhwZWN0
ZWRMZW5ndGgpOworICAgIHRlc3RQYXNzZWQoIkFsbCB0ZXN0cyBjb21wbGV0ZS4iKTsKKyAgICBj
bGVhblVwKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0V3JpdGUoKSB7CisgICAgLy8gTGV0J3MgbWFr
ZSBpdCBhYm91dCBhIG1lZ2FieXRlLgorICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRl
cigpOworICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0iKTsKKyAgICB2YXIgYmxvYiA9IHRlblhC
bG9iKGJiLmdldEJsb2IoKSk7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2Ig
PSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9
IHRlblhCbG9iKGJsb2IpOworICAgIHZhciBzaXplID0gYmxvYi5zaXplOworICAgIHNob3VsZEJl
KCIiICsgc2l6ZSwgImJsb2JTaXplIik7CisgICAgd3JpdGVyLndyaXRlKGJsb2IpOworfQorCitm
dW5jdGlvbiBzdGFydFRydW5jYXRlKCkgeworICAgIHdyaXRlci50cnVuY2F0ZSh0cnVuY2F0ZUxl
bmd0aCk7Cit9CisKK2Z1bmN0aW9uIHNldHVwV3JpdGVyKG1ldGhvZFNldEluZGV4LCB3cml0ZXIp
IHsKKyAgICB3cml0ZXIub25lcnJvciA9IG9uRXJyb3I7CisKKyAgICB2YXIgbWV0aG9kcyA9IG1l
dGhvZFNldFttZXRob2RTZXRJbmRleF07CisgICAgd3JpdGVyLm9uYWJvcnQgPSBtZXRob2RzLm9u
YWJvcnQ7CisgICAgd3JpdGVyLm9ud3JpdGVzdGFydCA9IG1ldGhvZHMub253cml0ZXN0YXJ0Owor
ICAgIHdyaXRlci5vbndyaXRlID0gbWV0aG9kcy5vbndyaXRlOworICAgIHdyaXRlci5vbndyaXRl
ZW5kID0gbWV0aG9kcy5vbndyaXRlZW5kOworICAgIGV4cGVjdGVkTGVuZ3RoID0gbWV0aG9kcy52
ZXJpZnlMZW5ndGg7CisgICAgbWV0aG9kcy5hY3Rpb24oKTsKK30KKworZnVuY3Rpb24gcnVuVGVz
dChpbml0SW5kZXgsIHRlc3RJbmRleCkgeworICAgIGZvbGxvd09uQWN0aW9uID0gdGVzdEluZGV4
OworICAgIHNldHVwV3JpdGVyKGluaXRJbmRleCwgd3JpdGVyKTsKK30KKworZnVuY3Rpb24gZG9G
b2xsb3dPbkFjdGlvbigpIHsKKyAgICBzaG91bGRCZVRydWUoImZvbGxvd09uQWN0aW9uID09IDEg
fHwgZm9sbG93T25BY3Rpb24gPT0gMyIpOworICAgIHNldHVwV3JpdGVyKGZvbGxvd09uQWN0aW9u
LCB3cml0ZXIpOworfQorCit2YXIganNUZXN0SXNBc3luYyA9IHRydWU7CitzZXR1cEFuZFJ1blRl
c3QoMioxMDI0KjEwMjQsICdmaWxlLXdyaXRlci1hYm9ydCcsCisgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gKHVudXNlZEZpbGVFbnRyeSwgZmlsZVdyaXRlcikgeworICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIgPSBmaWxlV3JpdGVyOworICAgICAgICAgICAgICAgICAgICBydW5UZXN0KDAsIDEp
OworICAgICAgICAgICAgICAgIH0pOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3Jp
dGVyLWFib3J0LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci1hYm9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGY1ZmRmNTYwNmIyMjUyZTA3NDgxYjBkMjNi
MTUxOTg4OTU3MzQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcwpAQCAtMCwwICsxLDg0IEBACitpZiAo
dGhpcy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0U2NyaXB0cygnZnMtd29ya2VyLWNvbW1v
bi5qcycpOworICAgIGltcG9ydFNjcmlwdHMoJ2ZpbGUtd3JpdGVyLXV0aWxzLmpzJyk7Cit9CisK
K2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgRmlsZVdyaXRlciBoYW5kbGVzIGFib3J0IHByb3Blcmx5
LiIpOworCit2YXIgc2F3V3JpdGVTdGFydDsKK3ZhciBzYXdBYm9ydDsKK3ZhciBzYXdXcml0ZUVu
ZDsKK3ZhciB3cml0ZXI7CisKK2Z1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKKyAgICB2YXIgYmIg
PSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyAr
K2kpIHsKKyAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgIH0KKyAgICByZXR1cm4gYmIuZ2V0
QmxvYigpOworfQorCitmdW5jdGlvbiBvbldyaXRlU3RhcnQoZSkgeworICAgIGFzc2VydCh3cml0
ZXIpOworICAgIGFzc2VydCh3cml0ZXIucmVhZHlTdGF0ZSA9PSB3cml0ZXIuV1JJVElORyk7Cisg
ICAgYXNzZXJ0KGUudHlwZSA9PSAid3JpdGVzdGFydCIpOworICAgIGFzc2VydCghc2F3V3JpdGVT
dGFydCk7CisgICAgYXNzZXJ0KCFzYXdXcml0ZUVuZCk7CisgICAgYXNzZXJ0KCFlLmxvYWRlZCk7
CisgICAgc2F3V3JpdGVTdGFydCA9IHRydWU7CisgICAgdGVzdFBhc3NlZCgiQ2FsbGluZyBhYm9y
dCIpOworICAgIHdyaXRlci5hYm9ydCgpOworfQorCisvLyBXZSBzaG91bGQgYWx3YXlzIGFib3J0
IGJlZm9yZSBjb21wbGV0aW9uLgorZnVuY3Rpb24gb25Xcml0ZShlKSB7CisgICAgdGVzdEZhaWxl
ZCgiSW4gb25Xcml0ZS4iKTsKK30KKworZnVuY3Rpb24gb25BYm9ydChlKSB7CisgICAgYXNzZXJ0
KHdyaXRlci5yZWFkeVN0YXRlID09IHdyaXRlci5ET05FKTsKKyAgICBhc3NlcnQod3JpdGVyLmVy
cm9yLmNvZGUgPT0gd3JpdGVyLmVycm9yLkFCT1JUX0VSUik7CisgICAgYXNzZXJ0KHNhd1dyaXRl
U3RhcnQpOworICAgIGFzc2VydCghc2F3V3JpdGVFbmQpOworICAgIGFzc2VydCghc2F3QWJvcnQp
OworICAgIGFzc2VydChlLnR5cGUgPT0gImFib3J0Iik7CisgICAgc2F3QWJvcnQgPSB0cnVlOwor
ICAgIHRlc3RQYXNzZWQoIlNhdyBhYm9ydCIpOworfQorCitmdW5jdGlvbiBvbldyaXRlRW5kKGUp
IHsKKyAgICBhc3NlcnQod3JpdGVyLnJlYWR5U3RhdGUgPT0gd3JpdGVyLkRPTkUpOworICAgIGFz
c2VydCh3cml0ZXIuZXJyb3IuY29kZSA9PSB3cml0ZXIuZXJyb3IuQUJPUlRfRVJSKTsKKyAgICBh
c3NlcnQoc2F3V3JpdGVTdGFydCk7CisgICAgYXNzZXJ0KHNhd0Fib3J0KTsKKyAgICBhc3NlcnQo
IXNhd1dyaXRlRW5kKTsKKyAgICBhc3NlcnQoZS50eXBlID09ICJ3cml0ZWVuZCIpOworICAgIHNh
d1dyaXRlRW5kID0gdHJ1ZTsKKyAgICB0ZXN0UGFzc2VkKCJTYXcgd3JpdGVlbmQuIik7CisgICAg
Y2xlYW5VcCgpOworfQorCitmdW5jdGlvbiBzdGFydFdyaXRlKGZpbGVXcml0ZXIpIHsKKyAgICAv
LyBMZXQncyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5dGUuCisgICAgdmFyIGJiID0gbmV3IFdlYktp
dEJsb2JCdWlsZGVyKCk7CisgICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOworICAgIHZhciBi
bG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7
CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsK
KyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgd3JpdGVyID0gZmlsZVdyaXRlcjsKKyAg
ICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBvbkVycm9yOworICAgIGZpbGVXcml0ZXIub25hYm9ydCA9
IG9uQWJvcnQ7CisgICAgZmlsZVdyaXRlci5vbndyaXRlc3RhcnQgPSBvbldyaXRlU3RhcnQ7Cisg
ICAgZmlsZVdyaXRlci5vbndyaXRlID0gb25Xcml0ZTsKKyAgICBmaWxlV3JpdGVyLm9ud3JpdGVl
bmQgPSBvbldyaXRlRW5kOworICAgIGZpbGVXcml0ZXIud3JpdGUoYmxvYik7Cit9CisKK2Z1bmN0
aW9uIHJ1blRlc3QodW51c2VkRmlsZUVudHJ5LCBmaWxlV3JpdGVyKSB7CisgICAgc3RhcnRXcml0
ZShmaWxlV3JpdGVyKTsKK30KK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3NldHVwQW5kUnVu
VGVzdCgyKjEwMjQqMTAyNCwgJ2ZpbGUtd3JpdGVyLWFib3J0JywgcnVuVGVzdCk7Cit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKaW5kZXggODkyYTYy
OGU4ZjAxMGI0Yzg0OTEzM2VmNWM0YTVhNjhiZDZhMGUwMS4uMzNkNDI3OWRlZTg0NTQ5NGY4NzJh
MmJjNmFjZTNlOTljYzFmZGU5OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKQEAgLTk4LDUgKzk4
LDUgQEAgZnVuY3Rpb24gcnVuVGVzdCh1bnVzZWRGaWxlRW50cnksIGZpbGVXcml0ZXIpIHsKICAg
ICBzdGFydFdyaXRlKGZpbGVXcml0ZXIpOwogfQogdmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOwot
c2V0dXBBbmRSdW5UZXN0KDIqMTAyNCoxMDI0LCAnZmlsZS13cml0ZXItZ2MtYmxvYicsIHJ1blRl
c3QpOworc2V0dXBBbmRSdW5UZXN0KDIqMTAyNCoxMDI0LCAnZmlsZS13cml0ZXItZXZlbnRzJywg
cnVuVGVzdCk7CiB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBk
MGU4NzZjMTdmOWFjNzUyNmY0Y2QxNTg5YWQ5NWIwMGI3MzVhZDljLi42MmI5MDBhN2JjOTUwNmE5
MWI4ZmNiNTFmODgzODUzNWZkYjQ0YTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTEtMDktMjEgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Q2hyb21pdW0vRmlsZVdyaXRlcl0gcmFjZSBjb25kaXRpb24gaW4gRmlsZVdyaXRlciBjb21wbGV0
aW9uIGNhbiBsZWFkIHRvIGFzc2VydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njc2ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0czogZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNv
bnRpbnVlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1h
Ym9ydC5odG1sCisKKyAgICAgICAgVHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBiYWNrZW5kIGFuZCBi
ZSBwcmVwYXJlZCBmb3IgcmVlbnRyYW50IHVzZXIKKyAgICAgICAgcmVxdWVzdHMuICBMaW1pdCBy
ZWN1cnNpb24gZGVwdGggdG8gYW4gYXJiaXRyYXJ5IHNtYWxsIGNvbnN0YW50LgorICAgICAgICAq
IGZpbGVhcGkvRmlsZVdyaXRlci5jcHA6IExvdHMgb2YgZXZlbnQtaGFuZGxpbmcgY2hhbmdlcy4K
KyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXIuaDoKKwogMjAxMS0wOS0yMSAgSnVsaWVuIENo
YWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBSZW5k
ZXJCb3g6OnBhaW50TWFza0ltYWdlcyB3aGVuIEdyYXBoaWNzQ29udGV4dCdzIHBhaW50aW5nIGlz
IGRpc2FibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAppbmRleCA2NzhhMGE4
ZmU2Nzk2ZGE2YTdjOWQ2ZTBjNjY2NmRiM2EzMGRjODhkLi4yMTliNDY5ZWUwZDYyYmM1MDE2OGVj
YzAzYThkNzcwOGU3YmQ5MWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVXcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5jcHAK
QEAgLTQzLDE4ICs0MywyNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25z
dCBpbnQga01heFJlY3Vyc2lvbkRlcHRoID0gMzsKKwogRmlsZVdyaXRlcjo6RmlsZVdyaXRlcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNv
bnRleHQsIHRoaXMpCiAgICAgLCBtX3JlYWR5U3RhdGUoSU5JVCkKLSAgICAsIG1fc3RhcnRlZFdy
aXRpbmcoZmFsc2UpCisgICAgLCBtX2JhY2tlbmRJc0FjdGl2ZShmYWxzZSkKKyAgICAsIG1fcXVl
dWVkT3BlcmF0aW9uKFF1ZXVlZE9wZXJhdGlvbk5vbmUpCiAgICAgLCBtX2J5dGVzV3JpdHRlbigw
KQogICAgICwgbV9ieXRlc1RvV3JpdGUoMCkKICAgICAsIG1fdHJ1bmNhdGVMZW5ndGgoLTEpCisg
ICAgLCBtX251bUFib3J0cygwKQorICAgICwgbV9yZWN1cnNpb25EZXB0aCgwKQogewogfQogCiBG
aWxlV3JpdGVyOjp+RmlsZVdyaXRlcigpCiB7CisgICAgQVNTRVJUKCFtX3JlY3Vyc2lvbkRlcHRo
KTsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpCiAgICAgICAgIHN0b3AoKTsKIH0K
QEAgLTcyLDcgKzc4LDggQEAgYm9vbCBGaWxlV3JpdGVyOjpjYW5TdXNwZW5kKCkgY29uc3QKIAog
dm9pZCBGaWxlV3JpdGVyOjpzdG9wKCkKIHsKLSAgICBpZiAod3JpdGVyKCkgJiYgbV9yZWFkeVN0
YXRlID09IFdSSVRJTkcpCisgICAgLy8gTWFrZSBzdXJlIHdlJ3ZlIGFjdHVhbGx5IGdvdCBzb21l
dGhpbmcgdG8gc3RvcCwgYW5kIGhhdmVuJ3QgYWxyZWFkeSBjYWxsZWQgYWJvcnQoKS4KKyAgICBp
ZiAod3JpdGVyKCkgJiYgbV9yZWFkeVN0YXRlID09IFdSSVRJTkcgJiYgbV9iYWNrZW5kSXNBY3Rp
dmUgJiYgKG1fcXVldWVkT3BlcmF0aW9uID09IFF1ZXVlZE9wZXJhdGlvbk5vbmUpKQogICAgICAg
ICB3cml0ZXIoKS0+YWJvcnQoKTsKICAgICBtX2Jsb2JCZWluZ1dyaXR0ZW4uY2xlYXIoKTsKICAg
ICBtX3JlYWR5U3RhdGUgPSBET05FOwpAQCAtODEsNiArODgsNyBAQCB2b2lkIEZpbGVXcml0ZXI6
OnN0b3AoKQogdm9pZCBGaWxlV3JpdGVyOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBBU1NFUlQod3JpdGVyKCkpOworICAgIEFTU0VSVChkYXRhKTsKICAgICBp
ZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpIHsKICAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9y
OjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CkBAIC04OSwxMyArOTcs
MjEgQEAgdm9pZCBGaWxlV3JpdGVyOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBl
YykKICAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpUWVBFX01JU01BVENIX0VSUiwgZWMpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgaWYgKG1fcmVjdXJzaW9uRGVwdGggPiBrTWF4
UmVjdXJzaW9uRGVwdGgpIHsKKyAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpTRUNVUklUWV9F
UlIsIGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2Jsb2JCZWluZ1dyaXR0ZW4g
PSBkYXRhOwogICAgIG1fcmVhZHlTdGF0ZSA9IFdSSVRJTkc7Ci0gICAgbV9zdGFydGVkV3JpdGlu
ZyA9IGZhbHNlOwogICAgIG1fYnl0ZXNXcml0dGVuID0gMDsKICAgICBtX2J5dGVzVG9Xcml0ZSA9
IGRhdGEtPnNpemUoKTsKLSAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgZGF0YSk7Cisg
ICAgQVNTRVJUKG1fcXVldWVkT3BlcmF0aW9uID09IFF1ZXVlZE9wZXJhdGlvbk5vbmUpOworICAg
IGlmIChtX2JhY2tlbmRJc0FjdGl2ZSkgLy8gV2UgbXVzdCBiZSB3YWl0aW5nIGZvciBhbiBhYm9y
dCB0byBjb21wbGV0ZS4KKyAgICAgICAgbV9xdWV1ZWRPcGVyYXRpb24gPSBRdWV1ZWRPcGVyYXRp
b25Xcml0ZTsKKyAgICBlbHNlCisgICAgICAgIHdyaXRlcigpLT53cml0ZShwb3NpdGlvbigpLCBt
X2Jsb2JCZWluZ1dyaXR0ZW4uZ2V0KCkpOworICAgIG1fYmFja2VuZElzQWN0aXZlID0gdHJ1ZTsK
KyAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLndyaXRlc3RhcnRFdmVudCk7CiB9CiAKIHZvaWQg
RmlsZVdyaXRlcjo6c2Vlayhsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQpA
QCAtMTA2LDggKzEyMiw3IEBAIHZvaWQgRmlsZVdyaXRlcjo6c2Vlayhsb25nIGxvbmcgcG9zaXRp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9i
eXRlc1dyaXR0ZW4gPSAwOwotICAgIG1fYnl0ZXNUb1dyaXRlID0gMDsKKyAgICBBU1NFUlQobV9x
dWV1ZWRPcGVyYXRpb24gPT0gUXVldWVkT3BlcmF0aW9uTm9uZSk7CiAgICAgc2Vla0ludGVybmFs
KHBvc2l0aW9uKTsKIH0KIApAQCAtMTE4LDcwICsxMzMsMTExIEBAIHZvaWQgRmlsZVdyaXRlcjo6
dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAg
c2V0RXJyb3IoRmlsZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorICAgIGlmIChtX3JlY3Vyc2lvbkRlcHRoID4ga01heFJlY3Vyc2lvbkRlcHRo
KSB7CisgICAgICAgIHNldEVycm9yKEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJSLCBlYyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9yZWFkeVN0YXRlID0gV1JJVElORzsKICAgICBtX2J5
dGVzV3JpdHRlbiA9IDA7CiAgICAgbV9ieXRlc1RvV3JpdGUgPSAwOwogICAgIG1fdHJ1bmNhdGVM
ZW5ndGggPSBwb3NpdGlvbjsKLSAgICB3cml0ZXIoKS0+dHJ1bmNhdGUocG9zaXRpb24pOworICAg
IEFTU0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9PSBRdWV1ZWRPcGVyYXRpb25Ob25lKTsKKyAgICBp
ZiAobV9iYWNrZW5kSXNBY3RpdmUpIC8vIFdlIG11c3QgYmUgd2FpdGluZyBmb3IgYW4gYWJvcnQg
dG8gY29tcGxldGUuCisgICAgICAgIG1fcXVldWVkT3BlcmF0aW9uID0gUXVldWVkT3BlcmF0aW9u
VHJ1bmNhdGU7CisgICAgZWxzZQorICAgICAgICB3cml0ZXIoKS0+dHJ1bmNhdGUobV90cnVuY2F0
ZUxlbmd0aCk7CisgICAgbV9iYWNrZW5kSXNBY3RpdmUgPSB0cnVlOworICAgIGZpcmVFdmVudChl
dmVudE5hbWVzKCkud3JpdGVzdGFydEV2ZW50KTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjphYm9y
dChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQod3JpdGVyKCkpOwogICAgIGlmICht
X3JlYWR5U3RhdGUgIT0gV1JJVElORykgewotICAgICAgICBzZXRFcnJvcihGaWxlRXJyb3I6OklO
VkFMSURfU1RBVEVfRVJSLCBlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgKyttX251
bUFib3J0czsKIAotICAgIHdyaXRlcigpLT5hYm9ydCgpOworICAgIGlmIChtX2JhY2tlbmRJc0Fj
dGl2ZSkKKyAgICAgICAgd3JpdGVyKCktPmFib3J0KCk7CisgICAgbV9xdWV1ZWRPcGVyYXRpb24g
PSBRdWV1ZWRPcGVyYXRpb25Ob25lOworICAgIG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVhcigpOwor
ICAgIG1fdHJ1bmNhdGVMZW5ndGggPSAtMTsKKyAgICBzaWduYWxDb21wbGV0aW9uKEZpbGVFcnJv
cjo6QUJPUlRfRVJSKTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpkaWRXcml0ZShsb25nIGxvbmcg
Ynl0ZXMsIGJvb2wgY29tcGxldGUpCiB7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBXUklU
SU5HKTsKKyAgICBBU1NFUlQobV9iYWNrZW5kSXNBY3RpdmUpOwogICAgIEFTU0VSVChieXRlcyAr
IG1fYnl0ZXNXcml0dGVuID4gMCk7CiAgICAgQVNTRVJUKGJ5dGVzICsgbV9ieXRlc1dyaXR0ZW4g
PD0gbV9ieXRlc1RvV3JpdGUpOwotICAgIGlmICghbV9zdGFydGVkV3JpdGluZykgewotICAgICAg
ICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLndyaXRlc3RhcnRFdmVudCk7Ci0gICAgICAgIG1fc3Rh
cnRlZFdyaXRpbmcgPSB0cnVlOwotICAgIH0KICAgICBtX2J5dGVzV3JpdHRlbiArPSBieXRlczsK
ICAgICBBU1NFUlQoKG1fYnl0ZXNXcml0dGVuID09IG1fYnl0ZXNUb1dyaXRlKSB8fCAhY29tcGxl
dGUpOwogICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKCkgKyBieXRlcyk7CiAgICAgaWYgKHBvc2l0
aW9uKCkgPiBsZW5ndGgoKSkKICAgICAgICAgc2V0TGVuZ3RoKHBvc2l0aW9uKCkpOworICAgIC8v
IFRPRE86IFRocm90dGxlIHRvIG5vIG1vcmUgZnJlcXVlbnRseSB0aGFuIGV2ZXJ5IDUwbXMuCisg
ICAgaW50IG51bUFib3J0cyA9IG1fbnVtQWJvcnRzOwogICAgIGZpcmVFdmVudChldmVudE5hbWVz
KCkucHJvZ3Jlc3NFdmVudCk7Ci0gICAgaWYgKGNvbXBsZXRlKSB7CisgICAgLy8gV2UgY291bGQg
Z2V0IGFuIGFib3J0IGluIHRoZSBoYW5kbGVyIGZvciB0aGlzIGV2ZW50LiBJZiB3ZSBkbywgaXQn
cworICAgIC8vIGFscmVhZHkgaGFuZGxlZCB0aGUgY2xlYW51cCBhbmQgc2lnbmFsQ29tcGxldGlv
biBjYWxsLgorICAgIGlmIChjb21wbGV0ZSAmJiBudW1BYm9ydHMgPT0gbV9udW1BYm9ydHMpIHsK
ICAgICAgICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7Ci0gICAgICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soRmlsZVdyaXRlckNvbXBsZXRpb25FdmVudFRhc2s6OmNy
ZWF0ZSh0aGlzLCBGaWxlRXJyb3I6Ok9LKSk7CisgICAgICAgIG1fYmFja2VuZElzQWN0aXZlID0g
ZmFsc2U7CisgICAgICAgIHNpZ25hbENvbXBsZXRpb24oRmlsZUVycm9yOjpPSyk7CiAgICAgfQog
fQogCiB2b2lkIEZpbGVXcml0ZXI6OmRpZFRydW5jYXRlKCkKIHsKICAgICBBU1NFUlQobV90cnVu
Y2F0ZUxlbmd0aCA+PSAwKTsKLSAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLndyaXRlc3RhcnRF
dmVudCk7CiAgICAgc2V0TGVuZ3RoKG1fdHJ1bmNhdGVMZW5ndGgpOwogICAgIGlmIChwb3NpdGlv
bigpID4gbGVuZ3RoKCkpCiAgICAgICAgIHNldFBvc2l0aW9uKGxlbmd0aCgpKTsKLSAgICBtX3Ry
dW5jYXRlTGVuZ3RoID0gLTE7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFz
ayhGaWxlV3JpdGVyQ29tcGxldGlvbkV2ZW50VGFzazo6Y3JlYXRlKHRoaXMsIEZpbGVFcnJvcjo6
T0spKTsKKyAgICBtX2JhY2tlbmRJc0FjdGl2ZSA9IGZhbHNlOworICAgIHNpZ25hbENvbXBsZXRp
b24oRmlsZUVycm9yOjpPSyk7CiB9CiAKIHZvaWQgRmlsZVdyaXRlcjo6ZGlkRmFpbChGaWxlRXJy
b3I6OkVycm9yQ29kZSBjb2RlKQogeworICAgIEFTU0VSVChtX2JhY2tlbmRJc0FjdGl2ZSk7CiAg
ICAgQVNTRVJUKGNvZGUgIT0gRmlsZUVycm9yOjpPSyk7Ci0gICAgbV9ibG9iQmVpbmdXcml0dGVu
LmNsZWFyKCk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhGaWxlV3Jp
dGVyQ29tcGxldGlvbkV2ZW50VGFzazo6Y3JlYXRlKHRoaXMsIGNvZGUpKTsKKyAgICBpZiAoY29k
ZSA9PSBGaWxlRXJyb3I6OkFCT1JUX0VSUikgeworICAgICAgICBzd2l0Y2ggKG1fcXVldWVkT3Bl
cmF0aW9uKSB7CisgICAgICAgIGNhc2UgUXVldWVkT3BlcmF0aW9uV3JpdGU6CisgICAgICAgICAg
ICBBU1NFUlQobV9ibG9iQmVpbmdXcml0dGVuLmdldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCht
X3JlYWR5U3RhdGUgPT0gV1JJVElORyk7CisgICAgICAgICAgICB3cml0ZXIoKS0+d3JpdGUocG9z
aXRpb24oKSwgbV9ibG9iQmVpbmdXcml0dGVuLmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFF1ZXVlZE9wZXJhdGlvblRydW5jYXRlOgorICAgICAgICAgICAgQVNTRVJU
KG1fdHJ1bmNhdGVMZW5ndGggPj0gMCk7CisgICAgICAgICAgICBBU1NFUlQobV9yZWFkeVN0YXRl
ID09IFdSSVRJTkcpOworICAgICAgICAgICAgd3JpdGVyKCktPnRydW5jYXRlKG1fdHJ1bmNhdGVM
ZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUXVldWVkT3BlcmF0aW9u
Tm9uZToKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fYmFja2VuZElzQWN0aXZlID0g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtX3F1ZXVlZE9w
ZXJhdGlvbiA9IFF1ZXVlZE9wZXJhdGlvbk5vbmU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9i
bG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7CisgICAgICAgIG1fYmFja2VuZElzQWN0aXZlID0gZmFs
c2U7CisgICAgICAgIHNpZ25hbENvbXBsZXRpb24oY29kZSk7CisgICAgfQogfQogCiB2b2lkIEZp
bGVXcml0ZXI6OnNpZ25hbENvbXBsZXRpb24oRmlsZUVycm9yOjpFcnJvckNvZGUgY29kZSkKIHsK
ICAgICBtX3JlYWR5U3RhdGUgPSBET05FOworICAgIG1fdHJ1bmNhdGVMZW5ndGggPSAtMTsKICAg
ICBpZiAoRmlsZUVycm9yOjpPSyAhPSBjb2RlKSB7CiAgICAgICAgIG1fZXJyb3IgPSBGaWxlRXJy
b3I6OmNyZWF0ZShjb2RlKTsKLSAgICAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2
ZW50KTsKICAgICAgICAgaWYgKEZpbGVFcnJvcjo6QUJPUlRfRVJSID09IGNvZGUpCiAgICAgICAg
ICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwogICAgIH0gZWxz
ZQogICAgICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLndyaXRlRXZlbnQpOwogICAgIGZpcmVF
dmVudChldmVudE5hbWVzKCkud3JpdGVlbmRFdmVudCk7CkBAIC0xODksNyArMjQ1LDEwIEBAIHZv
aWQgRmlsZVdyaXRlcjo6c2lnbmFsQ29tcGxldGlvbihGaWxlRXJyb3I6OkVycm9yQ29kZSBjb2Rl
KQogCiB2b2lkIEZpbGVXcml0ZXI6OmZpcmVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUp
CiB7CisgICAgKyttX3JlY3Vyc2lvbkRlcHRoOwogICAgIGRpc3BhdGNoRXZlbnQoUHJvZ3Jlc3NF
dmVudDo6Y3JlYXRlKHR5cGUsIHRydWUsIG1fYnl0ZXNXcml0dGVuLCBtX2J5dGVzVG9Xcml0ZSkp
OworICAgIC0tbV9yZWN1cnNpb25EZXB0aDsKKyAgICBBU1NFUlQobV9yZWN1cnNpb25EZXB0aCA+
PSAwKTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpzZXRFcnJvcihGaWxlRXJyb3I6OkVycm9yQ29k
ZSBlcnJvckNvZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlV3JpdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0
ZXIuaAppbmRleCAzOWZlZmM0MjRjNmNhYTA1NGU0MzRlMjIxZmRlOTM2ZDI0OGE2NGI5Li5jMzVj
YzcyZGUyMjM2MzkwMzYzODU5ZTU0MWExNjU0ZjVmOWJmYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGVXcml0ZXIuaApAQCAtMTAwLDQyICsxMDAsMjggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJn
ZXREYXRhOyB9CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0
RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQogCisgICAgdm9pZCBzaWduYWxD
b21wbGV0aW9uKEZpbGVFcnJvcjo6RXJyb3JDb2RlKTsKKwogICAgIHZvaWQgZmlyZUV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CiAKICAgICB2b2lkIHNldEVycm9yKEZpbGVFcnJvcjo6
RXJyb3JDb2RlLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2b2lkIHNpZ25hbENvbXBsZXRpb24o
RmlsZUVycm9yOjpFcnJvckNvZGUpOwotCi0gICAgY2xhc3MgRmlsZVdyaXRlckNvbXBsZXRpb25F
dmVudFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci0gICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlV3JpdGVyQ29tcGxldGlvbkV2ZW50
VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlcj4gZmlsZVdyaXRlciwgRmlsZUVycm9y
OjpFcnJvckNvZGUgY29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBGaWxlV3JpdGVyQ29tcGxldGlvbkV2ZW50VGFzayhmaWxlV3JpdGVyLCBjb2RlKSk7Ci0g
ICAgICAgIH0KLQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KikKLSAgICAgICAgewotICAgICAgICAgICAgbV9maWxlV3JpdGVyLT5zaWdu
YWxDb21wbGV0aW9uKG1fY29kZSk7Ci0gICAgICAgIH0KLSAgICBwcml2YXRlOgotICAgICAgICBG
aWxlV3JpdGVyQ29tcGxldGlvbkV2ZW50VGFzayhQYXNzUmVmUHRyPEZpbGVXcml0ZXI+IGZpbGVX
cml0ZXIsIEZpbGVFcnJvcjo6RXJyb3JDb2RlIGNvZGUpCi0gICAgICAgICAgICA6IG1fZmlsZVdy
aXRlcihmaWxlV3JpdGVyKQotICAgICAgICAgICAgLCBtX2NvZGUoY29kZSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPEZpbGVXcml0ZXI+IG1fZmlsZVdyaXRlcjsKLSAg
ICAgICAgRmlsZUVycm9yOjpFcnJvckNvZGUgbV9jb2RlOworICAgIGVudW0gUXVldWVkT3BlcmF0
aW9uIHsKKyAgICAgIFF1ZXVlZE9wZXJhdGlvbk5vbmUsCisgICAgICBRdWV1ZWRPcGVyYXRpb25X
cml0ZSwKKyAgICAgIFF1ZXVlZE9wZXJhdGlvblRydW5jYXRlCiAgICAgfTsKIAogICAgIFJlZlB0
cjxGaWxlRXJyb3I+IG1fZXJyb3I7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXRE
YXRhOwogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIGJvb2wgbV9zdGFydGVkV3Jp
dGluZzsKKyAgICBib29sIG1fYmFja2VuZElzQWN0aXZlOworICAgIFF1ZXVlZE9wZXJhdGlvbiBt
X3F1ZXVlZE9wZXJhdGlvbjsKICAgICBsb25nIGxvbmcgbV9ieXRlc1dyaXR0ZW47CiAgICAgbG9u
ZyBsb25nIG1fYnl0ZXNUb1dyaXRlOwogICAgIGxvbmcgbG9uZyBtX3RydW5jYXRlTGVuZ3RoOwor
ICAgIGxvbmcgbG9uZyBtX251bUFib3J0czsKKyAgICBsb25nIGxvbmcgbV9yZWN1cnNpb25EZXB0
aDsKICAgICBSZWZQdHI8QmxvYj4gbV9ibG9iQmVpbmdXcml0dGVuOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108884</attachid>
            <date>2011-09-27 12:51:24 -0700</date>
            <delta_ts>2011-09-27 14:29:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67684-20110927125123.patch</filename>
            <type>text/plain</type>
            <size>26681</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU2ODUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ODFhZGUzMjViNDBiOWMwYWVkN2Rj
OWE4YTFjNDRlZDZiMWVmOTI4Li4wOTVkN2ZmMmMyZGRjZDE5MDEyOGZlOTI1OGQwNDM2NmUyYWQ4
MjU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMjEgIEVyaWMgVWhyaGFuZSAgPGVy
aWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW0vRmlsZVdyaXRlcl0gcmFjZSBj
b25kaXRpb24gaW4gRmlsZVdyaXRlciBjb21wbGV0aW9uIGNhbiBsZWFkIHRvIGFzc2VydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZmlsZXN5
c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJv
cnQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci1hYm9ydC1jb250aW51ZS5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qczogQWRkZWQuCisgICAgICAgICogZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanM6IEZpeGVkIGEgY29w
eS1wYXN0ZSBlcnJvci4KKwogMjAxMS0wOS0yMSAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJh
aXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBSZW5kZXJCb3g6OnBhaW50TWFza0lt
YWdlcyB3aGVuIEdyYXBoaWNzQ29udGV4dCdzIHBhaW50aW5nIGlzIGRpc2FibGVkCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtY29udGlu
dWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVy
LWFib3J0LWNvbnRpbnVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGQ2MDk5ZTU1N2JmNmQz
MDcxMzA0OGFjMTZlM2U3NGRhYjk2N2RlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDI2IEBACitUZXN0IHRoYXQgRmlsZVdyaXRlciBjYW4gY29udGludWUgaW1tZWRp
YXRlbHkgYWZ0ZXIgYW4gYWJvcnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworc3Rh
cnRpbmcgdGVzdAorUEFTUyAxMTAwMDAwIGlzIGJsb2JTaXplCitQQVNTIENhbGxpbmcgYWJvcnQK
K1BBU1MgU2F3IGFib3J0CitQQVNTIFNhdyB3cml0ZWVuZCAwLgorUEFTUyB3cml0ZXIubGVuZ3Ro
IGlzIDAKK1BBU1MgZm9sbG93T25BY3Rpb24gPT0gMSB8fCBmb2xsb3dPbkFjdGlvbiA9PSAzIGlz
IHRydWUKK1BBU1MgMTEwMDAwMCBpcyBibG9iU2l6ZQorUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDEx
MDAwMDAKK1BBU1MgU2F3IHdyaXRlZW5kIDEuCitQQVNTIDExMDAwMDAgaXMgYmxvYlNpemUKK1BB
U1MgQ2FsbGluZyBhYm9ydAorUEFTUyBTYXcgYWJvcnQKK1BBU1MgU2F3IHdyaXRlZW5kIDAuCitQ
QVNTIHdyaXRlci5sZW5ndGggaXMgMTEwMDAwMAorUEFTUyBmb2xsb3dPbkFjdGlvbiA9PSAxIHx8
IGZvbGxvd09uQWN0aW9uID09IDMgaXMgdHJ1ZQorUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDcKK1BB
U1MgQWxsIHRlc3RzIGNvbXBsZXRlLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzViZmE3
ODFhOWI1YzMxY2I1ZDY0YjhlNjYzNWExZTg2OGMyNTcyNAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1s
CkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorICAgIDx0aXRsZT5GaWxlIFdyaXRlciBBYm9ydCBhbmQgQ29udGludWU8L3RpdGxl
PgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwv
c2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9k
eT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGUtd3JpdGVyLWFib3J0LWRlcHRoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjI1NWExMGVhYjY5NTZiNDA4YWZmOGY2MGRlMDhmMjg1N2UyYzVhYwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBAQAorVGVzdCB0aGF0IEZpbGVXcml0ZXIgZGVmZW5k
cyBhZ2FpbnN0IGluZmluaXRlIHJlY3Vyc2lvbiB2aWEgYWJvcnQuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworc3RhcnRpbmcgdGVzdAorUEFTUyBDYWxsaW5nIHdyaXRlLgorUEFTUyBD
YWxsaW5nIGFib3J0CitQQVNTIFNhdyBhYm9ydAorUEFTUyBDYWxsaW5nIHdyaXRlLgorUEFTUyBD
YWxsaW5nIGFib3J0CitQQVNTIFNhdyBhYm9ydAorUEFTUyBDYWxsaW5nIHdyaXRlLgorUEFTUyBT
YXcgc2VjdXJpdHkgZXJyb3IKK1BBU1MgU2F3IHdyaXRlZW5kLgorUEFTUyBTYXcgd3JpdGVlbmQu
CitQQVNTIENhbGxpbmcgdHJ1bmNhdGUuCitQQVNTIENhbGxpbmcgYWJvcnQKK1BBU1MgU2F3IGFi
b3J0CitQQVNTIENhbGxpbmcgdHJ1bmNhdGUuCitQQVNTIENhbGxpbmcgYWJvcnQKK1BBU1MgU2F3
IGFib3J0CitQQVNTIENhbGxpbmcgdHJ1bmNhdGUuCitQQVNTIFNhdyBzZWN1cml0eSBlcnJvcgor
UEFTUyBTYXcgd3JpdGVlbmQuCitQQVNTIFNhdyB3cml0ZWVuZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtZGVwdGguaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJmZDAwNTgyYjA5ZjllYjAxMTUyNTdmZDE4NWYwZTNlYTZjN2VmY2EKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtZGVw
dGguaHRtbApAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorIDxoZWFk
PgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIj4KKyAgICA8dGl0bGU+RmlsZSBXcml0ZXIgQWJvcnQgRGVwdGg8L3RpdGxl
PgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwv
c2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9keT4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUt
d3JpdGVyLWFib3J0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9m
aWxlLXdyaXRlci1hYm9ydC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM5ZDUzNGYzYzZmYmFm
MWE0MzAzZTM3OGQ4ZTUzYWEzNzFkNWQwMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxMiBAQAorVGVzdCB0aGF0IEZpbGVXcml0ZXIgaGFuZGxlcyBhYm9ydCBwcm9wZXJseS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitzdGFydGluZyB0ZXN0CitQQVNTIENhbGxpbmcg
YWJvcnQKK1BBU1MgU2F3IGFib3J0CitQQVNTIFNhdyB3cml0ZWVuZC4KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1NGY2
OWJiZGZkZWQxNTlhZDFjZWE3ZWM2MjAzNTczYzljMDc5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQuaHRtbApAQCAtMCww
ICsxLDE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorIDxoZWFkPgorICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KyAgICA8dGl0bGU+RmlsZSBXcml0ZXIgQWJvcnQ8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8
Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLXdyaXRlci1hYm9y
dC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250
aW51ZS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0
ZXItYWJvcnQtY29udGludWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk1OGViMDUxNGFlODNjMDE2NzZlOTAw
Mzc2NzFiNmVhODdiMWQwZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGludWUuanMKQEAgLTAsMCAr
MSwxMzggQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdm
cy13b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnZmlsZS13cml0ZXItdXRp
bHMuanMnKTsKK30KKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBGaWxlV3JpdGVyIGNhbiBjb250
aW51ZSBpbW1lZGlhdGVseSBhZnRlciBhbiBhYm9ydC4iKTsKKwordmFyIHNhd1dyaXRlU3RhcnQ7
Cit2YXIgc2F3QWJvcnQ7Cit2YXIgc2F3V3JpdGVFbmQ7Cit2YXIgd3JpdGVyOwordmFyIGV4cGVj
dGVkTGVuZ3RoOwordmFyIHRydW5jYXRlTGVuZ3RoID0gNzsKK3ZhciBibG9iU2l6ZSA9IDExMDAw
MDA7CisKK3ZhciBtZXRob2RTZXQgPSBbCisgIHsgIC8vIFNldHVwIG1ldGhvZCBzZXQgdGhhdCB3
cml0ZXMsIHRoZW4gYWJvcnRzIHRoYXQgd3JpdGUgYmVmb3JlIGNvbXBsZXRpb24uCisgICAgYWN0
aW9uIDogc3RhcnRXcml0ZSwKKyAgICB2ZXJpZnlMZW5ndGggOiAwLAorICAgIG9ud3JpdGVzdGFy
dCA6IGFib3J0V3JpdGUsCisgICAgb253cml0ZSA6IG9uRXJyb3IsCisgICAgb25hYm9ydCA6IGxv
Z0Fib3J0LAorICAgIG9ud3JpdGVlbmQgOiBjaGVja0xlbmd0aEFuZENhbGxGb2xsb3dPbkFjdGlv
bgorICB9LAorICB7ICAvLyBNZXRob2Qgc2V0IHRoYXQgZG9lcyBhIGNvbXBsZXRlIHdyaXRlLgor
ICAgIGFjdGlvbiA6IHN0YXJ0V3JpdGUsCisgICAgdmVyaWZ5TGVuZ3RoIDogYmxvYlNpemUsCisg
ICAgb253cml0ZXN0YXJ0IDogbm9wLAorICAgIG9ud3JpdGUgOiBub3AsCisgICAgb25hYm9ydCA6
IG9uRXJyb3IsCisgICAgb253cml0ZWVuZCA6IGNoZWNrTGVuZ3RoQW5kU3RhcnROZXh0VGVzdAor
ICB9LAorICB7ICAvLyBTZXR1cCBtZXRob2Qgc2V0IHRoYXQgd3JpdGVzLCB0aGVuIGFib3J0cyB0
aGF0IHdyaXRlIGJlZm9yZSBjb21wbGV0aW9uLgorICAgIGFjdGlvbiA6IHN0YXJ0V3JpdGUsCisg
ICAgdmVyaWZ5TGVuZ3RoIDogYmxvYlNpemUsICAvLyBMZWZ0IG92ZXIgZnJvbSB0aGUgcHJldmlv
dXMgdGVzdC4KKyAgICBvbndyaXRlc3RhcnQgOiBhYm9ydFdyaXRlLAorICAgIG9ud3JpdGUgOiBv
bkVycm9yLAorICAgIG9uYWJvcnQgOiBsb2dBYm9ydCwKKyAgICBvbndyaXRlZW5kIDogY2hlY2tM
ZW5ndGhBbmRDYWxsRm9sbG93T25BY3Rpb24KKyAgfSwKKyAgeyAvLyBNZXRob2Qgc2V0IHRoYXQg
ZG9lcyBhIGNvbXBsZXRlIHRydW5jYXRlLgorICAgIGFjdGlvbiA6IHN0YXJ0VHJ1bmNhdGUsCisg
ICAgdmVyaWZ5TGVuZ3RoIDogdHJ1bmNhdGVMZW5ndGgsCisgICAgb253cml0ZXN0YXJ0IDogbm9w
LAorICAgIG9ud3JpdGUgOiBub3AsCisgICAgb25hYm9ydCA6IG9uRXJyb3IsCisgICAgb253cml0
ZWVuZCA6IG9uV3JpdGVFbmQzCisgIH1dOworCitmdW5jdGlvbiBub3AoKSB7Cit9CisKK2Z1bmN0
aW9uIHRlblhCbG9iKGJsb2IpIHsKKyAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIo
KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgYmIuYXBwZW5k
KGJsb2IpOworICAgIH0KKyAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworfQorCisvLyBUaGVzZSBt
ZXRob2RzIHNldCB1cCBhIHdyaXRlLCBhYm9ydCBpdCBhcyBzb29uIGFzIGl0IHN0YXJ0cywgdGhl
biBpbml0aWF0ZQorLy8gdGhlIGZvbGxvdyBvbiBhY3Rpb24uCitmdW5jdGlvbiBhYm9ydFdyaXRl
KGUpIHsKKyAgICB0ZXN0UGFzc2VkKCJDYWxsaW5nIGFib3J0Iik7CisgICAgd3JpdGVyLmFib3J0
KCk7Cit9CisKK2Z1bmN0aW9uIGxvZ0Fib3J0KGUpIHsKKyAgICB0ZXN0UGFzc2VkKCJTYXcgYWJv
cnQiKTsKK30KKworZnVuY3Rpb24gY2hlY2tMZW5ndGhBbmRDYWxsRm9sbG93T25BY3Rpb24oZSkg
eworICAgIHRlc3RQYXNzZWQoIlNhdyB3cml0ZWVuZCAwLiIpOworICAgIHNob3VsZEJlKCJ3cml0
ZXIubGVuZ3RoIiwgIiIgKyBleHBlY3RlZExlbmd0aCk7CisgICAgZG9Gb2xsb3dPbkFjdGlvbigp
OworfQorCisvLyBGb3IgdGhlIHNlY29uZCBtZXRob2Qgc2V0LCB2ZXJpZnkgY29tcGxldGlvbiBh
bmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0ZXN0LgorZnVuY3Rpb24gY2hlY2tMZW5ndGhBbmRTdGFy
dE5leHRUZXN0KGUpIHsKKyAgICBzaG91bGRCZSgid3JpdGVyLmxlbmd0aCIsICIiICsgZXhwZWN0
ZWRMZW5ndGgpOworICAgIHRlc3RQYXNzZWQoIlNhdyB3cml0ZWVuZCAxLiIpOworICAgIHJ1blRl
c3QoMiwgMyk7Cit9CisKK2Z1bmN0aW9uIG9uV3JpdGVFbmQzKGUpIHsKKyAgICBzaG91bGRCZSgi
d3JpdGVyLmxlbmd0aCIsICIiICsgZXhwZWN0ZWRMZW5ndGgpOworICAgIHRlc3RQYXNzZWQoIkFs
bCB0ZXN0cyBjb21wbGV0ZS4iKTsKKyAgICBjbGVhblVwKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0
V3JpdGUoKSB7CisgICAgLy8gTGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgorICAgIHZh
ciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIGJiLmFwcGVuZCgibG9yZW0gaXBz
dW0iKTsKKyAgICB2YXIgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7CisgICAgYmxvYiA9
IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0g
dGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIHZhciBzaXpl
ID0gYmxvYi5zaXplOworICAgIHNob3VsZEJlKCIiICsgc2l6ZSwgImJsb2JTaXplIik7CisgICAg
d3JpdGVyLndyaXRlKGJsb2IpOworfQorCitmdW5jdGlvbiBzdGFydFRydW5jYXRlKCkgeworICAg
IHdyaXRlci50cnVuY2F0ZSh0cnVuY2F0ZUxlbmd0aCk7Cit9CisKK2Z1bmN0aW9uIHNldHVwV3Jp
dGVyKG1ldGhvZFNldEluZGV4LCB3cml0ZXIpIHsKKyAgICB3cml0ZXIub25lcnJvciA9IG9uRXJy
b3I7CisKKyAgICB2YXIgbWV0aG9kcyA9IG1ldGhvZFNldFttZXRob2RTZXRJbmRleF07CisgICAg
d3JpdGVyLm9uYWJvcnQgPSBtZXRob2RzLm9uYWJvcnQ7CisgICAgd3JpdGVyLm9ud3JpdGVzdGFy
dCA9IG1ldGhvZHMub253cml0ZXN0YXJ0OworICAgIHdyaXRlci5vbndyaXRlID0gbWV0aG9kcy5v
bndyaXRlOworICAgIHdyaXRlci5vbndyaXRlZW5kID0gbWV0aG9kcy5vbndyaXRlZW5kOworICAg
IGV4cGVjdGVkTGVuZ3RoID0gbWV0aG9kcy52ZXJpZnlMZW5ndGg7CisgICAgbWV0aG9kcy5hY3Rp
b24oKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdChpbml0SW5kZXgsIHRlc3RJbmRleCkgeworICAg
IGZvbGxvd09uQWN0aW9uID0gdGVzdEluZGV4OworICAgIHNldHVwV3JpdGVyKGluaXRJbmRleCwg
d3JpdGVyKTsKK30KKworZnVuY3Rpb24gZG9Gb2xsb3dPbkFjdGlvbigpIHsKKyAgICBzaG91bGRC
ZVRydWUoImZvbGxvd09uQWN0aW9uID09IDEgfHwgZm9sbG93T25BY3Rpb24gPT0gMyIpOworICAg
IHNldHVwV3JpdGVyKGZvbGxvd09uQWN0aW9uLCB3cml0ZXIpOworfQorCit2YXIganNUZXN0SXNB
c3luYyA9IHRydWU7CitzZXR1cEFuZFJ1blRlc3QoMioxMDI0KjEwMjQsICdmaWxlLXdyaXRlci1h
Ym9ydCcsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGZpbGVFbnRyeSwgZmlsZVdyaXRlcikg
eworICAgICAgICAgICAgICAgICAgICBmaWxlRW50cnlGb3JDbGVhbnVwID0gZmlsZUVudHJ5Owor
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSBmaWxlV3JpdGVyOworICAgICAgICAgICAgICAg
ICAgICBydW5UZXN0KDAsIDEpOworICAgICAgICAgICAgICAgIH0pOwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
cmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWRlcHRoLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40M2U1N2FhZGQxOWRlZTU4OGJlODk4MzE3NWM3ZGFjOTY1Yjc1OTdmCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1h
Ym9ydC1kZXB0aC5qcwpAQCAtMCwwICsxLDczIEBACitpZiAodGhpcy5pbXBvcnRTY3JpcHRzKSB7
CisgICAgaW1wb3J0U2NyaXB0cygnZnMtd29ya2VyLWNvbW1vbi5qcycpOworICAgIGltcG9ydFNj
cmlwdHMoJ2ZpbGUtd3JpdGVyLXV0aWxzLmpzJyk7Cit9CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRo
YXQgRmlsZVdyaXRlciBkZWZlbmRzIGFnYWluc3QgaW5maW5pdGUgcmVjdXJzaW9uIHZpYSBhYm9y
dC4iKTsKKwordmFyIHNhd1dyaXRlU3RhcnQ7Cit2YXIgc2F3QWJvcnQ7Cit2YXIgc2F3V3JpdGVF
bmQ7Cit2YXIgd3JpdGVyOwordmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CitiYi5h
cHBlbmQoImxvcmVtIGlwc3VtIik7Cit2YXIgYmxvYiA9IGJiLmdldEJsb2IoKTsKK3ZhciByZWN1
cnNpb25EZXB0aCA9IDA7Cit2YXIgbWV0aG9kOwordmFyIHRlc3RzUnVuID0gMDsKKworZnVuY3Rp
b24gb25Xcml0ZVN0YXJ0KGUpIHsKKyAgICB0ZXN0UGFzc2VkKCJDYWxsaW5nIGFib3J0Iik7Cisg
ICAgKytyZWN1cnNpb25EZXB0aDsKKyAgICB3cml0ZXIuYWJvcnQoKTsKK30KKworLy8gV2Ugc2hv
dWxkIGFsd2F5cyBhYm9ydCBiZWZvcmUgY29tcGxldGlvbi4KK2Z1bmN0aW9uIG9uV3JpdGUoZSkg
eworICAgIHRlc3RGYWlsZWQoIkluIG9uV3JpdGUuIik7Cit9CisKK2Z1bmN0aW9uIG9uQWJvcnQo
ZSkgeworICAgIHRlc3RQYXNzZWQoIlNhdyBhYm9ydCIpOworICAgIHRyeSB7CisgICAgICBtZXRo
b2QoKTsKKyAgICB9IGNhdGNoIChleCkgeworICAgICAgYXNzZXJ0KGV4LmNvZGUgPT0gMik7ICAv
LyBTZWN1cml0eSBlcnJvcgorICAgICAgdGVzdFBhc3NlZCgiU2F3IHNlY3VyaXR5IGVycm9yIik7
CisgICAgfQorfQorCitmdW5jdGlvbiBvbldyaXRlRW5kKGUpIHsKKyAgICAtLXJlY3Vyc2lvbkRl
cHRoOworICAgIHRlc3RQYXNzZWQoIlNhdyB3cml0ZWVuZC4iKTsKKyAgICBpZiAoIXJlY3Vyc2lv
bkRlcHRoKSB7CisgICAgICAgICsrdGVzdHNSdW47CisgICAgICAgIGlmICh0ZXN0c1J1biA9PSAx
KSB7CisgICAgICAgICAgICBtZXRob2QgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0
ZXN0UGFzc2VkKCJDYWxsaW5nIHRydW5jYXRlLiIpOworICAgICAgICAgICAgICAgIHdyaXRlci50
cnVuY2F0ZSg3KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldFRpbWVvdXQobWV0aG9k
LCAwKTsgIC8vIEludm9rZSBmcm9tIHRoZSB0b3AgbGV2ZWwsIHNvIHRoYXQgd2UncmUgbm90IGFs
cmVhZHkgaW4gYSBoYW5kbGVyLgorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2xl
YW5VcCgpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVGVzdCh1bnVzZWRGaWxlRW50cnksIGZp
bGVXcml0ZXIpIHsKKyAgICB3cml0ZXIgPSBmaWxlV3JpdGVyOworICAgIG1ldGhvZCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQ2FsbGluZyB3cml0ZS4iKTsKKyAgICAgICAg
d3JpdGVyLndyaXRlKGJsb2IpOworICAgIH0KKyAgICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBvbkVy
cm9yOworICAgIGZpbGVXcml0ZXIub25hYm9ydCA9IG9uQWJvcnQ7CisgICAgZmlsZVdyaXRlci5v
bndyaXRlc3RhcnQgPSBvbldyaXRlU3RhcnQ7CisgICAgZmlsZVdyaXRlci5vbndyaXRlID0gb25X
cml0ZTsKKyAgICBmaWxlV3JpdGVyLm9ud3JpdGVlbmQgPSBvbldyaXRlRW5kOworICAgIG1ldGhv
ZCgpOworfQorCit2YXIganNUZXN0SXNBc3luYyA9IHRydWU7CitzZXR1cEFuZFJ1blRlc3QoMiox
MDI0KjEwMjQsICdmaWxlLXdyaXRlci1hYm9ydC1kZXB0aCcsIHJ1blRlc3QpOwordmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZGE2
MjJmYzBiNGVhOWViOTNmZDRhNzAxZmJkNWIyYTVkYjkyYmZhCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5q
cwpAQCAtMCwwICsxLDg2IEBACitpZiAodGhpcy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0
U2NyaXB0cygnZnMtd29ya2VyLWNvbW1vbi5qcycpOworICAgIGltcG9ydFNjcmlwdHMoJ2ZpbGUt
d3JpdGVyLXV0aWxzLmpzJyk7Cit9CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgRmlsZVdyaXRl
ciBoYW5kbGVzIGFib3J0IHByb3Blcmx5LiIpOworCit2YXIgc2F3V3JpdGVTdGFydDsKK3ZhciBz
YXdBYm9ydDsKK3ZhciBzYXdXcml0ZUVuZDsKK3ZhciB3cml0ZXI7CisKK2Z1bmN0aW9uIHRlblhC
bG9iKGJsb2IpIHsKKyAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgYmIuYXBwZW5kKGJsb2IpOwor
ICAgIH0KKyAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworfQorCitmdW5jdGlvbiBvbldyaXRlU3Rh
cnQoZSkgeworICAgIGFzc2VydCh3cml0ZXIpOworICAgIGFzc2VydCh3cml0ZXIucmVhZHlTdGF0
ZSA9PSB3cml0ZXIuV1JJVElORyk7CisgICAgYXNzZXJ0KGUudHlwZSA9PSAid3JpdGVzdGFydCIp
OworICAgIGFzc2VydCghc2F3V3JpdGVTdGFydCk7CisgICAgYXNzZXJ0KCFzYXdXcml0ZUVuZCk7
CisgICAgYXNzZXJ0KCFlLmxvYWRlZCk7CisgICAgc2F3V3JpdGVTdGFydCA9IHRydWU7CisgICAg
dGVzdFBhc3NlZCgiQ2FsbGluZyBhYm9ydCIpOworICAgIHdyaXRlci5hYm9ydCgpOworfQorCisv
LyBXZSBzaG91bGQgYWx3YXlzIGFib3J0IGJlZm9yZSBjb21wbGV0aW9uLgorZnVuY3Rpb24gb25X
cml0ZShlKSB7CisgICAgdGVzdEZhaWxlZCgiSW4gb25Xcml0ZS4iKTsKK30KKworZnVuY3Rpb24g
b25BYm9ydChlKSB7CisgICAgYXNzZXJ0KHdyaXRlci5yZWFkeVN0YXRlID09IHdyaXRlci5ET05F
KTsKKyAgICBhc3NlcnQod3JpdGVyLmVycm9yLmNvZGUgPT0gd3JpdGVyLmVycm9yLkFCT1JUX0VS
Uik7CisgICAgYXNzZXJ0KHNhd1dyaXRlU3RhcnQpOworICAgIGFzc2VydCghc2F3V3JpdGVFbmQp
OworICAgIGFzc2VydCghc2F3QWJvcnQpOworICAgIGFzc2VydChlLnR5cGUgPT0gImFib3J0Iik7
CisgICAgc2F3QWJvcnQgPSB0cnVlOworICAgIHRlc3RQYXNzZWQoIlNhdyBhYm9ydCIpOworfQor
CitmdW5jdGlvbiBvbldyaXRlRW5kKGUpIHsKKyAgICBhc3NlcnQod3JpdGVyLnJlYWR5U3RhdGUg
PT0gd3JpdGVyLkRPTkUpOworICAgIGFzc2VydCh3cml0ZXIuZXJyb3IuY29kZSA9PSB3cml0ZXIu
ZXJyb3IuQUJPUlRfRVJSKTsKKyAgICBhc3NlcnQoc2F3V3JpdGVTdGFydCk7CisgICAgYXNzZXJ0
KHNhd0Fib3J0KTsKKyAgICBhc3NlcnQoIXNhd1dyaXRlRW5kKTsKKyAgICBhc3NlcnQoZS50eXBl
ID09ICJ3cml0ZWVuZCIpOworICAgIHNhd1dyaXRlRW5kID0gdHJ1ZTsKKyAgICB0ZXN0UGFzc2Vk
KCJTYXcgd3JpdGVlbmQuIik7CisgICAgd3JpdGVyLmFib3J0KCk7ICAvLyBWZXJpZnkgdGhhdCB0
aGlzIGRvZXMgbm90aGluZyBpbiByZWFkeVN0YXRlIERPTkUuCisgICAgY2xlYW5VcCgpOworfQor
CitmdW5jdGlvbiBzdGFydFdyaXRlKGZpbGVXcml0ZXIpIHsKKyAgICAvLyBMZXQncyBtYWtlIGl0
IGFib3V0IGEgbWVnYWJ5dGUuCisgICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7
CisgICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOworICAgIHZhciBibG9iID0gdGVuWEJsb2Io
YmIuZ2V0QmxvYigpKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9IHRl
blhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVu
WEJsb2IoYmxvYik7CisgICAgd3JpdGVyID0gZmlsZVdyaXRlcjsKKyAgICBmaWxlV3JpdGVyLm9u
ZXJyb3IgPSBvbkVycm9yOworICAgIGZpbGVXcml0ZXIub25hYm9ydCA9IG9uQWJvcnQ7CisgICAg
ZmlsZVdyaXRlci5vbndyaXRlc3RhcnQgPSBvbldyaXRlU3RhcnQ7CisgICAgZmlsZVdyaXRlci5v
bndyaXRlID0gb25Xcml0ZTsKKyAgICBmaWxlV3JpdGVyLm9ud3JpdGVlbmQgPSBvbldyaXRlRW5k
OworICAgIGZpbGVXcml0ZXIuYWJvcnQoKTsgIC8vIFZlcmlmeSB0aGF0IHRoaXMgZG9lcyBub3Ro
aW5nIGluIHJlYWR5U3RhdGUgSU5JVC4KKyAgICBmaWxlV3JpdGVyLndyaXRlKGJsb2IpOworfQor
CitmdW5jdGlvbiBydW5UZXN0KHVudXNlZEZpbGVFbnRyeSwgZmlsZVdyaXRlcikgeworICAgIHN0
YXJ0V3JpdGUoZmlsZVdyaXRlcik7Cit9Cit2YXIganNUZXN0SXNBc3luYyA9IHRydWU7CitzZXR1
cEFuZFJ1blRlc3QoMioxMDI0KjEwMjQsICdmaWxlLXdyaXRlci1hYm9ydCcsIHJ1blRlc3QpOwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCmluZGV4
IDg5MmE2MjhlOGYwMTBiNGM4NDkxMzNlZjVjNGE1YTY4YmQ2YTBlMDEuLjMzZDQyNzlkZWU4NDU0
OTRmODcyYTJiYzZhY2UzZTk5Y2MxZmRlOTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCkBAIC05
OCw1ICs5OCw1IEBAIGZ1bmN0aW9uIHJ1blRlc3QodW51c2VkRmlsZUVudHJ5LCBmaWxlV3JpdGVy
KSB7CiAgICAgc3RhcnRXcml0ZShmaWxlV3JpdGVyKTsKIH0KIHZhciBqc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKLXNldHVwQW5kUnVuVGVzdCgyKjEwMjQqMTAyNCwgJ2ZpbGUtd3JpdGVyLWdjLWJsb2In
LCBydW5UZXN0KTsKK3NldHVwQW5kUnVuVGVzdCgyKjEwMjQqMTAyNCwgJ2ZpbGUtd3JpdGVyLWV2
ZW50cycsIHJ1blRlc3QpOwogdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggZDBlODc2YzE3ZjlhYzc1MjZmNGNkMTU4OWFkOTViMDBiNzM1YWQ5Yy4uNjJiOTAwYTdi
Yzk1MDZhOTFiOGZjYjUxZjg4Mzg1MzVmZGI0NGExNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4
IEBACisyMDExLTA5LTIxICBFcmljIFVocmhhbmUgIDxlcmljdUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW0Nocm9taXVtL0ZpbGVXcml0ZXJdIHJhY2UgY29uZGl0aW9uIGluIEZpbGVXcml0ZXIg
Y29tcGxldGlvbiBjYW4gbGVhZCB0byBhc3NlcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1h
Ym9ydC1jb250aW51ZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13
cml0ZXItYWJvcnQuaHRtbAorCisgICAgICAgIFRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgYmFja2Vu
ZCBhbmQgYmUgcHJlcGFyZWQgZm9yIHJlZW50cmFudCB1c2VyCisgICAgICAgIHJlcXVlc3RzLiAg
TGltaXQgcmVjdXJzaW9uIGRlcHRoIHRvIGFuIGFyYml0cmFyeSBzbWFsbCBjb25zdGFudC4KKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXIuY3BwOiBMb3RzIG9mIGV2ZW50LWhhbmRsaW5nIGNo
YW5nZXMuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyLmg6CisKIDIwMTEtMDktMjEgIEp1
bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2gg
aW4gUmVuZGVyQm94OjpwYWludE1hc2tJbWFnZXMgd2hlbiBHcmFwaGljc0NvbnRleHQncyBwYWlu
dGluZyBpcyBkaXNhYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
V3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5jcHAKaW5kZXgg
Njc4YTBhOGZlNjc5NmRhNmE3YzlkNmUwYzY2NjZkYjNhMzBkYzg4ZC4uMzQ3NzM2YjBhYTNjMDM4
NDBiZjllYTczNTZmOWRiMWFhZWI2NDdlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9GaWxlV3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0
ZXIuY3BwCkBAIC00MywxOCArNDMsMjQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0
aWMgY29uc3QgaW50IGtNYXhSZWN1cnNpb25EZXB0aCA9IDM7CisKIEZpbGVXcml0ZXI6OkZpbGVX
cml0ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IEFjdGl2ZURPTU9i
amVjdChjb250ZXh0LCB0aGlzKQogICAgICwgbV9yZWFkeVN0YXRlKElOSVQpCi0gICAgLCBtX3N0
YXJ0ZWRXcml0aW5nKGZhbHNlKQorICAgICwgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MoZmFsc2Up
CisgICAgLCBtX3F1ZXVlZE9wZXJhdGlvbihRdWV1ZWRPcGVyYXRpb25Ob25lKQogICAgICwgbV9i
eXRlc1dyaXR0ZW4oMCkKICAgICAsIG1fYnl0ZXNUb1dyaXRlKDApCiAgICAgLCBtX3RydW5jYXRl
TGVuZ3RoKC0xKQorICAgICwgbV9udW1BYm9ydHMoMCkKKyAgICAsIG1fcmVjdXJzaW9uRGVwdGgo
MCkKIHsKIH0KIAogRmlsZVdyaXRlcjo6fkZpbGVXcml0ZXIoKQogeworICAgIEFTU0VSVCghbV9y
ZWN1cnNpb25EZXB0aCk7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKQogICAgICAg
ICBzdG9wKCk7CiB9CkBAIC03Miw3ICs3OCw4IEBAIGJvb2wgRmlsZVdyaXRlcjo6Y2FuU3VzcGVu
ZCgpIGNvbnN0CiAKIHZvaWQgRmlsZVdyaXRlcjo6c3RvcCgpCiB7Ci0gICAgaWYgKHdyaXRlcigp
ICYmIG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKQorICAgIC8vIE1ha2Ugc3VyZSB3ZSd2ZSBhY3R1
YWxseSBnb3Qgc29tZXRoaW5nIHRvIHN0b3AsIGFuZCBoYXZlbid0IGFscmVhZHkgY2FsbGVkIGFi
b3J0KCkuCisgICAgaWYgKHdyaXRlcigpICYmIG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HICYmIG1f
aXNPcGVyYXRpb25JblByb2dyZXNzICYmIG1fcXVldWVkT3BlcmF0aW9uID09IFF1ZXVlZE9wZXJh
dGlvbk5vbmUpCiAgICAgICAgIHdyaXRlcigpLT5hYm9ydCgpOwogICAgIG1fYmxvYkJlaW5nV3Jp
dHRlbi5jbGVhcigpOwogICAgIG1fcmVhZHlTdGF0ZSA9IERPTkU7CkBAIC04MSw2ICs4OCw4IEBA
IHZvaWQgRmlsZVdyaXRlcjo6c3RvcCgpCiB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2IqIGRh
dGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVCh3cml0ZXIoKSk7CisgICAgQVNT
RVJUKGRhdGEpOworICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID09IC0xKTsKICAgICBpZiAo
bV9yZWFkeVN0YXRlID09IFdSSVRJTkcpIHsKICAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpJ
TlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CkBAIC04OSwxMyArOTgsMjEg
QEAgdm9pZCBGaWxlV3JpdGVyOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpUWVBFX01JU01BVENIX0VSUiwgZWMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotCisgICAgaWYgKG1fcmVjdXJzaW9uRGVwdGggPiBrTWF4UmVj
dXJzaW9uRGVwdGgpIHsKKyAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpTRUNVUklUWV9FUlIs
IGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2Jsb2JCZWluZ1dyaXR0ZW4gPSBk
YXRhOwogICAgIG1fcmVhZHlTdGF0ZSA9IFdSSVRJTkc7Ci0gICAgbV9zdGFydGVkV3JpdGluZyA9
IGZhbHNlOwogICAgIG1fYnl0ZXNXcml0dGVuID0gMDsKICAgICBtX2J5dGVzVG9Xcml0ZSA9IGRh
dGEtPnNpemUoKTsKLSAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgZGF0YSk7CisgICAg
QVNTRVJUKG1fcXVldWVkT3BlcmF0aW9uID09IFF1ZXVlZE9wZXJhdGlvbk5vbmUpOworICAgIGlm
IChtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcykgLy8gV2UgbXVzdCBiZSB3YWl0aW5nIGZvciBhbiBh
Ym9ydCB0byBjb21wbGV0ZSwgc2luY2UgbV9yZWFkeVN0YXRlIHdhc24ndCBXUklUSU5HLgorICAg
ICAgICBtX3F1ZXVlZE9wZXJhdGlvbiA9IFF1ZXVlZE9wZXJhdGlvbldyaXRlOworICAgIGVsc2UK
KyAgICAgICAgd3JpdGVyKCktPndyaXRlKHBvc2l0aW9uKCksIG1fYmxvYkJlaW5nV3JpdHRlbi5n
ZXQoKSk7CisgICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOworICAgIGZpcmVFdmVu
dChldmVudE5hbWVzKCkud3JpdGVzdGFydEV2ZW50KTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpz
ZWVrKGxvbmcgbG9uZyBwb3NpdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMDYsODIgKzEy
MywxMjkgQEAgdm9pZCBGaWxlV3JpdGVyOjpzZWVrKGxvbmcgbG9uZyBwb3NpdGlvbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2J5dGVzV3JpdHRl
biA9IDA7Ci0gICAgbV9ieXRlc1RvV3JpdGUgPSAwOworICAgIEFTU0VSVChtX3RydW5jYXRlTGVu
Z3RoID09IC0xKTsKKyAgICBBU1NFUlQobV9xdWV1ZWRPcGVyYXRpb24gPT0gUXVldWVkT3BlcmF0
aW9uTm9uZSk7CiAgICAgc2Vla0ludGVybmFsKHBvc2l0aW9uKTsKIH0KIAogdm9pZCBGaWxlV3Jp
dGVyOjp0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIEFTU0VSVCh3cml0ZXIoKSk7CisgICAgQVNTRVJUKG1fdHJ1bmNhdGVMZW5ndGggPT0gLTEp
OwogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gV1JJVElORyB8fCBwb3NpdGlvbiA8IDApIHsKICAg
ICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgIGlmIChtX3JlY3Vyc2lvbkRlcHRoID4ga01heFJlY3Vyc2lv
bkRlcHRoKSB7CisgICAgICAgIHNldEVycm9yKEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJSLCBlYyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9yZWFkeVN0YXRlID0gV1JJVElORzsKICAg
ICBtX2J5dGVzV3JpdHRlbiA9IDA7CiAgICAgbV9ieXRlc1RvV3JpdGUgPSAwOwogICAgIG1fdHJ1
bmNhdGVMZW5ndGggPSBwb3NpdGlvbjsKLSAgICB3cml0ZXIoKS0+dHJ1bmNhdGUocG9zaXRpb24p
OworICAgIEFTU0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9PSBRdWV1ZWRPcGVyYXRpb25Ob25lKTsK
KyAgICBpZiAobV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MpIC8vIFdlIG11c3QgYmUgd2FpdGluZyBm
b3IgYW4gYWJvcnQgdG8gY29tcGxldGUuCisgICAgICAgIG1fcXVldWVkT3BlcmF0aW9uID0gUXVl
dWVkT3BlcmF0aW9uVHJ1bmNhdGU7CisgICAgZWxzZQorICAgICAgICB3cml0ZXIoKS0+dHJ1bmNh
dGUobV90cnVuY2F0ZUxlbmd0aCk7CisgICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgPSB0cnVl
OworICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkud3JpdGVzdGFydEV2ZW50KTsKIH0KIAogdm9p
ZCBGaWxlV3JpdGVyOjphYm9ydChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQod3Jp
dGVyKCkpOwogICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gV1JJVElORykgewotICAgICAgICBzZXRF
cnJvcihGaWxlRXJyb3I6OklOVkFMSURfU1RBVEVfRVJSLCBlYyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CisgICAgKyttX251bUFib3J0czsKIAotICAgIHdyaXRlcigpLT5hYm9ydCgpOworICAg
IGlmIChtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcykKKyAgICAgICAgd3JpdGVyKCktPmFib3J0KCk7
CisgICAgbV9xdWV1ZWRPcGVyYXRpb24gPSBRdWV1ZWRPcGVyYXRpb25Ob25lOworICAgIG1fYmxv
YkJlaW5nV3JpdHRlbi5jbGVhcigpOworICAgIG1fdHJ1bmNhdGVMZW5ndGggPSAtMTsKKyAgICBz
aWduYWxDb21wbGV0aW9uKEZpbGVFcnJvcjo6QUJPUlRfRVJSKTsKIH0KIAogdm9pZCBGaWxlV3Jp
dGVyOjpkaWRXcml0ZShsb25nIGxvbmcgYnl0ZXMsIGJvb2wgY29tcGxldGUpCiB7CisgICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKTsKKyAgICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0
aCA9PSAtMSk7CisgICAgQVNTRVJUKG1faXNPcGVyYXRpb25JblByb2dyZXNzKTsKICAgICBBU1NF
UlQoYnl0ZXMgKyBtX2J5dGVzV3JpdHRlbiA+IDApOwogICAgIEFTU0VSVChieXRlcyArIG1fYnl0
ZXNXcml0dGVuIDw9IG1fYnl0ZXNUb1dyaXRlKTsKLSAgICBpZiAoIW1fc3RhcnRlZFdyaXRpbmcp
IHsKLSAgICAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS53cml0ZXN0YXJ0RXZlbnQpOwotICAg
ICAgICBtX3N0YXJ0ZWRXcml0aW5nID0gdHJ1ZTsKLSAgICB9CiAgICAgbV9ieXRlc1dyaXR0ZW4g
Kz0gYnl0ZXM7CiAgICAgQVNTRVJUKChtX2J5dGVzV3JpdHRlbiA9PSBtX2J5dGVzVG9Xcml0ZSkg
fHwgIWNvbXBsZXRlKTsKICAgICBzZXRQb3NpdGlvbihwb3NpdGlvbigpICsgYnl0ZXMpOwogICAg
IGlmIChwb3NpdGlvbigpID4gbGVuZ3RoKCkpCiAgICAgICAgIHNldExlbmd0aChwb3NpdGlvbigp
KTsKKyAgICAvLyBUT0RPOiBUaHJvdHRsZSB0byBubyBtb3JlIGZyZXF1ZW50bHkgdGhhbiBldmVy
eSA1MG1zLgorICAgIGludCBudW1BYm9ydHMgPSBtX251bUFib3J0czsKICAgICBmaXJlRXZlbnQo
ZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpOwotICAgIGlmIChjb21wbGV0ZSkgeworICAgIC8v
IFdlIGNvdWxkIGdldCBhbiBhYm9ydCBpbiB0aGUgaGFuZGxlciBmb3IgdGhpcyBldmVudC4gSWYg
d2UgZG8sIGl0J3MKKyAgICAvLyBhbHJlYWR5IGhhbmRsZWQgdGhlIGNsZWFudXAgYW5kIHNpZ25h
bENvbXBsZXRpb24gY2FsbC4KKyAgICBpZiAoY29tcGxldGUgJiYgbnVtQWJvcnRzID09IG1fbnVt
QWJvcnRzKSB7CiAgICAgICAgIG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVhcigpOwotICAgICAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKEZpbGVXcml0ZXJDb21wbGV0aW9uRXZl
bnRUYXNrOjpjcmVhdGUodGhpcywgRmlsZUVycm9yOjpPSykpOworICAgICAgICBtX2lzT3BlcmF0
aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICBzaWduYWxDb21wbGV0aW9uKEZpbGVFcnJv
cjo6T0spOwogICAgIH0KIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpkaWRUcnVuY2F0ZSgpCiB7CiAg
ICAgQVNTRVJUKG1fdHJ1bmNhdGVMZW5ndGggPj0gMCk7Ci0gICAgZmlyZUV2ZW50KGV2ZW50TmFt
ZXMoKS53cml0ZXN0YXJ0RXZlbnQpOwogICAgIHNldExlbmd0aChtX3RydW5jYXRlTGVuZ3RoKTsK
ICAgICBpZiAocG9zaXRpb24oKSA+IGxlbmd0aCgpKQogICAgICAgICBzZXRQb3NpdGlvbihsZW5n
dGgoKSk7Ci0gICAgbV90cnVuY2F0ZUxlbmd0aCA9IC0xOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+cG9zdFRhc2soRmlsZVdyaXRlckNvbXBsZXRpb25FdmVudFRhc2s6OmNyZWF0ZSh0
aGlzLCBGaWxlRXJyb3I6Ok9LKSk7CisgICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgPSBmYWxz
ZTsKKyAgICBzaWduYWxDb21wbGV0aW9uKEZpbGVFcnJvcjo6T0spOwogfQogCiB2b2lkIEZpbGVX
cml0ZXI6OmRpZEZhaWwoRmlsZUVycm9yOjpFcnJvckNvZGUgY29kZSkKIHsKKyAgICBBU1NFUlQo
bV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MpOwogICAgIEFTU0VSVChjb2RlICE9IEZpbGVFcnJvcjo6
T0spOwotICAgIG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVhcigpOwotICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+cG9zdFRhc2soRmlsZVdyaXRlckNvbXBsZXRpb25FdmVudFRhc2s6OmNyZWF0
ZSh0aGlzLCBjb2RlKSk7CisgICAgaWYgKGNvZGUgPT0gRmlsZUVycm9yOjpBQk9SVF9FUlIpIHsK
KyAgICAgICAgc3dpdGNoIChtX3F1ZXVlZE9wZXJhdGlvbikgeworICAgICAgICBjYXNlIFF1ZXVl
ZE9wZXJhdGlvbldyaXRlOgorICAgICAgICAgICAgQVNTRVJUKG1fdHJ1bmNhdGVMZW5ndGggPT0g
LTEpOworICAgICAgICAgICAgQVNTRVJUKG1fYmxvYkJlaW5nV3JpdHRlbi5nZXQoKSk7CisgICAg
ICAgICAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpOworICAgICAgICAgICAgd3Jp
dGVyKCktPndyaXRlKHBvc2l0aW9uKCksIG1fYmxvYkJlaW5nV3JpdHRlbi5nZXQoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRdWV1ZWRPcGVyYXRpb25UcnVuY2F0ZToKKyAg
ICAgICAgICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID49IDApOworICAgICAgICAgICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKTsKKyAgICAgICAgICAgIHdyaXRlcigpLT50cnVu
Y2F0ZShtX3RydW5jYXRlTGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFF1ZXVlZE9wZXJhdGlvbk5vbmU6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlQobV90cnVuY2F0ZUxlbmd0aCA9PSAtMSk7CisgICAgICAgICAgICBtX2lzT3BlcmF0aW9uSW5Q
cm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
bV9xdWV1ZWRPcGVyYXRpb24gPSBRdWV1ZWRPcGVyYXRpb25Ob25lOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9PSBRdWV1ZWRPcGVyYXRpb25Ob25lKTsK
KyAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKTsKKyAgICAgICAgbV9ibG9i
QmVpbmdXcml0dGVuLmNsZWFyKCk7CisgICAgICAgIG1faXNPcGVyYXRpb25JblByb2dyZXNzID0g
ZmFsc2U7CisgICAgICAgIHNpZ25hbENvbXBsZXRpb24oY29kZSk7CisgICAgfQogfQogCiB2b2lk
IEZpbGVXcml0ZXI6OnNpZ25hbENvbXBsZXRpb24oRmlsZUVycm9yOjpFcnJvckNvZGUgY29kZSkK
IHsKICAgICBtX3JlYWR5U3RhdGUgPSBET05FOworICAgIG1fdHJ1bmNhdGVMZW5ndGggPSAtMTsK
ICAgICBpZiAoRmlsZUVycm9yOjpPSyAhPSBjb2RlKSB7CiAgICAgICAgIG1fZXJyb3IgPSBGaWxl
RXJyb3I6OmNyZWF0ZShjb2RlKTsKLSAgICAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50KTsKICAgICAgICAgaWYgKEZpbGVFcnJvcjo6QUJPUlRfRVJSID09IGNvZGUpCiAgICAg
ICAgICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwogICAgIH0g
ZWxzZQogICAgICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLndyaXRlRXZlbnQpOwogICAgIGZp
cmVFdmVudChldmVudE5hbWVzKCkud3JpdGVlbmRFdmVudCk7CkBAIC0xODksNyArMjUzLDEwIEBA
IHZvaWQgRmlsZVdyaXRlcjo6c2lnbmFsQ29tcGxldGlvbihGaWxlRXJyb3I6OkVycm9yQ29kZSBj
b2RlKQogCiB2b2lkIEZpbGVXcml0ZXI6OmZpcmVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUpCiB7CisgICAgKyttX3JlY3Vyc2lvbkRlcHRoOwogICAgIGRpc3BhdGNoRXZlbnQoUHJvZ3Jl
c3NFdmVudDo6Y3JlYXRlKHR5cGUsIHRydWUsIG1fYnl0ZXNXcml0dGVuLCBtX2J5dGVzVG9Xcml0
ZSkpOworICAgIC0tbV9yZWN1cnNpb25EZXB0aDsKKyAgICBBU1NFUlQobV9yZWN1cnNpb25EZXB0
aCA+PSAwKTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpzZXRFcnJvcihGaWxlRXJyb3I6OkVycm9y
Q29kZSBlcnJvckNvZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVX
cml0ZXIuaAppbmRleCAzOWZlZmM0MjRjNmNhYTA1NGU0MzRlMjIxZmRlOTM2ZDI0OGE2NGI5Li40
YWFkYzczNGI0MGNlYTA3ZGEwOWU4OTVkNzUyNzIzMDMwYzY4ZmIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVXcml0ZXIuaApAQCAtMTAwLDQyICsxMDAsMjggQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRU
YXJnZXREYXRhOyB9CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFy
Z2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQogCisgICAgdm9pZCBzaWdu
YWxDb21wbGV0aW9uKEZpbGVFcnJvcjo6RXJyb3JDb2RlKTsKKwogICAgIHZvaWQgZmlyZUV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CiAKICAgICB2b2lkIHNldEVycm9yKEZpbGVFcnJv
cjo6RXJyb3JDb2RlLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2b2lkIHNpZ25hbENvbXBsZXRp
b24oRmlsZUVycm9yOjpFcnJvckNvZGUpOwotCi0gICAgY2xhc3MgRmlsZVdyaXRlckNvbXBsZXRp
b25FdmVudFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlV3JpdGVyQ29tcGxldGlvbkV2
ZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlcj4gZmlsZVdyaXRlciwgRmlsZUVy
cm9yOjpFcnJvckNvZGUgY29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBGaWxlV3JpdGVyQ29tcGxldGlvbkV2ZW50VGFzayhmaWxlV3JpdGVyLCBjb2RlKSk7
Ci0gICAgICAgIH0KLQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KikKLSAgICAgICAgewotICAgICAgICAgICAgbV9maWxlV3JpdGVyLT5z
aWduYWxDb21wbGV0aW9uKG1fY29kZSk7Ci0gICAgICAgIH0KLSAgICBwcml2YXRlOgotICAgICAg
ICBGaWxlV3JpdGVyQ29tcGxldGlvbkV2ZW50VGFzayhQYXNzUmVmUHRyPEZpbGVXcml0ZXI+IGZp
bGVXcml0ZXIsIEZpbGVFcnJvcjo6RXJyb3JDb2RlIGNvZGUpCi0gICAgICAgICAgICA6IG1fZmls
ZVdyaXRlcihmaWxlV3JpdGVyKQotICAgICAgICAgICAgLCBtX2NvZGUoY29kZSkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPEZpbGVXcml0ZXI+IG1fZmlsZVdyaXRlcjsK
LSAgICAgICAgRmlsZUVycm9yOjpFcnJvckNvZGUgbV9jb2RlOworICAgIGVudW0gUXVldWVkT3Bl
cmF0aW9uIHsKKyAgICAgICAgUXVldWVkT3BlcmF0aW9uTm9uZSwKKyAgICAgICAgUXVldWVkT3Bl
cmF0aW9uV3JpdGUsCisgICAgICAgIFF1ZXVlZE9wZXJhdGlvblRydW5jYXRlCiAgICAgfTsKIAog
ICAgIFJlZlB0cjxGaWxlRXJyb3I+IG1fZXJyb3I7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZl
bnRUYXJnZXREYXRhOwogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIGJvb2wgbV9z
dGFydGVkV3JpdGluZzsKKyAgICBib29sIG1faXNPcGVyYXRpb25JblByb2dyZXNzOworICAgIFF1
ZXVlZE9wZXJhdGlvbiBtX3F1ZXVlZE9wZXJhdGlvbjsKICAgICBsb25nIGxvbmcgbV9ieXRlc1dy
aXR0ZW47CiAgICAgbG9uZyBsb25nIG1fYnl0ZXNUb1dyaXRlOwogICAgIGxvbmcgbG9uZyBtX3Ry
dW5jYXRlTGVuZ3RoOworICAgIGxvbmcgbG9uZyBtX251bUFib3J0czsKKyAgICBsb25nIGxvbmcg
bV9yZWN1cnNpb25EZXB0aDsKICAgICBSZWZQdHI8QmxvYj4gbV9ibG9iQmVpbmdXcml0dGVuOwog
fTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108898</attachid>
            <date>2011-09-27 14:29:37 -0700</date>
            <delta_ts>2011-09-27 17:11:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67684-20110927142936.patch</filename>
            <type>text/plain</type>
            <size>27222</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU2ODUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ODFhZGUzMjViNDBiOWMwYWVkN2Rj
OWE4YTFjNDRlZDZiMWVmOTI4Li4wOTVkN2ZmMmMyZGRjZDE5MDEyOGZlOTI1OGQwNDM2NmUyYWQ4
MjU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMjEgIEVyaWMgVWhyaGFuZSAgPGVy
aWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW0vRmlsZVdyaXRlcl0gcmFjZSBj
b25kaXRpb24gaW4gRmlsZVdyaXRlciBjb21wbGV0aW9uIGNhbiBsZWFkIHRvIGFzc2VydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZmlsZXN5
c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJv
cnQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci1hYm9ydC1jb250aW51ZS5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qczogQWRkZWQuCisgICAgICAgICogZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanM6IEZpeGVkIGEgY29w
eS1wYXN0ZSBlcnJvci4KKwogMjAxMS0wOS0yMSAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJh
aXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBSZW5kZXJCb3g6OnBhaW50TWFza0lt
YWdlcyB3aGVuIEdyYXBoaWNzQ29udGV4dCdzIHBhaW50aW5nIGlzIGRpc2FibGVkCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtY29udGlu
dWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVy
LWFib3J0LWNvbnRpbnVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGQ2MDk5ZTU1N2JmNmQz
MDcxMzA0OGFjMTZlM2U3NGRhYjk2N2RlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDI2IEBACitUZXN0IHRoYXQgRmlsZVdyaXRlciBjYW4gY29udGludWUgaW1tZWRp
YXRlbHkgYWZ0ZXIgYW4gYWJvcnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworc3Rh
cnRpbmcgdGVzdAorUEFTUyAxMTAwMDAwIGlzIGJsb2JTaXplCitQQVNTIENhbGxpbmcgYWJvcnQK
K1BBU1MgU2F3IGFib3J0CitQQVNTIFNhdyB3cml0ZWVuZCAwLgorUEFTUyB3cml0ZXIubGVuZ3Ro
IGlzIDAKK1BBU1MgZm9sbG93T25BY3Rpb24gPT0gMSB8fCBmb2xsb3dPbkFjdGlvbiA9PSAzIGlz
IHRydWUKK1BBU1MgMTEwMDAwMCBpcyBibG9iU2l6ZQorUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDEx
MDAwMDAKK1BBU1MgU2F3IHdyaXRlZW5kIDEuCitQQVNTIDExMDAwMDAgaXMgYmxvYlNpemUKK1BB
U1MgQ2FsbGluZyBhYm9ydAorUEFTUyBTYXcgYWJvcnQKK1BBU1MgU2F3IHdyaXRlZW5kIDAuCitQ
QVNTIHdyaXRlci5sZW5ndGggaXMgMTEwMDAwMAorUEFTUyBmb2xsb3dPbkFjdGlvbiA9PSAxIHx8
IGZvbGxvd09uQWN0aW9uID09IDMgaXMgdHJ1ZQorUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDcKK1BB
U1MgQWxsIHRlc3RzIGNvbXBsZXRlLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzViZmE3
ODFhOWI1YzMxY2I1ZDY0YjhlNjYzNWExZTg2OGMyNTcyNAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1s
CkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorICAgIDx0aXRsZT5GaWxlIFdyaXRlciBBYm9ydCBhbmQgQ29udGludWU8L3RpdGxl
PgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwv
c2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9k
eT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGUtd3JpdGVyLWFib3J0LWRlcHRoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjI1NWExMGVhYjY5NTZiNDA4YWZmOGY2MGRlMDhmMjg1N2UyYzVhYwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBAQAorVGVzdCB0aGF0IEZpbGVXcml0ZXIgZGVmZW5k
cyBhZ2FpbnN0IGluZmluaXRlIHJlY3Vyc2lvbiB2aWEgYWJvcnQuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworc3RhcnRpbmcgdGVzdAorUEFTUyBDYWxsaW5nIHdyaXRlLgorUEFTUyBD
YWxsaW5nIGFib3J0CitQQVNTIFNhdyBhYm9ydAorUEFTUyBDYWxsaW5nIHdyaXRlLgorUEFTUyBD
YWxsaW5nIGFib3J0CitQQVNTIFNhdyBhYm9ydAorUEFTUyBDYWxsaW5nIHdyaXRlLgorUEFTUyBT
YXcgc2VjdXJpdHkgZXJyb3IKK1BBU1MgU2F3IHdyaXRlZW5kLgorUEFTUyBTYXcgd3JpdGVlbmQu
CitQQVNTIENhbGxpbmcgdHJ1bmNhdGUuCitQQVNTIENhbGxpbmcgYWJvcnQKK1BBU1MgU2F3IGFi
b3J0CitQQVNTIENhbGxpbmcgdHJ1bmNhdGUuCitQQVNTIENhbGxpbmcgYWJvcnQKK1BBU1MgU2F3
IGFib3J0CitQQVNTIENhbGxpbmcgdHJ1bmNhdGUuCitQQVNTIFNhdyBzZWN1cml0eSBlcnJvcgor
UEFTUyBTYXcgd3JpdGVlbmQuCitQQVNTIFNhdyB3cml0ZWVuZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtZGVwdGguaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJmZDAwNTgyYjA5ZjllYjAxMTUyNTdmZDE4NWYwZTNlYTZjN2VmY2EKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtZGVw
dGguaHRtbApAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorIDxoZWFk
PgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIj4KKyAgICA8dGl0bGU+RmlsZSBXcml0ZXIgQWJvcnQgRGVwdGg8L3RpdGxl
PgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwv
c2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9keT4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUt
d3JpdGVyLWFib3J0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9m
aWxlLXdyaXRlci1hYm9ydC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM5ZDUzNGYzYzZmYmFm
MWE0MzAzZTM3OGQ4ZTUzYWEzNzFkNWQwMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxMiBAQAorVGVzdCB0aGF0IEZpbGVXcml0ZXIgaGFuZGxlcyBhYm9ydCBwcm9wZXJseS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitzdGFydGluZyB0ZXN0CitQQVNTIENhbGxpbmcg
YWJvcnQKK1BBU1MgU2F3IGFib3J0CitQQVNTIFNhdyB3cml0ZWVuZC4KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1NGY2
OWJiZGZkZWQxNTlhZDFjZWE3ZWM2MjAzNTczYzljMDc5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQuaHRtbApAQCAtMCww
ICsxLDE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorIDxoZWFkPgorICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KyAgICA8dGl0bGU+RmlsZSBXcml0ZXIgQWJvcnQ8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8
Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLXdyaXRlci1hYm9y
dC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250
aW51ZS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0
ZXItYWJvcnQtY29udGludWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc5YzZkMzA1NDQzYWRkNjIzZjczZGM3
MjViNTY0ZDVlN2FmZTQ0NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGludWUuanMKQEAgLTAsMCAr
MSwxMzggQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdm
cy13b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnZmlsZS13cml0ZXItdXRp
bHMuanMnKTsKK30KKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBGaWxlV3JpdGVyIGNhbiBjb250
aW51ZSBpbW1lZGlhdGVseSBhZnRlciBhbiBhYm9ydC4iKTsKKwordmFyIHNhd1dyaXRlU3RhcnQ7
Cit2YXIgc2F3QWJvcnQ7Cit2YXIgc2F3V3JpdGVFbmQ7Cit2YXIgd3JpdGVyOwordmFyIGV4cGVj
dGVkTGVuZ3RoOwordmFyIHRydW5jYXRlTGVuZ3RoID0gNzsKK3ZhciBibG9iU2l6ZSA9IDExMDAw
MDA7CisKK3ZhciBtZXRob2RTZXQgPSBbCisgIHsgIC8vIFNldHVwIG1ldGhvZCBzZXQgdGhhdCB3
cml0ZXMsIHRoZW4gYWJvcnRzIHRoYXQgd3JpdGUgYmVmb3JlIGNvbXBsZXRpb24uCisgICAgYWN0
aW9uIDogc3RhcnRXcml0ZSwKKyAgICB2ZXJpZnlMZW5ndGggOiAwLAorICAgIG9ud3JpdGVzdGFy
dCA6IGFib3J0V3JpdGUsCisgICAgb253cml0ZSA6IG9uRXJyb3IsCisgICAgb25hYm9ydCA6IGxv
Z0Fib3J0LAorICAgIG9ud3JpdGVlbmQgOiBjaGVja0xlbmd0aEFuZENhbGxGb2xsb3dPbkFjdGlv
bgorICB9LAorICB7ICAvLyBNZXRob2Qgc2V0IHRoYXQgZG9lcyBhIGNvbXBsZXRlIHdyaXRlLgor
ICAgIGFjdGlvbiA6IHN0YXJ0V3JpdGUsCisgICAgdmVyaWZ5TGVuZ3RoIDogYmxvYlNpemUsCisg
ICAgb253cml0ZXN0YXJ0IDogbm9wLAorICAgIG9ud3JpdGUgOiBub3AsCisgICAgb25hYm9ydCA6
IG9uRXJyb3IsCisgICAgb253cml0ZWVuZCA6IGNoZWNrTGVuZ3RoQW5kU3RhcnROZXh0VGVzdAor
ICB9LAorICB7ICAvLyBTZXR1cCBtZXRob2Qgc2V0IHRoYXQgd3JpdGVzLCB0aGVuIGFib3J0cyB0
aGF0IHdyaXRlIGJlZm9yZSBjb21wbGV0aW9uLgorICAgIGFjdGlvbiA6IHN0YXJ0V3JpdGUsCisg
ICAgdmVyaWZ5TGVuZ3RoIDogYmxvYlNpemUsICAvLyBMZWZ0IG92ZXIgZnJvbSB0aGUgcHJldmlv
dXMgdGVzdC4KKyAgICBvbndyaXRlc3RhcnQgOiBhYm9ydFdyaXRlLAorICAgIG9ud3JpdGUgOiBv
bkVycm9yLAorICAgIG9uYWJvcnQgOiBsb2dBYm9ydCwKKyAgICBvbndyaXRlZW5kIDogY2hlY2tM
ZW5ndGhBbmRDYWxsRm9sbG93T25BY3Rpb24KKyAgfSwKKyAgeyAvLyBNZXRob2Qgc2V0IHRoYXQg
ZG9lcyBhIGNvbXBsZXRlIHRydW5jYXRlLgorICAgIGFjdGlvbiA6IHN0YXJ0VHJ1bmNhdGUsCisg
ICAgdmVyaWZ5TGVuZ3RoIDogdHJ1bmNhdGVMZW5ndGgsCisgICAgb253cml0ZXN0YXJ0IDogbm9w
LAorICAgIG9ud3JpdGUgOiBub3AsCisgICAgb25hYm9ydCA6IG9uRXJyb3IsCisgICAgb253cml0
ZWVuZCA6IGNoZWNrTGVuZ3RoQW5kQ29tcGxldGVUZXN0CisgIH1dOworCitmdW5jdGlvbiBub3Ao
KSB7Cit9CisKK2Z1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKKyAgICB2YXIgYmIgPSBuZXcgV2Vi
S2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAg
ICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgIH0KKyAgICByZXR1cm4gYmIuZ2V0QmxvYigpOwor
fQorCisvLyBUaGVzZSBtZXRob2RzIHNldCB1cCBhIHdyaXRlLCBhYm9ydCBpdCBhcyBzb29uIGFz
IGl0IHN0YXJ0cywgdGhlbiBpbml0aWF0ZQorLy8gdGhlIGZvbGxvdyBvbiBhY3Rpb24uCitmdW5j
dGlvbiBhYm9ydFdyaXRlKGUpIHsKKyAgICB0ZXN0UGFzc2VkKCJDYWxsaW5nIGFib3J0Iik7Cisg
ICAgd3JpdGVyLmFib3J0KCk7Cit9CisKK2Z1bmN0aW9uIGxvZ0Fib3J0KGUpIHsKKyAgICB0ZXN0
UGFzc2VkKCJTYXcgYWJvcnQiKTsKK30KKworZnVuY3Rpb24gY2hlY2tMZW5ndGhBbmRDYWxsRm9s
bG93T25BY3Rpb24oZSkgeworICAgIHRlc3RQYXNzZWQoIlNhdyB3cml0ZWVuZCAwLiIpOworICAg
IHNob3VsZEJlKCJ3cml0ZXIubGVuZ3RoIiwgIiIgKyBleHBlY3RlZExlbmd0aCk7CisgICAgZG9G
b2xsb3dPbkFjdGlvbigpOworfQorCisvLyBGb3IgdGhlIHNlY29uZCBtZXRob2Qgc2V0LCB2ZXJp
ZnkgY29tcGxldGlvbiBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0ZXN0LgorZnVuY3Rpb24gY2hl
Y2tMZW5ndGhBbmRTdGFydE5leHRUZXN0KGUpIHsKKyAgICBzaG91bGRCZSgid3JpdGVyLmxlbmd0
aCIsICIiICsgZXhwZWN0ZWRMZW5ndGgpOworICAgIHRlc3RQYXNzZWQoIlNhdyB3cml0ZWVuZCAx
LiIpOworICAgIHJ1blRlc3QoMiwgMyk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrTGVuZ3RoQW5kQ29t
cGxldGVUZXN0KGUpIHsKKyAgICBzaG91bGRCZSgid3JpdGVyLmxlbmd0aCIsICIiICsgZXhwZWN0
ZWRMZW5ndGgpOworICAgIHRlc3RQYXNzZWQoIkFsbCB0ZXN0cyBjb21wbGV0ZS4iKTsKKyAgICBj
bGVhblVwKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0V3JpdGUoKSB7CisgICAgLy8gTGV0J3MgbWFr
ZSBpdCBhYm91dCBhIG1lZ2FieXRlLgorICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRl
cigpOworICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0iKTsKKyAgICB2YXIgYmxvYiA9IHRlblhC
bG9iKGJiLmdldEJsb2IoKSk7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2Ig
PSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9
IHRlblhCbG9iKGJsb2IpOworICAgIHZhciBzaXplID0gYmxvYi5zaXplOworICAgIHNob3VsZEJl
KCIiICsgc2l6ZSwgImJsb2JTaXplIik7CisgICAgd3JpdGVyLndyaXRlKGJsb2IpOworfQorCitm
dW5jdGlvbiBzdGFydFRydW5jYXRlKCkgeworICAgIHdyaXRlci50cnVuY2F0ZSh0cnVuY2F0ZUxl
bmd0aCk7Cit9CisKK2Z1bmN0aW9uIHNldHVwV3JpdGVyKG1ldGhvZFNldEluZGV4LCB3cml0ZXIp
IHsKKyAgICB3cml0ZXIub25lcnJvciA9IG9uRXJyb3I7CisKKyAgICB2YXIgbWV0aG9kcyA9IG1l
dGhvZFNldFttZXRob2RTZXRJbmRleF07CisgICAgd3JpdGVyLm9uYWJvcnQgPSBtZXRob2RzLm9u
YWJvcnQ7CisgICAgd3JpdGVyLm9ud3JpdGVzdGFydCA9IG1ldGhvZHMub253cml0ZXN0YXJ0Owor
ICAgIHdyaXRlci5vbndyaXRlID0gbWV0aG9kcy5vbndyaXRlOworICAgIHdyaXRlci5vbndyaXRl
ZW5kID0gbWV0aG9kcy5vbndyaXRlZW5kOworICAgIGV4cGVjdGVkTGVuZ3RoID0gbWV0aG9kcy52
ZXJpZnlMZW5ndGg7CisgICAgbWV0aG9kcy5hY3Rpb24oKTsKK30KKworZnVuY3Rpb24gcnVuVGVz
dChpbml0SW5kZXgsIHRlc3RJbmRleCkgeworICAgIGZvbGxvd09uQWN0aW9uID0gdGVzdEluZGV4
OworICAgIHNldHVwV3JpdGVyKGluaXRJbmRleCwgd3JpdGVyKTsKK30KKworZnVuY3Rpb24gZG9G
b2xsb3dPbkFjdGlvbigpIHsKKyAgICBzaG91bGRCZVRydWUoImZvbGxvd09uQWN0aW9uID09IDEg
fHwgZm9sbG93T25BY3Rpb24gPT0gMyIpOworICAgIHNldHVwV3JpdGVyKGZvbGxvd09uQWN0aW9u
LCB3cml0ZXIpOworfQorCit2YXIganNUZXN0SXNBc3luYyA9IHRydWU7CitzZXR1cEFuZFJ1blRl
c3QoMioxMDI0KjEwMjQsICdmaWxlLXdyaXRlci1hYm9ydCcsCisgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gKGZpbGVFbnRyeSwgZmlsZVdyaXRlcikgeworICAgICAgICAgICAgICAgICAgICBmaWxl
RW50cnlGb3JDbGVhbnVwID0gZmlsZUVudHJ5OworICAgICAgICAgICAgICAgICAgICB3cml0ZXIg
PSBmaWxlV3JpdGVyOworICAgICAgICAgICAgICAgICAgICBydW5UZXN0KDAsIDEpOworICAgICAg
ICAgICAgICAgIH0pOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0
LWRlcHRoLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdy
aXRlci1hYm9ydC1kZXB0aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40M2U1N2FhZGQxOWRlZTU4OGJlODk4MzE3
NWM3ZGFjOTY1Yjc1OTdmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcwpAQCAtMCwwICsxLDcz
IEBACitpZiAodGhpcy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0U2NyaXB0cygnZnMtd29y
a2VyLWNvbW1vbi5qcycpOworICAgIGltcG9ydFNjcmlwdHMoJ2ZpbGUtd3JpdGVyLXV0aWxzLmpz
Jyk7Cit9CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgRmlsZVdyaXRlciBkZWZlbmRzIGFnYWlu
c3QgaW5maW5pdGUgcmVjdXJzaW9uIHZpYSBhYm9ydC4iKTsKKwordmFyIHNhd1dyaXRlU3RhcnQ7
Cit2YXIgc2F3QWJvcnQ7Cit2YXIgc2F3V3JpdGVFbmQ7Cit2YXIgd3JpdGVyOwordmFyIGJiID0g
bmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CitiYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Cit2YXIg
YmxvYiA9IGJiLmdldEJsb2IoKTsKK3ZhciByZWN1cnNpb25EZXB0aCA9IDA7Cit2YXIgbWV0aG9k
OwordmFyIHRlc3RzUnVuID0gMDsKKworZnVuY3Rpb24gb25Xcml0ZVN0YXJ0KGUpIHsKKyAgICB0
ZXN0UGFzc2VkKCJDYWxsaW5nIGFib3J0Iik7CisgICAgKytyZWN1cnNpb25EZXB0aDsKKyAgICB3
cml0ZXIuYWJvcnQoKTsKK30KKworLy8gV2Ugc2hvdWxkIGFsd2F5cyBhYm9ydCBiZWZvcmUgY29t
cGxldGlvbi4KK2Z1bmN0aW9uIG9uV3JpdGUoZSkgeworICAgIHRlc3RGYWlsZWQoIkluIG9uV3Jp
dGUuIik7Cit9CisKK2Z1bmN0aW9uIG9uQWJvcnQoZSkgeworICAgIHRlc3RQYXNzZWQoIlNhdyBh
Ym9ydCIpOworICAgIHRyeSB7CisgICAgICBtZXRob2QoKTsKKyAgICB9IGNhdGNoIChleCkgewor
ICAgICAgYXNzZXJ0KGV4LmNvZGUgPT0gMik7ICAvLyBTZWN1cml0eSBlcnJvcgorICAgICAgdGVz
dFBhc3NlZCgiU2F3IHNlY3VyaXR5IGVycm9yIik7CisgICAgfQorfQorCitmdW5jdGlvbiBvbldy
aXRlRW5kKGUpIHsKKyAgICAtLXJlY3Vyc2lvbkRlcHRoOworICAgIHRlc3RQYXNzZWQoIlNhdyB3
cml0ZWVuZC4iKTsKKyAgICBpZiAoIXJlY3Vyc2lvbkRlcHRoKSB7CisgICAgICAgICsrdGVzdHNS
dW47CisgICAgICAgIGlmICh0ZXN0c1J1biA9PSAxKSB7CisgICAgICAgICAgICBtZXRob2QgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJDYWxsaW5nIHRydW5jYXRl
LiIpOworICAgICAgICAgICAgICAgIHdyaXRlci50cnVuY2F0ZSg3KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHNldFRpbWVvdXQobWV0aG9kLCAwKTsgIC8vIEludm9rZSBmcm9tIHRoZSB0
b3AgbGV2ZWwsIHNvIHRoYXQgd2UncmUgbm90IGFscmVhZHkgaW4gYSBoYW5kbGVyLgorICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2xlYW5VcCgpOworICAgIH0KK30KKworZnVuY3Rp
b24gcnVuVGVzdCh1bnVzZWRGaWxlRW50cnksIGZpbGVXcml0ZXIpIHsKKyAgICB3cml0ZXIgPSBm
aWxlV3JpdGVyOworICAgIG1ldGhvZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGVzdFBhc3Nl
ZCgiQ2FsbGluZyB3cml0ZS4iKTsKKyAgICAgICAgd3JpdGVyLndyaXRlKGJsb2IpOworICAgIH0K
KyAgICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBvbkVycm9yOworICAgIGZpbGVXcml0ZXIub25hYm9y
dCA9IG9uQWJvcnQ7CisgICAgZmlsZVdyaXRlci5vbndyaXRlc3RhcnQgPSBvbldyaXRlU3RhcnQ7
CisgICAgZmlsZVdyaXRlci5vbndyaXRlID0gb25Xcml0ZTsKKyAgICBmaWxlV3JpdGVyLm9ud3Jp
dGVlbmQgPSBvbldyaXRlRW5kOworICAgIG1ldGhvZCgpOworfQorCit2YXIganNUZXN0SXNBc3lu
YyA9IHRydWU7CitzZXR1cEFuZFJ1blRlc3QoMioxMDI0KjEwMjQsICdmaWxlLXdyaXRlci1hYm9y
dC1kZXB0aCcsIHJ1blRlc3QpOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVy
LWFib3J0LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdy
aXRlci1hYm9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZGE2MjJmYzBiNGVhOWViOTNmZDRhNzAxZmJkNWIy
YTVkYjkyYmZhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcwpAQCAtMCwwICsxLDg2IEBACitpZiAodGhp
cy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0U2NyaXB0cygnZnMtd29ya2VyLWNvbW1vbi5q
cycpOworICAgIGltcG9ydFNjcmlwdHMoJ2ZpbGUtd3JpdGVyLXV0aWxzLmpzJyk7Cit9CisKK2Rl
c2NyaXB0aW9uKCJUZXN0IHRoYXQgRmlsZVdyaXRlciBoYW5kbGVzIGFib3J0IHByb3Blcmx5LiIp
OworCit2YXIgc2F3V3JpdGVTdGFydDsKK3ZhciBzYXdBYm9ydDsKK3ZhciBzYXdXcml0ZUVuZDsK
K3ZhciB3cml0ZXI7CisKK2Z1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKKyAgICB2YXIgYmIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kp
IHsKKyAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgIH0KKyAgICByZXR1cm4gYmIuZ2V0Qmxv
YigpOworfQorCitmdW5jdGlvbiBvbldyaXRlU3RhcnQoZSkgeworICAgIGFzc2VydCh3cml0ZXIp
OworICAgIGFzc2VydCh3cml0ZXIucmVhZHlTdGF0ZSA9PSB3cml0ZXIuV1JJVElORyk7CisgICAg
YXNzZXJ0KGUudHlwZSA9PSAid3JpdGVzdGFydCIpOworICAgIGFzc2VydCghc2F3V3JpdGVTdGFy
dCk7CisgICAgYXNzZXJ0KCFzYXdXcml0ZUVuZCk7CisgICAgYXNzZXJ0KCFlLmxvYWRlZCk7Cisg
ICAgc2F3V3JpdGVTdGFydCA9IHRydWU7CisgICAgdGVzdFBhc3NlZCgiQ2FsbGluZyBhYm9ydCIp
OworICAgIHdyaXRlci5hYm9ydCgpOworfQorCisvLyBXZSBzaG91bGQgYWx3YXlzIGFib3J0IGJl
Zm9yZSBjb21wbGV0aW9uLgorZnVuY3Rpb24gb25Xcml0ZShlKSB7CisgICAgdGVzdEZhaWxlZCgi
SW4gb25Xcml0ZS4iKTsKK30KKworZnVuY3Rpb24gb25BYm9ydChlKSB7CisgICAgYXNzZXJ0KHdy
aXRlci5yZWFkeVN0YXRlID09IHdyaXRlci5ET05FKTsKKyAgICBhc3NlcnQod3JpdGVyLmVycm9y
LmNvZGUgPT0gd3JpdGVyLmVycm9yLkFCT1JUX0VSUik7CisgICAgYXNzZXJ0KHNhd1dyaXRlU3Rh
cnQpOworICAgIGFzc2VydCghc2F3V3JpdGVFbmQpOworICAgIGFzc2VydCghc2F3QWJvcnQpOwor
ICAgIGFzc2VydChlLnR5cGUgPT0gImFib3J0Iik7CisgICAgc2F3QWJvcnQgPSB0cnVlOworICAg
IHRlc3RQYXNzZWQoIlNhdyBhYm9ydCIpOworfQorCitmdW5jdGlvbiBvbldyaXRlRW5kKGUpIHsK
KyAgICBhc3NlcnQod3JpdGVyLnJlYWR5U3RhdGUgPT0gd3JpdGVyLkRPTkUpOworICAgIGFzc2Vy
dCh3cml0ZXIuZXJyb3IuY29kZSA9PSB3cml0ZXIuZXJyb3IuQUJPUlRfRVJSKTsKKyAgICBhc3Nl
cnQoc2F3V3JpdGVTdGFydCk7CisgICAgYXNzZXJ0KHNhd0Fib3J0KTsKKyAgICBhc3NlcnQoIXNh
d1dyaXRlRW5kKTsKKyAgICBhc3NlcnQoZS50eXBlID09ICJ3cml0ZWVuZCIpOworICAgIHNhd1dy
aXRlRW5kID0gdHJ1ZTsKKyAgICB0ZXN0UGFzc2VkKCJTYXcgd3JpdGVlbmQuIik7CisgICAgd3Jp
dGVyLmFib3J0KCk7ICAvLyBWZXJpZnkgdGhhdCB0aGlzIGRvZXMgbm90aGluZyBpbiByZWFkeVN0
YXRlIERPTkUuCisgICAgY2xlYW5VcCgpOworfQorCitmdW5jdGlvbiBzdGFydFdyaXRlKGZpbGVX
cml0ZXIpIHsKKyAgICAvLyBMZXQncyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5dGUuCisgICAgdmFy
IGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1
bSIpOworICAgIHZhciBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKKyAgICBibG9iID0g
dGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0
ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgd3JpdGVyID0g
ZmlsZVdyaXRlcjsKKyAgICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBvbkVycm9yOworICAgIGZpbGVX
cml0ZXIub25hYm9ydCA9IG9uQWJvcnQ7CisgICAgZmlsZVdyaXRlci5vbndyaXRlc3RhcnQgPSBv
bldyaXRlU3RhcnQ7CisgICAgZmlsZVdyaXRlci5vbndyaXRlID0gb25Xcml0ZTsKKyAgICBmaWxl
V3JpdGVyLm9ud3JpdGVlbmQgPSBvbldyaXRlRW5kOworICAgIGZpbGVXcml0ZXIuYWJvcnQoKTsg
IC8vIFZlcmlmeSB0aGF0IHRoaXMgZG9lcyBub3RoaW5nIGluIHJlYWR5U3RhdGUgSU5JVC4KKyAg
ICBmaWxlV3JpdGVyLndyaXRlKGJsb2IpOworfQorCitmdW5jdGlvbiBydW5UZXN0KHVudXNlZEZp
bGVFbnRyeSwgZmlsZVdyaXRlcikgeworICAgIHN0YXJ0V3JpdGUoZmlsZVdyaXRlcik7Cit9Cit2
YXIganNUZXN0SXNBc3luYyA9IHRydWU7CitzZXR1cEFuZFJ1blRlc3QoMioxMDI0KjEwMjQsICdm
aWxlLXdyaXRlci1hYm9ydCcsIHJ1blRlc3QpOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2Zp
bGUtd3JpdGVyLWV2ZW50cy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJj
ZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCmluZGV4IDg5MmE2MjhlOGYwMTBiNGM4NDkxMzNlZjVj
NGE1YTY4YmQ2YTBlMDEuLjMzZDQyNzlkZWU4NDU0OTRmODcyYTJiYzZhY2UzZTk5Y2MxZmRlOTgg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13
cml0ZXItZXZlbnRzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJj
ZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCkBAIC05OCw1ICs5OCw1IEBAIGZ1bmN0aW9uIHJ1blRl
c3QodW51c2VkRmlsZUVudHJ5LCBmaWxlV3JpdGVyKSB7CiAgICAgc3RhcnRXcml0ZShmaWxlV3Jp
dGVyKTsKIH0KIHZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLXNldHVwQW5kUnVuVGVzdCgyKjEw
MjQqMTAyNCwgJ2ZpbGUtd3JpdGVyLWdjLWJsb2InLCBydW5UZXN0KTsKK3NldHVwQW5kUnVuVGVz
dCgyKjEwMjQqMTAyNCwgJ2ZpbGUtd3JpdGVyLWV2ZW50cycsIHJ1blRlc3QpOwogdmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDBlODc2YzE3ZjlhYzc1MjZmNGNk
MTU4OWFkOTViMDBiNzM1YWQ5Yy4uNjJiOTAwYTdiYzk1MDZhOTFiOGZjYjUxZjg4Mzg1MzVmZGI0
NGExNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTA5LTIxICBFcmljIFVocmhh
bmUgIDxlcmljdUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtL0ZpbGVXcml0ZXJd
IHJhY2UgY29uZGl0aW9uIGluIEZpbGVXcml0ZXIgY29tcGxldGlvbiBjYW4gbGVhZCB0byBhc3Nl
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3Njg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6
IGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1sCisgICAgICAg
ICAgICAgICBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQuaHRtbAorCisgICAgICAg
IFRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgYmFja2VuZCBhbmQgYmUgcHJlcGFyZWQgZm9yIHJlZW50
cmFudCB1c2VyCisgICAgICAgIHJlcXVlc3RzLiAgTGltaXQgcmVjdXJzaW9uIGRlcHRoIHRvIGFu
IGFyYml0cmFyeSBzbWFsbCBjb25zdGFudC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXIu
Y3BwOiBMb3RzIG9mIGV2ZW50LWhhbmRsaW5nIGNoYW5nZXMuCisgICAgICAgICogZmlsZWFwaS9G
aWxlV3JpdGVyLmg6CisKIDIwMTEtMDktMjEgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gUmVuZGVyQm94OjpwYWludE1hc2tJbWFn
ZXMgd2hlbiBHcmFwaGljc0NvbnRleHQncyBwYWludGluZyBpcyBkaXNhYmxlZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVdyaXRlci5jcHAKaW5kZXggNjc4YTBhOGZlNjc5NmRhNmE3YzlkNmUwYzY2
NjZkYjNhMzBkYzg4ZC4uYTVkYTY5Mjk4YzBhMzBiNGNhOGYyNjQxMDU0ZjgwN2NhYWNjMjA5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuY3BwCkBAIC00MywxOCArNDMsMjQgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgaW50IGtNYXhSZWN1cnNpb25E
ZXB0aCA9IDM7CisKIEZpbGVXcml0ZXI6OkZpbGVXcml0ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQogICAgICwg
bV9yZWFkeVN0YXRlKElOSVQpCi0gICAgLCBtX3N0YXJ0ZWRXcml0aW5nKGZhbHNlKQorICAgICwg
bV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCisgICAgLCBtX3F1ZXVlZE9wZXJhdGlvbihP
cGVyYXRpb25Ob25lKQogICAgICwgbV9ieXRlc1dyaXR0ZW4oMCkKICAgICAsIG1fYnl0ZXNUb1dy
aXRlKDApCiAgICAgLCBtX3RydW5jYXRlTGVuZ3RoKC0xKQorICAgICwgbV9udW1BYm9ydHMoMCkK
KyAgICAsIG1fcmVjdXJzaW9uRGVwdGgoMCkKIHsKIH0KIAogRmlsZVdyaXRlcjo6fkZpbGVXcml0
ZXIoKQogeworICAgIEFTU0VSVCghbV9yZWN1cnNpb25EZXB0aCk7CiAgICAgaWYgKG1fcmVhZHlT
dGF0ZSA9PSBXUklUSU5HKQogICAgICAgICBzdG9wKCk7CiB9CkBAIC03Miw3ICs3OCw4IEBAIGJv
b2wgRmlsZVdyaXRlcjo6Y2FuU3VzcGVuZCgpIGNvbnN0CiAKIHZvaWQgRmlsZVdyaXRlcjo6c3Rv
cCgpCiB7Ci0gICAgaWYgKHdyaXRlcigpICYmIG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKQorICAg
IC8vIE1ha2Ugc3VyZSB3ZSd2ZSBhY3R1YWxseSBnb3Qgc29tZXRoaW5nIHRvIHN0b3AsIGFuZCBo
YXZlbid0IGFscmVhZHkgY2FsbGVkIGFib3J0KCkuCisgICAgaWYgKHdyaXRlcigpICYmIG1fcmVh
ZHlTdGF0ZSA9PSBXUklUSU5HICYmIG1faXNPcGVyYXRpb25JblByb2dyZXNzICYmIG1fcXVldWVk
T3BlcmF0aW9uID09IE9wZXJhdGlvbk5vbmUpCiAgICAgICAgIHdyaXRlcigpLT5hYm9ydCgpOwog
ICAgIG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVhcigpOwogICAgIG1fcmVhZHlTdGF0ZSA9IERPTkU7
CkBAIC04MSw2ICs4OCw4IEBAIHZvaWQgRmlsZVdyaXRlcjo6c3RvcCgpCiB2b2lkIEZpbGVXcml0
ZXI6OndyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVCh3
cml0ZXIoKSk7CisgICAgQVNTRVJUKGRhdGEpOworICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3Ro
ID09IC0xKTsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpIHsKICAgICAgICAgc2V0
RXJyb3IoRmlsZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47
CkBAIC04OSwxMyArOTgsMjEgQEAgdm9pZCBGaWxlV3JpdGVyOjp3cml0ZShCbG9iKiBkYXRhLCBF
eGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpUWVBFX01JU01B
VENIX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgaWYgKG1fcmVjdXJz
aW9uRGVwdGggPiBrTWF4UmVjdXJzaW9uRGVwdGgpIHsKKyAgICAgICAgc2V0RXJyb3IoRmlsZUVy
cm9yOjpTRUNVUklUWV9FUlIsIGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2Js
b2JCZWluZ1dyaXR0ZW4gPSBkYXRhOwogICAgIG1fcmVhZHlTdGF0ZSA9IFdSSVRJTkc7Ci0gICAg
bV9zdGFydGVkV3JpdGluZyA9IGZhbHNlOwogICAgIG1fYnl0ZXNXcml0dGVuID0gMDsKICAgICBt
X2J5dGVzVG9Xcml0ZSA9IGRhdGEtPnNpemUoKTsKLSAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRp
b24oKSwgZGF0YSk7CisgICAgQVNTRVJUKG1fcXVldWVkT3BlcmF0aW9uID09IE9wZXJhdGlvbk5v
bmUpOworICAgIGlmIChtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcykgLy8gV2UgbXVzdCBiZSB3YWl0
aW5nIGZvciBhbiBhYm9ydCB0byBjb21wbGV0ZSwgc2luY2UgbV9yZWFkeVN0YXRlIHdhc24ndCBX
UklUSU5HLgorICAgICAgICBtX3F1ZXVlZE9wZXJhdGlvbiA9IE9wZXJhdGlvbldyaXRlOworICAg
IGVsc2UKKyAgICAgICAgd3JpdGVyKCktPndyaXRlKHBvc2l0aW9uKCksIG1fYmxvYkJlaW5nV3Jp
dHRlbi5nZXQoKSk7CisgICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOworICAgIGZp
cmVFdmVudChldmVudE5hbWVzKCkud3JpdGVzdGFydEV2ZW50KTsKIH0KIAogdm9pZCBGaWxlV3Jp
dGVyOjpzZWVrKGxvbmcgbG9uZyBwb3NpdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMDYs
ODIgKzEyMywxNDAgQEAgdm9pZCBGaWxlV3JpdGVyOjpzZWVrKGxvbmcgbG9uZyBwb3NpdGlvbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2J5dGVz
V3JpdHRlbiA9IDA7Ci0gICAgbV9ieXRlc1RvV3JpdGUgPSAwOworICAgIEFTU0VSVChtX3RydW5j
YXRlTGVuZ3RoID09IC0xKTsKKyAgICBBU1NFUlQobV9xdWV1ZWRPcGVyYXRpb24gPT0gT3BlcmF0
aW9uTm9uZSk7CiAgICAgc2Vla0ludGVybmFsKHBvc2l0aW9uKTsKIH0KIAogdm9pZCBGaWxlV3Jp
dGVyOjp0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIEFTU0VSVCh3cml0ZXIoKSk7CisgICAgQVNTRVJUKG1fdHJ1bmNhdGVMZW5ndGggPT0gLTEp
OwogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gV1JJVElORyB8fCBwb3NpdGlvbiA8IDApIHsKICAg
ICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgIGlmIChtX3JlY3Vyc2lvbkRlcHRoID4ga01heFJlY3Vyc2lv
bkRlcHRoKSB7CisgICAgICAgIHNldEVycm9yKEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJSLCBlYyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9yZWFkeVN0YXRlID0gV1JJVElORzsKICAg
ICBtX2J5dGVzV3JpdHRlbiA9IDA7CiAgICAgbV9ieXRlc1RvV3JpdGUgPSAwOwogICAgIG1fdHJ1
bmNhdGVMZW5ndGggPSBwb3NpdGlvbjsKLSAgICB3cml0ZXIoKS0+dHJ1bmNhdGUocG9zaXRpb24p
OworICAgIEFTU0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9PSBPcGVyYXRpb25Ob25lKTsKKyAgICBp
ZiAobV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MpIC8vIFdlIG11c3QgYmUgd2FpdGluZyBmb3IgYW4g
YWJvcnQgdG8gY29tcGxldGUuCisgICAgICAgIG1fcXVldWVkT3BlcmF0aW9uID0gT3BlcmF0aW9u
VHJ1bmNhdGU7CisgICAgZWxzZQorICAgICAgICB3cml0ZXIoKS0+dHJ1bmNhdGUobV90cnVuY2F0
ZUxlbmd0aCk7CisgICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOworICAgIGZpcmVF
dmVudChldmVudE5hbWVzKCkud3JpdGVzdGFydEV2ZW50KTsKIH0KIAogdm9pZCBGaWxlV3JpdGVy
OjphYm9ydChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQod3JpdGVyKCkpOwogICAg
IGlmIChtX3JlYWR5U3RhdGUgIT0gV1JJVElORykgewotICAgICAgICBzZXRFcnJvcihGaWxlRXJy
b3I6OklOVkFMSURfU1RBVEVfRVJSLCBlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAg
KyttX251bUFib3J0czsKIAotICAgIHdyaXRlcigpLT5hYm9ydCgpOworICAgIGlmIChtX2lzT3Bl
cmF0aW9uSW5Qcm9ncmVzcykKKyAgICAgICAgd3JpdGVyKCktPmFib3J0KCk7CisgICAgbV9xdWV1
ZWRPcGVyYXRpb24gPSBPcGVyYXRpb25Ob25lOworICAgIG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVh
cigpOworICAgIG1fdHJ1bmNhdGVMZW5ndGggPSAtMTsKKyAgICBzaWduYWxDb21wbGV0aW9uKEZp
bGVFcnJvcjo6QUJPUlRfRVJSKTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpkaWRXcml0ZShsb25n
IGxvbmcgYnl0ZXMsIGJvb2wgY29tcGxldGUpCiB7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9
PSBXUklUSU5HKTsKKyAgICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0aCA9PSAtMSk7CisgICAgQVNT
RVJUKG1faXNPcGVyYXRpb25JblByb2dyZXNzKTsKICAgICBBU1NFUlQoYnl0ZXMgKyBtX2J5dGVz
V3JpdHRlbiA+IDApOwogICAgIEFTU0VSVChieXRlcyArIG1fYnl0ZXNXcml0dGVuIDw9IG1fYnl0
ZXNUb1dyaXRlKTsKLSAgICBpZiAoIW1fc3RhcnRlZFdyaXRpbmcpIHsKLSAgICAgICAgZmlyZUV2
ZW50KGV2ZW50TmFtZXMoKS53cml0ZXN0YXJ0RXZlbnQpOwotICAgICAgICBtX3N0YXJ0ZWRXcml0
aW5nID0gdHJ1ZTsKLSAgICB9CiAgICAgbV9ieXRlc1dyaXR0ZW4gKz0gYnl0ZXM7CiAgICAgQVNT
RVJUKChtX2J5dGVzV3JpdHRlbiA9PSBtX2J5dGVzVG9Xcml0ZSkgfHwgIWNvbXBsZXRlKTsKICAg
ICBzZXRQb3NpdGlvbihwb3NpdGlvbigpICsgYnl0ZXMpOwogICAgIGlmIChwb3NpdGlvbigpID4g
bGVuZ3RoKCkpCiAgICAgICAgIHNldExlbmd0aChwb3NpdGlvbigpKTsKKyAgICAvLyBUT0RPOiBU
aHJvdHRsZSB0byBubyBtb3JlIGZyZXF1ZW50bHkgdGhhbiBldmVyeSA1MG1zLgorICAgIGludCBu
dW1BYm9ydHMgPSBtX251bUFib3J0czsKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLnByb2dy
ZXNzRXZlbnQpOwotICAgIGlmIChjb21wbGV0ZSkgeworICAgIC8vIFdlIGNvdWxkIGdldCBhbiBh
Ym9ydCBpbiB0aGUgaGFuZGxlciBmb3IgdGhpcyBldmVudC4gSWYgd2UgZG8sIGl0J3MKKyAgICAv
LyBhbHJlYWR5IGhhbmRsZWQgdGhlIGNsZWFudXAgYW5kIHNpZ25hbENvbXBsZXRpb24gY2FsbC4K
KyAgICBpZiAoY29tcGxldGUgJiYgbnVtQWJvcnRzID09IG1fbnVtQWJvcnRzKSB7CiAgICAgICAg
IG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVhcigpOwotICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPnBvc3RUYXNrKEZpbGVXcml0ZXJDb21wbGV0aW9uRXZlbnRUYXNrOjpjcmVhdGUodGhp
cywgRmlsZUVycm9yOjpPSykpOworICAgICAgICBtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IGZh
bHNlOworICAgICAgICBzaWduYWxDb21wbGV0aW9uKEZpbGVFcnJvcjo6T0spOwogICAgIH0KIH0K
IAogdm9pZCBGaWxlV3JpdGVyOjpkaWRUcnVuY2F0ZSgpCiB7CiAgICAgQVNTRVJUKG1fdHJ1bmNh
dGVMZW5ndGggPj0gMCk7Ci0gICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS53cml0ZXN0YXJ0RXZl
bnQpOwogICAgIHNldExlbmd0aChtX3RydW5jYXRlTGVuZ3RoKTsKICAgICBpZiAocG9zaXRpb24o
KSA+IGxlbmd0aCgpKQogICAgICAgICBzZXRQb3NpdGlvbihsZW5ndGgoKSk7Ci0gICAgbV90cnVu
Y2F0ZUxlbmd0aCA9IC0xOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2so
RmlsZVdyaXRlckNvbXBsZXRpb25FdmVudFRhc2s6OmNyZWF0ZSh0aGlzLCBGaWxlRXJyb3I6Ok9L
KSk7CisgICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBzaWduYWxDb21w
bGV0aW9uKEZpbGVFcnJvcjo6T0spOwogfQogCiB2b2lkIEZpbGVXcml0ZXI6OmRpZEZhaWwoRmls
ZUVycm9yOjpFcnJvckNvZGUgY29kZSkKIHsKKyAgICBBU1NFUlQobV9pc09wZXJhdGlvbkluUHJv
Z3Jlc3MpOworICAgIG1faXNPcGVyYXRpb25JblByb2dyZXNzID0gZmFsc2U7CiAgICAgQVNTRVJU
KGNvZGUgIT0gRmlsZUVycm9yOjpPSyk7Ci0gICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7
Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhGaWxlV3JpdGVyQ29tcGxl
dGlvbkV2ZW50VGFzazo6Y3JlYXRlKHRoaXMsIGNvZGUpKTsKKyAgICBpZiAoY29kZSA9PSBGaWxl
RXJyb3I6OkFCT1JUX0VSUikgeworICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gbV9xdWV1
ZWRPcGVyYXRpb247CisgICAgICAgIG1fcXVldWVkT3BlcmF0aW9uID0gT3BlcmF0aW9uTm9uZTsK
KyAgICAgICAgZG9PcGVyYXRpb24ob3BlcmF0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgICBB
U1NFUlQobV9xdWV1ZWRPcGVyYXRpb24gPT0gT3BlcmF0aW9uTm9uZSk7CisgICAgICAgIEFTU0VS
VChtX3JlYWR5U3RhdGUgPT0gV1JJVElORyk7CisgICAgICAgIG1fYmxvYkJlaW5nV3JpdHRlbi5j
bGVhcigpOworICAgICAgICBzaWduYWxDb21wbGV0aW9uKGNvZGUpOworICAgIH0KK30KKwordm9p
ZCBGaWxlV3JpdGVyOjpkb09wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQoreworICAgIEFT
U0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9PSBPcGVyYXRpb25Ob25lKTsKKyAgICBBU1NFUlQoIW1f
aXNPcGVyYXRpb25JblByb2dyZXNzKTsKKyAgICBBU1NFUlQob3BlcmF0aW9uID09IE9wZXJhdGlv
bk5vbmUgfHwgb3BlcmF0aW9uID09IE9wZXJhdGlvbldyaXRlIHx8IG9wZXJhdGlvbiA9PSBPcGVy
YXRpb25UcnVuY2F0ZSk7CisgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKKyAgICBjYXNlIE9wZXJh
dGlvbldyaXRlOgorICAgICAgICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0aCA9PSAtMSk7CisgICAg
ICAgIEFTU0VSVChtX2Jsb2JCZWluZ1dyaXR0ZW4uZ2V0KCkpOworICAgICAgICBBU1NFUlQobV9y
ZWFkeVN0YXRlID09IFdSSVRJTkcpOworICAgICAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24o
KSwgbV9ibG9iQmVpbmdXcml0dGVuLmdldCgpKTsKKyAgICAgICAgbV9pc09wZXJhdGlvbkluUHJv
Z3Jlc3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9wZXJhdGlvblRydW5jYXRl
OgorICAgICAgICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0aCA+PSAwKTsKKyAgICAgICAgQVNTRVJU
KG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKTsKKyAgICAgICAgd3JpdGVyKCktPnRydW5jYXRlKG1f
dHJ1bmNhdGVMZW5ndGgpOworICAgICAgICBtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3BlcmF0aW9uTm9uZToKKyAgICAgICAgQVNTRVJU
KG1fdHJ1bmNhdGVMZW5ndGggPT0gLTEpOworICAgICAgICBBU1NFUlQoIW1fYmxvYkJlaW5nV3Jp
dHRlbi5nZXQoKSk7CisgICAgICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpzaWduYWxDb21wbGV0aW9u
KEZpbGVFcnJvcjo6RXJyb3JDb2RlIGNvZGUpCiB7CiAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsK
KyAgICBtX3RydW5jYXRlTGVuZ3RoID0gLTE7CiAgICAgaWYgKEZpbGVFcnJvcjo6T0sgIT0gY29k
ZSkgewogICAgICAgICBtX2Vycm9yID0gRmlsZUVycm9yOjpjcmVhdGUoY29kZSk7Ci0gICAgICAg
IGZpcmVFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7CiAgICAgICAgIGlmIChGaWxlRXJy
b3I6OkFCT1JUX0VSUiA9PSBjb2RlKQogICAgICAgICAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMo
KS5hYm9ydEV2ZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlyZUV2ZW50KGV2ZW50
TmFtZXMoKS5lcnJvckV2ZW50KTsKICAgICB9IGVsc2UKICAgICAgICAgZmlyZUV2ZW50KGV2ZW50
TmFtZXMoKS53cml0ZUV2ZW50KTsKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLndyaXRlZW5k
RXZlbnQpOwpAQCAtMTg5LDcgKzI2NCwxMCBAQCB2b2lkIEZpbGVXcml0ZXI6OnNpZ25hbENvbXBs
ZXRpb24oRmlsZUVycm9yOjpFcnJvckNvZGUgY29kZSkKIAogdm9pZCBGaWxlV3JpdGVyOjpmaXJl
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQogeworICAgICsrbV9yZWN1cnNpb25EZXB0
aDsKICAgICBkaXNwYXRjaEV2ZW50KFByb2dyZXNzRXZlbnQ6OmNyZWF0ZSh0eXBlLCB0cnVlLCBt
X2J5dGVzV3JpdHRlbiwgbV9ieXRlc1RvV3JpdGUpKTsKKyAgICAtLW1fcmVjdXJzaW9uRGVwdGg7
CisgICAgQVNTRVJUKG1fcmVjdXJzaW9uRGVwdGggPj0gMCk7CiB9CiAKIHZvaWQgRmlsZVdyaXRl
cjo6c2V0RXJyb3IoRmlsZUVycm9yOjpFcnJvckNvZGUgZXJyb3JDb2RlLCBFeGNlcHRpb25Db2Rl
JiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5oIGIv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmgKaW5kZXggMzlmZWZjNDI0YzZjYWEw
NTRlNDM0ZTIyMWZkZTkzNmQyNDhhNjRiOS4uYzI1MDBlYjlkMmYxNDFkMDU0MWEyMWE5ZmNhZGRi
OThhMWViYTNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmgKQEAgLTkwLDYgKzkw
LDEyIEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHdyaXRl
ZW5kKTsKIAogcHJpdmF0ZToKKyAgICBlbnVtIE9wZXJhdGlvbiB7CisgICAgICAgIE9wZXJhdGlv
bk5vbmUsCisgICAgICAgIE9wZXJhdGlvbldyaXRlLAorICAgICAgICBPcGVyYXRpb25UcnVuY2F0
ZQorICAgIH07CisKICAgICBGaWxlV3JpdGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAog
ICAgIHZpcnR1YWwgfkZpbGVXcml0ZXIoKTsKQEAgLTEwMCw0MiArMTA2LDI0IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJu
ICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1
cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KIAotICAg
IHZvaWQgZmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7Ci0KLSAgICB2b2lkIHNl
dEVycm9yKEZpbGVFcnJvcjo6RXJyb3JDb2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBk
b09wZXJhdGlvbihPcGVyYXRpb24pOwogCiAgICAgdm9pZCBzaWduYWxDb21wbGV0aW9uKEZpbGVF
cnJvcjo6RXJyb3JDb2RlKTsKIAotICAgIGNsYXNzIEZpbGVXcml0ZXJDb21wbGV0aW9uRXZlbnRU
YXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVdyaXRlckNvbXBsZXRpb25FdmVudFRhc2s+
IGNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXI+IGZpbGVXcml0ZXIsIEZpbGVFcnJvcjo6RXJy
b3JDb2RlIGNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
RmlsZVdyaXRlckNvbXBsZXRpb25FdmVudFRhc2soZmlsZVdyaXRlciwgY29kZSkpOwotICAgICAg
ICB9Ci0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmlsZVdyaXRlci0+c2lnbmFsQ29t
cGxldGlvbihtX2NvZGUpOwotICAgICAgICB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgRmlsZVdy
aXRlckNvbXBsZXRpb25FdmVudFRhc2soUGFzc1JlZlB0cjxGaWxlV3JpdGVyPiBmaWxlV3JpdGVy
LCBGaWxlRXJyb3I6OkVycm9yQ29kZSBjb2RlKQotICAgICAgICAgICAgOiBtX2ZpbGVXcml0ZXIo
ZmlsZVdyaXRlcikKLSAgICAgICAgICAgICwgbV9jb2RlKGNvZGUpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIFJlZlB0cjxGaWxlV3JpdGVyPiBtX2ZpbGVXcml0ZXI7Ci0gICAgICAg
IEZpbGVFcnJvcjo6RXJyb3JDb2RlIG1fY29kZTsKLSAgICB9OworICAgIHZvaWQgZmlyZUV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CisKKyAgICB2b2lkIHNldEVycm9yKEZpbGVFcnJv
cjo6RXJyb3JDb2RlLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBSZWZQdHI8RmlsZUVycm9yPiBt
X2Vycm9yOwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKICAgICBSZWFk
eVN0YXRlIG1fcmVhZHlTdGF0ZTsKLSAgICBib29sIG1fc3RhcnRlZFdyaXRpbmc7CisgICAgYm9v
bCBtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzczsKKyAgICBPcGVyYXRpb24gbV9xdWV1ZWRPcGVyYXRp
b247CiAgICAgbG9uZyBsb25nIG1fYnl0ZXNXcml0dGVuOwogICAgIGxvbmcgbG9uZyBtX2J5dGVz
VG9Xcml0ZTsKICAgICBsb25nIGxvbmcgbV90cnVuY2F0ZUxlbmd0aDsKKyAgICBsb25nIGxvbmcg
bV9udW1BYm9ydHM7CisgICAgbG9uZyBsb25nIG1fcmVjdXJzaW9uRGVwdGg7CiAgICAgUmVmUHRy
PEJsb2I+IG1fYmxvYkJlaW5nV3JpdHRlbjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108938</attachid>
            <date>2011-09-27 17:12:01 -0700</date>
            <delta_ts>2011-09-27 18:45:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67684-20110927171200.patch</filename>
            <type>text/plain</type>
            <size>27230</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU2ODUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ODFhZGUzMjViNDBiOWMwYWVkN2Rj
OWE4YTFjNDRlZDZiMWVmOTI4Li4wOTVkN2ZmMmMyZGRjZDE5MDEyOGZlOTI1OGQwNDM2NmUyYWQ4
MjU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMjEgIEVyaWMgVWhyaGFuZSAgPGVy
aWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW0vRmlsZVdyaXRlcl0gcmFjZSBj
b25kaXRpb24gaW4gRmlsZVdyaXRlciBjb21wbGV0aW9uIGNhbiBsZWFkIHRvIGFzc2VydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZmlsZXN5
c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJv
cnQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci1hYm9ydC1jb250aW51ZS5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qczogQWRkZWQuCisgICAgICAgICogZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanM6IEZpeGVkIGEgY29w
eS1wYXN0ZSBlcnJvci4KKwogMjAxMS0wOS0yMSAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJh
aXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBSZW5kZXJCb3g6OnBhaW50TWFza0lt
YWdlcyB3aGVuIEdyYXBoaWNzQ29udGV4dCdzIHBhaW50aW5nIGlzIGRpc2FibGVkCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtY29udGlu
dWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVy
LWFib3J0LWNvbnRpbnVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGQ2MDk5ZTU1N2JmNmQz
MDcxMzA0OGFjMTZlM2U3NGRhYjk2N2RlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDI2IEBACitUZXN0IHRoYXQgRmlsZVdyaXRlciBjYW4gY29udGludWUgaW1tZWRp
YXRlbHkgYWZ0ZXIgYW4gYWJvcnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworc3Rh
cnRpbmcgdGVzdAorUEFTUyAxMTAwMDAwIGlzIGJsb2JTaXplCitQQVNTIENhbGxpbmcgYWJvcnQK
K1BBU1MgU2F3IGFib3J0CitQQVNTIFNhdyB3cml0ZWVuZCAwLgorUEFTUyB3cml0ZXIubGVuZ3Ro
IGlzIDAKK1BBU1MgZm9sbG93T25BY3Rpb24gPT0gMSB8fCBmb2xsb3dPbkFjdGlvbiA9PSAzIGlz
IHRydWUKK1BBU1MgMTEwMDAwMCBpcyBibG9iU2l6ZQorUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDEx
MDAwMDAKK1BBU1MgU2F3IHdyaXRlZW5kIDEuCitQQVNTIDExMDAwMDAgaXMgYmxvYlNpemUKK1BB
U1MgQ2FsbGluZyBhYm9ydAorUEFTUyBTYXcgYWJvcnQKK1BBU1MgU2F3IHdyaXRlZW5kIDAuCitQ
QVNTIHdyaXRlci5sZW5ndGggaXMgMTEwMDAwMAorUEFTUyBmb2xsb3dPbkFjdGlvbiA9PSAxIHx8
IGZvbGxvd09uQWN0aW9uID09IDMgaXMgdHJ1ZQorUEFTUyB3cml0ZXIubGVuZ3RoIGlzIDcKK1BB
U1MgQWxsIHRlc3RzIGNvbXBsZXRlLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzViZmE3
ODFhOWI1YzMxY2I1ZDY0YjhlNjYzNWExZTg2OGMyNTcyNAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5odG1s
CkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisgPGhlYWQ+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorICAgIDx0aXRsZT5GaWxlIFdyaXRlciBBYm9ydCBhbmQgQ29udGludWU8L3RpdGxl
PgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwv
c2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9k
eT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGUtd3JpdGVyLWFib3J0LWRlcHRoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjI1NWExMGVhYjY5NTZiNDA4YWZmOGY2MGRlMDhmMjg1N2UyYzVhYwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBAQAorVGVzdCB0aGF0IEZpbGVXcml0ZXIgZGVmZW5k
cyBhZ2FpbnN0IGluZmluaXRlIHJlY3Vyc2lvbiB2aWEgYWJvcnQuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworc3RhcnRpbmcgdGVzdAorUEFTUyBDYWxsaW5nIHdyaXRlLgorUEFTUyBD
YWxsaW5nIGFib3J0CitQQVNTIFNhdyBhYm9ydAorUEFTUyBDYWxsaW5nIHdyaXRlLgorUEFTUyBD
YWxsaW5nIGFib3J0CitQQVNTIFNhdyBhYm9ydAorUEFTUyBDYWxsaW5nIHdyaXRlLgorUEFTUyBT
YXcgc2VjdXJpdHkgZXJyb3IKK1BBU1MgU2F3IHdyaXRlZW5kLgorUEFTUyBTYXcgd3JpdGVlbmQu
CitQQVNTIENhbGxpbmcgdHJ1bmNhdGUuCitQQVNTIENhbGxpbmcgYWJvcnQKK1BBU1MgU2F3IGFi
b3J0CitQQVNTIENhbGxpbmcgdHJ1bmNhdGUuCitQQVNTIENhbGxpbmcgYWJvcnQKK1BBU1MgU2F3
IGFib3J0CitQQVNTIENhbGxpbmcgdHJ1bmNhdGUuCitQQVNTIFNhdyBzZWN1cml0eSBlcnJvcgor
UEFTUyBTYXcgd3JpdGVlbmQuCitQQVNTIFNhdyB3cml0ZWVuZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtZGVwdGguaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJmZDAwNTgyYjA5ZjllYjAxMTUyNTdmZDE4NWYwZTNlYTZjN2VmY2EKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQtZGVw
dGguaHRtbApAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorIDxoZWFk
PgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIj4KKyAgICA8dGl0bGU+RmlsZSBXcml0ZXIgQWJvcnQgRGVwdGg8L3RpdGxl
PgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwv
c2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9keT4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUt
d3JpdGVyLWFib3J0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9m
aWxlLXdyaXRlci1hYm9ydC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM5ZDUzNGYzYzZmYmFm
MWE0MzAzZTM3OGQ4ZTUzYWEzNzFkNWQwMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxMiBAQAorVGVzdCB0aGF0IEZpbGVXcml0ZXIgaGFuZGxlcyBhYm9ydCBwcm9wZXJseS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitzdGFydGluZyB0ZXN0CitQQVNTIENhbGxpbmcg
YWJvcnQKK1BBU1MgU2F3IGFib3J0CitQQVNTIFNhdyB3cml0ZWVuZC4KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1NGY2
OWJiZGZkZWQxNTlhZDFjZWE3ZWM2MjAzNTczYzljMDc5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS13cml0ZXItYWJvcnQuaHRtbApAQCAtMCww
ICsxLDE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorIDxoZWFkPgorICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KyAgICA8dGl0bGU+RmlsZSBXcml0ZXIgQWJvcnQ8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8
Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLXdyaXRlci1hYm9y
dC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorIDwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250
aW51ZS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0
ZXItYWJvcnQtY29udGludWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc5YzZkMzA1NDQzYWRkNjIzZjczZGM3
MjViNTY0ZDVlN2FmZTQ0NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGludWUuanMKQEAgLTAsMCAr
MSwxMzggQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdm
cy13b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnZmlsZS13cml0ZXItdXRp
bHMuanMnKTsKK30KKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBGaWxlV3JpdGVyIGNhbiBjb250
aW51ZSBpbW1lZGlhdGVseSBhZnRlciBhbiBhYm9ydC4iKTsKKwordmFyIHNhd1dyaXRlU3RhcnQ7
Cit2YXIgc2F3QWJvcnQ7Cit2YXIgc2F3V3JpdGVFbmQ7Cit2YXIgd3JpdGVyOwordmFyIGV4cGVj
dGVkTGVuZ3RoOwordmFyIHRydW5jYXRlTGVuZ3RoID0gNzsKK3ZhciBibG9iU2l6ZSA9IDExMDAw
MDA7CisKK3ZhciBtZXRob2RTZXQgPSBbCisgIHsgIC8vIFNldHVwIG1ldGhvZCBzZXQgdGhhdCB3
cml0ZXMsIHRoZW4gYWJvcnRzIHRoYXQgd3JpdGUgYmVmb3JlIGNvbXBsZXRpb24uCisgICAgYWN0
aW9uIDogc3RhcnRXcml0ZSwKKyAgICB2ZXJpZnlMZW5ndGggOiAwLAorICAgIG9ud3JpdGVzdGFy
dCA6IGFib3J0V3JpdGUsCisgICAgb253cml0ZSA6IG9uRXJyb3IsCisgICAgb25hYm9ydCA6IGxv
Z0Fib3J0LAorICAgIG9ud3JpdGVlbmQgOiBjaGVja0xlbmd0aEFuZENhbGxGb2xsb3dPbkFjdGlv
bgorICB9LAorICB7ICAvLyBNZXRob2Qgc2V0IHRoYXQgZG9lcyBhIGNvbXBsZXRlIHdyaXRlLgor
ICAgIGFjdGlvbiA6IHN0YXJ0V3JpdGUsCisgICAgdmVyaWZ5TGVuZ3RoIDogYmxvYlNpemUsCisg
ICAgb253cml0ZXN0YXJ0IDogbm9wLAorICAgIG9ud3JpdGUgOiBub3AsCisgICAgb25hYm9ydCA6
IG9uRXJyb3IsCisgICAgb253cml0ZWVuZCA6IGNoZWNrTGVuZ3RoQW5kU3RhcnROZXh0VGVzdAor
ICB9LAorICB7ICAvLyBTZXR1cCBtZXRob2Qgc2V0IHRoYXQgd3JpdGVzLCB0aGVuIGFib3J0cyB0
aGF0IHdyaXRlIGJlZm9yZSBjb21wbGV0aW9uLgorICAgIGFjdGlvbiA6IHN0YXJ0V3JpdGUsCisg
ICAgdmVyaWZ5TGVuZ3RoIDogYmxvYlNpemUsICAvLyBMZWZ0IG92ZXIgZnJvbSB0aGUgcHJldmlv
dXMgdGVzdC4KKyAgICBvbndyaXRlc3RhcnQgOiBhYm9ydFdyaXRlLAorICAgIG9ud3JpdGUgOiBv
bkVycm9yLAorICAgIG9uYWJvcnQgOiBsb2dBYm9ydCwKKyAgICBvbndyaXRlZW5kIDogY2hlY2tM
ZW5ndGhBbmRDYWxsRm9sbG93T25BY3Rpb24KKyAgfSwKKyAgeyAvLyBNZXRob2Qgc2V0IHRoYXQg
ZG9lcyBhIGNvbXBsZXRlIHRydW5jYXRlLgorICAgIGFjdGlvbiA6IHN0YXJ0VHJ1bmNhdGUsCisg
ICAgdmVyaWZ5TGVuZ3RoIDogdHJ1bmNhdGVMZW5ndGgsCisgICAgb253cml0ZXN0YXJ0IDogbm9w
LAorICAgIG9ud3JpdGUgOiBub3AsCisgICAgb25hYm9ydCA6IG9uRXJyb3IsCisgICAgb253cml0
ZWVuZCA6IGNoZWNrTGVuZ3RoQW5kQ29tcGxldGVUZXN0CisgIH1dOworCitmdW5jdGlvbiBub3Ao
KSB7Cit9CisKK2Z1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKKyAgICB2YXIgYmIgPSBuZXcgV2Vi
S2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAg
ICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgIH0KKyAgICByZXR1cm4gYmIuZ2V0QmxvYigpOwor
fQorCisvLyBUaGVzZSBtZXRob2RzIHNldCB1cCBhIHdyaXRlLCBhYm9ydCBpdCBhcyBzb29uIGFz
IGl0IHN0YXJ0cywgdGhlbiBpbml0aWF0ZQorLy8gdGhlIGZvbGxvdyBvbiBhY3Rpb24uCitmdW5j
dGlvbiBhYm9ydFdyaXRlKGUpIHsKKyAgICB0ZXN0UGFzc2VkKCJDYWxsaW5nIGFib3J0Iik7Cisg
ICAgd3JpdGVyLmFib3J0KCk7Cit9CisKK2Z1bmN0aW9uIGxvZ0Fib3J0KGUpIHsKKyAgICB0ZXN0
UGFzc2VkKCJTYXcgYWJvcnQiKTsKK30KKworZnVuY3Rpb24gY2hlY2tMZW5ndGhBbmRDYWxsRm9s
bG93T25BY3Rpb24oZSkgeworICAgIHRlc3RQYXNzZWQoIlNhdyB3cml0ZWVuZCAwLiIpOworICAg
IHNob3VsZEJlKCJ3cml0ZXIubGVuZ3RoIiwgIiIgKyBleHBlY3RlZExlbmd0aCk7CisgICAgZG9G
b2xsb3dPbkFjdGlvbigpOworfQorCisvLyBGb3IgdGhlIHNlY29uZCBtZXRob2Qgc2V0LCB2ZXJp
ZnkgY29tcGxldGlvbiBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0ZXN0LgorZnVuY3Rpb24gY2hl
Y2tMZW5ndGhBbmRTdGFydE5leHRUZXN0KGUpIHsKKyAgICBzaG91bGRCZSgid3JpdGVyLmxlbmd0
aCIsICIiICsgZXhwZWN0ZWRMZW5ndGgpOworICAgIHRlc3RQYXNzZWQoIlNhdyB3cml0ZWVuZCAx
LiIpOworICAgIHJ1blRlc3QoMiwgMyk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrTGVuZ3RoQW5kQ29t
cGxldGVUZXN0KGUpIHsKKyAgICBzaG91bGRCZSgid3JpdGVyLmxlbmd0aCIsICIiICsgZXhwZWN0
ZWRMZW5ndGgpOworICAgIHRlc3RQYXNzZWQoIkFsbCB0ZXN0cyBjb21wbGV0ZS4iKTsKKyAgICBj
bGVhblVwKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0V3JpdGUoKSB7CisgICAgLy8gTGV0J3MgbWFr
ZSBpdCBhYm91dCBhIG1lZ2FieXRlLgorICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRl
cigpOworICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0iKTsKKyAgICB2YXIgYmxvYiA9IHRlblhC
bG9iKGJiLmdldEJsb2IoKSk7CisgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2Ig
PSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAgYmxvYiA9
IHRlblhCbG9iKGJsb2IpOworICAgIHZhciBzaXplID0gYmxvYi5zaXplOworICAgIHNob3VsZEJl
KCIiICsgc2l6ZSwgImJsb2JTaXplIik7CisgICAgd3JpdGVyLndyaXRlKGJsb2IpOworfQorCitm
dW5jdGlvbiBzdGFydFRydW5jYXRlKCkgeworICAgIHdyaXRlci50cnVuY2F0ZSh0cnVuY2F0ZUxl
bmd0aCk7Cit9CisKK2Z1bmN0aW9uIHNldHVwV3JpdGVyKG1ldGhvZFNldEluZGV4LCB3cml0ZXIp
IHsKKyAgICB3cml0ZXIub25lcnJvciA9IG9uRXJyb3I7CisKKyAgICB2YXIgbWV0aG9kcyA9IG1l
dGhvZFNldFttZXRob2RTZXRJbmRleF07CisgICAgd3JpdGVyLm9uYWJvcnQgPSBtZXRob2RzLm9u
YWJvcnQ7CisgICAgd3JpdGVyLm9ud3JpdGVzdGFydCA9IG1ldGhvZHMub253cml0ZXN0YXJ0Owor
ICAgIHdyaXRlci5vbndyaXRlID0gbWV0aG9kcy5vbndyaXRlOworICAgIHdyaXRlci5vbndyaXRl
ZW5kID0gbWV0aG9kcy5vbndyaXRlZW5kOworICAgIGV4cGVjdGVkTGVuZ3RoID0gbWV0aG9kcy52
ZXJpZnlMZW5ndGg7CisgICAgbWV0aG9kcy5hY3Rpb24oKTsKK30KKworZnVuY3Rpb24gcnVuVGVz
dChpbml0SW5kZXgsIHRlc3RJbmRleCkgeworICAgIGZvbGxvd09uQWN0aW9uID0gdGVzdEluZGV4
OworICAgIHNldHVwV3JpdGVyKGluaXRJbmRleCwgd3JpdGVyKTsKK30KKworZnVuY3Rpb24gZG9G
b2xsb3dPbkFjdGlvbigpIHsKKyAgICBzaG91bGRCZVRydWUoImZvbGxvd09uQWN0aW9uID09IDEg
fHwgZm9sbG93T25BY3Rpb24gPT0gMyIpOworICAgIHNldHVwV3JpdGVyKGZvbGxvd09uQWN0aW9u
LCB3cml0ZXIpOworfQorCit2YXIganNUZXN0SXNBc3luYyA9IHRydWU7CitzZXR1cEFuZFJ1blRl
c3QoMioxMDI0KjEwMjQsICdmaWxlLXdyaXRlci1hYm9ydCcsCisgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gKGZpbGVFbnRyeSwgZmlsZVdyaXRlcikgeworICAgICAgICAgICAgICAgICAgICBmaWxl
RW50cnlGb3JDbGVhbnVwID0gZmlsZUVudHJ5OworICAgICAgICAgICAgICAgICAgICB3cml0ZXIg
PSBmaWxlV3JpdGVyOworICAgICAgICAgICAgICAgICAgICBydW5UZXN0KDAsIDEpOworICAgICAg
ICAgICAgICAgIH0pOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0
LWRlcHRoLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdy
aXRlci1hYm9ydC1kZXB0aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzYzMTg5OGMwZTMwNWQ2MGY2NTZiNDkw
YWRjYjk0NWUwYTk5N2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcwpAQCAtMCwwICsxLDcz
IEBACitpZiAodGhpcy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0U2NyaXB0cygnZnMtd29y
a2VyLWNvbW1vbi5qcycpOworICAgIGltcG9ydFNjcmlwdHMoJ2ZpbGUtd3JpdGVyLXV0aWxzLmpz
Jyk7Cit9CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgRmlsZVdyaXRlciBkZWZlbmRzIGFnYWlu
c3QgaW5maW5pdGUgcmVjdXJzaW9uIHZpYSBhYm9ydC4iKTsKKwordmFyIHNhd1dyaXRlU3RhcnQ7
Cit2YXIgc2F3QWJvcnQ7Cit2YXIgc2F3V3JpdGVFbmQ7Cit2YXIgd3JpdGVyOwordmFyIGJiID0g
bmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CitiYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Cit2YXIg
YmxvYiA9IGJiLmdldEJsb2IoKTsKK3ZhciByZWN1cnNpb25EZXB0aCA9IDA7Cit2YXIgbWV0aG9k
OwordmFyIHRlc3RzUnVuID0gMDsKKworZnVuY3Rpb24gb25Xcml0ZVN0YXJ0KGUpIHsKKyAgICB0
ZXN0UGFzc2VkKCJDYWxsaW5nIGFib3J0Iik7CisgICAgKytyZWN1cnNpb25EZXB0aDsKKyAgICB3
cml0ZXIuYWJvcnQoKTsKK30KKworLy8gV2Ugc2hvdWxkIGFsd2F5cyBhYm9ydCBiZWZvcmUgY29t
cGxldGlvbi4KK2Z1bmN0aW9uIG9uV3JpdGUoZSkgeworICAgIHRlc3RGYWlsZWQoIkluIG9uV3Jp
dGUuIik7Cit9CisKK2Z1bmN0aW9uIG9uQWJvcnQoZSkgeworICAgIHRlc3RQYXNzZWQoIlNhdyBh
Ym9ydCIpOworICAgIHRyeSB7CisgICAgICBtZXRob2QoKTsKKyAgICB9IGNhdGNoIChleCkgewor
ICAgICAgYXNzZXJ0KGV4LmNvZGUgPT0gMik7ICAvLyBTZWN1cml0eSBlcnJvcgorICAgICAgdGVz
dFBhc3NlZCgiU2F3IHNlY3VyaXR5IGVycm9yIik7CisgICAgfQorfQorCitmdW5jdGlvbiBvbldy
aXRlRW5kKGUpIHsKKyAgICAtLXJlY3Vyc2lvbkRlcHRoOworICAgIHRlc3RQYXNzZWQoIlNhdyB3
cml0ZWVuZC4iKTsKKyAgICBpZiAoIXJlY3Vyc2lvbkRlcHRoKSB7CisgICAgICAgICsrdGVzdHNS
dW47CisgICAgICAgIGlmICh0ZXN0c1J1biA9PSAxKSB7CisgICAgICAgICAgICBtZXRob2QgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJDYWxsaW5nIHRydW5jYXRl
LiIpOworICAgICAgICAgICAgICAgIHdyaXRlci50cnVuY2F0ZSg3KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHNldFRpbWVvdXQobWV0aG9kLCAwKTsgIC8vIEludm9rZSBmcm9tIHRoZSB0
b3AgbGV2ZWwsIHNvIHRoYXQgd2UncmUgbm90IGFscmVhZHkgaW4gYSBoYW5kbGVyLgorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgY2xlYW5VcCgpOworICAgICAgICB9CisgICAgfQorfQor
CitmdW5jdGlvbiBydW5UZXN0KHVudXNlZEZpbGVFbnRyeSwgZmlsZVdyaXRlcikgeworICAgIHdy
aXRlciA9IGZpbGVXcml0ZXI7CisgICAgbWV0aG9kID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0
ZXN0UGFzc2VkKCJDYWxsaW5nIHdyaXRlLiIpOworICAgICAgICB3cml0ZXIud3JpdGUoYmxvYik7
CisgICAgfQorICAgIGZpbGVXcml0ZXIub25lcnJvciA9IG9uRXJyb3I7CisgICAgZmlsZVdyaXRl
ci5vbmFib3J0ID0gb25BYm9ydDsKKyAgICBmaWxlV3JpdGVyLm9ud3JpdGVzdGFydCA9IG9uV3Jp
dGVTdGFydDsKKyAgICBmaWxlV3JpdGVyLm9ud3JpdGUgPSBvbldyaXRlOworICAgIGZpbGVXcml0
ZXIub253cml0ZWVuZCA9IG9uV3JpdGVFbmQ7CisgICAgbWV0aG9kKCk7Cit9CisKK3ZhciBqc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKK3NldHVwQW5kUnVuVGVzdCgyKjEwMjQqMTAyNCwgJ2ZpbGUtd3Jp
dGVyLWFib3J0LWRlcHRoJywgcnVuVGVzdCk7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmls
ZS13cml0ZXItYWJvcnQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2Vz
L2ZpbGUtd3JpdGVyLWFib3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkYTYyMmZjMGI0ZWE5ZWI5M2ZkNGE3
MDFmYmQ1YjJhNWRiOTJiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzCkBAIC0wLDAgKzEsODYgQEAK
K2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdmcy13b3JrZXIt
Y29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnZmlsZS13cml0ZXItdXRpbHMuanMnKTsK
K30KKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBGaWxlV3JpdGVyIGhhbmRsZXMgYWJvcnQgcHJv
cGVybHkuIik7CisKK3ZhciBzYXdXcml0ZVN0YXJ0OwordmFyIHNhd0Fib3J0OwordmFyIHNhd1dy
aXRlRW5kOwordmFyIHdyaXRlcjsKKworZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgeworICAgIHZh
ciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTA7ICsraSkgeworICAgICAgICBiYi5hcHBlbmQoYmxvYik7CisgICAgfQorICAgIHJldHVybiBi
Yi5nZXRCbG9iKCk7Cit9CisKK2Z1bmN0aW9uIG9uV3JpdGVTdGFydChlKSB7CisgICAgYXNzZXJ0
KHdyaXRlcik7CisgICAgYXNzZXJ0KHdyaXRlci5yZWFkeVN0YXRlID09IHdyaXRlci5XUklUSU5H
KTsKKyAgICBhc3NlcnQoZS50eXBlID09ICJ3cml0ZXN0YXJ0Iik7CisgICAgYXNzZXJ0KCFzYXdX
cml0ZVN0YXJ0KTsKKyAgICBhc3NlcnQoIXNhd1dyaXRlRW5kKTsKKyAgICBhc3NlcnQoIWUubG9h
ZGVkKTsKKyAgICBzYXdXcml0ZVN0YXJ0ID0gdHJ1ZTsKKyAgICB0ZXN0UGFzc2VkKCJDYWxsaW5n
IGFib3J0Iik7CisgICAgd3JpdGVyLmFib3J0KCk7Cit9CisKKy8vIFdlIHNob3VsZCBhbHdheXMg
YWJvcnQgYmVmb3JlIGNvbXBsZXRpb24uCitmdW5jdGlvbiBvbldyaXRlKGUpIHsKKyAgICB0ZXN0
RmFpbGVkKCJJbiBvbldyaXRlLiIpOworfQorCitmdW5jdGlvbiBvbkFib3J0KGUpIHsKKyAgICBh
c3NlcnQod3JpdGVyLnJlYWR5U3RhdGUgPT0gd3JpdGVyLkRPTkUpOworICAgIGFzc2VydCh3cml0
ZXIuZXJyb3IuY29kZSA9PSB3cml0ZXIuZXJyb3IuQUJPUlRfRVJSKTsKKyAgICBhc3NlcnQoc2F3
V3JpdGVTdGFydCk7CisgICAgYXNzZXJ0KCFzYXdXcml0ZUVuZCk7CisgICAgYXNzZXJ0KCFzYXdB
Ym9ydCk7CisgICAgYXNzZXJ0KGUudHlwZSA9PSAiYWJvcnQiKTsKKyAgICBzYXdBYm9ydCA9IHRy
dWU7CisgICAgdGVzdFBhc3NlZCgiU2F3IGFib3J0Iik7Cit9CisKK2Z1bmN0aW9uIG9uV3JpdGVF
bmQoZSkgeworICAgIGFzc2VydCh3cml0ZXIucmVhZHlTdGF0ZSA9PSB3cml0ZXIuRE9ORSk7Cisg
ICAgYXNzZXJ0KHdyaXRlci5lcnJvci5jb2RlID09IHdyaXRlci5lcnJvci5BQk9SVF9FUlIpOwor
ICAgIGFzc2VydChzYXdXcml0ZVN0YXJ0KTsKKyAgICBhc3NlcnQoc2F3QWJvcnQpOworICAgIGFz
c2VydCghc2F3V3JpdGVFbmQpOworICAgIGFzc2VydChlLnR5cGUgPT0gIndyaXRlZW5kIik7Cisg
ICAgc2F3V3JpdGVFbmQgPSB0cnVlOworICAgIHRlc3RQYXNzZWQoIlNhdyB3cml0ZWVuZC4iKTsK
KyAgICB3cml0ZXIuYWJvcnQoKTsgIC8vIFZlcmlmeSB0aGF0IHRoaXMgZG9lcyBub3RoaW5nIGlu
IHJlYWR5U3RhdGUgRE9ORS4KKyAgICBjbGVhblVwKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0V3Jp
dGUoZmlsZVdyaXRlcikgeworICAgIC8vIExldCdzIG1ha2UgaXQgYWJvdXQgYSBtZWdhYnl0ZS4K
KyAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBiYi5hcHBlbmQoImxv
cmVtIGlwc3VtIik7CisgICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOworICAg
IGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKKyAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CisgICAg
YmxvYiA9IHRlblhCbG9iKGJsb2IpOworICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKKyAgICB3
cml0ZXIgPSBmaWxlV3JpdGVyOworICAgIGZpbGVXcml0ZXIub25lcnJvciA9IG9uRXJyb3I7Cisg
ICAgZmlsZVdyaXRlci5vbmFib3J0ID0gb25BYm9ydDsKKyAgICBmaWxlV3JpdGVyLm9ud3JpdGVz
dGFydCA9IG9uV3JpdGVTdGFydDsKKyAgICBmaWxlV3JpdGVyLm9ud3JpdGUgPSBvbldyaXRlOwor
ICAgIGZpbGVXcml0ZXIub253cml0ZWVuZCA9IG9uV3JpdGVFbmQ7CisgICAgZmlsZVdyaXRlci5h
Ym9ydCgpOyAgLy8gVmVyaWZ5IHRoYXQgdGhpcyBkb2VzIG5vdGhpbmcgaW4gcmVhZHlTdGF0ZSBJ
TklULgorICAgIGZpbGVXcml0ZXIud3JpdGUoYmxvYik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3Qo
dW51c2VkRmlsZUVudHJ5LCBmaWxlV3JpdGVyKSB7CisgICAgc3RhcnRXcml0ZShmaWxlV3JpdGVy
KTsKK30KK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3NldHVwQW5kUnVuVGVzdCgyKjEwMjQq
MTAyNCwgJ2ZpbGUtd3JpdGVyLWFib3J0JywgcnVuVGVzdCk7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNv
dXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKaW5kZXggODkyYTYyOGU4ZjAxMGI0Yzg0
OTEzM2VmNWM0YTVhNjhiZDZhMGUwMS4uMzNkNDI3OWRlZTg0NTQ5NGY4NzJhMmJjNmFjZTNlOTlj
YzFmZGU5OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNl
cy9maWxlLXdyaXRlci1ldmVudHMuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKQEAgLTk4LDUgKzk4LDUgQEAgZnVuY3Rp
b24gcnVuVGVzdCh1bnVzZWRGaWxlRW50cnksIGZpbGVXcml0ZXIpIHsKICAgICBzdGFydFdyaXRl
KGZpbGVXcml0ZXIpOwogfQogdmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOwotc2V0dXBBbmRSdW5U
ZXN0KDIqMTAyNCoxMDI0LCAnZmlsZS13cml0ZXItZ2MtYmxvYicsIHJ1blRlc3QpOworc2V0dXBB
bmRSdW5UZXN0KDIqMTAyNCoxMDI0LCAnZmlsZS13cml0ZXItZXZlbnRzJywgcnVuVGVzdCk7CiB2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkMGU4NzZjMTdmOWFj
NzUyNmY0Y2QxNTg5YWQ5NWIwMGI3MzVhZDljLi42MmI5MDBhN2JjOTUwNmE5MWI4ZmNiNTFmODgz
ODUzNWZkYjQ0YTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMjEgIEVy
aWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW0vRmls
ZVdyaXRlcl0gcmFjZSBjb25kaXRpb24gaW4gRmlsZVdyaXRlciBjb21wbGV0aW9uIGNhbiBsZWFk
IHRvIGFzc2VydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Njc2ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0czogZmFzdC9maWxlc3lzdGVtL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3QvZmlsZXN5c3RlbS9maWxlLXdyaXRlci1hYm9ydC5odG1sCisK
KyAgICAgICAgVHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBiYWNrZW5kIGFuZCBiZSBwcmVwYXJlZCBm
b3IgcmVlbnRyYW50IHVzZXIKKyAgICAgICAgcmVxdWVzdHMuICBMaW1pdCByZWN1cnNpb24gZGVw
dGggdG8gYW4gYXJiaXRyYXJ5IHNtYWxsIGNvbnN0YW50LgorICAgICAgICAqIGZpbGVhcGkvRmls
ZVdyaXRlci5jcHA6IExvdHMgb2YgZXZlbnQtaGFuZGxpbmcgY2hhbmdlcy4KKyAgICAgICAgKiBm
aWxlYXBpL0ZpbGVXcml0ZXIuaDoKKwogMjAxMS0wOS0yMSAgSnVsaWVuIENoYWZmcmFpeCAgPGpj
aGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBSZW5kZXJCb3g6OnBhaW50
TWFza0ltYWdlcyB3aGVuIEdyYXBoaWNzQ29udGV4dCdzIHBhaW50aW5nIGlzIGRpc2FibGVkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAppbmRleCA2NzhhMGE4ZmU2Nzk2ZGE2YTdj
OWQ2ZTBjNjY2NmRiM2EzMGRjODhkLi5hNWRhNjkyOThjMGEzMGI0Y2E4ZjI2NDEwNTRmODA3Y2Fh
Y2MyMDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5jcHAKQEAgLTQzLDE4ICs0
MywyNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQga01heFJl
Y3Vyc2lvbkRlcHRoID0gMzsKKwogRmlsZVdyaXRlcjo6RmlsZVdyaXRlcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMp
CiAgICAgLCBtX3JlYWR5U3RhdGUoSU5JVCkKLSAgICAsIG1fc3RhcnRlZFdyaXRpbmcoZmFsc2Up
CisgICAgLCBtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyhmYWxzZSkKKyAgICAsIG1fcXVldWVkT3Bl
cmF0aW9uKE9wZXJhdGlvbk5vbmUpCiAgICAgLCBtX2J5dGVzV3JpdHRlbigwKQogICAgICwgbV9i
eXRlc1RvV3JpdGUoMCkKICAgICAsIG1fdHJ1bmNhdGVMZW5ndGgoLTEpCisgICAgLCBtX251bUFi
b3J0cygwKQorICAgICwgbV9yZWN1cnNpb25EZXB0aCgwKQogewogfQogCiBGaWxlV3JpdGVyOjp+
RmlsZVdyaXRlcigpCiB7CisgICAgQVNTRVJUKCFtX3JlY3Vyc2lvbkRlcHRoKTsKICAgICBpZiAo
bV9yZWFkeVN0YXRlID09IFdSSVRJTkcpCiAgICAgICAgIHN0b3AoKTsKIH0KQEAgLTcyLDcgKzc4
LDggQEAgYm9vbCBGaWxlV3JpdGVyOjpjYW5TdXNwZW5kKCkgY29uc3QKIAogdm9pZCBGaWxlV3Jp
dGVyOjpzdG9wKCkKIHsKLSAgICBpZiAod3JpdGVyKCkgJiYgbV9yZWFkeVN0YXRlID09IFdSSVRJ
TkcpCisgICAgLy8gTWFrZSBzdXJlIHdlJ3ZlIGFjdHVhbGx5IGdvdCBzb21ldGhpbmcgdG8gc3Rv
cCwgYW5kIGhhdmVuJ3QgYWxyZWFkeSBjYWxsZWQgYWJvcnQoKS4KKyAgICBpZiAod3JpdGVyKCkg
JiYgbV9yZWFkeVN0YXRlID09IFdSSVRJTkcgJiYgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgJiYg
bV9xdWV1ZWRPcGVyYXRpb24gPT0gT3BlcmF0aW9uTm9uZSkKICAgICAgICAgd3JpdGVyKCktPmFi
b3J0KCk7CiAgICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7CiAgICAgbV9yZWFkeVN0YXRl
ID0gRE9ORTsKQEAgLTgxLDYgKzg4LDggQEAgdm9pZCBGaWxlV3JpdGVyOjpzdG9wKCkKIHZvaWQg
RmlsZVdyaXRlcjo6d3JpdGUoQmxvYiogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
QVNTRVJUKHdyaXRlcigpKTsKKyAgICBBU1NFUlQoZGF0YSk7CisgICAgQVNTRVJUKG1fdHJ1bmNh
dGVMZW5ndGggPT0gLTEpOwogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gV1JJVElORykgewogICAg
ICAgICBzZXRFcnJvcihGaWxlRXJyb3I6OklOVkFMSURfU1RBVEVfRVJSLCBlYyk7CiAgICAgICAg
IHJldHVybjsKQEAgLTg5LDEzICs5OCwyMSBAQCB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2Iq
IGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBzZXRFcnJvcihGaWxlRXJyb3I6OlRZ
UEVfTUlTTUFUQ0hfRVJSLCBlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KKyAgICBpZiAo
bV9yZWN1cnNpb25EZXB0aCA+IGtNYXhSZWN1cnNpb25EZXB0aCkgeworICAgICAgICBzZXRFcnJv
cihGaWxlRXJyb3I6OlNFQ1VSSVRZX0VSUiwgZWMpOworICAgICAgICByZXR1cm47CisgICAgfQog
ICAgIG1fYmxvYkJlaW5nV3JpdHRlbiA9IGRhdGE7CiAgICAgbV9yZWFkeVN0YXRlID0gV1JJVElO
RzsKLSAgICBtX3N0YXJ0ZWRXcml0aW5nID0gZmFsc2U7CiAgICAgbV9ieXRlc1dyaXR0ZW4gPSAw
OwogICAgIG1fYnl0ZXNUb1dyaXRlID0gZGF0YS0+c2l6ZSgpOwotICAgIHdyaXRlcigpLT53cml0
ZShwb3NpdGlvbigpLCBkYXRhKTsKKyAgICBBU1NFUlQobV9xdWV1ZWRPcGVyYXRpb24gPT0gT3Bl
cmF0aW9uTm9uZSk7CisgICAgaWYgKG1faXNPcGVyYXRpb25JblByb2dyZXNzKSAvLyBXZSBtdXN0
IGJlIHdhaXRpbmcgZm9yIGFuIGFib3J0IHRvIGNvbXBsZXRlLCBzaW5jZSBtX3JlYWR5U3RhdGUg
d2Fzbid0IFdSSVRJTkcuCisgICAgICAgIG1fcXVldWVkT3BlcmF0aW9uID0gT3BlcmF0aW9uV3Jp
dGU7CisgICAgZWxzZQorICAgICAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgbV9ibG9i
QmVpbmdXcml0dGVuLmdldCgpKTsKKyAgICBtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IHRydWU7
CisgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS53cml0ZXN0YXJ0RXZlbnQpOwogfQogCiB2b2lk
IEZpbGVXcml0ZXI6OnNlZWsobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
QEAgLTEwNiw4MiArMTIzLDE0MCBAQCB2b2lkIEZpbGVXcml0ZXI6OnNlZWsobG9uZyBsb25nIHBv
c2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fYnl0ZXNXcml0dGVuID0gMDsKLSAgICBtX2J5dGVzVG9Xcml0ZSA9IDA7CisgICAgQVNTRVJU
KG1fdHJ1bmNhdGVMZW5ndGggPT0gLTEpOworICAgIEFTU0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9
PSBPcGVyYXRpb25Ob25lKTsKICAgICBzZWVrSW50ZXJuYWwocG9zaXRpb24pOwogfQogCiB2b2lk
IEZpbGVXcml0ZXI6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgQVNTRVJUKHdyaXRlcigpKTsKKyAgICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0
aCA9PSAtMSk7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HIHx8IHBvc2l0aW9uIDwg
MCkgewogICAgICAgICBzZXRFcnJvcihGaWxlRXJyb3I6OklOVkFMSURfU1RBVEVfRVJSLCBlYyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG1fcmVjdXJzaW9uRGVwdGggPiBrTWF4
UmVjdXJzaW9uRGVwdGgpIHsKKyAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpTRUNVUklUWV9F
UlIsIGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX3JlYWR5U3RhdGUgPSBXUklU
SU5HOwogICAgIG1fYnl0ZXNXcml0dGVuID0gMDsKICAgICBtX2J5dGVzVG9Xcml0ZSA9IDA7CiAg
ICAgbV90cnVuY2F0ZUxlbmd0aCA9IHBvc2l0aW9uOwotICAgIHdyaXRlcigpLT50cnVuY2F0ZShw
b3NpdGlvbik7CisgICAgQVNTRVJUKG1fcXVldWVkT3BlcmF0aW9uID09IE9wZXJhdGlvbk5vbmUp
OworICAgIGlmIChtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcykgLy8gV2UgbXVzdCBiZSB3YWl0aW5n
IGZvciBhbiBhYm9ydCB0byBjb21wbGV0ZS4KKyAgICAgICAgbV9xdWV1ZWRPcGVyYXRpb24gPSBP
cGVyYXRpb25UcnVuY2F0ZTsKKyAgICBlbHNlCisgICAgICAgIHdyaXRlcigpLT50cnVuY2F0ZSht
X3RydW5jYXRlTGVuZ3RoKTsKKyAgICBtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IHRydWU7Cisg
ICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS53cml0ZXN0YXJ0RXZlbnQpOwogfQogCiB2b2lkIEZp
bGVXcml0ZXI6OmFib3J0KEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVCh3cml0ZXIo
KSk7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBXUklUSU5HKSB7Ci0gICAgICAgIHNldEVycm9y
KEZpbGVFcnJvcjo6SU5WQUxJRF9TVEFURV9FUlIsIGVjKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICArK21fbnVtQWJvcnRzOwogCi0gICAgd3JpdGVyKCktPmFib3J0KCk7CisgICAgaWYg
KG1faXNPcGVyYXRpb25JblByb2dyZXNzKQorICAgICAgICB3cml0ZXIoKS0+YWJvcnQoKTsKKyAg
ICBtX3F1ZXVlZE9wZXJhdGlvbiA9IE9wZXJhdGlvbk5vbmU7CisgICAgbV9ibG9iQmVpbmdXcml0
dGVuLmNsZWFyKCk7CisgICAgbV90cnVuY2F0ZUxlbmd0aCA9IC0xOworICAgIHNpZ25hbENvbXBs
ZXRpb24oRmlsZUVycm9yOjpBQk9SVF9FUlIpOwogfQogCiB2b2lkIEZpbGVXcml0ZXI6OmRpZFdy
aXRlKGxvbmcgbG9uZyBieXRlcywgYm9vbCBjb21wbGV0ZSkKIHsKKyAgICBBU1NFUlQobV9yZWFk
eVN0YXRlID09IFdSSVRJTkcpOworICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID09IC0xKTsK
KyAgICBBU1NFUlQobV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MpOwogICAgIEFTU0VSVChieXRlcyAr
IG1fYnl0ZXNXcml0dGVuID4gMCk7CiAgICAgQVNTRVJUKGJ5dGVzICsgbV9ieXRlc1dyaXR0ZW4g
PD0gbV9ieXRlc1RvV3JpdGUpOwotICAgIGlmICghbV9zdGFydGVkV3JpdGluZykgewotICAgICAg
ICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLndyaXRlc3RhcnRFdmVudCk7Ci0gICAgICAgIG1fc3Rh
cnRlZFdyaXRpbmcgPSB0cnVlOwotICAgIH0KICAgICBtX2J5dGVzV3JpdHRlbiArPSBieXRlczsK
ICAgICBBU1NFUlQoKG1fYnl0ZXNXcml0dGVuID09IG1fYnl0ZXNUb1dyaXRlKSB8fCAhY29tcGxl
dGUpOwogICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKCkgKyBieXRlcyk7CiAgICAgaWYgKHBvc2l0
aW9uKCkgPiBsZW5ndGgoKSkKICAgICAgICAgc2V0TGVuZ3RoKHBvc2l0aW9uKCkpOworICAgIC8v
IFRPRE86IFRocm90dGxlIHRvIG5vIG1vcmUgZnJlcXVlbnRseSB0aGFuIGV2ZXJ5IDUwbXMuCisg
ICAgaW50IG51bUFib3J0cyA9IG1fbnVtQWJvcnRzOwogICAgIGZpcmVFdmVudChldmVudE5hbWVz
KCkucHJvZ3Jlc3NFdmVudCk7Ci0gICAgaWYgKGNvbXBsZXRlKSB7CisgICAgLy8gV2UgY291bGQg
Z2V0IGFuIGFib3J0IGluIHRoZSBoYW5kbGVyIGZvciB0aGlzIGV2ZW50LiBJZiB3ZSBkbywgaXQn
cworICAgIC8vIGFscmVhZHkgaGFuZGxlZCB0aGUgY2xlYW51cCBhbmQgc2lnbmFsQ29tcGxldGlv
biBjYWxsLgorICAgIGlmIChjb21wbGV0ZSAmJiBudW1BYm9ydHMgPT0gbV9udW1BYm9ydHMpIHsK
ICAgICAgICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7Ci0gICAgICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soRmlsZVdyaXRlckNvbXBsZXRpb25FdmVudFRhc2s6OmNy
ZWF0ZSh0aGlzLCBGaWxlRXJyb3I6Ok9LKSk7CisgICAgICAgIG1faXNPcGVyYXRpb25JblByb2dy
ZXNzID0gZmFsc2U7CisgICAgICAgIHNpZ25hbENvbXBsZXRpb24oRmlsZUVycm9yOjpPSyk7CiAg
ICAgfQogfQogCiB2b2lkIEZpbGVXcml0ZXI6OmRpZFRydW5jYXRlKCkKIHsKICAgICBBU1NFUlQo
bV90cnVuY2F0ZUxlbmd0aCA+PSAwKTsKLSAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLndyaXRl
c3RhcnRFdmVudCk7CiAgICAgc2V0TGVuZ3RoKG1fdHJ1bmNhdGVMZW5ndGgpOwogICAgIGlmIChw
b3NpdGlvbigpID4gbGVuZ3RoKCkpCiAgICAgICAgIHNldFBvc2l0aW9uKGxlbmd0aCgpKTsKLSAg
ICBtX3RydW5jYXRlTGVuZ3RoID0gLTE7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5w
b3N0VGFzayhGaWxlV3JpdGVyQ29tcGxldGlvbkV2ZW50VGFzazo6Y3JlYXRlKHRoaXMsIEZpbGVF
cnJvcjo6T0spKTsKKyAgICBtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIHNp
Z25hbENvbXBsZXRpb24oRmlsZUVycm9yOjpPSyk7CiB9CiAKIHZvaWQgRmlsZVdyaXRlcjo6ZGlk
RmFpbChGaWxlRXJyb3I6OkVycm9yQ29kZSBjb2RlKQogeworICAgIEFTU0VSVChtX2lzT3BlcmF0
aW9uSW5Qcm9ncmVzcyk7CisgICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKICAg
ICBBU1NFUlQoY29kZSAhPSBGaWxlRXJyb3I6Ok9LKTsKLSAgICBtX2Jsb2JCZWluZ1dyaXR0ZW4u
Y2xlYXIoKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKEZpbGVXcml0
ZXJDb21wbGV0aW9uRXZlbnRUYXNrOjpjcmVhdGUodGhpcywgY29kZSkpOworICAgIGlmIChjb2Rl
ID09IEZpbGVFcnJvcjo6QUJPUlRfRVJSKSB7CisgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24g
PSBtX3F1ZXVlZE9wZXJhdGlvbjsKKyAgICAgICAgbV9xdWV1ZWRPcGVyYXRpb24gPSBPcGVyYXRp
b25Ob25lOworICAgICAgICBkb09wZXJhdGlvbihvcGVyYXRpb24pOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9PSBPcGVyYXRpb25Ob25lKTsKKyAgICAg
ICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKTsKKyAgICAgICAgbV9ibG9iQmVpbmdX
cml0dGVuLmNsZWFyKCk7CisgICAgICAgIHNpZ25hbENvbXBsZXRpb24oY29kZSk7CisgICAgfQor
fQorCit2b2lkIEZpbGVXcml0ZXI6OmRvT3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCit7
CisgICAgQVNTRVJUKG1fcXVldWVkT3BlcmF0aW9uID09IE9wZXJhdGlvbk5vbmUpOworICAgIEFT
U0VSVCghbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MpOworICAgIEFTU0VSVChvcGVyYXRpb24gPT0g
T3BlcmF0aW9uTm9uZSB8fCBvcGVyYXRpb24gPT0gT3BlcmF0aW9uV3JpdGUgfHwgb3BlcmF0aW9u
ID09IE9wZXJhdGlvblRydW5jYXRlKTsKKyAgICBzd2l0Y2ggKG9wZXJhdGlvbikgeworICAgIGNh
c2UgT3BlcmF0aW9uV3JpdGU6CisgICAgICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID09IC0x
KTsKKyAgICAgICAgQVNTRVJUKG1fYmxvYkJlaW5nV3JpdHRlbi5nZXQoKSk7CisgICAgICAgIEFT
U0VSVChtX3JlYWR5U3RhdGUgPT0gV1JJVElORyk7CisgICAgICAgIHdyaXRlcigpLT53cml0ZShw
b3NpdGlvbigpLCBtX2Jsb2JCZWluZ1dyaXR0ZW4uZ2V0KCkpOworICAgICAgICBtX2lzT3BlcmF0
aW9uSW5Qcm9ncmVzcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3BlcmF0aW9u
VHJ1bmNhdGU6CisgICAgICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID49IDApOworICAgICAg
ICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpOworICAgICAgICB3cml0ZXIoKS0+dHJ1
bmNhdGUobV90cnVuY2F0ZUxlbmd0aCk7CisgICAgICAgIG1faXNPcGVyYXRpb25JblByb2dyZXNz
ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPcGVyYXRpb25Ob25lOgorICAgICAg
ICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0aCA9PSAtMSk7CisgICAgICAgIEFTU0VSVCghbV9ibG9i
QmVpbmdXcml0dGVuLmdldCgpKTsKKyAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBET05F
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIEZpbGVXcml0ZXI6OnNpZ25hbENv
bXBsZXRpb24oRmlsZUVycm9yOjpFcnJvckNvZGUgY29kZSkKIHsKICAgICBtX3JlYWR5U3RhdGUg
PSBET05FOworICAgIG1fdHJ1bmNhdGVMZW5ndGggPSAtMTsKICAgICBpZiAoRmlsZUVycm9yOjpP
SyAhPSBjb2RlKSB7CiAgICAgICAgIG1fZXJyb3IgPSBGaWxlRXJyb3I6OmNyZWF0ZShjb2RlKTsK
LSAgICAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKICAgICAgICAgaWYg
KEZpbGVFcnJvcjo6QUJPUlRfRVJSID09IGNvZGUpCiAgICAgICAgICAgICBmaXJlRXZlbnQoZXZl
bnROYW1lcygpLmFib3J0RXZlbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmaXJlRXZl
bnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwogICAgIH0gZWxzZQogICAgICAgICBmaXJlRXZl
bnQoZXZlbnROYW1lcygpLndyaXRlRXZlbnQpOwogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCku
d3JpdGVlbmRFdmVudCk7CkBAIC0xODksNyArMjY0LDEwIEBAIHZvaWQgRmlsZVdyaXRlcjo6c2ln
bmFsQ29tcGxldGlvbihGaWxlRXJyb3I6OkVycm9yQ29kZSBjb2RlKQogCiB2b2lkIEZpbGVXcml0
ZXI6OmZpcmVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCiB7CisgICAgKyttX3JlY3Vy
c2lvbkRlcHRoOwogICAgIGRpc3BhdGNoRXZlbnQoUHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKHR5cGUs
IHRydWUsIG1fYnl0ZXNXcml0dGVuLCBtX2J5dGVzVG9Xcml0ZSkpOworICAgIC0tbV9yZWN1cnNp
b25EZXB0aDsKKyAgICBBU1NFUlQobV9yZWN1cnNpb25EZXB0aCA+PSAwKTsKIH0KIAogdm9pZCBG
aWxlV3JpdGVyOjpzZXRFcnJvcihGaWxlRXJyb3I6OkVycm9yQ29kZSBlcnJvckNvZGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlV3Jp
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuaAppbmRleCAzOWZlZmM0
MjRjNmNhYTA1NGU0MzRlMjIxZmRlOTM2ZDI0OGE2NGI5Li5jMjUwMGViOWQyZjE0MWQwNTQxYTIx
YTlmY2FkZGI5OGExZWJhM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVXcml0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuaApAQCAt
OTAsNiArOTAsMTIgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIod3JpdGVlbmQpOwogCiBwcml2YXRlOgorICAgIGVudW0gT3BlcmF0aW9uIHsKKyAgICAgICAg
T3BlcmF0aW9uTm9uZSwKKyAgICAgICAgT3BlcmF0aW9uV3JpdGUsCisgICAgICAgIE9wZXJhdGlv
blRydW5jYXRlCisgICAgfTsKKwogICAgIEZpbGVXcml0ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwogCiAgICAgdmlydHVhbCB+RmlsZVdyaXRlcigpOwpAQCAtMTAwLDQyICsxMDYsMjQgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkg
eyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERh
dGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsg
fQogCi0gICAgdm9pZCBmaXJlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKLQotICAg
IHZvaWQgc2V0RXJyb3IoRmlsZUVycm9yOjpFcnJvckNvZGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGRvT3BlcmF0aW9uKE9wZXJhdGlvbik7CiAKICAgICB2b2lkIHNpZ25hbENvbXBsZXRp
b24oRmlsZUVycm9yOjpFcnJvckNvZGUpOwogCi0gICAgY2xhc3MgRmlsZVdyaXRlckNvbXBsZXRp
b25FdmVudFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlV3JpdGVyQ29tcGxldGlvbkV2
ZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlcj4gZmlsZVdyaXRlciwgRmlsZUVy
cm9yOjpFcnJvckNvZGUgY29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBGaWxlV3JpdGVyQ29tcGxldGlvbkV2ZW50VGFzayhmaWxlV3JpdGVyLCBjb2RlKSk7
Ci0gICAgICAgIH0KLQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KikKLSAgICAgICAgewotICAgICAgICAgICAgbV9maWxlV3JpdGVyLT5z
aWduYWxDb21wbGV0aW9uKG1fY29kZSk7Ci0gICAgICAgIH0KLSAgICBwcml2YXRlOgotICAgICAg
ICBGaWxlV3JpdGVyQ29tcGxldGlvbkV2ZW50VGFzayhQYXNzUmVmUHRyPEZpbGVXcml0ZXI+IGZp
bGVXcml0ZXIsIEZpbGVFcnJvcjo6RXJyb3JDb2RlIGNvZGUpCi0gICAgICAgICAgICA6IG1fZmls
ZVdyaXRlcihmaWxlV3JpdGVyKQotICAgICAgICAgICAgLCBtX2NvZGUoY29kZSkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPEZpbGVXcml0ZXI+IG1fZmlsZVdyaXRlcjsK
LSAgICAgICAgRmlsZUVycm9yOjpFcnJvckNvZGUgbV9jb2RlOwotICAgIH07CisgICAgdm9pZCBm
aXJlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKKworICAgIHZvaWQgc2V0RXJyb3Io
RmlsZUVycm9yOjpFcnJvckNvZGUsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFJlZlB0cjxGaWxl
RXJyb3I+IG1fZXJyb3I7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwog
ICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIGJvb2wgbV9zdGFydGVkV3JpdGluZzsK
KyAgICBib29sIG1faXNPcGVyYXRpb25JblByb2dyZXNzOworICAgIE9wZXJhdGlvbiBtX3F1ZXVl
ZE9wZXJhdGlvbjsKICAgICBsb25nIGxvbmcgbV9ieXRlc1dyaXR0ZW47CiAgICAgbG9uZyBsb25n
IG1fYnl0ZXNUb1dyaXRlOwogICAgIGxvbmcgbG9uZyBtX3RydW5jYXRlTGVuZ3RoOworICAgIGxv
bmcgbG9uZyBtX251bUFib3J0czsKKyAgICBsb25nIGxvbmcgbV9yZWN1cnNpb25EZXB0aDsKICAg
ICBSZWZQdHI8QmxvYj4gbV9ibG9iQmVpbmdXcml0dGVuOwogfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>