<?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>90268</bug_id>
          
          <creation_ts>2012-06-29 04:08:40 -0700</creation_ts>
          <short_desc>[WK2][GTK] Implement a new spell checker API for WebKit2GTK+</short_desc>
          <delta_ts>2012-12-11 01:20:38 -0800</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90269</dependson>
          <blocked>93262</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Mario Sanchez Prada">mario</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>dsd</cc>
    
    <cc>g.czajkowski</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>philn</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>660349</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-06-29 04:08:40 -0700</bug_when>
    <thetext>As in the case of WK1, we need to implement a spell checker API in WebKit2GTK+ so apps needing this (e.g. epiphany) can migrate to WK2.

The idea would be to provide a new API client for the TextChecker, and provide at least the same functionality present in WK1.

After talking to Martin Robinson and Carlos García, it is not clear at this stage whether it would be interesting or not to expose the spell checker out of WK2GTK+, thus allowing apps using it directly and/or replacing it with another specific spell checker, so in the first iteration of the patch I will be proposing something like what we have in WK1, while we make up our minds on this.

Wrapping up, the current proposal would be something like this:

  * Implement new API client for the TextChecker:
    UIProcess/API/gtk/WebKitTextCheckerClient.*

  * Implement and expose a new interface for the spell checker:
    UIProcess/API/gtk/WebKitSpellChecker.*

  * Implement but DON&apos;T expose a specific implementation, based in enchant:
    UIProcess/API/gtk/WebKitSpellCheckerEnchant

Last, I&apos;ve just observed that in WK1 the TextCheckerClient is designed to be a global object, so I&apos;ll be associating the TextCheckerClient to the WebKitWebContext, instead of doing it to the WebView.

Also, because of this global nature, instead of creating WebKitSettings for wrapping &apos;enable-spell-checking&apos; and &apos;spell-checking-languages&apos; properties, which would link those properties to the WebView as in WK1 (and we don&apos;t want that, since spell checking is a global feature in WK2), I&apos;ll be handling those properties in WebKitWebContext, providing getters and setters for then (so the use can enable/disable it and change the list of languates).

Anyway, this is a first proposal and what I&apos;ll be basing my first patch in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660407</commentid>
    <comment_count>1</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-06-29 05:38:21 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt;[...] 
&gt; After talking to Martin Robinson and Carlos García, it is not clear at this 
&gt; stage whether it would be interesting or not to expose the spell checker out of 
&gt; WK2GTK+, thus allowing apps using it directly and/or replacing it with another 
&gt; specific spell checker, so in the first iteration of the patch I will be 
&gt; proposing something like what we have in WK1, while we make up our minds on
&gt; this.

I&apos;m adding Daniel Drake to CC, because he maybe could provide some insight on this specific question.

I wonder if it could be interesting for OLPC guys to be able to replace the default enchant-based spellchecker with their own one, as they do for the case of the file chooser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660408</commentid>
    <comment_count>2</comment_count>
      <attachid>150157</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-06-29 05:40:28 -0700</bug_when>
    <thetext>Created attachment 150157
Patch proposal (NO Unit tests yet)

Attaching a patch with the changes implementing the current proposal.

I&apos;m not setting the r? flag because the patch is still incomplete (no unit tests, documentation not reviewed...), but still I&apos;d like to share it here since I&apos;m taking some time off since tomorrow (for 2 weeks) and I think it would be nice not to keep it for myself during all that time.

So, feel free to provide feedback and I will update the patch accordingly after my holidays.

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660412</commentid>
    <comment_count>3</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-06-29 05:46:36 -0700</bug_when>
    <thetext>As usual, forgot to mark the dependency with other bug. In this case it&apos;s bug 90269, which will provide the new TextCheckerEnchant class in WebCore that the present patch here is using</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660468</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-06-29 07:40:57 -0700</bug_when>
    <thetext>Thanks for considering the OLPC use case. We historically haven&apos;t shipped spell checkers, so I think there are no special considerations here. As long as its easy to not ship the dictionaries (runtime-disabling the spell checker as a result), because our disk space is limited.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672203</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-18 03:41:11 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672205</commentid>
    <comment_count>6</comment_count>
      <attachid>150157</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-07-18 03:44:20 -0700</bug_when>
    <thetext>Comment on attachment 150157
Patch proposal (NO Unit tests yet)

Attachment 150157 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13273485</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674621</commentid>
    <comment_count>7</comment_count>
      <attachid>153519</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-07-20 09:10:31 -0700</bug_when>
    <thetext>Created attachment 153519
Patch proposal + Unit tests + Documentation

New patch adding the missing unit tests and documentation bits. I have also validated it with epiphany so it must be pretty close to what we actually want to have (I hope). Thus, asking for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674673</commentid>
    <comment_count>8</comment_count>
      <attachid>153519</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-20 10:14:20 -0700</bug_when>
    <thetext>Comment on attachment 153519
Patch proposal + Unit tests + Documentation

As I said earlier, I really don&apos;t think we need this API for WebKit2 since the context menu APIs are already rich enough to preserve spelling suggestions when making custom context menus. I think it&apos;s sufficient to enable a basic enchant spell checker and a way to change the language and turn it on and off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675039</commentid>
    <comment_count>9</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-07-20 16:04:27 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 153519 [details])
&gt; As I said earlier, I really don&apos;t think we need this API for WebKit2 since the 
&gt; context menu APIs are already rich enough to preserve spelling suggestions when 
&gt; making custom context menus. I think it&apos;s sufficient to enable a basic enchant 
&gt; spell checker and a way to change the language and turn it on and off.

Thanks for the feedback Martin.

So, if I&apos;m getting you right, you basically mean:

 * Remove the &quot;WebKitSpellChecker interface + WebKitSpellCheckerEnchant class&quot;
   combo and have just one simple WebKitSpellChecker class relying in WebCore&apos;s
   TextCheckerEnchant new class (see bug 90269).

 * Do not expose this WebKitSpellChecker class in the API. Just keep it hidden
   as an internal one in API/gtk, to be used from WebKitWebContext.cpp and
   WebKitTextCheckerClient.cpp.

 * In WebKitWebContext.h, expose only the following methods (actually the only new API):
   - webkit_web_context_get_spell_checking_enabled
   - webkit_web_context_set_spell_checking_enabled
   - webkit_web_context_get_spell_checking_languages
   - webkit_web_context_set_spell_checking_languages):

 * Move webkit_web_context_get_spell_checker() declaration to
   WebKitWebContextPrivate.h, since we still need it to get the spell checker
   from WebKitTextCheckerClient.cpp.

Am I right?

If so, I will work on it asap next week, unless someone else steps in and opposes to it (maybe someone would prefer to still expose  WebKitSpellChecker as an interface and allow embedders to define their own).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675078</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-20 16:46:22 -0700</bug_when>
    <thetext>I think it&apos;s a good first step. If we need the interface later, perhaps we can add it (precisely the way we did for WebKit1). Carlos, what are your thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676663</commentid>
    <comment_count>11</comment_count>
      <attachid>154019</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-07-24 04:48:54 -0700</bug_when>
    <thetext>Created attachment 154019
Patch proposal + Unit tests + Documentation

