<?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>144648</bug_id>
          
          <creation_ts>2015-05-05 17:26:40 -0700</creation_ts>
          <short_desc>[GTK] All spell checking layout tests fail</short_desc>
          <delta_ts>2015-05-09 10:16:33 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>144690</blocked>
    
    <blocked>144828</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ossy</cc>
    
    <cc>pnormand</cc>
    
    <cc>rouslan+webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1091958</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-05 17:26:40 -0700</bug_when>
    <thetext>This because spell checking is activated using the GObject API-level WebKitWebContext, but WebKitTestRunner uses the C API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092041</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-05 22:33:34 -0700</bug_when>
    <thetext>*** Bug 130411 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092043</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-05 22:33:48 -0700</bug_when>
    <thetext>*** Bug 73003 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092045</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-05 22:34:00 -0700</bug_when>
    <thetext>*** Bug 72248 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092184</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-06 09:43:05 -0700</bug_when>
    <thetext>*** Bug 108529 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092216</commentid>
    <comment_count>5</comment_count>
      <attachid>252490</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-06 10:45:42 -0700</bug_when>
    <thetext>Created attachment 252490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092219</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-06 10:47:39 -0700</bug_when>
    <thetext>Attachment 252490 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:68:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:69:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092239</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-05-06 11:14:29 -0700</bug_when>
    <thetext>In file included from ../../Source/WTF/wtf/FastMalloc.h:26:0,
                 from ../../Source/WebKit2/config.h:44,
                 from ../../Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:28:
../../Source/WTF/wtf/StdLibExtras.h: In instantiation of &apos;typename std::remove_reference&lt; &lt;template-parameter-1-1&gt; &gt;::type&amp;&amp; WTF::move(T&amp;&amp;) [with T = WTF::Vector&lt;WTF::String&gt;; typename std::remove_reference&lt; &lt;template-parameter-1-1&gt; &gt;::type = WTF::Vector&lt;WTF::String&gt;]&apos;:
../../Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:157:69:   required from here
../../Source/WTF/wtf/StdLibExtras.h:125:5: error: static assertion failed: T is not an lvalue reference; move() is unnecessary.
     static_assert(std::is_lvalue_reference&lt;T&gt;::value, &quot;T is not an lvalue reference; move() is unnecessary.&quot;);
     ^
ninja: build stopped: subcommand failed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092243</commentid>
    <comment_count>8</comment_count>
      <attachid>252490</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-06 11:19:56 -0700</bug_when>
    <thetext>Comment on attachment 252490
Patch

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

Cool, I have a few comments/questions.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:840
&gt; +    Vector&lt;String&gt; spellCheckingLanguages = WTF::move(TextChecker::loadedSpellCheckingLanguages());

I&apos;m not sure WTF::move has any effect this way. I think it should be loadedSpellCheckingLanguages() the one doing move in the returns. It could be clearer if the vector was an out paramater passed as a reference, though.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:848
&gt; +    languagesToReturn = adoptGRef(g_ptr_array_new_with_free_func(g_free));
&gt; +    for (const auto&amp; language : spellCheckingLanguages)
&gt; +        g_ptr_array_add(languagesToReturn.get(), g_strdup(language.utf8().data()));
&gt; +    g_ptr_array_add(languagesToReturn.get(), nullptr);

Since languagesToReturn is static, shouldn&apos;t we avoid all this when != nullptr?

&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:56
&gt; +        Vector&lt;String&gt; languages;
&gt; +        languages.append(&quot;en_US&quot;);
&gt; +        checker.get().updateSpellCheckingLanguages(languages);

I think you could do something like this:

checker.get().updateSpellCheckingLanguages(Vector&lt;String&gt; { &quot;en_US&quot; });