(In reply to comment #10)
&gt; I think it&apos;s a good first step. If we need the interface later, perhaps we can add it (precisely the way we did for WebKit1). Carlos, what are your thoughts?

I&apos;m attaching a new patch using this (quite simpler) approach. I basically added just two new files (WebKitTextChecker.[h|cpp]) providing a new internal C++ class that will serve both to provide an implementation for the TextCheckerClient (so calls from WebCore will work) and to have an object which WebKitWebContext can rely on to implement the newly added API.

If in the future we want to go back to the previous approach we can always do it, but now I see this other implementation I think it makes sense and probably good enough (bonus points for the patch being half big than the previous one!)

Asking for review now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676685</commentid>
    <comment_count>12</comment_count>
      <attachid>154019</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-07-24 05:25:10 -0700</bug_when>
    <thetext>Comment on attachment 154019
Patch proposal + Unit tests + Documentation

Attachment 154019 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13329367</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676877</commentid>
    <comment_count>13</comment_count>
      <attachid>154076</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-07-24 08:53:00 -0700</bug_when>
    <thetext>Created attachment 154076
Patch proposal + Unit tests + Documentation

There was an issue with the previous patch in WebKitTextChecker.cpp&apos;s guessesForWordCallback(), causing epiphany to crash when trying to create a contextual menu for a mispelled word.

This new patch fixes that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679137</commentid>
    <comment_count>14</comment_count>
      <attachid>154076</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-26 04:03:53 -0700</bug_when>
    <thetext>Comment on attachment 154076
Patch proposal + Unit tests + Documentation

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

Looks good, but I think this could use a few minor tweaks.

&gt; Source/WebKit2/ChangeLog:70
&gt; +2012-07-20  Mario Sanchez Prada  &lt;msanchez@igalia.com&gt;
&gt; +
&gt; +        [WK2][GTK] Implement a new spell checker API for WebKit2GTK+

Looks like you have a double ChangeLog here.

&gt; Source/WebKit2/GNUmakefile.am:146
&gt; +# Spell checker

I think you can omit this comment.

&gt; Source/WebKit2/GNUmakefile.am:150
&gt; +	$(ENCHANT_CFLAGS)

Do you also need to add ENCHANT_LIBS somewhere?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp:42
&gt; +static bool continuousSpellCheckingEnabledCallback(const void *clientInfo)

The asterisk is in the wrong place here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp:47
&gt; +static void setContinuousSpellCheckingEnabledCallback(bool enabled, const void *clientInfo)

Also here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp:52
&gt; +static void checkSpellingOfStringCallback(uint64_t tag, WKStringRef text, int32_t* misspellingLocation, int32_t* misspellingLength, const void *clientInfo)

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp:57
&gt; +static WKArrayRef guessesForWordCallback(uint64_t tag, WKStringRef word, const void *clientInfo)

Ditto. It seems like all the clientInfo arguments have this issue.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp:120
&gt; +    m_textChecker-&gt;checkSpellingOfString(string, misspellingLocation, misspellingLength);

Should you exit early if m_spellCheckingEnabled is false?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.h:30
&gt; +class WebKitTextChecker : public RefCounted&lt;WebKitTextChecker&gt; {

It seems that RefCounted is a bit overkill here, since the checker will never be shared. I think this should just be fast allocated and you could make the member in web context be an OwnPtr.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:436
&gt; +gboolean webkit_web_context_get_spell_checking_enabled(WebKitWebContext *context)

Asterisk issue here as well.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:454
&gt; +void webkit_web_context_set_spell_checking_enabled(WebKitWebContext *context, gboolean enabled)

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:467
&gt; + * Get the the list of spell checking languages associated to

associated to -&gt; associated with

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:470
&gt; + * in the format of every language in the list.

in the format of every language -&gt; on the format of the languages in the list

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:473
&gt; + * The returned string should be freed with g_free() when no longer
&gt; + * needed.

I think it makes sense to cache the language list and use transfer none here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680586</commentid>
    <comment_count>15</comment_count>
      <attachid>154937</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-07-27 07:03:25 -0700</bug_when>
    <thetext>Created attachment 154937
 Patch proposal + Unit tests + Documentation

Thanks for the review Martin. Attaching a new patch trying to address all the issues you pointed out.

See some comments below...

(In reply to comment #14)
&gt; (From update of attachment 154076 [details])
&gt; [...]
&gt; Looks like you have a double ChangeLog here.

Indeed. Fixed.

&gt; &gt; Source/WebKit2/GNUmakefile.am:146
&gt; &gt; +# Spell checker
&gt; 
&gt; I think you can omit this comment.

Fixed.

&gt; &gt; Source/WebKit2/GNUmakefile.am:150
&gt; &gt; +	$(ENCHANT_CFLAGS)
&gt; 
&gt; Do you also need to add ENCHANT_LIBS somewhere?

It was already in the LIBADD part, but I think it makes more sense if we keep it in the same place we are adding ENCHANT_CFLAGS to the compile flags, in case spellchecker support is enabled.

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp:42
&gt; &gt; +static bool continuousSpellCheckingEnabledCallback(const void *clientInfo)
&gt; 
&gt; The asterisk is in the wrong place here.
[...]
&gt; Ditto. It seems like all the clientInfo arguments have this issue.

All fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp:120
&gt; &gt; +    m_textChecker-&gt;checkSpellingOfString(string, misspellingLocation, misspellingLength);
&gt; 
&gt; Should you exit early if m_spellCheckingEnabled is false?

Not needed. This is a private class to implement TextCheckerClient&apos;s API in the UIProcess, and it will be used from the WebProcess only (not from outside WK). In this sense WebCore won&apos;t ever ask for checking the spelling of a string, or to guess words for a mispelled one, if a previous call to isContinousSpellCheckingEnabled() has returned false.

Exactly the same approach (not early returning) is how things are currently implemented in WK1, btw.

So, I would leave it as it is now.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.h:30
&gt; &gt; +class WebKitTextChecker : public RefCounted&lt;WebKitTextChecker&gt; {
&gt; 
&gt; It seems that RefCounted is a bit overkill here, since the checker will never be shared. I think this should just be fast allocated and you could make the member in web context be an OwnPtr.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:436
&gt; &gt; +gboolean webkit_web_context_get_spell_checking_enabled(WebKitWebContext *context)
&gt; 
&gt; Asterisk issue here as well.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:454
&gt; &gt; +void webkit_web_context_set_spell_checking_enabled(WebKitWebContext *context, gboolean enabled)
&gt; 
&gt; Ditto.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:467
&gt; &gt; + * Get the the list of spell checking languages associated to
&gt; 
&gt; associated to -&gt; associated with

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:470
&gt; &gt; + * in the format of every language in the list.
&gt; 
&gt; in the format of every language -&gt; on the format of the languages in the list

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:473
&gt; &gt; + * The returned string should be freed with g_free() when no longer
&gt; &gt; + * needed.
&gt; 
&gt; I think it makes sense to cache the language list and use transfer none here.

Fixed.

Btw, if you have some time to review patch for bug 90269 that would be awesome too, as it&apos;s blocking this one because of the enchant-based text checker, which we want in WebCore not to repeat code in WK1 and WK2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681392</commentid>
    <comment_count>16</comment_count>
      <attachid>154937</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-28 04:44:32 -0700</bug_when>
    <thetext>Comment on attachment 154937
 Patch proposal + Unit tests + Documentation

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.h:31
&gt; +class WebKitTextChecker {
&gt; +public:
&gt; +    virtual ~WebKitTextChecker();

Oops. Please make this fast allocated before landing. Look around for WTF_MAKE_FAST_ALLOCATED.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681439</commentid>
    <comment_count>17</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-07-28 10:12:48 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 154937 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154937&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.h:31
&gt; &gt; +class WebKitTextChecker {
&gt; &gt; +public:
&gt; &gt; +    virtual ~WebKitTextChecker();
&gt; 
&gt; Oops. Please make this fast allocated before landing. Look around for WTF_MAKE_FAST_ALLOCATED.

I don&apos;t see any usage of WTF_MAKE_FAST_ALLOCATED macro inside Source/WebKit2, but just in WebCore/, JavaScriptCore/, WTF/ and also WebKit/chromium.

Are you sure you want me to use this in this file? And if so, could you please elaborate a bit on the reasons?

Thanks for the review, btw</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681454</commentid>
    <comment_count>18</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-07-28 11:42:10 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; [...]
&gt; &gt; Oops. Please make this fast allocated before landing. Look around for WTF_MAKE_FAST_ALLOCATED.
&gt; 
&gt; I don&apos;t see any usage of WTF_MAKE_FAST_ALLOCATED macro inside Source/WebKit2, but just in WebCore/, JavaScriptCore/, WTF/ and also WebKit/chromium.
&gt; 
&gt; Are you sure you want me to use this in this file? And if so, could you please elaborate a bit on the reasons?

Ok. Martin explained to me why this is needed and so I&apos;ll add it when landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681455</commentid>
    <comment_count>19</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-07-28 11:45:30 -0700</bug_when>
    <thetext>Committed r123967: &lt;http://trac.webkit.org/changeset/123967&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682376</commentid>
    <comment_count>20</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-07-30 14:18:49 -0700</bug_when>
    <thetext>Reopening as per recent rollout (see bug 92656)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682947</commentid>
    <comment_count>21</comment_count>
      <attachid>155505</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-07-31 05:31:39 -0700</bug_when>
    <thetext>Created attachment 155505
Patch proposal + Unit tests + Documentation

After reviewing the issue with previous patch for bug 90269, I reviewed this one to make sure the same issue was not happening here, as it seemed to be the case.

Now uploading a new patch anyway updated against latest code in the repo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682954</commentid>
    <comment_count>22</comment_count>
      <attachid>154937</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-31 05:44:07 -0700</bug_when>
    <thetext>Comment on attachment 154937
 Patch proposal + Unit tests + Documentation

Cleared Martin Robinson&apos;s review+ from obsolete attachment 154937 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687834</commentid>
    <comment_count>23</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-08-06 01:00:24 -0700</bug_when>
    <thetext>Committed r124741: &lt;http://trac.webkit.org/changeset/124741&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687840</commentid>
    <comment_count>24</comment_count>
      <attachid>155505</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-08-06 01:03:33 -0700</bug_when>
    <thetext>Comment on attachment 155505
Patch proposal + Unit tests + Documentation

This patch was exactly the same one than before (reviewed by Martin) so I just re-commited it after making sure that the fix for bug 90269 was not failing anymore.

Hence, now clearing the r? flag...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687879</commentid>
    <comment_count>25</comment_count>
      <attachid>155505</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-06 02:07:09 -0700</bug_when>
    <thetext>Comment on attachment 155505
Patch proposal + Unit tests + Documentation

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

Sorry for reviewing this when it has already landed. Do you plan to extend the spellchecker API in the future? Because in that case maybe it makes sense to use a separate object (spellchecker manager, or something like that) instead of adding a lot of API related to the spellchecker to WebContext object (like we do for cookies, for example, where we have a cookie manager object)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp:147
&gt; +void WebKitTextChecker::setSpellCheckingLanguages(const String&amp; languages)
&gt; +{
&gt; +    if (m_spellCheckingLanguages == languages)
&gt; +        return;
&gt; +    m_spellCheckingLanguages = languages;

Here we could use a CString instead as received in the API in UTF8, so that we don&apos;t need to keep two copies.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp:150
&gt; +    m_textChecker-&gt;updateSpellCheckingLanguages(languages);

And here we could convert it to String to pass it the WebCore

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:80
&gt; +    GOwnPtr&lt;gchar&gt; spellCheckingLanguages;

Using a CString in the text checker we woulnd&apos;t need this.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:435
&gt; + * Get the current status of the spell checking feature.

Maybe Get whether spell checking feature is currently enabled? &quot;Status&quot; might be confusing, and webkit_web_context_set_spell_checking_enabled() docs says &quot;Enable or disable the spell checking feature&quot;.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:482
&gt; +    return context-&gt;priv-&gt;spellCheckingLanguages.get();

Here we could return the value cached in the spell checker. 

return context-&gt;priv-&gt;textChecker-&gt;getSpellCheckingLanguages().data();

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:508
&gt; +    context-&gt;priv-&gt;textChecker-&gt;setSpellCheckingLanguages(String(languages));

This should be String::fromUTF8, since all strings received in the public API must be UTF8

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:509
&gt; +    context-&gt;priv-&gt;spellCheckingLanguages.set(g_strdup(languages));

And this wouldn&apos;t be needed.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:236
&gt; +    GRefPtr&lt;WebKitWebContext&gt; webContext(webkit_web_context_get_default());

Don&apos;t need to keep a ref, it&apos;s a global singleton

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:240
&gt; +    const gchar* currentLanguage(webkit_web_context_get_spell_checking_languages(webContext.get()));

This looks weird to me, I would use const gchar* currentLanguage = webkit_web_context_get_spell_checking_languages(webContext.get()); instead. And maybe also rename currentLanguage to currentLanguages.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:245
&gt; +    webkit_web_context_set_spell_checking_languages(webContext.get(), 0);
&gt; +    currentLanguage = webkit_web_context_get_spell_checking_languages(webContext.get());
&gt; +    g_assert_cmpstr(currentLanguage, ==, 0);

This is confusing, the API docs says &quot;In case %NULL is passed, the default value as returned by gtk_get_default_language() will be used.&quot; Does gtk_get_default_language() return NULL? In any case I think it would be better to check g_assert_cmpstr(currentLanguage, ==, gtk_get_default_language()); to make sure what the API docs says is true.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:254
&gt; +    gboolean isSpellCheckingEnabled = webkit_web_context_get_spell_checking_enabled(webContext.get());
&gt; +    g_assert(!isSpellCheckingEnabled);

Thsi could be just g_assert(!webkit_web_context_get_spell_checking_enabled(webContext.get()));

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:257
&gt; +    isSpellCheckingEnabled = webkit_web_context_get_spell_checking_enabled(webContext.get());
&gt; +    g_assert(isSpellCheckingEnabled);

And here g_assert(webkit_web_context_get_spell_checking_enabled(webContext.get()));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688078</commentid>
    <comment_count>26</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-08-06 06:26:31 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 155505 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155505&amp;action=review
&gt; 
&gt; Sorry for reviewing this when it has already landed.

No problem. I filed a new bug and attached a patch there addressing these issues you pointed out here.

So, thanks for reviewing it anyway

&gt; Do you plan to extend the spellchecker API in the future?
&gt; Because in that case maybe it makes sense to use a separate object (spellchecker manager,
&gt; or something like that) instead of adding a lot of API related to the spellchecker to
&gt; WebContext object (like we do for cookies, for example, where we have a cookie manager object)

My initial idea was to do something similar to what we did for WK1 (having a WebKitSpellChecker object exposed in the API, which would give us additional flexibility), but at some point Martin and others convinced me that having a simple API to just enable/disable the feature and set a list of languages would be enough.

Which is a long way of saying that &quot;no, I don&apos;t plan to&quot; :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788160</commentid>
    <comment_count>27</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-11 01:20:38 -0800</bug_when>
    <thetext>*** Bug 68547 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150157</attachid>
            <date>2012-06-29 05:40:28 -0700</date>
            <delta_ts>2012-07-20 09:10:18 -0700</delta_ts>
            <desc>Patch proposal (NO Unit tests yet)</desc>
            <filename>0002-2012-06-29-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>51255</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA5ZmU1ZGYxOTk1MWE4MzhhNTVhZjhhNmMzMjkxZDVmNmE0MGE2NTU1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDI5IEp1biAyMDEyIDE0OjMyOjEyICswMjAwClN1YmplY3Q6IFtQQVRD
SCAyLzJdIDIwMTItMDYtMjkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgoKICAgICAgICBbV0syXVtHVEtdIEltcGxlbWVudCBhIG5ldyBzcGVsbCBjaGVja2VyIEFQ
SSBmb3IgV2ViS2l0MkdUSysKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTAyNjgKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAg
ICAgIEFkZGVkIG5ldyBzcGVsbCBjaGVja2luZyBBUEkgdG8gV0syLCBiYXNlZCBpbiBXSzEncyBp
bXBsZW1lbnRhdGlvbiwgcHJvdmlkaW5nCiAgICAgICAgYSBuZXcgaW50ZXJmYWNlIGFuZCBhIGlu
dGVybmFsIGltcGxlbWVudGF0aW9uIGJ5IGRlZmF1bHQgYmFzZWQgaW4gbGliZW5jaGFudC4KCiAg
ICAgICAgRXhwb3NlIG5ldyBpbnRlcmZhY2UgZm9yIHNwZWxsIGNoZWNrZXJzLCBXZWJLaXRTcGVs
bENoZWNrZXIuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2Vy
LmNwcDogQWRkZWQuCiAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2RlZmF1bHRfaW5pdCk6
CiAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2NoZWNrX3NwZWxsaW5nX29mX3N0cmluZyk6
CiAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9ndWVzc2VzX2Zvcl93b3JkKToKICAg
ICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJfdXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
cyk6CiAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9hdXRvY29ycmVjdF9zdWdnZXN0
aW9uc19mb3JfbWlzc3BlbGxlZF93b3JkKToKICAgICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJf
bGVhcm5fd29yZCk6CiAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2lnbm9yZV93b3JkKToK
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlci5oOiBBZGRlZC4K
ICAgICAgICAoX1dlYktpdFNwZWxsQ2hlY2tlcklmYWNlKToKICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaDoKCiAgICAgICAgUHJvdmlkZSBwcml2YXRlIGltcGxlbWVudGF0aW9u
IG9mIFdlYktpdFNwZWxsQ2hlY2tlciBiYXNlZCBpbiBsaWJlbmNoYW50LgoKICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQuY3BwOiBBZGRlZC4KICAg
ICAgICAoX1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlKToKICAgICAgICAod2Via2l0
X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9maW5hbGl6ZSk6CiAgICAgICAgKHdlYmtpdF9zcGVsbF9j
aGVja2VyX2VuY2hhbnRfY2xhc3NfaW5pdCk6CiAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2Vy
X2VuY2hhbnRfaW5pdCk6CiAgICAgICAgKGNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CiAgICAgICAg
KGdldEd1ZXNzZXNGb3JXb3JkKToKICAgICAgICAodXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cyk6CiAgICAgICAgKGdldEF1dG9jb3JyZWN0U3VnZ2VzdGlvbnNGb3JNaXNzcGVsbGVkV29yZCk6
CiAgICAgICAgKGxlYXJuV29yZCk6CiAgICAgICAgKGlnbm9yZVdvcmQpOgogICAgICAgICh3ZWJr
aXRfc3BlbGxfY2hlY2tlcl9lbmNoYW50X3NwZWxsX2NoZWNrZXJfaW50ZXJmYWNlX2luaXQpOgog
ICAgICAgICh3ZWJraXRTcGVsbENoZWNrZXJFbmNoYW50Q3JlYXRlKToKICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQuaDogQWRkZWQuCiAgICAgICAg
KF9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50KToKICAgICAgICAoX1dlYktpdFNwZWxsQ2hlY2tl
ckVuY2hhbnRDbGFzcyk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENo
ZWNrZXJFbmNoYW50UHJpdmF0ZS5oOiBBZGRlZC4KCiAgICAgICAgSW1wbGVtZW50IG5ldyBBUEkg
Y2xpZW50IGZvciBVSVByb2Nlc3MncyBUZXh0Q2hlY2tlci4KCiAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlckNsaWVudC5jcHA6IEFkZGVkLgogICAgICAgIChjb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgogICAgICAgIChzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpOgogICAgICAgIChjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgogICAgICAg
IChndWVzc2VzRm9yV29yZCk6CiAgICAgICAgKGxlYXJuV29yZCk6CiAgICAgICAgKGlnbm9yZVdv
cmQpOgogICAgICAgIChhdHRhY2hUZXh0Q2hlY2tlckNsaWVudFRvQ29udGV4dCk6CiAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlckNsaWVudC5oOiBBZGRlZC4KCiAg
ICAgICAgQXR0YWNoIHRoZSBuZXcgQVBJIGNsaWVudCBmb3IgVGV4dENoZWNrZXIgdG8gdGhlIGRl
ZmF1bHQgV2ViS2l0V2ViQ29udGV4dAogICAgICAgIHdoZW4gY3JlYXRpbmcgaXQsIGFuZCBpbnN0
YWxsIGEgZW5jaGFudC1iYXNlZCBzcGVsbCBjaGVja2VyIGdsb2JhbGx5LgoKICAgICAgICBBbHNv
LCBhZGRBUEkgdG8gV2ViS2l0V2ViQ29udGV4dCB0byBhbGxvdyBlbmFibGluZy9kaXNhYmxpbmcg
dGhlIHNwZWxsCiAgICAgICAgY2hlY2tpbmcgZmVhdHVyZSBnbG9iYWxseSwgYW5kIHVwZGF0ZSB0
aGUgbGlzdCBvZiBsYW5ndWFnZXMuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViQ29udGV4dC5jcHA6CiAgICAgICAgKF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSk6CiAgICAg
ICAgKGNyZWF0ZURlZmF1bHRXZWJDb250ZXh0KToKICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0
X3NldF9zcGVsbF9jaGVja2VyKToKICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVs
bF9jaGVja2VyKToKICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2lu
Z19lbmFibGVkKToKICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2lu
Z19lbmFibGVkKToKICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXMpOgogICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlcyk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0Lmg6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmg6CgogICAg
ICAgIFVwZGF0ZWQgbWFrZWZpbGVzLgoKICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgZmxh
Z3MgdG8gaGFuZGxlIHRoZSBTUEVMTENIRUNLIGZlYXR1cmUuCiAgICAgICAgKiBHTlVtYWtlZmls
ZS5saXN0LmFtOiBBZGRlZCBuZXcgZmlsZXMKCiAgICAgICAgVXBkYXRlIGRvY3VtZW50YXRpb24g
d2l0aCBuZXcgc2VjdGlvbnMgYW5kIHN5bWJvbHMuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6CgoyMDEyLTA2LTI5ICBNYXJpbyBTYW5jaGV6
IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgW1dLMl1bR1RLXSBJbXBsZW1l
bnQgYSBuZXcgc3BlbGwgY2hlY2tlciBBUEkgZm9yIFdlYktpdDJHVEsrCiAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMjY4CgogICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBJZ25vcmUgV2ViS2l0U3BlbGxDaGVja2VyRW5j
aGFudC4qIHByaXZhdGUgZmlsZXMgZm9yIGd0ay1kb2MuCgogICAgICAgICogZ3RrL2dlbmVyYXRl
LWd0a2RvYzoKICAgICAgICAoZ2V0X3dlYmtpdDJfb3B0aW9ucyk6Ci0tLQogU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDg0ICsrKysrKysrKysK
IFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAg
NyArCiBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8
ICAgMTIgKysKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUu
aCAgIHwgICAgMSArCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyLmNw
cCAgICAgICB8ICAxNjEgKysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlci5oIHwgICA3NSArKysrKysrKysKIC4uLi9BUEkv
Z3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQuY3BwICAgICAgICAgIHwgIDEyNSArKysrKysr
KysrKysrKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50
LmggIHwgICA1OCArKysrKysrCiAuLi4vQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50
UHJpdmF0ZS5oICAgICB8ICAgMzEgKysrKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRl
eHRDaGVja2VyQ2xpZW50LmNwcCAgfCAgIDk3ICsrKysrKysrKysrKwogLi4uL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFRleHRDaGVja2VyQ2xpZW50LmggICAgfCAgIDI4ICsrKysKIC4uLi9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIHwgIDEyNCArKysrKysr
KysrKysrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQu
aCAgIHwgICAyMSArKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9j
cy5zZ21sICAgIHwgICAgMSArCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LXNlY3Rpb25zLnR4dCB8ICAgMjcgKysrKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvd2Via2l0Mi5oICAgICAgICAgfCAgICAxICsKIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKwogVG9vbHMvZ3RrL2dlbmVyYXRlLWd0
a2RvYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIDE4IGZpbGVzIGNoYW5nZWQs
IDg2NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlci5oCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
U3BlbGxDaGVja2VyRW5jaGFudC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50LmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENo
ZWNrZXJFbmNoYW50UHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXJDbGllbnQuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNr
ZXJDbGllbnQuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjNDFiNDFkLi44MDY4NmU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsODcgQEAKKzIwMTItMDYtMjkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hl
ekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IGEgbmV3IHNwZWxs
IGNoZWNrZXIgQVBJIGZvciBXZWJLaXQyR1RLKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyNjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgc3BlbGwgY2hlY2tpbmcgQVBJIHRvIFdLMiwg
YmFzZWQgaW4gV0sxJ3MgaW1wbGVtZW50YXRpb24sIHByb3ZpZGluZworICAgICAgICBhIG5ldyBp
bnRlcmZhY2UgYW5kIGEgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gYnkgZGVmYXVsdCBiYXNlZCBp
biBsaWJlbmNoYW50LgorCisgICAgICAgIEV4cG9zZSBuZXcgaW50ZXJmYWNlIGZvciBzcGVsbCBj
aGVja2VycywgV2ViS2l0U3BlbGxDaGVja2VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0U3BlbGxDaGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfc3BlbGxf
Y2hlY2tlcl9kZWZhdWx0X2luaXQpOgorICAgICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJfY2hl
Y2tfc3BlbGxpbmdfb2Zfc3RyaW5nKToKKyAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2dl
dF9ndWVzc2VzX2Zvcl93b3JkKToKKyAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX3VwZGF0
ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpOgorICAgICAgICAod2Via2l0X3NwZWxsX2NoZWNr
ZXJfZ2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQpOgorICAg
ICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJfbGVhcm5fd29yZCk6CisgICAgICAgICh3ZWJraXRf
c3BlbGxfY2hlY2tlcl9pZ25vcmVfd29yZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0U3BlbGxDaGVja2VyLmg6IEFkZGVkLgorICAgICAgICAoX1dlYktpdFNwZWxsQ2hlY2tl
cklmYWNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6CisKKyAgICAg
ICAgUHJvdmlkZSBwcml2YXRlIGltcGxlbWVudGF0aW9uIG9mIFdlYktpdFNwZWxsQ2hlY2tlciBi
YXNlZCBpbiBsaWJlbmNoYW50LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
U3BlbGxDaGVja2VyRW5jaGFudC5jcHA6IEFkZGVkLgorICAgICAgICAoX1dlYktpdFNwZWxsQ2hl
Y2tlckVuY2hhbnRQcml2YXRlKToKKyAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hh
bnRfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9jbGFz
c19pbml0KToKKyAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfaW5pdCk6Cisg
ICAgICAgIChjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoZ2V0R3Vlc3Nlc0Zvcldv
cmQpOgorICAgICAgICAodXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChn
ZXRBdXRvY29ycmVjdFN1Z2dlc3Rpb25zRm9yTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAobGVh
cm5Xb3JkKToKKyAgICAgICAgKGlnbm9yZVdvcmQpOgorICAgICAgICAod2Via2l0X3NwZWxsX2No
ZWNrZXJfZW5jaGFudF9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9pbml0KToKKyAgICAgICAgKHdl
YmtpdFNwZWxsQ2hlY2tlckVuY2hhbnRDcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQuaDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0
U3BlbGxDaGVja2VyRW5jaGFudCk6CisgICAgICAgIChfV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFu
dENsYXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJF
bmNoYW50UHJpdmF0ZS5oOiBBZGRlZC4KKworICAgICAgICBJbXBsZW1lbnQgbmV3IEFQSSBjbGll
bnQgZm9yIFVJUHJvY2VzcydzIFRleHRDaGVja2VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0VGV4dENoZWNrZXJDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoY2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAg
ICAgKGd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKGxlYXJuV29yZCk6CisgICAgICAgIChpZ25v
cmVXb3JkKToKKyAgICAgICAgKGF0dGFjaFRleHRDaGVja2VyQ2xpZW50VG9Db250ZXh0KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlckNsaWVudC5oOiBBZGRl
ZC4KKworICAgICAgICBBdHRhY2ggdGhlIG5ldyBBUEkgY2xpZW50IGZvciBUZXh0Q2hlY2tlciB0
byB0aGUgZGVmYXVsdCBXZWJLaXRXZWJDb250ZXh0CisgICAgICAgIHdoZW4gY3JlYXRpbmcgaXQs
IGFuZCBpbnN0YWxsIGEgZW5jaGFudC1iYXNlZCBzcGVsbCBjaGVja2VyIGdsb2JhbGx5LgorCisg
ICAgICAgIEFsc28sIGFkZEFQSSB0byBXZWJLaXRXZWJDb250ZXh0IHRvIGFsbG93IGVuYWJsaW5n
L2Rpc2FibGluZyB0aGUgc3BlbGwKKyAgICAgICAgY2hlY2tpbmcgZmVhdHVyZSBnbG9iYWxseSwg
YW5kIHVwZGF0ZSB0aGUgbGlzdCBvZiBsYW5ndWFnZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKF9XZWJLaXRXZWJDb250ZXh0
UHJpdmF0ZSk6CisgICAgICAgIChjcmVhdGVEZWZhdWx0V2ViQ29udGV4dCk6CisgICAgICAgICh3
ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNrZXIpOgorICAgICAgICAod2Via2l0X3dl
Yl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2VyKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRl
eHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQpOgorICAgICAgICAod2Via2l0X3dlYl9jb250
ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpOgorICAgICAgICAod2Via2l0X3dlYl9j
b250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRQcml2YXRlLmg6CisKKyAgICAgICAgVXBkYXRlZCBtYWtlZmlsZXMuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIGZsYWdzIHRvIGhhbmRsZSB0aGUgU1BFTExDSEVDSyBm
ZWF0dXJlLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIG5ldyBmaWxlcwor
CisgICAgICAgIFVwZGF0ZSBkb2N1bWVudGF0aW9uIHdpdGggbmV3IHNlY3Rpb25zIGFuZCBzeW1i
b2xzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Mu
c2dtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlv
bnMudHh0OgorCiAyMDEyLTA2LTI3ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5j
b20+CiAKICAgICAgICAgW0d0a10gQWRkIHN1cHBvcnQgZm9yIHRoZSBHYW1lcGFkIEFQSQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9H
TlVtYWtlZmlsZS5hbQppbmRleCAxNWE2OWY5Li44ODUxMThiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5h
bQpAQCAtMTM5LDYgKzEzOSwxMyBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9S
X1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0NQUAogCS1ETU9aX1gx
MQogZW5kaWYKIAorIyBTcGVsbCBjaGVja2VyCitpZiBFTkFCTEVfU1BFTExDSEVDSworbGlid2Vi
a2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5P
Ul9WRVJTSU9OQF9sYV9DUFBGTEFHUyArPSBcCisJLURFTkFCTEVfU1BFTExDSEVDSz0xIFwKKwkk
KEVOQ0hBTlRfQ0ZMQUdTKQorZW5kaWYKKwogIyBQbHVnaW4gcHJvY2VzcwogaWYgRU5BQkxFX1BM
VUdJTl9QUk9DRVNTCiBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05A
X0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0NQUEZMQUdTICs9IFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9H
TlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDgzNmRhZDYuLmIxZWY4Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtMTExLDYgKzExMSw3IEBAIHdlYmtpdDJndGtfaF9hcGkgKz0g
XAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNp
c2lvbi5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNjcmlwdERpYWxv
Zy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmggXAor
CSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyLmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJUmVxdWVzdC5oIFwKIAkkKFdlYktp
dDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlc3BvbnNlLmggXAogCSQoV2ViS2l0Mikv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oIFwKQEAgLTY1OCw2ICs2
NTksMTAgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFNldHRpbmdzLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFNldHRpbmdzUHJpdmF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXIuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXIuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXJDbGllbnQuY3BwIFwKKwlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlckNsaWVudC5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlcXVlc3QuY3BwIFwKQEAgLTEwODcsNiAr
MTA5MiwxMyBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oCiAKK2lmIEVOQUJMRV9TUEVMTENIRUNLCit3ZWJraXQyX3NvdXJjZXMgKz0gXAorCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQuY3Bw
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJF
bmNoYW50LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxs
Q2hlY2tlckVuY2hhbnRQcml2YXRlLmgKK2VuZGlmICMgRU5EIEVOQUJMRV9TUEVMTENIRUNLCisK
IGlmIFVTRV9URVhUVVJFX01BUFBFUl9HTAogd2Via2l0Ml9zb3VyY2VzICs9IFwKICAgIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCmlu
ZGV4IDdmZDVkNzguLmFhOGE3MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxXZWJL
aXQyL1dLU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1NvdXBS
ZXF1ZXN0TWFuYWdlci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KKyNpbmNsdWRl
IDxXZWJLaXQyL1dLVGV4dENoZWNrZXIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4K
ICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMGFkOGIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENo
ZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRTcGVsbENoZWNr
ZXIuaCIKKworLyoqCisgKiBTRUNUSU9OOldlYktpdFNwZWxsQ2hlY2tlcgorICogQHNob3J0X2Rl
c2NyaXB0aW9uOiB0aGUgc3BlbGwgY2hlY2tpbmcgQVBJIGZvciBXZWJLaXQKKyAqCisgKiAjV2Vi
S2l0U3BlbGxDaGVja2VyIHByb3ZpZGVzIEFQSXMgZm9yIHRoZSBzcGVsbCBjaGVja2luZworICog
ZnVuY3Rpb25hbGl0eSB1c2VkIGludGVybmFsbHkgYnkgV2ViS2l0IHRvIHBlcmZvcm0gc3BlbGwg
Y2hlY2tpbmcKKyAqIGluIGVkaXRhYmxlIGFyZWFzLiBUaGlzIGNhbiBiZSB1c2VkLCBmb3IgZXhh
bXBsZSwgYnkgYnJvd3NlcnMgdG8KKyAqIGltcGxlbWVudCBjdXN0b20gc3BlbGwgY2hlY2tpbmcg
Y29udGV4dCBtZW51cyBvciBzb3BoaXN0aWNhdGVkCisgKiBhdXRvLWNvcnJlY3QgZmVhdHVyZXMu
CisgKi8KKwordHlwZWRlZiBXZWJLaXRTcGVsbENoZWNrZXJJZmFjZSBXZWJLaXRTcGVsbENoZWNr
ZXJJbnRlcmZhY2U7CitHX0RFRklORV9JTlRFUkZBQ0UoV2ViS2l0U3BlbGxDaGVja2VyLCB3ZWJr
aXRfc3BlbGxfY2hlY2tlciwgR19UWVBFX09CSkVDVCk7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9z
cGVsbF9jaGVja2VyX2RlZmF1bHRfaW5pdChXZWJLaXRTcGVsbENoZWNrZXJJZmFjZSopCit7Cit9
CisKKy8qKgorICogd2Via2l0X3NwZWxsX2NoZWNrZXJfY2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5n
OgorICogQGNoZWNrZXI6IGEgI1dlYktpdFNwZWxsQ2hlY2tlcgorICogQHN0cmluZzogdGhlIHN0
cmluZyB0byBjaGVjayBmb3IgbWlzc3BlbGxpbmdzCisgKiBAbWlzc3BlbGxpbmdfbG9jYXRpb246
IChvdXQpIChhbGxvdy1ub25lKSBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0byBzdG9yZSB0aGUg
bG9jYXRpb24gb2YgdGhlIGZpcnN0IG1pc3NwZWxsaW5nCisgKiBAbWlzc3BlbGxpbmdfbGVuZ3Ro
OiAob3V0KSAoYWxsb3ctbm9uZSkgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgdG8gc3RvcmUgdGhl
IGxlbmd0aCBvZiB0aGUgZmlyc3QgbWlzc3BlbGxpbmcKKyAqCisgKiBDaGVja3MgQHN0cmluZyBm
b3IgbWlzc3BlbGxpbmdzIHVzaW5nIEBjaGVja2VyLCBzdG9yaW5nIHRoZQorICogbG9jYXRpb24g
YW5kIGxlbmd0aCBvZiB0aGUgZmlyc3QgbWlzc3BlbGxpbmcgaW4KKyAqIEBtaXNzcGVsbGluZ19s
b2NhdGlvbiBhbmQgQG1pc3NwZWxsaW5nX2xlbmd0aCByZXNwZWN0aXZlbHkuCisgKiovCit2b2lk
IHdlYmtpdF9zcGVsbF9jaGVja2VyX2NoZWNrX3NwZWxsaW5nX29mX3N0cmluZyhXZWJLaXRTcGVs
bENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHN0cmluZywgaW50KiBtaXNzcGVsbGluZ19s
b2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ19sZW5ndGgpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfU1BFTExfQ0hFQ0tFUihjaGVja2VyKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bChzdHJpbmcpOworCisgICAgV2ViS2l0U3BlbGxDaGVja2VySWZhY2UqIGlmYWNlID0gV0VCS0lU
X1NQRUxMX0NIRUNLRVJfR0VUX0lGQUNFKGNoZWNrZXIpOworICAgIGlmIChpZmFjZS0+Y2hlY2tf
c3BlbGxpbmdfb2Zfc3RyaW5nKQorICAgICAgICBpZmFjZS0+Y2hlY2tfc3BlbGxpbmdfb2Zfc3Ry
aW5nKGNoZWNrZXIsIHN0cmluZywgbWlzc3BlbGxpbmdfbG9jYXRpb24sIG1pc3NwZWxsaW5nX2xl
bmd0aCk7Cit9CisKKy8qKgorICogd2Via2l0X3NwZWxsX2NoZWNrZXJfZ2V0X2d1ZXNzZXNfZm9y
X3dvcmQ6CisgKiBAY2hlY2tlcjogYSAjV2ViS2l0U3BlbGxDaGVja2VyCisgKiBAd29yZDogdGhl
IG1pc3NwZWxsZWQgd29yZAorICoKKyAqIFJldHVybnMgYSAlTlVMTC10ZXJtaW5hdGVkIGFycmF5
IG9mIGd1ZXNzZXMgZm9yIGNvcnJlY3Rpb25zIG9mIHRoZQorICogbWlzc3BlbGxlZCB3b3JkIEB3
b3JkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSBhIG5ld2x5IGFsbG9jYXRlZCAl
TlVMTC10ZXJtaW5hdGVkIGFycmF5CisgKiBvZiBzdWdnZXN0ZWQgY29ycmVjdGlvbnMgZm9yIGEg
bWlzc3BlbGxlZCB3b3JkIEB3b3JkLiBGcmVlIGl0IHdpdGgKKyAqICVnX3N0cmZyZWV2IHdoZW4g
ZG9uZSB3aXRoIGl0LgorICoqLworY2hhcioqIHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9ndWVz
c2VzX2Zvcl93b3JkKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29y
ZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU1BFTExfQ0hFQ0tFUihj
aGVja2VyKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwod29yZCwgMCk7CisKKyAgICBX
ZWJLaXRTcGVsbENoZWNrZXJJZmFjZSogaWZhY2UgPSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9HRVRf
SUZBQ0UoY2hlY2tlcik7CisgICAgaWYgKGlmYWNlLT5nZXRfZ3Vlc3Nlc19mb3Jfd29yZCkKKyAg
ICAgICAgcmV0dXJuIGlmYWNlLT5nZXRfZ3Vlc3Nlc19mb3Jfd29yZChjaGVja2VyLCB3b3JkKTsK
KworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIHdlYmtpdF9zcGVsbF9jaGVja2VyX3VwZGF0
ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXM6CisgKiBAY2hlY2tlcjogYSAjV2ViS2l0U3BlbGxD
aGVja2VyCisgKiBAbGFuZ3VhZ2VzOiAoYWxsb3ctbm9uZSkgYSBzdHJpbmcgb2YgbGFuZ3VhZ2Vz
IHRvIHVzZSBmb3IgQGNoZWNrZXIKKyAqCisgKiBTZXRzIEBsYW5ndWFnZXMgYXMgdGhlIGxpc3Qg
b2YgbGFuZ3VhZ2VzIHRvIHVzZSBieSBAY2hlY2tlci4gVGhlCisgKiBhY2NlcHRlZCBmb3JtYXQg
aXMgYSBsaXN0IG9mIGNvbW1hICgnLCcpIHNlcGFyYXRlZCBsYW5ndWFnZSBjb2RlcworICogb2Yg
dGhlIGZvcm0gJ2VuX1VTJywgaWUsIGxhbmd1YWdlX1ZBUklBTlQuCisgKiovCit2b2lkIHdlYmtp
dF9zcGVsbF9jaGVja2VyX3VwZGF0ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMoV2ViS2l0U3Bl
bGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiBsYW5ndWFnZXMpCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfU1BFTExfQ0hFQ0tFUihjaGVja2VyKSk7CisKKyAgICBXZWJL
aXRTcGVsbENoZWNrZXJJZmFjZSogaWZhY2UgPSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9HRVRfSUZB
Q0UoY2hlY2tlcik7CisgICAgaWYgKGlmYWNlLT51cGRhdGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzKQorICAgICAgICBpZmFjZS0+dXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyhjaGVj
a2VyLCBsYW5ndWFnZXMpOworfQorCisvKioKKyAqIHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9h
dXRvY29ycmVjdF9zdWdnZXN0aW9uc19mb3JfbWlzc3BlbGxlZF93b3JkOgorICogQGNoZWNrZXI6
IGEgI1dlYktpdFNwZWxsQ2hlY2tlcgorICogQHdvcmQ6IGEgbWlzc3BlbGxlZCB3b3JkCisgKgor
ICogUmV0dXJucyBhIHN1Z2dlc3Rpb24gZm9yIGEgd29yZCB0byB1c2UgaW4gYW4gImF1dG9jb3Jy
ZWN0IiBmZWF0dXJlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSB0aGUgc3VnZ2Vz
dGlvbiBmb3IgdGhlIGF1dG9jb3JyZWN0aW9uIG9mCisgKiBAd29yZAorICoqLworY2hhciogd2Vi
a2l0X3NwZWxsX2NoZWNrZXJfZ2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVs
bGVkX3dvcmQoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKGNoZWNr
ZXIpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh3b3JkLCAwKTsKKworICAgIFdlYktp
dFNwZWxsQ2hlY2tlcklmYWNlKiBpZmFjZSA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFD
RShjaGVja2VyKTsKKyAgICBpZiAoaWZhY2UtPmdldF9hdXRvY29ycmVjdF9zdWdnZXN0aW9uc19m
b3JfbWlzc3BlbGxlZF93b3JkKQorICAgICAgICByZXR1cm4gaWZhY2UtPmdldF9hdXRvY29ycmVj
dF9zdWdnZXN0aW9uc19mb3JfbWlzc3BlbGxlZF93b3JkKGNoZWNrZXIsIHdvcmQpOworCisgICAg
cmV0dXJuIDA7Cit9CisKKy8qKgorICogd2Via2l0X3NwZWxsX2NoZWNrZXJfbGVhcm5fd29yZDoK
KyAqIEBjaGVja2VyOiBhICNXZWJLaXRTcGVsbENoZWNrZXIKKyAqIEB3b3JkOiB0aGUgd29yZCB0
byBsZWFybgorICoKKyAqIEluc3RydWN0cyB0aGUgQGNoZWNrZXIgdG8gYWRkIEB3b3JkIHRvIGl0
cyBkaWN0aW9uYXJ5IGFzIGEgcHJvcGVybHkKKyAqIHNwZWxsZWQgd29yZC4gVGhlIHdvcmQgd2ls
bCBiZSBsZWFybmVkIHBlcm1hbmVudGx5IGluIHRoZSB1c2VyJ3MKKyAqIHBlcnNvbmFsIGRpY3Rp
b25hcnkuCisgKiovCit2b2lkIHdlYmtpdF9zcGVsbF9jaGVja2VyX2xlYXJuX3dvcmQoV2ViS2l0
U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVIoY2hlY2tlcikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwod29yZCk7CisKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJJZmFjZSogaWZhY2UgPSBX
RUJLSVRfU1BFTExfQ0hFQ0tFUl9HRVRfSUZBQ0UoY2hlY2tlcik7CisgICAgaWYgKGlmYWNlLT5s
ZWFybl93b3JkKQorICAgICAgICBpZmFjZS0+bGVhcm5fd29yZChjaGVja2VyLCB3b3JkKTsKK30K
KworLyoqCisgKiB3ZWJraXRfc3BlbGxfY2hlY2tlcl9pZ25vcmVfd29yZDoKKyAqIEBjaGVja2Vy
OiBhICNXZWJLaXRTcGVsbENoZWNrZXIKKyAqIEB3b3JkOiB0aGUgd29yZCB0byBpZ25vcmUKKyAq
CisgKiBJbnN0cnVjdHMgdGhlIEBjaGVja2VyIHRvIGlnbm9yZSBAd29yZCBhcyBhIG1pc3NwZWxs
aW5nIGZvciB0aGlzCisgKiBzZXNzaW9uLgorICoqLwordm9pZCB3ZWJraXRfc3BlbGxfY2hlY2tl
cl9pZ25vcmVfd29yZChXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdv
cmQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfU1BFTExfQ0hFQ0tFUihjaGVj
a2VyKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh3b3JkKTsKKworICAgIFdlYktpdFNwZWxsQ2hl
Y2tlcklmYWNlKiBpZmFjZSA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFDRShjaGVja2Vy
KTsKKyAgICBpZiAoaWZhY2UtPmlnbm9yZV93b3JkKQorICAgICAgICBpZmFjZS0+aWdub3JlX3dv
cmQoY2hlY2tlciwgd29yZCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjJkNWU0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXIuaApAQCAtMCwwICsxLDc1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJf
SF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25s
eSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYK
KworI2lmbmRlZiBXZWJLaXRTcGVsbENoZWNrZXJfaAorI2RlZmluZSBXZWJLaXRTcGVsbENoZWNr
ZXJfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NQRUxM
X0NIRUNLRVIgICAgICAgICAgICh3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfU1BFTExfQ0hFQ0tFUihvYmopICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVIsIFdlYktpdFNwZWxs
Q2hlY2tlcikpCisjZGVmaW5lIFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKG9iaikgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NQRUxMX0NIRUNL
RVIpKQorI2RlZmluZSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9HRVRfSUZBQ0Uob2JqKSAoR19UWVBF
X0lOU1RBTkNFX0dFVF9JTlRFUkZBQ0UgKChvYmopLCBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VS
LCBXZWJLaXRTcGVsbENoZWNrZXJJZmFjZSkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTcGVs
bENoZWNrZXIgV2ViS2l0U3BlbGxDaGVja2VyOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNwZWxs
Q2hlY2tlcklmYWNlIFdlYktpdFNwZWxsQ2hlY2tlcklmYWNlOworCitzdHJ1Y3QgX1dlYktpdFNw
ZWxsQ2hlY2tlcklmYWNlIHsKKyAgICBHVHlwZUludGVyZmFjZSBnX2lmYWNlOworCisgICAgdm9p
ZCAgICgqY2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5nKSAgICAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQsIGludCogbWlzc3Bl
bGxpbmdfbG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdfbGVuZ3RoKTsKKyAgICBjaGFyKiogKCpn
ZXRfZ3Vlc3Nlc19mb3Jfd29yZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFNw
ZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29yZCk7CisgICAgdm9pZCAgICgqdXBk
YXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcykgICAgICAgICAgICAgICAgIChXZWJLaXRTcGVs
bENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIGxhbmd1YWdlcyk7CisgICAgY2hhciogICgq
Z2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQpIChXZWJLaXRT
cGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQpOworICAgIHZvaWQgICAoKmxl
YXJuX3dvcmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0U3Bl
bGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkKTsKKyAgICB2b2lkICAgKCppZ25v
cmVfd29yZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFNwZWxs
Q2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29yZCk7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfZ2V0X3R5cGUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHZvaWQpIEdfR05VQ19DT05TVDsKKworV0VCS0lUX0FQSSB2b2lk
ICAgIHdlYmtpdF9zcGVsbF9jaGVja2VyX2NoZWNrX3NwZWxsaW5nX29mX3N0cmluZyAgICAgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXRTcGVsbENoZWNrZXIgKmNoZWNrZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqc3RyaW5nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgKm1pc3NwZWxsaW5n
X2xvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAg
ICAgICAgKm1pc3NwZWxsaW5nX2xlbmd0aCk7CisKK1dFQktJVF9BUEkgY2hhcioqICB3ZWJraXRf
c3BlbGxfY2hlY2tlcl9nZXRfZ3Vlc3Nlc19mb3Jfd29yZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0U3BlbGxDaGVja2VyICpjaGVja2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKndvcmQpOworCitXRUJLSVRfQVBJIHZvaWQg
ICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfdXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyAg
ICAgICAgICAgICAgICAgKFdlYktpdFNwZWxsQ2hlY2tlciAqY2hlY2tlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICpsYW5ndWFnZXMpOworCitX
RUJLSVRfQVBJIGNoYXIqICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfZ2V0X2F1dG9jb3JyZWN0X3N1
Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQgKFdlYktpdFNwZWxsQ2hlY2tlciAqY2hlY2tl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICp3
b3JkKTsKKworV0VCS0lUX0FQSSB2b2lkICAgIHdlYmtpdF9zcGVsbF9jaGVja2VyX2xlYXJuX3dv
cmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRTcGVsbENoZWNr
ZXIgKmNoZWNrZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
ICAgICAgICAqd29yZCk7CisKK1dFQktJVF9BUEkgdm9pZCAgICB3ZWJraXRfc3BlbGxfY2hlY2tl
cl9pZ25vcmVfd29yZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
U3BlbGxDaGVja2VyICpjaGVja2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICAgICAgICAgKndvcmQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tl
ckVuY2hhbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3Bl
bGxDaGVja2VyRW5jaGFudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGMyMzI0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQuY3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFNwZWxsQ2hl
Y2tlckVuY2hhbnQuaCIKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiV2Vi
S2l0U3BlbGxDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFBy
aXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2VyRW5jaGFudC5oPgorI2luY2x1
ZGUgPGVuY2hhbnQuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKKy8qKgorICogU0VDVElPTjpXZWJLaXRTcGVsbENoZWNrZXJFbmNo
YW50CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IHRoZSBkZWZhdWx0IHNwZWxsIGNoZWNraW5nIGlt
cGxlbWVudGF0aW9uIGZvciBXZWJLaXRHVEsrLgorICoKKyAqICNXZWJLaXRTcGVsbENoZWNrZXJF
bmNoYW50IGlzIHRoZSBkZWZhdWx0IHNwZWxsIGNoZWNraW5nIGltcGxlbWVudGF0aW9uIGZvcgor
ICogV2ViS2l0R1RLKy4gSXQgdXNlcyB0aGUgRW5jaGFudCBkaWN0aW9uYXJpZXMgaW5zdGFsbGVk
IG9uIHRoZSBzeXN0ZW0gdG8KKyAqIGNvcnJlY3Qgc3BlbGxpbmcuCisgKi8KKworc3RhdGljIHZv
aWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9p
bml0KFdlYktpdFNwZWxsQ2hlY2tlcklmYWNlKik7CitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShX
ZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50LCB3ZWJraXRfc3BlbGxfY2hlY2tlcl9lbmNoYW50LCBH
X1RZUEVfT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgR19JTVBMRU1FTlRfSU5URVJG
QUNFKFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9zcGVsbF9j
aGVja2VyX2ludGVyZmFjZV9pbml0KSkKKworc3RydWN0IF9XZWJLaXRTcGVsbENoZWNrZXJFbmNo
YW50UHJpdmF0ZSB7CisgICAgUmVmUHRyPFRleHRDaGVja2VyRW5jaGFudD4gdGV4dENoZWNrZXJF
bmNoYW50OworfTsKKworc3RhdGljIHZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFu
dFByaXZhdGUqIHByaXYgPSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UKG9iamVjdCktPnBy
aXY7CisgICAgcHJpdi0+fldlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlKCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfY2xhc3NfaW5pdChXZWJL
aXRTcGVsbENoZWNrZXJFbmNoYW50Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9maW5hbGl6ZTsKKyAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRTcGVsbENoZWNrZXJFbmNo
YW50UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc3BlbGxfY2hlY2tlcl9lbmNo
YW50X2luaXQoV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudCogY2hlY2tlcikKK3sKKyAgICBXZWJL
aXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURShjaGVja2VyLCBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQsIFdlYktp
dFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlKTsKKyAgICBjaGVja2VyLT5wcml2ID0gcHJpdjsK
KyAgICBuZXcgKHByaXYpIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlKCk7CisKKyAg
ICBwcml2LT50ZXh0Q2hlY2tlckVuY2hhbnQgPSBUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgp
OworfQorCitzdGF0aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoV2ViS2l0U3BlbGxDaGVj
a2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiBzdHJpbmcsIGludCogbWlzc3BlbGxpbmdMb2NhdGlv
biwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJFbmNo
YW50UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQoY2hlY2tlcikt
PnByaXY7CisgICAgcHJpdi0+dGV4dENoZWNrZXJFbmNoYW50LT5jaGVja1NwZWxsaW5nT2ZTdHJp
bmcoc3RyaW5nLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisK
K3N0YXRpYyBjaGFyKiogZ2V0R3Vlc3Nlc0ZvcldvcmQoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVj
a2VyLCBjb25zdCBjaGFyKiB3b3JkKQoreworICAgIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX1NQRUxMX0NIRUNLRVJfRU5DSEFOVChjaGVja2VyKS0+cHJp
djsKKyAgICByZXR1cm4gcHJpdi0+dGV4dENoZWNrZXJFbmNoYW50LT5nZXRHdWVzc2VzRm9yV29y
ZCh3b3JkKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhX
ZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIGxhbmd1YWdlcykKK3sKKyAg
ICBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TUEVMTF9D
SEVDS0VSX0VOQ0hBTlQoY2hlY2tlciktPnByaXY7CisgICAgcHJpdi0+dGV4dENoZWNrZXJFbmNo
YW50LT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cit9CisKK3N0YXRp
YyBjaGFyKiBnZXRBdXRvY29ycmVjdFN1Z2dlc3Rpb25zRm9yTWlzc3BlbGxlZFdvcmQoV2ViS2l0
U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkKQoreworICAgIHJldHVybiAw
OworfQorCitzdGF0aWMgdm9pZCBsZWFybldvcmQoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2Vy
LCBjb25zdCBjaGFyKiB3b3JkKQoreworICAgIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2
YXRlKiBwcml2ID0gV0VCS0lUX1NQRUxMX0NIRUNLRVJfRU5DSEFOVChjaGVja2VyKS0+cHJpdjsK
KyAgICBwcml2LT50ZXh0Q2hlY2tlckVuY2hhbnQtPmxlYXJuV29yZCh3b3JkKTsKK30KKworc3Rh
dGljIHZvaWQgaWdub3JlV29yZChXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNo
YXIqIHdvcmQpCit7CisgICAgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UKGNoZWNrZXIpLT5wcml2OworICAgIHByaXYt
PnRleHRDaGVja2VyRW5jaGFudC0+aWdub3JlV29yZCh3b3JkKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9pbml0
KFdlYktpdFNwZWxsQ2hlY2tlcklmYWNlKiBpbnRlcmZhY2UpCit7CisgICAgaW50ZXJmYWNlLT5j
aGVja19zcGVsbGluZ19vZl9zdHJpbmcgPSBjaGVja1NwZWxsaW5nT2ZTdHJpbmc7CisgICAgaW50
ZXJmYWNlLT5nZXRfZ3Vlc3Nlc19mb3Jfd29yZCA9IGdldEd1ZXNzZXNGb3JXb3JkOworICAgIGlu
dGVyZmFjZS0+dXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyA9IHVwZGF0ZVNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXM7CisgICAgaW50ZXJmYWNlLT5nZXRfYXV0b2NvcnJlY3Rfc3VnZ2VzdGlv
bnNfZm9yX21pc3NwZWxsZWRfd29yZCA9IGdldEF1dG9jb3JyZWN0U3VnZ2VzdGlvbnNGb3JNaXNz
cGVsbGVkV29yZDsKKyAgICBpbnRlcmZhY2UtPmxlYXJuX3dvcmQgPSBsZWFybldvcmQ7CisgICAg
aW50ZXJmYWNlLT5pZ25vcmVfd29yZCA9IGlnbm9yZVdvcmQ7Cit9CisKK1dlYktpdFNwZWxsQ2hl
Y2tlckVuY2hhbnQqIHdlYmtpdFNwZWxsQ2hlY2tlckVuY2hhbnRDcmVhdGUoKQoreworICAgIHJl
dHVybiBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQsIE5VTEwpKTsKK30KKworI2VuZGlmIC8qIEVOQUJMRShT
UEVMTENIRUNLKSAqLworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYzM3MGIzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQuaApAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
d2Via2l0c3BlbGxjaGVja2VyZW5jaGFudF9oCisjZGVmaW5lIHdlYmtpdHNwZWxsY2hlY2tlcmVu
Y2hhbnRfaAorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UICAgICAgICAgICAg
KHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X1NQRUxMX0NIRUNLRVJfRU5DSEFOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQsIFdlYktp
dFNwZWxsQ2hlY2tlckVuY2hhbnQpKQorI2RlZmluZSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNI
QU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX1NQRUxMX0NIRUNLRVJfRU5DSEFOVCwgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFu
dENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVJfRU5DSEFOVChvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9TUEVM
TF9DSEVDS0VSX0VOQ0hBTlQpKQorI2RlZmluZSBXRUJLSVRfSVNfU1BFTExfQ0hFQ0tFUl9FTkNI
QU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX1NQRUxMX0NIRUNLRVJfRU5DSEFOVCkpCisjZGVmaW5lIFdFQktJVF9TUEVMTF9DSEVD
S0VSX0VOQ0hBTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUl9FTkNIQU5ULCBXZWJLaXRTcGVsbENoZWNr
ZXJFbmNoYW50Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U3BlbGxDaGVja2VyRW5j
aGFudCBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNw
ZWxsQ2hlY2tlckVuY2hhbnRDbGFzcyBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50Q2xhc3M7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGUgV2ViS2l0U3Bl
bGxDaGVja2VyRW5jaGFudFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0U3BlbGxDaGVja2VyRW5j
aGFudCB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+
Ki8KKyAgICBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0
cnVjdCBfV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZSB3ZWJraXRfc3BlbGxfY2hlY2tl
cl9lbmNoYW50X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogRU5B
QkxFKFNQRUxMQ0hFQ0spICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQ
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1MjI5YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNw
ZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hh
bnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGVfaAor
CisjaW5jbHVkZSAiV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudC5oIgorCisjaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCisKK1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQqIHdlYmtpdFNwZWxsQ2hlY2tl
ckVuY2hhbnRDcmVhdGUoKTsKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorCisjZW5k
aWYgLy8gV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXJDbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXJDbGll
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMGJlZmUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0
Q2hlY2tlckNsaWVudC5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4
dENoZWNrZXJDbGllbnQuaCIKKworI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRTcGVsbENoZWNrZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyBib29sIGNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIHJldHVybiB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQoV0VCS0lUX1dFQl9DT05U
RVhUKGNsaWVudEluZm8pKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAg
ICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQoV0VCS0lUX1dF
Ql9DT05URVhUKGNsaWVudEluZm8pLCBlbmFibGVkKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tT
cGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCog
bWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pCit7CisgICAgV2ViS2l0U3BlbGxDaGVja2VyKiBzcGVsbENoZWNrZXIg
PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNrZXIoV0VCS0lUX1dFQl9DT05URVhU
KGNsaWVudEluZm8pKTsKKyAgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9jaGVja19zcGVsbGluZ19v
Zl9zdHJpbmcoc3BlbGxDaGVja2VyLCB0b0ltcGwodGV4dCktPnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworc3RhdGlj
IFdLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3Jk
LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIFdlYktpdFNwZWxsQ2hlY2tlciogc3Bl
bGxDaGVja2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2VyKFdFQktJVF9X
RUJfQ09OVEVYVChjbGllbnRJbmZvKSk7CisgICAgY2hhcioqIHN1Z2dlc3Rpb25zID0gd2Via2l0
X3NwZWxsX2NoZWNrZXJfZ2V0X2d1ZXNzZXNfZm9yX3dvcmQoc3BlbGxDaGVja2VyLCB0b0ltcGwo
d29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmICghc3VnZ2VzdGlvbnMpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IHdr
U3VnZ2VzdGlvbnMoQWRvcHRXSywgV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgZm9yIChp
bnQgaSA9IDA7IHN1Z2dlc3Rpb25zW2ldOyBpKyspIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHdrU3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzdWdnZXN0aW9uc1tpXSkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbSh3a1N1Z2dl
c3Rpb25zLmdldCgpLCB3a1N1Z2dlc3Rpb24uZ2V0KCkpOworICAgIH0KKyAgICBnX3N0cmZyZWV2
KHN1Z2dlc3Rpb25zKTsKKworICAgIHJldHVybiB3a1N1Z2dlc3Rpb25zLmdldCgpOworfQorCitz
dGF0aWMgdm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25z
dCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIFdlYktpdFNwZWxsQ2hlY2tlciogc3BlbGxDaGVj
a2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2VyKFdFQktJVF9XRUJfQ09O
VEVYVChjbGllbnRJbmZvKSk7CisgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfbGVhcm5fd29yZChz
cGVsbENoZWNrZXIsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisK
K3N0YXRpYyB2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBj
b25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIFdlYktpdFNwZWxsQ2hlY2tlciogc3BlbGxD
aGVja2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2VyKFdFQktJVF9XRUJf
Q09OVEVYVChjbGllbnRJbmZvKSk7CisgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfaWdub3JlX3dv
cmQoc3BlbGxDaGVja2VyLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit2b2lkIGF0dGFjaFRleHRDaGVja2VyQ2xpZW50VG9Db250ZXh0KFdlYktpdFdlYkNvbnRl
eHQqIHdlYkNvbnRleHQpCit7CisgICAgV0tUZXh0Q2hlY2tlckNsaWVudCB3a1RleHRDaGVja2Vy
Q2xpZW50ID0geworICAgICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAor
ICAgICAgICB3ZWJDb250ZXh0LCAvLyBjbGllbnRJbmZvCisgICAgICAgIDAsIC8vIGNvbnRpbnVv
dXNTcGVsbENoZWNraW5nQWxsb3dlZCAgICAgRURJVE9SIENMSUVOVCAtLT4gdW51c2VkIChNYWMg
QVBJIG9ubHkpCisgICAgICAgIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCwgLy8gICAg
ICAgRURJVE9SIENMSUVOVCAtLT4gY2hlY2sgc2V0dGluZworICAgICAgICBzZXRDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQsIC8vICAgIEVESVRPUiBDTElFTlQgLS0+IHRvZ2dsZSBzZXR0
aW5nCisgICAgICAgIDAsIC8vIGdyYW1tYXJDaGVja2luZ0VuYWJsZWQgICAgICAgICAgICAgRURJ
VE9SIENMSUVOVCAtLT4gbm90IGltcGxlbWVudGVkCisgICAgICAgIDAsIC8vIHNldEdyYW1tYXJD
aGVja2luZ0VuYWJsZWQgICAgICAgICAgRURJVE9SIENMSUVOVCAtLT4gbm90IGltcGxlbWVudGVk
CisgICAgICAgIDAsIC8vIHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcgICAgICAgICAgICAgRURJVE9S
IENMSUVOVCAtLT4gbm90IGltcGxlbWVudGVkCisgICAgICAgIDAsIC8vIGNsb3NlU3BlbGxEb2N1
bWVudFdpdGhUYWcgICAgICAgICAgTkVXIC0tIGNsb3NlcyB1bmlxdWVTcGVsbERvY3VtZW50VGFn
KCkgLS0+IG5vdCBpbXBsZW1lbnRlZAorICAgICAgICBjaGVja1NwZWxsaW5nT2ZTdHJpbmcsIC8v
ICAgICAgICAgICAgICAgIFRFWFQgQ0hFQ0tFUiBDTElFTlQKKyAgICAgICAgMCwgLy8gY2hlY2tH
cmFtbWFyT2ZTdHJpbmcgICAgICAgICAgICAgICBURVhUIENIRUNLRVIgQ0xJRU5UIC0tPiBub3Qg
aW1wbGVtZW50ZWQKKyAgICAgICAgMCwgLy8gc3BlbGxpbmdVSUlzU2hvd2luZyAgICAgICAgICAg
ICAgICBFRElUT1IgQ0xJRU5UIC0tPiBub3QgaW1wbGVtZW50ZWQKKyAgICAgICAgMCwgLy8gdG9n
Z2xlU3BlbGxpbmdVSUlzU2hvd2luZyAgICAgICAgICBFRElUT1IgQ0xJRU5UIChzaG93U3BlbGxp
bmdVSSkgLS0+IG5vdCBpbXBsZW1lbnRlZAorICAgICAgICAwLCAvLyB1cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkIEVESVRPUiBDTElFTlQgLS0+IG5vdCBpbXBsZW1lbnRlZAorICAg
ICAgICAwLCAvLyB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcgIEVESVRPUiBDTElF
TlQtLT4gbm90IGltcGxlbWVudGVkCisgICAgICAgIGd1ZXNzZXNGb3JXb3JkLCAvLyAgICAgICAg
ICAgICAgICAgICAgICAgVEVYVCBDSEVDS0VSIENMSUVOVAorICAgICAgICBsZWFybldvcmQsIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFWFQgQ0hFQ0tFUiBDTElFTlQKKyAgICAgICAg
aWdub3JlV29yZCwgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBURVhUIENIRUNLRVIgQ0xJ
RU5UCisgICAgfTsKKyAgICBXS1RleHRDaGVja2VyU2V0Q2xpZW50KCZ3a1RleHRDaGVja2VyQ2xp
ZW50KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFRleHRDaGVja2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRUZXh0Q2hlY2tlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjFlZjFjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlckNsaWVudC5oCkBAIC0wLDAgKzEsMjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRUZXh0Q2hl
Y2tlckNsaWVudF9oCisjZGVmaW5lIFdlYktpdFRleHRDaGVja2VyQ2xpZW50X2gKKworI2luY2x1
ZGUgIldlYktpdFdlYkNvbnRleHQuaCIKKwordm9pZCBhdHRhY2hUZXh0Q2hlY2tlckNsaWVudFRv
Q29udGV4dChXZWJLaXRXZWJDb250ZXh0Kik7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDM3
MmY0NjYuLjI3YWZlN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAi
V2ViS2l0UGx1Z2luUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFNwZWxs
Q2hlY2tlckVuY2hhbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXJDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lz
dGVtLmg+CkBAIC03Miw2ICs3NCw5IEBAIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUg
ewogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKICAgICBSZWZQdHI8V2ViS2l0R2VvbG9jYXRpb25Q
cm92aWRlcj4gZ2VvbG9jYXRpb25Qcm92aWRlcjsKICNlbmRpZgorICAgIEdSZWZQdHI8V2ViS2l0
U3BlbGxDaGVja2VyPiBzcGVsbENoZWNrZXI7CisgICAgQ1N0cmluZyBzcGVsbENoZWNraW5nTGFu
Z3VhZ2VzOworICAgIGJvb2wgc3BlbGxDaGVja2luZ0VuYWJsZWQ7CiB9OwogCiBzdGF0aWMgZ3Vp
bnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC0xMjMsMTAgKzEyOCwyMCBAQCBz
dGF0aWMgZ3BvaW50ZXIgY3JlYXRlRGVmYXVsdFdlYkNvbnRleHQoZ3BvaW50ZXIpCiAgICAgV0tD
b250ZXh0U2V0Q2FjaGVNb2RlbCh3ZWJDb250ZXh0LT5wcml2LT5jb250ZXh0LmdldCgpLCBrV0tD
YWNoZU1vZGVsUHJpbWFyeVdlYkJyb3dzZXIpOwogICAgIGF0dGFjaERvd25sb2FkQ2xpZW50VG9D
b250ZXh0KHdlYkNvbnRleHQuZ2V0KCkpOwogICAgIGF0dGFjaFJlcXVlc3RNYW5hZ2VyQ2xpZW50
VG9Db250ZXh0KHdlYkNvbnRleHQuZ2V0KCkpOworCiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQog
ICAgIFdLR2VvbG9jYXRpb25NYW5hZ2VyUmVmIHdrR2VvbG9jYXRpb25NYW5hZ2VyID0gV0tDb250
ZXh0R2V0R2VvbG9jYXRpb25NYW5hZ2VyKHdlYkNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCkp
OwogICAgIHdlYkNvbnRleHQtPnByaXYtPmdlb2xvY2F0aW9uUHJvdmlkZXIgPSBXZWJLaXRHZW9s
b2NhdGlvblByb3ZpZGVyOjpjcmVhdGUod2tHZW9sb2NhdGlvbk1hbmFnZXIpOwogI2VuZGlmCisK
KyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB3ZWJDb250ZXh0LT5wcml2LT5zcGVsbENoZWNr
ZXIgPSBhZG9wdEdSZWYoV0VCS0lUX1NQRUxMX0NIRUNLRVIod2Via2l0U3BlbGxDaGVja2VyRW5j
aGFudENyZWF0ZSgpKSk7CisgICAgYXR0YWNoVGV4dENoZWNrZXJDbGllbnRUb0NvbnRleHQod2Vi
Q29udGV4dC5nZXQoKSk7CisjZW5kaWYKKworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
cGVsbENoZWNraW5nTGFuZ3VhZ2VzUmVmID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhwYW5nb19sYW5ndWFnZV90b19zdHJpbmcoZ3RrX2dldF9kZWZhdWx0X2xhbmd1YWdl
KCkpKSk7CisgICAgd2ViQ29udGV4dC0+cHJpdi0+c3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IHRv
SW1wbChzcGVsbENoZWNraW5nTGFuZ3VhZ2VzUmVmLmdldCgpKS0+c3RyaW5nKCkudXRmOCgpOwor
CiAgICAgcmV0dXJuIHdlYkNvbnRleHQuZ2V0KCk7CiB9CiAKQEAgLTQwNCw2ICs0MTksMTE1IEBA
IHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUoV2ViS2l0V2ViQ29u
dGV4dCogY29udGV4dCwgY29uc3QgY2hhCiAgICAgV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWdpc3Rl
clVSSVNjaGVtZShjb250ZXh0LT5wcml2LT5yZXF1ZXN0TWFuYWdlci5nZXQoKSwgd2tTY2hlbWUu
Z2V0KCkpOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tl
cjoKKyAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CisgKiBAc3BlbGxfY2hlY2tlcjog
YSAjV2ViS2l0U3BlbGxDaGVja2VyCisgKgorICogU2V0IHRoZSAjV2ViS2l0U3BlbGxDaGVja2Vy
IG9mIEBjb250ZXh0IHRvIEBzcGVsbF9jaGVja2VyLgorICovCit2b2lkIHdlYmtpdF93ZWJfY29u
dGV4dF9zZXRfc3BlbGxfY2hlY2tlcihXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXRT
cGVsbENoZWNrZXIqIHNwZWxsQ2hlY2tlcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfU1BFTExfQ0hFQ0tFUihzcGVsbENoZWNrZXIpKTsKKworICAgIFdlYktpdFdlYkNvbnRleHRQ
cml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAgICBpZiAoc3BlbGxDaGVja2VyID09IHBy
aXYtPnNwZWxsQ2hlY2tlcikKKyAgICAgICAgcmV0dXJuOworICAgIHByaXYtPnNwZWxsQ2hlY2tl
ciA9IHNwZWxsQ2hlY2tlcjsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Nw
ZWxsX2NoZWNrZXI6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICoKKyAqIEdl
dCB0aGUgI1dlYktpdFNwZWxsQ2hlY2tlciBvZiBAY29udGV4dC4KKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0U3BlbGxDaGVja2VyIG9mIEBjb250ZXh0LgorICov
CitXZWJLaXRTcGVsbENoZWNrZXIqIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tl
cihXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgMCk7CisgICAgcmV0dXJuIGNvbnRleHQt
PnByaXYtPnNwZWxsQ2hlY2tlci5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQ6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2Vi
Q29udGV4dAorICoKKyAqIEdldCB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHNwZWxsIGNoZWNr
aW5nIGZlYXR1cmUuCisgKgorICogUmV0dXJuczogJVRSVUUgSWYgc3BlbGwgY2hlY2tpbmcgaXMg
ZW5hYmxlZCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbiB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQoV2ViS2l0V2ViQ29udGV4dCAqY29udGV4
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29u
dGV4dCksIEZBTFNFKTsKKworICAgIHJldHVybiBjb250ZXh0LT5wcml2LT5zcGVsbENoZWNraW5n
RW5hYmxlZDsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWQ6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICogQGVuYWJs
ZWQ6IFZhbHVlIHRvIGJlIHNldAorICoKKyAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBzcGVsbCBj
aGVja2luZyBmZWF0dXJlLgorICovCit2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0LCBnYm9vbGVhbiBlbmFi
bGVkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRl
eHQpKTsKKworICAgIGlmIChjb250ZXh0LT5wcml2LT5zcGVsbENoZWNraW5nRW5hYmxlZCA9PSBl
bmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LT5wcml2LT5zcGVsbENoZWNr
aW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKK30KKworLyoqCisgKiB3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlczoKKyAqIEBjb250ZXh0OiBh
ICNXZWJLaXRXZWJDb250ZXh0CisgKgorICogR2V0cyB0aGUgdGhlIGxpc3Qgb2Ygc3BlbGwgY2hl
Y2tpbmcgbGFuZ3VhZ2VzLgorICoKKyAqIFJldHVybnM6IEEgY29tbWEgc2VwYXJhdGVkIGxpc3Qg
b2YgbGFuZ3VhZ2VzIGluIHRoZSBmb3JtIGxhbmdfQ09VTlRSWS4KKyAqLworY29uc3QgZ2NoYXIq
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9DT05URVhUKGNvbnRleHQpLCAwKTsKKworICAgIHJldHVybiBjb250ZXh0LT5wcml2LT5z
cGVsbENoZWNraW5nTGFuZ3VhZ2VzLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlczoKKyAqIEBjb250ZXh0OiBhICNXZWJL
aXRXZWJDb250ZXh0CisgKiBAc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzOiBuZXcgbGlzdCBvZiBz
cGVsbCBjaGVja2luZyBsYW5ndWFnZXMsIHNlcGFyYXRlZCBieSBjb21tYXMKKyAqCisgKiBTZXQg
dGhlIGxpc3Qgb2Ygc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIHRvIGJlIHVzZWQgZm9yIHNwZWxs
CisgKiBjaGVja2luZywgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KKyAqCisgKiBUaGUgbG9jYWxlIHN0
cmluZyB0eXBpY2FsbHkgaXMgaW4gdGhlIGZvcm0gbGFuZ19DT1VOVFJZLCB3aGVyZSBsYW5nCisg
KiBpcyBhbiBJU08tNjM5IGxhbmd1YWdlIGNvZGUsIGFuZCBDT1VOVFJZIGlzIGFuIElTTy0zMTY2
IGNvdW50cnkgY29kZS4KKyAqIEZvciBpbnN0YW5jZSwgc3ZfRkkgZm9yIFN3ZWRpc2ggYXMgd3Jp
dHRlbiBpbiBGaW5sYW5kIG9yIHB0X0JSCisgKiBmb3IgUG9ydHVndWVzZSBhcyB3cml0dGVuIGlu
IEJyYXppbC4KKyAqCisgKiBEZWZhdWx0IHZhbHVlIGlzIHRoZSBvbmUgcmV0dXJuZWQgYnkgZ3Rr
X2dldF9kZWZhdWx0X2xhbmd1YWdlKCkuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3Nl
dF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29u
c3QgZ2NoYXIqIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7CisKKyAgICBXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSog
cHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgaWYgKCFnX3N0cmNtcDAocHJpdi0+c3BlbGxDaGVj
a2luZ0xhbmd1YWdlcy5kYXRhKCksIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3BlbGxDaGVja2luZ0xhbmd1
YWdlc1JlZiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3BlbGxDaGVj
a2luZ0xhbmd1YWdlcykpOworICAgIHByaXYtPnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMgPSB0b0lt
cGwoc3BlbGxDaGVja2luZ0xhbmd1YWdlc1JlZi5nZXQoKSktPnN0cmluZygpLnV0ZjgoKTsKKyAg
ICB3ZWJraXRfc3BlbGxfY2hlY2tlcl91cGRhdGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKGNv
bnRleHQtPnByaXYtPnNwZWxsQ2hlY2tlci5nZXQoKSwgcHJpdi0+c3BlbGxDaGVja2luZ0xhbmd1
YWdlcy5kYXRhKCkpOworfQorCiBXZWJLaXREb3dubG9hZCogd2Via2l0V2ViQ29udGV4dEdldE9y
Q3JlYXRlRG93bmxvYWQoV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkKQogewogICAgIEdSZWZQdHI8
V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gZG93bmxvYWRzTWFwKCkuZ2V0KHdrRG93bmxvYWQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Q29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29u
dGV4dC5oCmluZGV4IDEzMjUwMTcuLjQ2MTM0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvb2tpZU1hbmFnZXIuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERvd25sb2FkLmg+
CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTcGVsbENoZWNrZXIuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaD4KIAogR19CRUdJTl9ERUNMUwpAQCAtMTI5LDYg
KzEzMCwyNiBAQCB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSAgICAgICAg
ICAgICAgKFdlYktpdFdlYkNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICAgKnNjaGVt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAg
ICAgICAgICAgICAgdXNlcl9kYXRhKTsKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9jb250
ZXh0X3NldF9zcGVsbF9jaGVja2VyICAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAg
ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0U3BlbGxDaGVja2VyICAgICAgICAgICAgKnNwZWxsX2No
ZWNrZXIpOworCitXRUJLSVRfQVBJIFdlYktpdFNwZWxsQ2hlY2tlciAqCit3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3NwZWxsX2NoZWNrZXIgICAgICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQg
ICAgICAgICAgICAgICpjb250ZXh0KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dl
Yl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFibGVkICAgICAgIChXZWJLaXRXZWJDb250
ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dl
Yl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkICAgICAgIChXZWJLaXRXZWJDb250
ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgIGVu
YWJsZWQpOworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAg
ICAgICpjb250ZXh0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAg
ICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICAqc3BlbGxfY2hlY2tpbmdf
bGFuZ3VhZ2VzKTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApp
bmRleCA2YjYyZDZmLi5jNTVjYWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTM0LDYgKzM0
LDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RmluZENvbnRyb2xsZXIueG1s
Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdENvb2tpZU1hbmFnZXIueG1sIi8+
CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFBsdWdpbi54bWwiLz4KKyAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0U3BlbGxDaGVja2VyLnhtbCIvPgogICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRXZWJJbnNwZWN0b3IueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdFZlcnNpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApp
bmRleCBhY2EzNGRmLi5jZWEzNDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTMy
LDYgKzMyLDEyIEBAIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIKIHdlYmtp
dF93ZWJfY29udGV4dF9zZXRfYWRkaXRpb25hbF9wbHVnaW5zX2RpcmVjdG9yeQogd2Via2l0X3dl
Yl9jb250ZXh0X2dldF9wbHVnaW5zCiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3BsdWdpbnNfZmlu
aXNoCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNrZXIKK3dlYmtpdF93ZWJfY29u
dGV4dF9nZXRfc3BlbGxfY2hlY2tlcgord2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVj
a2luZ19lbmFibGVkCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWQKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzCit3ZWJr
aXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcwogCiA8U1VCU0VDVElP
TiBVUkkgU2NoZW1lPgogV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrCkBAIC04MDYsMyAr
ODEyLDI0IEBAIFdFQktJVF9DT05URVhUX01FTlVfSVRFTV9HRVRfQ0xBU1MKIFdlYktpdENvbnRl
eHRNZW51SXRlbVByaXZhdGUKIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfdHlwZQogPC9T
RUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdFNwZWxsQ2hlY2tlcjwvRklMRT4KK1dl
YktpdFNwZWxsQ2hlY2tlcgord2Via2l0X3NwZWxsX2NoZWNrZXJfY2hlY2tfc3BlbGxpbmdfb2Zf
c3RyaW5nCit3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfZ3Vlc3Nlc19mb3Jfd29yZAord2Via2l0
X3NwZWxsX2NoZWNrZXJfdXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcword2Via2l0X3Nw
ZWxsX2NoZWNrZXJfZ2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dv
cmQKK3dlYmtpdF9zcGVsbF9jaGVja2VyX2xlYXJuX3dvcmQKK3dlYmtpdF9zcGVsbF9jaGVja2Vy
X2lnbm9yZV93b3JkCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0U3BlbGxDaGVja2Vy
SWZhY2UKK1dFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVIKK1dFQktJVF9TUEVMTF9DSEVDS0VSCitX
RUJLSVRfSVNfU1BFTExfQ0hFQ0tFUgorV0VCS0lUX1NQRUxMX0NIRUNLRVJfR0VUX0lGQUNFCisK
KzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfdHlwZQorPC9T
RUNUSU9OPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4
IDU4YWMyYjcuLmM5OGE3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFJlc3Bv
bnNlUG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNjcmlwdERpYWxv
Zy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFNwZWxsQ2hlY2tlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVx
dWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVzcG9uc2UuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkNzc3ZWUzLi4zM2RiMmM4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTItMDYtMjkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IGEgbmV3IHNwZWxsIGNoZWNrZXIgQVBJ
IGZvciBXZWJLaXQyR1RLKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTAyNjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJZ25vcmUgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudC4qIHByaXZhdGUgZmlsZXMg
Zm9yIGd0ay1kb2MuCisKKyAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3RrZG9jOgorICAgICAgICAo
Z2V0X3dlYmtpdDJfb3B0aW9ucyk6CisKIDIwMTItMDYtMjcgIFphbiBEb2JlcnNlayAgPHphbmRv
YmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAgICBbR3RrXSBBZGQgc3VwcG9ydCBmb3IgdGhlIEdh
bWVwYWQgQVBJCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jIGIvVG9vbHMv
Z3RrL2dlbmVyYXRlLWd0a2RvYwppbmRleCA4OGU2MmU3Li5lZGM3ZWMwIDEwMDc1NQotLS0gYS9U
b29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCisrKyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MK
QEAgLTk5LDYgKzk5LDcgQEAgZGVmIGdldF93ZWJraXQyX29wdGlvbnMoKToKICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJypDbGllbnQqJykpICsgXAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNy
Y19wYXRoKCdXZWJLaXRHZW9sb2NhdGlvblByb3ZpZGVyLionKSkgKyBcCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50
LionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKGRlcml2ZWRfc291
cmNlc19wYXRoKCd3ZWJraXQyZ3RrJywgJ3dlYmtpdDInLCAnV2ViS2l0TWFyc2hhbC4qJykpICsg
XAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihkZXJpdmVkX3NvdXJjZXNfcGF0
aCgnd2Via2l0Mmd0aycsICd3ZWJraXQyJywgJ1dlYktpdEVudW1UeXBlcy4qJykpICsgXAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgndGVzdHMvKi5oJykpCi0t
IAoxLjcuMTAuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153519</attachid>
            <date>2012-07-20 09:10:31 -0700</date>
            <delta_ts>2012-07-24 04:48:54 -0700</delta_ts>
            <desc>Patch proposal + Unit tests + Documentation</desc>
            <filename>bug-90268-20120720181026.patch</filename>
            <type>text/plain</type>
            <size>54776</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDk3YTM5NGE1NTMzYjkx
ODcwOTI5NjRhMzc2MjU3MTAxODUyNTM2Mi4uNDc5ZTQ5NmZhYzkyYjE3OTAzNThmNDk5MDc4Zjg2
ZWMyODMyZTcwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDEyLTA3LTIwICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbV0syXVtH
VEtdIEltcGxlbWVudCBhIG5ldyBzcGVsbCBjaGVja2VyIEFQSSBmb3IgV2ViS2l0MkdUSysKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMjY4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3IHNw
ZWxsIGNoZWNraW5nIEFQSSB0byBXSzIsIGJhc2VkIGluIFdLMSdzIGltcGxlbWVudGF0aW9uLCBw
cm92aWRpbmcKKyAgICAgICAgYSBuZXcgaW50ZXJmYWNlIGFuZCBhIGludGVybmFsIGltcGxlbWVu
dGF0aW9uIGJ5IGRlZmF1bHQgYmFzZWQgaW4gbGliZW5jaGFudC4KKworICAgICAgICBFeHBvc2Ug
bmV3IGludGVyZmFjZSBmb3Igc3BlbGwgY2hlY2tlcnMsIFdlYktpdFNwZWxsQ2hlY2tlci4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlci5jcHA6IEFkZGVk
LgorICAgICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJfZGVmYXVsdF9pbml0KToKKyAgICAgICAg
KHdlYmtpdF9zcGVsbF9jaGVja2VyX2NoZWNrX3NwZWxsaW5nX29mX3N0cmluZyk6CisgICAgICAg
ICh3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfZ3Vlc3Nlc19mb3Jfd29yZCk6CisgICAgICAgICh3
ZWJraXRfc3BlbGxfY2hlY2tlcl91cGRhdGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKToKKyAg
ICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9hdXRvY29ycmVjdF9zdWdnZXN0aW9uc19m
b3JfbWlzc3BlbGxlZF93b3JkKToKKyAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2xlYXJu
X3dvcmQpOgorICAgICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJfaWdub3JlX3dvcmQpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlci5oOiBBZGRlZC4KKyAg
ICAgICAgKF9XZWJLaXRTcGVsbENoZWNrZXJJZmFjZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvd2Via2l0Mi5oOgorCisgICAgICAgIFByb3ZpZGUgcHJpdmF0ZSBpbXBsZW1lbnRhdGlv
biBvZiBXZWJLaXRTcGVsbENoZWNrZXIgYmFzZWQgaW4gbGliZW5jaGFudC4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKF9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSk6CisgICAgICAgICh3
ZWJraXRfc3BlbGxfY2hlY2tlcl9lbmNoYW50X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9z
cGVsbF9jaGVja2VyX2VuY2hhbnRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc3BlbGxf
Y2hlY2tlcl9lbmNoYW50X2luaXQpOgorICAgICAgICAoY2hlY2tTcGVsbGluZ09mU3RyaW5nKToK
KyAgICAgICAgKGdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKHVwZGF0ZVNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMpOgorICAgICAgICAoZ2V0QXV0b2NvcnJlY3RTdWdnZXN0aW9uc0Zvck1pc3Nw
ZWxsZWRXb3JkKToKKyAgICAgICAgKGxlYXJuV29yZCk6CisgICAgICAgIChpZ25vcmVXb3JkKToK
KyAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfc3BlbGxfY2hlY2tlcl9pbnRl
cmZhY2VfaW5pdCk6CisgICAgICAgICh3ZWJraXRTcGVsbENoZWNrZXJFbmNoYW50Q3JlYXRlKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50Lmg6
IEFkZGVkLgorICAgICAgICAoX1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQpOgorICAgICAgICAo
X1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRDbGFzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGUuaDogQWRkZWQuCisKKyAgICAg
ICAgSW1wbGVtZW50IG5ldyBBUEkgY2xpZW50IGZvciBVSVByb2Nlc3MncyBUZXh0Q2hlY2tlci4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyQ2xpZW50LmNw
cDogQWRkZWQuCisgICAgICAgIChjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAg
ICAgICAoc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKGNoZWNr
U3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChndWVzc2VzRm9yV29yZCk6CisgICAgICAgIChs
ZWFybldvcmQpOgorICAgICAgICAoaWdub3JlV29yZCk6CisgICAgICAgIChhdHRhY2hUZXh0Q2hl
Y2tlckNsaWVudFRvQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VGV4dENoZWNrZXJDbGllbnQuaDogQWRkZWQuCisKKyAgICAgICAgQXR0YWNoIHRoZSBuZXcgQVBJ
IGNsaWVudCBmb3IgVGV4dENoZWNrZXIgdG8gdGhlIGRlZmF1bHQgV2ViS2l0V2ViQ29udGV4dAor
ICAgICAgICB3aGVuIGNyZWF0aW5nIGl0LCBhbmQgaW5zdGFsbCBhIGVuY2hhbnQtYmFzZWQgc3Bl
bGwgY2hlY2tlciBnbG9iYWxseS4KKworICAgICAgICBBbHNvLCBhZGRBUEkgdG8gV2ViS2l0V2Vi
Q29udGV4dCB0byBhbGxvdyBlbmFibGluZy9kaXNhYmxpbmcgdGhlIHNwZWxsCisgICAgICAgIGNo
ZWNraW5nIGZlYXR1cmUgZ2xvYmFsbHksIGFuZCB1cGRhdGUgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2Vz
LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHA6Cisg
ICAgICAgIChfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUpOgorICAgICAgICAoY3JlYXRlRGVmYXVs
dFdlYkNvbnRleHQpOgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVj
a2VyKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tlcik6Cisg
ICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQpOgor
ICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKToK
KyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oOgorCisgICAgICAgIE5l
dyB0ZXN0cyBmb3IgY2hlY2tpbmcgdGhlIHNwZWxsIGNoZWNraW5nIEFQSQorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAg
ICAoZG9TcGVsbENoZWNrZXJXaXRoTm9uRW5nbGlzaERpY3Rpb25hcnkpOiBOZXcgaGVscGVyIGZ1
bmN0aW9uLgorICAgICAgICAoZG9TcGVsbENoZWNrZXJUZXN0c1dpdGhFbmdsaXNoRGljdGlvbmFy
eSk6IERpdHRvLgorICAgICAgICAoZG9TcGVsbENoZWNrZXJJZ25vcmVXb3JkVGVzdHMpOiBEaXR0
by4KKyAgICAgICAgKHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKTogTmV3IHVuaXQgdGVzdC4K
KyAgICAgICAgKGJlZm9yZUFsbCk6IEFkZGVkIHRoZSBuZXcgdW5pdCB0ZXN0IHRvIHRoZSB0ZXN0
IHN1aXRlLgorCisgICAgICAgIFVwZGF0ZWQgbWFrZWZpbGVzLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06IEFkZCBmbGFncyB0byBoYW5kbGUgdGhlIFNQRUxMQ0hFQ0sgZmVhdHVyZS4KKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZCBuZXcgZmlsZXMKKworICAgICAgICBV
cGRhdGUgZG9jdW1lbnRhdGlvbiB3aXRoIG5ldyBzZWN0aW9ucyBhbmQgc3ltYm9scy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDoKKwog
MjAxMi0wNy0xOSAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBbUmVmYWN0b3JpbmddIFJlcGxhY2UgTm9kZSdzIERvY3VtZW50IHBvaW50ZXIgd2l0aCBhIFRy
ZWVTY29wZSBwb2ludGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5h
bSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDkxMDhiYjRjOTAyZWRjNWJj
ZTMyMmU5ZDBiOGQyZTJmZTI5YWI1ZWYuLjIxMjQzNzIzZTg3NWQ5MWUxMDI2NGMzZDMxOGVkYTAz
Nzk3N2FjZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xNDMsNiArMTQzLDEzIEBAIGxpYndl
YmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlO
T1JfVkVSU0lPTkBfbGFfQ1BQCiAJLURNT1pfWDExCiBlbmRpZgogCisjIFNwZWxsIGNoZWNrZXIK
K2lmIEVOQUJMRV9TUEVMTENIRUNLCitsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9S
X1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0NQUEZMQUdTICs9IFwK
KwktREVOQUJMRV9TUEVMTENIRUNLPTEgXAorCSQoRU5DSEFOVF9DRkxBR1MpCitlbmRpZgorCiAj
IFBsdWdpbiBwcm9jZXNzCiBpZiBFTkFCTEVfUExVR0lOX1BST0NFU1MKIGxpYndlYmtpdDJndGtf
QFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lP
TkBfbGFfQ1BQRkxBR1MgKz0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggY2Zh
ZTJkNzA3NzI1Y2MxOTFjZGViZWYxNWQ1MjQ5YjIwZWE0MTUyMS4uYTZjYWVjZTNhODI5NmZhZTdk
YTk2MjQzZmNmMjVlZWI5ZTBmMDFhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC0xMTgsNiArMTE4LDcgQEAgd2Via2l0Mmd0a19oX2FwaSArPSBcCiAJJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLmggXAogCSQoV2ViS2l0
MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2NyaXB0RGlhbG9nLmggXAogCSQoV2ViS2l0Mikv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXIuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVUklSZXF1ZXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0VVJJUmVzcG9uc2UuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmggXApAQCAtNjk3LDYgKzY5OCwxMCBAQCB3ZWJraXQyX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRp
bmdzLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGlu
Z3MuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3NQ
cml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxs
Q2hlY2tlci5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNw
ZWxsQ2hlY2tlci5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRU
ZXh0Q2hlY2tlckNsaWVudC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFRleHRDaGVja2VyQ2xpZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0VUlDbGllbnQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0VVJJUmVxdWVzdC5jcHAgXApAQCAtMTE1Myw2ICsxMTU4LDEzIEBAIHdlYmtpdDJf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBc
CiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKIAoraWYgRU5BQkxFX1NQ
RUxMQ0hFQ0sKK3dlYmtpdDJfc291cmNlcyArPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudC5jcHAgXAorCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQuaCBcCisJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZh
dGUuaAorZW5kaWYgIyBFTkQgRU5BQkxFX1NQRUxMQ0hFQ0sKKwogaWYgVVNFX1RFWFRVUkVfTUFQ
UEVSX0dMCiB3ZWJraXQyX3NvdXJjZXMgKz0gXAogICAgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKaW5kZXggN2ZkNWQ3ODYxZWM4MDBi
N2FiNTY2YzVmN2Q2OWM4ZjI4MjY2ZjcxNC4uYWE4YTcxYmY5Y2U3NjhjNGVhZTNjYmNkMDYzYWZj
MGFlZDUwNjI1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFByaXZhdGUuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tTZXJp
YWxpemVkU2NyaXB0VmFsdWUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLU291cFJlcXVlc3RNYW5h
Z2VyLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgorI2luY2x1ZGUgPFdlYktpdDIv
V0tUZXh0Q2hlY2tlci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgogI2luY2x1ZGUg
PGdsaWIuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2IwYWQ4YjY1ZjBjYjZkNGMxMjY1MjE2NzA2ZDk0OWYyN2ZkNDRkYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hl
Y2tlci5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFNwZWxsQ2hlY2tl
ci5oIgorCisvKioKKyAqIFNFQ1RJT046V2ViS2l0U3BlbGxDaGVja2VyCisgKiBAc2hvcnRfZGVz
Y3JpcHRpb246IHRoZSBzcGVsbCBjaGVja2luZyBBUEkgZm9yIFdlYktpdAorICoKKyAqICNXZWJL
aXRTcGVsbENoZWNrZXIgcHJvdmlkZXMgQVBJcyBmb3IgdGhlIHNwZWxsIGNoZWNraW5nCisgKiBm
dW5jdGlvbmFsaXR5IHVzZWQgaW50ZXJuYWxseSBieSBXZWJLaXQgdG8gcGVyZm9ybSBzcGVsbCBj
aGVja2luZworICogaW4gZWRpdGFibGUgYXJlYXMuIFRoaXMgY2FuIGJlIHVzZWQsIGZvciBleGFt
cGxlLCBieSBicm93c2VycyB0bworICogaW1wbGVtZW50IGN1c3RvbSBzcGVsbCBjaGVja2luZyBj
b250ZXh0IG1lbnVzIG9yIHNvcGhpc3RpY2F0ZWQKKyAqIGF1dG8tY29ycmVjdCBmZWF0dXJlcy4K
KyAqLworCit0eXBlZGVmIFdlYktpdFNwZWxsQ2hlY2tlcklmYWNlIFdlYktpdFNwZWxsQ2hlY2tl
ckludGVyZmFjZTsKK0dfREVGSU5FX0lOVEVSRkFDRShXZWJLaXRTcGVsbENoZWNrZXIsIHdlYmtp
dF9zcGVsbF9jaGVja2VyLCBHX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3Nw
ZWxsX2NoZWNrZXJfZGVmYXVsdF9pbml0KFdlYktpdFNwZWxsQ2hlY2tlcklmYWNlKikKK3sKK30K
KworLyoqCisgKiB3ZWJraXRfc3BlbGxfY2hlY2tlcl9jaGVja19zcGVsbGluZ19vZl9zdHJpbmc6
CisgKiBAY2hlY2tlcjogYSAjV2ViS2l0U3BlbGxDaGVja2VyCisgKiBAc3RyaW5nOiB0aGUgc3Ry
aW5nIHRvIGNoZWNrIGZvciBtaXNzcGVsbGluZ3MKKyAqIEBtaXNzcGVsbGluZ19sb2NhdGlvbjog
KG91dCkgKGFsbG93LW5vbmUpIGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHRvIHN0b3JlIHRoZSBs
b2NhdGlvbiBvZiB0aGUgZmlyc3QgbWlzc3BlbGxpbmcKKyAqIEBtaXNzcGVsbGluZ19sZW5ndGg6
IChvdXQpIChhbGxvdy1ub25lKSBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0byBzdG9yZSB0aGUg
bGVuZ3RoIG9mIHRoZSBmaXJzdCBtaXNzcGVsbGluZworICoKKyAqIENoZWNrcyBAc3RyaW5nIGZv
ciBtaXNzcGVsbGluZ3MgdXNpbmcgQGNoZWNrZXIsIHN0b3JpbmcgdGhlCisgKiBsb2NhdGlvbiBh
bmQgbGVuZ3RoIG9mIHRoZSBmaXJzdCBtaXNzcGVsbGluZyBpbgorICogQG1pc3NwZWxsaW5nX2xv
Y2F0aW9uIGFuZCBAbWlzc3BlbGxpbmdfbGVuZ3RoIHJlc3BlY3RpdmVseS4KKyAqKi8KK3ZvaWQg
d2Via2l0X3NwZWxsX2NoZWNrZXJfY2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5nKFdlYktpdFNwZWxs
Q2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogc3RyaW5nLCBpbnQqIG1pc3NwZWxsaW5nX2xv
Y2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nX2xlbmd0aCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKGNoZWNrZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHN0cmluZyk7CisKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJJZmFjZSogaWZhY2UgPSBXRUJLSVRf
U1BFTExfQ0hFQ0tFUl9HRVRfSUZBQ0UoY2hlY2tlcik7CisgICAgaWYgKGlmYWNlLT5jaGVja19z
cGVsbGluZ19vZl9zdHJpbmcpCisgICAgICAgIGlmYWNlLT5jaGVja19zcGVsbGluZ19vZl9zdHJp
bmcoY2hlY2tlciwgc3RyaW5nLCBtaXNzcGVsbGluZ19sb2NhdGlvbiwgbWlzc3BlbGxpbmdfbGVu
Z3RoKTsKK30KKworLyoqCisgKiB3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfZ3Vlc3Nlc19mb3Jf
d29yZDoKKyAqIEBjaGVja2VyOiBhICNXZWJLaXRTcGVsbENoZWNrZXIKKyAqIEB3b3JkOiB0aGUg
bWlzc3BlbGxlZCB3b3JkCisgKgorICogUmV0dXJucyBhICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkg
b2YgZ3Vlc3NlcyBmb3IgY29ycmVjdGlvbnMgb2YgdGhlCisgKiBtaXNzcGVsbGVkIHdvcmQgQHdv
cmQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIGEgbmV3bHkgYWxsb2NhdGVkICVO
VUxMLXRlcm1pbmF0ZWQgYXJyYXkKKyAqIG9mIHN1Z2dlc3RlZCBjb3JyZWN0aW9ucyBmb3IgYSBt
aXNzcGVsbGVkIHdvcmQgQHdvcmQuIEZyZWUgaXQgd2l0aAorICogJWdfc3RyZnJlZXYgd2hlbiBk
b25lIHdpdGggaXQuCisgKiovCitjaGFyKiogd2Via2l0X3NwZWxsX2NoZWNrZXJfZ2V0X2d1ZXNz
ZXNfZm9yX3dvcmQoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3Jk
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKGNo
ZWNrZXIpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh3b3JkLCAwKTsKKworICAgIFdl
YktpdFNwZWxsQ2hlY2tlcklmYWNlKiBpZmFjZSA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0dFVF9J
RkFDRShjaGVja2VyKTsKKyAgICBpZiAoaWZhY2UtPmdldF9ndWVzc2VzX2Zvcl93b3JkKQorICAg
ICAgICByZXR1cm4gaWZhY2UtPmdldF9ndWVzc2VzX2Zvcl93b3JkKGNoZWNrZXIsIHdvcmQpOwor
CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogd2Via2l0X3NwZWxsX2NoZWNrZXJfdXBkYXRl
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlczoKKyAqIEBjaGVja2VyOiBhICNXZWJLaXRTcGVsbENo
ZWNrZXIKKyAqIEBsYW5ndWFnZXM6IChhbGxvdy1ub25lKSBhIHN0cmluZyBvZiBsYW5ndWFnZXMg
dG8gdXNlIGZvciBAY2hlY2tlcgorICoKKyAqIFNldHMgQGxhbmd1YWdlcyBhcyB0aGUgbGlzdCBv
ZiBsYW5ndWFnZXMgdG8gdXNlIGJ5IEBjaGVja2VyLiBUaGUKKyAqIGFjY2VwdGVkIGZvcm1hdCBp
cyBhIGxpc3Qgb2YgY29tbWEgKCcsJykgc2VwYXJhdGVkIGxhbmd1YWdlIGNvZGVzCisgKiBvZiB0
aGUgZm9ybSAnZW5fVVMnLCBpZSwgbGFuZ3VhZ2VfVkFSSUFOVC4KKyAqKi8KK3ZvaWQgd2Via2l0
X3NwZWxsX2NoZWNrZXJfdXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyhXZWJLaXRTcGVs
bENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIGxhbmd1YWdlcykKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKGNoZWNrZXIpKTsKKworICAgIFdlYktp
dFNwZWxsQ2hlY2tlcklmYWNlKiBpZmFjZSA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFD
RShjaGVja2VyKTsKKyAgICBpZiAoaWZhY2UtPnVwZGF0ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXMpCisgICAgICAgIGlmYWNlLT51cGRhdGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKGNoZWNr
ZXIsIGxhbmd1YWdlcyk7Cit9CisKKy8qKgorICogd2Via2l0X3NwZWxsX2NoZWNrZXJfZ2V0X2F1
dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQ6CisgKiBAY2hlY2tlcjog
YSAjV2ViS2l0U3BlbGxDaGVja2VyCisgKiBAd29yZDogYSBtaXNzcGVsbGVkIHdvcmQKKyAqCisg
KiBSZXR1cm5zIGEgc3VnZ2VzdGlvbiBmb3IgYSB3b3JkIHRvIHVzZSBpbiBhbiAiYXV0b2NvcnJl
Y3QiIGZlYXR1cmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIHRoZSBzdWdnZXN0
aW9uIGZvciB0aGUgYXV0b2NvcnJlY3Rpb24gb2YKKyAqIEB3b3JkCisgKiovCitjaGFyKiB3ZWJr
aXRfc3BlbGxfY2hlY2tlcl9nZXRfYXV0b2NvcnJlY3Rfc3VnZ2VzdGlvbnNfZm9yX21pc3NwZWxs
ZWRfd29yZChXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVIoY2hlY2tl
ciksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHdvcmQsIDApOworCisgICAgV2ViS2l0
U3BlbGxDaGVja2VySWZhY2UqIGlmYWNlID0gV0VCS0lUX1NQRUxMX0NIRUNLRVJfR0VUX0lGQUNF
KGNoZWNrZXIpOworICAgIGlmIChpZmFjZS0+Z2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zv
cl9taXNzcGVsbGVkX3dvcmQpCisgICAgICAgIHJldHVybiBpZmFjZS0+Z2V0X2F1dG9jb3JyZWN0
X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQoY2hlY2tlciwgd29yZCk7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworLyoqCisgKiB3ZWJraXRfc3BlbGxfY2hlY2tlcl9sZWFybl93b3JkOgor
ICogQGNoZWNrZXI6IGEgI1dlYktpdFNwZWxsQ2hlY2tlcgorICogQHdvcmQ6IHRoZSB3b3JkIHRv
IGxlYXJuCisgKgorICogSW5zdHJ1Y3RzIHRoZSBAY2hlY2tlciB0byBhZGQgQHdvcmQgdG8gaXRz
IGRpY3Rpb25hcnkgYXMgYSBwcm9wZXJseQorICogc3BlbGxlZCB3b3JkLiBUaGUgd29yZCB3aWxs
IGJlIGxlYXJuZWQgcGVybWFuZW50bHkgaW4gdGhlIHVzZXIncworICogcGVyc29uYWwgZGljdGlv
bmFyeS4KKyAqKi8KK3ZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfbGVhcm5fd29yZChXZWJLaXRT
cGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfU1BFTExfQ0hFQ0tFUihjaGVja2VyKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh3b3JkKTsKKworICAgIFdlYktpdFNwZWxsQ2hlY2tlcklmYWNlKiBpZmFjZSA9IFdF
QktJVF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFDRShjaGVja2VyKTsKKyAgICBpZiAoaWZhY2UtPmxl
YXJuX3dvcmQpCisgICAgICAgIGlmYWNlLT5sZWFybl93b3JkKGNoZWNrZXIsIHdvcmQpOworfQor
CisvKioKKyAqIHdlYmtpdF9zcGVsbF9jaGVja2VyX2lnbm9yZV93b3JkOgorICogQGNoZWNrZXI6
IGEgI1dlYktpdFNwZWxsQ2hlY2tlcgorICogQHdvcmQ6IHRoZSB3b3JkIHRvIGlnbm9yZQorICoK
KyAqIEluc3RydWN0cyB0aGUgQGNoZWNrZXIgdG8gaWdub3JlIEB3b3JkIGFzIGEgbWlzc3BlbGxp
bmcgZm9yIHRoaXMKKyAqIHNlc3Npb24uCisgKiovCit2b2lkIHdlYmtpdF9zcGVsbF9jaGVja2Vy
X2lnbm9yZV93b3JkKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29y
ZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKGNoZWNr
ZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHdvcmQpOworCisgICAgV2ViS2l0U3BlbGxDaGVj
a2VySWZhY2UqIGlmYWNlID0gV0VCS0lUX1NQRUxMX0NIRUNLRVJfR0VUX0lGQUNFKGNoZWNrZXIp
OworICAgIGlmIChpZmFjZS0+aWdub3JlX3dvcmQpCisgICAgICAgIGlmYWNlLT5pZ25vcmVfd29y
ZChjaGVja2VyLCB3b3JkKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQ1ZTQyOTNmZDcwZGUw
ZmIxNzE2YTliMDViNTBjOGU0MjllYThhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlci5oCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9f
V0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vy
cm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIFdlYktpdFNwZWxsQ2hlY2tlcl9oCisjZGVmaW5lIFdlYktpdFNw
ZWxsQ2hlY2tlcl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfU1BFTExfQ0hFQ0tFUiAgICAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9TUEVMTF9DSEVDS0VSKG9iaikgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUiwgV2Vi
S2l0U3BlbGxDaGVja2VyKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVIob2JqKSAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU1BF
TExfQ0hFQ0tFUikpCisjZGVmaW5lIFdFQktJVF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFDRShvYmop
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0lOVEVSRkFDRSAoKG9iaiksIFdFQktJVF9UWVBFX1NQRUxM
X0NIRUNLRVIsIFdlYktpdFNwZWxsQ2hlY2tlcklmYWNlKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFNwZWxsQ2hlY2tlciBXZWJLaXRTcGVsbENoZWNrZXI7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0U3BlbGxDaGVja2VySWZhY2UgV2ViS2l0U3BlbGxDaGVja2VySWZhY2U7CisKK3N0cnVjdCBf
V2ViS2l0U3BlbGxDaGVja2VySWZhY2UgeworICAgIEdUeXBlSW50ZXJmYWNlIGdfaWZhY2U7CisK
KyAgICB2b2lkICAgKCpjaGVja19zcGVsbGluZ19vZl9zdHJpbmcpICAgICAgICAgICAgICAgICAg
ICAgICAgKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29yZCwgaW50
KiBtaXNzcGVsbGluZ19sb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ19sZW5ndGgpOworICAgIGNo
YXIqKiAoKmdldF9ndWVzc2VzX2Zvcl93b3JkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
V2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkKTsKKyAgICB2b2lk
ICAgKCp1cGRhdGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKSAgICAgICAgICAgICAgICAgKFdl
YktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogbGFuZ3VhZ2VzKTsKKyAgICBj
aGFyKiAgKCpnZXRfYXV0b2NvcnJlY3Rfc3VnZ2VzdGlvbnNfZm9yX21pc3NwZWxsZWRfd29yZCkg
KFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29yZCk7CisgICAgdm9p
ZCAgICgqbGVhcm5fd29yZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQpOworICAgIHZvaWQg
ICAoKmlnbm9yZV93b3JkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkKTsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfdHlwZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgR19HTlVDX0NPTlNUOworCitXRUJLSVRf
QVBJIHZvaWQgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfY2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5n
ICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFNwZWxsQ2hlY2tlciAqY2hlY2tlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICpzdHJpbmcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAqbWlz
c3BlbGxpbmdfbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAg
ICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdfbGVuZ3RoKTsKKworV0VCS0lUX0FQSSBjaGFyKiog
IHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9ndWVzc2VzX2Zvcl93b3JkICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChXZWJLaXRTcGVsbENoZWNrZXIgKmNoZWNrZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqd29yZCk7CisKK1dFQktJVF9B
UEkgdm9pZCAgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl91cGRhdGVfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzICAgICAgICAgICAgICAgICAoV2ViS2l0U3BlbGxDaGVja2VyICpjaGVja2VyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKmxhbmd1YWdl
cyk7CisKK1dFQktJVF9BUEkgY2hhciogICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfYXV0b2Nv
cnJlY3Rfc3VnZ2VzdGlvbnNfZm9yX21pc3NwZWxsZWRfd29yZCAoV2ViS2l0U3BlbGxDaGVja2Vy
ICpjaGVja2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAg
ICAgICAgKndvcmQpOworCitXRUJLSVRfQVBJIHZvaWQgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJf
bGVhcm5fd29yZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFNw
ZWxsQ2hlY2tlciAqY2hlY2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAgICAgICAgICp3b3JkKTsKKworV0VCS0lUX0FQSSB2b2lkICAgIHdlYmtpdF9zcGVs
bF9jaGVja2VyX2lnbm9yZV93b3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChXZWJLaXRTcGVsbENoZWNrZXIgKmNoZWNrZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqd29yZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3Bl
bGxDaGVja2VyRW5jaGFudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNWU2Mjc5MzE1N2M3YTQ0
ZmU2M2UzMzU1NmJhZThkYzY1MWZhMTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudC5jcHAKQEAgLTAs
MCArMSwxMjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudC5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisKKyNpbmNsdWRlICJXZWJLaXRTcGVsbENoZWNrZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRTcGVs
bENoZWNrZXJFbmNoYW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNrZXJF
bmNoYW50Lmg+CisjaW5jbHVkZSA8ZW5jaGFudC5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIHZvaWQgd2Via2l0X3Nw
ZWxsX2NoZWNrZXJfZW5jaGFudF9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9pbml0KFdlYktpdFNw
ZWxsQ2hlY2tlcklmYWNlKik7CitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRTcGVsbENo
ZWNrZXJFbmNoYW50LCB3ZWJraXRfc3BlbGxfY2hlY2tlcl9lbmNoYW50LCBHX1RZUEVfT0JKRUNU
LAorICAgICAgICAgICAgICAgICAgICAgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9U
WVBFX1NQRUxMX0NIRUNLRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9zcGVsbF9jaGVja2VyX2ludGVy
ZmFjZV9pbml0KSkKKworc3RydWN0IF9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSB7
CisgICAgUmVmUHRyPFRleHRDaGVja2VyRW5jaGFudD4gdGV4dENoZWNrZXJFbmNoYW50OworfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UKG9iamVjdCktPnByaXY7CisgICAgcHJp
di0+fldlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfY2xhc3NfaW5pdChXZWJLaXRTcGVsbENoZWNr
ZXJFbmNoYW50Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Vi
a2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9maW5hbGl6ZTsKKyAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSkp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc3BlbGxfY2hlY2tlcl9lbmNoYW50X2luaXQoV2Vi
S2l0U3BlbGxDaGVja2VyRW5jaGFudCogY2hlY2tlcikKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNr
ZXJFbmNoYW50UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShjaGVj
a2VyLCBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQsIFdlYktpdFNwZWxsQ2hlY2tl
ckVuY2hhbnRQcml2YXRlKTsKKyAgICBjaGVja2VyLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHBy
aXYpIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlKCk7CisKKyAgICBwcml2LT50ZXh0
Q2hlY2tlckVuY2hhbnQgPSBUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpOworfQorCitzdGF0
aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2Vy
LCBjb25zdCBjaGFyKiBzdHJpbmcsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNz
cGVsbGluZ0xlbmd0aCkKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQoY2hlY2tlciktPnByaXY7CisgICAg
cHJpdi0+dGV4dENoZWNrZXJFbmNoYW50LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nKHN0
cmluZyksICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxpbmdMZW5ndGgpOworfQorCitz
dGF0aWMgY2hhcioqIGdldEd1ZXNzZXNGb3JXb3JkKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tl
ciwgY29uc3QgY2hhciogd29yZCkKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQoY2hlY2tlciktPnByaXY7
CisKKyAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gcHJpdi0+dGV4dENoZWNrZXJFbmNoYW50
LT5nZXRHdWVzc2VzRm9yV29yZChTdHJpbmcod29yZCkpOworICAgIGlmIChndWVzc2VzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgaSA9IDA7CisgICAgaW50IG51bWJl
ck9mR3Vlc3NlcyA9IGd1ZXNzZXMuc2l6ZSgpOworICAgIGNoYXIqKiBndWVzc2VzQXJyYXkgPSBz
dGF0aWNfY2FzdDxjaGFyKio+KGdfbWFsbG9jMCgobnVtYmVyT2ZHdWVzc2VzICsgMSkgKiBzaXpl
b2YoY2hhciopKSk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGd1ZXNzZXMuYmVnaW4oKTsgaXRlciAhPSBndWVzc2VzLmVuZCgpOyArK2l0ZXIpCisgICAg
ICAgIGd1ZXNzZXNBcnJheVtpKytdID0gZ19zdHJkdXAoaXRlci0+dXRmOCgpLmRhdGEoKSk7Cisg
ICAgZ3Vlc3Nlc0FycmF5W2ldID0gMDsKKworICAgIHJldHVybiBndWVzc2VzQXJyYXk7Cit9CisK
K3N0YXRpYyB2b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoV2ViS2l0U3BlbGxDaGVj
a2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiBsYW5ndWFnZXMpCit7CisgICAgV2ViS2l0U3BlbGxD
aGVja2VyRW5jaGFudFByaXZhdGUqIHByaXYgPSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNIQU5U
KGNoZWNrZXIpLT5wcml2OworICAgIHByaXYtPnRleHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcyhTdHJpbmcobGFuZ3VhZ2VzKSk7Cit9CisKK3N0YXRpYyBjaGFy
KiBnZXRBdXRvY29ycmVjdFN1Z2dlc3Rpb25zRm9yTWlzc3BlbGxlZFdvcmQoV2ViS2l0U3BlbGxD
aGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkKQoreworICAgIHJldHVybiAwOworfQor
CitzdGF0aWMgdm9pZCBsZWFybldvcmQoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25z
dCBjaGFyKiB3b3JkKQoreworICAgIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX1NQRUxMX0NIRUNLRVJfRU5DSEFOVChjaGVja2VyKS0+cHJpdjsKKyAgICBw
cml2LT50ZXh0Q2hlY2tlckVuY2hhbnQtPmxlYXJuV29yZChTdHJpbmcod29yZCkpOworfQorCitz
dGF0aWMgdm9pZCBpZ25vcmVXb3JkKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3Qg
Y2hhciogd29yZCkKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSogcHJp
diA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQoY2hlY2tlciktPnByaXY7CisgICAgcHJp
di0+dGV4dENoZWNrZXJFbmNoYW50LT5pZ25vcmVXb3JkKFN0cmluZyh3b3JkKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfc3BlbGxfY2hlY2tlcl9pbnRl
cmZhY2VfaW5pdChXZWJLaXRTcGVsbENoZWNrZXJJZmFjZSogaW50ZXJmYWNlKQoreworICAgIGlu
dGVyZmFjZS0+Y2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5nID0gY2hlY2tTcGVsbGluZ09mU3RyaW5n
OworICAgIGludGVyZmFjZS0+Z2V0X2d1ZXNzZXNfZm9yX3dvcmQgPSBnZXRHdWVzc2VzRm9yV29y
ZDsKKyAgICBpbnRlcmZhY2UtPnVwZGF0ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMgPSB1cGRh
dGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzOworICAgIGludGVyZmFjZS0+Z2V0X2F1dG9jb3JyZWN0
X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQgPSBnZXRBdXRvY29ycmVjdFN1Z2dlc3Rp
b25zRm9yTWlzc3BlbGxlZFdvcmQ7CisgICAgaW50ZXJmYWNlLT5sZWFybl93b3JkID0gbGVhcm5X
b3JkOworICAgIGludGVyZmFjZS0+aWdub3JlX3dvcmQgPSBpZ25vcmVXb3JkOworfQorCitXZWJL
aXRTcGVsbENoZWNrZXJFbmNoYW50KiB3ZWJraXRTcGVsbENoZWNrZXJFbmNoYW50Q3JlYXRlKCkK
K3sKKyAgICByZXR1cm4gV0VCS0lUX1NQRUxMX0NIRUNLRVJfRU5DSEFOVChnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUl9FTkNIQU5ULCBOVUxMKSk7Cit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoU1BFTExDSEVDSykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM1Y2E4Y2M3MjNmY2E0YzYyZDBlNDEzMTlhOGFiZGE2MzhkYTlmYWQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJF
bmNoYW50LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIHdlYmtpdHNwZWxsY2hlY2tlcmVuY2hhbnRfaAorI2RlZmluZSB3ZWJr
aXRzcGVsbGNoZWNrZXJlbmNoYW50X2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4K
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVJfRU5D
SEFOVCAgICAgICAgICAgICh3ZWJraXRfc3BlbGxfY2hlY2tlcl9lbmNoYW50X2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tF
Ul9FTkNIQU5ULCBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50KSkKKyNkZWZpbmUgV0VCS0lUX1NQ
RUxMX0NIRUNLRVJfRU5DSEFOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQsIFdlYktpdFNw
ZWxsQ2hlY2tlckVuY2hhbnRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TUEVMTF9DSEVDS0VS
X0VOQ0hBTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
V0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NQ
RUxMX0NIRUNLRVJfRU5DSEFOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQpKQorI2RlZmluZSBX
RUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVJfRU5DSEFOVCwg
V2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFNwZWxsQ2hlY2tlckVuY2hhbnQgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudDsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50Q2xhc3MgV2ViS2l0U3BlbGxDaGVja2Vy
RW5jaGFudENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQ
cml2YXRlIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlOworCitzdHJ1Y3QgX1dlYktp
dFNwZWxsQ2hlY2tlckVuY2hhbnQgeworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworCisg
ICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGUg
KnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRDbGFzcyB7Cisg
ICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUgd2Vi
a2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9nZXRfdHlwZSh2b2lkKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENo
ZWNrZXJFbmNoYW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNTIyOWM3ZTQzNGIxZjQxZjg5ZTM1
MjNmZTgyZjgyYjcyMDU5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZS5oCkBAIC0wLDAg
KzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdFNwZWxsQ2hl
Y2tlckVuY2hhbnRQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdFNwZWxsQ2hlY2tlckVuY2hh
bnQuaCIKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCitXZWJLaXRTcGVsbENoZWNrZXJFbmNo
YW50KiB3ZWJraXRTcGVsbENoZWNrZXJFbmNoYW50Q3JlYXRlKCk7CisKKyNlbmRpZiAvLyBFTkFC
TEUoU1BFTExDSEVDSykKKworI2VuZGlmIC8vIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2
YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFRleHRDaGVja2VyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFRleHRDaGVja2VyQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMGE0NTUzY2M1NzAwZTk2
ODQzMWNhM2M0ZTE4YjBiM2Q5ZjlhNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXJDbGllbnQuY3BwCkBAIC0wLDAg
KzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlckNsaWVudC5oIgorCisjaW5j
bHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFNwZWxsQ2hlY2tlci5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
Kworc3RhdGljIGJvb2wgY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQg
KmNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZChXRUJLSVRfV0VCX0NPTlRFWFQoY2xpZW50SW5mbykpOworfQorCitz
dGF0aWMgdm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVk
LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZChXRUJLSVRfV0VCX0NPTlRFWFQoY2xpZW50SW5mbyksIGVu
YWJsZWQpOworfQorCitzdGF0aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3Qg
dGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQz
Ml90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBp
ZiAoV2ViS2l0U3BlbGxDaGVja2VyKiBzcGVsbENoZWNrZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X3NwZWxsX2NoZWNrZXIoV0VCS0lUX1dFQl9DT05URVhUKGNsaWVudEluZm8pKSkKKyAgICAg
ICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfY2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5nKHNwZWxsQ2hl
Y2tlciwgdG9JbXBsKHRleHQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3N0YXRpYyBXS0FycmF5UmVmIGd1ZXNz
ZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCAqY2xp
ZW50SW5mbykKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNrZXIqIHNwZWxsQ2hlY2tlciA9IHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tlcihXRUJLSVRfV0VCX0NPTlRFWFQoY2xpZW50
SW5mbykpOworICAgIGlmICghc3BlbGxDaGVja2VyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGNoYXIqKiBzdWdnZXN0aW9ucyA9IHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9ndWVzc2VzX2Zv
cl93b3JkKHNwZWxsQ2hlY2tlciwgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBpZiAoIXN1Z2dlc3Rpb25zKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiB3a1N1Z2dlc3Rpb25zKEFkb3B0V0ssIFdLTXV0YWJs
ZUFycmF5Q3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBzdWdnZXN0aW9uc1tpXTsgaSsr
KSB7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1N1Z2dlc3Rpb24oQWRvcHRX
SywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3VnZ2VzdGlvbnNbaV0pKTsKKyAgICAg
ICAgV0tBcnJheUFwcGVuZEl0ZW0od2tTdWdnZXN0aW9ucy5nZXQoKSwgd2tTdWdnZXN0aW9uLmdl
dCgpKTsKKyAgICB9CisgICAgZ19zdHJmcmVldihzdWdnZXN0aW9ucyk7CisKKyAgICByZXR1cm4g
d2tTdWdnZXN0aW9ucy5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgbGVhcm5Xb3JkKHVpbnQ2NF90
IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBp
ZiAoV2ViS2l0U3BlbGxDaGVja2VyKiBzcGVsbENoZWNrZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X3NwZWxsX2NoZWNrZXIoV0VCS0lUX1dFQl9DT05URVhUKGNsaWVudEluZm8pKSkKKyAgICAg
ICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfbGVhcm5fd29yZChzcGVsbENoZWNrZXIsIHRvSW1wbCh3
b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGlnbm9yZVdv
cmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkICpjbGllbnRJbmZv
KQoreworICAgIGlmIChXZWJLaXRTcGVsbENoZWNrZXIqIHNwZWxsQ2hlY2tlciA9IHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tlcihXRUJLSVRfV0VCX0NPTlRFWFQoY2xpZW50SW5m
bykpKQorICAgICAgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9pZ25vcmVfd29yZChzcGVsbENoZWNr
ZXIsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgYXR0
YWNoVGV4dENoZWNrZXJDbGllbnRUb0NvbnRleHQoV2ViS2l0V2ViQ29udGV4dCogd2ViQ29udGV4
dCkKK3sKKyAgICBXS1RleHRDaGVja2VyQ2xpZW50IHdrVGV4dENoZWNrZXJDbGllbnQgPSB7Cisg
ICAgICAgIGtXS1RleHRDaGVja2VyQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIHdlYkNv
bnRleHQsIC8vIGNsaWVudEluZm8KKyAgICAgICAgMCwgLy8gY29udGludW91c1NwZWxsQ2hlY2tp
bmdBbGxvd2VkCisgICAgICAgIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCwKKyAgICAg
ICAgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkLAorICAgICAgICAwLCAvLyBncmFt
bWFyQ2hlY2tpbmdFbmFibGVkCisgICAgICAgIDAsIC8vIHNldEdyYW1tYXJDaGVja2luZ0VuYWJs
ZWQKKyAgICAgICAgMCwgLy8gdW5pcXVlU3BlbGxEb2N1bWVudFRhZworICAgICAgICAwLCAvLyBj
bG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnCisgICAgICAgIGNoZWNrU3BlbGxpbmdPZlN0cmluZywK
KyAgICAgICAgMCwgLy8gY2hlY2tHcmFtbWFyT2ZTdHJpbmcKKyAgICAgICAgMCwgLy8gc3BlbGxp
bmdVSUlzU2hvd2luZworICAgICAgICAwLCAvLyB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nCisg
ICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQKKyAgICAgICAg
MCwgLy8gdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nCisgICAgICAgIGd1ZXNzZXNG
b3JXb3JkLAorICAgICAgICBsZWFybldvcmQsCisgICAgICAgIGlnbm9yZVdvcmQsCisgICAgfTsK
KyAgICBXS1RleHRDaGVja2VyU2V0Q2xpZW50KCZ3a1RleHRDaGVja2VyQ2xpZW50KTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVj
a2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0
Q2hlY2tlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlZjFjYTQwMDg0Y2E0ZjRlMTVmOTA5MmNmMTRh
OGZmOWYyNjgwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlckNsaWVudC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRUZXh0Q2hlY2tl
ckNsaWVudF9oCisjZGVmaW5lIFdlYktpdFRleHRDaGVja2VyQ2xpZW50X2gKKworI2luY2x1ZGUg
IldlYktpdFdlYkNvbnRleHQuaCIKKwordm9pZCBhdHRhY2hUZXh0Q2hlY2tlckNsaWVudFRvQ29u
dGV4dChXZWJLaXRXZWJDb250ZXh0Kik7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDhhMDYy
NWMwNzViNzkyMjE4MjBhN2NkMzllYzZjNzMyODY3ZGY1OTMuLjlkODYzMzkxODY1MjcyNmRhZDgx
YWViYTk0ZDhjOTFiYzJkZjNhZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5j
bHVkZSAiV2ViS2l0UGx1Z2luUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYktp
dFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNr
ZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9G
aWxlU3lzdGVtLmg+CkBAIC03Miw2ICs3NCw5IEBAIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFBy
aXZhdGUgewogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKICAgICBSZWZQdHI8V2ViS2l0R2VvbG9j
YXRpb25Qcm92aWRlcj4gZ2VvbG9jYXRpb25Qcm92aWRlcjsKICNlbmRpZgorICAgIEdSZWZQdHI8
V2ViS2l0U3BlbGxDaGVja2VyPiBzcGVsbENoZWNrZXI7CisgICAgQ1N0cmluZyBzcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzOworICAgIGJvb2wgc3BlbGxDaGVja2luZ0VuYWJsZWQ7CiB9OwogCiBzdGF0
aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC0xMjMsMTAgKzEyOCwx
OSBAQCBzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlRGVmYXVsdFdlYkNvbnRleHQoZ3BvaW50ZXIpCiAg
ICAgV0tDb250ZXh0U2V0Q2FjaGVNb2RlbCh3ZWJDb250ZXh0LT5wcml2LT5jb250ZXh0LmdldCgp
LCBrV0tDYWNoZU1vZGVsUHJpbWFyeVdlYkJyb3dzZXIpOwogICAgIGF0dGFjaERvd25sb2FkQ2xp
ZW50VG9Db250ZXh0KHdlYkNvbnRleHQuZ2V0KCkpOwogICAgIGF0dGFjaFJlcXVlc3RNYW5hZ2Vy
Q2xpZW50VG9Db250ZXh0KHdlYkNvbnRleHQuZ2V0KCkpOworCiAjaWYgRU5BQkxFKEdFT0xPQ0FU
SU9OKQogICAgIFdLR2VvbG9jYXRpb25NYW5hZ2VyUmVmIHdrR2VvbG9jYXRpb25NYW5hZ2VyID0g
V0tDb250ZXh0R2V0R2VvbG9jYXRpb25NYW5hZ2VyKHdlYkNvbnRleHQtPnByaXYtPmNvbnRleHQu
Z2V0KCkpOwogICAgIHdlYkNvbnRleHQtPnByaXYtPmdlb2xvY2F0aW9uUHJvdmlkZXIgPSBXZWJL
aXRHZW9sb2NhdGlvblByb3ZpZGVyOjpjcmVhdGUod2tHZW9sb2NhdGlvbk1hbmFnZXIpOwogI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICB3ZWJDb250ZXh0LT5wcml2LT5zcGVs
bENoZWNrZXIgPSBhZG9wdEdSZWYoV0VCS0lUX1NQRUxMX0NIRUNLRVIod2Via2l0U3BlbGxDaGVj
a2VyRW5jaGFudENyZWF0ZSgpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXNSZWYgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHBhbmdvX2xhbmd1YWdlX3RvX3N0cmluZyhndGtfZ2V0X2RlZmF1bHRfbGFuZ3VhZ2UoKSkp
KTsKKyAgICB3ZWJDb250ZXh0LT5wcml2LT5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzID0gdG9JbXBs
KHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNSZWYuZ2V0KCkpLT5zdHJpbmcoKS51dGY4KCk7CisgICAg
YXR0YWNoVGV4dENoZWNrZXJDbGllbnRUb0NvbnRleHQod2ViQ29udGV4dC5nZXQoKSk7CisjZW5k
aWYKKwogICAgIHJldHVybiB3ZWJDb250ZXh0LmdldCgpOwogfQogCkBAIC00MTgsNiArNDMyLDEz
MCBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9yZWdpc3Rlcl91cmlfc2NoZW1lKFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYQogICAgIFdLU291cFJlcXVlc3RNYW5hZ2VyUmVn
aXN0ZXJVUklTY2hlbWUoY29udGV4dC0+cHJpdi0+cmVxdWVzdE1hbmFnZXIuZ2V0KCksIHdrU2No
ZW1lLmdldCgpKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2No
ZWNrZXI6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICogQHNwZWxsX2NoZWNr
ZXI6IChhbGxvdy1ub25lKTogYSAjV2ViS2l0U3BlbGxDaGVja2VyIG9yICVOVUxMCisgKgorICog
U2V0IHRoZSAjV2ViS2l0U3BlbGxDaGVja2VyIGFzc29jaWF0ZWQgdG8gQGNvbnRleHQgdG8KKyAq
IEBzcGVsbF9jaGVja2VyLiBPbmNlIHRoZSBuZXcgI1dlYktpdFNwZWxsQ2hlY2tlciBpcyBzZXQs
IHRoZSBzcGVsbAorICogY2hlY2tpbmcgbGFuZ3VhZ2VzIGFzc29jaWF0ZWQgdG8gaXQgd2lsbCBi
ZSBzZXQgdG8gd2hhdGV2ZXIgdGhvc2UKKyAqIHdlcmUgcHJpb3IgdG8gdGhlIGNhbGwgdG8gdGhp
cyBmdW5jdGlvbiAoZS5nIGlmICdlbl9VUyxlc19FUycgd2FzCisgKiB1c2VkIGZvciB0aGUgcHJl
dmlvdXMgc3BlbGwgY2hlY2tlciwgdGhlIHNhbWUgbGlzdCBvZiBsYW5ndWFnZXMKKyAqIHdpbGwg
YmUgc2V0IGZvciB0aGUgbmV3IG9uZSkuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3Nl
dF9zcGVsbF9jaGVja2VyKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdFNwZWxsQ2hl
Y2tlciogc3BlbGxDaGVja2VyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9DT05URVhUKGNvbnRleHQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFzcGVsbENoZWNrZXIg
fHwgV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVIoc3BlbGxDaGVja2VyKSk7CisKKyAgICBXZWJLaXRX
ZWJDb250ZXh0UHJpdmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgaWYgKHNwZWxsQ2hl
Y2tlciA9PSBwcml2LT5zcGVsbENoZWNrZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVu
c3VyZSB0aGUgbGlzdCBvZiBjaGVja2luZyBsYW5ndWFnZXMgaXMgdXBkYXRlZCB3aGVuIGEgbmV3
IGNoZWNrZXIgaXMgc2V0LgorICAgIGlmIChzcGVsbENoZWNrZXIpCisgICAgICAgIHdlYmtpdF93
ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKGNvbnRleHQsIHByaXYtPnNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXMuZGF0YSgpKTsKKworICAgIHByaXYtPnNwZWxsQ2hlY2tlciA9
IHNwZWxsQ2hlY2tlcjsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxs
X2NoZWNrZXI6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICoKKyAqIEdldCB0
aGUgI1dlYktpdFNwZWxsQ2hlY2tlciBhc3NvY2lhdGVkIHRvIEBjb250ZXh0LgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRTcGVsbENoZWNrZXIgb2YgQGNvbnRl
eHQuCisgKi8KK1dlYktpdFNwZWxsQ2hlY2tlciogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVs
bF9jaGVja2VyKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpLCAwKTsKKyAgICByZXR1cm4g
Y29udGV4dC0+cHJpdi0+c3BlbGxDaGVja2VyLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZDoKKyAqIEBjb250ZXh0OiBhICNX
ZWJLaXRXZWJDb250ZXh0CisgKgorICogR2V0IHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgc3Bl
bGwgY2hlY2tpbmcgZmVhdHVyZS4gSXQgd2lsbAorICogYWx3YXlzIHJldHVybiAlRkFMU0UgaWYg
dGhlcmUgaXMgbm8gc3BlbGwgY2hlY2tlciBzZXQuCisgKgorICogUmV0dXJuczogJVRSVUUgSWYg
c3BlbGwgY2hlY2tpbmcgaXMgZW5hYmxlZCBhbmQgdGhlcmUgaXMgYSBzcGVsbAorICogY2hlY2tl
ciBhdmFpbGFibGUsIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKi8KK2dib29sZWFuIHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZChXZWJLaXRXZWJDb250ZXh0ICpj
b250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVY
VChjb250ZXh0KSwgRkFMU0UpOworCisgICAgV2ViS2l0V2ViQ29udGV4dFByaXZhdGUqIHByaXYg
PSBjb250ZXh0LT5wcml2OworICAgIHJldHVybiBwcml2LT5zcGVsbENoZWNrZXIuZ2V0KCkgJiYg
Y29udGV4dC0+cHJpdi0+c3BlbGxDaGVja2luZ0VuYWJsZWQ7Cit9CisKKy8qKgorICogd2Via2l0
X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkOgorICogQGNvbnRleHQ6IGEg
I1dlYktpdFdlYkNvbnRleHQKKyAqIEBlbmFibGVkOiBWYWx1ZSB0byBiZSBzZXQKKyAqCisgKiBF
bmFibGUgb3IgZGlzYWJsZSB0aGUgc3BlbGwgY2hlY2tpbmcgZmVhdHVyZS4KKyAqLwordm9pZCB3
ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQoV2ViS2l0V2ViQ29u
dGV4dCAqY29udGV4dCwgZ2Jvb2xlYW4gZW5hYmxlZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CisKKyAgICBpZiAoY29udGV4dC0+cHJp
di0+c3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY29udGV4dC0+cHJpdi0+c3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworICAgIFdL
VGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5h
YmxlZCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXM6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICoKKyAqIEdl
dCB0aGUgdGhlIGxpc3Qgb2Ygc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGFzc29jaWF0ZWQgdG8K
KyAqIEBjb250ZXh0LCBzZXBhcmF0ZWQgYnkgY29tbWFzLiBTZWUgd2Via2l0X3dlYl9jb250ZXh0
X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMKKyAqIGZvciBtb3JlIGRldGFpbHMgaW4gKiB0
aGUgZm9ybWF0IG9mIGV2ZXJ5IGxhbmd1YWdlIGluIHRoZSBsaXN0LgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBsYW5ndWFnZXMuCisg
Ki8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlcyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgMCk7CisKKyAgICByZXR1cm4g
Y29udGV4dC0+cHJpdi0+c3BlbGxDaGVja2luZ0xhbmd1YWdlcy5kYXRhKCk7Cit9CisKKy8qKgor
ICogd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXM6CisgKiBA
Y29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICogQHNwZWxsX2NoZWNraW5nX2xhbmd1YWdl
czogKGFsbG93LW5vbmUpOiBuZXcgbGlzdCBvZiBzcGVsbCBjaGVja2luZworICogbGFuZ3VhZ2Vz
IHNlcGFyYXRlZCBieSBjb21tYXMsIG9yICVOVUxMCisgKgorICogU2V0IHRoZSBsaXN0IG9mIHNw
ZWxsIGNoZWNraW5nIGxhbmd1YWdlcyB0byBiZSB1c2VkIGZvciBzcGVsbAorICogY2hlY2tpbmcs
IHNlcGFyYXRlZCBieSBjb21tYXMuIEluIGNhc2UgJU5VTEwgaXMgcGFzc2VkLCB0aGUgZGVmYXVs
dAorICogdmFsdWUgYXMgcmV0dXJuZWQgYnkgZ3RrX2dldF9kZWZhdWx0X2xhbmd1YWdlKCkgd2ls
bCBiZSB1c2VkLgorICoKKyAqIFRoZSBsb2NhbGUgc3RyaW5nIHR5cGljYWxseSBpcyBpbiB0aGUg
Zm9ybSBsYW5nX0NPVU5UUlksIHdoZXJlIGxhbmcKKyAqIGlzIGFuIElTTy02MzkgbGFuZ3VhZ2Ug
Y29kZSwgYW5kIENPVU5UUlkgaXMgYW4gSVNPLTMxNjYgY291bnRyeSBjb2RlLgorICogRm9yIGlu
c3RhbmNlLCBzdl9GSSBmb3IgU3dlZGlzaCBhcyB3cml0dGVuIGluIEZpbmxhbmQgb3IgcHRfQlIK
KyAqIGZvciBQb3J0dWd1ZXNlIGFzIHdyaXR0ZW4gaW4gQnJhemlsLgorICovCit2b2lkIHdlYmtp
dF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKFdlYktpdFdlYkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IGdjaGFyKiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKKworICAg
IFdlYktpdFdlYkNvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAgICBpZiAo
Z19zdHJjbXAwKHByaXYtPnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMuZGF0YSgpLCBzcGVsbENoZWNr
aW5nTGFuZ3VhZ2VzKSkgeworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3BlbGxD
aGVja2luZ0xhbmd1YWdlc1JlZiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoc3BlbGxDaGVja2luZ0xhbmd1YWdlcykpOworICAgICAgICBwcml2LT5zcGVsbENoZWNraW5n
TGFuZ3VhZ2VzID0gdG9JbXBsKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNSZWYuZ2V0KCkpLT5zdHJp
bmcoKS51dGY4KCk7CisgICAgfQorCisgICAgaWYgKHByaXYtPnNwZWxsQ2hlY2tlcikKKyAgICAg
ICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfdXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyhw
cml2LT5zcGVsbENoZWNrZXIuZ2V0KCksIHByaXYtPnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMuZGF0
YSgpKTsKK30KKwogV2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURv
d25sb2FkKFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCkKIHsKICAgICBHUmVmUHRyPFdlYktpdERv
d25sb2FkPiBkb3dubG9hZCA9IGRvd25sb2Fkc01hcCgpLmdldCh3a0Rvd25sb2FkKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaApp
bmRleCA4M2I2MDFhMzhlZGI0NmYxYjFmNzY3ZGVlNDMxZjllNWQ4MWZjMGQ3Li41Y2YwNDZjNjRj
NmI5NGJmNzc3MmFmNTE3MWI3ZWIxMmFkZTFjODI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb29raWVNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3dubG9hZC5o
PgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U3BlbGxDaGVja2VyLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0Lmg+CiAKIEdfQkVHSU5fREVDTFMKQEAgLTEzMiw2
ICsxMzMsMjYgQEAgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUgICAgICAg
ICAgICAgIChXZWJLaXRXZWJDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgICpzY2hl
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayBjYWxsYmFjaywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAg
ICAgICAgICAgICAgIHVzZXJfZGF0YSk7CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfY29u
dGV4dF9zZXRfc3BlbGxfY2hlY2tlciAgICAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAg
ICAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdFNwZWxsQ2hlY2tlciAgICAgICAgICAgICpzcGVsbF9j
aGVja2VyKTsKKworV0VCS0lUX0FQSSBXZWJLaXRTcGVsbENoZWNrZXIgKgord2Via2l0X3dlYl9j
b250ZXh0X2dldF9zcGVsbF9jaGVja2VyICAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0
ICAgICAgICAgICAgICAqY29udGV4dCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93
ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCAgICAgICAoV2ViS2l0V2ViQ29u
dGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93
ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCAgICAgICAoV2ViS2l0V2ViQ29u
dGV4dCAgICAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICBl
bmFibGVkKTsKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3dlYl9jb250ZXh0X2dl
dF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAg
ICAgICAqY29udGV4dCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9jb250ZXh0X3Nl
dF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAg
ICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICAgKnNwZWxsX2NoZWNraW5n
X2xhbmd1YWdlcyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwK
aW5kZXggNmFhYzdjODQzYTMxNGMyOWM1NjJjNjUzMjg1YjZmYTcxYWI0YTcyYy4uMjJmNjY5MGMy
NmM1MWZlNTYxMTBiZTRhMjJjZDI2ODk2MjhjMzQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBA
IC0zNCw2ICszNCw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEZpbmRDb250
cm9sbGVyLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRDb29raWVNYW5h
Z2VyLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRQbHVnaW4ueG1sIi8+
CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFNwZWxsQ2hlY2tlci54bWwiLz4KICAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0V2ViSW5zcGVjdG9yLnhtbCIvPgogICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0LnhtbCIvPgogICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRWZXJzaW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0
aW9ucy50eHQKaW5kZXggMzE2NDE3N2NjZGFlZjBiZTk2MjQ3NGZmMDc5MGU4MDYwNWE1ZDQwOS4u
OGFjMGFlN2MxOTg4YmQ5MGYwOWIxYWQ0YmMwMTFkYTMxMTYwOTNjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
c2VjdGlvbnMudHh0CkBAIC0zMyw2ICszMywxMiBAQCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nv
b2tpZV9tYW5hZ2VyCiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19k
aXJlY3RvcnkKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lucwogd2Via2l0X3dlYl9jb250
ZXh0X2dldF9wbHVnaW5zX2ZpbmlzaAord2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVj
a2VyCit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNrZXIKK3dlYmtpdF93ZWJfY29u
dGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZAord2Via2l0X3dlYl9jb250ZXh0X3NldF9z
cGVsbF9jaGVja2luZ19lbmFibGVkCit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlcword2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5n
dWFnZXMKIAogPFNVQlNFQ1RJT04gVVJJIFNjaGVtZT4KIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RD
YWxsYmFjawpAQCAtODM0LDMgKzg0MCwyNCBAQCBXRUJLSVRfRk9STV9TVUJNSVNTSU9OX1JFUVVF
U1RfR0VUX0NMQVNTCiBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3RQcml2YXRlCiB3ZWJraXRf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZ2V0X3R5cGUKIDwvU0VDVElPTj4KKworPFNFQ1RJT04+
Cis8RklMRT5XZWJLaXRTcGVsbENoZWNrZXI8L0ZJTEU+CitXZWJLaXRTcGVsbENoZWNrZXIKK3dl
YmtpdF9zcGVsbF9jaGVja2VyX2NoZWNrX3NwZWxsaW5nX29mX3N0cmluZword2Via2l0X3NwZWxs
X2NoZWNrZXJfZ2V0X2d1ZXNzZXNfZm9yX3dvcmQKK3dlYmtpdF9zcGVsbF9jaGVja2VyX3VwZGF0
ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMKK3dlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9hdXRv
Y29ycmVjdF9zdWdnZXN0aW9uc19mb3JfbWlzc3BlbGxlZF93b3JkCit3ZWJraXRfc3BlbGxfY2hl
Y2tlcl9sZWFybl93b3JkCit3ZWJraXRfc3BlbGxfY2hlY2tlcl9pZ25vcmVfd29yZAorCis8U1VC
U0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdFNwZWxsQ2hlY2tlcklmYWNlCitXRUJLSVRfVFlQRV9T
UEVMTF9DSEVDS0VSCitXRUJLSVRfU1BFTExfQ0hFQ0tFUgorV0VCS0lUX0lTX1NQRUxMX0NIRUNL
RVIKK1dFQktJVF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFDRQorCis8U1VCU0VDVElPTiBQcml2YXRl
Pgord2Via2l0X3NwZWxsX2NoZWNrZXJfZ2V0X3R5cGUKKzwvU0VDVElPTj4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRXZWJDb250ZXh0LmNwcAppbmRleCBlN2Q0M2ExM2RhOGQxOTYwMjcyNzk4YWY5ODg5NTAzY2Jl
MjhiOGI3Li5mZGNjNjJkZmRjMDg1MDEyMGI4YmRkOTQ0ZjYyMDc5YWUyNmZlOTcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2Vi
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0yMzEsMTEgKzIzMSwxNDMgQEAgc3RhdGljIHZv
aWQgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUoVVJJU2NoZW1lVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKICAgICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFj
a2luZ1Rlc3Q6OkxvYWRGYWlsZWQpKTsKIH0KIAorc3RhdGljIHZvaWQgZG9TcGVsbENoZWNrZXJX
aXRoTm9uRW5nbGlzaERpY3Rpb25hcnkoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2VyKQorewor
ICAgIGludCBwb3MgPSAtMTsKKyAgICBpbnQgbGVuID0gMDsKKyAgICB3ZWJraXRfc3BlbGxfY2hl
Y2tlcl9jaGVja19zcGVsbGluZ19vZl9zdHJpbmcoY2hlY2tlciwgIlRoZSBob3V6ZSBpcyByZWQi
LCAmcG9zLCAmbGVuKTsKKyAgICBjaGFyKiogZ3Vlc3Nlc0ZvcldvcmQgPSB3ZWJraXRfc3BlbGxf
Y2hlY2tlcl9nZXRfZ3Vlc3Nlc19mb3Jfd29yZChjaGVja2VyLCAiaG91cyIpOworICAgIGdfYXNz
ZXJ0X2NtcGludChwb3MsID09LCAtMSk7CisgICAgZ19hc3NlcnRfY21waW50KGxlbiwgPT0sIDAp
OworICAgIGdfYXNzZXJ0KCFndWVzc2VzRm9yV29yZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvU3Bl
bGxDaGVja2VyVGVzdHNXaXRoRW5nbGlzaERpY3Rpb25hcnkoV2ViS2l0U3BlbGxDaGVja2VyKiBj
aGVja2VyKQoreworICAgIGNvbnN0IGdjaGFyKiBzdHJpbmdUb0NoZWNrID0gIlRoZSBob3V6ZSBp
cyByZWQiOworICAgIGludCBwb3MgPSAtMTsKKyAgICBpbnQgbGVuID0gMDsKKworICAgIC8vICdo
b3V6ZScgaXMgcmVwb3J0ZWQgYXMgYSBtaXNwZWxsZWQgd29yZC4KKyAgICB3ZWJraXRfc3BlbGxf
Y2hlY2tlcl9jaGVja19zcGVsbGluZ19vZl9zdHJpbmcoY2hlY2tlciwgc3RyaW5nVG9DaGVjaywg
JnBvcywgJmxlbik7CisgICAgZ19hc3NlcnRfY21waW50KHBvcywgPT0sIDQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChsZW4sID09LCA1KTsKKyAgICBHT3duUHRyPGdjaGFyPiB3cm9uZ193b3JkKGdf
c3RybmR1cCgoY29uc3QgZ2NoYXIqKShzdHJpbmdUb0NoZWNrICsgcG9zKnNpemVvZihnY2hhcikp
LCBsZW4pKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod3Jvbmdfd29yZC5nZXQoKSwgPT0sICJob3V6
ZSIpOworCisgICAgLy8gV2Ugc2hvdWxkIGF0IGxlYXN0IHJlY2VpdmUgc29tZSBndWVzc2VzIGZv
ciAnaG91cycuCisgICAgY2hhcioqIGd1ZXNzZXNGb3JXb3JkID0gd2Via2l0X3NwZWxsX2NoZWNr
ZXJfZ2V0X2d1ZXNzZXNfZm9yX3dvcmQoY2hlY2tlciwgImhvdXMiKTsKKyAgICBnX2Fzc2VydChn
dWVzc2VzRm9yV29yZCk7CisgICAgZ19hc3NlcnQoZ3Vlc3Nlc0ZvcldvcmRbMF0pOworICAgIGdf
YXNzZXJ0KGd1ZXNzZXNGb3JXb3JkWzFdKTsKKyAgICBnX2Fzc2VydChndWVzc2VzRm9yV29yZFsz
XSk7CisgICAgZ19zdHJmcmVldihndWVzc2VzRm9yV29yZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRv
U3BlbGxDaGVja2VySWdub3JlV29yZFRlc3RzKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlcikK
K3sKKyAgICBjb25zdCBnY2hhciogc3RyaW5nVG9DaGVjayA9ICJUaGUgZm9yZXNzdCBpcyBodWdl
IjsKKyAgICBpbnQgcG9zID0gLTE7CisgICAgaW50IGxlbiA9IDA7CisKKyAgICAvLyBBbHdheXMg
YXNzdW1lIEVuZ2xpc2ggZm9yIHRoaXMgdGVzdHMuCisgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJf
dXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyhjaGVja2VyLCAiZW5fVVMiKTsKKworICAg
IC8vICdmb3Jlc3N0JyBpcyByZXBvcnRlZCBhcyBhIG1pc3BlbGxlZCB3b3JkLgorICAgIHdlYmtp
dF9zcGVsbF9jaGVja2VyX2NoZWNrX3NwZWxsaW5nX29mX3N0cmluZyhjaGVja2VyLCBzdHJpbmdU
b0NoZWNrLCAmcG9zLCAmbGVuKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocG9zLCA9PSwgNCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGxlbiwgPT0sIDcpOworICAgIEdPd25QdHI8Z2NoYXI+IHdyb25n
X3dvcmQoZ19zdHJuZHVwKChjb25zdCBnY2hhciopKHN0cmluZ1RvQ2hlY2sgKyBwb3Mqc2l6ZW9m
KGdjaGFyKSksIGxlbikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3cm9uZ193b3JkLmdldCgpLCA9
PSwgImZvcmVzc3QiKTsKKworICAgIC8vIE5vdyBpZ25vcmUgJ2ZvcmVzc3QnIGFzIGEgbWlzcGVs
bGVkIHdvcmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9pZ25vcmVf
d29yZChjaGVja2VyLCAiZm9yZXNzdCIpOworICAgIHBvcyA9IC0xOworICAgIGxlbiA9IDA7Cisg
ICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfY2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5nKGNoZWNrZXIs
IHN0cmluZ1RvQ2hlY2ssICZwb3MsICZsZW4pOworCisgICAgLy8gVGhlIHdvcmQgJ2ZvcmVzc3Qn
IHNob3VsZCBub3QgYmUgcmVwb3J0ZWQgdGhpcyB0aW1lLgorICAgIGdfYXNzZXJ0X2NtcGludChw
b3MsID09LCAtMSk7CisgICAgZ19hc3NlcnRfY21waW50KGxlbiwgPT0sIDApOworCisgICAgLy8g
UmVmcmVzaGluZyB0aGUgZGljdGlvbmFyaWVzIHNob3VsZCByZXN1bHQgaW4gdGhlIGlnbm9yZWQg
d29yZAorICAgIC8vIGJlaW5nIG5vdCBpZ25vcmVkIGFueW1vcmUsIGFzIHRoZSBzZXNzaW9uIHdv
dWxkIGJlIGRpZmZlcmVudC4KKyAgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl91cGRhdGVfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzKGNoZWNrZXIsIDApOworICAgIHdlYmtpdF9zcGVsbF9jaGVja2Vy
X3VwZGF0ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMoY2hlY2tlciwgImVuX1VTIik7CisgICAg
cG9zID0gLTE7CisgICAgbGVuID0gMDsKKyAgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9jaGVja19z
cGVsbGluZ19vZl9zdHJpbmcoY2hlY2tlciwgc3RyaW5nVG9DaGVjaywgJnBvcywgJmxlbik7CisK
KyAgICAvLyBUaGUgd29yZCAnZm9yZXNzdCcgc2hvdWxkIGJlIHJlcG9ydGVkIGFnYWluIG5vdy4K
KyAgICBnX2Fzc2VydF9jbXBpbnQocG9zLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGxl
biwgPT0sIDcpOworICAgIHdyb25nX3dvcmQuc2V0KGdfc3RybmR1cCgoY29uc3QgZ2NoYXIqKShz
dHJpbmdUb0NoZWNrICsgcG9zKnNpemVvZihnY2hhcikpLCBsZW4pKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod3Jvbmdfd29yZC5nZXQoKSwgPT0sICJmb3Jlc3N0Iik7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgR1JlZlB0cjxXZWJLaXRXZWJDb250ZXh0PiB3ZWJDb250ZXh0KHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZGVmYXVsdCgpKTsKKyAgICBHUmVmUHRyPFdlYktpdFNwZWxsQ2hlY2tlcj4gY2hl
Y2tlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tlcih3ZWJDb250ZXh0Lmdl
dCgpKTsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgdGVzdHMgd2lsbCB1c2UgYSBzdHJpbmcgd3Jp
dHRlbiBpbiBFbmdsaXNoLCBzbyBtaXNwZWxsZWQKKyAgICAvLyB3b3JkcyB3aWxsIGJlIHJlcG9y
dGVkIG9ubHkgd2hlbiBhbiBFbmdsaXNoIGRpY3Rpb25hcnkgaXMgYXZhaWxhYmxlLgorICAgIHdl
YmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQu
Z2V0KCksICJlbl9VUyIpOworICAgIGNvbnN0IGdjaGFyKiBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0Lmdl
dCgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlLCA9PSwgImVuX1VTIik7
CisgICAgZG9TcGVsbENoZWNrZXJUZXN0c1dpdGhFbmdsaXNoRGljdGlvbmFyeShjaGVja2VyLmdl
dCgpKTsKKworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzKHdlYkNvbnRleHQuZ2V0KCksICJlc19FUyIpOworICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQu
Z2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2UsID09LCAiZXNfRVMi
KTsKKyAgICBkb1NwZWxsQ2hlY2tlcldpdGhOb25FbmdsaXNoRGljdGlvbmFyeShjaGVja2VyLmdl
dCgpKTsKKworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzKHdlYkNvbnRleHQuZ2V0KCksICJlc19FUyxlbl9VUyIpOworICAgIGN1cnJlbnRMYW5ndWFn
ZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNv
bnRleHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2UsID09LCAi
ZXNfRVMsZW5fVVMiKTsKKyAgICBkb1NwZWxsQ2hlY2tlclRlc3RzV2l0aEVuZ2xpc2hEaWN0aW9u
YXJ5KGNoZWNrZXIuZ2V0KCkpOworCisgICAgLy8gQ2hlY2sgZGlzYWJsaW5nIGFuZCByZS1lbmFi
bGluZyBzcGVsbCBjaGVja2luZy4KKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2No
ZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dC5nZXQoKSwgRkFMU0UpOworICAgIGdib29sZWFuIGlz
U3BlbGxDaGVja2luZ0VuYWJsZWQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWQod2ViQ29udGV4dC5nZXQoKSk7CisgICAgZ19hc3NlcnQoIWlzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZCh3ZWJDb250ZXh0LmdldCgpLCBUUlVFKTsKKyAgICBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKHdlYkNv
bnRleHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGlzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworCisg
ICAgLy8gQ2hlY2sgcmVtb3ZpbmcgY29tcGxldGVseSB0aGUgc3BlbGwgY2hlY2tlciwgd2hpY2gg
c2hvdWxkCisgICAgLy8gcmVzdWx0IGluIHNwZWxsIGNoZWNraW5nIGJlaW5nIGRpc2FibGVkLCB3
aGlsZSBsYW5ndWFnZXMgYmVpbmcKKyAgICAvLyBwcmVzZXJ2ZWQsIGluIGNhc2UgYSBuZXcgc3Bl
bGwgY2hlY2tlciBpcyBzZXQgYWZ0ZXJ3YXJkcy4KKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X3NwZWxsX2NoZWNrZXIod2ViQ29udGV4dC5nZXQoKSwgMCk7CisgICAgR1JlZlB0cjxXZWJLaXRT
cGVsbENoZWNrZXI+IGN1cnJlbnRDaGVja2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVs
bF9jaGVja2VyKHdlYkNvbnRleHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KCFjdXJyZW50Q2hlY2tl
cik7CisgICAgaXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LmdldCgpKTsKKyAgICBnX2Fzc2VydCgh
aXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CisgICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dl
Yl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dC5nZXQoKSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZSwgPT0sICJlc19FUyxlbl9VUyIp
OworCisgICAgLy8gVHJ5IHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHNwZWxsIGNoZWNrZXIgbm93
IGFuZCB0ZXN0CisgICAgLy8gYWdhaW4uIFNwZWxsIGNoZWNraW5nIHNob3VsZCBiZSBlbmFibGVk
IGFnYWluIGFuZCBsYW5ndWFnZXMKKyAgICAvLyBzaG91bGQgaGF2ZSBiZWVuIHNldCBhbHJlYWR5
IChzbyBpdCBzaG91bGQgd29yayBhcyBleHBlY3RlZCkuCisgICAgd2Via2l0X3dlYl9jb250ZXh0
X3NldF9zcGVsbF9jaGVja2VyKHdlYkNvbnRleHQuZ2V0KCksIGNoZWNrZXIuZ2V0KCkpOworICAg
IGN1cnJlbnRDaGVja2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2VyKHdl
YkNvbnRleHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGN1cnJlbnRDaGVja2VyKTsKKyAgICBpc1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2lu
Z19lbmFibGVkKHdlYkNvbnRleHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGlzU3BlbGxDaGVja2lu
Z0VuYWJsZWQpOworICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2UsID09LCAiZXNfRVMsZW5fVVMiKTsKKyAgICBkb1NwZWxs
Q2hlY2tlclRlc3RzV2l0aEVuZ2xpc2hEaWN0aW9uYXJ5KGNoZWNrZXIuZ2V0KCkpOworCisgICAg
Ly8gTGFzdCwgdHJ5IHRoZSBBUEkgdG8gaWdub3JlIHdvcmRzLgorICAgIGRvU3BlbGxDaGVja2Vy
SWdub3JlV29yZFRlc3RzKGNoZWNrZXIuZ2V0KCkpOworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7
CiAgICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImRlZmF1bHQtY29udGV4dCIsIHRl
c3RXZWJDb250ZXh0RGVmYXVsdCk7CiAgICAgUGx1Z2luc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29u
dGV4dCIsICJnZXQtcGx1Z2lucyIsIHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyk7CiAgICAgVVJJ
U2NoZW1lVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInVyaS1zY2hlbWUiLCB0ZXN0V2Vi
Q29udGV4dFVSSVNjaGVtZSk7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInNw
ZWxsLWNoZWNrZXIiLCB0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcik7CiB9CiAKIHZvaWQgYWZ0
ZXJBbGwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4
IDExNmRhZmMyZDA5MjAyN2Q4ZjE0YmVlNTQwYWE4MDY3OWVmM2FlMzguLjlmMTlmNjdmMDY3NDY2
MmRkMjMwM2RlOTkwZDM1ZDc2NDk1ZDUwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQyLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNj
cmlwdERpYWxvZy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFNwZWxsQ2hlY2tlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0VVJJUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVzcG9uc2UuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaD4KZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMzhlMTNmODYxYjhkOTA0
MjNiY2I5N2IyZmZiMDA1MDkzY2M2MWE2Li4wZTRiNTQ0MmQyYTA0MDBiZDg5ZDdiNDBjY2Y3ODEx
ZWUzMWE5Nzg3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDctMjAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxt
c2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IGEgbmV3
IHNwZWxsIGNoZWNrZXIgQVBJIGZvciBXZWJLaXQyR1RLKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyNjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZ25vcmUgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFu
dC4qIHByaXZhdGUgZmlsZXMgZm9yIGd0ay1kb2MuCisKKyAgICAgICAgKiBndGsvZ2VuZXJhdGUt
Z3RrZG9jOgorICAgICAgICAoZ2V0X3dlYmtpdDJfb3B0aW9ucyk6CisKIDIwMTItMDctMjAgIEd5
dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbV1RSXSBB
ZGQgKmV4cGxpY2l0KiBrZXl3b3JkIHRvIGNvbnN0cnVjdG9yIHdoaWNoIGhhcyBhIHBhcmFtZXRl
cgpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYyBiL1Rvb2xzL2d0ay9nZW5l
cmF0ZS1ndGtkb2MKaW5kZXggODhlNjJlNzUwNTE3NWVkMmIwODM1OTQwNGJlZTg4YWYyNWNkMWQz
Zi4uZWRjN2VjMGVmYzZmZTNjOGJlZDFhZWRhMmVhNDk0MmMwMzJhYjk4OCAxMDA3NTUKLS0tIGEv
VG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYworKysgYi9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9j
CkBAIC05OSw2ICs5OSw3IEBAIGRlZiBnZXRfd2Via2l0Ml9vcHRpb25zKCk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCcqQ2xpZW50KicpKSArIFwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYktpdFdlYlZpZXdCYXNl
QWNjZXNzaWJsZS4qJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihz
cmNfcGF0aCgnV2ViS2l0R2VvbG9jYXRpb25Qcm92aWRlci4qJykpICsgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFu
dC4qJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihkZXJpdmVkX3Nv
dXJjZXNfcGF0aCgnd2Via2l0Mmd0aycsICd3ZWJraXQyJywgJ1dlYktpdE1hcnNoYWwuKicpKSAr
IFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2IoZGVyaXZlZF9zb3VyY2VzX3Bh
dGgoJ3dlYmtpdDJndGsnLCAnd2Via2l0MicsICdXZWJLaXRFbnVtVHlwZXMuKicpKSArIFwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ3Rlc3RzLyouaCcpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154019</attachid>
            <date>2012-07-24 04:48:54 -0700</date>
            <delta_ts>2012-07-24 08:53:00 -0700</delta_ts>
            <desc>Patch proposal + Unit tests + Documentation</desc>
            <filename>0001-2012-07-24-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>30818</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAyZGFjNmNlMTEyYzM3YjQ0ZjEwNjBmMjdlMzkzY2Y3MzcwMzBkYmMwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE4IEp1bCAyMDEyIDE2OjM1OjA0ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wNy0yNCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IGEgbmV3IHNwZWxsIGNoZWNrZXIgQVBJIGZv
ciBXZWJLaXQyR1RLKwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MDI2OAoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
QWRkIGEgc2ltcGxlIHNwZWxsIGNoZWNraW5nIEFQSSB0byBXSzIsIGFsbG93aW5nIHRvIGVuYWJs
ZS9kaXNhYmxlCiAgICAgICAgdGhpcyBmZWF0dXJlIGFuZCB0byBkZWZpbmUgYSBsaXN0IG9mIGxh
bmd1YWdlcyBhc3NvY2lhdGVkIHRvIGl0LgoKICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQg
ZmxhZ3MgdG8gaGFuZGxlIHRoZSBTUEVMTENIRUNLIGZlYXR1cmUuCiAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOiBBZGRlZCBuZXcgZmlsZXMKCiAgICAgICAgQWRkZWQgbmV3IGludGVybmFs
IGNsYXNzIHRoYXQgd2lsbCBhY3QgYm90aCBhcyB0aGUgaW1wbGVtZW50YXRpb24KICAgICAgICBv
ZiBUZXh0Q2hlY2tlckNsaWVudCBhbmQgYXMgdGhlIG9iamVjdCBXZWJLaXRXZWJDb250ZXh0IHdp
bGwKICAgICAgICBkZXBlbmQgb24gdG8gaW1wbGVtZW50IHRoZSBuZXdseSBhZGRlZCBBUEkuCgog
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRlZC4K
ICAgICAgICAodG9UZXh0Q2hlY2tlcik6CiAgICAgICAgKGNvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZENhbGxiYWNrKToKICAgICAgICAoc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkQ2FsbGJhY2spOgogICAgICAgIChjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFjayk6CiAg
ICAgICAgKGd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2spOgogICAgICAgIChsZWFybldvcmRDYWxsYmFj
ayk6CiAgICAgICAgKGlnbm9yZVdvcmRDYWxsYmFjayk6CiAgICAgICAgKFdlYktpdFRleHRDaGVj
a2VyOjp+V2ViS2l0VGV4dENoZWNrZXIpOgogICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6Y3Jl
YXRlKToKICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OldlYktpdFRleHRDaGVja2VyKToKICAg
ICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CiAgICAgICAg
KFdlYktpdFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZCk6CiAgICAgICAgKFdlYktpdFRl
eHRDaGVja2VyOjpsZWFybldvcmQpOgogICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6aWdub3Jl
V29yZCk6CiAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5nRW5hYmxl
ZCk6CiAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmg6IEFkZGVk
LgogICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcik6CiAgICAgICAgKFdlYktpdFRleHRDaGVja2Vy
Ojppc1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6Omdl
dFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgoKICAgICAgICBBZGRlZCBXS1RleHRDaGVja2VyIHRv
IFdlYktpdFByaXZhdGUuaCwgbmVlZGVkIGluIFdlYktpdFRleHRDaGVja2VyLgoKICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKCiAgICAgICAgQWRkIG5ldyBBUEkg
dG8gV2ViS2l0V2ViQ29udGV4dCB0byBhbGxvdyBlbmFibGluZy9kaXNhYmxpbmcgdGhpcwogICAg
ICAgIHNwZWxsIGNoZWNraW5nIGZlYXR1cmUsIGFuZCB0byBzZXQvZ2V0IHRoZSBsaXN0IG9mIGxh
bmd1YWdlcyB1c2VkCiAgICAgICAgdG8gZGVjaWRlIHdoaWNoIGRpY3Rpb25hcmllcyB3aWxsIGJl
IGNvbnN1bHRlZC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmNwcDoKICAgICAgICAoX1dlYktpdFdlYkNvbnRleHRQcml2YXRlKToKICAgICAgICAoY3JlYXRl
RGVmYXVsdFdlYkNvbnRleHQpOgogICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxs
X2NoZWNraW5nX2VuYWJsZWQpOiBOZXcgQVBJLgogICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQpOiBEaXR0by4KICAgICAgICAod2Via2l0X3dlYl9j
b250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpOiBEaXR0by4KICAgICAgICAod2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpOiBEaXR0by4KICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaDoKCiAgICAgICAgTmV3
IHRlc3RzIGZvciBjaGVja2luZyB0aGUgbmV3IEFQSSBhZGRlZCB0byBXZWJLaXRXZWJDb250ZXh0
LgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0
LmNwcDoKICAgICAgICAodGVzdFdlYkNvbnRleHRTcGVsbENoZWNrZXIpOgogICAgICAgIChiZWZv
cmVBbGwpOgoKICAgICAgICBVcGRhdGUgZG9jdW1lbnRhdGlvbiB3aXRoIG5ldyBBUEkgaW4gV2Vi
S2l0V2ViQ29udGV4dC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstc2VjdGlvbnMudHh0OgoKMjAxMi0wNy0yNCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5j
aGV6QGlnYWxpYS5jb20+CgogICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IGEgbmV3IHNwZWxs
IGNoZWNrZXIgQVBJIGZvciBXZWJLaXQyR1RLKwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDI2OAoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KCiAgICAgICAgSWdub3JlIFdlYktpdFRleHRDaGVja2VyLiogcHJpdmF0ZSBmaWxlcyBm
b3IgZ3RrLWRvYy4KCiAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3RrZG9jOgogICAgICAgIChnZXRf
d2Via2l0Ml9vcHRpb25zKToKLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAxNDcgKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKwogU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCAgIHwgICAgMSArCiAu
Li4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwICAgICAgICB8ICAxNTcg
KysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFRleHRDaGVja2VyLmggIHwgICA1NyArKysrKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCB8ICAgOTEgKysrKysrKysrKysrCiAuLi4vV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggICB8ICAgMTQgKysKIC4uLi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IHwgICAgNCArCiAu
Li4vQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgICAgICAgICB8ICAgMjcg
KysrKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDEyICsrCiBUb29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgNTIwIGluc2VydGlvbnMoKykKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0
Q2hlY2tlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGUxODU1YTMuLmQzMDE4
ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTAgQEAKKzIwMTItMDctMjQgIE1hcmlvIFNhbmNo
ZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXSzJdW0dUS10gSW1w
bGVtZW50IGEgbmV3IHNwZWxsIGNoZWNrZXIgQVBJIGZvciBXZWJLaXQyR1RLKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyNjgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBzaW1wbGUgc3BlbGwg
Y2hlY2tpbmcgQVBJIHRvIFdLMiwgYWxsb3dpbmcgdG8gZW5hYmxlL2Rpc2FibGUKKyAgICAgICAg
dGhpcyBmZWF0dXJlIGFuZCB0byBkZWZpbmUgYSBsaXN0IG9mIGxhbmd1YWdlcyBhc3NvY2lhdGVk
IHRvIGl0LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBmbGFncyB0byBoYW5kbGUg
dGhlIFNQRUxMQ0hFQ0sgZmVhdHVyZS4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBB
ZGRlZCBuZXcgZmlsZXMKKworICAgICAgICBBZGRlZCBuZXcgaW50ZXJuYWwgY2xhc3MgdGhhdCB3
aWxsIGFjdCBib3RoIGFzIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBvZiBUZXh0Q2hlY2tl
ckNsaWVudCBhbmQgYXMgdGhlIG9iamVjdCBXZWJLaXRXZWJDb250ZXh0IHdpbGwKKyAgICAgICAg
ZGVwZW5kIG9uIHRvIGltcGxlbWVudCB0aGUgbmV3bHkgYWRkZWQgQVBJLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHRvVGV4dENoZWNrZXIpOgorICAgICAgICAoY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
Q2FsbGJhY2spOgorICAgICAgICAoc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2Fs
bGJhY2spOgorICAgICAgICAoY2hlY2tTcGVsbGluZ09mU3RyaW5nQ2FsbGJhY2spOgorICAgICAg
ICAoZ3Vlc3Nlc0ZvcldvcmRDYWxsYmFjayk6CisgICAgICAgIChsZWFybldvcmRDYWxsYmFjayk6
CisgICAgICAgIChpZ25vcmVXb3JkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0VGV4dENoZWNr
ZXI6On5XZWJLaXRUZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpXZWJLaXRUZXh0Q2hlY2tlcik6Cisg
ICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJL
aXRUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpp
Z25vcmVXb3JkKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5n
RW5hYmxlZCk6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0xh
bmd1YWdlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIu
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJLaXRU
ZXh0Q2hlY2tlcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXRUZXh0
Q2hlY2tlcjo6Z2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisKKyAgICAgICAgQWRkZWQgV0tU
ZXh0Q2hlY2tlciB0byBXZWJLaXRQcml2YXRlLmgsIG5lZWRlZCBpbiBXZWJLaXRUZXh0Q2hlY2tl
ci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKworICAg
ICAgICBBZGQgbmV3IEFQSSB0byBXZWJLaXRXZWJDb250ZXh0IHRvIGFsbG93IGVuYWJsaW5nL2Rp
c2FibGluZyB0aGlzCisgICAgICAgIHNwZWxsIGNoZWNraW5nIGZlYXR1cmUsIGFuZCB0byBzZXQv
Z2V0IHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB1c2VkCisgICAgICAgIHRvIGRlY2lkZSB3aGljaCBk
aWN0aW9uYXJpZXMgd2lsbCBiZSBjb25zdWx0ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKF9XZWJLaXRXZWJDb250ZXh0UHJp
dmF0ZSk6CisgICAgICAgIChjcmVhdGVEZWZhdWx0V2ViQ29udGV4dCk6CisgICAgICAgICh3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQpOiBOZXcgQVBJLgorICAg
ICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKTogRGl0
dG8uCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlcyk6IERpdHRvLgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXMpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0Lmg6CisKKyAgICAgICAgTmV3IHRlc3RzIGZvciBjaGVja2luZyB0aGUgbmV3
IEFQSSBhZGRlZCB0byBXZWJLaXRXZWJDb250ZXh0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAodGVzdFdlYkNv
bnRleHRTcGVsbENoZWNrZXIpOgorICAgICAgICAoYmVmb3JlQWxsKToKKworICAgICAgICBVcGRh
dGUgZG9jdW1lbnRhdGlvbiB3aXRoIG5ldyBzZWN0aW9ucyBhbmQgc3ltYm9scy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDoKKworMjAx
Mi0wNy0yMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW1dLMl1bR1RLXSBJbXBsZW1lbnQgYSBuZXcgc3BlbGwgY2hlY2tlciBBUEkgZm9yIFdl
YktpdDJHVEsrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MDI2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIG5ldyBzcGVsbCBjaGVja2luZyBBUEkgdG8gV0syLCBiYXNlZCBpbiBXSzEncyBpbXBs
ZW1lbnRhdGlvbiwgcHJvdmlkaW5nCisgICAgICAgIGEgbmV3IGludGVyZmFjZSBhbmQgYSBpbnRl
cm5hbCBpbXBsZW1lbnRhdGlvbiBieSBkZWZhdWx0IGJhc2VkIGluIGxpYmVuY2hhbnQuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6CisKKyAgICAgICAgUHJvdmlkZSBw
cml2YXRlIGltcGxlbWVudGF0aW9uIG9mIFdlYktpdFNwZWxsQ2hlY2tlciBiYXNlZCBpbiBsaWJl
bmNoYW50LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2Vy
RW5jaGFudC5jcHA6IEFkZGVkLgorICAgICAgICAoX1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQ
cml2YXRlKToKKyAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfZmluYWxpemUp
OgorICAgICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9jbGFzc19pbml0KToKKyAg
ICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfaW5pdCk6CisgICAgICAgIChjaGVj
a1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoZ2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAg
ICAodXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChnZXRBdXRvY29ycmVj
dFN1Z2dlc3Rpb25zRm9yTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAobGVhcm5Xb3JkKToKKyAg
ICAgICAgKGlnbm9yZVdvcmQpOgorICAgICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFu
dF9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9pbml0KToKKyAgICAgICAgKHdlYmtpdFNwZWxsQ2hl
Y2tlckVuY2hhbnRDcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNw
ZWxsQ2hlY2tlckVuY2hhbnQuaDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0U3BlbGxDaGVja2Vy
RW5jaGFudCk6CisgICAgICAgIChfV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudENsYXNzKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0
ZS5oOiBBZGRlZC4KKworICAgICAgICBJbXBsZW1lbnQgbmV3IEFQSSBjbGllbnQgZm9yIFVJUHJv
Y2VzcydzIFRleHRDaGVja2VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VGV4dENoZWNrZXJDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQpOgorICAgICAgICAoY2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKGd1ZXNzZXNG
b3JXb3JkKToKKyAgICAgICAgKGxlYXJuV29yZCk6CisgICAgICAgIChpZ25vcmVXb3JkKToKKyAg
ICAgICAgKGF0dGFjaFRleHRDaGVja2VyQ2xpZW50VG9Db250ZXh0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlckNsaWVudC5oOiBBZGRlZC4KKworICAgICAg
ICBBdHRhY2ggdGhlIG5ldyBBUEkgY2xpZW50IGZvciBUZXh0Q2hlY2tlciB0byB0aGUgZGVmYXVs
dCBXZWJLaXRXZWJDb250ZXh0CisgICAgICAgIHdoZW4gY3JlYXRpbmcgaXQsIGFuZCBpbnN0YWxs
IGEgZW5jaGFudC1iYXNlZCBzcGVsbCBjaGVja2VyIGdsb2JhbGx5LgorCisgICAgICAgIEFsc28s
IGFkZEFQSSB0byBXZWJLaXRXZWJDb250ZXh0IHRvIGFsbG93IGVuYWJsaW5nL2Rpc2FibGluZyB0
aGUgc3BlbGwKKyAgICAgICAgY2hlY2tpbmcgZmVhdHVyZSBnbG9iYWxseSwgYW5kIHVwZGF0ZSB0
aGUgbGlzdCBvZiBsYW5ndWFnZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSk6Cisg
ICAgICAgIChjcmVhdGVEZWZhdWx0V2ViQ29udGV4dCk6CisgICAgICAgICh3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3NwZWxsX2NoZWNrZXIpOgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dl
dF9zcGVsbF9jaGVja2VyKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxs
X2NoZWNraW5nX2VuYWJsZWQpOgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXMpOgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9z
cGVsbF9jaGVja2luZ19sYW5ndWFnZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYkNvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2
YXRlLmg6CisKKyAgICAgICAgTmV3IHRlc3RzIGZvciBjaGVja2luZyB0aGUgc3BlbGwgY2hlY2tp
bmcgQVBJCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2Vi
Q29udGV4dC5jcHA6CisgICAgICAgIChkb1NwZWxsQ2hlY2tlcldpdGhOb25FbmdsaXNoRGljdGlv
bmFyeSk6IE5ldyBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChkb1NwZWxsQ2hlY2tlclRlc3Rz
V2l0aEVuZ2xpc2hEaWN0aW9uYXJ5KTogRGl0dG8uCisgICAgICAgIChkb1NwZWxsQ2hlY2tlckln
bm9yZVdvcmRUZXN0cyk6IERpdHRvLgorICAgICAgICAodGVzdFdlYkNvbnRleHRTcGVsbENoZWNr
ZXIpOiBOZXcgdW5pdCB0ZXN0LgorICAgICAgICAoYmVmb3JlQWxsKTogQWRkZWQgdGhlIG5ldyB1
bml0IHRlc3QgdG8gdGhlIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgVXBkYXRlZCBtYWtlZmlsZXMu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIGZsYWdzIHRvIGhhbmRsZSB0aGUgU1BF
TExDSEVDSyBmZWF0dXJlLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIG5l
dyBmaWxlcworCisgICAgICAgIFVwZGF0ZSBkb2N1bWVudGF0aW9uIHdpdGggbmV3IEFQSSBpbiBX
ZWJLaXRXZWJDb250ZXh0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dDoKKwogMjAxMi0wNy0yMyAgS2VudCBUYW11cmEgIDx0a2VudEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVuYW1lIEVOQUJMRV9NRVRFUl9UQUcgYW5kIEVOQUJM
RV9QUk9HUkVTU19UQUcgdG8gRU5BQkxFX01FVEVSX0VMRU1FTlQgYW5kIEVOQUJMRV9QUk9HUkVT
U19FTEVNRU5UIHJlc3BlY3RpdmVseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA5MTA4YmI0Li4y
MTI0MzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTQzLDYgKzE0MywxMyBAQCBsaWJ3ZWJr
aXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9S
X1ZFUlNJT05AX2xhX0NQUAogCS1ETU9aX1gxMQogZW5kaWYKIAorIyBTcGVsbCBjaGVja2VyCitp
ZiBFTkFCTEVfU1BFTExDSEVDSworbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9W
RVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9DUFBGTEFHUyArPSBcCisJ
LURFTkFCTEVfU1BFTExDSEVDSz0xIFwKKwkkKEVOQ0hBTlRfQ0ZMQUdTKQorZW5kaWYKKwogIyBQ
bHVnaW4gcHJvY2VzcwogaWYgRU5BQkxFX1BMVUdJTl9QUk9DRVNTCiBsaWJ3ZWJraXQyZ3RrX0BX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05A
X2xhX0NQUEZMQUdTICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGNmYWUy
ZDcuLmVkZjI4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjk3LDYgKzY5
Nyw4IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0U2V0dGluZ3MuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRTZXR0aW5nc1ByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFVJQ2xpZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFVSSVJlcXVlc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAppbmRleCA3ZmQ1ZDc4Li5hYThhNzFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC00
MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
PgogI2luY2x1ZGUgPFdlYktpdDIvV0tTb3VwUmVxdWVzdE1hbmFnZXIuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL1dLU3RyaW5nLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1RleHRDaGVja2VyLmg+CiAj
aW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMDU0MjMxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDE1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK3N0YXRpYyBpbmxpbmUgV2ViS2l0VGV4dENoZWNrZXIqIHRvVGV4dENoZWNr
ZXIoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
S2l0VGV4dENoZWNrZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Cit9CisKK3N0
YXRpYyBib29sIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNrKGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbykt
PmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2soYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkICpj
bGllbnRJbmZvKQoreworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPnNldFNwZWxsQ2hl
Y2tpbmdFbmFibGVkKGVuYWJsZWQpOworfQorCitzdGF0aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZT
dHJpbmdDYWxsYmFjayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1p
c3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lk
ICpjbGllbnRJbmZvKQoreworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyh0b0ltcGwodGV4dCktPnN0cmluZygpLCAqbWlzc3BlbGxpbmdMb2NhdGlv
biwgKm1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworc3RhdGljIFdLQXJyYXlSZWYgZ3Vlc3Nlc0Zv
cldvcmRDYWxsYmFjayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQg
KmNsaWVudEluZm8pCit7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IHRvVGV4dENoZWNr
ZXIoY2xpZW50SW5mbyktPmdldEd1ZXNzZXNGb3JXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkp
OworICAgIGlmIChndWVzc2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBX
S1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gd2tTdWdnZXN0aW9ucyhBZG9wdFdLLCBXS011
dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gZ3Vlc3Nlcy5iZWdpbigpOyBpdGVyICE9IGd1ZXNzZXMuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tTdWdnZXN0aW9uKEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGl0ZXItPnV0ZjgoKS5kYXRhKCkpKTsK
KyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0od2tTdWdnZXN0aW9ucy5nZXQoKSwgd2tTdWdnZXN0
aW9uLmdldCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gd2tTdWdnZXN0aW9ucy5nZXQoKTsKK30K
Kworc3RhdGljIHZvaWQgbGVhcm5Xb3JkQ2FsbGJhY2sodWludDY0X3QgdGFnLCBXS1N0cmluZ1Jl
ZiB3b3JkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIHRvVGV4dENoZWNrZXIoY2xp
ZW50SW5mbyktPmxlYXJuV29yZCh0b0ltcGwod29yZCktPnN0cmluZygpKTsKK30KKworc3RhdGlj
IHZvaWQgaWdub3JlV29yZENhbGxiYWNrKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8p
LT5pZ25vcmVXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworfQorCitXZWJLaXRUZXh0Q2hl
Y2tlcjo6fldlYktpdFRleHRDaGVja2VyKCkKK3sKK30KKworUGFzc1JlZlB0cjxXZWJLaXRUZXh0
Q2hlY2tlcj4gV2ViS2l0VGV4dENoZWNrZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXZWJLaXRUZXh0Q2hlY2tlcigpKTsKK30KKworV2ViS2l0VGV4dENoZWNrZXI6Oldl
YktpdFRleHRDaGVja2VyKCkKKyAgICA6IG1fdGV4dENoZWNrZXIoV2ViQ29yZTo6VGV4dENoZWNr
ZXJFbmNoYW50OjpjcmVhdGUoKSkKKyAgICAsIG1fc3BlbGxDaGVja2luZ0VuYWJsZWQoZmFsc2Up
Cit7CisgICAgV0tUZXh0Q2hlY2tlckNsaWVudCB3a1RleHRDaGVja2VyQ2xpZW50ID0geworICAg
ICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICB0aGlzLCAv
LyBjbGllbnRJbmZvCisgICAgICAgIDAsIC8vIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dl
ZAorICAgICAgICBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjaywKKyAgICAg
ICAgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2ssCisgICAgICAgIDAs
IC8vIGdyYW1tYXJDaGVja2luZ0VuYWJsZWQKKyAgICAgICAgMCwgLy8gc2V0R3JhbW1hckNoZWNr
aW5nRW5hYmxlZAorICAgICAgICAwLCAvLyB1bmlxdWVTcGVsbERvY3VtZW50VGFnCisgICAgICAg
IDAsIC8vIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcKKyAgICAgICAgY2hlY2tTcGVsbGluZ09m
U3RyaW5nQ2FsbGJhY2ssCisgICAgICAgIDAsIC8vIGNoZWNrR3JhbW1hck9mU3RyaW5nCisgICAg
ICAgIDAsIC8vIHNwZWxsaW5nVUlJc1Nob3dpbmcKKyAgICAgICAgMCwgLy8gdG9nZ2xlU3BlbGxp
bmdVSUlzU2hvd2luZworICAgICAgICAwLCAvLyB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxs
ZWRXb3JkCisgICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZwor
ICAgICAgICBndWVzc2VzRm9yV29yZENhbGxiYWNrLAorICAgICAgICBsZWFybldvcmRDYWxsYmFj
aywKKyAgICAgICAgaWdub3JlV29yZENhbGxiYWNrLAorICAgIH07CisgICAgV0tUZXh0Q2hlY2tl
clNldENsaWVudCgmd2tUZXh0Q2hlY2tlckNsaWVudCk7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENo
ZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKQoreworICAgIG1fdGV4
dENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzdHJpbmcsIG1pc3NwZWxsaW5nTG9jYXRp
b24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworVmVjdG9yPFN0cmluZz4gV2ViS2l0VGV4dENo
ZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKK3sKKyAgICByZXR1
cm4gbV90ZXh0Q2hlY2tlci0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCk7Cit9CisKK3ZvaWQgV2Vi
S2l0VGV4dENoZWNrZXI6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCit7CisgICAgbV90
ZXh0Q2hlY2tlci0+bGVhcm5Xb3JkKHdvcmQpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2Vy
OjppZ25vcmVXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKK3sKKyAgICBtX3RleHRDaGVja2VyLT5p
Z25vcmVXb3JkKHdvcmQpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpzZXRTcGVsbENo
ZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1fc3BlbGxDaGVja2luZ0Vu
YWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3BlbGxDaGVja2luZ0Vu
YWJsZWQgPSBlbmFibGVkOworCisgICAgLy8gV2UgbmVlZCB0byBub3RpZnkgdGhlIFdlYiBwcm9j
ZXNzIHRoYXQgdGhpcyBoYXMgY2hhbmdlZC4KKyAgICBXS1RleHRDaGVja2VyQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOworfQorCit2b2lkIFdlYktp
dFRleHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFN0cmluZyYgbGFu
Z3VhZ2VzKQoreworICAgIGlmIChtX3NwZWxsQ2hlY2tpbmdMYW5ndWFnZXMgPT0gbGFuZ3VhZ2Vz
KQorICAgICAgICByZXR1cm47CisgICAgbV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzID0gbGFuZ3Vh
Z2VzOworCisgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGxhbmd1YWdlcyBpbiB0aGUgZW5j
aGFudC1iYXNlZCBjaGVja2VyIHRvby4KKyAgICBtX3RleHRDaGVja2VyLT51cGRhdGVTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hF
Q0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRU
ZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4
dENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjk1NjhkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VGV4dENoZWNrZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGV4dENoZWNrZXJfaAorI2RlZmluZSBXZWJLaXRU
ZXh0Q2hlY2tlcl9oCisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dENoZWNrZXJFbmNoYW50Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworY2xh
c3MgV2ViS2l0VGV4dENoZWNrZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJLaXRUZXh0Q2hlY2tl
cj4geworcHVibGljOgorICAgIHZpcnR1YWwgfldlYktpdFRleHRDaGVja2VyKCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViS2l0VGV4dENoZWNrZXI+IGNyZWF0ZSgpOworCisgICAgLy8gRm9y
IGltcGxlbWVudGluZyBUZXh0Q2hlY2tlckNsaWVudC4KKyAgICBib29sIGlzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKSB7IHJldHVybiBtX3NwZWxsQ2hlY2tpbmdFbmFibGVkOyB9CisgICAgdm9pZCBz
ZXRTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpOworICAgIHZvaWQgY2hlY2tTcGVs
bGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIG1pc3NwZWxsaW5nTG9jYXRp
b24sIGludCYgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIFZlY3RvcjxTdHJpbmc+IGdldEd1ZXNz
ZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CisgICAgdm9pZCBsZWFybldvcmQoY29uc3Qg
U3RyaW5nJiB3b3JkKTsKKyAgICB2b2lkIGlnbm9yZVdvcmQoY29uc3QgU3RyaW5nJiB3b3JkKTsK
KworICAgIC8vIFRvIGJlIGNhbGxlZCBmcm9tIFdlYktpdFdlYkNvbnRleHQgb25seS4KKyAgICBj
b25zdCBTdHJpbmcgZ2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcygpIHsgcmV0dXJuIG1fc3BlbGxD
aGVja2luZ0xhbmd1YWdlczsgfQorICAgIHZvaWQgc2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhj
b25zdCBTdHJpbmcmIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworCitwcml2YXRlOgorICAgIFdl
YktpdFRleHRDaGVja2VyKCk7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNrZXJFbmNo
YW50PiBtX3RleHRDaGVja2VyOworICAgIFN0cmluZyBtX3NwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7
CisgICAgYm9vbCBtX3NwZWxsQ2hlY2tpbmdFbmFibGVkOworfTsKKworI2VuZGlmIC8vIEVOQUJM
RShTUEVMTENIRUNLKQorCisjZW5kaWYgLy8gV2ViS2l0VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcApp
bmRleCA4YTA2MjVjLi4wMzg3ZTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIldlYktpdFBsdWdpblByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJL
aXRUZXh0Q2hlY2tlci5oIgogI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0ZpbGVTeXN0ZW0uaD4KQEAgLTcyLDYgKzczLDkgQEAgc3RydWN0IF9XZWJLaXRXZWJDb250
ZXh0UHJpdmF0ZSB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogICAgIFJlZlB0cjxXZWJLaXRH
ZW9sb2NhdGlvblByb3ZpZGVyPiBnZW9sb2NhdGlvblByb3ZpZGVyOwogI2VuZGlmCisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgUmVmUHRyPFdlYktpdFRleHRDaGVja2VyPiB0ZXh0Q2hlY2tl
cjsKKyNlbmRpZgogfTsKIAogc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAw
LCB9OwpAQCAtMTI3LDYgKzEzMSw5IEBAIHN0YXRpYyBncG9pbnRlciBjcmVhdGVEZWZhdWx0V2Vi
Q29udGV4dChncG9pbnRlcikKICAgICBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiB3a0dlb2xvY2F0
aW9uTWFuYWdlciA9IFdLQ29udGV4dEdldEdlb2xvY2F0aW9uTWFuYWdlcih3ZWJDb250ZXh0LT5w
cml2LT5jb250ZXh0LmdldCgpKTsKICAgICB3ZWJDb250ZXh0LT5wcml2LT5nZW9sb2NhdGlvblBy
b3ZpZGVyID0gV2ViS2l0R2VvbG9jYXRpb25Qcm92aWRlcjo6Y3JlYXRlKHdrR2VvbG9jYXRpb25N
YW5hZ2VyKTsKICNlbmRpZgorI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHdlYkNvbnRleHQt
PnByaXYtPnRleHRDaGVja2VyID0gV2ViS2l0VGV4dENoZWNrZXI6OmNyZWF0ZSgpOworI2VuZGlm
CiAgICAgcmV0dXJuIHdlYkNvbnRleHQuZ2V0KCk7CiB9CiAKQEAgLTQxOCw2ICs0MjUsOTAgQEAg
dm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZShXZWJLaXRXZWJDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBjaGEKICAgICBXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZ2lzdGVy
VVJJU2NoZW1lKGNvbnRleHQtPnByaXYtPnJlcXVlc3RNYW5hZ2VyLmdldCgpLCB3a1NjaGVtZS5n
ZXQoKSk7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2lu
Z19lbmFibGVkOgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdlYkNvbnRleHQKKyAqCisgKiBHZXQg
dGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBzcGVsbCBjaGVja2luZyBmZWF0dXJlLgorICoKKyAq
IFJldHVybnM6ICVUUlVFIElmIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQsIG9yICVGQUxTRSBv
dGhlcndpc2UuCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgRkFMU0UpOworCisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGNvbnRleHQtPnByaXYtPnRleHRDaGVj
a2VyLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZDoKKyAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CisgKiBAZW5hYmxl
ZDogVmFsdWUgdG8gYmUgc2V0CisgKgorICogRW5hYmxlIG9yIGRpc2FibGUgdGhlIHNwZWxsIGNo
ZWNraW5nIGZlYXR1cmUuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9j
aGVja2luZ19lbmFibGVkKFdlYktpdFdlYkNvbnRleHQgKmNvbnRleHQsIGdib29sZWFuIGVuYWJs
ZWQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4
dCkpOworCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgY29udGV4dC0+cHJpdi0+dGV4dENo
ZWNrZXItPnNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOworI2VuZGlmCit9CisKKy8q
KgorICogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXM6Cisg
KiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICoKKyAqIEdldCB0aGUgdGhlIGxpc3Qg
b2Ygc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGFzc29jaWF0ZWQgdG8KKyAqIEBjb250ZXh0LCBz
ZXBhcmF0ZWQgYnkgY29tbWFzLiBTZWUKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzKCkgZm9yIG1vcmUgZGV0YWlscworICogaW4gdGhlIGZvcm1hdCBv
ZiBldmVyeSBsYW5ndWFnZSBpbiB0aGUgbGlzdC4KKyAqCisgKiBUaGUgcmV0dXJuZWQgc3RyaW5n
IHNob3VsZCBiZSBmcmVlZCB3aXRoIGdfZnJlZSgpIHdoZW4gbm8gbG9uZ2VyCisgKiBuZWVkZWQu
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIGNvbW1hIHNlcGFyYXRlZCBsaXN0
IG9mIGxhbmd1YWdlcy4KKyAqLworZ2NoYXIqIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpLCAwKTsKKwor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVybiBnX3N0cmR1cChjb250ZXh0LT5wcml2
LT50ZXh0Q2hlY2tlci0+Z2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcygpLnV0ZjgoKS5kYXRhKCkp
OworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzOgorICogQGNvbnRleHQ6IGEgI1dl
YktpdFdlYkNvbnRleHQKKyAqIEBsYW5ndWFnZXM6IChhbGxvdy1ub25lKTogbmV3IGxpc3Qgb2Yg
c3BlbGwgY2hlY2tpbmcKKyAqIGxhbmd1YWdlcyBzZXBhcmF0ZWQgYnkgY29tbWFzLCBvciAlTlVM
TAorICoKKyAqIFNldCB0aGUgbGlzdCBvZiBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgdG8gYmUg
dXNlZCBmb3Igc3BlbGwKKyAqIGNoZWNraW5nLCBzZXBhcmF0ZWQgYnkgY29tbWFzLiBJbiBjYXNl
ICVOVUxMIGlzIHBhc3NlZCwgdGhlIGRlZmF1bHQKKyAqIHZhbHVlIGFzIHJldHVybmVkIGJ5IGd0
a19nZXRfZGVmYXVsdF9sYW5ndWFnZSgpIHdpbGwgYmUgdXNlZC4KKyAqCisgKiBUaGUgbG9jYWxl
IHN0cmluZyB0eXBpY2FsbHkgaXMgaW4gdGhlIGZvcm0gbGFuZ19DT1VOVFJZLCB3aGVyZSBsYW5n
CisgKiBpcyBhbiBJU08tNjM5IGxhbmd1YWdlIGNvZGUsIGFuZCBDT1VOVFJZIGlzIGFuIElTTy0z
MTY2IGNvdW50cnkgY29kZS4KKyAqIEZvciBpbnN0YW5jZSwgc3ZfRkkgZm9yIFN3ZWRpc2ggYXMg
d3JpdHRlbiBpbiBGaW5sYW5kIG9yIHB0X0JSCisgKiBmb3IgUG9ydHVndWVzZSBhcyB3cml0dGVu
IGluIEJyYXppbC4KKyAqLwordm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlcyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBnY2hhciogbGFu
Z3VhZ2VzKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNv
bnRleHQpKTsKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGNvbnRleHQtPnByaXYtPnRl
eHRDaGVja2VyLT5zZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKFN0cmluZyhsYW5ndWFnZXMpKTsK
KyNlbmRpZgorfQorCiBXZWJLaXREb3dubG9hZCogd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRl
RG93bmxvYWQoV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkKQogewogICAgIEdSZWZQdHI8V2ViS2l0
RG93bmxvYWQ+IGRvd25sb2FkID0gZG93bmxvYWRzTWFwKCkuZ2V0KHdrRG93bmxvYWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5o
CmluZGV4IDgzYjYwMWEuLjQzMDk4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKQEAgLTEzMiw2ICsxMzIsMjAgQEAgd2Vi
a2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUgICAgICAgICAgICAgIChXZWJLaXRX
ZWJDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgICpzY2hlbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFVSSVNjaGVt
ZVJlcXVlc3RDYWxsYmFjayBjYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgIHVz
ZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfY29udGV4dF9nZXRf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZCAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAg
ICAgKmNvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfY29udGV4dF9zZXRf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZCAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAg
ICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkKTsKK1dFQktJ
VF9BUEkgZ2NoYXIgKgord2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5n
dWFnZXMgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CisKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5n
dWFnZXMgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgICAgICAgICAgICAgICAgICAgKmxhbmd1YWdlcyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggMzE2NDE3Ny4uNzNmMDlkNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNl
Y3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0zMyw2ICszMywxMCBAQCB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyCiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxf
cGx1Z2luc19kaXJlY3RvcnkKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lucwogd2Via2l0
X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zX2ZpbmlzaAord2Via2l0X3dlYl9jb250ZXh0X2dldF9z
cGVsbF9jaGVja2luZ19lbmFibGVkCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWQKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcwogCiA8
U1VCU0VDVElPTiBVUkkgU2NoZW1lPgogV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2Vi
S2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggZTdkNDNhMS4uNzI1NzhjZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMjMxLDExICsyMzEsMzggQEAgc3RhdGljIHZv
aWQgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUoVVJJU2NoZW1lVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKICAgICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFj
a2luZ1Rlc3Q6OkxvYWRGYWlsZWQpKTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRT
cGVsbENoZWNrZXIoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdl
YktpdFdlYkNvbnRleHQ+IHdlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCkpOworCisgICAgLy8gU2V0IHRoZSBsYW5ndWFnZSB0byBhIHNwZWNpZmljIG9uZSwgYW4gZW1w
dHkgb25lIGFuZCBhIGxpc3Qgb2YgdGhlbS4KKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LmdldCgpLCAiZW5fVVMiKTsKKyAgICBH
T3duUHRyPGdjaGFyPiBjdXJyZW50TGFuZ3VhZ2Uod2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihjdXJyZW50TGFuZ3VhZ2UuZ2V0KCksID09LCAiZW5fVVMiKTsKKworICAgIHdlYmtpdF93
ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQuZ2V0KCks
IDApOworICAgIGN1cnJlbnRMYW5ndWFnZS5zZXQod2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihjdXJyZW50TGFuZ3VhZ2UuZ2V0KCksID09LCAiIik7CisKKyAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LmdldCgpLCAiZXNf
RVMsZW5fVVMiKTsKKyAgICBjdXJyZW50TGFuZ3VhZ2Uuc2V0KHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQuZ2V0KCkpKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlLmdldCgpLCA9PSwgImVzX0VTLGVuX1VTIik7CisK
KyAgICAvLyBDaGVjayBkaXNhYmxpbmcgYW5kIHJlLWVuYWJsaW5nIHNwZWxsIGNoZWNraW5nLgor
ICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250
ZXh0LmdldCgpLCBGQUxTRSk7CisgICAgZ2Jvb2xlYW4gaXNTcGVsbENoZWNraW5nRW5hYmxlZCA9
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0
LmdldCgpKTsKKyAgICBnX2Fzc2VydCghaXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CisgICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKHdlYkNvbnRleHQuZ2V0
KCksIFRSVUUpOworICAgIGlzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dC5nZXQoKSk7CisgICAgZ19h
c3NlcnQoaXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsK
ICAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVz
dFdlYkNvbnRleHREZWZhdWx0KTsKICAgICBQbHVnaW5zVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250
ZXh0IiwgImdldC1wbHVnaW5zIiwgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5zKTsKICAgICBVUklT
Y2hlbWVUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAidXJpLXNjaGVtZSIsIHRlc3RXZWJD
b250ZXh0VVJJU2NoZW1lKTsKKyAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAic3Bl
bGwtY2hlY2tlciIsIHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKTsKIH0KIAogdm9pZCBhZnRl
ckFsbCgpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggYjM2NzllYy4uNmEwM2Q2ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA3LTI0ICBNYXJpbyBTYW5jaGV6
IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbV0syXVtHVEtdIEltcGxl
bWVudCBhIG5ldyBzcGVsbCBjaGVja2VyIEFQSSBmb3IgV2ViS2l0MkdUSysKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMjY4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSWdub3JlIFdlYktpdFRleHRDaGVj
a2VyLiogcHJpdmF0ZSBmaWxlcyBmb3IgZ3RrLWRvYy4KKworICAgICAgICAqIGd0ay9nZW5lcmF0
ZS1ndGtkb2M6CisgICAgICAgIChnZXRfd2Via2l0Ml9vcHRpb25zKToKKwogMjAxMi0wNy0yMyAg
S2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVuYW1lIEVOQUJM
RV9NRVRFUl9UQUcgYW5kIEVOQUJMRV9QUk9HUkVTU19UQUcgdG8gRU5BQkxFX01FVEVSX0VMRU1F
TlQgYW5kIEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UIHJlc3BlY3RpdmVseQpkaWZmIC0tZ2l0IGEv
VG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKaW5k
ZXggODhlNjJlNy4uYjAwMjIyNCAxMDA3NTUKLS0tIGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2Rv
YworKysgYi9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCkBAIC05OSw2ICs5OSw3IEBAIGRlZiBn
ZXRfd2Via2l0Ml9vcHRpb25zKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9i
KHNyY19wYXRoKCcqQ2xpZW50KicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9i
Lmdsb2Ioc3JjX3BhdGgoJ1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS4qJykpICsgXAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0R2VvbG9jYXRp
b25Qcm92aWRlci4qJykpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihz
cmNfcGF0aCgnV2ViS2l0VGV4dENoZWNrZXIuKicpKSArIFwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbG9iLmdsb2IoZGVyaXZlZF9zb3VyY2VzX3BhdGgoJ3dlYmtpdDJndGsnLCAnd2Via2l0
MicsICdXZWJLaXRNYXJzaGFsLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xv
Yi5nbG9iKGRlcml2ZWRfc291cmNlc19wYXRoKCd3ZWJraXQyZ3RrJywgJ3dlYmtpdDInLCAnV2Vi
S2l0RW51bVR5cGVzLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9i
KHNyY19wYXRoKCd0ZXN0cy8qLmgnKSkKLS0gCjEuNy4xMC40Cgo=
</data>
<flag name="commit-queue"
          id="163144"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154076</attachid>
            <date>2012-07-24 08:53:00 -0700</date>
            <delta_ts>2012-07-27 07:03:25 -0700</delta_ts>
            <desc>Patch proposal + Unit tests + Documentation</desc>
            <filename>0001-2012-07-24-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>30785</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBmNDQyM2FmNzk0ODZkNzQxYjEzYjhhOWVmYjAxYjc2MDYzYjc1YjFmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE4IEp1bCAyMDEyIDE2OjM1OjA0ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wNy0yNCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IGEgbmV3IHNwZWxsIGNoZWNrZXIgQVBJIGZv
ciBXZWJLaXQyR1RLKwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MDI2OAoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
QWRkIGEgc2ltcGxlIHNwZWxsIGNoZWNraW5nIEFQSSB0byBXSzIsIGFsbG93aW5nIHRvIGVuYWJs
ZS9kaXNhYmxlCiAgICAgICAgdGhpcyBmZWF0dXJlIGFuZCB0byBkZWZpbmUgYSBsaXN0IG9mIGxh
bmd1YWdlcyBhc3NvY2lhdGVkIHRvIGl0LgoKICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQg
ZmxhZ3MgdG8gaGFuZGxlIHRoZSBTUEVMTENIRUNLIGZlYXR1cmUuCiAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOiBBZGRlZCBuZXcgZmlsZXMKCiAgICAgICAgQWRkZWQgbmV3IGludGVybmFs
IGNsYXNzIHRoYXQgd2lsbCBhY3QgYm90aCBhcyB0aGUgaW1wbGVtZW50YXRpb24KICAgICAgICBv
ZiBUZXh0Q2hlY2tlckNsaWVudCBhbmQgYXMgdGhlIG9iamVjdCBXZWJLaXRXZWJDb250ZXh0IHdp
bGwKICAgICAgICBkZXBlbmQgb24gdG8gaW1wbGVtZW50IHRoZSBuZXdseSBhZGRlZCBBUEkuCgog
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRlZC4K
ICAgICAgICAodG9UZXh0Q2hlY2tlcik6CiAgICAgICAgKGNvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZENhbGxiYWNrKToKICAgICAgICAoc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkQ2FsbGJhY2spOgogICAgICAgIChjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFjayk6CiAg
ICAgICAgKGd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2spOgogICAgICAgIChsZWFybldvcmRDYWxsYmFj
ayk6CiAgICAgICAgKGlnbm9yZVdvcmRDYWxsYmFjayk6CiAgICAgICAgKFdlYktpdFRleHRDaGVj
a2VyOjp+V2ViS2l0VGV4dENoZWNrZXIpOgogICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6Y3Jl
YXRlKToKICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OldlYktpdFRleHRDaGVja2VyKToKICAg
ICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CiAgICAgICAg
KFdlYktpdFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZCk6CiAgICAgICAgKFdlYktpdFRl
eHRDaGVja2VyOjpsZWFybldvcmQpOgogICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6aWdub3Jl
V29yZCk6CiAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5nRW5hYmxl
ZCk6CiAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmg6IEFkZGVk
LgogICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcik6CiAgICAgICAgKFdlYktpdFRleHRDaGVja2Vy
Ojppc1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6Omdl
dFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgoKICAgICAgICBBZGRlZCBXS1RleHRDaGVja2VyIHRv
IFdlYktpdFByaXZhdGUuaCwgbmVlZGVkIGluIFdlYktpdFRleHRDaGVja2VyLgoKICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKCiAgICAgICAgQWRkIG5ldyBBUEkg
dG8gV2ViS2l0V2ViQ29udGV4dCB0byBhbGxvdyBlbmFibGluZy9kaXNhYmxpbmcgdGhpcwogICAg
ICAgIHNwZWxsIGNoZWNraW5nIGZlYXR1cmUsIGFuZCB0byBzZXQvZ2V0IHRoZSBsaXN0IG9mIGxh
bmd1YWdlcyB1c2VkCiAgICAgICAgdG8gZGVjaWRlIHdoaWNoIGRpY3Rpb25hcmllcyB3aWxsIGJl
IGNvbnN1bHRlZC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmNwcDoKICAgICAgICAoX1dlYktpdFdlYkNvbnRleHRQcml2YXRlKToKICAgICAgICAoY3JlYXRl
RGVmYXVsdFdlYkNvbnRleHQpOgogICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxs
X2NoZWNraW5nX2VuYWJsZWQpOiBOZXcgQVBJLgogICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQpOiBEaXR0by4KICAgICAgICAod2Via2l0X3dlYl9j
b250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpOiBEaXR0by4KICAgICAgICAod2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpOiBEaXR0by4KICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaDoKCiAgICAgICAgTmV3
IHRlc3RzIGZvciBjaGVja2luZyB0aGUgbmV3IEFQSSBhZGRlZCB0byBXZWJLaXRXZWJDb250ZXh0
LgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0
LmNwcDoKICAgICAgICAodGVzdFdlYkNvbnRleHRTcGVsbENoZWNrZXIpOgogICAgICAgIChiZWZv
cmVBbGwpOgoKICAgICAgICBVcGRhdGUgZG9jdW1lbnRhdGlvbiB3aXRoIG5ldyBBUEkgaW4gV2Vi
S2l0V2ViQ29udGV4dC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstc2VjdGlvbnMudHh0OgoKMjAxMi0wNy0yNCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5j
aGV6QGlnYWxpYS5jb20+CgogICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IGEgbmV3IHNwZWxs
IGNoZWNrZXIgQVBJIGZvciBXZWJLaXQyR1RLKwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDI2OAoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KCiAgICAgICAgSWdub3JlIFdlYktpdFRleHRDaGVja2VyLiogcHJpdmF0ZSBmaWxlcyBm
b3IgZ3RrLWRvYy4KCiAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3RrZG9jOgogICAgICAgIChnZXRf
d2Via2l0Ml9vcHRpb25zKToKLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAxNDcgKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKwogU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCAgIHwgICAgMSArCiAu
Li4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwICAgICAgICB8ICAxNTcg
KysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFRleHRDaGVja2VyLmggIHwgICA1NyArKysrKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCB8ICAgOTEgKysrKysrKysrKysrCiAuLi4vV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggICB8ICAgMTQgKysKIC4uLi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IHwgICAgNCArCiAu
Li4vQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgICAgICAgICB8ICAgMjcg
KysrKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDEyICsrCiBUb29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgNTIwIGluc2VydGlvbnMoKykKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0
Q2hlY2tlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGUxODU1YTMuLmQzMDE4
ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTAgQEAKKzIwMTItMDctMjQgIE1hcmlvIFNhbmNo
ZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXSzJdW0dUS10gSW1w
bGVtZW50IGEgbmV3IHNwZWxsIGNoZWNrZXIgQVBJIGZvciBXZWJLaXQyR1RLKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyNjgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBzaW1wbGUgc3BlbGwg
Y2hlY2tpbmcgQVBJIHRvIFdLMiwgYWxsb3dpbmcgdG8gZW5hYmxlL2Rpc2FibGUKKyAgICAgICAg
dGhpcyBmZWF0dXJlIGFuZCB0byBkZWZpbmUgYSBsaXN0IG9mIGxhbmd1YWdlcyBhc3NvY2lhdGVk
IHRvIGl0LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBmbGFncyB0byBoYW5kbGUg
dGhlIFNQRUxMQ0hFQ0sgZmVhdHVyZS4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBB
ZGRlZCBuZXcgZmlsZXMKKworICAgICAgICBBZGRlZCBuZXcgaW50ZXJuYWwgY2xhc3MgdGhhdCB3
aWxsIGFjdCBib3RoIGFzIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBvZiBUZXh0Q2hlY2tl
ckNsaWVudCBhbmQgYXMgdGhlIG9iamVjdCBXZWJLaXRXZWJDb250ZXh0IHdpbGwKKyAgICAgICAg
ZGVwZW5kIG9uIHRvIGltcGxlbWVudCB0aGUgbmV3bHkgYWRkZWQgQVBJLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHRvVGV4dENoZWNrZXIpOgorICAgICAgICAoY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
Q2FsbGJhY2spOgorICAgICAgICAoc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2Fs
bGJhY2spOgorICAgICAgICAoY2hlY2tTcGVsbGluZ09mU3RyaW5nQ2FsbGJhY2spOgorICAgICAg
ICAoZ3Vlc3Nlc0ZvcldvcmRDYWxsYmFjayk6CisgICAgICAgIChsZWFybldvcmRDYWxsYmFjayk6
CisgICAgICAgIChpZ25vcmVXb3JkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0VGV4dENoZWNr
ZXI6On5XZWJLaXRUZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpXZWJLaXRUZXh0Q2hlY2tlcik6Cisg
ICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJL
aXRUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpp
Z25vcmVXb3JkKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5n
RW5hYmxlZCk6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0xh
bmd1YWdlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIu
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJLaXRU
ZXh0Q2hlY2tlcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXRUZXh0
Q2hlY2tlcjo6Z2V0U3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisKKyAgICAgICAgQWRkZWQgV0tU
ZXh0Q2hlY2tlciB0byBXZWJLaXRQcml2YXRlLmgsIG5lZWRlZCBpbiBXZWJLaXRUZXh0Q2hlY2tl
ci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKworICAg
ICAgICBBZGQgbmV3IEFQSSB0byBXZWJLaXRXZWJDb250ZXh0IHRvIGFsbG93IGVuYWJsaW5nL2Rp
c2FibGluZyB0aGlzCisgICAgICAgIHNwZWxsIGNoZWNraW5nIGZlYXR1cmUsIGFuZCB0byBzZXQv
Z2V0IHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB1c2VkCisgICAgICAgIHRvIGRlY2lkZSB3aGljaCBk
aWN0aW9uYXJpZXMgd2lsbCBiZSBjb25zdWx0ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKF9XZWJLaXRXZWJDb250ZXh0UHJp
dmF0ZSk6CisgICAgICAgIChjcmVhdGVEZWZhdWx0V2ViQ29udGV4dCk6CisgICAgICAgICh3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQpOiBOZXcgQVBJLgorICAg
ICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKTogRGl0
dG8uCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlcyk6IERpdHRvLgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXMpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0Lmg6CisKKyAgICAgICAgTmV3IHRlc3RzIGZvciBjaGVja2luZyB0aGUgbmV3
IEFQSSBhZGRlZCB0byBXZWJLaXRXZWJDb250ZXh0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAodGVzdFdlYkNv
bnRleHRTcGVsbENoZWNrZXIpOgorICAgICAgICAoYmVmb3JlQWxsKToKKworICAgICAgICBVcGRh
dGUgZG9jdW1lbnRhdGlvbiB3aXRoIG5ldyBzZWN0aW9ucyBhbmQgc3ltYm9scy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDoKKworMjAx
Mi0wNy0yMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW1dLMl1bR1RLXSBJbXBsZW1lbnQgYSBuZXcgc3BlbGwgY2hlY2tlciBBUEkgZm9yIFdl
YktpdDJHVEsrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MDI2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIG5ldyBzcGVsbCBjaGVja2luZyBBUEkgdG8gV0syLCBiYXNlZCBpbiBXSzEncyBpbXBs
ZW1lbnRhdGlvbiwgcHJvdmlkaW5nCisgICAgICAgIGEgbmV3IGludGVyZmFjZSBhbmQgYSBpbnRl
cm5hbCBpbXBsZW1lbnRhdGlvbiBieSBkZWZhdWx0IGJhc2VkIGluIGxpYmVuY2hhbnQuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6CisKKyAgICAgICAgUHJvdmlkZSBw
cml2YXRlIGltcGxlbWVudGF0aW9uIG9mIFdlYktpdFNwZWxsQ2hlY2tlciBiYXNlZCBpbiBsaWJl
bmNoYW50LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U3BlbGxDaGVja2Vy
RW5jaGFudC5jcHA6IEFkZGVkLgorICAgICAgICAoX1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQ
cml2YXRlKToKKyAgICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfZmluYWxpemUp
OgorICAgICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9jbGFzc19pbml0KToKKyAg
ICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfaW5pdCk6CisgICAgICAgIChjaGVj
a1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoZ2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAg
ICAodXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChnZXRBdXRvY29ycmVj
dFN1Z2dlc3Rpb25zRm9yTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAobGVhcm5Xb3JkKToKKyAg
ICAgICAgKGlnbm9yZVdvcmQpOgorICAgICAgICAod2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFu
dF9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9pbml0KToKKyAgICAgICAgKHdlYmtpdFNwZWxsQ2hl
Y2tlckVuY2hhbnRDcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNw
ZWxsQ2hlY2tlckVuY2hhbnQuaDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0U3BlbGxDaGVja2Vy
RW5jaGFudCk6CisgICAgICAgIChfV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudENsYXNzKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0
ZS5oOiBBZGRlZC4KKworICAgICAgICBJbXBsZW1lbnQgbmV3IEFQSSBjbGllbnQgZm9yIFVJUHJv
Y2VzcydzIFRleHRDaGVja2VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VGV4dENoZWNrZXJDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQpOgorICAgICAgICAoY2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKGd1ZXNzZXNG
b3JXb3JkKToKKyAgICAgICAgKGxlYXJuV29yZCk6CisgICAgICAgIChpZ25vcmVXb3JkKToKKyAg
ICAgICAgKGF0dGFjaFRleHRDaGVja2VyQ2xpZW50VG9Db250ZXh0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlckNsaWVudC5oOiBBZGRlZC4KKworICAgICAg
ICBBdHRhY2ggdGhlIG5ldyBBUEkgY2xpZW50IGZvciBUZXh0Q2hlY2tlciB0byB0aGUgZGVmYXVs
dCBXZWJLaXRXZWJDb250ZXh0CisgICAgICAgIHdoZW4gY3JlYXRpbmcgaXQsIGFuZCBpbnN0YWxs
IGEgZW5jaGFudC1iYXNlZCBzcGVsbCBjaGVja2VyIGdsb2JhbGx5LgorCisgICAgICAgIEFsc28s
IGFkZEFQSSB0byBXZWJLaXRXZWJDb250ZXh0IHRvIGFsbG93IGVuYWJsaW5nL2Rpc2FibGluZyB0
aGUgc3BlbGwKKyAgICAgICAgY2hlY2tpbmcgZmVhdHVyZSBnbG9iYWxseSwgYW5kIHVwZGF0ZSB0
aGUgbGlzdCBvZiBsYW5ndWFnZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSk6Cisg
ICAgICAgIChjcmVhdGVEZWZhdWx0V2ViQ29udGV4dCk6CisgICAgICAgICh3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3NwZWxsX2NoZWNrZXIpOgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dl
dF9zcGVsbF9jaGVja2VyKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxs
X2NoZWNraW5nX2VuYWJsZWQpOgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXMpOgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9z
cGVsbF9jaGVja2luZ19sYW5ndWFnZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYkNvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2
YXRlLmg6CisKKyAgICAgICAgTmV3IHRlc3RzIGZvciBjaGVja2luZyB0aGUgc3BlbGwgY2hlY2tp
bmcgQVBJCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2Vi
Q29udGV4dC5jcHA6CisgICAgICAgIChkb1NwZWxsQ2hlY2tlcldpdGhOb25FbmdsaXNoRGljdGlv
bmFyeSk6IE5ldyBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChkb1NwZWxsQ2hlY2tlclRlc3Rz
V2l0aEVuZ2xpc2hEaWN0aW9uYXJ5KTogRGl0dG8uCisgICAgICAgIChkb1NwZWxsQ2hlY2tlckln
bm9yZVdvcmRUZXN0cyk6IERpdHRvLgorICAgICAgICAodGVzdFdlYkNvbnRleHRTcGVsbENoZWNr
ZXIpOiBOZXcgdW5pdCB0ZXN0LgorICAgICAgICAoYmVmb3JlQWxsKTogQWRkZWQgdGhlIG5ldyB1
bml0IHRlc3QgdG8gdGhlIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgVXBkYXRlZCBtYWtlZmlsZXMu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIGZsYWdzIHRvIGhhbmRsZSB0aGUgU1BF
TExDSEVDSyBmZWF0dXJlLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIG5l
dyBmaWxlcworCisgICAgICAgIFVwZGF0ZSBkb2N1bWVudGF0aW9uIHdpdGggbmV3IEFQSSBpbiBX
ZWJLaXRXZWJDb250ZXh0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dDoKKwogMjAxMi0wNy0yMyAgS2VudCBUYW11cmEgIDx0a2VudEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVuYW1lIEVOQUJMRV9NRVRFUl9UQUcgYW5kIEVOQUJM
RV9QUk9HUkVTU19UQUcgdG8gRU5BQkxFX01FVEVSX0VMRU1FTlQgYW5kIEVOQUJMRV9QUk9HUkVT
U19FTEVNRU5UIHJlc3BlY3RpdmVseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA5MTA4YmI0Li4y
MTI0MzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTQzLDYgKzE0MywxMyBAQCBsaWJ3ZWJr
aXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9S
X1ZFUlNJT05AX2xhX0NQUAogCS1ETU9aX1gxMQogZW5kaWYKIAorIyBTcGVsbCBjaGVja2VyCitp
ZiBFTkFCTEVfU1BFTExDSEVDSworbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9W
RVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9DUFBGTEFHUyArPSBcCisJ
LURFTkFCTEVfU1BFTExDSEVDSz0xIFwKKwkkKEVOQ0hBTlRfQ0ZMQUdTKQorZW5kaWYKKwogIyBQ
bHVnaW4gcHJvY2VzcwogaWYgRU5BQkxFX1BMVUdJTl9QUk9DRVNTCiBsaWJ3ZWJraXQyZ3RrX0BX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05A
X2xhX0NQUEZMQUdTICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGNmYWUy
ZDcuLmVkZjI4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjk3LDYgKzY5
Nyw4IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0U2V0dGluZ3MuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRTZXR0aW5nc1ByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFVJQ2xpZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFVSSVJlcXVlc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAppbmRleCA3ZmQ1ZDc4Li5hYThhNzFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC00
MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
PgogI2luY2x1ZGUgPFdlYktpdDIvV0tTb3VwUmVxdWVzdE1hbmFnZXIuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL1dLU3RyaW5nLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1RleHRDaGVja2VyLmg+CiAj
aW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYWJkYjBjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDE1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKKworI2lmIEVOQUJMRShT
UEVMTENIRUNLKQorCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK3N0YXRpYyBpbmxpbmUgV2ViS2l0VGV4dENoZWNrZXIqIHRvVGV4dENoZWNr
ZXIoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
S2l0VGV4dENoZWNrZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Cit9CisKK3N0
YXRpYyBib29sIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNrKGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbykt
PmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2soYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkICpj
bGllbnRJbmZvKQoreworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPnNldFNwZWxsQ2hl
Y2tpbmdFbmFibGVkKGVuYWJsZWQpOworfQorCitzdGF0aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZT
dHJpbmdDYWxsYmFjayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1p
c3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lk
ICpjbGllbnRJbmZvKQoreworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyh0b0ltcGwodGV4dCktPnN0cmluZygpLCAqbWlzc3BlbGxpbmdMb2NhdGlv
biwgKm1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworc3RhdGljIFdLQXJyYXlSZWYgZ3Vlc3Nlc0Zv
cldvcmRDYWxsYmFjayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQg
KmNsaWVudEluZm8pCit7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IHRvVGV4dENoZWNr
ZXIoY2xpZW50SW5mbyktPmdldEd1ZXNzZXNGb3JXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkp
OworICAgIGlmIChndWVzc2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBX
S011dGFibGVBcnJheVJlZiB3a1N1Z2dlc3Rpb25zID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsK
KyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3Vlc3Nlcy5i
ZWdpbigpOyBpdGVyICE9IGd1ZXNzZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gd2tTdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGl0ZXItPnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgV0tBcnJheUFwcGVu
ZEl0ZW0od2tTdWdnZXN0aW9ucywgd2tTdWdnZXN0aW9uLmdldCgpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gd2tTdWdnZXN0aW9uczsKK30KKworc3RhdGljIHZvaWQgbGVhcm5Xb3JkQ2FsbGJhY2so
dWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQor
eworICAgIHRvVGV4dENoZWNrZXIoY2xpZW50SW5mbyktPmxlYXJuV29yZCh0b0ltcGwod29yZCkt
PnN0cmluZygpKTsKK30KKworc3RhdGljIHZvaWQgaWdub3JlV29yZENhbGxiYWNrKHVpbnQ2NF90
IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICB0
b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5pZ25vcmVXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5n
KCkpOworfQorCitXZWJLaXRUZXh0Q2hlY2tlcjo6fldlYktpdFRleHRDaGVja2VyKCkKK3sKK30K
KworUGFzc1JlZlB0cjxXZWJLaXRUZXh0Q2hlY2tlcj4gV2ViS2l0VGV4dENoZWNrZXI6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRUZXh0Q2hlY2tlcigpKTsKK30K
KworV2ViS2l0VGV4dENoZWNrZXI6OldlYktpdFRleHRDaGVja2VyKCkKKyAgICA6IG1fdGV4dENo
ZWNrZXIoV2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50OjpjcmVhdGUoKSkKKyAgICAsIG1fc3Bl
bGxDaGVja2luZ0VuYWJsZWQoZmFsc2UpCit7CisgICAgV0tUZXh0Q2hlY2tlckNsaWVudCB3a1Rl
eHRDaGVja2VyQ2xpZW50ID0geworICAgICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRW
ZXJzaW9uLAorICAgICAgICB0aGlzLCAvLyBjbGllbnRJbmZvCisgICAgICAgIDAsIC8vIGNvbnRp
bnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZAorICAgICAgICBjb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWRDYWxsYmFjaywKKyAgICAgICAgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkQ2FsbGJhY2ssCisgICAgICAgIDAsIC8vIGdyYW1tYXJDaGVja2luZ0VuYWJsZWQKKyAgICAg
ICAgMCwgLy8gc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZAorICAgICAgICAwLCAvLyB1bmlxdWVT
cGVsbERvY3VtZW50VGFnCisgICAgICAgIDAsIC8vIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcK
KyAgICAgICAgY2hlY2tTcGVsbGluZ09mU3RyaW5nQ2FsbGJhY2ssCisgICAgICAgIDAsIC8vIGNo
ZWNrR3JhbW1hck9mU3RyaW5nCisgICAgICAgIDAsIC8vIHNwZWxsaW5nVUlJc1Nob3dpbmcKKyAg
ICAgICAgMCwgLy8gdG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZworICAgICAgICAwLCAvLyB1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkCisgICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZworICAgICAgICBndWVzc2VzRm9yV29yZENhbGxiYWNrLAor
ICAgICAgICBsZWFybldvcmRDYWxsYmFjaywKKyAgICAgICAgaWdub3JlV29yZENhbGxiYWNrLAor
ICAgIH07CisgICAgV0tUZXh0Q2hlY2tlclNldENsaWVudCgmd2tUZXh0Q2hlY2tlckNsaWVudCk7
Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxs
aW5nTGVuZ3RoKQoreworICAgIG1fdGV4dENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhz
dHJpbmcsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKworVmVj
dG9yPFN0cmluZz4gV2ViS2l0VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0
cmluZyYgd29yZCkKK3sKKyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlci0+Z2V0R3Vlc3Nlc0Zvcldv
cmQod29yZCk7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OmxlYXJuV29yZChjb25zdCBT
dHJpbmcmIHdvcmQpCit7CisgICAgbV90ZXh0Q2hlY2tlci0+bGVhcm5Xb3JkKHdvcmQpOworfQor
Cit2b2lkIFdlYktpdFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkK
K3sKKyAgICBtX3RleHRDaGVja2VyLT5pZ25vcmVXb3JkKHdvcmQpOworfQorCit2b2lkIFdlYktp
dFRleHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7Cisg
ICAgaWYgKG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworCisgICAgLy8gV2UgbmVl
ZCB0byBub3RpZnkgdGhlIFdlYiBwcm9jZXNzIHRoYXQgdGhpcyBoYXMgY2hhbmdlZC4KKyAgICBX
S1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVu
YWJsZWQpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpzZXRTcGVsbENoZWNraW5nTGFu
Z3VhZ2VzKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2VzKQoreworICAgIGlmIChtX3NwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMgPT0gbGFuZ3VhZ2VzKQorICAgICAgICByZXR1cm47CisgICAgbV9zcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzID0gbGFuZ3VhZ2VzOworCisgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUg
dGhlIGxhbmd1YWdlcyBpbiB0aGUgZW5jaGFudC1iYXNlZCBjaGVja2VyIHRvby4KKyAgICBtX3Rl
eHRDaGVja2VyLT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cit9Cisj
ZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yMjk1NjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuaApAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGV4dENo
ZWNrZXJfaAorI2RlZmluZSBXZWJLaXRUZXh0Q2hlY2tlcl9oCisKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKworI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNrZXJFbmNoYW50Lmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworY2xhc3MgV2ViS2l0VGV4dENoZWNrZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxXZWJLaXRUZXh0Q2hlY2tlcj4geworcHVibGljOgorICAgIHZpcnR1YWwgfldlYktp
dFRleHRDaGVja2VyKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViS2l0VGV4dENoZWNrZXI+
IGNyZWF0ZSgpOworCisgICAgLy8gRm9yIGltcGxlbWVudGluZyBUZXh0Q2hlY2tlckNsaWVudC4K
KyAgICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB7IHJldHVybiBtX3NwZWxsQ2hlY2tp
bmdFbmFibGVkOyB9CisgICAgdm9pZCBzZXRTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJs
ZWQpOworICAgIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBpbnQmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCYgbWlzc3BlbGxpbmdMZW5ndGgpOworICAg
IFZlY3RvcjxTdHJpbmc+IGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7Cisg
ICAgdm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKTsKKyAgICB2b2lkIGlnbm9yZVdv
cmQoY29uc3QgU3RyaW5nJiB3b3JkKTsKKworICAgIC8vIFRvIGJlIGNhbGxlZCBmcm9tIFdlYktp
dFdlYkNvbnRleHQgb25seS4KKyAgICBjb25zdCBTdHJpbmcgZ2V0U3BlbGxDaGVja2luZ0xhbmd1
YWdlcygpIHsgcmV0dXJuIG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlczsgfQorICAgIHZvaWQgc2V0
U3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBTdHJpbmcmIHNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMpOworCitwcml2YXRlOgorICAgIFdlYktpdFRleHRDaGVja2VyKCk7CisKKyAgICBSZWZQdHI8
V2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50PiBtX3RleHRDaGVja2VyOworICAgIFN0cmluZyBt
X3NwZWxsQ2hlY2tpbmdMYW5ndWFnZXM7CisgICAgYm9vbCBtX3NwZWxsQ2hlY2tpbmdFbmFibGVk
OworfTsKKworI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQorCisjZW5kaWYgLy8gV2ViS2l0
VGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCA4YTA2MjVjLi4wMzg3ZTM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNw
cApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIldlYktpdFBsdWdpblByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UmVxdWVzdE1hbmFnZXJD
bGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgogI2luY2x1ZGUgIldlYktp
dFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFBy
aXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KQEAgLTcyLDYgKzczLDkg
QEAgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FU
SU9OKQogICAgIFJlZlB0cjxXZWJLaXRHZW9sb2NhdGlvblByb3ZpZGVyPiBnZW9sb2NhdGlvblBy
b3ZpZGVyOwogI2VuZGlmCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgUmVmUHRyPFdlYktp
dFRleHRDaGVja2VyPiB0ZXh0Q2hlY2tlcjsKKyNlbmRpZgogfTsKIAogc3RhdGljIGd1aW50IHNp
Z25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtMTI3LDYgKzEzMSw5IEBAIHN0YXRpYyBn
cG9pbnRlciBjcmVhdGVEZWZhdWx0V2ViQ29udGV4dChncG9pbnRlcikKICAgICBXS0dlb2xvY2F0
aW9uTWFuYWdlclJlZiB3a0dlb2xvY2F0aW9uTWFuYWdlciA9IFdLQ29udGV4dEdldEdlb2xvY2F0
aW9uTWFuYWdlcih3ZWJDb250ZXh0LT5wcml2LT5jb250ZXh0LmdldCgpKTsKICAgICB3ZWJDb250
ZXh0LT5wcml2LT5nZW9sb2NhdGlvblByb3ZpZGVyID0gV2ViS2l0R2VvbG9jYXRpb25Qcm92aWRl
cjo6Y3JlYXRlKHdrR2VvbG9jYXRpb25NYW5hZ2VyKTsKICNlbmRpZgorI2lmIEVOQUJMRShTUEVM
TENIRUNLKQorICAgIHdlYkNvbnRleHQtPnByaXYtPnRleHRDaGVja2VyID0gV2ViS2l0VGV4dENo
ZWNrZXI6OmNyZWF0ZSgpOworI2VuZGlmCiAgICAgcmV0dXJuIHdlYkNvbnRleHQuZ2V0KCk7CiB9
CiAKQEAgLTQxOCw2ICs0MjUsOTAgQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJf
dXJpX3NjaGVtZShXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGEKICAgICBXS1Nv
dXBSZXF1ZXN0TWFuYWdlclJlZ2lzdGVyVVJJU2NoZW1lKGNvbnRleHQtPnByaXYtPnJlcXVlc3RN
YW5hZ2VyLmdldCgpLCB3a1NjaGVtZS5nZXQoKSk7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl9j
b250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFibGVkOgorICogQGNvbnRleHQ6IGEgI1dlYktp
dFdlYkNvbnRleHQKKyAqCisgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBzcGVsbCBj
aGVja2luZyBmZWF0dXJlLgorICoKKyAqIFJldHVybnM6ICVUUlVFIElmIHNwZWxsIGNoZWNraW5n
IGlzIGVuYWJsZWQsIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKi8KK2dib29sZWFuIHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZChXZWJLaXRXZWJDb250ZXh0ICpj
b250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVY
VChjb250ZXh0KSwgRkFMU0UpOworCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJu
IGNvbnRleHQtPnByaXYtPnRleHRDaGVja2VyLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Cisj
ZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZDoKKyAqIEBjb250ZXh0OiBhICNXZWJL
aXRXZWJDb250ZXh0CisgKiBAZW5hYmxlZDogVmFsdWUgdG8gYmUgc2V0CisgKgorICogRW5hYmxl
IG9yIGRpc2FibGUgdGhlIHNwZWxsIGNoZWNraW5nIGZlYXR1cmUuCisgKi8KK3ZvaWQgd2Via2l0
X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKFdlYktpdFdlYkNvbnRleHQg
KmNvbnRleHQsIGdib29sZWFuIGVuYWJsZWQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOworCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisg
ICAgY29udGV4dC0+cHJpdi0+dGV4dENoZWNrZXItPnNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGVu
YWJsZWQpOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXM6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAor
ICoKKyAqIEdldCB0aGUgdGhlIGxpc3Qgb2Ygc3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGFzc29j
aWF0ZWQgdG8KKyAqIEBjb250ZXh0LCBzZXBhcmF0ZWQgYnkgY29tbWFzLiBTZWUKKyAqIHdlYmtp
dF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKCkgZm9yIG1vcmUgZGV0
YWlscworICogaW4gdGhlIGZvcm1hdCBvZiBldmVyeSBsYW5ndWFnZSBpbiB0aGUgbGlzdC4KKyAq
CisgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIHNob3VsZCBiZSBmcmVlZCB3aXRoIGdfZnJlZSgpIHdo
ZW4gbm8gbG9uZ2VyCisgKiBuZWVkZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGxhbmd1YWdlcy4KKyAqLworZ2NoYXIqIHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKFdlYktpdFdlYkNvbnRl
eHQqIGNvbnRleHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9D
T05URVhUKGNvbnRleHQpLCAwKTsKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHJldHVy
biBnX3N0cmR1cChjb250ZXh0LT5wcml2LT50ZXh0Q2hlY2tlci0+Z2V0U3BlbGxDaGVja2luZ0xh
bmd1YWdlcygpLnV0ZjgoKS5kYXRhKCkpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgor
fQorCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzOgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdlYkNvbnRleHQKKyAqIEBsYW5ndWFnZXM6IChh
bGxvdy1ub25lKTogbmV3IGxpc3Qgb2Ygc3BlbGwgY2hlY2tpbmcKKyAqIGxhbmd1YWdlcyBzZXBh
cmF0ZWQgYnkgY29tbWFzLCBvciAlTlVMTAorICoKKyAqIFNldCB0aGUgbGlzdCBvZiBzcGVsbCBj
aGVja2luZyBsYW5ndWFnZXMgdG8gYmUgdXNlZCBmb3Igc3BlbGwKKyAqIGNoZWNraW5nLCBzZXBh
cmF0ZWQgYnkgY29tbWFzLiBJbiBjYXNlICVOVUxMIGlzIHBhc3NlZCwgdGhlIGRlZmF1bHQKKyAq
IHZhbHVlIGFzIHJldHVybmVkIGJ5IGd0a19nZXRfZGVmYXVsdF9sYW5ndWFnZSgpIHdpbGwgYmUg
dXNlZC4KKyAqCisgKiBUaGUgbG9jYWxlIHN0cmluZyB0eXBpY2FsbHkgaXMgaW4gdGhlIGZvcm0g
bGFuZ19DT1VOVFJZLCB3aGVyZSBsYW5nCisgKiBpcyBhbiBJU08tNjM5IGxhbmd1YWdlIGNvZGUs
IGFuZCBDT1VOVFJZIGlzIGFuIElTTy0zMTY2IGNvdW50cnkgY29kZS4KKyAqIEZvciBpbnN0YW5j
ZSwgc3ZfRkkgZm9yIFN3ZWRpc2ggYXMgd3JpdHRlbiBpbiBGaW5sYW5kIG9yIHB0X0JSCisgKiBm
b3IgUG9ydHVndWVzZSBhcyB3cml0dGVuIGluIEJyYXppbC4KKyAqLwordm9pZCB3ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyhXZWJLaXRXZWJDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBnY2hhciogbGFuZ3VhZ2VzKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKKworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIGNvbnRleHQtPnByaXYtPnRleHRDaGVja2VyLT5zZXRTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKFN0cmluZyhsYW5ndWFnZXMpKTsKKyNlbmRpZgorfQorCiBXZWJLaXREb3dubG9hZCogd2Vi
a2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQoV0tEb3dubG9hZFJlZiB3a0Rvd25sb2Fk
KQogewogICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gZG93bmxvYWRzTWFw
KCkuZ2V0KHdrRG93bmxvYWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCmluZGV4IDgzYjYwMWEuLjQzMDk4YjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgK
QEAgLTEzMiw2ICsxMzIsMjAgQEAgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hl
bWUgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAg
ICAgICpzY2hlbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayBjYWxsYmFjaywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIg
ICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCAgICAgICAoV2Vi
S2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCAgICAgICAoV2Vi
S2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAg
ICAgICAgICBlbmFibGVkKTsKK1dFQktJVF9BUEkgZ2NoYXIgKgord2Via2l0X3dlYl9jb250ZXh0
X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAg
ICAgICAgICAqY29udGV4dCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9jb250ZXh0
X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAg
ICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICAgKmxhbmd1YWdlcyk7
CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXgg
MzE2NDE3Ny4uNzNmMDlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0zMyw2ICsz
MywxMCBAQCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyCiB3ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3RvcnkKIHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfcGx1Z2lucwogd2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zX2ZpbmlzaAor
d2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFibGVkCit3ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQKK3dlYmtpdF93ZWJfY29udGV4dF9n
ZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlcwogCiA8U1VCU0VDVElPTiBVUkkgU2NoZW1lPgogV2ViS2l0VVJJ
U2NoZW1lUmVxdWVzdENhbGxiYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXgg
ZTdkNDNhMS4uNzI1NzhjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMjMx
LDExICsyMzEsMzggQEAgc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUoVVJJU2No
ZW1lVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydCghdGVzdC0+bV9sb2Fk
RXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQpKTsKIH0KIAorc3Rh
dGljIHZvaWQgdGVzdFdlYkNvbnRleHRTcGVsbENoZWNrZXIoVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdFdlYkNvbnRleHQ+IHdlYkNvbnRleHQod2Via2l0
X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworCisgICAgLy8gU2V0IHRoZSBsYW5ndWFnZSB0
byBhIHNwZWNpZmljIG9uZSwgYW4gZW1wdHkgb25lIGFuZCBhIGxpc3Qgb2YgdGhlbS4KKyAgICB3
ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0
LmdldCgpLCAiZW5fVVMiKTsKKyAgICBHT3duUHRyPGdjaGFyPiBjdXJyZW50TGFuZ3VhZ2Uod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dC5n
ZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2UuZ2V0KCksID09LCAi
ZW5fVVMiKTsKKworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzKHdlYkNvbnRleHQuZ2V0KCksIDApOworICAgIGN1cnJlbnRMYW5ndWFnZS5zZXQod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dC5n
ZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2UuZ2V0KCksID09LCAi
Iik7CisKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
cyh3ZWJDb250ZXh0LmdldCgpLCAiZXNfRVMsZW5fVVMiKTsKKyAgICBjdXJyZW50TGFuZ3VhZ2Uu
c2V0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNv
bnRleHQuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlLmdldCgp
LCA9PSwgImVzX0VTLGVuX1VTIik7CisKKyAgICAvLyBDaGVjayBkaXNhYmxpbmcgYW5kIHJlLWVu
YWJsaW5nIHNwZWxsIGNoZWNraW5nLgorICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LmdldCgpLCBGQUxTRSk7CisgICAgZ2Jvb2xlYW4g
aXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LmdldCgpKTsKKyAgICBnX2Fzc2VydCghaXNTcGVsbENo
ZWNraW5nRW5hYmxlZCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2lu
Z19lbmFibGVkKHdlYkNvbnRleHQuZ2V0KCksIFRSVUUpOworICAgIGlzU3BlbGxDaGVja2luZ0Vu
YWJsZWQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2Vi
Q29udGV4dC5nZXQoKSk7CisgICAgZ19hc3NlcnQoaXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Cit9
CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsKICAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQi
LCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYkNvbnRleHREZWZhdWx0KTsKICAgICBQbHVnaW5z
VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImdldC1wbHVnaW5zIiwgdGVzdFdlYkNvbnRl
eHRHZXRQbHVnaW5zKTsKICAgICBVUklTY2hlbWVUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQi
LCAidXJpLXNjaGVtZSIsIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKTsKKyAgICBUZXN0OjphZGQo
IldlYktpdFdlYkNvbnRleHQiLCAic3BlbGwtY2hlY2tlciIsIHRlc3RXZWJDb250ZXh0U3BlbGxD
aGVja2VyKTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjM2NzllYy4uNmEwM2Q2ZiAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDEyLTA3LTI0ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbV0syXVtHVEtdIEltcGxlbWVudCBhIG5ldyBzcGVsbCBjaGVja2VyIEFQSSBmb3Ig
V2ViS2l0MkdUSysKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkwMjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSWdub3JlIFdlYktpdFRleHRDaGVja2VyLiogcHJpdmF0ZSBmaWxlcyBmb3IgZ3RrLWRvYy4K
KworICAgICAgICAqIGd0ay9nZW5lcmF0ZS1ndGtkb2M6CisgICAgICAgIChnZXRfd2Via2l0Ml9v
cHRpb25zKToKKwogMjAxMi0wNy0yMyAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmVuYW1lIEVOQUJMRV9NRVRFUl9UQUcgYW5kIEVOQUJMRV9QUk9HUkVTU19U
QUcgdG8gRU5BQkxFX01FVEVSX0VMRU1FTlQgYW5kIEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UIHJl
c3BlY3RpdmVseQpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYyBiL1Rvb2xz
L2d0ay9nZW5lcmF0ZS1ndGtkb2MKaW5kZXggODhlNjJlNy4uYjAwMjIyNCAxMDA3NTUKLS0tIGEv
VG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYworKysgYi9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9j
CkBAIC05OSw2ICs5OSw3IEBAIGRlZiBnZXRfd2Via2l0Ml9vcHRpb25zKCk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCcqQ2xpZW50KicpKSArIFwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYktpdFdlYlZpZXdCYXNl
QWNjZXNzaWJsZS4qJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihz
cmNfcGF0aCgnV2ViS2l0R2VvbG9jYXRpb25Qcm92aWRlci4qJykpICsgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0VGV4dENoZWNrZXIuKicpKSAr
IFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2IoZGVyaXZlZF9zb3VyY2VzX3Bh
dGgoJ3dlYmtpdDJndGsnLCAnd2Via2l0MicsICdXZWJLaXRNYXJzaGFsLionKSkgKyBcCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKGRlcml2ZWRfc291cmNlc19wYXRoKCd3ZWJr
aXQyZ3RrJywgJ3dlYmtpdDInLCAnV2ViS2l0RW51bVR5cGVzLionKSkgKyBcCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCd0ZXN0cy8qLmgnKSkKLS0gCjEuNy4x
MC40Cgo=
</data>
<flag name="review"
          id="163216"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154937</attachid>
            <date>2012-07-27 07:03:25 -0700</date>
            <delta_ts>2012-07-31 05:44:07 -0700</delta_ts>
            <desc> Patch proposal + Unit tests + Documentation</desc>
            <filename>0001-Patch-for-90298.patch</filename>
            <type>text/plain</type>
            <size>24694</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA2ZmIzOTE5YzQ5YmQ2ZTIxYTRkYzA1ODBhYzQwMDI3NzY0ZjJhM2VjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUaHUsIDI2IEp1bCAyMDEyIDE3OjUyOjUxICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gUGF0Y2ggZm9yIDkwMjk4CgotLS0KIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICA2NyArKysrKysrKysKIFNvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArLQogU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCAgIHwgICAgMSArCiAuLi4vVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwICAgICAgICB8ICAxNTcgKysrKysr
KysrKysrKysrKysrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRD
aGVja2VyLmggIHwgICA1NiArKysrKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJDb250ZXh0LmNwcCB8ICAgOTIgKysrKysrKysrKysrCiAuLi4vV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggICB8ICAgMTQgKysKIC4uLi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IHwgICAgNCArCiAuLi4vQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgICAgICAgICB8ICAgMjcgKysrKwog
VG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEy
ICsrCiBUb29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgNDQzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o
LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRUZXh0Q2hlY2tlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGM5M2M1
ZWUuLjIyNjQ2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAxMi0wNy0yNiAgTWFy
aW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dLMl1b
R1RLXSBJbXBsZW1lbnQgYSBuZXcgc3BlbGwgY2hlY2tlciBBUEkgZm9yIFdlYktpdDJHVEsrCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDI2OAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHNpbXBs
ZSBzcGVsbCBjaGVja2luZyBBUEkgdG8gV0syLCBhbGxvd2luZyB0byBlbmFibGUvZGlzYWJsZQor
ICAgICAgICB0aGlzIGZlYXR1cmUgYW5kIHRvIGRlZmluZSBhIGxpc3Qgb2YgbGFuZ3VhZ2VzIGFz
c29jaWF0ZWQgdG8gaXQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIGZsYWdzIHRv
IGhhbmRsZSB0aGUgU1BFTExDSEVDSyBmZWF0dXJlLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06IEFkZGVkIG5ldyBmaWxlcworCisgICAgICAgIEFkZGVkIG5ldyBpbnRlcm5hbCBjbGFz
cyB0aGF0IHdpbGwgYWN0IGJvdGggYXMgdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgIG9mIFRl
eHRDaGVja2VyQ2xpZW50IGFuZCBhcyB0aGUgb2JqZWN0IFdlYktpdFdlYkNvbnRleHQgd2lsbAor
ICAgICAgICBkZXBlbmQgb24gdG8gaW1wbGVtZW50IHRoZSBuZXdseSBhZGRlZCBBUEkuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHA6IEFkZGVkLgor
ICAgICAgICAodG9UZXh0Q2hlY2tlcik6CisgICAgICAgIChjb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWRDYWxsYmFjayk6CisgICAgICAgIChzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWRDYWxsYmFjayk6CisgICAgICAgIChjaGVja1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFjayk6
CisgICAgICAgIChndWVzc2VzRm9yV29yZENhbGxiYWNrKToKKyAgICAgICAgKGxlYXJuV29yZENh
bGxiYWNrKToKKyAgICAgICAgKGlnbm9yZVdvcmRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXRU
ZXh0Q2hlY2tlcjo6fldlYktpdFRleHRDaGVja2VyKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVj
a2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OldlYktpdFRleHRDaGVj
a2VyKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcp
OgorICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAg
ICAgKFdlYktpdFRleHRDaGVja2VyOjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0VGV4dENo
ZWNrZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OnNldFNwZWxs
Q2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpzZXRTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0
Q2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyKToKKyAgICAgICAg
KFdlYktpdFRleHRDaGVja2VyOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdl
YktpdFRleHRDaGVja2VyOjpnZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKworICAgICAgICBB
ZGRlZCBXS1RleHRDaGVja2VyIHRvIFdlYktpdFByaXZhdGUuaCwgbmVlZGVkIGluIFdlYktpdFRl
eHRDaGVja2VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5o
OgorCisgICAgICAgIEFkZCBuZXcgQVBJIHRvIFdlYktpdFdlYkNvbnRleHQgdG8gYWxsb3cgZW5h
YmxpbmcvZGlzYWJsaW5nIHRoaXMKKyAgICAgICAgc3BlbGwgY2hlY2tpbmcgZmVhdHVyZSwgYW5k
IHRvIHNldC9nZXQgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHVzZWQKKyAgICAgICAgdG8gZGVjaWRl
IHdoaWNoIGRpY3Rpb25hcmllcyB3aWxsIGJlIGNvbnN1bHRlZC4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAoX1dlYktpdFdlYkNv
bnRleHRQcml2YXRlKToKKyAgICAgICAgKGNyZWF0ZURlZmF1bHRXZWJDb250ZXh0KToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCk6IE5ldyBB
UEkuCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJs
ZWQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlcyk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkNvbnRleHQuaDoKKworICAgICAgICBOZXcgdGVzdHMgZm9yIGNoZWNraW5n
IHRoZSBuZXcgQVBJIGFkZGVkIHRvIFdlYktpdFdlYkNvbnRleHQuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgICh0
ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcik6CisgICAgICAgIChiZWZvcmVBbGwpOgorCisgICAg
ICAgIFVwZGF0ZSBkb2N1bWVudGF0aW9uIHdpdGggbmV3IHNlY3Rpb25zIGFuZCBzeW1ib2xzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0
OgorCiAyMDEyLTA3LTI1ICBTZW9ranUgS3dvbiAgPHNlb2tqdS5rd29uQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFtFRkxdW1dLMl0gSW1wbGVtZW50IHRoZSBpbnNwZWN0b3IgZm9yIFdlYktpdFRl
c3RSdW5uZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggOTEwOGJiNC4uZWVkMDI5NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0KQEAgLTE2Miw3ICsxNjIsNiBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRH
VEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0xJ
QgogCWxpYldlYkNvcmVHdGsubGEgXAogCSQoQ0FJUk9fTElCUykgXAogCSQoQ09WRVJBR0VfTERG
TEFHUykgXAotCSQoRU5DSEFOVF9MSUJTKSBcCiAJJChHQUlMX0xJQlMpIFwKIAkkKEdBTUVQQURf
TElCUykgXAogCSQoR0VPQ0xVRV9MSUJTKSBcCkBAIC0xODMsNiArMTgyLDE2IEBAIGxpYndlYmtp
dDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkBfbGFfTElCCiAJJChYVF9MSUJTKSBcCiAJJChaTElCX0xJQlMpCiAKK2lmIEVOQUJM
RV9TUEVMTENIRUNLCitsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05A
X0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0NQUEZMQUdTICs9IFwKKwktREVOQUJM
RV9TUEVMTENIRUNLPTEgXAorCSQoRU5DSEFOVF9DRkxBR1MpCisKK2xpYndlYmtpdDJndGtfQFdF
QktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBf
bGFfTElCQUREICs9IFwKKwkkKEVOQ0hBTlRfTElCUykKK2VuZGlmCisKKwogaWYgRU5BQkxFX1dF
QktJVDIKIHBrZ2NvbmZpZ19EQVRBICs9IFNvdXJjZS9XZWJLaXQyL3dlYmtpdDJndGstQFdFQktJ
VEdUS19BUElfVkVSU0lPTkAucGMKIGVuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCBmM2VkOTg0Li5hNTgwNmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTcwMSw2ICs3MDEsOCBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3NQcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmNwcCBcCisJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuaCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXF1ZXN0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKaW5kZXggN2ZkNWQ3OC4uYWE4YTcx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZh
dGUuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tTZXJpYWxpemVkU2Ny
aXB0VmFsdWUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLU291cFJlcXVlc3RNYW5hZ2VyLmg+CiAj
aW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tUZXh0Q2hl
Y2tlci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgogI2luY2x1ZGUgPGdsaWIuaD4K
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjFiMDJiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKQEAgLTAsMCArMSwx
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRleHRDaGVja2VyLmgiCisKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdGF0aWMgaW5saW5lIFdlYktpdFRleHRDaGVja2VyKiB0
b1RleHRDaGVja2VyKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYktpdFRleHRDaGVja2VyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykp
OworfQorCitzdGF0aWMgYm9vbCBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFj
ayhjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiB0b1RleHRDaGVja2VyKGNs
aWVudEluZm8pLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNl
dENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNrKGJvb2wgZW5hYmxlZCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5z
ZXRTcGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tT
cGVsbGluZ09mU3RyaW5nQ2FsbGJhY2sodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBp
bnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8p
LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxs
aW5nTG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3N0YXRpYyBXS0FycmF5UmVm
IGd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2sodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXMgPSB0
b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5nZXRHdWVzc2VzRm9yV29yZCh0b0ltcGwod29yZCkt
PnN0cmluZygpKTsKKyAgICBpZiAoZ3Vlc3Nlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgV0tNdXRhYmxlQXJyYXlSZWYgd2tTdWdnZXN0aW9ucyA9IFdLTXV0YWJsZUFycmF5
Q3JlYXRlKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IGd1ZXNzZXMuYmVnaW4oKTsgaXRlciAhPSBndWVzc2VzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhpdGVyLT51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIFdL
QXJyYXlBcHBlbmRJdGVtKHdrU3VnZ2VzdGlvbnMsIHdrU3VnZ2VzdGlvbi5nZXQoKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHdrU3VnZ2VzdGlvbnM7Cit9CisKK3N0YXRpYyB2b2lkIGxlYXJuV29y
ZENhbGxiYWNrKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICB0b1RleHRDaGVja2VyKGNsaWVudEluZm8pLT5sZWFybldvcmQodG9J
bXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGlnbm9yZVdvcmRDYWxsYmFj
ayh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgdG9UZXh0Q2hlY2tlcihjbGllbnRJbmZvKS0+aWdub3JlV29yZCh0b0ltcGwod29y
ZCktPnN0cmluZygpKTsKK30KKworV2ViS2l0VGV4dENoZWNrZXI6On5XZWJLaXRUZXh0Q2hlY2tl
cigpCit7Cit9CisKK1Bhc3NPd25QdHI8V2ViS2l0VGV4dENoZWNrZXI+IFdlYktpdFRleHRDaGVj
a2VyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViS2l0VGV4dENoZWNr
ZXIoKSk7Cit9CisKK1dlYktpdFRleHRDaGVja2VyOjpXZWJLaXRUZXh0Q2hlY2tlcigpCisgICAg
OiBtX3RleHRDaGVja2VyKFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudDo6Y3JlYXRlKCkpCisg
ICAgLCBtX3NwZWxsQ2hlY2tpbmdFbmFibGVkKGZhbHNlKQoreworICAgIFdLVGV4dENoZWNrZXJD
bGllbnQgd2tUZXh0Q2hlY2tlckNsaWVudCA9IHsKKyAgICAgICAga1dLVGV4dENoZWNrZXJDbGll
bnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgdGhpcywgLy8gY2xpZW50SW5mbworICAgICAgICAw
LCAvLyBjb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQKKyAgICAgICAgY29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2ssCisgICAgICAgIHNldENvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZENhbGxiYWNrLAorICAgICAgICAwLCAvLyBncmFtbWFyQ2hlY2tpbmdFbmFi
bGVkCisgICAgICAgIDAsIC8vIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQKKyAgICAgICAgMCwg
Ly8gdW5pcXVlU3BlbGxEb2N1bWVudFRhZworICAgICAgICAwLCAvLyBjbG9zZVNwZWxsRG9jdW1l
bnRXaXRoVGFnCisgICAgICAgIGNoZWNrU3BlbGxpbmdPZlN0cmluZ0NhbGxiYWNrLAorICAgICAg
ICAwLCAvLyBjaGVja0dyYW1tYXJPZlN0cmluZworICAgICAgICAwLCAvLyBzcGVsbGluZ1VJSXNT
aG93aW5nCisgICAgICAgIDAsIC8vIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcKKyAgICAgICAg
MCwgLy8gdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZAorICAgICAgICAwLCAvLyB1
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcKKyAgICAgICAgZ3Vlc3Nlc0ZvcldvcmRD
YWxsYmFjaywKKyAgICAgICAgbGVhcm5Xb3JkQ2FsbGJhY2ssCisgICAgICAgIGlnbm9yZVdvcmRD
YWxsYmFjaywKKyAgICB9OworICAgIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoJndrVGV4dENoZWNr
ZXJDbGllbnQpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZT
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
JiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBtX3RleHRDaGVja2VyLT5jaGVja1NwZWxsaW5n
T2ZTdHJpbmcoc3RyaW5nLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7
Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYktpdFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29y
ZChjb25zdCBTdHJpbmcmIHdvcmQpCit7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXItPmdldEd1
ZXNzZXNGb3JXb3JkKHdvcmQpOworfQorCit2b2lkIFdlYktpdFRleHRDaGVja2VyOjpsZWFybldv
cmQoY29uc3QgU3RyaW5nJiB3b3JkKQoreworICAgIG1fdGV4dENoZWNrZXItPmxlYXJuV29yZCh3
b3JkKTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChjb25zdCBTdHJp
bmcmIHdvcmQpCit7CisgICAgbV90ZXh0Q2hlY2tlci0+aWdub3JlV29yZCh3b3JkKTsKK30KKwor
dm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQoreworICAgIGlmIChtX3NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGVuYWJsZWQpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKworICAg
IC8vIFdlIG5lZWQgdG8gbm90aWZ5IHRoZSBXZWIgcHJvY2VzcyB0aGF0IHRoaXMgaGFzIGNoYW5n
ZWQuCisgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRl
Q2hhbmdlZChlbmFibGVkKTsKK30KKwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxD
aGVja2luZ0xhbmd1YWdlcyhjb25zdCBTdHJpbmcmIGxhbmd1YWdlcykKK3sKKyAgICBpZiAobV9z
cGVsbENoZWNraW5nTGFuZ3VhZ2VzID09IGxhbmd1YWdlcykKKyAgICAgICAgcmV0dXJuOworICAg
IG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9IGxhbmd1YWdlczsKKworICAgIC8vIFdlIG5lZWQg
dG8gdXBkYXRlIHRoZSBsYW5ndWFnZXMgaW4gdGhlIGVuY2hhbnQtYmFzZWQgY2hlY2tlciB0b28u
CisgICAgbV90ZXh0Q2hlY2tlci0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFn
ZXMpOworfQorI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwN2U2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmgKQEAgLTAsMCAr
MSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdFRleHRDaGVja2VyX2gKKyNkZWZpbmUgV2ViS2l0VGV4dENoZWNrZXJfaAorCisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2VyRW5jaGFudC5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CitjbGFzcyBXZWJLaXRUZXh0Q2hlY2tlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViS2l0
VGV4dENoZWNrZXIoKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJLaXRUZXh0Q2hlY2tlcj4g
Y3JlYXRlKCk7CisKKyAgICAvLyBGb3IgaW1wbGVtZW50aW5nIFRleHRDaGVja2VyQ2xpZW50Lgor
ICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIHsgcmV0dXJuIG1fc3BlbGxDaGVja2lu
Z0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxl
ZCk7CisgICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGludCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50JiBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAg
VmVjdG9yPFN0cmluZz4gZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKTsKKyAg
ICB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdvcmQpOworICAgIHZvaWQgaWdub3JlV29y
ZChjb25zdCBTdHJpbmcmIHdvcmQpOworCisgICAgLy8gVG8gYmUgY2FsbGVkIGZyb20gV2ViS2l0
V2ViQ29udGV4dCBvbmx5LgorICAgIGNvbnN0IFN0cmluZyBnZXRTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKCkgeyByZXR1cm4gbV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzOyB9CisgICAgdm9pZCBzZXRT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFN0cmluZyYgc3BlbGxDaGVja2luZ0xhbmd1YWdl
cyk7CisKK3ByaXZhdGU6CisgICAgV2ViS2l0VGV4dENoZWNrZXIoKTsKKworICAgIFJlZlB0cjxX
ZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ+IG1fdGV4dENoZWNrZXI7CisgICAgU3RyaW5nIG1f
c3BlbGxDaGVja2luZ0xhbmd1YWdlczsKKyAgICBib29sIG1fc3BlbGxDaGVja2luZ0VuYWJsZWQ7
Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNlbmRpZiAvLyBXZWJLaXRU
ZXh0Q2hlY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDhhMDYyNWMuLjQwMDhlODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3Bw
CkBAIC0yOCwxMCArMjgsMTMgQEAKICNpbmNsdWRlICJXZWJLaXRQbHVnaW5Qcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFJlcXVlc3RNYW5hZ2Vy
Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKICNpbmNsdWRlICJXZWJL
aXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQ
cml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTcyLDYgKzc1LDEwIEBAIHN0cnVjdCBfV2ViS2l0
V2ViQ29udGV4dFByaXZhdGUgewogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKICAgICBSZWZQdHI8
V2ViS2l0R2VvbG9jYXRpb25Qcm92aWRlcj4gZ2VvbG9jYXRpb25Qcm92aWRlcjsKICNlbmRpZgor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIE93blB0cjxXZWJLaXRUZXh0Q2hlY2tlcj4gdGV4
dENoZWNrZXI7CisgICAgR093blB0cjxnY2hhcj4gc3BlbGxDaGVja2luZ0xhbmd1YWdlczsKKyNl
bmRpZgogfTsKIAogc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpA
QCAtMTI3LDYgKzEzNCw5IEBAIHN0YXRpYyBncG9pbnRlciBjcmVhdGVEZWZhdWx0V2ViQ29udGV4
dChncG9pbnRlcikKICAgICBXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiB3a0dlb2xvY2F0aW9uTWFu
YWdlciA9IFdLQ29udGV4dEdldEdlb2xvY2F0aW9uTWFuYWdlcih3ZWJDb250ZXh0LT5wcml2LT5j
b250ZXh0LmdldCgpKTsKICAgICB3ZWJDb250ZXh0LT5wcml2LT5nZW9sb2NhdGlvblByb3ZpZGVy
ID0gV2ViS2l0R2VvbG9jYXRpb25Qcm92aWRlcjo6Y3JlYXRlKHdrR2VvbG9jYXRpb25NYW5hZ2Vy
KTsKICNlbmRpZgorI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHdlYkNvbnRleHQtPnByaXYt
PnRleHRDaGVja2VyID0gV2ViS2l0VGV4dENoZWNrZXI6OmNyZWF0ZSgpOworI2VuZGlmCiAgICAg
cmV0dXJuIHdlYkNvbnRleHQuZ2V0KCk7CiB9CiAKQEAgLTQxOCw2ICs0MjgsODggQEAgdm9pZCB3
ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZShXZWJLaXRXZWJDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGEKICAgICBXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZ2lzdGVyVVJJU2No
ZW1lKGNvbnRleHQtPnByaXYtPnJlcXVlc3RNYW5hZ2VyLmdldCgpLCB3a1NjaGVtZS5nZXQoKSk7
CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFi
bGVkOgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdlYkNvbnRleHQKKyAqCisgKiBHZXQgdGhlIGN1
cnJlbnQgc3RhdHVzIG9mIHRoZSBzcGVsbCBjaGVja2luZyBmZWF0dXJlLgorICoKKyAqIFJldHVy
bnM6ICVUUlVFIElmIHNwZWxsIGNoZWNraW5nIGlzIGVuYWJsZWQsIG9yICVGQUxTRSBvdGhlcndp
c2UuCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZChXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgRkFMU0UpOworCisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGNvbnRleHQtPnByaXYtPnRleHRDaGVja2VyLT5p
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5h
YmxlZDoKKyAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CisgKiBAZW5hYmxlZDogVmFs
dWUgdG8gYmUgc2V0CisgKgorICogRW5hYmxlIG9yIGRpc2FibGUgdGhlIHNwZWxsIGNoZWNraW5n
IGZlYXR1cmUuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2lu
Z19lbmFibGVkKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGdib29sZWFuIGVuYWJsZWQpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwor
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgY29udGV4dC0+cHJpdi0+dGV4dENoZWNrZXIt
PnNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOworI2VuZGlmCit9CisKKy8qKgorICog
d2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXM6CisgKiBAY29u
dGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICoKKyAqIEdldCB0aGUgdGhlIGxpc3Qgb2Ygc3Bl
bGwgY2hlY2tpbmcgbGFuZ3VhZ2VzIGFzc29jaWF0ZWQgd2l0aAorICogQGNvbnRleHQsIHNlcGFy
YXRlZCBieSBjb21tYXMuIFNlZQorICogd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXMoKSBmb3IgbW9yZSBkZXRhaWxzCisgKiBvbiB0aGUgZm9ybWF0IG9mIHRo
ZSBsYW5ndWFnZXMgaW4gdGhlIGxpc3QuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiBBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGxhbmd1YWdlcy4KKyAqLworY29uc3QgZ2NoYXIq
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9DT05URVhUKGNvbnRleHQpLCAwKTsKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IHJldHVybiBjb250ZXh0LT5wcml2LT5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzLmdldCgpOworI2Vs
c2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzOgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdl
YkNvbnRleHQKKyAqIEBsYW5ndWFnZXM6IChhbGxvdy1ub25lKTogbmV3IGxpc3Qgb2Ygc3BlbGwg
Y2hlY2tpbmcKKyAqIGxhbmd1YWdlcyBzZXBhcmF0ZWQgYnkgY29tbWFzLCBvciAlTlVMTAorICoK
KyAqIFNldCB0aGUgbGlzdCBvZiBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgdG8gYmUgdXNlZCBm
b3Igc3BlbGwKKyAqIGNoZWNraW5nLCBzZXBhcmF0ZWQgYnkgY29tbWFzLiBJbiBjYXNlICVOVUxM
IGlzIHBhc3NlZCwgdGhlIGRlZmF1bHQKKyAqIHZhbHVlIGFzIHJldHVybmVkIGJ5IGd0a19nZXRf
ZGVmYXVsdF9sYW5ndWFnZSgpIHdpbGwgYmUgdXNlZC4KKyAqCisgKiBUaGUgbG9jYWxlIHN0cmlu
ZyB0eXBpY2FsbHkgaXMgaW4gdGhlIGZvcm0gbGFuZ19DT1VOVFJZLCB3aGVyZSBsYW5nCisgKiBp
cyBhbiBJU08tNjM5IGxhbmd1YWdlIGNvZGUsIGFuZCBDT1VOVFJZIGlzIGFuIElTTy0zMTY2IGNv
dW50cnkgY29kZS4KKyAqIEZvciBpbnN0YW5jZSwgc3ZfRkkgZm9yIFN3ZWRpc2ggYXMgd3JpdHRl
biBpbiBGaW5sYW5kIG9yIHB0X0JSCisgKiBmb3IgUG9ydHVndWVzZSBhcyB3cml0dGVuIGluIEJy
YXppbC4KKyAqLwordm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlcyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBnY2hhciogbGFuZ3VhZ2Vz
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQp
KTsKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGNvbnRleHQtPnByaXYtPnRleHRDaGVj
a2VyLT5zZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKFN0cmluZyhsYW5ndWFnZXMpKTsKKyAgICBj
b250ZXh0LT5wcml2LT5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzLnNldChnX3N0cmR1cChsYW5ndWFn
ZXMpKTsKKyNlbmRpZgorfQorCiBXZWJLaXREb3dubG9hZCogd2Via2l0V2ViQ29udGV4dEdldE9y
Q3JlYXRlRG93bmxvYWQoV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkKQogewogICAgIEdSZWZQdHI8
V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gZG93bmxvYWRzTWFwKCkuZ2V0KHdrRG93bmxvYWQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Q29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29u
dGV4dC5oCmluZGV4IDgzYjYwMWEuLjBkMzJiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKQEAgLTEzMiw2ICsxMzIsMjAg
QEAgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUgICAgICAgICAgICAgIChX
ZWJLaXRXZWJDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgICpzY2hlbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFVS
SVNjaGVtZVJlcXVlc3RDYWxsYmFjayBjYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAg
ICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfY29udGV4
dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAg
ICAgICAgICAgKmNvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfY29udGV4
dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAg
ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkKTsK
K1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXMgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29u
dGV4dCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXMgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICAgKmxhbmd1YWdlcyk7CisKIEdfRU5EX0RF
Q0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggMzE2NDE3Ny4uNzNm
MDlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0zMyw2ICszMywxMCBAQCB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyCiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3RvcnkKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1
Z2lucwogd2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zX2ZpbmlzaAord2Via2l0X3dlYl9j
b250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFibGVkCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlcwogCiA8U1VCU0VDVElPTiBVUkkgU2NoZW1lPgogV2ViS2l0VVJJU2NoZW1lUmVxdWVz
dENhbGxiYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggZTdkNDNhMS4uZjQy
ZmVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMjMxLDExICsyMzEsMzgg
QEAgc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUoVVJJU2NoZW1lVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRh
aW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQpKTsKIH0KIAorc3RhdGljIHZvaWQgdGVz
dFdlYkNvbnRleHRTcGVsbENoZWNrZXIoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICBHUmVmUHRyPFdlYktpdFdlYkNvbnRleHQ+IHdlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCkpOworCisgICAgLy8gU2V0IHRoZSBsYW5ndWFnZSB0byBhIHNwZWNpZmlj
IG9uZSwgYW4gZW1wdHkgb25lIGFuZCBhIGxpc3Qgb2YgdGhlbS4KKyAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LmdldCgpLCAiZW5f
VVMiKTsKKyAgICBjb25zdCBnY2hhciogY3VycmVudExhbmd1YWdlKHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQuZ2V0KCkpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlLCA9PSwgImVuX1VTIik7CisKKyAgICB3ZWJr
aXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0Lmdl
dCgpLCAwKTsKKyAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LmdldCgpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoY3VycmVudExhbmd1YWdlLCA9PSwgMCk7CisKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LmdldCgpLCAiZXNfRVMsZW5f
VVMiKTsKKyAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoY3VycmVudExhbmd1YWdlLCA9PSwgImVzX0VTLGVuX1VTIik7CisKKyAgICAvLyBDaGVjayBk
aXNhYmxpbmcgYW5kIHJlLWVuYWJsaW5nIHNwZWxsIGNoZWNraW5nLgorICAgIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LmdldCgpLCBGQUxT
RSk7CisgICAgZ2Jvb2xlYW4gaXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LmdldCgpKTsKKyAgICBn
X2Fzc2VydCghaXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0
X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKHdlYkNvbnRleHQuZ2V0KCksIFRSVUUpOworICAg
IGlzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2No
ZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dC5nZXQoKSk7CisgICAgZ19hc3NlcnQoaXNTcGVsbENo
ZWNraW5nRW5hYmxlZCk7Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsKICAgICBUZXN0OjphZGQo
IldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYkNvbnRleHREZWZh
dWx0KTsKICAgICBQbHVnaW5zVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImdldC1wbHVn
aW5zIiwgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5zKTsKICAgICBVUklTY2hlbWVUZXN0OjphZGQo
IldlYktpdFdlYkNvbnRleHQiLCAidXJpLXNjaGVtZSIsIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1l
KTsKKyAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAic3BlbGwtY2hlY2tlciIsIHRl
c3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzM0YWRmYS4uMzVm
ZTZlNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDEyLTA3LTI2ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNo
ZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbV0syXVtHVEtdIEltcGxlbWVudCBhIG5ldyBzcGVs
bCBjaGVja2VyIEFQSSBmb3IgV2ViS2l0MkdUSysKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSWdub3JlIFdlYktpdFRleHRDaGVja2VyLiogcHJpdmF0ZSBm
aWxlcyBmb3IgZ3RrLWRvYy4KKworICAgICAgICAqIGd0ay9nZW5lcmF0ZS1ndGtkb2M6CisgICAg
ICAgIChnZXRfd2Via2l0Ml9vcHRpb25zKToKKwogMjAxMi0wNy0yNSAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFRlc3RSdW5uZXIuYSBzaG91bGQgY29udGFpbiBh
IFRlc3RSdW5uZXIgb2JqZWN0CmRpZmYgLS1naXQgYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9j
IGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYwppbmRleCA4OGU2MmU3Li5iMDAyMjI0IDEwMDc1
NQotLS0gYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCisrKyBiL1Rvb2xzL2d0ay9nZW5lcmF0
ZS1ndGtkb2MKQEAgLTk5LDYgKzk5LDcgQEAgZGVmIGdldF93ZWJraXQyX29wdGlvbnMoKToKICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJypDbGllbnQqJykpICsg
XAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xv
Yi5nbG9iKHNyY19wYXRoKCdXZWJLaXRHZW9sb2NhdGlvblByb3ZpZGVyLionKSkgKyBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRUZXh0Q2hlY2tl
ci4qJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihkZXJpdmVkX3Nv
dXJjZXNfcGF0aCgnd2Via2l0Mmd0aycsICd3ZWJraXQyJywgJ1dlYktpdE1hcnNoYWwuKicpKSAr
IFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2IoZGVyaXZlZF9zb3VyY2VzX3Bh
dGgoJ3dlYmtpdDJndGsnLCAnd2Via2l0MicsICdXZWJLaXRFbnVtVHlwZXMuKicpKSArIFwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ3Rlc3RzLyouaCcpKQot
LSAKMS43LjEwLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155505</attachid>
            <date>2012-07-31 05:31:39 -0700</date>
            <delta_ts>2012-08-06 02:07:09 -0700</delta_ts>
            <desc>Patch proposal + Unit tests + Documentation</desc>
            <filename>0002-WK2-GTK-Implement-a-new-spell-checker-API-for-WebKit.patch</filename>
            <type>text/plain</type>
            <size>24820</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA4YWFlNWM3MWNiYmNhNzc3ZjlkMzZmYzE5NDE5ZmUxNjdhNjU4NWYwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAibWFyaW9Ad2Via2l0Lm9yZyIKIDxtYXJpb0B3ZWJraXQub3Jn
QDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYz4KRGF0ZTogU2F0LCAyOCBKdWwg
MjAxMiAxODo0NToxMiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBbV0syXVtHVEtdIEltcGxl
bWVudCBhIG5ldyBzcGVsbCBjaGVja2VyIEFQSSBmb3IKIFdlYktpdDJHVEsrCiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyNjgKCi0tLQogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY3ICsrKysrKysrKwogU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgIDExICst
CiBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8ICAg
IDIgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oICAg
fCAgICAxICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAgICAg
ICAgIHwgIDE1MiArKysrKysrKysrKysrKysrKysrKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuaCAgfCAgIDU5ICsrKysrKysrCiAuLi4vV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCB8ICAgOTIgKysrKysrKysrKysr
CiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggICB8ICAg
MTQgKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0
IHwgICAgNCArCiAuLi4vQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgICAg
ICAgICB8ICAgMjcgKysrKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDEyICsrCiBUb29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgNDQxIGluc2VydGlv
bnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCmluZGV4IDZkNzdkZjcuLjM5NDkzNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBA
QAorMjAxMi0wNy0zMSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CisKKyAgICAgICAgW1dLMl1bR1RLXSBJbXBsZW1lbnQgYSBuZXcgc3BlbGwgY2hlY2tlciBBUEkg
Zm9yIFdlYktpdDJHVEsrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MDI2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBhIHNpbXBsZSBzcGVsbCBjaGVja2luZyBBUEkgdG8gV0syLCBhbGxvd2luZyB0
byBlbmFibGUvZGlzYWJsZQorICAgICAgICB0aGlzIGZlYXR1cmUgYW5kIHRvIGRlZmluZSBhIGxp
c3Qgb2YgbGFuZ3VhZ2VzIGFzc29jaWF0ZWQgdG8gaXQuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbTogQWRkIGZsYWdzIHRvIGhhbmRsZSB0aGUgU1BFTExDSEVDSyBmZWF0dXJlLgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIG5ldyBmaWxlcworCisgICAgICAgIEFkZGVk
IG5ldyBpbnRlcm5hbCBjbGFzcyB0aGF0IHdpbGwgYWN0IGJvdGggYXMgdGhlIGltcGxlbWVudGF0
aW9uCisgICAgICAgIG9mIFRleHRDaGVja2VyQ2xpZW50IGFuZCBhcyB0aGUgb2JqZWN0IFdlYktp
dFdlYkNvbnRleHQgd2lsbAorICAgICAgICBkZXBlbmQgb24gdG8gaW1wbGVtZW50IHRoZSBuZXds
eSBhZGRlZCBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hl
Y2tlci5jcHA6IEFkZGVkLgorICAgICAgICAodG9UZXh0Q2hlY2tlcik6CisgICAgICAgIChjb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjayk6CisgICAgICAgIChzZXRDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjayk6CisgICAgICAgIChjaGVja1NwZWxsaW5n
T2ZTdHJpbmdDYWxsYmFjayk6CisgICAgICAgIChndWVzc2VzRm9yV29yZENhbGxiYWNrKToKKyAg
ICAgICAgKGxlYXJuV29yZENhbGxiYWNrKToKKyAgICAgICAgKGlnbm9yZVdvcmRDYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6fldlYktpdFRleHRDaGVja2VyKToKKyAgICAg
ICAgKFdlYktpdFRleHRDaGVja2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0VGV4dENoZWNr
ZXI6OldlYktpdFRleHRDaGVja2VyKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpjaGVj
a1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OmdldEd1ZXNz
ZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpsZWFybldvcmQpOgorICAg
ICAgICAoV2ViS2l0VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICAoV2ViS2l0VGV4
dENoZWNrZXI6OnNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdFRleHRD
aGVja2VyOjpzZXRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRleHRD
aGVja2VyKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjppc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKToKKyAgICAgICAgKFdlYktpdFRleHRDaGVja2VyOjpnZXRTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKToKKworICAgICAgICBBZGRlZCBXS1RleHRDaGVja2VyIHRvIFdlYktpdFByaXZhdGUuaCwg
bmVlZGVkIGluIFdlYktpdFRleHRDaGVja2VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UHJpdmF0ZS5oOgorCisgICAgICAgIEFkZCBuZXcgQVBJIHRvIFdlYktpdFdlYkNv
bnRleHQgdG8gYWxsb3cgZW5hYmxpbmcvZGlzYWJsaW5nIHRoaXMKKyAgICAgICAgc3BlbGwgY2hl
Y2tpbmcgZmVhdHVyZSwgYW5kIHRvIHNldC9nZXQgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHVzZWQK
KyAgICAgICAgdG8gZGVjaWRlIHdoaWNoIGRpY3Rpb25hcmllcyB3aWxsIGJlIGNvbnN1bHRlZC4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAg
ICAgICAoX1dlYktpdFdlYkNvbnRleHRQcml2YXRlKToKKyAgICAgICAgKGNyZWF0ZURlZmF1bHRX
ZWJDb250ZXh0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZCk6IE5ldyBBUEkuCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Nw
ZWxsX2NoZWNraW5nX2VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyk6IERpdHRvLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaDoKKworICAgICAgICBOZXcg
dGVzdHMgZm9yIGNoZWNraW5nIHRoZSBuZXcgQVBJIGFkZGVkIHRvIFdlYktpdFdlYkNvbnRleHQu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4
dC5jcHA6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcik6CisgICAgICAgIChi
ZWZvcmVBbGwpOgorCisgICAgICAgIFVwZGF0ZSBkb2N1bWVudGF0aW9uIHdpdGggbmV3IHNlY3Rp
b25zIGFuZCBzeW1ib2xzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLWRvY3Muc2dtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstc2VjdGlvbnMudHh0OgorCiAyMDEyLTA3LTMxICBEYW5pbG8gQ2VzYXIgTGVtZXMgZGUg
UGF1bGEgIDxkYW5pbG8uY2VzYXJAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIGFkZCBGYXJz
dHJlYW0gZmxhZ3MvZGVwcyB0byBXZWJLaXQsIGZvciBXZWJSVEMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0K
aW5kZXggZjU2MWY4My4uM2VkY2UwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTE2Miw3ICsx
NjIsNiBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJL
SVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0xJQgogCWxpYldlYkNvcmVHdGsubGEgXAogCSQo
Q0FJUk9fTElCUykgXAogCSQoQ09WRVJBR0VfTERGTEFHUykgXAotCSQoRU5DSEFOVF9MSUJTKSBc
CiAJJChGQVJTVFJFQU1fTElCUykgXAogCSQoR0FJTF9MSUJTKSBcCiAJJChHQU1FUEFEX0xJQlMp
IFwKQEAgLTE4NCw2ICsxODMsMTYgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpP
Ul9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUIKIAkkKFhUX0xJ
QlMpIFwKIAkkKFpMSUJfTElCUykKIAoraWYgRU5BQkxFX1NQRUxMQ0hFQ0sKK2xpYndlYmtpdDJn
dGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVS
U0lPTkBfbGFfQ1BQRkxBR1MgKz0gXAorCS1ERU5BQkxFX1NQRUxMQ0hFQ0s9MSBcCisJJChFTkNI
QU5UX0NGTEFHUykKKworbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9O
QF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUJBREQgKz0gXAorCSQoRU5DSEFO
VF9MSUJTKQorZW5kaWYKKworCiBpZiBFTkFCTEVfV0VCS0lUMgogcGtnY29uZmlnX0RBVEEgKz0g
U291cmNlL1dlYktpdDIvd2Via2l0Mmd0ay1AV0VCS0lUR1RLX0FQSV9WRVJTSU9OQC5wYwogZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGU3YTY0ZjAuLjA2ZGY1NWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNzAxLDYgKzcwMSw4IEBAIHdlYmtpdDJf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0
dGluZ3MuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0
aW5ncy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5n
c1ByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4
dENoZWNrZXIuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRU
ZXh0Q2hlY2tlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRV
SUNsaWVudC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJ
Q2xpZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJl
cXVlc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFByaXZhdGUuaAppbmRleCBlNGUxYjM5Li44ZmVkZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC00MCw2ICs0MCw3IEBACiAj
aW5jbHVkZSA8V2ViS2l0Mi9XS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oPgogI2luY2x1ZGUgPFdl
YktpdDIvV0tTb3VwUmVxdWVzdE1hbmFnZXIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5n
Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1RleHRDaGVja2VyLmg+CiAjaW5jbHVkZSA8V2ViS2l0
Mi9XZWJLaXQyX0MuaD4KICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFRleHRDaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njc2
YmI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0VGV4dENoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisK
KyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
c3RhdGljIGlubGluZSBXZWJLaXRUZXh0Q2hlY2tlciogdG9UZXh0Q2hlY2tlcihjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRUZXh0Q2hlY2tl
cio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKK30KKworc3RhdGljIGJvb2wgY29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkQ2FsbGJhY2soY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKK3sKKyAgICByZXR1cm4gdG9UZXh0Q2hlY2tlcihjbGllbnRJbmZvKS0+aXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpOworfQorCitzdGF0aWMgdm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWRDYWxsYmFjayhib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7
CisgICAgdG9UZXh0Q2hlY2tlcihjbGllbnRJbmZvKS0+c2V0U3BlbGxDaGVja2luZ0VuYWJsZWQo
ZW5hYmxlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZ0NhbGxiYWNr
KHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgdG9UZXh0Q2hlY2tlcihjbGllbnRJbmZvKS0+Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KHRvSW1wbCh0ZXh0KS0+c3RyaW5nKCksICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxp
bmdMZW5ndGgpOworfQorCitzdGF0aWMgV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZENhbGxiYWNr
KHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gdG9UZXh0Q2hlY2tlcihjbGllbnRJbmZv
KS0+Z2V0R3Vlc3Nlc0ZvcldvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7CisgICAgaWYgKGd1
ZXNzZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdLTXV0YWJsZUFycmF5
UmVmIHdrU3VnZ2VzdGlvbnMgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOworICAgIGZvciAoVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBndWVzc2VzLmJlZ2luKCk7IGl0ZXIg
IT0gZ3Vlc3Nlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB3a1N1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
aXRlci0+dXRmOCgpLmRhdGEoKSkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbSh3a1N1Z2dl
c3Rpb25zLCB3a1N1Z2dlc3Rpb24uZ2V0KCkpOworICAgIH0KKworICAgIHJldHVybiB3a1N1Z2dl
c3Rpb25zOworfQorCitzdGF0aWMgdm9pZCBsZWFybldvcmRDYWxsYmFjayh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgdG9UZXh0
Q2hlY2tlcihjbGllbnRJbmZvKS0+bGVhcm5Xb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOwor
fQorCitzdGF0aWMgdm9pZCBpZ25vcmVXb3JkQ2FsbGJhY2sodWludDY0X3QgdGFnLCBXS1N0cmlu
Z1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHRvVGV4dENoZWNrZXIo
Y2xpZW50SW5mbyktPmlnbm9yZVdvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Cit9CisKK1dl
YktpdFRleHRDaGVja2VyOjp+V2ViS2l0VGV4dENoZWNrZXIoKQoreworfQorCitXZWJLaXRUZXh0
Q2hlY2tlcjo6V2ViS2l0VGV4dENoZWNrZXIoKQorICAgIDogbV90ZXh0Q2hlY2tlcihXZWJDb3Jl
OjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpKQorICAgICwgbV9zcGVsbENoZWNraW5nRW5h
YmxlZChmYWxzZSkKK3sKKyAgICBXS1RleHRDaGVja2VyQ2xpZW50IHdrVGV4dENoZWNrZXJDbGll
bnQgPSB7CisgICAgICAgIGtXS1RleHRDaGVja2VyQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAg
ICAgIHRoaXMsIC8vIGNsaWVudEluZm8KKyAgICAgICAgMCwgLy8gY29udGludW91c1NwZWxsQ2hl
Y2tpbmdBbGxvd2VkCisgICAgICAgIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxi
YWNrLAorICAgICAgICBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjaywK
KyAgICAgICAgMCwgLy8gZ3JhbW1hckNoZWNraW5nRW5hYmxlZAorICAgICAgICAwLCAvLyBzZXRH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkCisgICAgICAgIDAsIC8vIHVuaXF1ZVNwZWxsRG9jdW1lbnRU
YWcKKyAgICAgICAgMCwgLy8gY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZworICAgICAgICBjaGVj
a1NwZWxsaW5nT2ZTdHJpbmdDYWxsYmFjaywKKyAgICAgICAgMCwgLy8gY2hlY2tHcmFtbWFyT2ZT
dHJpbmcKKyAgICAgICAgMCwgLy8gc3BlbGxpbmdVSUlzU2hvd2luZworICAgICAgICAwLCAvLyB0
b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nCisgICAgICAgIDAsIC8vIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQKKyAgICAgICAgMCwgLy8gdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFt
bWFyU3RyaW5nCisgICAgICAgIGd1ZXNzZXNGb3JXb3JkQ2FsbGJhY2ssCisgICAgICAgIGxlYXJu
V29yZENhbGxiYWNrLAorICAgICAgICBpZ25vcmVXb3JkQ2FsbGJhY2ssCisgICAgfTsKKyAgICBX
S1RleHRDaGVja2VyU2V0Q2xpZW50KCZ3a1RleHRDaGVja2VyQ2xpZW50KTsKK30KKwordm9pZCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBpbnQmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCYgbWlzc3BlbGxpbmdMZW5ndGgpCit7
CisgICAgbV90ZXh0Q2hlY2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHN0cmluZywgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworfQorCitWZWN0b3I8U3RyaW5nPiBX
ZWJLaXRUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQor
eworICAgIHJldHVybiBtX3RleHRDaGVja2VyLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkKTsKK30K
Kwordm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCkK
K3sKKyAgICBtX3RleHRDaGVja2VyLT5sZWFybldvcmQod29yZCk7Cit9CisKK3ZvaWQgV2ViS2l0
VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQoreworICAgIG1fdGV4
dENoZWNrZXItPmlnbm9yZVdvcmQod29yZCk7Cit9CisKK3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6
OnNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobV9zcGVs
bENoZWNraW5nRW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9zcGVs
bENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisKKyAgICAvLyBXZSBuZWVkIHRvIG5vdGlmeSB0
aGUgV2ViIHByb2Nlc3MgdGhhdCB0aGlzIGhhcyBjaGFuZ2VkLgorICAgIFdLVGV4dENoZWNrZXJD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlZCk7Cit9CisK
K3ZvaWQgV2ViS2l0VGV4dENoZWNrZXI6OnNldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3Qg
U3RyaW5nJiBsYW5ndWFnZXMpCit7CisgICAgaWYgKG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlcyA9
PSBsYW5ndWFnZXMpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMgPSBsYW5ndWFnZXM7CisKKyAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgbGFuZ3VhZ2Vz
IGluIHRoZSBlbmNoYW50LWJhc2VkIGNoZWNrZXIgdG9vLgorICAgIG1fdGV4dENoZWNrZXItPnVw
ZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMobGFuZ3VhZ2VzKTsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRUZXh0Q2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmRkNzU4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRUZXh0Q2hlY2tlcl9oCisjZGVm
aW5lIFdlYktpdFRleHRDaGVja2VyX2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5j
bHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckVuY2hhbnQuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFs
bG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCitjbGFzcyBXZWJLaXRUZXh0Q2hlY2tlciB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJLaXRUZXh0Q2hl
Y2tlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdFRleHRDaGVja2VyKCkp
OyB9CisgICAgdmlydHVhbCB+V2ViS2l0VGV4dENoZWNrZXIoKTsKKworICAgIC8vIEZvciBpbXBs
ZW1lbnRpbmcgVGV4dENoZWNrZXJDbGllbnQuCisgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCkgeyByZXR1cm4gbV9zcGVsbENoZWNraW5nRW5hYmxlZDsgfQorICAgIHZvaWQgc2V0U3Bl
bGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIGNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBnZXRHdWVzc2VzRm9y
V29yZChjb25zdCBTdHJpbmcmIHdvcmQpOworICAgIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCk7CisgICAgdm9pZCBpZ25vcmVXb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CisKKyAg
ICAvLyBUbyBiZSBjYWxsZWQgZnJvbSBXZWJLaXRXZWJDb250ZXh0IG9ubHkuCisgICAgY29uc3Qg
U3RyaW5nIGdldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKSB7IHJldHVybiBtX3NwZWxsQ2hlY2tp
bmdMYW5ndWFnZXM7IH0KKyAgICB2b2lkIHNldFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3Qg
U3RyaW5nJiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzKTsKKworcHJpdmF0ZToKKyAgICBXZWJLaXRU
ZXh0Q2hlY2tlcigpOworCisgICAgT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudD4g
bV90ZXh0Q2hlY2tlcjsKKyAgICBTdHJpbmcgbV9zcGVsbENoZWNraW5nTGFuZ3VhZ2VzOworICAg
IGJvb2wgbV9zcGVsbENoZWNraW5nRW5hYmxlZDsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BF
TExDSEVDSykKKworI2VuZGlmIC8vIFdlYktpdFRleHRDaGVja2VyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXgg
YzhiODA4MS4uYWJlNmI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTI4LDEwICsyOCwxMyBAQAogI2luY2x1
ZGUgIldlYktpdFBsdWdpblByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRU
ZXh0Q2hlY2tlci5oIgogI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NzIsNiArNzUsMTAgQEAgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAjaWYgRU5B
QkxFKEdFT0xPQ0FUSU9OKQogICAgIFJlZlB0cjxXZWJLaXRHZW9sb2NhdGlvblByb3ZpZGVyPiBn
ZW9sb2NhdGlvblByb3ZpZGVyOwogI2VuZGlmCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAg
T3duUHRyPFdlYktpdFRleHRDaGVja2VyPiB0ZXh0Q2hlY2tlcjsKKyAgICBHT3duUHRyPGdjaGFy
PiBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzOworI2VuZGlmCiB9OwogCiBzdGF0aWMgZ3VpbnQgc2ln
bmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC0xMjcsNiArMTM0LDkgQEAgc3RhdGljIGdw
b2ludGVyIGNyZWF0ZURlZmF1bHRXZWJDb250ZXh0KGdwb2ludGVyKQogICAgIFdLR2VvbG9jYXRp
b25NYW5hZ2VyUmVmIHdrR2VvbG9jYXRpb25NYW5hZ2VyID0gV0tDb250ZXh0R2V0R2VvbG9jYXRp
b25NYW5hZ2VyKHdlYkNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCkpOwogICAgIHdlYkNvbnRl
eHQtPnByaXYtPmdlb2xvY2F0aW9uUHJvdmlkZXIgPSBXZWJLaXRHZW9sb2NhdGlvblByb3ZpZGVy
OjpjcmVhdGUod2tHZW9sb2NhdGlvbk1hbmFnZXIpOwogI2VuZGlmCisjaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCisgICAgd2ViQ29udGV4dC0+cHJpdi0+dGV4dENoZWNrZXIgPSBXZWJLaXRUZXh0Q2hl
Y2tlcjo6Y3JlYXRlKCk7CisjZW5kaWYKICAgICByZXR1cm4gd2ViQ29udGV4dC5nZXQoKTsKIH0K
IApAQCAtNDE4LDYgKzQyOCw4OCBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9yZWdpc3Rlcl91
cmlfc2NoZW1lKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYQogICAgIFdLU291
cFJlcXVlc3RNYW5hZ2VyUmVnaXN0ZXJVUklTY2hlbWUoY29udGV4dC0+cHJpdi0+cmVxdWVzdE1h
bmFnZXIuZ2V0KCksIHdrU2NoZW1lLmdldCgpKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQ6CisgKiBAY29udGV4dDogYSAjV2ViS2l0
V2ViQ29udGV4dAorICoKKyAqIEdldCB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHNwZWxsIGNo
ZWNraW5nIGZlYXR1cmUuCisgKgorICogUmV0dXJuczogJVRSVUUgSWYgc3BlbGwgY2hlY2tpbmcg
aXMgZW5hYmxlZCwgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4gd2Via2l0X3dl
Yl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKFdlYktpdFdlYkNvbnRleHQqIGNv
bnRleHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhU
KGNvbnRleHQpLCBGQUxTRSk7CisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4g
Y29udGV4dC0+cHJpdi0+dGV4dENoZWNrZXItPmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyNl
bHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9j
b250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkOgorICogQGNvbnRleHQ6IGEgI1dlYktp
dFdlYkNvbnRleHQKKyAqIEBlbmFibGVkOiBWYWx1ZSB0byBiZSBzZXQKKyAqCisgKiBFbmFibGUg
b3IgZGlzYWJsZSB0aGUgc3BlbGwgY2hlY2tpbmcgZmVhdHVyZS4KKyAqLwordm9pZCB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQoV2ViS2l0V2ViQ29udGV4dCog
Y29udGV4dCwgZ2Jvb2xlYW4gZW5hYmxlZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAg
ICBjb250ZXh0LT5wcml2LT50ZXh0Q2hlY2tlci0+c2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoZW5h
YmxlZCk7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlczoKKyAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0Cisg
KgorICogR2V0IHRoZSB0aGUgbGlzdCBvZiBzcGVsbCBjaGVja2luZyBsYW5ndWFnZXMgYXNzb2Np
YXRlZCB3aXRoCisgKiBAY29udGV4dCwgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gU2VlCisgKiB3ZWJr
aXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcygpIGZvciBtb3JlIGRl
dGFpbHMKKyAqIG9uIHRoZSBmb3JtYXQgb2YgdGhlIGxhbmd1YWdlcyBpbiB0aGUgbGlzdC4KKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Yg
bGFuZ3VhZ2VzLgorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCksIDApOwor
CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgcmV0dXJuIGNvbnRleHQtPnByaXYtPnNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMuZ2V0KCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9
CisKKy8qKgorICogd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXM6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICogQGxhbmd1YWdlczogKGFs
bG93LW5vbmUpOiBuZXcgbGlzdCBvZiBzcGVsbCBjaGVja2luZworICogbGFuZ3VhZ2VzIHNlcGFy
YXRlZCBieSBjb21tYXMsIG9yICVOVUxMCisgKgorICogU2V0IHRoZSBsaXN0IG9mIHNwZWxsIGNo
ZWNraW5nIGxhbmd1YWdlcyB0byBiZSB1c2VkIGZvciBzcGVsbAorICogY2hlY2tpbmcsIHNlcGFy
YXRlZCBieSBjb21tYXMuIEluIGNhc2UgJU5VTEwgaXMgcGFzc2VkLCB0aGUgZGVmYXVsdAorICog
dmFsdWUgYXMgcmV0dXJuZWQgYnkgZ3RrX2dldF9kZWZhdWx0X2xhbmd1YWdlKCkgd2lsbCBiZSB1
c2VkLgorICoKKyAqIFRoZSBsb2NhbGUgc3RyaW5nIHR5cGljYWxseSBpcyBpbiB0aGUgZm9ybSBs
YW5nX0NPVU5UUlksIHdoZXJlIGxhbmcKKyAqIGlzIGFuIElTTy02MzkgbGFuZ3VhZ2UgY29kZSwg
YW5kIENPVU5UUlkgaXMgYW4gSVNPLTMxNjYgY291bnRyeSBjb2RlLgorICogRm9yIGluc3RhbmNl
LCBzdl9GSSBmb3IgU3dlZGlzaCBhcyB3cml0dGVuIGluIEZpbmxhbmQgb3IgcHRfQlIKKyAqIGZv
ciBQb3J0dWd1ZXNlIGFzIHdyaXR0ZW4gaW4gQnJhemlsLgorICovCit2b2lkIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKFdlYktpdFdlYkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IGdjaGFyKiBsYW5ndWFnZXMpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOworCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisgICAgY29udGV4dC0+cHJpdi0+dGV4dENoZWNrZXItPnNldFNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMoU3RyaW5nKGxhbmd1YWdlcykpOworICAgIGNvbnRleHQtPnByaXYtPnNwZWxsQ2hlY2tpbmdM
YW5ndWFnZXMuc2V0KGdfc3RyZHVwKGxhbmd1YWdlcykpOworI2VuZGlmCit9CisKIFdlYktpdERv
d25sb2FkKiB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZChXS0Rvd25sb2FkUmVm
IHdrRG93bmxvYWQpCiB7CiAgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBk
b3dubG9hZHNNYXAoKS5nZXQod2tEb3dubG9hZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKaW5kZXggODNiNjAxYS4uMGQzMmJh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YkNvbnRleHQuaApAQCAtMTMyLDYgKzEzMiwyMCBAQCB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0
ZXJfdXJpX3NjaGVtZSAgICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAg
ICAgICAgICAgICAgICAgKnNjaGVtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrIGNhbGxi
YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFibGVk
ICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVk
ICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAg
ICAgICAgICAgICAgICAgICAgIGVuYWJsZWQpOworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyAgICAgKFdlYktp
dFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyAgICAgKFdlYktp
dFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAg
ICAgICAqbGFuZ3VhZ2VzKTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMu
dHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNl
Y3Rpb25zLnR4dAppbmRleCAzMTY0MTc3Li43M2YwOWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9u
cy50eHQKQEAgLTMzLDYgKzMzLDEwIEBAIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21h
bmFnZXIKIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfYWRkaXRpb25hbF9wbHVnaW5zX2RpcmVjdG9y
eQogd2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zCiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3BsdWdpbnNfZmluaXNoCit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWQKK3dlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZAord2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMKK3dlYmtpdF93ZWJf
Y29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzCiAKIDxTVUJTRUNUSU9OIFVSSSBT
Y2hlbWU+CiBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJD
b250ZXh0LmNwcAppbmRleCBlN2Q0M2ExLi5mNDJmZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNv
bnRleHQuY3BwCkBAIC0yMzEsMTEgKzIzMSwzOCBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4
dFVSSVNjaGVtZShVUklTY2hlbWVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZh
aWxlZCkpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcihUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8V2ViS2l0V2ViQ29udGV4dD4g
d2ViQ29udGV4dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7CisKKyAgICAvLyBT
ZXQgdGhlIGxhbmd1YWdlIHRvIGEgc3BlY2lmaWMgb25lLCBhbiBlbXB0eSBvbmUgYW5kIGEgbGlz
dCBvZiB0aGVtLgorICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzKHdlYkNvbnRleHQuZ2V0KCksICJlbl9VUyIpOworICAgIGNvbnN0IGdjaGFyKiBjdXJy
ZW50TGFuZ3VhZ2Uod2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXMod2ViQ29udGV4dC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3Vh
Z2UsID09LCAiZW5fVVMiKTsKKworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQuZ2V0KCksIDApOworICAgIGN1cnJlbnRMYW5ndWFn
ZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNv
bnRleHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2UsID09LCAw
KTsKKworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
KHdlYkNvbnRleHQuZ2V0KCksICJlc19FUyxlbl9VUyIpOworICAgIGN1cnJlbnRMYW5ndWFnZSA9
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRl
eHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2UsID09LCAiZXNf
RVMsZW5fVVMiKTsKKworICAgIC8vIENoZWNrIGRpc2FibGluZyBhbmQgcmUtZW5hYmxpbmcgc3Bl
bGwgY2hlY2tpbmcuCisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19l
bmFibGVkKHdlYkNvbnRleHQuZ2V0KCksIEZBTFNFKTsKKyAgICBnYm9vbGVhbiBpc1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFi
bGVkKHdlYkNvbnRleHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KCFpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQo
d2ViQ29udGV4dC5nZXQoKSwgVFJVRSk7CisgICAgaXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0Lmdl
dCgpKTsKKyAgICBnX2Fzc2VydChpc1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKK30KKwogdm9pZCBi
ZWZvcmVBbGwoKQogewogICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJkZWZhdWx0
LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4dERlZmF1bHQpOwogICAgIFBsdWdpbnNUZXN0OjphZGQo
IldlYktpdFdlYkNvbnRleHQiLCAiZ2V0LXBsdWdpbnMiLCB0ZXN0V2ViQ29udGV4dEdldFBsdWdp
bnMpOwogICAgIFVSSVNjaGVtZVRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJ1cmktc2No
ZW1lIiwgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUpOworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2Vi
Q29udGV4dCIsICJzcGVsbC1jaGVja2VyIiwgdGVzdFdlYkNvbnRleHRTcGVsbENoZWNrZXIpOwog
fQogCiB2b2lkIGFmdGVyQWxsKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCAwZWRkNDBiLi45NWM5MzMxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDctMzEg
IE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtX
SzJdW0dUS10gSW1wbGVtZW50IGEgbmV3IHNwZWxsIGNoZWNrZXIgQVBJIGZvciBXZWJLaXQyR1RL
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyNjgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZ25vcmUg
V2ViS2l0VGV4dENoZWNrZXIuKiBwcml2YXRlIGZpbGVzIGZvciBndGstZG9jLgorCisgICAgICAg
ICogZ3RrL2dlbmVyYXRlLWd0a2RvYzoKKyAgICAgICAgKGdldF93ZWJraXQyX29wdGlvbnMpOgor
CiAyMDEyLTA3LTMxICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCB1cGRhdGUgd2F0Y2hsaXN0CmRpZmYgLS1naXQgYS9Ub29scy9ndGsvZ2Vu
ZXJhdGUtZ3RrZG9jIGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYwppbmRleCA4OGU2MmU3Li5i
MDAyMjI0IDEwMDc1NQotLS0gYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCisrKyBiL1Rvb2xz
L2d0ay9nZW5lcmF0ZS1ndGtkb2MKQEAgLTk5LDYgKzk5LDcgQEAgZGVmIGdldF93ZWJraXQyX29w
dGlvbnMoKToKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJypD
bGllbnQqJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0
aCgnV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLionKSkgKyBcCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRHZW9sb2NhdGlvblByb3ZpZGVyLion
KSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJL
aXRUZXh0Q2hlY2tlci4qJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xv
YihkZXJpdmVkX3NvdXJjZXNfcGF0aCgnd2Via2l0Mmd0aycsICd3ZWJraXQyJywgJ1dlYktpdE1h
cnNoYWwuKicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2IoZGVyaXZl
ZF9zb3VyY2VzX3BhdGgoJ3dlYmtpdDJndGsnLCAnd2Via2l0MicsICdXZWJLaXRFbnVtVHlwZXMu
KicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ3Rl
c3RzLyouaCcpKQotLSAKMS43LjEwLjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>