&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:69
&gt; +    static TextCheckerState textCheckerState;
&gt; +    static std::once_flag onceFlag;
&gt; +    std::call_once(onceFlag, [] {
&gt; +        textCheckerState.isContinuousSpellCheckingEnabled = false;;
&gt; +        textCheckerState.isGrammarCheckingEnabled = false;;

We could probably simply add { false } to TextCheckerState.h. There&apos;s double ; there

&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:84
&gt; +        contexts[i]-&gt;textCheckerStateChanged();

So, this is indeed per context, then. We can enable/disable spell checking per context?

&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:89
&gt; -    return WebTextChecker::singleton()-&gt;client().continuousSpellCheckingAllowed();
&gt; +    return true;

Why is this now unconditionally true?

&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:157
&gt; +    guesses = WTF::move(enchantTextChecker().getGuessesForWord(word));

Same comment here about the move</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092268</commentid>
    <comment_count>9</comment_count>
      <attachid>252490</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-06 12:15:58 -0700</bug_when>
    <thetext>Comment on attachment 252490
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:840
&gt;&gt; +    Vector&lt;String&gt; spellCheckingLanguages = WTF::move(TextChecker::loadedSpellCheckingLanguages());
&gt; 
&gt; I&apos;m not sure WTF::move has any effect this way. I think it should be loadedSpellCheckingLanguages() the one doing move in the returns. It could be clearer if the vector was an out paramater passed as a reference, though.

Yeah, I think I&apos;ll simply remove the WTF::move here. The compiler should be able to optimize it away.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:848
&gt;&gt; +    g_ptr_array_add(languagesToReturn.get(), nullptr);
&gt; 
&gt; Since languagesToReturn is static, shouldn&apos;t we avoid all this when != nullptr?

It&apos;s static, but it can change between invocations of webkit_web_context_get_spell_checking_languages, so we have to update it each time.

&gt;&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:56
&gt;&gt; +        checker.get().updateSpellCheckingLanguages(languages);
&gt; 
&gt; I think you could do something like this:
&gt; 
&gt; checker.get().updateSpellCheckingLanguages(Vector&lt;String&gt; { &quot;en_US&quot; });

Alright. I&apos;ll give that a shot.

&gt;&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:69
&gt;&gt; +        textCheckerState.isGrammarCheckingEnabled = false;;
&gt; 
&gt; We could probably simply add { false } to TextCheckerState.h. There&apos;s double ; there

I&apos;m not sure if false is an appropriate default value for all platforms though. Would it be okay to simply set it explicitly for now?

&gt;&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:84
&gt;&gt; +        contexts[i]-&gt;textCheckerStateChanged();
&gt; 
&gt; So, this is indeed per context, then. We can enable/disable spell checking per context?

Yes, the WebCore layer supports per-context settings, but not the WebKit2 layer. It uses a singleton to deal with all web processes.

&gt;&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:89
&gt;&gt; +    return true;
&gt; 
&gt; Why is this now unconditionally true?

In the previous code continuousSpellCheckingAllowed was unimplemented in the client, which always returned false. For enchant-based ports though, continuous spell checking is always available. It isn&apos;t a system setting.

&gt;&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:157
&gt;&gt; +    guesses = WTF::move(enchantTextChecker().getGuessesForWord(word));
&gt; 
&gt; Same comment here about the move

I&apos;ll fix this as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092272</commentid>
    <comment_count>10</comment_count>
      <attachid>252506</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-06 12:18:09 -0700</bug_when>
    <thetext>Created attachment 252506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092273</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-06 12:21:19 -0700</bug_when>
    <thetext>Attachment 252506 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:66:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092525</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-06 23:52:52 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 252490 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=252490&amp;action=review
&gt;
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:848
&gt; &gt;&gt; +    g_ptr_array_add(languagesToReturn.get(), nullptr);
&gt; &gt; 
&gt; &gt; Since languagesToReturn is static, shouldn&apos;t we avoid all this when != nullptr?
&gt; 
&gt; It&apos;s static, but it can change between invocations of
&gt; webkit_web_context_get_spell_checking_languages, so we have to update it
&gt; each time.

Ah, I see.

&gt; &gt;&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:69
&gt; &gt;&gt; +        textCheckerState.isGrammarCheckingEnabled = false;;
&gt; &gt; 
&gt; &gt; We could probably simply add { false } to TextCheckerState.h. There&apos;s double ; there
&gt; 
&gt; I&apos;m not sure if false is an appropriate default value for all platforms
&gt; though. Would it be okay to simply set it explicitly for now?

Fair enough.

&gt; &gt;&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:84
&gt; &gt;&gt; +        contexts[i]-&gt;textCheckerStateChanged();
&gt; &gt; 
&gt; &gt; So, this is indeed per context, then. We can enable/disable spell checking per context?
&gt; 
&gt; Yes, the WebCore layer supports per-context settings, but not the WebKit2
&gt; layer. It uses a singleton to deal with all web processes.

I think this is because windows and mac don&apos;t expose that in the API, but use the global settings of the operating system. Spellcheking is enabled/disabled per context, and then all other messages happen in WebPageProxy, and the actual spellchecking is common (assuming a global configuration of languages, of course). So, my point is that we can actually enable/disable spellchecking per context, and only deprecate the languages setting API, making it a global setting somehow. That way, maybe we don&apos;t even need a new class, just a global method to deal with languages or even simply document that get/set spellchecking languages affect to all contexts (unless we plan to add more public API to the spellchecker).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092586</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-07 08:11:46 -0700</bug_when>
    <thetext>(In reply to comment #12)

&gt; &gt; Yes, the WebCore layer supports per-context settings, but not the WebKit2
&gt; &gt; layer. It uses a singleton to deal with all web processes.
&gt; 
&gt; I think this is because windows and mac don&apos;t expose that in the API, but
&gt; use the global settings of the operating system. Spellcheking is
&gt; enabled/disabled per context, and then all other messages happen in
&gt; WebPageProxy, and the actual spellchecking is common (assuming a global
&gt; configuration of languages, of course). So, my point is that we can actually
&gt; enable/disable spellchecking per context, and only deprecate the languages
&gt; setting API, making it a global setting somehow. That way, maybe we don&apos;t
&gt; even need a new class, just a global method to deal with languages or even
&gt; simply document that get/set spellchecking languages affect to all contexts
&gt; (unless we plan to add more public API to the spellchecker).

The Mac port could disable spell check per-context as well, because it is a property of the WebCore Editor implementation, but I think you&apos;re right that spell checking is a system setting for Mac. I think it might be a bit beyond the scope of this patch to implement though, because it requires modifying WebProcessPool::textCheckerStateChanged to fetch the state per-context. This patch mainly preserves original behavior.

That isn&apos;t to say it&apos;s impossible or extremely difficult, but I wonder about the value of splitting the settings or adding a lot of complication for this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092595</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-07 08:50:29 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; 
&gt; &gt; &gt; Yes, the WebCore layer supports per-context settings, but not the WebKit2
&gt; &gt; &gt; layer. It uses a singleton to deal with all web processes.
&gt; &gt; 
&gt; &gt; I think this is because windows and mac don&apos;t expose that in the API, but
&gt; &gt; use the global settings of the operating system. Spellcheking is
&gt; &gt; enabled/disabled per context, and then all other messages happen in
&gt; &gt; WebPageProxy, and the actual spellchecking is common (assuming a global
&gt; &gt; configuration of languages, of course). So, my point is that we can actually
&gt; &gt; enable/disable spellchecking per context, and only deprecate the languages
&gt; &gt; setting API, making it a global setting somehow. That way, maybe we don&apos;t
&gt; &gt; even need a new class, just a global method to deal with languages or even
&gt; &gt; simply document that get/set spellchecking languages affect to all contexts
&gt; &gt; (unless we plan to add more public API to the spellchecker).
&gt; 
&gt; The Mac port could disable spell check per-context as well, because it is a
&gt; property of the WebCore Editor implementation, but I think you&apos;re right that
&gt; spell checking is a system setting for Mac. I think it might be a bit beyond
&gt; the scope of this patch to implement though, because it requires modifying
&gt; WebProcessPool::textCheckerStateChanged to fetch the state per-context. This
&gt; patch mainly preserves original behavior.
&gt; 
&gt; That isn&apos;t to say it&apos;s impossible or extremely difficult, but I wonder about
&gt; the value of splitting the settings or adding a lot of complication for this
&gt; case.

I agree we shouldn&apos;t change the behaviour as part of this patch, this patch isn&apos;t deprecating any API either, so let&apos;s re-think the whole thing after the cleanup :-) I&apos;ll review this patch again soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092624</commentid>
    <comment_count>15</comment_count>
      <attachid>252506</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-07 09:57:41 -0700</bug_when>
    <thetext>Comment on attachment 252506
Patch

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

&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:47
&gt; +#if defined(DEVELOPMENT_BUILD)

Change this before landing, please, see bug https://bugs.webkit.org/show_bug.cgi?id=144746

&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:67
&gt; +        textCheckerState.isContinuousSpellCheckingEnabled = false;;
&gt; +        textCheckerState.isGrammarCheckingEnabled = false;;

Still the double ; here

&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:81
&gt; +    const Vector&lt;WebProcessPool*&gt;&amp; contexts = WebProcessPool::allProcessPools();
&gt; +    for (size_t i = 0; i &lt; contexts.size(); ++i)

for (const auto&amp; processPool : allProcessPools())

&gt; Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp:180
&gt; +#if USE(UNIFIED_TEXT_CHECKING)

This is unconditionally enabled for GTK, we can get rid of the ifdefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092657</commentid>
    <comment_count>16</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-07 11:25:35 -0700</bug_when>
    <thetext>Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092659</commentid>
    <comment_count>17</comment_count>
      <attachid>252506</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-07 11:25:52 -0700</bug_when>
    <thetext>Comment on attachment 252506
Patch

Clearing flags on attachment: 252506

Committed r183936: &lt;http://trac.webkit.org/changeset/183936&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092660</commentid>
    <comment_count>18</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-07 11:25:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092664</commentid>
    <comment_count>19</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-07 11:27:37 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Thanks for the review!

Ack! The comments didn&apos;t show up in my mail client for some reason. I&apos;ll land a followup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092788</commentid>
    <comment_count>20</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-07 15:23:15 -0700</bug_when>
    <thetext>Landed followup of shame here: http://trac.webkit.org/changeset/183949</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093423</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-05-09 08:46:38 -0700</bug_when>
    <thetext>I think this broke an API test:

  /webkit2/WebKitWebContext/spell-checker:                             **

ERROR:../../Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:248:void testWebContextSpellChecker(Test*, gconstpointer): assertion failed: (!currentLanguage)

FAIL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093432</commentid>
    <comment_count>22</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-09 10:16:33 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; I think this broke an API test:
&gt; 
&gt;   /webkit2/WebKitWebContext/spell-checker:                             **
&gt; 
&gt; ERROR:../../Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
&gt; 248:void testWebContextSpellChecker(Test*, gconstpointer): assertion failed:
&gt; (!currentLanguage)
&gt; 
&gt; FAIL

Patch here: https://bugs.webkit.org/show_bug.cgi?id=144828</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252490</attachid>
            <date>2015-05-06 10:45:42 -0700</date>
            <delta_ts>2015-05-06 12:18:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144648-20150506104425.patch</filename>
            <type>text/plain</type>
            <size>38344</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzODc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE2YTU1M2QyYmU4OWFjZGU0NzkxNzk0
NDNiY2U2YjQyNDdkNmFkZmEuLmY1NmM0MjVhNDU0N2Q1ZjlhOWJjMDVlZThkMTI4ODM2ZWU1OTM3
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMDUtMDYgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFsbCBzcGVsbCBjaGVja2luZyBs
YXlvdXQgdGVzdHMgZmFpbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ0NjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDogQWN0aXZhdGUgVU5JRklFRF9URVhUX0NIRUNLSU5H
IGZvciBHVEsrLgorCiAyMDE1LTA1LTA1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBc3luYyBvcGVyYXRpb25zIHJ1bm5pbmcgaW4g
dGhlIFdvcmtRdWV1ZSB0aHJlYWQgc2hvdWxkIHNjaGVkdWxlIHRoZWlyIHNvdXJjZXMgdG8gdGhl
IFdvcmtRdWV1ZSBtYWluIGxvcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjOTY1OTc2ZTAwNjgxZmViYjhhMjI3
M2RkMGVjMDlkMWY1YWIyMGE0Li41MTg1NGYwMDBhZTIzMDdjODBhYzk5OWE2Mzg5NDIxNjc4ZGJi
NjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTUtMDUtMDYgIE1hcnRpbiBSb2Jp
bnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFsbCBzcGVsbCBj
aGVja2luZyBsYXlvdXQgdGVzdHMgZmFpbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgU2ltcGxpZnkgYW5kIGNvbXBsZXRlIHRoZSBHVEsrIHNwZWxsLWNo
ZWNraW5nIGltcGxlbWVudGF0aW9uLiBJbnN0ZWFkIG9mIHVzaW5nCisgICAgICAgIHRoZSBFRkwv
R1RLKyBvbmx5IFdLVGV4dENoZWNrZXIgaW50ZXJmYWNlLCBkaXJlY3RseSBpbXBsZW1lbnQgRW5j
aGFudCBzcGVsbC1jaGVja2luZworICAgICAgICBpbiBUZXh0Q2hlY2tlckd0ay4gVGhlIHBlci1j
b250ZXh0IHNwZWxsIGNoZWNraW5nIEFQSSBpcyBhbiBpbGx1c2lvbiwgc2luY2UgYWxsCisgICAg
ICAgIFdLVGV4dENoZWNrZXIgaW1wbGVtZW50YXRpb25zIHdpbGwgYWRqdXN0IHRoZSBzYW1lIHNp
bmdsZXRvbi4gVGhpcyBjYW4gYmUgYSBmaXJzdCBzdGVwCisgICAgICAgIHRvd2FyZCByZW1vdmlu
ZyBpdCBlbnRpcmVseS4KKworICAgICAgICBBbHNvIGNvbXBsZXRlIHRoZSBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgVGV4dENoZWNrZXIgaW50ZXJmYWNlIGJ5IGR1cGxpY2F0aW5nIHRoZSBFRkwgY29k
ZSwKKyAgICAgICAgd2hpY2ggcmV1c2VzIG90aGVyIG1ldGhvZHMgaW4gdGhlIHNhbWUgY2xhc3Mu
IEV2ZW50dWFsbHkgdGhpcyBkdXBsaWNhdGlvbiB3aWxsIGNvbGxhcHNlLAorICAgICAgICBvbmNl
IEdUSysgYW5kIEVGTCBjYW4gc2hhcmUgYW4gRW5jaGFudCBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hl
Y2tlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4
dENoZWNrZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmNwcDogUmVtb3ZlIFdlYlRleHRDaGVja2VyIHVzYWdlIGFuZAorICAgICAgICBy
ZXBsYWNlIGl0IHdpdGggY2FsbHMgZGlyZWN0bHkgdG8gdGhlIFRleHRDaGVja2VyIHNpbmdsZXRv
biB2aWEgc3RhdGljIG1ldGhvZHMuCisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHA6IE1vdmUgdGhlIFdl
YlRleHRDaGVja2VyIGVuY2hhbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaGVyZSBhbmQgcmV1
c2UgdGhlIEVGTCB2ZXJzaW9uIG9mIFdlYktpdDo6VGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nLgorICAgICAgICBBbHNvIGluaXRpYWxpemUgbGFuZ3VhZ2VzIHByb3Blcmx5IHdo
ZW4gYnVpbGRpbmcgZm9yIGRldmVsb3BlciBidWlsZHMuIFRoaXMKKyAgICAgICAgYWxsb3dzIFdl
YktpdFRlc3RSdW5uZXIgdG8gd29yayBldmVuIHdoZW4gaXQgZG9lc24ndCBleHBsaWNpdGx5IHNl
dCB0aGUgbGFuZ3VhZ2VzLgorCiAyMDE1LTA1LTA1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXSzJdIFRoZSBXZWJLaXQgbmV0d29y
ayBkaXNrIGNhY2hlIGlzIG5vdCBlbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCA3ZjgwNGMwNTg1ZDVm
MmUyMjc3NDhhMWQ5NjVkYjMwMWNhYTkxMzMyLi44NzU5NGNiNmQwOWU4ZGRlYWI4NTZmMGU1Yzgw
MzUwM2ZlYzE0Mzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTEwNTIsNyArMTA1Miw3IEBACiAKICNkZWZp
bmUgVVNFX0dSQU1NQVJfQ0hFQ0tJTkcgMQogCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRG
T1JNKEVGTCkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShHVEspCiAjZGVmaW5lIFVTRV9VTklGSUVEX1RFWFRfQ0hFQ0tJTkcgMQogI2VuZGlmCiAjaWYg
UExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBlZWYxODQyNzliMDFj
YjVmOTk5ZmI0MmNmMTA2NThmMzhlNzY3NmUzLi44YmJhYTRlNWRkYzMxZjAxODYxZjg3NjA1Yjhj
MDU2YWVhOWI4NmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMjE0LDggKzIxNCw2
IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFNldHRpbmdzLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmgK
ICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5nc1ByaXZhdGUuaAotICAgIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmNwcAotICAgIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFRleHRDaGVja2VyLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVu
dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5oCiAgICAgVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0VVJJUmVxdWVzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAppbmRleCA0Y2UxYWI3Y2Y3NDM0MmJkNWU2
YjdkOWQ4MTE2NGJkYjRiYjNiYzYwLi4wZjg5MDhjZjg3MzVmMjEyNWJkZDdmOGVkMzIwYWZmMTQ5
YmY5OTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UHJpdmF0ZS5oCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLU291cEN1c3RvbVByb3RvY29sUmVx
dWVzdE1hbmFnZXIuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmcuaD4KLSNpbmNsdWRlIDxX
ZWJLaXQvV0tUZXh0Q2hlY2tlci5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dlYktpdDJfQy5oPgogI2luY2x1ZGUg
PGdsaWIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFRleHRDaGVja2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlYjcx
YmViOGRlMTdkMTUyZjEyYTk3YWY5MDQ0YzlkMzcwN2ZmMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKLQotI2lmIEVOQUJM
RShTUEVMTENIRUNLKQotCi0jaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgotCi11c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwotCi1zdGF0aWMgaW5saW5lIFdlYktpdFRleHRDaGVja2VyKiB0b1RleHRD
aGVja2VyKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYktpdFRleHRDaGVja2VyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwotfQot
Ci1zdGF0aWMgYm9vbCBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjayhjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiB0b1RleHRDaGVja2VyKGNsaWVudElu
Zm8pLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNrKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKLXsKLSAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5zZXRTcGVs
bENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tTcGVsbGlu
Z09mU3RyaW5nQ2FsbGJhY2sodWludDY0X3QgLyogdGFnICovLCBXS1N0cmluZ1JlZiB0ZXh0LCBp
bnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8p
LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxs
aW5nTG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7Ci19Ci0KLXN0YXRpYyBXS0FycmF5UmVm
IGd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2sodWludDY0X3QgLyogdGFnICovLCBXS1N0cmluZ1JlZiB3
b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNz
ZXMgPSB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5nZXRHdWVzc2VzRm9yV29yZCh0b0ltcGwo
d29yZCktPnN0cmluZygpKTsKLSAgICBpZiAoZ3Vlc3Nlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgV0tNdXRhYmxlQXJyYXlSZWYgd2tTdWdnZXN0aW9ucyA9IFdLTXV0YWJs
ZUFycmF5Q3JlYXRlKCk7Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGd1ZXNzZXMuYmVnaW4oKTsgaXRlciAhPSBndWVzc2VzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU3VnZ2VzdGlvbihBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhpdGVyLT51dGY4KCkuZGF0YSgpKSk7Ci0gICAg
ICAgIFdLQXJyYXlBcHBlbmRJdGVtKHdrU3VnZ2VzdGlvbnMsIHdrU3VnZ2VzdGlvbi5nZXQoKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHdrU3VnZ2VzdGlvbnM7Ci19Ci0KLXN0YXRpYyB2b2lkIGxl
YXJuV29yZENhbGxiYWNrKHVpbnQ2NF90IC8qIHRhZyAqLywgV0tTdHJpbmdSZWYgd29yZCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5s
ZWFybldvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlnbm9y
ZVdvcmRDYWxsYmFjayh1aW50NjRfdCAvKiB0YWcgKi8sIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgdG9UZXh0Q2hlY2tlcihjbGllbnRJbmZvKS0+aWdu
b3JlV29yZCh0b0ltcGwod29yZCktPnN0cmluZygpKTsKLX0KLQotV2ViS2l0VGV4dENoZWNrZXI6
On5XZWJLaXRUZXh0Q2hlY2tlcigpCi17Ci19Ci0KLVdlYktpdFRleHRDaGVja2VyOjpXZWJLaXRU
ZXh0Q2hlY2tlcigpCi0gICAgOiBtX3RleHRDaGVja2VyKHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29y
ZTo6VGV4dENoZWNrZXJFbmNoYW50PigpKQotICAgICwgbV9zcGVsbENoZWNraW5nRW5hYmxlZChm
YWxzZSkKLXsKLSAgICBXS1RleHRDaGVja2VyQ2xpZW50VjAgd2tUZXh0Q2hlY2tlckNsaWVudCA9
IHsKLSAgICAgICAgewotICAgICAgICAgICAgMCwgLy8gdmVyc2lvbgotICAgICAgICAgICAgdGhp
cywgLy8gY2xpZW50SW5mbwotICAgICAgICB9LAotICAgICAgICAwLCAvLyBjb250aW51b3VzU3Bl
bGxDaGVja2luZ0FsbG93ZWQKLSAgICAgICAgY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
Q2FsbGJhY2ssCi0gICAgICAgIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxi
YWNrLAotICAgICAgICAwLCAvLyBncmFtbWFyQ2hlY2tpbmdFbmFibGVkCi0gICAgICAgIDAsIC8v
IHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQKLSAgICAgICAgMCwgLy8gdW5pcXVlU3BlbGxEb2N1
bWVudFRhZwotICAgICAgICAwLCAvLyBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnCi0gICAgICAg
IGNoZWNrU3BlbGxpbmdPZlN0cmluZ0NhbGxiYWNrLAotICAgICAgICAwLCAvLyBjaGVja0dyYW1t
YXJPZlN0cmluZwotICAgICAgICAwLCAvLyBzcGVsbGluZ1VJSXNTaG93aW5nCi0gICAgICAgIDAs
IC8vIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcKLSAgICAgICAgMCwgLy8gdXBkYXRlU3BlbGxp
bmdVSVdpdGhNaXNzcGVsbGVkV29yZAotICAgICAgICAwLCAvLyB1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcKLSAgICAgICAgZ3Vlc3Nlc0ZvcldvcmRDYWxsYmFjaywKLSAgICAgICAg
bGVhcm5Xb3JkQ2FsbGJhY2ssCi0gICAgICAgIGlnbm9yZVdvcmRDYWxsYmFjaywKLSAgICB9Owot
ICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJndrVGV4dENoZWNrZXJDbGllbnQuYmFzZSk7Ci19
Ci0KLXZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5n
TGVuZ3RoKQotewotICAgIG1fdGV4dENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzdHJp
bmcsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLX0KLQotVmVjdG9y
PFN0cmluZz4gV2ViS2l0VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCkKLXsKLSAgICByZXR1cm4gbV90ZXh0Q2hlY2tlci0+Z2V0R3Vlc3Nlc0ZvcldvcmQo
d29yZCk7Ci19Ci0KLXZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OmxlYXJuV29yZChjb25zdCBTdHJp
bmcmIHdvcmQpCi17Ci0gICAgbV90ZXh0Q2hlY2tlci0+bGVhcm5Xb3JkKHdvcmQpOwotfQotCi12
b2lkIFdlYktpdFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKLXsK
LSAgICBtX3RleHRDaGVja2VyLT5pZ25vcmVXb3JkKHdvcmQpOwotfQotCi12b2lkIFdlYktpdFRl
eHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAg
aWYgKG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOwotCi0gICAgLy8gV2UgbmVlZCB0
byBub3RpZnkgdGhlIFdlYiBwcm9jZXNzIHRoYXQgdGhpcyBoYXMgY2hhbmdlZC4KLSAgICBXS1Rl
eHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJs
ZWQpOwotfQotCi1jb25zdCBjaGFyKiBjb25zdCogV2ViS2l0VGV4dENoZWNrZXI6OmdldFNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMgPSBtX3RleHRDaGVja2VyLT5sb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7
Ci0gICAgaWYgKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9h
cnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19mcmVlKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzLnNpemUoKTsgKytpKQotICAgICAgICBnX3B0cl9h
cnJheV9hZGQobV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzLmdldCgpLCBnX3N0cmR1cChzcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQo
bV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzLmdldCgpLCAwKTsKLQotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqKj4obV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzLT5wZGF0YSk7Ci19Ci0K
LXZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnNldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3Qg
Y2hhciogY29uc3QqIGxhbmd1YWdlcykKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBzcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBsYW5ndWFnZXNbaV07ICsraSkK
LSAgICAgICAgc3BlbGxDaGVja2luZ0xhbmd1YWdlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChs
YW5ndWFnZXNbaV0pKTsKLSAgICBtX3RleHRDaGVja2VyLT51cGRhdGVTcGVsbENoZWNraW5nTGFu
Z3VhZ2VzKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOwotfQotI2VuZGlmIC8vIEVOQUJMRShTUEVM
TENIRUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VGV4dENoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFRleHRDaGVja2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOGYzMjNlNzE3
ZDg0MGYxZDZkYzViMTUzYzc5NGE0ZGJiNmM5NzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VGV4dENoZWNrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRUZXh0Q2hlY2tlcl9o
Ci0jZGVmaW5lIFdlYktpdFRleHRDaGVja2VyX2gKLQotI2lmIEVOQUJMRShTUEVMTENIRUNLKQot
Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckVuY2hhbnQuaD4KLSNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1jbGFzcyBX
ZWJLaXRUZXh0Q2hlY2tlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1Ymxp
YzoKLSAgICBXZWJLaXRUZXh0Q2hlY2tlcigpOwotICAgIH5XZWJLaXRUZXh0Q2hlY2tlcigpOwot
Ci0gICAgLy8gRm9yIGltcGxlbWVudGluZyBUZXh0Q2hlY2tlckNsaWVudC4KLSAgICBib29sIGlz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSB7IHJldHVybiBtX3NwZWxsQ2hlY2tpbmdFbmFibGVkOyB9
Ci0gICAgdm9pZCBzZXRTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpOwotICAgIHZv
aWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3Nw
ZWxsaW5nTG9jYXRpb24sIGludCYgbWlzc3BlbGxpbmdMZW5ndGgpOwotICAgIFZlY3RvcjxTdHJp
bmc+IGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7Ci0gICAgdm9pZCBsZWFy
bldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKTsKLSAgICB2b2lkIGlnbm9yZVdvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkKTsKLQotICAgIC8vIFRvIGJlIGNhbGxlZCBmcm9tIFdlYktpdFdlYkNvbnRleHQg
b25seS4KLSAgICBjb25zdCBjaGFyKiBjb25zdCogZ2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcygp
OwotICAgIHZvaWQgc2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBjaGFyKiBjb25zdCog
c3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudD4gbV90ZXh0Q2hlY2tlcjsKLSAgICBHUmVmUHRy
PEdQdHJBcnJheT4gbV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzOwotICAgIGJvb2wgbV9zcGVsbENo
ZWNraW5nRW5hYmxlZDsKLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKLQotI2Vu
ZGlmIC8vIFdlYktpdFRleHRDaGVja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggYzgyNzI0NmM5OTJjMzJk
MGY0MTJhNWM2MGY0NDI3ODdmY2UwZDYxMy4uYmYyMDM4MjRiNDkxNzJjZjFjZGUzMmM3OTNlYmQ5
ZDg4Zjc0NzUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlICJBUElE
b3dubG9hZENsaWVudC5oIgogI2luY2x1ZGUgIkFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5o
IgogI2luY2x1ZGUgIkFQSVN0cmluZy5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCisjaW5j
bHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgogI2luY2x1ZGUgIldlYkJhdHRlcnlNYW5hZ2VyUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJDZXJ0aWZpY2F0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb29r
aWVNYW5hZ2VyUHJveHkuaCIKQEAgLTQwLDcgKzQyLDYgQEAKICNpbmNsdWRlICJXZWJLaXRSZXF1
ZXN0TWFuYWdlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdFNlY3VyaXR5TWFuYWdlclByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXRTZXR0aW5nc1ByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRUZXh0Q2hlY2tlci5oIgogI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0VXNlckNvbnRlbnRNYW5hZ2VyUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCkBAIC0xNzIsOSArMTczLDYgQEAgc3RydWN0
IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCiAg
ICAgUmVmUHRyPFdlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyPiBub3RpZmljYXRpb25Qcm92aWRl
cjsKICNlbmRpZgotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJLaXRUZXh0Q2hlY2tlcj4gdGV4dENoZWNrZXI7Ci0jZW5kaWYKICAgICBDU3RyaW5nIGZhdmlj
b25EYXRhYmFzZURpcmVjdG9yeTsKICAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3Jz
UG9saWN5OwogCkBAIC0yOTAsOSArMjg4LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4
dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykK
ICAgICBwcml2LT5ub3RpZmljYXRpb25Qcm92aWRlciA9IFdlYktpdE5vdGlmaWNhdGlvblByb3Zp
ZGVyOjpjcmVhdGUocHJpdi0+Y29udGV4dC0+c3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5h
Z2VyUHJveHk+KCkpOwogI2VuZGlmCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgcHJpdi0+
dGV4dENoZWNrZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYktpdFRleHRDaGVja2VyPigpOwotI2Vu
ZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHREaXNwb3NlKEdPYmplY3QqIG9i
amVjdCkKQEAgLTgwMiw3ICs3OTcsNyBAQCBnYm9vbGVhbiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dAogICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgRkFMU0Up
OwogCiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgcmV0dXJuIGNvbnRleHQtPnByaXYtPnRl
eHRDaGVja2VyLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgcmV0dXJuIFRleHRDaGVj
a2VyOjpzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwogI2Vsc2UKICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTgyMCw3ICs4MTUsNyBAQCB2b2lkIHdlYmtpdF93
ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZChXZWJLaXRXZWJDb250ZXh0KiBj
b250ZXh0LCBnYgogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNv
bnRleHQpKTsKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIGNvbnRleHQtPnByaXYtPnRl
eHRDaGVja2VyLT5zZXRTcGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsKKyAgICBUZXh0Q2hl
Y2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOwogI2VuZGlm
CiB9CiAKQEAgLTgzOSwxMCArODM0LDIwIEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3NldF9z
cGVsbF9jaGVja2luZ19lbmFibGVkKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGdiCiAgKi8K
IGNvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7
CiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICByZXR1cm4gY29udGV4dC0+cHJpdi0+dGV4
dENoZWNrZXItPmdldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBWZWN0b3I8U3RyaW5n
PiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzID0gV1RGOjptb3ZlKFRleHRDaGVja2VyOjpsb2FkZWRT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkpOworICAgIGlmIChzcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGF0aWMgR1JlZlB0
cjxHUHRyQXJyYXk+IGxhbmd1YWdlc1RvUmV0dXJuOworICAgIGxhbmd1YWdlc1RvUmV0dXJuID0g
YWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX2ZyZWUpKTsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGxhbmd1YWdlIDogc3BlbGxDaGVja2luZ0xhbmd1YWdlcykKKyAgICAg
ICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlc1RvUmV0dXJuLmdldCgpLCBnX3N0cmR1cChsYW5n
dWFnZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlc1RvUmV0
dXJuLmdldCgpLCBudWxscHRyKTsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
Kj4obGFuZ3VhZ2VzVG9SZXR1cm4tPnBkYXRhKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5k
aWYKQEAgLTg3MSw3ICs4NzYsMTAgQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlcyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LAogICAgIGdfcmV0
dXJuX2lmX2ZhaWwobGFuZ3VhZ2VzKTsKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIGNv
bnRleHQtPnByaXYtPnRleHRDaGVja2VyLT5zZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1
YWdlcyk7CisgICAgVmVjdG9yPFN0cmluZz4gc3BlbGxDaGVja2luZ0xhbmd1YWdlczsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgbGFuZ3VhZ2VzW2ldOyArK2kpCisgICAgICAgIHNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2VzW2ldKSk7CisgICAg
VGV4dENoZWNrZXI6OnNldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoc3BlbGxDaGVja2luZ0xhbmd1
YWdlcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1RleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaApp
bmRleCA0MTE5MjhhYWE0ZTUwMDExMWVjMTUwMWFjNDFkMjg4ZGMwZDcxYjM0Li41ZjFkNzEwMWNi
ZWY4YmFhNmRmZDBhNTU1Mjk0ZmU4ODMzODhjOTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
VGV4dENoZWNrZXIuaApAQCAtNjIsNiArNjIsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IHRvZ2dsZVN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZygpOwogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShHVEspCisgICAgc3RhdGljIHZvaWQgc2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKCk7CisjZW5kaWYKKwogICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKICAgICBzdGF0aWMgdm9p
ZCBncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpOwogICAgIHN0YXRpYyBp
bnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5Kik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwCmluZGV4IDRmZjgyNDQ2
OWRlMGE3YjcwNjE0ODQxZTQzYWZiY2I0Zjk0NjYyZWEuLmI4MTRiYzJhZDRlZTg2MjEwNzAwMWY1
YjQ4ZmNkNjMyMjZiMTI0MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvVGV4dENoZWNrZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
VGV4dENoZWNrZXJHdGsuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEyMCArMjgsMjI5IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKIAorI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgorI2luY2x1ZGUgIldl
YlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckVu
Y2hhbnQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0gCi1uYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIFRleHRDaGVja2Vy
U3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKK25hbWVzcGFjZSBXZWJLaXQgewogCi1jb25zdCBUZXh0
Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQorc3RhdGljIFdlYkNvcmU6OlRleHRD
aGVja2VyRW5jaGFudCYgZW5jaGFudFRleHRDaGVja2VyKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBk
aWRJbml0aWFsaXplU3RhdGUgPSBmYWxzZTsKLSAgICBpZiAoZGlkSW5pdGlhbGl6ZVN0YXRlKQot
ICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8V2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50PiBjaGVja2VyOwogCi0gICAgV2ViVGV4dENo
ZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50
KCk7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKLSAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9ICBjbGllbnQuZ3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpOworI2lmIGRlZmluZWQoREVWRUxPUE1FTlRfQlVJTEQpCisgICAgLy8gVGhp
cyBpcyBhIGJpdCBvZiBhIGhhY2ssIGJ1dCBlbnN1cmVzIHRoYXQgZm9yIHRlc3RpbmcgcHVycG9z
ZXMsCisgICAgLy8gc3BlbGwgY2hlY2tpbmcgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW4gV2Vi
S2l0VGVzdFJ1bm5lciB3aGlsZQorICAgIC8vIHJ1bm5pbmcgbGF5b3V0IHRlc3RzLiBXZSBzaG91
bGQgY29uc2lkZXIgcmVwbGFjaW5nIHRoaXMgd2l0aCBzb21lCisgICAgLy8gbW9yZSBhY2Nlc3Np
YmxlIEMgQVBJIGF0IHNvbWUgcG9pbnQuCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VG
bGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGxhbmd1YWdlczsKKyAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZCgiZW5fVVMiKTsKKyAg
ICAgICAgY2hlY2tlci5nZXQoKS51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdl
cyk7CisgICAgfSk7CisjZW5kaWYKKworICAgIHJldHVybiBjaGVja2VyOworfQogCi0gICAgZGlk
SW5pdGlhbGl6ZVN0YXRlID0gdHJ1ZTsKK1RleHRDaGVja2VyU3RhdGUmIGNoZWNrZXJTdGF0ZSgp
Cit7CisgICAgc3RhdGljIFRleHRDaGVja2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZs
YWcsIFtdIHsKKyAgICAgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCA9IGZhbHNlOzsKKyAgICAgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQgPSBmYWxzZTs7CisgICAgfSk7CiAKICAgICByZXR1cm4gdGV4dENoZWNr
ZXJTdGF0ZTsKIH0KLSAgCisKK2NvbnN0IFRleHRDaGVja2VyU3RhdGUmIFRleHRDaGVja2VyOjpz
dGF0ZSgpCit7CisgICAgcmV0dXJuIGNoZWNrZXJTdGF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB1
cGRhdGVTdGF0ZUZvckFsbENvbnRleHRzKCkKK3sKKyAgICBjb25zdCBWZWN0b3I8V2ViUHJvY2Vz
c1Bvb2wqPiYgY29udGV4dHMgPSBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250ZXh0cy5zaXplKCk7ICsraSkKKyAgICAgICAg
Y29udGV4dHNbaV0tPnRleHRDaGVja2VyU3RhdGVDaGFuZ2VkKCk7Cit9CisKIGJvb2wgVGV4dENo
ZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICByZXR1cm4g
V2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5jb250aW51b3VzU3BlbGxDaGVj
a2luZ0FsbG93ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpCiB7Ci0gICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgPT0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCisgICAgaWYg
KGNoZWNrZXJTdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47Ci0gICAgdGV4dENo
ZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwotICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+
Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyAgICBjaGVja2VyU3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAg
IHVwZGF0ZVN0YXRlRm9yQWxsQ29udGV4dHMoKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6c2V0
R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKIHsK
LSAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPT0gaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKQorICAgIGlmIChjaGVja2VyU3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQgPT0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47Ci0gICAg
dGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQ7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5z
ZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7CisgICAg
Y2hlY2tlclN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkOworICAgIHVwZGF0ZVN0YXRlRm9yQWxsQ29udGV4dHMoKTsKIH0KIAogdm9pZCBU
ZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJv
b2wgZW5hYmxlZCkKIHsKLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyAgICBjaGVja2VyU3RhdGUoKS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6Omdy
YW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQogewotICAgIHRl
eHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyAgICBj
aGVja2VyU3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCi1p
bnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSog
cGFnZSkKK2ludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFn
ZVByb3h5KikKIHsKLSAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGll
bnQoKS51bmlxdWVTcGVsbERvY3VtZW50VGFnKHBhZ2UpOworICAgIHJldHVybiAwOwogfQogCi12
b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQor
dm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90IC8qIHRh
ZyAqLykKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLmNsb3Nl
U3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tT
cGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0
LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0
aCkKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IC8qIHNw
ZWxsRG9jdW1lbnRUYWcgKi8sIFN0cmluZ1ZpZXcgdGV4dCwgaW50MzJfdCYgbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgV2ViVGV4dENoZWNr
ZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1
bWVudFRhZywgdGV4dC50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIG1pc3NwZWxsaW5nTG9jYXRp
b24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7Cisg
ICAgbWlzc3BlbGxpbmdMZW5ndGggPSAwOworICAgIGVuY2hhbnRUZXh0Q2hlY2tlcigpLmNoZWNr
U3BlbGxpbmdPZlN0cmluZyh0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgbWlzc3BlbGxp
bmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpj
aGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcg
dGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50
MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQordm9p
ZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCAvKiBzcGVsbERvY3Vt
ZW50VGFnICovLCBTdHJpbmdWaWV3IC8qIHRleHQgKi8sIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsPiYgLyogZ3JhbW1hckRldGFpbHMgKi8sIGludDMyX3QmIC8qIGJhZEdyYW1tYXJMb2Nh
dGlvbiAqLywgaW50MzJfdCYgLyogYmFkR3JhbW1hckxlbmd0aCAqLykKIHsKLSAgICBXZWJUZXh0
Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLmNoZWNrR3JhbW1hck9mU3RyaW5nKHNwZWxs
RG9jdW1lbnRUYWcsIHRleHQudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBncmFtbWFyRGV0YWls
cywgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKIH0KIAogYm9vbCBUZXh0
Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgcmV0dXJuIFdlYlRleHRDaGVj
a2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuc3BlbGxpbmdVSUlzU2hvd2luZygpOworICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hv
d2luZygpCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS50b2dn
bGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQordm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxp
bmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90IC8qIHNwZWxsRG9jdW1lbnRUYWcgKi8sIGNv
bnN0IFN0cmluZyYgLyogbWlzc3BlbGxlZFdvcmQgKi8pCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6
OnNpbmdsZXRvbigpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KHNwZWxsRG9jdW1lbnRUYWcsIG1pc3NwZWxsZWRXb3JkKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVu
dFRhZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWls
JiBncmFtbWFyRGV0YWlsKQordm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGludDY0X3QgLyogc3BlbGxEb2N1bWVudFRhZyAqLywgY29uc3QgU3RyaW5n
JiAvKiBiYWRHcmFtbWFyUGhyYXNlICovLCBjb25zdCBHcmFtbWFyRGV0YWlsJiAvKiBncmFtbWFy
RGV0YWlsICovKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCku
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIGJhZEdy
YW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRH
dWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29y
ZCwgY29uc3QgU3RyaW5nJiAvKiBjb250ZXh0ICovLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykK
K3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3QgLyogc3BlbGxEb2N1
bWVudFRhZyAqLywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIC8qIGNvbnRleHQg
Ki8sIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaW5n
bGV0b24oKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwg
Z3Vlc3Nlcyk7CisgICAgZ3Vlc3NlcyA9IFdURjo6bW92ZShlbmNoYW50VGV4dENoZWNrZXIoKS5n
ZXRHdWVzc2VzRm9yV29yZCh3b3JkKSk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29y
ZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKK3ZvaWQgVGV4
dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IC8qIHNwZWxsRG9jdW1lbnRUYWcgKi8sIGNvbnN0
IFN0cmluZyYgd29yZCkKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVu
dCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyAgICBlbmNoYW50VGV4dENo
ZWNrZXIoKS5sZWFybldvcmQod29yZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdv
cmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAg
V2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9j
dW1lbnRUYWcsIHdvcmQpOworICAgIGVuY2hhbnRUZXh0Q2hlY2tlcigpLmlnbm9yZVdvcmQod29y
ZCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NS
ZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPiBjb21wbGV0aW9uKQoreworICAgIGlmICghY29t
cGxldGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dENoZWNraW5nUmVxdWVzdERhdGEg
cmVxdWVzdCA9IGNvbXBsZXRpb24tPnRleHRDaGVja2luZ1JlcXVlc3REYXRhKCk7CisgICAgQVNT
RVJUKHJlcXVlc3Quc2VxdWVuY2UoKSAhPSB1bnJlcXVlc3RlZFRleHRDaGVja2luZ1NlcXVlbmNl
KTsKKyAgICBBU1NFUlQocmVxdWVzdC5tYXNrKCkgIT0gVGV4dENoZWNraW5nVHlwZU5vbmUpOwor
CisgICAgY29tcGxldGlvbi0+ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KGNoZWNrVGV4dE9mUGFyYWdy
YXBoKGNvbXBsZXRpb24tPnNwZWxsRG9jdW1lbnRUYWcoKSwgcmVxdWVzdC50ZXh0KCksIHJlcXVl
c3QubWFzaygpKSk7Cit9CisKKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorc3RhdGlj
IHVuc2lnbmVkIG5leHRXb3JkT2Zmc2V0KFN0cmluZ1ZpZXcgdGV4dCwgdW5zaWduZWQgY3VycmVu
dE9mZnNldCkKK3sKKyAgICAvLyBGSVhNRTogYXZvaWQgY3JlYXRpbmcgdGV4dEl0ZXJhdG9yIG9i
amVjdCBoZXJlLCBpdCBjb3VsZCBiZSBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCisgICAgLy8gICAg
ICAgIGlzVGV4dEJyZWFrKCkgbGVhdmVzIHRoZSBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmly
c3QgYm91bmRhcnkgcG9zaXRpb24gYXQKKyAgICAvLyAgICAgICAgb3IgYWZ0ZXIgIm9mZnNldCIg
KHVicmtfaXNCb3VuZGFyeSBzaWRlIGVmZmVjdCkuCisgICAgLy8gICAgICAgIEZvciBtYW55IHdv
cmQgc2VwYXJhdG9ycywgdGhlIG1ldGhvZCBkb2Vzbid0IHByb3Blcmx5IGRldGVybWluZSB0aGUg
Ym91bmRhcmllcworICAgIC8vICAgICAgICB3aXRob3V0IHJlc2V0dGluZyB0aGUgaXRlcmF0b3Iu
CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9y
KHRleHQpOworICAgIGlmICghdGV4dEl0ZXJhdG9yKQorICAgICAgICByZXR1cm4gY3VycmVudE9m
ZnNldDsKKworICAgIHVuc2lnbmVkIHdvcmRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0OworICAgIHdo
aWxlICh3b3JkT2Zmc2V0IDwgdGV4dC5sZW5ndGgoKSAmJiBpc1RleHRCcmVhayh0ZXh0SXRlcmF0
b3IsIHdvcmRPZmZzZXQpKQorICAgICAgICArK3dvcmRPZmZzZXQ7CisKKyAgICAvLyBEbyBub3Qg
dHJlYXQgdGhlIHdvcmQncyBib3VuZGFyeSBhcyBhIHNlcGFyYXRvci4KKyAgICBpZiAoIWN1cnJl
bnRPZmZzZXQgJiYgd29yZE9mZnNldCA9PSAxKQorICAgICAgICByZXR1cm4gY3VycmVudE9mZnNl
dDsKKworICAgIC8vIE9taXQgbXVsdGlwbGUgc2VwYXJhdG9ycy4KKyAgICBpZiAoKHdvcmRPZmZz
ZXQgLSBjdXJyZW50T2Zmc2V0KSA+IDEpCisgICAgICAgIC0td29yZE9mZnNldDsKKworICAgIHJl
dHVybiB3b3JkT2Zmc2V0OworfQorCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hl
Y2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJp
bmdWaWV3IHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMpCit7CisgICAgaWYgKCEoY2hlY2tp
bmdUeXBlcyAmIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZykpCisgICAgICAgIHJldHVybiBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOworCisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHRleHRJ
dGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQpOworICAgIGlmICghdGV4dEl0ZXJhdG9y
KQorICAgICAgICByZXR1cm4gVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4oKTsKKworICAgIC8v
IE9taXQgdGhlIHdvcmQgc2VwYXJhdG9ycyBhdCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgdGV4
dCB0byBkb24ndCB1bm5lY2Vzc2FyaWx5CisgICAgLy8gaW52b2x2ZSB0aGUgY2xpZW50IHRvIGNo
ZWNrIHNwZWxsaW5nIGZvciB0aGVtLgorICAgIHVuc2lnbmVkIG9mZnNldCA9IG5leHRXb3JkT2Zm
c2V0KHRleHQsIDApOworICAgIHVuc2lnbmVkIGxlbmd0aFN0cmlwID0gdGV4dC5sZW5ndGgoKTsK
KyAgICB3aGlsZSAobGVuZ3RoU3RyaXAgPiAwICYmIGlzVGV4dEJyZWFrKHRleHRJdGVyYXRvciwg
bGVuZ3RoU3RyaXAgLSAxKSkKKyAgICAgICAgLS1sZW5ndGhTdHJpcDsKKworICAgIFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IHBhcmFncmFwaENoZWNraW5nUmVzdWx0OworICAgIHdoaWxlIChv
ZmZzZXQgPCBsZW5ndGhTdHJpcCkgeworICAgICAgICBpbnQzMl90IG1pc3NwZWxsaW5nTG9jYXRp
b24gPSAtMTsKKyAgICAgICAgaW50MzJfdCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7CisgICAgICAg
IGNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCB0ZXh0LnN1YnN0cmluZyhv
ZmZzZXQsIGxlbmd0aFN0cmlwIC0gb2Zmc2V0KSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3Bl
bGxpbmdMZW5ndGgpOworICAgICAgICBpZiAoIW1pc3NwZWxsaW5nTGVuZ3RoKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IG1pc3NwZWxsaW5nUmVzdWx0
OworICAgICAgICBtaXNzcGVsbGluZ1Jlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nOworICAgICAgICBtaXNzcGVsbGluZ1Jlc3VsdC5sb2NhdGlvbiA9IG9mZnNldCArIG1pc3Nw
ZWxsaW5nTG9jYXRpb247CisgICAgICAgIG1pc3NwZWxsaW5nUmVzdWx0Lmxlbmd0aCA9IG1pc3Nw
ZWxsaW5nTGVuZ3RoOworICAgICAgICBwYXJhZ3JhcGhDaGVja2luZ1Jlc3VsdC5hcHBlbmQobWlz
c3BlbGxpbmdSZXN1bHQpOworICAgICAgICBvZmZzZXQgKz0gbWlzc3BlbGxpbmdMb2NhdGlvbiAr
IG1pc3NwZWxsaW5nTGVuZ3RoOworICAgICAgICAvLyBHZW5lcmFsbHksIHdlIGVuZCB1cCBjaGVj
a2luZyBhdCB0aGUgd29yZCBzZXBhcmF0b3IsIG1vdmUgdG8gdGhlIGFkamFjZW50IHdvcmQuCisg
ICAgICAgIG9mZnNldCA9IG5leHRXb3JkT2Zmc2V0KHRleHQuc3Vic3RyaW5nKDAsIGxlbmd0aFN0
cmlwKSwgb2Zmc2V0KTsKKyAgICB9CisgICAgcmV0dXJuIHBhcmFncmFwaENoZWNraW5nUmVzdWx0
OworfQorI2VuZGlmCisKK3ZvaWQgVGV4dENoZWNrZXI6OnNldFNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcykKK3sKKyAgICBlbmNoYW50VGV4dENo
ZWNrZXIoKS51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7CiB9CiAKLXZv
aWQgVGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENo
ZWNrZXJDb21wbGV0aW9uPikKK1ZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2VyOjpsb2FkZWRTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBlbmNoYW50VGV4dENoZWNrZXIoKS5sb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGEzMWM5ODczOTE0MTM4ZDJlMDI0NTZi
NWFhNTA3YTJjNTFlZmUwYTQuLjUzZGNkYjQ5ZWI2MzExYzJmOWYzYTY2Y2FhMTA1YTA2Yjc0NGZl
MDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNS0wNS0wNiAgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWxsIHNwZWxsIGNoZWNraW5n
IGxheW91dCB0ZXN0cyBmYWlsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDQ2NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zOiBVbnNraXAgYW5kIHJl
Y2xhc3NpZnkgcHJldmlvdXNseSBmYWlsaW5nIHRlc3RzLgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcGFzdGUtZXhwZWN0ZWQudHh0OiBSZW1vdmVk
LgorCiAyMDE1LTA1LTA2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVwZGF0ZSBleHBlY3RhdGlvbnMgZm9yIGZhc3QvZm9ybXMvYnV0dG9uLWxpbmUtaGVp
Z2h0Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0
YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXgg
ODYzMmQyNjRkNTAyOGYyNDMwZTlmNDcwZDA4ZjA5NTA1YzkxNDFmYS4uNmUyMzA1MWRiMGFkOTgw
ZDhjNWVkNWNkMDVhN2JmZGI3M2UxNzMyNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTYyNywxMSArNjI3LDYgQEAgQnVnKEdUSykgZWRpdGluZy9zcGVs
bGluZy9pbmxpbmUtc3BlbGxpbmctbWFya2Vycy5odG1sIFsgU2tpcCBdCiBCdWcoR1RLKSBlZGl0
aW5nL3NwZWxsaW5nL2lubGluZS1zcGVsbGluZy1tYXJrZXJzLWhpZHBpLmh0bWwgWyBTa2lwIF0K
IEJ1ZyhHVEspIGVkaXRpbmcvc3BlbGxpbmcvbWFya2Vycy5odG1sIFsgU2tpcCBdCiAKLSMgTWlz
c2luZyBhc3luY2hyb25vdXMgc3BlbGxjaGVja2luZyBpbXBsZW1lbnRhdGlvbi4KLUJ1ZyhHVEsp
IGVkaXRpbmcvc3BlbGxpbmcvZGVzaWduLW1vZGUtc3BlbGxjaGVjay1vZmYuaHRtbCBbIFNraXAg
XQotQnVnKEdUSykgZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1pbnNlcnQtaHRtbC5odG1sIFsg
U2tpcCBdCi1CdWcoR1RLKSBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWhhc3NwZWxsaW5nbWFy
a2VyLmh0bWwgWyBTa2lwIF0KLQogIyBSZXF1aXJlcyBFTkFCTEUoTUVESUFfQ0FQVFVSRSkKIHdl
YmtpdC5vcmcvYi84NTk1OCBmYXN0L2Zvcm1zL2ZpbGUvZmlsZS1pbnB1dC1jYXB0dXJlLmh0bWwg
WyBGYWlsdXJlIF0KIApAQCAtMTI4MywxMSArMTI3OCw2IEBAIHdlYmtpdC5vcmcvYi8xMjI1NzEg
aW5zcGVjdG9yLXByb3RvY29sL3BhZ2UvZnJhbWVTY2hlZHVsZWROYXZpZ2F0aW9uLmh0bWwgWyBU
aW1lCiB3ZWJraXQub3JnL2IvMTIyNTcxIGluc3BlY3Rvci1wcm90b2NvbC9wYWdlL3NldEVtdWxh
dGVkTWVkaWEuaHRtbCBbIFRpbWVvdXQgUGFzcyBdCiB3ZWJraXQub3JnL2IvMTIyNTcxIGluc3Bl
Y3Rvci1wcm90b2NvbC9jc3MvZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcy5odG1sIFsgVGltZW91
dCBQYXNzIF0KIAotd2Via2l0Lm9yZy9iLzEzMDQxMSBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hl
Y2stcGFzdGUuaHRtbCBbIFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzEzMDQxMSBlZGl0aW5nL3Nw
ZWxsaW5nL3NwZWxsaW5nLWNoYW5nZWQtdGV4dC5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3Jn
L2IvMTMwNDExIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1wYXN0ZS1kaXNhYmxlZC5odG1s
IFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvMTMwNDExIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxj
aGVjay1wYXN0ZS1jb250aW51b3VzLWRpc2FibGVkLmh0bWwgWyBUaW1lb3V0IF0KLQogQnVnKEdU
SykgcGx1Z2lucy9yZWxvYWRwbHVnaW5zLWFuZC1wYWdlcy5odG1sIFsgVGltZW91dCBdCiAKIEJ1
ZyhHVEspIGZhc3QvZm9ybXMvc2VsZWN0L21lbnVsaXN0LXBvcHVwLWNyYXNoLmh0bWwgWyBUaW1l
b3V0IF0KQEAgLTE0NzksMjYgKzE0NjksNiBAQCB3ZWJraXQub3JnL2IvOTM5ODAgaHR0cC90ZXN0
cy9hcHBjYWNoZS9sb2FkLWZyb20tYXBwY2FjaGUtZGVmZXItcmVzdW1lLWNyYXNoLmh0bQogd2Vi
a2l0Lm9yZy9iLzQyMTk0IGZhc3QvZXZlbnRzLzUwNTY2MTkuaHRtbCBbIEZhaWx1cmUgXQogd2Vi
a2l0Lm9yZy9iLzQyMTk0IGh0dHAvdGVzdHMvc2VjdXJpdHkvZHJhZy1kcm9wLXNhbWUtdW5pcXVl
LW9yaWdpbi5odG1sIFsgRmFpbHVyZSBdCiAKLSMgTWlzc2luZyBUZXh0Q2hlY2tlcjo6cmVxdWVz
dENoZWNraW5nT2ZTdHJpbmcoKSBpbXBsZW1lbnRhdGlvbiBmb3IgR3RrLgotd2Via2l0Lm9yZy9i
LzczMDAzIGVkaXRpbmcvc3BlbGxpbmcvZGVsZXRlLWludG8tbWlzc3BlbGxlZC13b3JkLmh0bWwg
WyBTa2lwIF0KLXdlYmtpdC5vcmcvYi83MzAwMyBlZGl0aW5nL3NwZWxsaW5nL2VkaXRpbmctbXVs
dGlwbGUtd29yZHMtd2l0aC1tYXJrZXJzLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi83MzAw
MyBlZGl0aW5nL3NwZWxsaW5nL2VkaXRpbmctd29yZC13aXRoLW1hcmtlci0yLmh0bWwgWyBTa2lw
IF0KLXdlYmtpdC5vcmcvYi83MzAwMyBlZGl0aW5nL3NwZWxsaW5nL21vdmUtY3Vyc29yLWFyb3Vu
ZC1taXNzcGVsbGVkLXdvcmQuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzczMDAzIGVkaXRp
bmcvc3BlbGxpbmcvc3BlbGxjaGVjay1hc3luYy1tdXRhdGlvbi5odG1sIFsgU2tpcCBdCi13ZWJr
aXQub3JnL2IvNzMwMDMgZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLWFzeW5jLXJlbW92ZS1m
cmFtZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvNzMwMDMgZWRpdGluZy9zcGVsbGluZy9z
cGVsbGNoZWNrLWFzeW5jLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi83MzAwMyBlZGl0aW5n
L3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzcz
MDAzIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1zZXF1ZW5jZW51bS5odG1sIFsgU2tpcCBd
Ci13ZWJraXQub3JnL2IvNzMwMDMgZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1iYWNrd2FyZC5o
dG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvNzMwMDMgZWRpdGluZy9zcGVsbGluZy9zcGVsbGlu
Zy1tYXJrZXItZGVzY3JpcHRpb24uaHRtbCBbIFNraXAgXQotCi0jIFNwZWxsY2hlY2sgdGVzdHMg
ZG9uJ3Qgc2VlbSB0byB3b3JrLgotQnVnKEdUSykgZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1i
YWNrc3BhY2UtYmV0d2Vlbi1saW5lcy5odG1sIFsgU2tpcCBdCi1CdWcoR1RLKSBlZGl0aW5nL3Nw
ZWxsaW5nL3NwZWxsY2hlY2stYXR0cmlidXRlLmh0bWwgWyBTa2lwIF0KLUJ1ZyhHVEspIGVkaXRp
bmcvc3BlbGxpbmcvc3BlbGxpbmctYXR0cmlidXRlLWF0LWNoaWxkLmh0bWwgWyBTa2lwIF0KLUJ1
ZyhHVEspIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctYXR0cmlidXRlLWNoYW5nZS5odG1sIFsg
U2tpcCBdCi1CdWcoR1RLKSBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWxpbmVicmVhay5odG1s
IFsgU2tpcCBdCi0KICMgQ29udGV4dCBtZW51IHByb2JsZW1zLgogd2Via2l0Lm9yZy9iLzEyMDQw
MSBmYXN0L2V2ZW50cyBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzEyMDQwMSBlZGl0aW5nL3NlbGVj
dGlvbiBbIFNraXAgXQpAQCAtMTU4MSw5ICsxNTUxLDYgQEAgQnVnKEdUSykgcGx1Z2lucy9yZXNp
emUtZnJvbS1wbHVnaW4uaHRtbCBbIEZhaWx1cmUgXQogQnVnKEdUSykgZWRpdGluZy9zZWxlY3Rp
b24vY29udGV4dC1tZW51LXRleHQtc2VsZWN0aW9uLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogQnVn
KEdUSykgZWRpdGluZy9zZWxlY3Rpb24vY29udGV4dC1tZW51LXRleHQtc2VsZWN0aW9uLWxvb2t1
cC5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAotIyBBbiBvbmNvbnRleHRtZW51IGF0dHJpYnV0ZSBp
cyBub3QgY2FsbGVkLgotQnVnKEdUSykgZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLWlucHV0
LXNlYXJjaC1jcmFzaC5odG1sIFsgRmFpbHVyZSBdCi0KIEJ1ZyhHVEspIGh0dHAvdGVzdHMvbWlz
Yy9pZnJhbWUtYmVmb3JldW5sb2FkLWRpYWxvZy1tYXRjaGluZy1hbmNlc3Rvci1zZWN1cml0eW9y
aWdpbi5odG1sIFsgRmFpbHVyZSBdCiAKIEJ1ZyhHVEspIGh0dHAvdGVzdHMvbWlzYy93aWxsLXNl
bmQtcmVxdWVzdC1yZXR1cm5zLW51bGwtb24tcmVkaXJlY3QuaHRtbCBbIEZhaWx1cmUgXQpAQCAt
MTcxOCw5ICsxNjg1LDYgQEAgQnVnKEdUSykgZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVu
dC1wYWdpbmcteS1pbi1zY3JvbGxpbmctcGFnZS5odG1sIFsgRmFpbHUKICMgTmVlZCB0byBhZGQg
ZnVuY3Rpb25hbGl0eSB0byBEdW1wUmVuZGVyVHJlZSB0byBoYW5kbGUgc2Nyb2xsYmFyIHBvbGlj
eSBjaGFuZ2VzCiBCdWcoR1RLKSBmYXN0L292ZXJmbG93L3Njcm9sbGJhci1yZXN0b3JlZC1hbmQt
dGhlbi1sb2NrZWQuaHRtbCBbIEZhaWx1cmUgXQogCi0jIERSVCBkb2Vzbid0IGRpc3BhdGNoIGFu
IGV2ZW50IGZvciB0aGUgc2Vjb25kIGNhbGwgZXZlbnRTZW5kZXIuY29udGV4dENsaWNrKCkuCi13
ZWJraXQub3JnL2IvMzkxMDIgZWRpdGluZy9zcGVsbGluZy9jb250ZXh0LW1lbnUtc3VnZ2VzdGlv
bnMuaHRtbCBbIEZhaWx1cmUgXQotCiAjIFNvbWUgaW5wdXQgdHlwZT1yYW5nZSB0ZXN0cyBmYWls
IGJlY2F1c2Ugb2YgdGhlIHNpemUKICMgb2YgdGhlIHNsaWRlciB0aHVtYiBpbiBHVEsrIHRoZW1l
cy4KIEJ1ZyhHVEspIGZhc3QvZm9ybXMvcmFuZ2Uvc2xpZGVyLW1vdXNlLWV2ZW50cy5odG1sIFsg
RmFpbHVyZSBdCkBAIC0xODAwLDggKzE3NjQsNiBAQCB3ZWJraXQub3JnL2IvMTA1NjkzIGh0dHAv
dGVzdHMvbXVsdGlwYXJ0L211bHRpcGFydC13YWl0LWJlZm9yZS1ib3VuZGFyeS5odG1sIFsgUwog
IyBEb2VzIG5vdCByZW5kZXIgdGhlIHJlY3RhbmdsZSBhcyBpdCBzaG91bGQsIGV2ZW4gdGhvdWdo
IHRoZSBtdWx0aXBsZSBwYXJ0cyBzZWVtIHRvIHdvcmsKIHdlYmtpdC5vcmcvYi81NDI1MSBodHRw
L3Rlc3RzL211bHRpcGFydC9pbnZhbGlkLWltYWdlLWRhdGEuaHRtbCBbIEZhaWx1cmUgXQogCi13
ZWJraXQub3JnL2IvNzIyNDggZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy11bmlmaWVkLWVtdWxh
dGlvbi5odG1sIFsgRmFpbHVyZSBdCi0KIHdlYmtpdC5vcmcvYi82MjIwNCBzdmcvY3VzdG9tL3Jl
bGF0aXZlLXNpemVkLXVzZS13aXRob3V0LWF0dHJpYnV0ZXMtb24tc3ltYm9sLnhodG1sIFsgRmFp
bHVyZSBdCiB3ZWJraXQub3JnL2IvNjIyMDQgc3ZnL2N1c3RvbS91c2Utb24tc3ltYm9sLWluc2lk
ZS1wYXR0ZXJuLnN2ZyBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzYyMjA0IHN2Zy9XM0MtU1ZH
LTEuMS9hbmltYXRlLWVsZW0tMDQtdC5zdmcgWyBGYWlsdXJlIF0KQEAgLTE5MDksMTQgKzE4NzEs
NiBAQCB3ZWJraXQub3JnL2IvMTAzOTI3IGh0dHAvdGVzdHMvdzNjL3dlYnBlcmYvc3VibWlzc2lv
bi9Hb29nbGUvcmVzb3VyY2UtdGltaW5nL2h0bQogd2Via2l0Lm9yZy9iLzEwMzkyNyBodHRwL3Rl
c3RzL3czYy93ZWJwZXJmL3N1Ym1pc3Npb24vR29vZ2xlL3Jlc291cmNlLXRpbWluZy9odG1sL3Rl
c3RfcmVzb3VyY2VfaW5pdGlhdG9yX3R5cGVzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcv
Yi8xMDM5MjcgaHR0cC90ZXN0cy93M2Mvd2VicGVyZi9zdWJtaXNzaW9uL0dvb2dsZS9yZXNvdXJj
ZS10aW1pbmcvaHRtbC90ZXN0X3Jlc291cmNlX3JlZGlyZWN0cy5odG1sIFsgRmFpbHVyZSBdCiAK
LSMgU3BlbGxjaGVja2VyIGJlaGF2aW9yIHRlc3RzLgotd2Via2l0Lm9yZy9iLzEwODM3MCBlZGl0
aW5nL3NwZWxsaW5nL2NvbnRleHQtbWVudS1zdWdnZXN0aW9ucy1tdWx0aXdvcmQtc2VsZWN0aW9u
Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xMDgzNzAgZWRpdGluZy9zcGVsbGluZy9jb250
ZXh0LW1lbnUtc3VnZ2VzdGlvbnMtc3Vid29yZC1zZWxlY3Rpb24uaHRtbCBbIFNraXAgXQotd2Vi
a2l0Lm9yZy9iLzEwODM3MCBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWRvdWJsZS1jbGlja2Vk
LXdvcmQuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzEwODM3MCBlZGl0aW5nL3NwZWxsaW5n
L3NwZWxsaW5nLWV4YWN0bHktc2VsZWN0ZWQtd29yZC5odG1sIFsgU2tpcCBdCi13ZWJraXQub3Jn
L2IvMTA4MzcwIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctd2l0aC1wdW5jdHVhdGlvbi1zZWxl
Y3Rpb24uaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzEwODM3MCBlZGl0aW5nL3NwZWxsaW5n
L3NwZWxsaW5nLXdpdGgtd2hpdGVzcGFjZS1zZWxlY3Rpb24uaHRtbCBbIFNraXAgXQotCiB3ZWJr
aXQub3JnL2IvMTA3MTE4IGZhc3QvY2FudmFzL2NhbnZhcy1xdWFkcmF0aWMtc2FtZS1lbmRwb2lu
dC5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8xMDg5NzMgZmFzdC9jc3MvbmVnYXRp
dmUtdGV4dC1pbmRlbnQtaW4taW5saW5lLWJsb2NrLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
QEAgLTIzNzUsNiArMjMyOSwxNCBAQCB3ZWJraXQub3JnL2IvMTQ0NTc2IGVkaXRpbmcvZXhlY0Nv
bW1hbmQvbnNyZXNwb25kZXItb3V0ZGVudC5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcv
Yi8xNDQ2NzMgZmFzdC9mb3Jtcy9idXR0b24tbGluZS1oZWlnaHQuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQogCit3ZWJraXQub3JnL2IvMTQ0NjkwIGVkaXRpbmcvc3BlbGxpbmcvY29udGV4dC1t
ZW51LXN1Z2dlc3Rpb25zLW11bHRpd29yZC1zZWxlY3Rpb24uaHRtbCBbIFRpbWVvdXQgXQord2Vi
a2l0Lm9yZy9iLzE0NDY5MCBlZGl0aW5nL3NwZWxsaW5nL2NvbnRleHQtbWVudS1zdWdnZXN0aW9u
cy1zdWJ3b3JkLXNlbGVjdGlvbi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMTQ0Njkw
IGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctZXhhY3RseS1zZWxlY3RlZC13b3JkLmh0bWwgWyBU
aW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8xNDQ2OTAgZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy13
aXRoLXB1bmN0dWF0aW9uLXNlbGVjdGlvbi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2Iv
MTQ0NjkwIGVkaXRpbmcvc3BlbGxpbmcvY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xNDQ2OTAgZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1k
b3VibGUtY2xpY2tlZC13b3JkLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xNDQ2OTAg
ZWRpdGluZy9zcGVsbGluZy9kZWxldGUtaW50by1taXNzcGVsbGVkLXdvcmQuaHRtbCBbIFRpbWVv
dXQgUGFzcyBdCisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIEVuZCBvZiBU
ZXN0cyBmYWlsaW5nCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1w
YXN0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZWRpdGluZy9zcGVs
bGluZy9zcGVsbGNoZWNrLXBhc3RlLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOGNkMDQyYTdlNThkNWM1YzBjZWNjNDU0MTYxNGYxNzU5MjJiMGFlMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXBhc3RlLWV4cGVjdGVkLnR4dAor
KysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLUZvciBCdWcgNDAwOTI6IFNwZWxsIGNoZWNr
aW5nIGZvciBwYXN0ZWQgdGV4dC4KLQotT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi0KLUZB
SUwgSU5QVVQgc2hvdWxkIGhhdmUgYSBtYXJrZXIgb24gJ3p6IGFwcGxlJwotRkFJTCBJTlBVVCBz
aG91bGQgaGF2ZSBhIG1hcmtlciBvbiAnejxiPnogYXBwbDwvYj5lJwotRkFJTCBJTlBVVCBzaG91
bGQgaGF2ZSBhIG1hcmtlciBvbiAnenogenogenonCi1GQUlMIFRFWFRBUkVBIHNob3VsZCBoYXZl
IGEgbWFya2VyIG9uICd6eiBhcHBsZScKLUZBSUwgVEVYVEFSRUEgc2hvdWxkIGhhdmUgYSBtYXJr
ZXIgb24gJ3o8Yj56IGFwcGw8L2I+ZScKLUZBSUwgVEVYVEFSRUEgc2hvdWxkIGhhdmUgYSBtYXJr
ZXIgb24gJ3p6IHp6IHp6JwotRkFJTCBESVYgc2hvdWxkIGhhdmUgYSBtYXJrZXIgb24gJ3p6IGFw
cGxlJwotRkFJTCBESVYgc2hvdWxkIGhhdmUgYSBtYXJrZXIgb24gJ3o8Yj56IGFwcGw8L2I+ZScK
LUZBSUwgRElWIHNob3VsZCBoYXZlIGEgbWFya2VyIG9uICd6eiB6eiB6eicKLVBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252506</attachid>
            <date>2015-05-06 12:18:09 -0700</date>
            <delta_ts>2015-05-07 11:25:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144648-20150506121651.patch</filename>
            <type>text/plain</type>
            <size>38352</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzODc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE2YTU1M2QyYmU4OWFjZGU0NzkxNzk0
NDNiY2U2YjQyNDdkNmFkZmEuLmY1NmM0MjVhNDU0N2Q1ZjlhOWJjMDVlZThkMTI4ODM2ZWU1OTM3
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMDUtMDYgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFsbCBzcGVsbCBjaGVja2luZyBs
YXlvdXQgdGVzdHMgZmFpbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ0NjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDogQWN0aXZhdGUgVU5JRklFRF9URVhUX0NIRUNLSU5H
IGZvciBHVEsrLgorCiAyMDE1LTA1LTA1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBc3luYyBvcGVyYXRpb25zIHJ1bm5pbmcgaW4g
dGhlIFdvcmtRdWV1ZSB0aHJlYWQgc2hvdWxkIHNjaGVkdWxlIHRoZWlyIHNvdXJjZXMgdG8gdGhl
IFdvcmtRdWV1ZSBtYWluIGxvcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjOTY1OTc2ZTAwNjgxZmViYjhhMjI3
M2RkMGVjMDlkMWY1YWIyMGE0Li41MTg1NGYwMDBhZTIzMDdjODBhYzk5OWE2Mzg5NDIxNjc4ZGJi
NjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTUtMDUtMDYgIE1hcnRpbiBSb2Jp
bnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFsbCBzcGVsbCBj
aGVja2luZyBsYXlvdXQgdGVzdHMgZmFpbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgU2ltcGxpZnkgYW5kIGNvbXBsZXRlIHRoZSBHVEsrIHNwZWxsLWNo
ZWNraW5nIGltcGxlbWVudGF0aW9uLiBJbnN0ZWFkIG9mIHVzaW5nCisgICAgICAgIHRoZSBFRkwv
R1RLKyBvbmx5IFdLVGV4dENoZWNrZXIgaW50ZXJmYWNlLCBkaXJlY3RseSBpbXBsZW1lbnQgRW5j
aGFudCBzcGVsbC1jaGVja2luZworICAgICAgICBpbiBUZXh0Q2hlY2tlckd0ay4gVGhlIHBlci1j
b250ZXh0IHNwZWxsIGNoZWNraW5nIEFQSSBpcyBhbiBpbGx1c2lvbiwgc2luY2UgYWxsCisgICAg
ICAgIFdLVGV4dENoZWNrZXIgaW1wbGVtZW50YXRpb25zIHdpbGwgYWRqdXN0IHRoZSBzYW1lIHNp
bmdsZXRvbi4gVGhpcyBjYW4gYmUgYSBmaXJzdCBzdGVwCisgICAgICAgIHRvd2FyZCByZW1vdmlu
ZyBpdCBlbnRpcmVseS4KKworICAgICAgICBBbHNvIGNvbXBsZXRlIHRoZSBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgVGV4dENoZWNrZXIgaW50ZXJmYWNlIGJ5IGR1cGxpY2F0aW5nIHRoZSBFRkwgY29k
ZSwKKyAgICAgICAgd2hpY2ggcmV1c2VzIG90aGVyIG1ldGhvZHMgaW4gdGhlIHNhbWUgY2xhc3Mu
IEV2ZW50dWFsbHkgdGhpcyBkdXBsaWNhdGlvbiB3aWxsIGNvbGxhcHNlLAorICAgICAgICBvbmNl
IEdUSysgYW5kIEVGTCBjYW4gc2hhcmUgYW4gRW5jaGFudCBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hl
Y2tlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4
dENoZWNrZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmNwcDogUmVtb3ZlIFdlYlRleHRDaGVja2VyIHVzYWdlIGFuZAorICAgICAgICBy
ZXBsYWNlIGl0IHdpdGggY2FsbHMgZGlyZWN0bHkgdG8gdGhlIFRleHRDaGVja2VyIHNpbmdsZXRv
biB2aWEgc3RhdGljIG1ldGhvZHMuCisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHA6IE1vdmUgdGhlIFdl
YlRleHRDaGVja2VyIGVuY2hhbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaGVyZSBhbmQgcmV1
c2UgdGhlIEVGTCB2ZXJzaW9uIG9mIFdlYktpdDo6VGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nLgorICAgICAgICBBbHNvIGluaXRpYWxpemUgbGFuZ3VhZ2VzIHByb3Blcmx5IHdo
ZW4gYnVpbGRpbmcgZm9yIGRldmVsb3BlciBidWlsZHMuIFRoaXMKKyAgICAgICAgYWxsb3dzIFdl
YktpdFRlc3RSdW5uZXIgdG8gd29yayBldmVuIHdoZW4gaXQgZG9lc24ndCBleHBsaWNpdGx5IHNl
dCB0aGUgbGFuZ3VhZ2VzLgorCiAyMDE1LTA1LTA1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXSzJdIFRoZSBXZWJLaXQgbmV0d29y
ayBkaXNrIGNhY2hlIGlzIG5vdCBlbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCA3ZjgwNGMwNTg1ZDVm
MmUyMjc3NDhhMWQ5NjVkYjMwMWNhYTkxMzMyLi44NzU5NGNiNmQwOWU4ZGRlYWI4NTZmMGU1Yzgw
MzUwM2ZlYzE0Mzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTEwNTIsNyArMTA1Miw3IEBACiAKICNkZWZp
bmUgVVNFX0dSQU1NQVJfQ0hFQ0tJTkcgMQogCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRG
T1JNKEVGTCkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShHVEspCiAjZGVmaW5lIFVTRV9VTklGSUVEX1RFWFRfQ0hFQ0tJTkcgMQogI2VuZGlmCiAjaWYg
UExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBlZWYxODQyNzliMDFj
YjVmOTk5ZmI0MmNmMTA2NThmMzhlNzY3NmUzLi44YmJhYTRlNWRkYzMxZjAxODYxZjg3NjA1Yjhj
MDU2YWVhOWI4NmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMjE0LDggKzIxNCw2
IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFNldHRpbmdzLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmgK
ICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5nc1ByaXZhdGUuaAotICAgIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmNwcAotICAgIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFRleHRDaGVja2VyLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVu
dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5oCiAgICAgVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0VVJJUmVxdWVzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAppbmRleCA0Y2UxYWI3Y2Y3NDM0MmJkNWU2
YjdkOWQ4MTE2NGJkYjRiYjNiYzYwLi4wZjg5MDhjZjg3MzVmMjEyNWJkZDdmOGVkMzIwYWZmMTQ5
YmY5OTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UHJpdmF0ZS5oCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLU291cEN1c3RvbVByb3RvY29sUmVx
dWVzdE1hbmFnZXIuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmcuaD4KLSNpbmNsdWRlIDxX
ZWJLaXQvV0tUZXh0Q2hlY2tlci5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dlYktpdDJfQy5oPgogI2luY2x1ZGUg
PGdsaWIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFRleHRDaGVja2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlYjcx
YmViOGRlMTdkMTUyZjEyYTk3YWY5MDQ0YzlkMzcwN2ZmMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKLQotI2lmIEVOQUJM
RShTUEVMTENIRUNLKQotCi0jaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgotCi11c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwotCi1zdGF0aWMgaW5saW5lIFdlYktpdFRleHRDaGVja2VyKiB0b1RleHRD
aGVja2VyKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYktpdFRleHRDaGVja2VyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwotfQot
Ci1zdGF0aWMgYm9vbCBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjayhjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiB0b1RleHRDaGVja2VyKGNsaWVudElu
Zm8pLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNrKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKLXsKLSAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5zZXRTcGVs
bENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tTcGVsbGlu
Z09mU3RyaW5nQ2FsbGJhY2sodWludDY0X3QgLyogdGFnICovLCBXS1N0cmluZ1JlZiB0ZXh0LCBp
bnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8p
LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxs
aW5nTG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7Ci19Ci0KLXN0YXRpYyBXS0FycmF5UmVm
IGd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2sodWludDY0X3QgLyogdGFnICovLCBXS1N0cmluZ1JlZiB3
b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNz
ZXMgPSB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5nZXRHdWVzc2VzRm9yV29yZCh0b0ltcGwo
d29yZCktPnN0cmluZygpKTsKLSAgICBpZiAoZ3Vlc3Nlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgV0tNdXRhYmxlQXJyYXlSZWYgd2tTdWdnZXN0aW9ucyA9IFdLTXV0YWJs
ZUFycmF5Q3JlYXRlKCk7Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGd1ZXNzZXMuYmVnaW4oKTsgaXRlciAhPSBndWVzc2VzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU3VnZ2VzdGlvbihBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhpdGVyLT51dGY4KCkuZGF0YSgpKSk7Ci0gICAg
ICAgIFdLQXJyYXlBcHBlbmRJdGVtKHdrU3VnZ2VzdGlvbnMsIHdrU3VnZ2VzdGlvbi5nZXQoKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHdrU3VnZ2VzdGlvbnM7Ci19Ci0KLXN0YXRpYyB2b2lkIGxl
YXJuV29yZENhbGxiYWNrKHVpbnQ2NF90IC8qIHRhZyAqLywgV0tTdHJpbmdSZWYgd29yZCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5s
ZWFybldvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlnbm9y
ZVdvcmRDYWxsYmFjayh1aW50NjRfdCAvKiB0YWcgKi8sIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgdG9UZXh0Q2hlY2tlcihjbGllbnRJbmZvKS0+aWdu
b3JlV29yZCh0b0ltcGwod29yZCktPnN0cmluZygpKTsKLX0KLQotV2ViS2l0VGV4dENoZWNrZXI6
On5XZWJLaXRUZXh0Q2hlY2tlcigpCi17Ci19Ci0KLVdlYktpdFRleHRDaGVja2VyOjpXZWJLaXRU
ZXh0Q2hlY2tlcigpCi0gICAgOiBtX3RleHRDaGVja2VyKHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29y
ZTo6VGV4dENoZWNrZXJFbmNoYW50PigpKQotICAgICwgbV9zcGVsbENoZWNraW5nRW5hYmxlZChm
YWxzZSkKLXsKLSAgICBXS1RleHRDaGVja2VyQ2xpZW50VjAgd2tUZXh0Q2hlY2tlckNsaWVudCA9
IHsKLSAgICAgICAgewotICAgICAgICAgICAgMCwgLy8gdmVyc2lvbgotICAgICAgICAgICAgdGhp
cywgLy8gY2xpZW50SW5mbwotICAgICAgICB9LAotICAgICAgICAwLCAvLyBjb250aW51b3VzU3Bl
bGxDaGVja2luZ0FsbG93ZWQKLSAgICAgICAgY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
Q2FsbGJhY2ssCi0gICAgICAgIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxi
YWNrLAotICAgICAgICAwLCAvLyBncmFtbWFyQ2hlY2tpbmdFbmFibGVkCi0gICAgICAgIDAsIC8v
IHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQKLSAgICAgICAgMCwgLy8gdW5pcXVlU3BlbGxEb2N1
bWVudFRhZwotICAgICAgICAwLCAvLyBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnCi0gICAgICAg
IGNoZWNrU3BlbGxpbmdPZlN0cmluZ0NhbGxiYWNrLAotICAgICAgICAwLCAvLyBjaGVja0dyYW1t
YXJPZlN0cmluZwotICAgICAgICAwLCAvLyBzcGVsbGluZ1VJSXNTaG93aW5nCi0gICAgICAgIDAs
IC8vIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcKLSAgICAgICAgMCwgLy8gdXBkYXRlU3BlbGxp
bmdVSVdpdGhNaXNzcGVsbGVkV29yZAotICAgICAgICAwLCAvLyB1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcKLSAgICAgICAgZ3Vlc3Nlc0ZvcldvcmRDYWxsYmFjaywKLSAgICAgICAg
bGVhcm5Xb3JkQ2FsbGJhY2ssCi0gICAgICAgIGlnbm9yZVdvcmRDYWxsYmFjaywKLSAgICB9Owot
ICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJndrVGV4dENoZWNrZXJDbGllbnQuYmFzZSk7Ci19
Ci0KLXZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5n
TGVuZ3RoKQotewotICAgIG1fdGV4dENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzdHJp
bmcsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLX0KLQotVmVjdG9y
PFN0cmluZz4gV2ViS2l0VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCkKLXsKLSAgICByZXR1cm4gbV90ZXh0Q2hlY2tlci0+Z2V0R3Vlc3Nlc0ZvcldvcmQo
d29yZCk7Ci19Ci0KLXZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OmxlYXJuV29yZChjb25zdCBTdHJp
bmcmIHdvcmQpCi17Ci0gICAgbV90ZXh0Q2hlY2tlci0+bGVhcm5Xb3JkKHdvcmQpOwotfQotCi12
b2lkIFdlYktpdFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKLXsK
LSAgICBtX3RleHRDaGVja2VyLT5pZ25vcmVXb3JkKHdvcmQpOwotfQotCi12b2lkIFdlYktpdFRl
eHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAg
aWYgKG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOwotCi0gICAgLy8gV2UgbmVlZCB0
byBub3RpZnkgdGhlIFdlYiBwcm9jZXNzIHRoYXQgdGhpcyBoYXMgY2hhbmdlZC4KLSAgICBXS1Rl
eHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJs
ZWQpOwotfQotCi1jb25zdCBjaGFyKiBjb25zdCogV2ViS2l0VGV4dENoZWNrZXI6OmdldFNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMgPSBtX3RleHRDaGVja2VyLT5sb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7
Ci0gICAgaWYgKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9h
cnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19mcmVlKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzLnNpemUoKTsgKytpKQotICAgICAgICBnX3B0cl9h
cnJheV9hZGQobV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzLmdldCgpLCBnX3N0cmR1cChzcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzW2ldLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQo
bV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzLmdldCgpLCAwKTsKLQotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqKj4obV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzLT5wZGF0YSk7Ci19Ci0K
LXZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnNldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3Qg
Y2hhciogY29uc3QqIGxhbmd1YWdlcykKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBzcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBsYW5ndWFnZXNbaV07ICsraSkK
LSAgICAgICAgc3BlbGxDaGVja2luZ0xhbmd1YWdlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChs
YW5ndWFnZXNbaV0pKTsKLSAgICBtX3RleHRDaGVja2VyLT51cGRhdGVTcGVsbENoZWNraW5nTGFu
Z3VhZ2VzKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOwotfQotI2VuZGlmIC8vIEVOQUJMRShTUEVM
TENIRUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VGV4dENoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFRleHRDaGVja2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOGYzMjNlNzE3
ZDg0MGYxZDZkYzViMTUzYzc5NGE0ZGJiNmM5NzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VGV4dENoZWNrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRUZXh0Q2hlY2tlcl9o
Ci0jZGVmaW5lIFdlYktpdFRleHRDaGVja2VyX2gKLQotI2lmIEVOQUJMRShTUEVMTENIRUNLKQot
Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckVuY2hhbnQuaD4KLSNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1jbGFzcyBX
ZWJLaXRUZXh0Q2hlY2tlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1Ymxp
YzoKLSAgICBXZWJLaXRUZXh0Q2hlY2tlcigpOwotICAgIH5XZWJLaXRUZXh0Q2hlY2tlcigpOwot
Ci0gICAgLy8gRm9yIGltcGxlbWVudGluZyBUZXh0Q2hlY2tlckNsaWVudC4KLSAgICBib29sIGlz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSB7IHJldHVybiBtX3NwZWxsQ2hlY2tpbmdFbmFibGVkOyB9
Ci0gICAgdm9pZCBzZXRTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpOwotICAgIHZv
aWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3Nw
ZWxsaW5nTG9jYXRpb24sIGludCYgbWlzc3BlbGxpbmdMZW5ndGgpOwotICAgIFZlY3RvcjxTdHJp
bmc+IGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7Ci0gICAgdm9pZCBsZWFy
bldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKTsKLSAgICB2b2lkIGlnbm9yZVdvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkKTsKLQotICAgIC8vIFRvIGJlIGNhbGxlZCBmcm9tIFdlYktpdFdlYkNvbnRleHQg
b25seS4KLSAgICBjb25zdCBjaGFyKiBjb25zdCogZ2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcygp
OwotICAgIHZvaWQgc2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBjaGFyKiBjb25zdCog
c3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudD4gbV90ZXh0Q2hlY2tlcjsKLSAgICBHUmVmUHRy
PEdQdHJBcnJheT4gbV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzOwotICAgIGJvb2wgbV9zcGVsbENo
ZWNraW5nRW5hYmxlZDsKLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKLQotI2Vu
ZGlmIC8vIFdlYktpdFRleHRDaGVja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggYzgyNzI0NmM5OTJjMzJk
MGY0MTJhNWM2MGY0NDI3ODdmY2UwZDYxMy4uZTQ0YzE3MzYyZmUyNTc2MTA4MDg0MDZiYzlmMTZj
YzZhMjFhOTliZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlICJBUElE
b3dubG9hZENsaWVudC5oIgogI2luY2x1ZGUgIkFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5o
IgogI2luY2x1ZGUgIkFQSVN0cmluZy5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCisjaW5j
bHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgogI2luY2x1ZGUgIldlYkJhdHRlcnlNYW5hZ2VyUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJDZXJ0aWZpY2F0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb29r
aWVNYW5hZ2VyUHJveHkuaCIKQEAgLTQwLDcgKzQyLDYgQEAKICNpbmNsdWRlICJXZWJLaXRSZXF1
ZXN0TWFuYWdlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdFNlY3VyaXR5TWFuYWdlclByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXRTZXR0aW5nc1ByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRUZXh0Q2hlY2tlci5oIgogI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0VXNlckNvbnRlbnRNYW5hZ2VyUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCkBAIC0xNzIsOSArMTczLDYgQEAgc3RydWN0
IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCiAg
ICAgUmVmUHRyPFdlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyPiBub3RpZmljYXRpb25Qcm92aWRl
cjsKICNlbmRpZgotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJLaXRUZXh0Q2hlY2tlcj4gdGV4dENoZWNrZXI7Ci0jZW5kaWYKICAgICBDU3RyaW5nIGZhdmlj
b25EYXRhYmFzZURpcmVjdG9yeTsKICAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3Jz
UG9saWN5OwogCkBAIC0yOTAsOSArMjg4LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4
dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykK
ICAgICBwcml2LT5ub3RpZmljYXRpb25Qcm92aWRlciA9IFdlYktpdE5vdGlmaWNhdGlvblByb3Zp
ZGVyOjpjcmVhdGUocHJpdi0+Y29udGV4dC0+c3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5h
Z2VyUHJveHk+KCkpOwogI2VuZGlmCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgcHJpdi0+
dGV4dENoZWNrZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYktpdFRleHRDaGVja2VyPigpOwotI2Vu
ZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHREaXNwb3NlKEdPYmplY3QqIG9i
amVjdCkKQEAgLTgwMiw3ICs3OTcsNyBAQCBnYm9vbGVhbiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dAogICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgRkFMU0Up
OwogCiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgcmV0dXJuIGNvbnRleHQtPnByaXYtPnRl
eHRDaGVja2VyLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgcmV0dXJuIFRleHRDaGVj
a2VyOjpzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwogI2Vsc2UKICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTgyMCw3ICs4MTUsNyBAQCB2b2lkIHdlYmtpdF93
ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZChXZWJLaXRXZWJDb250ZXh0KiBj
b250ZXh0LCBnYgogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNv
bnRleHQpKTsKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIGNvbnRleHQtPnByaXYtPnRl
eHRDaGVja2VyLT5zZXRTcGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsKKyAgICBUZXh0Q2hl
Y2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOwogI2VuZGlm
CiB9CiAKQEAgLTgzOSwxMCArODM0LDIwIEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3NldF9z
cGVsbF9jaGVja2luZ19lbmFibGVkKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGdiCiAgKi8K
IGNvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7
CiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICByZXR1cm4gY29udGV4dC0+cHJpdi0+dGV4
dENoZWNrZXItPmdldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBWZWN0b3I8U3RyaW5n
PiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzID0gVGV4dENoZWNrZXI6OmxvYWRlZFNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMoKTsKKyAgICBpZiAoc3BlbGxDaGVja2luZ0xhbmd1YWdlcy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3RhdGljIEdSZWZQdHI8R1B0ckFycmF5
PiBsYW5ndWFnZXNUb1JldHVybjsKKyAgICBsYW5ndWFnZXNUb1JldHVybiA9IGFkb3B0R1JlZihn
X3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19mcmVlKSk7CisgICAgZm9yIChjb25zdCBh
dXRvJiBsYW5ndWFnZSA6IHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpCisgICAgICAgIGdfcHRyX2Fy
cmF5X2FkZChsYW5ndWFnZXNUb1JldHVybi5nZXQoKSwgZ19zdHJkdXAobGFuZ3VhZ2UudXRmOCgp
LmRhdGEoKSkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXNUb1JldHVybi5nZXQoKSwg
bnVsbHB0cik7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGxhbmd1YWdl
c1RvUmV0dXJuLT5wZGF0YSk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmCkBAIC04NzEs
NyArODc2LDEwIEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19s
YW5ndWFnZXMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwKICAgICBnX3JldHVybl9pZl9mYWls
KGxhbmd1YWdlcyk7CiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBjb250ZXh0LT5wcml2
LT50ZXh0Q2hlY2tlci0+c2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFnZXMpOworICAg
IFZlY3RvcjxTdHJpbmc+IHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGxhbmd1YWdlc1tpXTsgKytpKQorICAgICAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
LmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlc1tpXSkpOworICAgIFRleHRDaGVja2Vy
OjpzZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOwogI2Vu
ZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tl
ci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgKaW5kZXggNDExOTI4
YWFhNGU1MDAxMTFlYzE1MDFhYzQxZDI4OGRjMGQ3MWIzNC4uNWYxZDcxMDFjYmVmOGJhYTZkZmQw
YTU1NTI5NGZlODgzMzg4YzkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1RleHRDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2Vy
LmgKQEAgLTYyLDYgKzYyLDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCB0b2dnbGVTdWJz
dGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQor
ICAgIHN0YXRpYyB2b2lkIHNldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mKTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9hZGVkU3BlbGxDaGVja2luZ0xh
bmd1YWdlcygpOworI2VuZGlmCisKICAgICBzdGF0aWMgdm9pZCBjb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCk7CiAgICAgc3RhdGljIHZvaWQgZ3JhbW1hckNo
ZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKICAgICBzdGF0aWMgaW50NjRfdCB1bmlx
dWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcAppbmRleCA0ZmY4MjQ0NjlkZTBhN2I3MDYx
NDg0MWU0M2FmYmNiNGY5NDY2MmVhLi5lZDEyZDgzY2Q3OGViMTA1NTMwMjFmZjA5NzhmYWZlZDVj
OGFkZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVj
a2VyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVja2Vy
R3RrLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEw
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcwogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNywxMjAgKzI4LDIyNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCiAKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5o
IgogI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9v
bC5oIgogI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNrZXJFbmNoYW50Lmg+Cisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotIAotbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBUZXh0Q2hlY2tlclN0YXRlIHRleHRD
aGVja2VyU3RhdGU7CituYW1lc3BhY2UgV2ViS2l0IHsKIAotY29uc3QgVGV4dENoZWNrZXJTdGF0
ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKK3N0YXRpYyBXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hh
bnQmIGVuY2hhbnRUZXh0Q2hlY2tlcigpCiB7Ci0gICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6
ZVN0YXRlID0gZmFsc2U7Ci0gICAgaWYgKGRpZEluaXRpYWxpemVTdGF0ZSkKLSAgICAgICAgcmV0
dXJuIHRleHRDaGVja2VyU3RhdGU7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkNvcmU6
OlRleHRDaGVja2VyRW5jaGFudD4gY2hlY2tlcjsKIAotICAgIFdlYlRleHRDaGVja2VyQ2xpZW50
JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpOwotICAgIHRl
eHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQu
Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5p
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSAgY2xpZW50LmdyYW1tYXJDaGVja2luZ0VuYWJsZWQo
KTsKKyNpZiBkZWZpbmVkKERFVkVMT1BNRU5UX0JVSUxEKQorICAgIC8vIFRoaXMgaXMgYSBiaXQg
b2YgYSBoYWNrLCBidXQgZW5zdXJlcyB0aGF0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLAorICAgIC8v
IHNwZWxsIGNoZWNraW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGluIFdlYktpdFRlc3RSdW5u
ZXIgd2hpbGUKKyAgICAvLyBydW5uaW5nIGxheW91dCB0ZXN0cy4gV2Ugc2hvdWxkIGNvbnNpZGVy
IHJlcGxhY2luZyB0aGlzIHdpdGggc29tZQorICAgIC8vIG1vcmUgYWNjZXNzaWJsZSBDIEFQSSBh
dCBzb21lIHBvaW50LgorICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBz
dGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBjaGVja2VyLmdldCgpLnVwZGF0
ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoVmVjdG9yPFN0cmluZz4geyAiZW5fVVMiIH0pOworICAg
IH0pOworI2VuZGlmCisKKyAgICByZXR1cm4gY2hlY2tlcjsKK30KIAotICAgIGRpZEluaXRpYWxp
emVTdGF0ZSA9IHRydWU7CitUZXh0Q2hlY2tlclN0YXRlJiBjaGVja2VyU3RhdGUoKQoreworICAg
IHN0YXRpYyBUZXh0Q2hlY2tlclN0YXRlIHRleHRDaGVja2VyU3RhdGU7CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7
CisgICAgICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQgPSBmYWxzZTs7CisgICAgICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkID0gZmFsc2U7OworICAgIH0pOwogCiAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7
CiB9Ci0gIAorCitjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQor
eworICAgIHJldHVybiBjaGVja2VyU3RhdGUoKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlU3Rh
dGVGb3JBbGxDb250ZXh0cygpCit7CisgICAgY29uc3QgVmVjdG9yPFdlYlByb2Nlc3NQb29sKj4m
IGNvbnRleHRzID0gV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29udGV4dHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGNvbnRleHRz
W2ldLT50ZXh0Q2hlY2tlclN0YXRlQ2hhbmdlZCgpOworfQorCiBib29sIFRleHRDaGVja2VyOjpp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpCiB7Ci0gICAgcmV0dXJuIFdlYlRleHRD
aGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxv
d2VkKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKQogewotICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgIGlmIChjaGVja2Vy
U3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwotICAgIHRleHRDaGVja2VyU3Rh
dGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZDsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgp
LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCk7CisgICAgY2hlY2tlclN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyAgICB1cGRhdGVT
dGF0ZUZvckFsbENvbnRleHRzKCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJD
aGVja2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCiB7Ci0gICAgaWYg
KHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCkKKyAgICBpZiAoY2hlY2tlclN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09
IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwotICAgIHRleHRDaGVj
a2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkOwotICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuc2V0R3JhbW1h
ckNoZWNraW5nRW5hYmxlZChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOworICAgIGNoZWNrZXJT
dGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZDsKKyAgICB1cGRhdGVTdGF0ZUZvckFsbENvbnRleHRzKCk7CiB9CiAKIHZvaWQgVGV4dENoZWNr
ZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJs
ZWQpCiB7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCA9IGVuYWJsZWQ7CisgICAgY2hlY2tlclN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hl
Y2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0ZXh0Q2hlY2tl
clN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgY2hlY2tlclN0
YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKIH0KIAotaW50NjRfdCBU
ZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCitp
bnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSop
CiB7Ci0gICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkudW5p
cXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBUZXh0
Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90IHRhZykKK3ZvaWQgVGV4
dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCAvKiB0YWcgKi8pCiB7
Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9j
dW1lbnRXaXRoVGFnKHRhZyk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgaW50MzJf
dCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCit2b2lk
IFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCAvKiBzcGVsbERvY3Vt
ZW50VGFnICovLCBTdHJpbmdWaWV3IHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24s
IGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaW5n
bGV0b24oKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcs
IHRleHQudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNz
cGVsbGluZ0xlbmd0aCk7CisgICAgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAgIG1pc3Nw
ZWxsaW5nTGVuZ3RoID0gMDsKKyAgICBlbmNoYW50VGV4dENoZWNrZXIoKS5jaGVja1NwZWxsaW5n
T2ZTdHJpbmcodGV4dC50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIG1pc3NwZWxsaW5nTG9jYXRp
b24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFt
bWFyT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIFZl
Y3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKK3ZvaWQgVGV4dENo
ZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QgLyogc3BlbGxEb2N1bWVudFRhZyAq
LywgU3RyaW5nVmlldyAvKiB0ZXh0ICovLCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4m
IC8qIGdyYW1tYXJEZXRhaWxzICovLCBpbnQzMl90JiAvKiBiYWRHcmFtbWFyTG9jYXRpb24gKi8s
IGludDMyX3QmIC8qIGJhZEdyYW1tYXJMZW5ndGggKi8pCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6
OnNpbmdsZXRvbigpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50
VGFnLCB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdy
YW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6
OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2lu
Z2xldG9uKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQog
ewotICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxp
bmdVSUlzU2hvd2luZygpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5n
JiBtaXNzcGVsbGVkV29yZCkKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoaW50NjRfdCAvKiBzcGVsbERvY3VtZW50VGFnICovLCBjb25zdCBTdHJp
bmcmIC8qIG1pc3NwZWxsZWRXb3JkICovKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0
b24oKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChzcGVsbERv
Y3VtZW50VGFnLCBtaXNzcGVsbGVkV29yZCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1h
ckRldGFpbCkKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0
cmluZyhpbnQ2NF90IC8qIHNwZWxsRG9jdW1lbnRUYWcgKi8sIGNvbnN0IFN0cmluZyYgLyogYmFk
R3JhbW1hclBocmFzZSAqLywgY29uc3QgR3JhbW1hckRldGFpbCYgLyogZ3JhbW1hckRldGFpbCAq
LykKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhy
YXNlLCBncmFtbWFyRGV0YWlsKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0Zv
cldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0
IFN0cmluZyYgLyogY29udGV4dCAqLywgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFRl
eHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IC8qIHNwZWxsRG9jdW1lbnRUYWcg
Ki8sIGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiAvKiBjb250ZXh0ICovLCBWZWN0
b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCkt
PmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMp
OworICAgIGd1ZXNzZXMgPSBlbmNoYW50VGV4dENoZWNrZXIoKS5nZXRHdWVzc2VzRm9yV29yZCh3
b3JkKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQordm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3Jk
KGludDY0X3QgLyogc3BlbGxEb2N1bWVudFRhZyAqLywgY29uc3QgU3RyaW5nJiB3b3JkKQogewot
ICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxs
RG9jdW1lbnRUYWcsIHdvcmQpOworICAgIGVuY2hhbnRUZXh0Q2hlY2tlcigpLmxlYXJuV29yZCh3
b3JkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2lu
Z2xldG9uKCktPmNsaWVudCgpLmlnbm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7Cisg
ICAgZW5jaGFudFRleHRDaGVja2VyKCkuaWdub3JlV29yZCh3b3JkKTsKK30KKwordm9pZCBUZXh0
Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNv
bXBsZXRpb24+IGNvbXBsZXRpb24pCit7CisgICAgaWYgKCFjb21wbGV0aW9uKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSByZXF1ZXN0ID0gY29tcGxldGlv
bi0+dGV4dENoZWNraW5nUmVxdWVzdERhdGEoKTsKKyAgICBBU1NFUlQocmVxdWVzdC5zZXF1ZW5j
ZSgpICE9IHVucmVxdWVzdGVkVGV4dENoZWNraW5nU2VxdWVuY2UpOworICAgIEFTU0VSVChyZXF1
ZXN0Lm1hc2soKSAhPSBUZXh0Q2hlY2tpbmdUeXBlTm9uZSk7CisKKyAgICBjb21wbGV0aW9uLT5k
aWRGaW5pc2hDaGVja2luZ1RleHQoY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29tcGxldGlvbi0+c3Bl
bGxEb2N1bWVudFRhZygpLCByZXF1ZXN0LnRleHQoKSwgcmVxdWVzdC5tYXNrKCkpKTsKK30KKwor
I2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCitzdGF0aWMgdW5zaWduZWQgbmV4dFdvcmRP
ZmZzZXQoU3RyaW5nVmlldyB0ZXh0LCB1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KQoreworICAgIC8v
IEZJWE1FOiBhdm9pZCBjcmVhdGluZyB0ZXh0SXRlcmF0b3Igb2JqZWN0IGhlcmUsIGl0IGNvdWxk
IGJlIHBhc3NlZCBhcyBhIHBhcmFtZXRlci4KKyAgICAvLyAgICAgICAgaXNUZXh0QnJlYWsoKSBs
ZWF2ZXMgdGhlIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBib3VuZGFyeSBwb3NpdGlv
biBhdAorICAgIC8vICAgICAgICBvciBhZnRlciAib2Zmc2V0IiAodWJya19pc0JvdW5kYXJ5IHNp
ZGUgZWZmZWN0KS4KKyAgICAvLyAgICAgICAgRm9yIG1hbnkgd29yZCBzZXBhcmF0b3JzLCB0aGUg
bWV0aG9kIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZXJtaW5lIHRoZSBib3VuZGFyaWVzCisgICAgLy8g
ICAgICAgIHdpdGhvdXQgcmVzZXR0aW5nIHRoZSBpdGVyYXRvci4KKyAgICBUZXh0QnJlYWtJdGVy
YXRvciogdGV4dEl0ZXJhdG9yID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dCk7CisgICAgaWYgKCF0
ZXh0SXRlcmF0b3IpCisgICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0OworCisgICAgdW5zaWdu
ZWQgd29yZE9mZnNldCA9IGN1cnJlbnRPZmZzZXQ7CisgICAgd2hpbGUgKHdvcmRPZmZzZXQgPCB0
ZXh0Lmxlbmd0aCgpICYmIGlzVGV4dEJyZWFrKHRleHRJdGVyYXRvciwgd29yZE9mZnNldCkpCisg
ICAgICAgICsrd29yZE9mZnNldDsKKworICAgIC8vIERvIG5vdCB0cmVhdCB0aGUgd29yZCdzIGJv
dW5kYXJ5IGFzIGEgc2VwYXJhdG9yLgorICAgIGlmICghY3VycmVudE9mZnNldCAmJiB3b3JkT2Zm
c2V0ID09IDEpCisgICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0OworCisgICAgLy8gT21pdCBt
dWx0aXBsZSBzZXBhcmF0b3JzLgorICAgIGlmICgod29yZE9mZnNldCAtIGN1cnJlbnRPZmZzZXQp
ID4gMSkKKyAgICAgICAgLS13b3JkT2Zmc2V0OworCisgICAgcmV0dXJuIHdvcmRPZmZzZXQ7Cit9
CisKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBh
cmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0
X3QgY2hlY2tpbmdUeXBlcykKK3sKKyAgICBpZiAoIShjaGVja2luZ1R5cGVzICYgVGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nKSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+KCk7CisKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogdGV4dEl0ZXJhdG9yID0gd29yZEJyZWFr
SXRlcmF0b3IodGV4dCk7CisgICAgaWYgKCF0ZXh0SXRlcmF0b3IpCisgICAgICAgIHJldHVybiBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOworCisgICAgLy8gT21pdCB0aGUgd29yZCBzZXBh
cmF0b3JzIGF0IHRoZSBiZWdpbm5pbmcvZW5kIG9mIHRoZSB0ZXh0IHRvIGRvbid0IHVubmVjZXNz
YXJpbHkKKyAgICAvLyBpbnZvbHZlIHRoZSBjbGllbnQgdG8gY2hlY2sgc3BlbGxpbmcgZm9yIHRo
ZW0uCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbmV4dFdvcmRPZmZzZXQodGV4dCwgMCk7CisgICAg
dW5zaWduZWQgbGVuZ3RoU3RyaXAgPSB0ZXh0Lmxlbmd0aCgpOworICAgIHdoaWxlIChsZW5ndGhT
dHJpcCA+IDAgJiYgaXNUZXh0QnJlYWsodGV4dEl0ZXJhdG9yLCBsZW5ndGhTdHJpcCAtIDEpKQor
ICAgICAgICAtLWxlbmd0aFN0cmlwOworCisgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4g
cGFyYWdyYXBoQ2hlY2tpbmdSZXN1bHQ7CisgICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aFN0cmlw
KSB7CisgICAgICAgIGludDMyX3QgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAgICAgICBp
bnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgY2hlY2tTcGVsbGluZ09mU3Ry
aW5nKHNwZWxsRG9jdW1lbnRUYWcsIHRleHQuc3Vic3RyaW5nKG9mZnNldCwgbGVuZ3RoU3RyaXAg
LSBvZmZzZXQpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAg
ICAgIGlmICghbWlzc3BlbGxpbmdMZW5ndGgpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBUZXh0Q2hlY2tpbmdSZXN1bHQgbWlzc3BlbGxpbmdSZXN1bHQ7CisgICAgICAgIG1pc3NwZWxs
aW5nUmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CisgICAgICAgIG1pc3Nw
ZWxsaW5nUmVzdWx0LmxvY2F0aW9uID0gb2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKKyAg
ICAgICAgbWlzc3BlbGxpbmdSZXN1bHQubGVuZ3RoID0gbWlzc3BlbGxpbmdMZW5ndGg7CisgICAg
ICAgIHBhcmFncmFwaENoZWNraW5nUmVzdWx0LmFwcGVuZChtaXNzcGVsbGluZ1Jlc3VsdCk7Cisg
ICAgICAgIG9mZnNldCArPSBtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGg7
CisgICAgICAgIC8vIEdlbmVyYWxseSwgd2UgZW5kIHVwIGNoZWNraW5nIGF0IHRoZSB3b3JkIHNl
cGFyYXRvciwgbW92ZSB0byB0aGUgYWRqYWNlbnQgd29yZC4KKyAgICAgICAgb2Zmc2V0ID0gbmV4
dFdvcmRPZmZzZXQodGV4dC5zdWJzdHJpbmcoMCwgbGVuZ3RoU3RyaXApLCBvZmZzZXQpOworICAg
IH0KKyAgICByZXR1cm4gcGFyYWdyYXBoQ2hlY2tpbmdSZXN1bHQ7Cit9CisjZW5kaWYKKwordm9p
ZCBUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgbGFuZ3VhZ2VzKQoreworICAgIGVuY2hhbnRUZXh0Q2hlY2tlcigpLnVwZGF0ZVNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMobGFuZ3VhZ2VzKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6cmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+KQor
VmVjdG9yPFN0cmluZz4gVGV4dENoZWNrZXI6OmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMo
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGVuY2hhbnRUZXh0Q2hlY2tl
cigpLmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggMGM5ZWJjN2E1YjdmMmVmMmRkZjk2OWZlZmEwMzM1OWQ4OGQ1MDU4Ny4u
Y2MwODE2ZmRiMTkwZDg5MDgyZTc1ZWY5ZmIwNTc1ZTY3MDgwMGRiOCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsx
LDE1IEBACiAyMDE1LTA1LTA2ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNv
bT4KIAorICAgICAgICBbR1RLXSBBbGwgc3BlbGwgY2hlY2tpbmcgbGF5b3V0IHRlc3RzIGZhaWwK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDY0OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6IFVuc2tpcCBhbmQgcmVjbGFzc2lmeSBwcmV2aW91c2x5
IGZhaWxpbmcgdGVzdHMuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2VkaXRpbmcvc3BlbGxpbmcv
c3BlbGxjaGVjay1wYXN0ZS1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisKKzIwMTUtMDUtMDYgIE1h
cnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtGcmVlVHlw
ZV0gVmVydGljYWwgQ0pLIGdseXBocyBzaG91bGQgbm90IGJlIHJlbmRlcmVkIHdpdGggc3ludGhl
dGljIG9ibGlxdWUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NDYxMgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IGVjNGY1ZGQyNGVlNTAxZDI3NWFjNDk3ZmRmZjlmNjk3ZTZhMDc0ODMuLjY5NjkxYWE3MDhi
M2IwZTMxZmJkZmYyZDljN2QxYmNiOWIzYzNkZGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9UZXN0RXhwZWN0YXRpb25zCkBAIC02MjcsMTEgKzYyNyw2IEBAIEJ1ZyhHVEspIGVkaXRpbmcv
c3BlbGxpbmcvaW5saW5lLXNwZWxsaW5nLW1hcmtlcnMuaHRtbCBbIFNraXAgXQogQnVnKEdUSykg
ZWRpdGluZy9zcGVsbGluZy9pbmxpbmUtc3BlbGxpbmctbWFya2Vycy1oaWRwaS5odG1sIFsgU2tp
cCBdCiBCdWcoR1RLKSBlZGl0aW5nL3NwZWxsaW5nL21hcmtlcnMuaHRtbCBbIFNraXAgXQogCi0j
IE1pc3NpbmcgYXN5bmNocm9ub3VzIHNwZWxsY2hlY2tpbmcgaW1wbGVtZW50YXRpb24uCi1CdWco
R1RLKSBlZGl0aW5nL3NwZWxsaW5nL2Rlc2lnbi1tb2RlLXNwZWxsY2hlY2stb2ZmLmh0bWwgWyBT
a2lwIF0KLUJ1ZyhHVEspIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctaW5zZXJ0LWh0bWwuaHRt
bCBbIFNraXAgXQotQnVnKEdUSykgZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1oYXNzcGVsbGlu
Z21hcmtlci5odG1sIFsgU2tpcCBdCi0KICMgUmVxdWlyZXMgRU5BQkxFKE1FRElBX0NBUFRVUkUp
CiB3ZWJraXQub3JnL2IvODU5NTggZmFzdC9mb3Jtcy9maWxlL2ZpbGUtaW5wdXQtY2FwdHVyZS5o
dG1sIFsgRmFpbHVyZSBdCiAKQEAgLTEyODMsMTEgKzEyNzgsNiBAQCB3ZWJraXQub3JnL2IvMTIy
NTcxIGluc3BlY3Rvci1wcm90b2NvbC9wYWdlL2ZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbi5odG1s
IFsgVGltZQogd2Via2l0Lm9yZy9iLzEyMjU3MSBpbnNwZWN0b3ItcHJvdG9jb2wvcGFnZS9zZXRF
bXVsYXRlZE1lZGlhLmh0bWwgWyBUaW1lb3V0IFBhc3MgXQogd2Via2l0Lm9yZy9iLzEyMjU3MSBp
bnNwZWN0b3ItcHJvdG9jb2wvY3NzL2dldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMuaHRtbCBbIFRp
bWVvdXQgUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8xMzA0MTEgZWRpdGluZy9zcGVsbGluZy9zcGVs
bGNoZWNrLXBhc3RlLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi8xMzA0MTEgZWRpdGlu
Zy9zcGVsbGluZy9zcGVsbGluZy1jaGFuZ2VkLXRleHQuaHRtbCBbIFRpbWVvdXQgXQotd2Via2l0
Lm9yZy9iLzEzMDQxMSBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcGFzdGUtZGlzYWJsZWQu
aHRtbCBbIFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzEzMDQxMSBlZGl0aW5nL3NwZWxsaW5nL3Nw
ZWxsY2hlY2stcGFzdGUtY29udGludW91cy1kaXNhYmxlZC5odG1sIFsgVGltZW91dCBdCi0KIEJ1
ZyhHVEspIHBsdWdpbnMvcmVsb2FkcGx1Z2lucy1hbmQtcGFnZXMuaHRtbCBbIFRpbWVvdXQgXQog
CiBCdWcoR1RLKSBmYXN0L2Zvcm1zL3NlbGVjdC9tZW51bGlzdC1wb3B1cC1jcmFzaC5odG1sIFsg
VGltZW91dCBdCkBAIC0xNDc5LDI2ICsxNDY5LDYgQEAgd2Via2l0Lm9yZy9iLzkzOTgwIGh0dHAv
dGVzdHMvYXBwY2FjaGUvbG9hZC1mcm9tLWFwcGNhY2hlLWRlZmVyLXJlc3VtZS1jcmFzaC5odG0K
IHdlYmtpdC5vcmcvYi80MjE5NCBmYXN0L2V2ZW50cy81MDU2NjE5Lmh0bWwgWyBGYWlsdXJlIF0K
IHdlYmtpdC5vcmcvYi80MjE5NCBodHRwL3Rlc3RzL3NlY3VyaXR5L2RyYWctZHJvcC1zYW1lLXVu
aXF1ZS1vcmlnaW4uaHRtbCBbIEZhaWx1cmUgXQogCi0jIE1pc3NpbmcgVGV4dENoZWNrZXI6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKCkgaW1wbGVtZW50YXRpb24gZm9yIEd0ay4KLXdlYmtpdC5v
cmcvYi83MzAwMyBlZGl0aW5nL3NwZWxsaW5nL2RlbGV0ZS1pbnRvLW1pc3NwZWxsZWQtd29yZC5o
dG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvNzMwMDMgZWRpdGluZy9zcGVsbGluZy9lZGl0aW5n
LW11bHRpcGxlLXdvcmRzLXdpdGgtbWFya2Vycy5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2Iv
NzMwMDMgZWRpdGluZy9zcGVsbGluZy9lZGl0aW5nLXdvcmQtd2l0aC1tYXJrZXItMi5odG1sIFsg
U2tpcCBdCi13ZWJraXQub3JnL2IvNzMwMDMgZWRpdGluZy9zcGVsbGluZy9tb3ZlLWN1cnNvci1h
cm91bmQtbWlzc3BlbGxlZC13b3JkLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi83MzAwMyBl
ZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stYXN5bmMtbXV0YXRpb24uaHRtbCBbIFNraXAgXQot
d2Via2l0Lm9yZy9iLzczMDAzIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1hc3luYy1yZW1v
dmUtZnJhbWUuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzczMDAzIGVkaXRpbmcvc3BlbGxp
bmcvc3BlbGxjaGVjay1hc3luYy5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvNzMwMDMgZWRp
dGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcv
Yi83MzAwMyBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stc2VxdWVuY2VudW0uaHRtbCBbIFNr
aXAgXQotd2Via2l0Lm9yZy9iLzczMDAzIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctYmFja3dh
cmQuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzczMDAzIGVkaXRpbmcvc3BlbGxpbmcvc3Bl
bGxpbmctbWFya2VyLWRlc2NyaXB0aW9uLmh0bWwgWyBTa2lwIF0KLQotIyBTcGVsbGNoZWNrIHRl
c3RzIGRvbid0IHNlZW0gdG8gd29yay4KLUJ1ZyhHVEspIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxp
bmctYmFja3NwYWNlLWJldHdlZW4tbGluZXMuaHRtbCBbIFNraXAgXQotQnVnKEdUSykgZWRpdGlu
Zy9zcGVsbGluZy9zcGVsbGNoZWNrLWF0dHJpYnV0ZS5odG1sIFsgU2tpcCBdCi1CdWcoR1RLKSBl
ZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWF0dHJpYnV0ZS1hdC1jaGlsZC5odG1sIFsgU2tpcCBd
Ci1CdWcoR1RLKSBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWF0dHJpYnV0ZS1jaGFuZ2UuaHRt
bCBbIFNraXAgXQotQnVnKEdUSykgZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1saW5lYnJlYWsu
aHRtbCBbIFNraXAgXQotCiAjIENvbnRleHQgbWVudSBwcm9ibGVtcy4KIHdlYmtpdC5vcmcvYi8x
MjA0MDEgZmFzdC9ldmVudHMgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8xMjA0MDEgZWRpdGluZy9z
ZWxlY3Rpb24gWyBTa2lwIF0KQEAgLTE1ODEsOSArMTU1MSw2IEBAIEJ1ZyhHVEspIHBsdWdpbnMv
cmVzaXplLWZyb20tcGx1Z2luLmh0bWwgWyBGYWlsdXJlIF0KIEJ1ZyhHVEspIGVkaXRpbmcvc2Vs
ZWN0aW9uL2NvbnRleHQtbWVudS10ZXh0LXNlbGVjdGlvbi5odG1sIFsgRmFpbHVyZSBQYXNzIF0K
IEJ1ZyhHVEspIGVkaXRpbmcvc2VsZWN0aW9uL2NvbnRleHQtbWVudS10ZXh0LXNlbGVjdGlvbi1s
b29rdXAuaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiAKLSMgQW4gb25jb250ZXh0bWVudSBhdHRyaWJ1
dGUgaXMgbm90IGNhbGxlZC4KLUJ1ZyhHVEspIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1p
bnB1dC1zZWFyY2gtY3Jhc2guaHRtbCBbIEZhaWx1cmUgXQotCiBCdWcoR1RLKSBodHRwL3Rlc3Rz
L21pc2MvaWZyYW1lLWJlZm9yZXVubG9hZC1kaWFsb2ctbWF0Y2hpbmctYW5jZXN0b3Itc2VjdXJp
dHlvcmlnaW4uaHRtbCBbIEZhaWx1cmUgXQogCiBCdWcoR1RLKSBodHRwL3Rlc3RzL21pc2Mvd2ls
bC1zZW5kLXJlcXVlc3QtcmV0dXJucy1udWxsLW9uLXJlZGlyZWN0Lmh0bWwgWyBGYWlsdXJlIF0K
QEAgLTE3MTgsOSArMTY4NSw2IEBAIEJ1ZyhHVEspIGZhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVs
ZXZlbnQtcGFnaW5nLXktaW4tc2Nyb2xsaW5nLXBhZ2UuaHRtbCBbIEZhaWx1CiAjIE5lZWQgdG8g
YWRkIGZ1bmN0aW9uYWxpdHkgdG8gRHVtcFJlbmRlclRyZWUgdG8gaGFuZGxlIHNjcm9sbGJhciBw
b2xpY3kgY2hhbmdlcwogQnVnKEdUSykgZmFzdC9vdmVyZmxvdy9zY3JvbGxiYXItcmVzdG9yZWQt
YW5kLXRoZW4tbG9ja2VkLmh0bWwgWyBGYWlsdXJlIF0KIAotIyBEUlQgZG9lc24ndCBkaXNwYXRj
aCBhbiBldmVudCBmb3IgdGhlIHNlY29uZCBjYWxsIGV2ZW50U2VuZGVyLmNvbnRleHRDbGljaygp
Lgotd2Via2l0Lm9yZy9iLzM5MTAyIGVkaXRpbmcvc3BlbGxpbmcvY29udGV4dC1tZW51LXN1Z2dl
c3Rpb25zLmh0bWwgWyBGYWlsdXJlIF0KLQogIyBTb21lIGlucHV0IHR5cGU9cmFuZ2UgdGVzdHMg
ZmFpbCBiZWNhdXNlIG9mIHRoZSBzaXplCiAjIG9mIHRoZSBzbGlkZXIgdGh1bWIgaW4gR1RLKyB0
aGVtZXMuCiBCdWcoR1RLKSBmYXN0L2Zvcm1zL3JhbmdlL3NsaWRlci1tb3VzZS1ldmVudHMuaHRt
bCBbIEZhaWx1cmUgXQpAQCAtMTgwMCw4ICsxNzY0LDYgQEAgd2Via2l0Lm9yZy9iLzEwNTY5MyBo
dHRwL3Rlc3RzL211bHRpcGFydC9tdWx0aXBhcnQtd2FpdC1iZWZvcmUtYm91bmRhcnkuaHRtbCBb
IFMKICMgRG9lcyBub3QgcmVuZGVyIHRoZSByZWN0YW5nbGUgYXMgaXQgc2hvdWxkLCBldmVuIHRo
b3VnaCB0aGUgbXVsdGlwbGUgcGFydHMgc2VlbSB0byB3b3JrCiB3ZWJraXQub3JnL2IvNTQyNTEg
aHR0cC90ZXN0cy9tdWx0aXBhcnQvaW52YWxpZC1pbWFnZS1kYXRhLmh0bWwgWyBGYWlsdXJlIF0K
IAotd2Via2l0Lm9yZy9iLzcyMjQ4IGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctdW5pZmllZC1l
bXVsYXRpb24uaHRtbCBbIEZhaWx1cmUgXQotCiB3ZWJraXQub3JnL2IvNjIyMDQgc3ZnL2N1c3Rv
bS9yZWxhdGl2ZS1zaXplZC11c2Utd2l0aG91dC1hdHRyaWJ1dGVzLW9uLXN5bWJvbC54aHRtbCBb
IEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzYyMjA0IHN2Zy9jdXN0b20vdXNlLW9uLXN5bWJvbC1p
bnNpZGUtcGF0dGVybi5zdmcgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi82MjIwNCBzdmcvVzND
LVNWRy0xLjEvYW5pbWF0ZS1lbGVtLTA0LXQuc3ZnIFsgRmFpbHVyZSBdCkBAIC0xOTA5LDE0ICsx
ODcxLDYgQEAgd2Via2l0Lm9yZy9iLzEwMzkyNyBodHRwL3Rlc3RzL3czYy93ZWJwZXJmL3N1Ym1p
c3Npb24vR29vZ2xlL3Jlc291cmNlLXRpbWluZy9odG0KIHdlYmtpdC5vcmcvYi8xMDM5MjcgaHR0
cC90ZXN0cy93M2Mvd2VicGVyZi9zdWJtaXNzaW9uL0dvb2dsZS9yZXNvdXJjZS10aW1pbmcvaHRt
bC90ZXN0X3Jlc291cmNlX2luaXRpYXRvcl90eXBlcy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQu
b3JnL2IvMTAzOTI3IGh0dHAvdGVzdHMvdzNjL3dlYnBlcmYvc3VibWlzc2lvbi9Hb29nbGUvcmVz
b3VyY2UtdGltaW5nL2h0bWwvdGVzdF9yZXNvdXJjZV9yZWRpcmVjdHMuaHRtbCBbIEZhaWx1cmUg
XQogCi0jIFNwZWxsY2hlY2tlciBiZWhhdmlvciB0ZXN0cy4KLXdlYmtpdC5vcmcvYi8xMDgzNzAg
ZWRpdGluZy9zcGVsbGluZy9jb250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMtbXVsdGl3b3JkLXNlbGVj
dGlvbi5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMTA4MzcwIGVkaXRpbmcvc3BlbGxpbmcv
Y29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLXN1YndvcmQtc2VsZWN0aW9uLmh0bWwgWyBTa2lwIF0K
LXdlYmtpdC5vcmcvYi8xMDgzNzAgZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1kb3VibGUtY2xp
Y2tlZC13b3JkLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xMDgzNzAgZWRpdGluZy9zcGVs
bGluZy9zcGVsbGluZy1leGFjdGx5LXNlbGVjdGVkLXdvcmQuaHRtbCBbIFNraXAgXQotd2Via2l0
Lm9yZy9iLzEwODM3MCBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXdpdGgtcHVuY3R1YXRpb24t
c2VsZWN0aW9uLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xMDgzNzAgZWRpdGluZy9zcGVs
bGluZy9zcGVsbGluZy13aXRoLXdoaXRlc3BhY2Utc2VsZWN0aW9uLmh0bWwgWyBTa2lwIF0KLQog
d2Via2l0Lm9yZy9iLzEwNzExOCBmYXN0L2NhbnZhcy9jYW52YXMtcXVhZHJhdGljLXNhbWUtZW5k
cG9pbnQuaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTA4OTczIGZhc3QvY3NzL25l
Z2F0aXZlLXRleHQtaW5kZW50LWluLWlubGluZS1ibG9jay5odG1sIFsgSW1hZ2VPbmx5RmFpbHVy
ZSBdCkBAIC0yMzcxLDYgKzIzMjUsMTQgQEAgd2Via2l0Lm9yZy9iLzE0NDU3NSBodHRwL3Rlc3Rz
L2xvYWRpbmcvcHJvbW90ZS1pbWctcHJlbG9hZC1wcmlvcml0eS5odG1sIFsgRmFpbHUKIAogd2Vi
a2l0Lm9yZy9iLzE0NDY3MyBmYXN0L2Zvcm1zL2J1dHRvbi1saW5lLWhlaWdodC5odG1sIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCiAKK3dlYmtpdC5vcmcvYi8xNDQ2OTAgZWRpdGluZy9zcGVsbGluZy9j
b250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMtbXVsdGl3b3JkLXNlbGVjdGlvbi5odG1sIFsgVGltZW91
dCBdCit3ZWJraXQub3JnL2IvMTQ0NjkwIGVkaXRpbmcvc3BlbGxpbmcvY29udGV4dC1tZW51LXN1
Z2dlc3Rpb25zLXN1YndvcmQtc2VsZWN0aW9uLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcv
Yi8xNDQ2OTAgZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1leGFjdGx5LXNlbGVjdGVkLXdvcmQu
aHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzE0NDY5MCBlZGl0aW5nL3NwZWxsaW5nL3Nw
ZWxsaW5nLXdpdGgtcHVuY3R1YXRpb24tc2VsZWN0aW9uLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtp
dC5vcmcvYi8xNDQ2OTAgZWRpdGluZy9zcGVsbGluZy9jb250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzE0NDY5MCBlZGl0aW5nL3NwZWxsaW5nL3Nw
ZWxsaW5nLWRvdWJsZS1jbGlja2VkLXdvcmQuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzE0NDY5MCBlZGl0aW5nL3NwZWxsaW5nL2RlbGV0ZS1pbnRvLW1pc3NwZWxsZWQtd29yZC5odG1s
IFsgVGltZW91dCBQYXNzIF0KKwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMg
RW5kIG9mIFRlc3RzIGZhaWxpbmcKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZWRpdGluZy9zcGVsbGluZy9zcGVs
bGNoZWNrLXBhc3RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9lZGl0
aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcGFzdGUtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4Y2QwNDJhN2U1OGQ1YzVjMGNlY2M0NTQxNjE0ZjE3NTkyMmIwYWUz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcGFzdGUtZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotRm9yIEJ1ZyA0MDA5MjogU3Bl
bGwgY2hlY2tpbmcgZm9yIHBhc3RlZCB0ZXh0LgotCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
Ci0KLQotRkFJTCBJTlBVVCBzaG91bGQgaGF2ZSBhIG1hcmtlciBvbiAnenogYXBwbGUnCi1GQUlM
IElOUFVUIHNob3VsZCBoYXZlIGEgbWFya2VyIG9uICd6PGI+eiBhcHBsPC9iPmUnCi1GQUlMIElO
UFVUIHNob3VsZCBoYXZlIGEgbWFya2VyIG9uICd6eiB6eiB6eicKLUZBSUwgVEVYVEFSRUEgc2hv
dWxkIGhhdmUgYSBtYXJrZXIgb24gJ3p6IGFwcGxlJwotRkFJTCBURVhUQVJFQSBzaG91bGQgaGF2
ZSBhIG1hcmtlciBvbiAnejxiPnogYXBwbDwvYj5lJwotRkFJTCBURVhUQVJFQSBzaG91bGQgaGF2
ZSBhIG1hcmtlciBvbiAnenogenogenonCi1GQUlMIERJViBzaG91bGQgaGF2ZSBhIG1hcmtlciBv
biAnenogYXBwbGUnCi1GQUlMIERJViBzaG91bGQgaGF2ZSBhIG1hcmtlciBvbiAnejxiPnogYXBw
bDwvYj5lJwotRkFJTCBESVYgc2hvdWxkIGhhdmUgYSBtYXJrZXIgb24gJ3p6IHp6IHp6JwotUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0K
</data>

          </attachment>
      

    </bug>

</bugzilla>