<?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>61787</bug_id>
          
          <creation_ts>2011-05-31 08:26:18 -0700</creation_ts>
          <short_desc>[GTK] Add WebKitSpellChecker interface and implementations</short_desc>
          <delta_ts>2011-06-08 15:52:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xan Lopez">xan.lopez</reporter>
          <assigned_to name="Xan Lopez">xan.lopez</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>412636</commentid>
    <comment_count>0</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-05-31 08:26:18 -0700</bug_when>
    <thetext>Exposes the spell checking functionality to the UAs and allows to change the used implementation at runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412648</commentid>
    <comment_count>1</comment_count>
      <attachid>95437</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-05-31 08:37:06 -0700</bug_when>
    <thetext>Created attachment 95437
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412649</commentid>
    <comment_count>2</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-05-31 08:37:56 -0700</bug_when>
    <thetext>There will be a few style errors in the .c file, style-check bug IMHO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412655</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-31 08:39:32 -0700</bug_when>
    <thetext>Attachment 95437 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/Web...&quot; exit_code: 1

Source/WebKit/gtk/webkit/webkitspellchecker.c:54:  Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitspellchecker.c:81:  Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitspellchecker.c:106:  Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitspellchecker.c:126:  Declaration has space between * and variable name in char* webkit_spell_checker_get_autocorrect_suggestions_for_misspelled_word  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitspellchecker.c:128:  Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitspellchecker.c:152:  Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitspellchecker.c:174:  Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]
Total errors found: 7 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412661</commentid>
    <comment_count>4</comment_count>
      <attachid>95437</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-31 08:53:01 -0700</bug_when>
    <thetext>Comment on attachment 95437
Patch

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

&gt;&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:54
&gt;&gt; +    WebKitSpellCheckerInterface* iface;
&gt; 
&gt; Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]

The code style in C file is actually to have the asterisk with the variable name. It would probably be better to make this file a C++ file now. My reasoning is that one day we may find out we need to use some WTF, WebCore or WebCoreSupport class here and then have to change the entire style of the file when we convert it to C++.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414506</commentid>
    <comment_count>5</comment_count>
      <attachid>95437</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-02 15:37:54 -0700</bug_when>
    <thetext>Comment on attachment 95437
Patch

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

I like this implementation a lot. r- mostly because I think Source/WebKit/gtk/webkit/webkitspellchecker.c should be C++.

&gt; Source/WebKit/gtk/WebCoreSupport/TextCheckerClientEnchant.cpp:3
&gt;   *  Copyright (C) 2008 Nuanti Ltd.

I think you want to rename this file to TextCheckerClient since it no longer depends on Enchant.

&gt; Source/WebKit/gtk/WebCoreSupport/TextCheckerClientEnchant.cpp:31
&gt;  #include &lt;enchant.h&gt;

I think you can remove this include.

&gt; Source/WebKit/gtk/WebCoreSupport/TextCheckerClientEnchant.cpp:67
&gt;      // Currently, it computes an empty string.

This comment can be removed now.

&gt; Source/WebKit/gtk/WebCoreSupport/TextCheckerClientEnchant.cpp:88
&gt; +    char* suggestion;
&gt; +    int i = 0;
&gt;  
&gt; -        if (numberOfSuggestions &gt; 0)
&gt; -            enchant_dict_free_suggestions(dict, suggestions);
&gt; -    }
&gt; -}
&gt; +    guesses.clear();
&gt;  
&gt; -static void getAvailableDictionariesCallback(const char* const languageTag, const char* const, const char* const, const char* const, void* data)
&gt; -{
&gt; -    Vector&lt;CString&gt;* dicts = static_cast&lt;Vector&lt;CString&gt;*&gt;(data);
&gt; +    for (suggestion = suggestions[i]; suggestion; i++)
&gt; +        guesses.append(String::fromUTF8(suggestion));

I think it makes more sense to write this as:

for (int i = 0; suggestion[i]; i++)
    guesses.append(String::fromUTF8(suggestions[i]));

&gt; Source/WebKit/gtk/webkit/webkitdefines.h:107
&gt; +typedef struct _WebKitSpellChecker WebKitSpellChecker; /* dummy typedef */

I think you can remove the comment here.

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:250
&gt; +static WebKitSpellChecker* spellChecker = 0;

Please make this a GRefPtr.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:1
&gt; +/*

I think we decided to change this file to C++ in the end? Let&apos;s call this WebKitTextChecker because it may one day do grammar checking!

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:27
&gt; + * #WebKitSpellChecker provides APIs for the spell checking
&gt; + * functionality used internally by WebKit to perform spell checking

spell checking -&gt; text checking

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:35
&gt; +static void webkit_spell_checker_default_init(WebKitSpellCheckerInterface* iface)

iface -&gt; interface.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:48
&gt; + * Checks @string for misspellings using @checker, storing the
&gt; + * location and length of the first misspelling in
&gt; + * @misspelling_location and @misspelling_length respectively.

Might as well let this be two lines for consistency, since the lines above it are so long.

&gt;&gt;&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:54
&gt;&gt;&gt; +    WebKitSpellCheckerInterface* iface;
&gt;&gt; 
&gt;&gt; Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]
&gt; 
&gt; The code style in C file is actually to have the asterisk with the variable name. It would probably be better to make this file a C++ file now. My reasoning is that one day we may find out we need to use some WTF, WebCore or WebCoreSupport class here and then have to change the entire style of the file when we convert it to C++.

iface -&gt; interface. When this becomes C++, please define interface when you first call WEBKIT_SPELL_CHECKER_GET_IFACE.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:75
&gt; + * Returns: a newly allocated %NULL-terminated array of guessed
&gt; + * corrections for a misspelled word @word. Free it with %g_strfreev
&gt; + * when done with it.

I cannot remember if a transfer annotation is necesary here or not.

&gt;&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:81
&gt;&gt; +    WebKitSpellCheckerInterface* iface;
&gt; 
&gt; Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]

Same comment as above here.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:100
&gt; + * Sets @languages as the list of languages to use by @checker. The
&gt; + * accepted format is a list of comma (&apos;,&apos;) separated language codes
&gt; + * of the form &apos;en_US&apos;, ie, language_VARIANT.

Nice doc here.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:122
&gt; + * Returns: the suggestion for the autocorrection of @word

Should mention that the word is newly allocated.

&gt;&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:128
&gt;&gt; +    WebKitSpellCheckerInterface* iface;
&gt; 
&gt; Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]

Same comments as above.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:146
&gt; + * Instructs the @checker to add @word to its dictionary as a properly
&gt; + * spelled word.

Here it is worth clarifying if the word is learned for the session or permanently. You might say something like, &quot;The @checker learns the word permanently, possibly adding it to the spelling dictionary.&quot;

&gt;&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:152
&gt;&gt; +    WebKitSpellCheckerInterface* iface;
&gt; 
&gt; Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]

Same comments as above.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:168
&gt; + * Instructs the @checker to ignore @word as a misspelling from now
&gt; + * on.

Should probably describe what the difference is between ignored words and learned words and whether or not this change is permanent.

&gt;&gt; Source/WebKit/gtk/webkit/webkitspellchecker.c:174
&gt;&gt; +    WebKitSpellCheckerInterface* iface;
&gt; 
&gt; Declaration has space between * and variable name in WebKitSpellCheckerInterface* iface  [whitespace/declaration] [3]

Same comments as above.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:29
&gt; +#include &quot;GOwnPtr.h&quot;
&gt; +#include &quot;webkitspellchecker.h&quot;
&gt; +
&gt; +#include &lt;enchant.h&gt;
&gt; +#include &lt;gtk/gtk.h&gt;
&gt; +#include &lt;wtf/text/CString.h&gt;

This should be one big block.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:31
&gt; +static EnchantBroker* broker = 0;

Instead of manually creating this wherever you need it, I think it would be better to make this a helper function like:

static EnchantBroker* getEnchantBroker()
{
    static EnchantBroker* broker;
    if (!broker)
     ...etc...
}

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:34
&gt; +    GSList* m_enchantDicts;

I think we don&apos;t usually use m_foo for GObject private sections or plain structs.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:40
&gt; +                        G_IMPLEMENT_INTERFACE (WEBKIT_TYPE_SPELL_CHECKER,

Extra space here after G_IMPLEMENT_INTERFACE.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:49
&gt; +    EnchantDict* dict = static_cast&lt;EnchantDict*&gt;(data);
&gt; +    enchant_broker_free_dict(broker, dict);

Both these lines are very simple, so I think they can be combined into one.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:57
&gt; +    g_slist_foreach(priv-&gt;m_enchantDicts, freeSpellCheckingLanguage, 0);
&gt; +    g_slist_free(priv-&gt;m_enchantDicts);

If you follow the approach below, you&apos;ll need to call delete priv; here.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:66
&gt; +    g_type_class_add_private(klass, sizeof(WebKitSpellCheckerEnchantPrivate));

I think it would be better to consistently use the &quot;new&quot; approach that I&apos;ve listed below for all new gobjects. Eventually I want to be able to safely use C++ objects everywhere. :)

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:71
&gt; +    WebKitSpellCheckerEnchantPrivate* priv = G_TYPE_INSTANCE_GET_PRIVATE(checker, WEBKIT_TYPE_SPELL_CHECKER_ENCHANT, WebKitSpellCheckerEnchantPrivate);

Here you can just do: 

checker-&gt;priv = new WebKitSpellCheckerEnchantPrivate();

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:75
&gt; +static void check_spelling_of_string(WebKitSpellChecker* checker, const char* string, int* misspellingLocation, int* misspellingLength)

This should be named checkSpellingOfString.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:105
&gt; +            // Set the iterator to be at the current word end, so we don&apos;t
&gt; +            // check characters twice.

This can be one line.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:130
&gt; +static char** get_guesses_for_word(WebKitSpellChecker* checker, const char* word, const char* context)

This should be named getGuessesForWord.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:165
&gt; +    Vector&lt;CString&gt;* dicts = static_cast&lt;Vector&lt;CString&gt;*&gt;(data);
&gt; +
&gt; +    dicts-&gt;append(languageTag);

Extra newline here.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:168
&gt; +static void update_spell_checking_languages(WebKitSpellChecker* checker, const char* languages)

This should be named updateSpellCheckingLanguages.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:170
&gt; +    EnchantDict* dict;

dict is only used three times and right at the beginning of the block, so it should be defined in those locations instead of function wide.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:193
&gt; +            // No dictionaries selected, we get one from the list

This comment is missing a period.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:209
&gt; +    return NULL;

NULL -&gt; 0.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:212
&gt; +static void learn_word(WebKitSpellChecker* checker, const char* word)

This should be named learnWord.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:215
&gt; +    WebKitSpellCheckerEnchantPrivate* priv = WEBKIT_SPELL_CHECKER_ENCHANT(checker)-&gt;priv;
&gt; +    GSList* dicts = priv-&gt;m_enchantDicts;

this can just be GSList* dicts = WEBKIT_SPELL_CHECKER_ENCHANT(checker)-&gt;priv-&gt;enchantDicts.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:221
&gt; +    for (; dicts; dicts = dicts-&gt;next) {
&gt; +        EnchantDict* dict = static_cast&lt;EnchantDict*&gt;(dicts-&gt;data);
&gt; +
&gt; +        enchant_dict_add_to_personal(dict, word, -1);
&gt; +    }

It seems weird to add this word to all dictionaries. Is that the right approach?

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:233
&gt; +    WebKitSpellCheckerEnchantPrivate* priv = WEBKIT_SPELL_CHECKER_ENCHANT(checker)-&gt;priv;
&gt; +    GSList* dicts = priv-&gt;m_enchantDicts;
&gt; +
&gt; +    for (; dicts; dicts = dicts-&gt;next) {
&gt; +        EnchantDict* dict = static_cast&lt;EnchantDict*&gt;(dicts-&gt;data);
&gt; +
&gt; +        enchant_dict_add_to_session(dict, word, -1);
&gt; +    }

Same comments as above.

&gt; Source/WebKit/gtk/webkit/webkitspellcheckernone.cpp:27
&gt; +                        G_IMPLEMENT_INTERFACE (WEBKIT_TYPE_SPELL_CHECKER,

Extra space here after G_IMPLEMENT_INTERFACE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415776</commentid>
    <comment_count>6</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-06-06 04:35:42 -0700</bug_when>
    <thetext>Shouldn&apos;t grammar checking be handled by another interface in case we ever add support for it? Not sure I agree with naming this the very vague &quot;TextChecker&quot; when all it does is spell checking (and probably all it ever will do). If we ever add support for grammar checking we can just implement a new interface and have another (or the same?) object implement that, I think. They are different concepts, so IMHO it makes sense.

About the other non-style comments wrt the implementation of the checker, I&apos;m just copying the existing implementation. If this has weird things or bugs (in fact I actually found a small one already that I silently fixed, but nevermind...) we should probably address them in other bugs to not make this more complicated than it should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415841</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-06 08:12:32 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Shouldn&apos;t grammar checking be handled by another interface in case we ever add support for it? Not sure I agree with naming this the very vague &quot;TextChecker&quot; when all it does is spell checking (and probably all it ever will do). If we ever add support for grammar checking we can just implement a new interface and have another (or the same?) object implement that, I think. They are different concepts, so IMHO it makes sense.

I do not find TextChecker too vague and part of the reason I think we should stick with that is that it matches exactly the name that WebKit is using. This is also why I think that grammar checking should go into the same interface. I think that moving it to a separate interface would make the API much more complex (due to the amount of boilerplate needed to implement an interface) and the grammar checking one that you propose would only have 1 or pehraps 2 virtual methods.

&gt; About the other non-style comments wrt the implementation of the checker, I&apos;m just copying the existing implementation. If this has weird things or bugs (in fact I actually found a small one already that I silently fixed, but nevermind...) we should probably address them in other bugs to not make this more complicated than it should.

Do you mean where it&apos;s adding the word to all dictionaries? I agree that this can be fixed in another patch. I was merely curious about your opinion on that. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415853</commentid>
    <comment_count>8</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-06-06 09:01:34 -0700</bug_when>
    <thetext>Mr. Noronha, we need your opinion on this. The two options atm are:

a) One TextChecker interface, to which we can possibly add grammar methods in the future.

b) One SpellChecker interface, no grammar methods. If we want grammar checking in the future we add a GrammarChecker interface.

Martin wants a), I I think b) makes more sense for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416111</commentid>
    <comment_count>9</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-06-06 16:33:38 -0700</bug_when>
    <thetext>Mr Robinson, and Mr Lopez, my thoughts on the matter: I tend to prefer avoiding conflating too many responsibilities in a single object. I tried searching other grammar checking APIs for inspiration, but didn&apos;t find much. It does feel like a lot of boilerplate would need to be created just for a couple methods, but I think keeping it separate would be a better bet on making it future-proof. Just like we have APIs to add words to dictionaries right now (and that may need to become more complex a bit to allow specifying which dicts to add to, and whether it should be saved or for the session only) we might have more complex stuff for grammar checking down the road, so I guess I&apos;ll go with Xan on this one.

This was the closest to a &apos;grammar checking API&apos; I could find, btw:

http://semantica-software.com/index.php?option=com_content&amp;view=article&amp;id=50&amp;Itemid=58&amp;lang=en

Mac seems to use an API very similar to the one used internally by WebKit, unsurprisingly, with a single &apos;SpellChecker&apos; object featuring also  &apos;checkGrammarOfString&apos;:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSSpellChecker_Class/Reference/Reference.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417543</commentid>
    <comment_count>10</comment_count>
      <attachid>96483</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-06-08 14:37:04 -0700</bug_when>
    <thetext>Created attachment 96483
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417601</commentid>
    <comment_count>11</comment_count>
      <attachid>96483</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-08 15:27:29 -0700</bug_when>
    <thetext>Comment on attachment 96483
Patch

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

Nice! Please add missing documentation and make the following changes before landing.

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:258
&gt; +GObject* webkit_get_text_checker()

This needs documentation, right?

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:270
&gt; +void webkit_set_text_checker(GObject* checker)

Ditto.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.cpp:28
&gt; + * in input or text areas. This can be used, for example, by browsers

input or text areas -&gt; editable areas. I believe it includes things like editable divs.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.cpp:59
&gt; +    WebKitSpellCheckerInterface* interface;
&gt; +
&gt; +    g_return_if_fail(WEBKIT_IS_SPELL_CHECKER(checker));
&gt; +    g_return_if_fail(string);
&gt; +
&gt; +    interface = WEBKIT_SPELL_CHECKER_GET_IFACE(checker);

Please declare WebKitSpellCheckerInterface when you first assign it.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.cpp:74
&gt; + * of guessed corrections for a misspelled word @word. Free it with

s/guessed/suggested would be better here, I believe.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.cpp:86
&gt; +    WebKitSpellCheckerInterface* interface;
&gt; +
&gt; +    g_return_val_if_fail(WEBKIT_IS_SPELL_CHECKER(checker), 0);
&gt; +    g_return_val_if_fail(word, 0);
&gt; +
&gt; +    interface = WEBKIT_SPELL_CHECKER_GET_IFACE(checker);

Again, please declare WebKitSpellCheckerInterface when you first use it.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.cpp:112
&gt; +    WebKitSpellCheckerInterface* interface;
&gt; +
&gt; +    g_return_if_fail(WEBKIT_IS_SPELL_CHECKER(checker));
&gt; +
&gt; +    interface = WEBKIT_SPELL_CHECKER_GET_IFACE(checker);
&gt; +    if (interface-&gt;update_spell_checking_languages)
&gt; +        interface-&gt;update_spell_checking_languages(checker, languages);

Ditto.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.cpp:134
&gt; +    WebKitSpellCheckerInterface* interface;
&gt; +
&gt; +    g_return_val_if_fail(WEBKIT_IS_SPELL_CHECKER(checker), 0);
&gt; +    g_return_val_if_fail(word, 0);
&gt; +
&gt; +    interface = WEBKIT_SPELL_CHECKER_GET_IFACE(checker);

Ditto.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.cpp:159
&gt; +    WebKitSpellCheckerInterface* interface;
&gt; +
&gt; +    g_return_if_fail(WEBKIT_IS_SPELL_CHECKER(checker));
&gt; +    g_return_if_fail(word);
&gt; +
&gt; +    interface = WEBKIT_SPELL_CHECKER_GET_IFACE(checker);

Ditto.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.cpp:181
&gt; +    WebKitSpellCheckerInterface* interface;
&gt; +
&gt; +    g_return_if_fail(WEBKIT_IS_SPELL_CHECKER(checker));
&gt; +    g_return_if_fail(word);
&gt; +
&gt; +    interface = WEBKIT_SPELL_CHECKER_GET_IFACE(checker);

Ditto.

&gt; Source/WebKit/gtk/webkit/webkitspellchecker.h:46
&gt; +WEBKIT_API GType webkit_spell_checker_get_type(void) G_GNUC_CONST;
&gt; +
&gt; +WEBKIT_API void    webkit_spell_checker_check_spelling_of_string(WebKitSpellChecker* checker, const char* string, int* misspelling_location, int* misspelling_length);

Crazy obsessive mode: Please line up webkit_spell_checker_get_type with webkit_spell_checker_check_spelling_of_string. :)

&gt; Source/WebKit/gtk/webkit/webkitspellcheckerenchant.cpp:53
&gt; +    EnchantDict* dict = static_cast&lt;EnchantDict*&gt;(data);
&gt; +    enchant_broker_free_dict(broker, dict);

I think this should be one line.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:3434
&gt;      else if (name == g_intern_string(&quot;enable-webgl&quot;))
&gt; -        settings-&gt;setWebGLEnabled(g_value_get_boolean(&amp;value));
&gt; +        settings-&gt;setWebGLEnabled(g_value_get_boolean(&amp;value)
&gt; +);

This seems like an accident?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417632</commentid>
    <comment_count>12</comment_count>
      <attachid>96483</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-06-08 15:51:50 -0700</bug_when>
    <thetext>Comment on attachment 96483
Patch

Landed as requested in r88399.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417634</commentid>
    <comment_count>13</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-06-08 15:52:00 -0700</bug_when>
    <thetext>Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95437</attachid>
            <date>2011-05-31 08:37:06 -0700</date>
            <delta_ts>2011-06-08 14:36:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61787-20110531173703.patch</filename>
            <type>text/plain</type>
            <size>45524</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc3MjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAzMzljNjkyZWQx
NTg4ZDMzMzFmZjZhNTQ3Y2MwYjFmNzBmYTUyN2M4Li41OTkwMjA2Mzk4YjQyYzNmODc1NjZmNzYz
MGRmZjg1YzdiYWE0YTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEt
MDUtMzEgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXRTcGVsbENoZWNr
ZXIgaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxNzg3CisKKyAgICAgICAgRXhwb3NlIHRoZSBzcGVs
bCBjaGVja2luZyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBVQXMgdGhyb3VnaCBhCisgICAgICAgIGdl
bmVyaWMgaW50ZXJmYWNlLCBhbmQgcHJvdmlkZSBhIGRlZmF1bHQgRW5jaGFudC1iYXNlZAorICAg
ICAgICBpbXBsZW1lbnRhdGlvbiBhbmQgYSBkdW1teSBuby1vcCBpbXBsZW1lbnRhdGlvbiB1c2Vk
IHdoZW4gdGhlCisgICAgICAgIGZlYXR1cmUgaXMgZGlzYWJsZWQuIE9uIHRvcCBvZiBhbGxvd2lu
ZyBVQXMgdG8gdXNlIHRoaXMKKyAgICAgICAgZnVuY3Rpb25hbGl0eSB0aGlzIG1ha2VzIGl0IHBv
c3NpYmxlIHRvIGNoYW5nZSB0aGUgc3BlbGwgY2hlY2tpbmcKKyAgICAgICAgYmFja2VuZCBhdCBy
dW50aW1lLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZCBuZXcgZmlsZXMuCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RWRpdG9yQ2xpZW50OjpFZGl0b3JDbGllbnQpOiBzZXQgdGhlIHNwZWxsIGNoZWNrZXIgdXNp
bmcKKyAgICAgICAgdGhlIG5ldyBjbGFzc2VzLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1Rl
eHRDaGVja2VyQ2xpZW50RW5jaGFudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
Q2xpZW50RW5jaGFudDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50KToganVzdAorICAgICAgICBj
aGFpbiB1cCB0byB0aGUgV2ViS2l0U3BlbGxDaGVja2VyLgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlckNsaWVudEVuY2hhbnQ6On5UZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQpOiBkaXR0by4K
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50OjppZ25vcmVXb3JkSW5T
cGVsbERvY3VtZW50KTogZGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50
RW5jaGFudDo6bGVhcm5Xb3JkKTogZGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
Q2xpZW50RW5jaGFudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKTogZGl0dG8uCisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9u
Rm9yTWlzc3BlbGxlZFdvcmQpOiBkaXR0by4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJD
bGllbnRFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZCk6IGRpdHRvLgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZSk6
IGRpdHRvLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50RW5jaGFu
dC5oOiBzdG9yZSBhIHJlZmVyZW5jZSB0bworICAgICAgICB0aGUgV2ViS2l0U3BlbGxDaGVja2Vy
LgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDogdGhlIHdlYmtpdHNwZWxsY2hlY2tlci5oIGhl
YWRlciBpcyBwdWJsaWMuCisgICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDogZGVmaW5l
cyBmb3Igc3BlbGwgY2hlY2tlciBpbnRlcmZhY2UuCisgICAgICAgICogd2Via2l0L3dlYmtpdGds
b2JhbHMuY3BwOiBBZGQgQVBJcyB0byBnZXQgYW5kIHNldCB0aGUgZ2xvYmFsCisgICAgICAgIHNw
ZWxsIGNoZWNrZXIuCisgICAgICAgICh3ZWJraXRfZ2V0X3NwZWxsX2NoZWNrZXIpOiBnZXQgQVBJ
LgorICAgICAgICAod2Via2l0X3NldF9zcGVsbF9jaGVja2VyKTogc2V0IEFQSS4KKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0Z2xvYmFscy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRzcGVsbGNo
ZWNrZXIuYzogQWRkZWQuIFNwZWxsIGNoZWNraW5nIGludGVyZmFjZS4KKyAgICAgICAgKiB3ZWJr
aXQvd2Via2l0c3BlbGxjaGVja2VyLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRz
cGVsbGNoZWNrZXJlbmNoYW50LmNwcDogQWRkZWQuIERlZmF1bHQKKyAgICAgICAgaW1wbGVtZW50
aW9uLCB1c2VzIEVuY2hhbnQgbGlicmFyeS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0c3BlbGxj
aGVja2VyZW5jaGFudC5oOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0c3BlbGxjaGVj
a2Vybm9uZS5jcHA6IEFkZGVkLiBEdW1teSBpbXBsZW1lbnRhdGlvbgorICAgICAgICB1c2VkIHdo
ZW4gc3BlbGwgY2hlY2tpbmcgaXMgZGlzYWJsZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdHNw
ZWxsY2hlY2tlcm5vbmUuaDogQWRkZWQuCisKIDIwMTEtMDUtMjcgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2Jp
bnNvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291
cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggZTk2Zjc1NzY0MGRiNGZjYmVmOTZl
MjljMjM5ODVlYTFiODdlZWVlNi4uYTkyYTA3NzU1ODMwMDcxYWEyZGEyZGNhZDA4Yjg2ZDQyNzI5
YTVlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIv
U291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTEyMiw2ICsxMjIsNyBAQCB3ZWJr
aXRndGtfc3RhdGljX2hfYXBpICs9IFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaCBcCisJJChzcmNkaXIpL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXIuaCBcCiAJJChzcmNkaXIpL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCBcCiAJJChz
cmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3Qu
aCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFz
ZS5oIFwKQEAgLTIxNSw2ICsyMTYsMTEgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbnByaXZhdGUuaCBcCiAJU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmMgXAorCVNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXIuYyBcCisJU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHNwZWxsY2hlY2tlcmVuY2hhbnQuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0c3BlbGxjaGVja2VyZW5jaGFudC5oIFwKKwlTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0c3BlbGxjaGVja2Vybm9uZS5jcHAgXAorCVNvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJub25lLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR2ZXJzaW9uLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHZpZXdwb3J0YXR0cmlidXRlcy5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR2aWV3cG9ydGF0dHJpYnV0ZXNwcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKaW5kZXggODU1MWUzYzgxMDli
YzBiZjU4ZDliN2NlODU2YWQxOWU3NDExN2QyMi4uMTQ3MDFiNmY3NDY0MzQ3ODJkZjY5ODg5YzA1
ZTY1MTMxODBmNWFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiV2Vi
S2l0RE9NTm9kZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01SYW5nZVByaXZhdGUuaCIK
ICNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2Jh
bHMuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtp
dG1hcnNoYWwuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJzZXR0aW5nc3ByaXZhdGUuaCIKQEAgLTYy
MSw3ICs2MjIsNyBAQCB2b2lkIEVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RNb3VzZVBy
ZXNzKCkKIEVkaXRvckNsaWVudDo6RWRpdG9yQ2xpZW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CiAgICAgOiBtX2lzSW5SZWRvKGZhbHNlKQogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgICwg
bV90ZXh0Q2hlY2tlckNsaWVudCh3ZWJWaWV3KQorICAgICwgbV90ZXh0Q2hlY2tlckNsaWVudCh3
ZWJraXRfZ2V0X3NwZWxsX2NoZWNrZXIoKSkKICNlbmRpZgogICAgICwgbV93ZWJWaWV3KHdlYlZp
ZXcpCiAgICAgLCBtX3ByZXZlbnROZXh0Q29tcG9zaXRpb25Db21taXQoZmFsc2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudEVu
Y2hhbnQuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJD
bGllbnRFbmNoYW50LmNwcAppbmRleCA0NjAwMDBiOGMzNzNhMWUwN2IzZDQ5MDYwNTQ0MmUyMmRj
ODAzMDUwLi4yZGNhY2QxNTNmNWVjNjE4MDVmZDJlYzYzZjRiMjgxN2Q1OWUzZDY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudEVu
Y2hhbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1RleHRDaGVj
a2VyQ2xpZW50RW5jaGFudC5jcHAKQEAgLTMsNyArMyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IE51YW50aSBMdGQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IERpZWdvIEVzY2FsYW50ZSBV
cnJlbG8gPGRpZWdvZUBnbm9tZS5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIElnYWxp
YSBTLkwuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNv
bkB3ZWJraXQub3JnPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCw5ICsyNCwxMCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50RW5jaGFudC5oIgogCisjaW5j
bHVkZSAiR093blB0ci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
d2Via2l0c3BlbGxjaGVja2VyLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vic2V0dGluZ3Nwcml2YXRl
LmgiCi0jaW5jbHVkZSAid2Via2l0d2Vidmlld3ByaXZhdGUuaCIKICNpbmNsdWRlIDxlbmNoYW50
Lmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAg
LTM1LDEwMSArMzYsMzYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1FbmNoYW50QnJva2VyKiBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmJyb2tl
ciA9IDA7Ci0KLVRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6VGV4dENoZWNrZXJDbGllbnRFbmNo
YW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgOiBtX3dlYlZpZXcod2ViVmlldykKLSAg
ICAsIG1fZW5jaGFudERpY3RzKDApCitUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OlRleHRDaGVj
a2VyQ2xpZW50RW5jaGFudChXZWJLaXRTcGVsbENoZWNrZXIqIHNwZWxsQ2hlY2tlcikKKyAgICA6
IG1fc3BlbGxDaGVja2VyKHNwZWxsQ2hlY2tlcikKIHsKIH0KIAogVGV4dENoZWNrZXJDbGllbnRF
bmNoYW50Ojp+VGV4dENoZWNrZXJDbGllbnRFbmNoYW50KCkKIHsKLSAgICBnX3NsaXN0X2ZvcmVh
Y2gobV9lbmNoYW50RGljdHMsIGZyZWVTcGVsbENoZWNraW5nTGFuZ3VhZ2UsIDApOwotICAgIGdf
c2xpc3RfZnJlZShtX2VuY2hhbnREaWN0cyk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXJDbGllbnRF
bmNoYW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYgdGV4dCkKIHsK
LSAgICBHU0xpc3QqIGRpY3RzID0gbV9lbmNoYW50RGljdHM7Ci0KLSAgICBmb3IgKDsgZGljdHM7
IGRpY3RzID0gZGljdHMtPm5leHQpIHsKLSAgICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSBzdGF0
aWNfY2FzdDxFbmNoYW50RGljdCo+KGRpY3RzLT5kYXRhKTsKLQotICAgICAgICBlbmNoYW50X2Rp
Y3RfYWRkX3RvX3Nlc3Npb24oZGljdCwgdGV4dC51dGY4KCkuZGF0YSgpLCAtMSk7Ci0gICAgfQor
ICAgIHdlYmtpdF9zcGVsbF9jaGVja2VyX2lnbm9yZV93b3JkKG1fc3BlbGxDaGVja2VyLmdldCgp
LCB0ZXh0LnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIFRleHRDaGVja2VyQ2xpZW50RW5jaGFu
dDo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBHU0xpc3QqIGRpY3RzID0g
bV9lbmNoYW50RGljdHM7Ci0KLSAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQp
IHsKLSAgICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSBzdGF0aWNfY2FzdDxFbmNoYW50RGljdCo+
KGRpY3RzLT5kYXRhKTsKLQotICAgICAgICBlbmNoYW50X2RpY3RfYWRkX3RvX3BlcnNvbmFsKGRp
Y3QsIHRleHQudXRmOCgpLmRhdGEoKSwgLTEpOwotICAgIH0KKyAgICB3ZWJraXRfc3BlbGxfY2hl
Y2tlcl9sZWFybl93b3JkKG1fc3BlbGxDaGVja2VyLmdldCgpLCB0ZXh0LnV0ZjgoKS5kYXRhKCkp
OwogfQogCiB2b2lkIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6Y2hlY2tTcGVsbGluZ09mU3Ry
aW5nKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRp
b24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgR1NMaXN0KiBkaWN0cyA9IG1fZW5j
aGFudERpY3RzOwotICAgIGlmICghZGljdHMpCi0gICAgICAgIHJldHVybjsKLQogICAgIEdPd25Q
dHI8Z2NoYXI+IHV0ZjhUZXh0KGdfdXRmMTZfdG9fdXRmOChjb25zdF9jYXN0PGd1bmljaGFyMio+
KHRleHQpLCBsZW5ndGgsIDAsIDAsIDApKTsKLSAgICBpbnQgdXRmOExlbmd0aCA9IGdfdXRmOF9z
dHJsZW4odXRmOFRleHQuZ2V0KCksIC0xKTsKLQotICAgIFBhbmdvTGFuZ3VhZ2UqIGxhbmd1YWdl
KHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0KCkpOwotICAgIEdPd25QdHI8UGFuZ29Mb2dBdHRy
PiBhdHRycyhnX25ldyhQYW5nb0xvZ0F0dHIsIHV0ZjhMZW5ndGggKyAxKSk7Ci0KLSAgICAvLyBw
YW5nb19nZXRfbG9nX2F0dHJzIHVzZXMgYW4gYWRpdGlvbmFsIHBvc2l0aW9uIGF0IHRoZSBlbmQg
b2YgdGhlIHRleHQuCi0gICAgcGFuZ29fZ2V0X2xvZ19hdHRycyh1dGY4VGV4dC5nZXQoKSwgLTEs
IC0xLCBsYW5ndWFnZSwgYXR0cnMuZ2V0KCksIHV0ZjhMZW5ndGggKyAxKTsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuZ3RoICsgMTsgaSsrKSB7Ci0gICAgICAgIC8vIFdlIGdvIHRocm91
Z2ggZWFjaCBjaGFyYWN0ZXIgdW50aWwgd2UgZmluZCBhbiBpc193b3JkX3N0YXJ0LAotICAgICAg
ICAvLyB0aGVuIHdlIGdldCBpbnRvIGFuIGlubmVyIGxvb3AgdG8gZmluZCB0aGUgaXNfd29yZF9l
bmQgY29ycmVzcG9uZGluZwotICAgICAgICAvLyB0byBpdC4KLSAgICAgICAgaWYgKGF0dHJzLmdl
dCgpW2ldLmlzX3dvcmRfc3RhcnQpIHsKLSAgICAgICAgICAgIGludCBzdGFydCA9IGk7Ci0gICAg
ICAgICAgICBpbnQgZW5kID0gaTsKLSAgICAgICAgICAgIGludCB3b3JkTGVuZ3RoOwotCi0gICAg
ICAgICAgICB3aGlsZSAoYXR0cnMuZ2V0KClbZW5kXS5pc193b3JkX2VuZCA8IDEpCi0gICAgICAg
ICAgICAgICAgZW5kKys7Ci0KLSAgICAgICAgICAgIHdvcmRMZW5ndGggPSBlbmQgLSBzdGFydDsK
LSAgICAgICAgICAgIC8vIFNldCB0aGUgaXRlcmF0b3IgdG8gYmUgYXQgdGhlIGN1cnJlbnQgd29y
ZCBlbmQsIHNvIHdlIGRvbid0Ci0gICAgICAgICAgICAvLyBjaGVjayBjaGFyYWN0ZXJzIHR3aWNl
LgotICAgICAgICAgICAgaSA9IGVuZDsKLQotICAgICAgICAgICAgZ2NoYXIqIGNzdGFydCA9IGdf
dXRmOF9vZmZzZXRfdG9fcG9pbnRlcih1dGY4VGV4dC5nZXQoKSwgc3RhcnQpOwotICAgICAgICAg
ICAgZ2ludCBieXRlcyA9IHN0YXRpY19jYXN0PGdpbnQ+KGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRl
cih1dGY4VGV4dC5nZXQoKSwgZW5kKSAtIGNzdGFydCk7Ci0gICAgICAgICAgICBHT3duUHRyPGdj
aGFyPiB3b3JkKGdfbmV3MChnY2hhciwgYnl0ZXMgKyAxKSk7Ci0KLSAgICAgICAgICAgIGdfdXRm
OF9zdHJuY3B5KHdvcmQuZ2V0KCksIGNzdGFydCwgd29yZExlbmd0aCk7Ci0KLSAgICAgICAgICAg
IGZvciAoOyBkaWN0czsgZGljdHMgPSBkaWN0cy0+bmV4dCkgewotICAgICAgICAgICAgICAgIEVu
Y2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFudERpY3QqPihkaWN0cy0+ZGF0YSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGVuY2hhbnRfZGljdF9jaGVjayhkaWN0LCB3b3JkLmdldCgp
LCB3b3JkTGVuZ3RoKSkgewotICAgICAgICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdMb2NhdGlv
biA9IHN0YXJ0OwotICAgICAgICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdMZW5ndGggPSB3b3Jk
TGVuZ3RoOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFN0b3AgY2hlY2tpbmcsIHRoaXMgd29yZCBpcyBvayBpbiBhdCBsZWFzdCBvbmUgZGljdC4KLSAg
ICAgICAgICAgICAgICAgICAgKm1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICAgICAgICAg
ICAgICAgICAgKm1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQor
ICAgIHdlYmtpdF9zcGVsbF9jaGVja2VyX2NoZWNrX3NwZWxsaW5nX29mX3N0cmluZyhtX3NwZWxs
Q2hlY2tlci5nZXQoKSwgdXRmOFRleHQuZ2V0KCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKIH0KIAogU3RyaW5nIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6Z2V0
QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1
dFdvcmQpCiB7CiAgICAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nIGN1
c3RvbWl6ZWQgYWxnb3JpdGhtcyBmb3IgdGhlIHBhcnRpY3VsYXIgYnJvd3Nlci4KICAgICAvLyBD
dXJyZW50bHksIGl0IGNvbXB1dGVzIGFuIGVtcHR5IHN0cmluZy4KLSAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgcmV0dXJuIHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9hdXRvY29ycmVjdF9zdWdn
ZXN0aW9uc19mb3JfbWlzc3BlbGxlZF93b3JkKG1fc3BlbGxDaGVja2VyLmdldCgpLCBpbnB1dFdv
cmQudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXJDbGllbnRFbmNoYW50Ojpj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiwgaW50KiwgaW50KikKQEAgLTEzOSw3NSArNzUsMjMgQEAgdm9pZCBUZXh0Q2hlY2tlckNs
aWVudEVuY2hhbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0
b3I8R3IKIAogdm9pZCBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBXVEY6OlZlY3RvcjxT
dHJpbmc+JiBndWVzc2VzKQogewotICAgIEdTTGlzdCogZGljdHMgPSBtX2VuY2hhbnREaWN0czsK
LSAgICBndWVzc2VzLmNsZWFyKCk7Ci0KLSAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMt
Pm5leHQpIHsKLSAgICAgICAgc2l6ZV90IG51bWJlck9mU3VnZ2VzdGlvbnM7Ci0gICAgICAgIHNp
emVfdCBpOwotCi0gICAgICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFu
dERpY3QqPihkaWN0cy0+ZGF0YSk7Ci0gICAgICAgIGdjaGFyKiogc3VnZ2VzdGlvbnMgPSBlbmNo
YW50X2RpY3Rfc3VnZ2VzdChkaWN0LCB3b3JkLnV0ZjgoKS5kYXRhKCksIC0xLCAmbnVtYmVyT2ZT
dWdnZXN0aW9ucyk7CisgICAgY2hhcioqIHN1Z2dlc3Rpb25zID0gd2Via2l0X3NwZWxsX2NoZWNr
ZXJfZ2V0X2d1ZXNzZXNfZm9yX3dvcmQobV9zcGVsbENoZWNrZXIuZ2V0KCksIHdvcmQudXRmOCgp
LmRhdGEoKSwgY29udGV4dC51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIXN1Z2dlc3Rpb25zKQor
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mU3VnZ2Vz
dGlvbnMgJiYgaSA8IDEwOyBpKyspCi0gICAgICAgICAgICBndWVzc2VzLmFwcGVuZChTdHJpbmc6
OmZyb21VVEY4KHN1Z2dlc3Rpb25zW2ldKSk7CisgICAgY2hhciogc3VnZ2VzdGlvbjsKKyAgICBp
bnQgaSA9IDA7CiAKLSAgICAgICAgaWYgKG51bWJlck9mU3VnZ2VzdGlvbnMgPiAwKQotICAgICAg
ICAgICAgZW5jaGFudF9kaWN0X2ZyZWVfc3VnZ2VzdGlvbnMoZGljdCwgc3VnZ2VzdGlvbnMpOwot
ICAgIH0KLX0KKyAgICBndWVzc2VzLmNsZWFyKCk7CiAKLXN0YXRpYyB2b2lkIGdldEF2YWlsYWJs
ZURpY3Rpb25hcmllc0NhbGxiYWNrKGNvbnN0IGNoYXIqIGNvbnN0IGxhbmd1YWdlVGFnLCBjb25z
dCBjaGFyKiBjb25zdCwgY29uc3QgY2hhciogY29uc3QsIGNvbnN0IGNoYXIqIGNvbnN0LCB2b2lk
KiBkYXRhKQotewotICAgIFZlY3RvcjxDU3RyaW5nPiogZGljdHMgPSBzdGF0aWNfY2FzdDxWZWN0
b3I8Q1N0cmluZz4qPihkYXRhKTsKKyAgICBmb3IgKHN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uc1tp
XTsgc3VnZ2VzdGlvbjsgaSsrKQorICAgICAgICBndWVzc2VzLmFwcGVuZChTdHJpbmc6OmZyb21V
VEY4KHN1Z2dlc3Rpb24pKTsKIAotICAgIGRpY3RzLT5hcHBlbmQobGFuZ3VhZ2VUYWcpOworICAg
IGdfc3RyZnJlZXYoc3VnZ2VzdGlvbnMpOwogfQogCiB2b2lkIFRleHRDaGVja2VyQ2xpZW50RW5j
aGFudDo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlKGNvbnN0IGNoYXIqIHNwZWxsQ2hlY2tp
bmdMYW5ndWFnZXMpCiB7Ci0gICAgRW5jaGFudERpY3QqIGRpY3Q7Ci0gICAgR1NMaXN0KiBzcGVs
bERpY3Rpb25hcmllcyA9IDA7Ci0KLSAgICBpZiAoIWJyb2tlcikKLSAgICAgICAgYnJva2VyID0g
ZW5jaGFudF9icm9rZXJfaW5pdCgpOwotCi0gICAgaWYgKHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMp
IHsKLSAgICAgICAgY2hhcioqIGxhbmdzID0gZ19zdHJzcGxpdChzcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzLCAiLCIsIC0xKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGxhbmdzW2ldOyBpKyspIHsK
LSAgICAgICAgICAgIGlmIChlbmNoYW50X2Jyb2tlcl9kaWN0X2V4aXN0cyhicm9rZXIsIGxhbmdz
W2ldKSkgewotICAgICAgICAgICAgICAgIGRpY3QgPSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2Rp
Y3QoYnJva2VyLCBsYW5nc1tpXSk7Ci0gICAgICAgICAgICAgICAgc3BlbGxEaWN0aW9uYXJpZXMg
PSBnX3NsaXN0X2FwcGVuZChzcGVsbERpY3Rpb25hcmllcywgZGljdCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZ19zdHJmcmVldihsYW5ncyk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgY29uc3QgY2hhciogbGFuZ3VhZ2UgPSBwYW5nb19sYW5ndWFnZV90b19zdHJpbmcoZ3Rr
X2dldF9kZWZhdWx0X2xhbmd1YWdlKCkpOwotICAgICAgICBpZiAoZW5jaGFudF9icm9rZXJfZGlj
dF9leGlzdHMoYnJva2VyLCBsYW5ndWFnZSkpIHsKLSAgICAgICAgICAgIGRpY3QgPSBlbmNoYW50
X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoYnJva2VyLCBsYW5ndWFnZSk7Ci0gICAgICAgICAgICBzcGVs
bERpY3Rpb25hcmllcyA9IGdfc2xpc3RfYXBwZW5kKHNwZWxsRGljdGlvbmFyaWVzLCBkaWN0KTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vIGRpY3Rpb25hcmllcyBzZWxlY3Rl
ZCwgd2UgZ2V0IG9uZSBmcm9tIHRoZSBsaXN0Ci0gICAgICAgICAgICBWZWN0b3I8Q1N0cmluZz4g
YWxsRGljdGlvbmFyaWVzOwotICAgICAgICAgICAgZW5jaGFudF9icm9rZXJfbGlzdF9kaWN0cyhi
cm9rZXIsIGdldEF2YWlsYWJsZURpY3Rpb25hcmllc0NhbGxiYWNrLCAmYWxsRGljdGlvbmFyaWVz
KTsKLSAgICAgICAgICAgIGlmICghYWxsRGljdGlvbmFyaWVzLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgICAgIGRpY3QgPSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoYnJva2VyLCBhbGxE
aWN0aW9uYXJpZXNbMF0uZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBzcGVsbERpY3Rpb25hcmll
cyA9IGdfc2xpc3RfYXBwZW5kKHNwZWxsRGljdGlvbmFyaWVzLCBkaWN0KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBnX3NsaXN0X2ZvcmVhY2gobV9lbmNoYW50RGljdHMs
IGZyZWVTcGVsbENoZWNraW5nTGFuZ3VhZ2UsIDApOwotICAgIGdfc2xpc3RfZnJlZShtX2VuY2hh
bnREaWN0cyk7Ci0gICAgbV9lbmNoYW50RGljdHMgPSBzcGVsbERpY3Rpb25hcmllczsKKyAgICB3
ZWJraXRfc3BlbGxfY2hlY2tlcl91cGRhdGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKG1fc3Bl
bGxDaGVja2VyLmdldCgpLCBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzKTsKIH0KLQotdm9pZCBUZXh0
Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmZyZWVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoZ3BvaW50ZXIg
ZGF0YSwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKCFicm9rZXIpCi0gICAgICAgIGJyb2tlciA9IGVu
Y2hhbnRfYnJva2VyX2luaXQoKTsKLQotICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nh
c3Q8RW5jaGFudERpY3QqPihkYXRhKTsKLSAgICBlbmNoYW50X2Jyb2tlcl9mcmVlX2RpY3QoYnJv
a2VyLCBkaWN0KTsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRFbmNoYW50LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQuaAppbmRleCA1ZDkzYzA3MjE2
ZDk5NWJmZTM2Y2FmYWRkOTkwYzBhNzgyZjUyZGRhLi5iMGU0YjZlMDIyYzg4M2FjNTJhNzI2MTJk
N2JjMzM5ODJkZDU0OTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9UZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQuaApAQCAtMzEsMTcgKzMxLDE2
IEBACiAjaWZuZGVmIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudF9oCiAjZGVmaW5lIFRleHRDaGVj
a2VyQ2xpZW50RW5jaGFudF9oCiAKKyNpbmNsdWRlICJHUmVmUHRyLmgiCiAjaW5jbHVkZSAiVGV4
dENoZWNrZXJDbGllbnQuaCIKIAotdHlwZWRlZiBzdHJ1Y3QgX0dTTGlzdCBHU0xpc3Q7Ci10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwotdHlwZWRlZiBzdHJ1Y3Qg
c3RyX2VuY2hhbnRfYnJva2VyIEVuY2hhbnRCcm9rZXI7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
U3BlbGxDaGVja2VyIFdlYktpdFNwZWxsQ2hlY2tlcjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudCA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0Q2hl
Y2tlckNsaWVudCB7CiAgICAgcHVibGljOgotICAgICAgICBUZXh0Q2hlY2tlckNsaWVudEVuY2hh
bnQoV2ViS2l0V2ViVmlldyopOworICAgICAgICBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQoV2Vi
S2l0U3BlbGxDaGVja2VyKik7CiAgICAgICAgIH5UZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQoKTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV1RG
OjpTdHJpbmcmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBXVEY6OlN0
cmluZyYpOwpAQCAtNTIsMTEgKzUxLDggQEAgY2xhc3MgVGV4dENoZWNrZXJDbGllbnRFbmNoYW50
IDogcHVibGljIFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50IHsKICAgICAgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tlciosIGludCwg
V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2ssIGNvbnN0IFdURjo6U3RyaW5nJikge30KIAog
ICAgICAgICB2b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZShjb25zdCBjaGFyKik7Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIGZyZWVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoZ3BvaW50ZXIsIGdw
b2ludGVyKTsKICAgICBwcml2YXRlOgotICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7
Ci0gICAgICAgIEdTTGlzdCogbV9lbmNoYW50RGljdHM7Ci0gICAgICAgIHN0YXRpYyBFbmNoYW50
QnJva2VyKiBicm9rZXI7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0U3BlbGxDaGVja2VyPiBtX3Nw
ZWxsQ2hlY2tlcjsKICAgICB9OwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgK
aW5kZXggNzdlOTZiYzlhNDI1NTliMjFkOTJkNjdkMjI4NzQzNWFlMGY0NjMyOC4uNzE0NTFiMTUz
NzE0ZDY0NDAzZjY1MmYyYzlmOTFkN2QxNmY5MmJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXQuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVz
cG9uc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaD4KICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0c3BlbGxjaGVja2VyLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmli
dXRlcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaD4KICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZGVmaW5lcy5oCmluZGV4IDBiODgwODQyYjQzM2I3NDQ5ZTA3ZmRhYTA5OWEzOWVk
N2Y5MzZkYzUuLjY3M2JiZGZlNjFkMjc2MTU3YjRkZjQ5ZGE3ZWM3MjkyY2ZkYjAxYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtMTA0LDYgKzEwNCw5IEBA
IHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJQbHVnaW5EYXRhYmFzZUNsYXNzICAgV2ViS2l0V2Vi
UGx1Z2luRGF0YWJhc2VDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJQbHVnaW4gICAg
ICBXZWJLaXRXZWJQbHVnaW47CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViUGx1Z2luQ2xhc3Mg
V2ViS2l0V2ViUGx1Z2luQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTcGVsbENoZWNr
ZXIgV2ViS2l0U3BlbGxDaGVja2VyOyAvKiBkdW1teSB0eXBlZGVmICovCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0U3BlbGxDaGVja2VySW50ZXJmYWNlIFdlYktpdFNwZWxsQ2hlY2tlckludGVyZmFj
ZTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0Z2xvYmFscy5jcHAKaW5kZXggOTExNjE0YzMzYmMxNzVmMzNjMmI1ZWY4OTlkZTdjYTM3NTE4
OWExZC4uOWIzMmI3N2MzYzQ0YzZlNjI2NWRmOWQwMDAyOWMxODI3OGIxZjcwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcApAQCAtNDIsNiArNDIsOSBAQAog
I2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0aWNvbmRh
dGFiYXNlLmgiCiAjaW5jbHVkZSAid2Via2l0c291cGF1dGhkaWFsb2cuaCIKKyNpbmNsdWRlICJ3
ZWJraXRzcGVsbGNoZWNrZXIuaCIKKyNpbmNsdWRlICJ3ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50
LmgiCisjaW5jbHVkZSAid2Via2l0c3BlbGxjaGVja2Vybm9uZS5oIgogI2luY2x1ZGUgIndlYmtp
dHdlYmRhdGFiYXNlLmgiCiAjaW5jbHVkZSAid2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRl
LmgiCiAjaW5jbHVkZSA8bGliaW50bC5oPgpAQCAtMjQ0LDYgKzI0NywzNyBAQCBXZWJLaXRJY29u
RGF0YWJhc2UqIHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpCiAgICAgcmV0dXJuIGRhdGFiYXNl
OwogfQogCitzdGF0aWMgV2ViS2l0U3BlbGxDaGVja2VyKiBzcGVsbENoZWNrZXIgPSAwOworCitX
ZWJLaXRTcGVsbENoZWNrZXIqIHdlYmtpdF9nZXRfc3BlbGxfY2hlY2tlcigpCit7CisgICAgd2Vi
a2l0SW5pdCgpOworCisgICAgaWYgKCFzcGVsbENoZWNrZXIpCisjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCisgICAgICAgIHNwZWxsQ2hlY2tlciA9IFdFQktJVF9TUEVMTF9DSEVDS0VSKGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQsIE5VTEwpKTsKKyNlbHNlCisg
ICAgICAgIHNwZWxsQ2hlY2tlciA9IFdFQktJVF9TUEVMTF9DSEVDS0VSKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX05PTkUsIE5VTEwpKTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIHNwZWxsQ2hlY2tlcjsKK30KKwordm9pZCB3ZWJraXRfc2V0X3NwZWxsX2NoZWNrZXIoV2Vi
S2l0U3BlbGxDaGVja2VyKiBjaGVja2VyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWNoZWNr
ZXIgfHwgV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVIoY2hlY2tlcikpOworCisgICAgd2Via2l0SW5p
dCgpOworCisgICAgaWYgKHNwZWxsQ2hlY2tlcikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoc3Bl
bGxDaGVja2VyKTsKKworICAgIHNwZWxsQ2hlY2tlciA9IGNoZWNrZXI7CisKKyAgICBpZiAoc3Bl
bGxDaGVja2VyKQorICAgICAgICBnX29iamVjdF9yZWYoc3BlbGxDaGVja2VyKTsKK30KKwogdm9p
ZCB3ZWJraXRJbml0KCkKIHsKICAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVkID0gZmFsc2U7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oIGIv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaAppbmRleCAzM2QyYjhiNDg0
NzI1OWY0YTExZmJiZGI2YjQ2ZjU0MmU4MTE5NDFhLi4yNTRkNGI0MTg4MDUxMGU3YzRlOThiZjg5
MGQ1NjA3YzYyZjAxYzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0Z2xvYmFscy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxz
LmgKQEAgLTY3LDYgKzY3LDEyIEBAIHdlYmtpdF9zZXRfY2FjaGVfbW9kZWwgICAgICAgICAgICAg
ICAgICAgICAgICAgIChXZWJLaXRDYWNoZU1vZGVsICAgICBjYWNoZV9tb2RlCiBXRUJLSVRfQVBJ
IFdlYktpdENhY2hlTW9kZWwKIHdlYmtpdF9nZXRfY2FjaGVfbW9kZWwgICAgICAgICAgICAgICAg
ICAgICAgICAgICh2b2lkKTsKIAorV0VCS0lUX0FQSSBXZWJLaXRTcGVsbENoZWNrZXIqCit3ZWJr
aXRfZ2V0X3NwZWxsX2NoZWNrZXIgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X3NldF9zcGVsbF9jaGVja2VyICAgICAgICAgICAgICAgICAg
ICAgICAgKFdlYktpdFNwZWxsQ2hlY2tlciogIGNoZWNrZXIpOworCiBHX0VORF9ERUNMUwogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNo
ZWNrZXIuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXIuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zNGY4ZjhkYTFmNTYwNGEyNzViMGU4MTE2YWFmMDIzODY5NGUzNDQ3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tl
ci5jCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIndlYmtpdHNwZWxsY2hlY2tlci5oIgorCisvKioKKyAqIFNFQ1RJT046d2Vi
a2l0c3BlbGxjaGVja2VyCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IHRoZSBzcGVsbCBjaGVja2lu
ZyBBUEkgZm9yIFdlYktpdAorICoKKyAqICNXZWJLaXRTcGVsbENoZWNrZXIgcHJvdmlkZXMgQVBJ
cyBmb3IgdGhlIHNwZWxsIGNoZWNraW5nCisgKiBmdW5jdGlvbmFsaXR5IHVzZWQgaW50ZXJuYWxs
eSBieSBXZWJLaXQgdG8gcGVyZm9ybSBzcGVsbCBjaGVja2luZworICogaW4gaW5wdXQgb3IgdGV4
dCBhcmVhcy4gVGhpcyBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIGJ5IGJyb3dzZXJzCisgKiB0
byBpbXBsZW1lbnQgY3VzdG9tIHNwZWxsIGNoZWNraW5nIGNvbnRleHQgbWVudXMgb3Igc29waGlz
dGljYXRlZAorICogYXV0by1jb3JyZWN0IGZlYXR1cmVzLgorICovCisKK0dfREVGSU5FX0lOVEVS
RkFDRShXZWJLaXRTcGVsbENoZWNrZXIsIHdlYmtpdF9zcGVsbF9jaGVja2VyLCBHX1RZUEVfT0JK
RUNUKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfZGVmYXVsdF9pbml0KFdl
YktpdFNwZWxsQ2hlY2tlckludGVyZmFjZSogaWZhY2UpCit7Cit9CisKKy8qKgorICogd2Via2l0
X3NwZWxsX2NoZWNrZXJfY2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5nOgorICogQGNoZWNrZXI6IGEg
I1dlYktpdFNwZWxsQ2hlY2tlcgorICogQHN0cmluZzogdGhlIHN0cmluZyB0byBjaGVjayBmb3Ig
bWlzc3BlbGxpbmdzCisgKiBAbWlzc3BlbGxpbmdfbG9jYXRpb246IChvdXQpIChhbGxvdy1ub25l
KSBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0byBzdG9yZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZp
cnN0IG1pc3NwZWxsaW5nCisgKiBAbWlzc3BlbGxpbmdfbGVuZ3RoOiAob3V0KSAoYWxsb3ctbm9u
ZSkgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgdG8gc3RvcmUgdGhlIGxlbmd0aCBvZiB0aGUgZmly
c3QgbWlzc3BlbGxpbmcKKyAqCisgKiBDaGVja3MgQHN0cmluZyBmb3IgbWlzc3BlbGxpbmdzIHVz
aW5nIEBjaGVja2VyLCBzdG9yaW5nIHRoZQorICogbG9jYXRpb24gYW5kIGxlbmd0aCBvZiB0aGUg
Zmlyc3QgbWlzc3BlbGxpbmcgaW4KKyAqIEBtaXNzcGVsbGluZ19sb2NhdGlvbiBhbmQgQG1pc3Nw
ZWxsaW5nX2xlbmd0aCByZXNwZWN0aXZlbHkuCisgKgorICogU2luY2U6IDEuNS4xCisgKiovCit2
b2lkIHdlYmtpdF9zcGVsbF9jaGVja2VyX2NoZWNrX3NwZWxsaW5nX29mX3N0cmluZyhXZWJLaXRT
cGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHN0cmluZywgaW50KiBtaXNzcGVsbGlu
Z19sb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ19sZW5ndGgpCit7CisgICAgV2ViS2l0U3BlbGxD
aGVja2VySW50ZXJmYWNlKiBpZmFjZTsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1NQRUxMX0NIRUNLRVIoY2hlY2tlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyaW5nKTsK
KworICAgIGlmYWNlID0gV0VCS0lUX1NQRUxMX0NIRUNLRVJfR0VUX0lGQUNFKGNoZWNrZXIpOwor
ICAgIGlmIChpZmFjZS0+Y2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5nKQorICAgICAgICBpZmFjZS0+
Y2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5nKGNoZWNrZXIsIHN0cmluZywgbWlzc3BlbGxpbmdfbG9j
YXRpb24sIG1pc3NwZWxsaW5nX2xlbmd0aCk7Cit9CisKKy8qKgorICogd2Via2l0X3NwZWxsX2No
ZWNrZXJfZ2V0X2d1ZXNzZXNfZm9yX3dvcmQ6CisgKiBAY2hlY2tlcjogYSAjV2ViS2l0U3BlbGxD
aGVja2VyCisgKiBAd29yZDogdGhlIG1pc3NwZWxsZWQgd29yZAorICogQGNvbnRleHQ6IChhbGxv
dy1ub25lKSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiB0aGUgbWlzc3BlbGxlZCB3b3JkCisg
KgorICogUmV0dXJucyBhICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgZ3Vlc3NlcyBmb3IgY29y
cmVjdGlvbnMgb2YgdGhlCisgKiBtaXNzcGVsbGVkIHdvcmQgQHdvcmQuCisgKgorICogUmV0dXJu
czogYSBuZXdseSBhbGxvY2F0ZWQgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBndWVzc2VkCisg
KiBjb3JyZWN0aW9ucyBmb3IgYSBtaXNzcGVsbGVkIHdvcmQgQHdvcmQuIEZyZWUgaXQgd2l0aCAl
Z19zdHJmcmVldgorICogd2hlbiBkb25lIHdpdGggaXQuCisgKgorICogU2luY2U6IDEuNS4xCisg
KiovCitjaGFyKiogd2Via2l0X3NwZWxsX2NoZWNrZXJfZ2V0X2d1ZXNzZXNfZm9yX3dvcmQoV2Vi
S2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkLCBjb25zdCBjaGFyKiBj
b250ZXh0KQoreworICAgIFdlYktpdFNwZWxsQ2hlY2tlckludGVyZmFjZSogaWZhY2U7CisKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU1BFTExfQ0hFQ0tFUihjaGVja2VyKSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwod29yZCwgMCk7CisKKyAgICBpZmFjZSA9IFdF
QktJVF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFDRShjaGVja2VyKTsKKyAgICBpZiAoaWZhY2UtPmdl
dF9ndWVzc2VzX2Zvcl93b3JkKQorICAgICAgICByZXR1cm4gaWZhY2UtPmdldF9ndWVzc2VzX2Zv
cl93b3JkKGNoZWNrZXIsIHdvcmQsIGNvbnRleHQpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8q
KgorICogd2Via2l0X3NwZWxsX2NoZWNrZXJfdXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
czoKKyAqIEBjaGVja2VyOiBhICNXZWJLaXRTcGVsbENoZWNrZXIKKyAqIEBsYW5ndWFnZXM6IChh
bGxvdy1ub25lKSBhIHN0cmluZyBvZiBsYW5ndWFnZXMgdG8gdXNlIGZvciBAY2hlY2tlcgorICoK
KyAqIFNldHMgQGxhbmd1YWdlcyBhcyB0aGUgbGlzdCBvZiBsYW5ndWFnZXMgdG8gdXNlIGJ5IEBj
aGVja2VyLiBUaGUKKyAqIGFjY2VwdGVkIGZvcm1hdCBpcyBhIGxpc3Qgb2YgY29tbWEgKCcsJykg
c2VwYXJhdGVkIGxhbmd1YWdlIGNvZGVzCisgKiBvZiB0aGUgZm9ybSAnZW5fVVMnLCBpZSwgbGFu
Z3VhZ2VfVkFSSUFOVC4KKyAqCisgKiBTaW5jZTogMS41LjEKKyAqKi8KK3ZvaWQgd2Via2l0X3Nw
ZWxsX2NoZWNrZXJfdXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyhXZWJLaXRTcGVsbENo
ZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIGxhbmd1YWdlcykKK3sKKyAgICBXZWJLaXRTcGVs
bENoZWNrZXJJbnRlcmZhY2UqIGlmYWNlOworCisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfU1BFTExfQ0hFQ0tFUihjaGVja2VyKSk7CisKKyAgICBpZmFjZSA9IFdFQktJVF9TUEVMTF9D
SEVDS0VSX0dFVF9JRkFDRShjaGVja2VyKTsKKyAgICBpZiAoaWZhY2UtPnVwZGF0ZV9zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXMpCisgICAgICAgIGlmYWNlLT51cGRhdGVfc3BlbGxfY2hlY2tpbmdf
bGFuZ3VhZ2VzKGNoZWNrZXIsIGxhbmd1YWdlcyk7Cit9CisKKy8qKgorICogd2Via2l0X3NwZWxs
X2NoZWNrZXJfZ2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQ6
CisgKiBAY2hlY2tlcjogYSAjV2ViS2l0U3BlbGxDaGVja2VyCisgKiBAd29yZDogYSBtaXNzcGVs
bGVkIHdvcmQKKyAqCisgKiBSZXR1cm5zIGEgc3VnZ2VzdGlvbiBmb3IgYSB3b3JkIHRvIHVzZSBp
biBhbiAiYXV0b2NvcnJlY3QiIGZlYXR1cmUuCisgKgorICogUmV0dXJuczogdGhlIHN1Z2dlc3Rp
b24gZm9yIHRoZSBhdXRvY29ycmVjdGlvbiBvZiBAd29yZAorICoKKyAqIFNpbmNlOiAxLjUuMQor
ICoqLworY2hhciogd2Via2l0X3NwZWxsX2NoZWNrZXJfZ2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rp
b25zX2Zvcl9taXNzcGVsbGVkX3dvcmQoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25z
dCBjaGFyKiB3b3JkKQoreworICAgIFdlYktpdFNwZWxsQ2hlY2tlckludGVyZmFjZSogaWZhY2U7
CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU1BFTExfQ0hFQ0tFUihjaGVj
a2VyKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwod29yZCwgMCk7CisKKyAgICBpZmFj
ZSA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFDRShjaGVja2VyKTsKKyAgICBpZiAoaWZh
Y2UtPmdldF9hdXRvY29ycmVjdF9zdWdnZXN0aW9uc19mb3JfbWlzc3BlbGxlZF93b3JkKQorICAg
ICAgICByZXR1cm4gaWZhY2UtPmdldF9hdXRvY29ycmVjdF9zdWdnZXN0aW9uc19mb3JfbWlzc3Bl
bGxlZF93b3JkKGNoZWNrZXIsIHdvcmQpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICog
d2Via2l0X3NwZWxsX2NoZWNrZXJfbGVhcm5fd29yZDoKKyAqIEBjaGVja2VyOiBhICNXZWJLaXRT
cGVsbENoZWNrZXIKKyAqIEB3b3JkOiB0aGUgd29yZCB0byBsZWFybgorICoKKyAqIEluc3RydWN0
cyB0aGUgQGNoZWNrZXIgdG8gYWRkIEB3b3JkIHRvIGl0cyBkaWN0aW9uYXJ5IGFzIGEgcHJvcGVy
bHkKKyAqIHNwZWxsZWQgd29yZC4KKyAqCisgKiBTaW5jZTogMS41LjEKKyAqKi8KK3ZvaWQgd2Vi
a2l0X3NwZWxsX2NoZWNrZXJfbGVhcm5fd29yZChXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIs
IGNvbnN0IGNoYXIqIHdvcmQpCit7CisgICAgV2ViS2l0U3BlbGxDaGVja2VySW50ZXJmYWNlKiBp
ZmFjZTsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVIoY2hl
Y2tlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwod29yZCk7CisKKyAgICBpZmFjZSA9IFdFQktJ
VF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFDRShjaGVja2VyKTsKKyAgICBpZiAoaWZhY2UtPmxlYXJu
X3dvcmQpCisgICAgICAgIGlmYWNlLT5sZWFybl93b3JkKGNoZWNrZXIsIHdvcmQpOworfQorCisv
KioKKyAqIHdlYmtpdF9zcGVsbF9jaGVja2VyX2lnbm9yZV93b3JkOgorICogQGNoZWNrZXI6IGEg
I1dlYktpdFNwZWxsQ2hlY2tlcgorICogQHdvcmQ6IHRoZSB3b3JkIHRvIGlnbm9yZQorICoKKyAq
IEluc3RydWN0cyB0aGUgQGNoZWNrZXIgdG8gaWdub3JlIEB3b3JkIGFzIGEgbWlzc3BlbGxpbmcg
ZnJvbSBub3cKKyAqIG9uLgorICoKKyAqIFNpbmNlOiAxLjUuMQorICoqLwordm9pZCB3ZWJraXRf
c3BlbGxfY2hlY2tlcl9pZ25vcmVfd29yZChXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNv
bnN0IGNoYXIqIHdvcmQpCit7CisgICAgV2ViS2l0U3BlbGxDaGVja2VySW50ZXJmYWNlKiBpZmFj
ZTsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVIoY2hlY2tl
cikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwod29yZCk7CisKKyAgICBpZmFjZSA9IFdFQktJVF9T
UEVMTF9DSEVDS0VSX0dFVF9JRkFDRShjaGVja2VyKTsKKyAgICBpZiAoaWZhY2UtPmlnbm9yZV93
b3JkKQorICAgICAgICBpZmFjZS0+aWdub3JlX3dvcmQoY2hlY2tlciwgd29yZCk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c3BlbGxjaGVja2VyLmggYi9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c3BlbGxjaGVja2VyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzViZmI3YTQ1NjE4Yzk3MWJhODI0Mjg1ZTgxMGE3YzQxZWNmZWMyMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXIuaApAQCAtMCww
ICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
d2Via2l0c3BlbGxjaGVja2VyX2gKKyNkZWZpbmUgd2Via2l0c3BlbGxjaGVja2VyX2gKKworI2lu
Y2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUiAgICAgICAgICAg
KHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9TUEVMTF9D
SEVDS0VSKG9iaikgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUiwgV2ViS2l0U3BlbGxDaGVja2VyKSkKKyNkZWZpbmUg
V0VCS0lUX0lTX1NQRUxMX0NIRUNLRVIob2JqKSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUikpCisjZGVmaW5lIFdFQktJ
VF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFDRShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0lOVEVS
RkFDRSAoKG9iaiksIFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVIsIFdlYktpdFNwZWxsQ2hlY2tl
ckludGVyZmFjZSkpCisKK3N0cnVjdCBfV2ViS2l0U3BlbGxDaGVja2VySW50ZXJmYWNlIHsKKyAg
ICBHVHlwZUludGVyZmFjZSBnX2lmYWNlOworCisgICAgdm9pZCAgICgqY2hlY2tfc3BlbGxpbmdf
b2Zfc3RyaW5nKSAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRTcGVsbENoZWNrZXIqIGNo
ZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQsIGludCogbWlzc3BlbGxpbmdfbG9jYXRpb24sIGludCog
bWlzc3BlbGxpbmdfbGVuZ3RoKTsKKyAgICBjaGFyKiogKCpnZXRfZ3Vlc3Nlc19mb3Jfd29yZCkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwg
Y29uc3QgY2hhciogd29yZCwgY29uc3QgY2hhciogY29udGV4dCk7CisgICAgdm9pZCAgICgqdXBk
YXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcykgICAgICAgICAgICAgICAgIChXZWJLaXRTcGVs
bENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIGxhbmd1YWdlcyk7CisgICAgY2hhciogICgq
Z2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQpIChXZWJLaXRT
cGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQpOworICAgIHZvaWQgICAoKmxl
YXJuX3dvcmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0U3Bl
bGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkKTsKKyAgICB2b2lkICAgKCppZ25v
cmVfd29yZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFNwZWxs
Q2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29yZCk7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlIHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKKwor
V0VCS0lUX0FQSSB2b2lkICAgIHdlYmtpdF9zcGVsbF9jaGVja2VyX2NoZWNrX3NwZWxsaW5nX29m
X3N0cmluZyhXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHN0cmluZywg
aW50KiBtaXNzcGVsbGluZ19sb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ19sZW5ndGgpOworV0VC
S0lUX0FQSSBjaGFyKiogIHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9ndWVzc2VzX2Zvcl93b3Jk
KFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29yZCwgY29uc3QgY2hh
ciogY29udGV4dCk7CitXRUJLSVRfQVBJIHZvaWQgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfdXBk
YXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyhXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIs
IGNvbnN0IGNoYXIqIGxhbmd1YWdlcyk7CitXRUJLSVRfQVBJIGNoYXIqICAgd2Via2l0X3NwZWxs
X2NoZWNrZXJfZ2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQo
V2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkKTsKK1dFQktJVF9B
UEkgdm9pZCAgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9sZWFybl93b3JkKFdlYktpdFNwZWxsQ2hl
Y2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29yZCk7CitXRUJLSVRfQVBJIHZvaWQgICAgd2Vi
a2l0X3NwZWxsX2NoZWNrZXJfaWdub3JlX3dvcmQoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2Vy
LCBjb25zdCBjaGFyKiB3b3JkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wYmZjMmMwMmUxNWIwZWU2YjU3NmY0NTNjZTNhMTJkOGJhZjc2ZjVkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hl
Y2tlcmVuY2hhbnQuY3BwCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHNwZWxsY2hlY2tlcmVuY2hhbnQuaCIKKwor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiR093blB0ci5oIgorI2luY2x1ZGUg
IndlYmtpdHNwZWxsY2hlY2tlci5oIgorCisjaW5jbHVkZSA8ZW5jaGFudC5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3N0YXRpYyBFbmNo
YW50QnJva2VyKiBicm9rZXIgPSAwOworCitzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hlY2tlckVuY2hh
bnRQcml2YXRlIHsKKyAgICBHU0xpc3QqIG1fZW5jaGFudERpY3RzOworfTsKKworc3RhdGljIHZv
aWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9p
bml0KFdlYktpdFNwZWxsQ2hlY2tlckludGVyZmFjZSogaW50ZXJmYWNlKTsKKworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUoV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudCwgd2Via2l0X3NwZWxsX2No
ZWNrZXJfZW5jaGFudCwgR19UWVBFX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRSAoV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3NwZWxsX2NoZWNr
ZXJfZW5jaGFudF9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9pbml0KSkKKworc3RhdGljIHZvaWQg
ZnJlZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZShncG9pbnRlciBkYXRhLCBncG9pbnRlcikKK3sKKyAg
ICBpZiAoIWJyb2tlcikKKyAgICAgICAgYnJva2VyID0gZW5jaGFudF9icm9rZXJfaW5pdCgpOwor
CisgICAgRW5jaGFudERpY3QqIGRpY3QgPSBzdGF0aWNfY2FzdDxFbmNoYW50RGljdCo+KGRhdGEp
OworICAgIGVuY2hhbnRfYnJva2VyX2ZyZWVfZGljdChicm9rZXIsIGRpY3QpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfc3BlbGxfY2hlY2tlcl9lbmNoYW50X2ZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQob2JqZWN0KS0+cHJpdjsKKworICAgIGdfc2xpc3Rf
Zm9yZWFjaChwcml2LT5tX2VuY2hhbnREaWN0cywgZnJlZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZSwg
MCk7CisgICAgZ19zbGlzdF9mcmVlKHByaXYtPm1fZW5jaGFudERpY3RzKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9jbGFzc19pbml0KFdlYktpdFNwZWxs
Q2hlY2tlckVuY2hhbnRDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIG9iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfZmluYWxpemU7CisKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50
UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc3BlbGxfY2hlY2tlcl9lbmNoYW50
X2luaXQoV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudCogY2hlY2tlcikKK3sKKyAgICBXZWJLaXRT
cGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJ
VkFURShjaGVja2VyLCBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQsIFdlYktpdFNw
ZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlKTsKKyAgICBjaGVja2VyLT5wcml2ID0gcHJpdjsKK30K
Kworc3RhdGljIHZvaWQgY2hlY2tfc3BlbGxpbmdfb2Zfc3RyaW5nKFdlYktpdFNwZWxsQ2hlY2tl
ciogY2hlY2tlciwgY29uc3QgY2hhciogc3RyaW5nLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24s
IGludCogbWlzc3BlbGxpbmdMZW5ndGgpCit7CisgICAgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFu
dFByaXZhdGUqIHByaXYgPSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UKGNoZWNrZXIpLT5w
cml2OworCisgICAgR1NMaXN0KiBkaWN0cyA9IHByaXYtPm1fZW5jaGFudERpY3RzOworICAgIGlm
ICghZGljdHMpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBsZW5ndGggPSBnX3V0Zjhfc3Ry
bGVuKHN0cmluZywgLTEpOworCisgICAgUGFuZ29MYW5ndWFnZSogbGFuZ3VhZ2UocGFuZ29fbGFu
Z3VhZ2VfZ2V0X2RlZmF1bHQoKSk7CisgICAgR093blB0cjxQYW5nb0xvZ0F0dHI+IGF0dHJzKGdf
bmV3KFBhbmdvTG9nQXR0ciwgbGVuZ3RoICsgMSkpOworCisgICAgLy8gcGFuZ29fZ2V0X2xvZ19h
dHRycyB1c2VzIGFuIGFkaXRpb25hbCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0Lgor
ICAgIHBhbmdvX2dldF9sb2dfYXR0cnMoc3RyaW5nLCAtMSwgLTEsIGxhbmd1YWdlLCBhdHRycy5n
ZXQoKSwgbGVuZ3RoICsgMSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aCArIDE7
IGkrKykgeworICAgICAgICAvLyBXZSBnbyB0aHJvdWdoIGVhY2ggY2hhcmFjdGVyIHVudGlsIHdl
IGZpbmQgYW4gaXNfd29yZF9zdGFydCwKKyAgICAgICAgLy8gdGhlbiB3ZSBnZXQgaW50byBhbiBp
bm5lciBsb29wIHRvIGZpbmQgdGhlIGlzX3dvcmRfZW5kIGNvcnJlc3BvbmRpbmcKKyAgICAgICAg
Ly8gdG8gaXQuCisgICAgICAgIGlmIChhdHRycy5nZXQoKVtpXS5pc193b3JkX3N0YXJ0KSB7Cisg
ICAgICAgICAgICBpbnQgc3RhcnQgPSBpOworICAgICAgICAgICAgaW50IGVuZCA9IGk7CisgICAg
ICAgICAgICBpbnQgd29yZExlbmd0aDsKKworICAgICAgICAgICAgd2hpbGUgKGF0dHJzLmdldCgp
W2VuZF0uaXNfd29yZF9lbmQgPCAxKQorICAgICAgICAgICAgICAgIGVuZCsrOworCisgICAgICAg
ICAgICB3b3JkTGVuZ3RoID0gZW5kIC0gc3RhcnQ7CisgICAgICAgICAgICAvLyBTZXQgdGhlIGl0
ZXJhdG9yIHRvIGJlIGF0IHRoZSBjdXJyZW50IHdvcmQgZW5kLCBzbyB3ZSBkb24ndAorICAgICAg
ICAgICAgLy8gY2hlY2sgY2hhcmFjdGVycyB0d2ljZS4KKyAgICAgICAgICAgIGkgPSBlbmQ7CisK
KyAgICAgICAgICAgIGdjaGFyKiBjc3RhcnQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIoc3Ry
aW5nLCBzdGFydCk7CisgICAgICAgICAgICBnaW50IGJ5dGVzID0gc3RhdGljX2Nhc3Q8Z2ludD4o
Z191dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgZW5kKSAtIGNzdGFydCk7CisgICAgICAg
ICAgICBHT3duUHRyPGdjaGFyPiB3b3JkKGdfbmV3MChnY2hhciwgYnl0ZXMgKyAxKSk7CisKKyAg
ICAgICAgICAgIGdfdXRmOF9zdHJuY3B5KHdvcmQuZ2V0KCksIGNzdGFydCwgd29yZExlbmd0aCk7
CisKKyAgICAgICAgICAgIGZvciAoOyBkaWN0czsgZGljdHMgPSBkaWN0cy0+bmV4dCkgeworICAg
ICAgICAgICAgICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFudERpY3Qq
PihkaWN0cy0+ZGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKGVuY2hhbnRfZGljdF9jaGVjayhk
aWN0LCB3b3JkLmdldCgpLCB3b3JkTGVuZ3RoKSkgeworICAgICAgICAgICAgICAgICAgICAqbWlz
c3BlbGxpbmdMb2NhdGlvbiA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICAqbWlzc3BlbGxp
bmdMZW5ndGggPSB3b3JkTGVuZ3RoOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFN0b3AgY2hlY2tpbmcsIHRoaXMgd29yZCBpcyBvayBpbiBhdCBsZWFz
dCBvbmUgZGljdC4KKyAgICAgICAgICAgICAgICAgICAgKm1pc3NwZWxsaW5nTG9jYXRpb24gPSAt
MTsKKyAgICAgICAgICAgICAgICAgICAgKm1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorCitzdGF0aWMgY2hhcioqIGdldF9ndWVzc2VzX2Zvcl93b3JkKFdl
YktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29yZCwgY29uc3QgY2hhciog
Y29udGV4dCkKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQoY2hlY2tlciktPnByaXY7CisKKyAgICBHU0xp
c3QqIGRpY3RzID0gcHJpdi0+bV9lbmNoYW50RGljdHM7CisgICAgY2hhcioqIGd1ZXNzZXMgPSAw
OworCisgICAgZm9yICg7IGRpY3RzOyBkaWN0cyA9IGRpY3RzLT5uZXh0KSB7CisgICAgICAgIHNp
emVfdCBudW1iZXJPZlN1Z2dlc3Rpb25zOworICAgICAgICBzaXplX3QgaTsKKworICAgICAgICBF
bmNoYW50RGljdCogZGljdCA9IHN0YXRpY19jYXN0PEVuY2hhbnREaWN0Kj4oZGljdHMtPmRhdGEp
OworICAgICAgICBnY2hhcioqIHN1Z2dlc3Rpb25zID0gZW5jaGFudF9kaWN0X3N1Z2dlc3QoZGlj
dCwgd29yZCwgLTEsICZudW1iZXJPZlN1Z2dlc3Rpb25zKTsKKworICAgICAgICBpZiAobnVtYmVy
T2ZTdWdnZXN0aW9ucyA+IDApIHsKKyAgICAgICAgICAgIGlmIChudW1iZXJPZlN1Z2dlc3Rpb25z
ID4gMTApCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZTdWdnZXN0aW9ucyA9IDEwOworCisgICAg
ICAgICAgICBndWVzc2VzID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihnX21hbGxvYzAoKG51bWJlck9m
U3VnZ2VzdGlvbnMgKyAxKSAqIHNpemVvZihjaGFyKikpKTsKKyAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBudW1iZXJPZlN1Z2dlc3Rpb25zICYmIGkgPCAxMDsgaSsrKQorICAgICAgICAgICAg
ICAgIGd1ZXNzZXNbaV0gPSBnX3N0cmR1cChzdWdnZXN0aW9uc1tpXSk7CisKKyAgICAgICAgICAg
IGd1ZXNzZXNbaV0gPSAwOworCisgICAgICAgICAgICBlbmNoYW50X2RpY3RfZnJlZV9zdWdnZXN0
aW9ucyhkaWN0LCBzdWdnZXN0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
Z3Vlc3NlczsKK30KKworc3RhdGljIHZvaWQgZ2V0QXZhaWxhYmxlRGljdGlvbmFyaWVzQ2FsbGJh
Y2soY29uc3QgY2hhciogY29uc3QgbGFuZ3VhZ2VUYWcsIGNvbnN0IGNoYXIqIGNvbnN0LCBjb25z
dCBjaGFyKiBjb25zdCwgY29uc3QgY2hhciogY29uc3QsIHZvaWQqIGRhdGEpCit7CisgICAgVmVj
dG9yPENTdHJpbmc+KiBkaWN0cyA9IHN0YXRpY19jYXN0PFZlY3RvcjxDU3RyaW5nPio+KGRhdGEp
OworCisgICAgZGljdHMtPmFwcGVuZChsYW5ndWFnZVRhZyk7Cit9CisKK3N0YXRpYyB2b2lkIHVw
ZGF0ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2Vy
LCBjb25zdCBjaGFyKiBsYW5ndWFnZXMpCit7CisgICAgRW5jaGFudERpY3QqIGRpY3Q7CisgICAg
R1NMaXN0KiBzcGVsbERpY3Rpb25hcmllcyA9IDA7CisKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJF
bmNoYW50UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQoY2hlY2tl
ciktPnByaXY7CisKKyAgICBpZiAoIWJyb2tlcikKKyAgICAgICAgYnJva2VyID0gZW5jaGFudF9i
cm9rZXJfaW5pdCgpOworCisgICAgaWYgKGxhbmd1YWdlcykgeworICAgICAgICBjaGFyKiogbGFu
Z3MgPSBnX3N0cnNwbGl0KGxhbmd1YWdlcywgIiwiLCAtMSk7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBsYW5nc1tpXTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZW5jaGFudF9icm9rZXJfZGlj
dF9leGlzdHMoYnJva2VyLCBsYW5nc1tpXSkpIHsKKyAgICAgICAgICAgICAgICBkaWN0ID0gZW5j
aGFudF9icm9rZXJfcmVxdWVzdF9kaWN0KGJyb2tlciwgbGFuZ3NbaV0pOworICAgICAgICAgICAg
ICAgIHNwZWxsRGljdGlvbmFyaWVzID0gZ19zbGlzdF9hcHBlbmQoc3BlbGxEaWN0aW9uYXJpZXMs
IGRpY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdfc3RyZnJlZXYobGFu
Z3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxhbmd1YWdlID0gcGFuZ29f
bGFuZ3VhZ2VfdG9fc3RyaW5nKGd0a19nZXRfZGVmYXVsdF9sYW5ndWFnZSgpKTsKKyAgICAgICAg
aWYgKGVuY2hhbnRfYnJva2VyX2RpY3RfZXhpc3RzKGJyb2tlciwgbGFuZ3VhZ2UpKSB7CisgICAg
ICAgICAgICBkaWN0ID0gZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0KGJyb2tlciwgbGFuZ3Vh
Z2UpOworICAgICAgICAgICAgc3BlbGxEaWN0aW9uYXJpZXMgPSBnX3NsaXN0X2FwcGVuZChzcGVs
bERpY3Rpb25hcmllcywgZGljdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBO
byBkaWN0aW9uYXJpZXMgc2VsZWN0ZWQsIHdlIGdldCBvbmUgZnJvbSB0aGUgbGlzdAorICAgICAg
ICAgICAgVmVjdG9yPENTdHJpbmc+IGFsbERpY3Rpb25hcmllczsKKyAgICAgICAgICAgIGVuY2hh
bnRfYnJva2VyX2xpc3RfZGljdHMoYnJva2VyLCBnZXRBdmFpbGFibGVEaWN0aW9uYXJpZXNDYWxs
YmFjaywgJmFsbERpY3Rpb25hcmllcyk7CisgICAgICAgICAgICBpZiAoIWFsbERpY3Rpb25hcmll
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBkaWN0ID0gZW5jaGFudF9icm9rZXJfcmVx
dWVzdF9kaWN0KGJyb2tlciwgYWxsRGljdGlvbmFyaWVzWzBdLmRhdGEoKSk7CisgICAgICAgICAg
ICAgICAgc3BlbGxEaWN0aW9uYXJpZXMgPSBnX3NsaXN0X2FwcGVuZChzcGVsbERpY3Rpb25hcmll
cywgZGljdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZ19zbGlzdF9m
b3JlYWNoKHByaXYtPm1fZW5jaGFudERpY3RzLCBmcmVlU3BlbGxDaGVja2luZ0xhbmd1YWdlLCAw
KTsKKyAgICBnX3NsaXN0X2ZyZWUocHJpdi0+bV9lbmNoYW50RGljdHMpOworICAgIHByaXYtPm1f
ZW5jaGFudERpY3RzID0gc3BlbGxEaWN0aW9uYXJpZXM7Cit9CisKK3N0YXRpYyBjaGFyKiBnZXRf
YXV0b2NvcnJlY3Rfc3VnZ2VzdGlvbnNfZm9yX21pc3NwZWxsZWRfd29yZChXZWJLaXRTcGVsbENo
ZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9
CisKK3N0YXRpYyB2b2lkIGxlYXJuX3dvcmQoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBj
b25zdCBjaGFyKiB3b3JkKQoreworICAgIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX1NQRUxMX0NIRUNLRVJfRU5DSEFOVChjaGVja2VyKS0+cHJpdjsKKyAg
ICBHU0xpc3QqIGRpY3RzID0gcHJpdi0+bV9lbmNoYW50RGljdHM7CisKKyAgICBmb3IgKDsgZGlj
dHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsKKyAgICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSBz
dGF0aWNfY2FzdDxFbmNoYW50RGljdCo+KGRpY3RzLT5kYXRhKTsKKworICAgICAgICBlbmNoYW50
X2RpY3RfYWRkX3RvX3BlcnNvbmFsKGRpY3QsIHdvcmQsIC0xKTsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIGlnbm9yZV93b3JkKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hh
ciogd29yZCkKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQoY2hlY2tlciktPnByaXY7CisgICAgR1NMaXN0
KiBkaWN0cyA9IHByaXYtPm1fZW5jaGFudERpY3RzOworCisgICAgZm9yICg7IGRpY3RzOyBkaWN0
cyA9IGRpY3RzLT5uZXh0KSB7CisgICAgICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nh
c3Q8RW5jaGFudERpY3QqPihkaWN0cy0+ZGF0YSk7CisKKyAgICAgICAgZW5jaGFudF9kaWN0X2Fk
ZF90b19zZXNzaW9uKGRpY3QsIHdvcmQsIC0xKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfc3BlbGxfY2hlY2tlcl9pbnRlcmZhY2VfaW5pdChX
ZWJLaXRTcGVsbENoZWNrZXJJbnRlcmZhY2UqIGludGVyZmFjZSkKK3sKKyAgICBpbnRlcmZhY2Ut
PmNoZWNrX3NwZWxsaW5nX29mX3N0cmluZyA9IGNoZWNrX3NwZWxsaW5nX29mX3N0cmluZzsKKyAg
ICBpbnRlcmZhY2UtPmdldF9ndWVzc2VzX2Zvcl93b3JkID0gZ2V0X2d1ZXNzZXNfZm9yX3dvcmQ7
CisgICAgaW50ZXJmYWNlLT51cGRhdGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzID0gdXBkYXRl
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlczsKKyAgICBpbnRlcmZhY2UtPmdldF9hdXRvY29ycmVj
dF9zdWdnZXN0aW9uc19mb3JfbWlzc3BlbGxlZF93b3JkID0gZ2V0X2F1dG9jb3JyZWN0X3N1Z2dl
c3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQ7CisgICAgaW50ZXJmYWNlLT5sZWFybl93b3JkID0g
bGVhcm5fd29yZDsKKyAgICBpbnRlcmZhY2UtPmlnbm9yZV93b3JkID0gaWdub3JlX3dvcmQ7Cit9
CisKKyNlbmRpZiAvKiBFTkFCTEUoU1BFTExDSEVDSykgKi8KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tlcmVuY2hhbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTJlMWJjYWM3Yzc1YjZhMGQ0OTJiZDU0ZmE3MzU5ZmQxNzFkODY1YwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50LmgK
QEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIHdlYmtpdHNwZWxsY2hlY2tlcmVuY2hhbnRfaAorI2RlZmluZSB3ZWJraXRzcGVsbGNo
ZWNrZXJlbmNoYW50X2gKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UICAgICAg
ICAgICAgKHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX1NQRUxMX0NIRUNLRVJfRU5DSEFOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQs
IFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQpKQorI2RlZmluZSBXRUJLSVRfU1BFTExfQ0hFQ0tF
Ul9FTkNIQU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVJfRU5DSEFOVCwgV2ViS2l0U3BlbGxDaGVja2Vy
RW5jaGFudENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVJfRU5DSEFOVChv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQpKQorI2RlZmluZSBXRUJLSVRfSVNfU1BFTExfQ0hFQ0tF
Ul9FTkNIQU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVJfRU5DSEFOVCkpCisjZGVmaW5lIFdFQktJVF9TUEVM
TF9DSEVDS0VSX0VOQ0hBTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUl9FTkNIQU5ULCBXZWJLaXRTcGVs
bENoZWNrZXJFbmNoYW50Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U3BlbGxDaGVj
a2VyRW5jaGFudCBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50OwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFNwZWxsQ2hlY2tlckVuY2hhbnRDbGFzcyBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50Q2xh
c3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGUgV2Vi
S2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0U3BlbGxDaGVj
a2VyRW5jaGFudCB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJp
dmF0ZSA+Ki8KKyAgICBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSAqcHJpdjsKK307
CisKK3N0cnVjdCBfV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudENsYXNzIHsKKyAgICBHT2JqZWN0
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZSB3ZWJraXRfc3BlbGxf
Y2hlY2tlcl9lbmNoYW50X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYg
LyogRU5BQkxFKFNQRUxMQ0hFQ0spICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tlcm5vbmUuY3BwIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tlcm5vbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmZGJl
YjIyZDkyYTM3OWVlMWMxNDU0MGFhYjEwNzIwZjhkYTFiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c3BlbGxjaGVja2Vybm9uZS5jcHAKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJ3ZWJraXRzcGVsbGNoZWNrZXJub25lLmgiCisKKyNpbmNsdWRlICJ3ZWJraXRzcGVsbGNoZWNr
ZXIuaCIKKworc3RhdGljIHZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfbm9uZV9zcGVsbF9jaGVj
a2VyX2ludGVyZmFjZV9pbml0KFdlYktpdFNwZWxsQ2hlY2tlckludGVyZmFjZSogaW50ZXJmYWNl
KTsKKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0U3BlbGxDaGVja2VyTm9uZSwgd2Vi
a2l0X3NwZWxsX2NoZWNrZXJfbm9uZSwgR19UWVBFX09CSkVDVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3Nw
ZWxsX2NoZWNrZXJfbm9uZV9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9pbml0KSkKKworc3RhdGlj
IHZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfbm9uZV9jbGFzc19pbml0KFdlYktpdFNwZWxsQ2hl
Y2tlck5vbmVDbGFzcyoga2xhc3MpCit7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zcGVsbF9j
aGVja2VyX25vbmVfaW5pdChXZWJLaXRTcGVsbENoZWNrZXJOb25lKiBjaGVja2VyKQoreworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfc3BlbGxfY2hlY2tlcl9ub25lX3NwZWxsX2NoZWNrZXJfaW50
ZXJmYWNlX2luaXQoV2ViS2l0U3BlbGxDaGVja2VySW50ZXJmYWNlKiBpbnRlcmZhY2UpCit7Cisg
ICAgaW50ZXJmYWNlLT5jaGVja19zcGVsbGluZ19vZl9zdHJpbmcgPSAwOworICAgIGludGVyZmFj
ZS0+Z2V0X2d1ZXNzZXNfZm9yX3dvcmQgPSAwOworICAgIGludGVyZmFjZS0+dXBkYXRlX3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlcyA9IDA7CisgICAgaW50ZXJmYWNlLT5nZXRfYXV0b2NvcnJlY3Rf
c3VnZ2VzdGlvbnNfZm9yX21pc3NwZWxsZWRfd29yZCA9IDA7CisgICAgaW50ZXJmYWNlLT5sZWFy
bl93b3JkID0gMDsKKyAgICBpbnRlcmZhY2UtPmlnbm9yZV93b3JkID0gMDsKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tlcm5vbmUuaCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJub25lLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDU0YmRmNTNjYmMwOTNlYmZkOWNjZjg0NjVkNTQ5MzI0OTdhMWExZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJub25l
LmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIHdlYmtpdHNwZWxsY2hlY2tlcm5vbmVfaAorI2RlZmluZSB3ZWJraXRzcGVsbGNo
ZWNrZXJub25lX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBF
X1NQRUxMX0NIRUNLRVJfTk9ORSAgICAgICAgICAgICh3ZWJraXRfc3BlbGxfY2hlY2tlcl9ub25l
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9TUEVMTF9DSEVDS0VSX05PTkUob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfU1BF
TExfQ0hFQ0tFUl9OT05FLCBXZWJLaXRTcGVsbENoZWNrZXJOb25lKSkKKyNkZWZpbmUgV0VCS0lU
X1NQRUxMX0NIRUNLRVJfTk9ORV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX05PTkUsIFdlYktpdFNwZWxs
Q2hlY2tlck5vbmVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TUEVMTF9DSEVDS0VSX05PTkUo
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZ
UEVfU1BFTExfQ0hFQ0tFUl9OT05FKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVJf
Tk9ORV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfVFlQRV9TUEVMTF9DSEVDS0VSX05PTkUpKQorI2RlZmluZSBXRUJLSVRfU1BFTExfQ0hFQ0tF
Ul9OT05FX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVJfTk9ORSwgV2ViS2l0U3BlbGxDaGVja2VyTm9uZUNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hlY2tlck5vbmUgV2ViS2l0U3Bl
bGxDaGVja2VyTm9uZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTcGVsbENoZWNrZXJOb25lQ2xh
c3MgV2ViS2l0U3BlbGxDaGVja2VyTm9uZUNsYXNzOworCitzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hl
Y2tlck5vbmUgeworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRTcGVsbENoZWNrZXJOb25lQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlIHdlYmtpdF9zcGVsbF9jaGVja2VyX25vbmVfZ2V0
X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96483</attachid>
            <date>2011-06-08 14:37:04 -0700</date>
            <delta_ts>2011-06-08 15:51:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61787-20110608233657.patch</filename>
            <type>text/plain</type>
            <size>45748</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgzNTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCA1ODE5YmQ0MDhl
YzcwNWUwNTYyYmVmY2UwNjY3NmZjZTcxOGYwNTI4Li5jYmMyYzcxZjhjNjIwZDgzMzA2NzE2YmJk
ZmQ1ZDc4MzMyNDhjNTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEt
MDYtMDggIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXRTcGVsbENoZWNr
ZXIgaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxNzg3CisKKyAgICAgICAgRXhwb3NlIHRoZSBzcGVs
bCBjaGVja2luZyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBVQXMgdGhyb3VnaCBhCisgICAgICAgIGdl
bmVyaWMgaW50ZXJmYWNlLCBhbmQgcHJvdmlkZSBhIGRlZmF1bHQgRW5jaGFudC1iYXNlZAorICAg
ICAgICBpbXBsZW1lbnRhdGlvbi4gT24gdG9wIG9mIGFsbG93aW5nIFVBcyB0byB1c2UgdGhpcyBm
dW5jdGlvbmFsaXR5CisgICAgICAgIHRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gY2hhbmdlIHRo
ZSBzcGVsbCBjaGVja2luZyBiYWNrZW5kIGF0CisgICAgICAgIHJ1bnRpbWUuCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbTogYWRkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OkVk
aXRvckNsaWVudCk6IHNldCB0aGUgc3BlbGwgY2hlY2tlciB1c2luZworICAgICAgICB0aGUgbmV3
IGNsYXNzZXMuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRFbmNo
YW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNs
aWVudEd0ay5jcHA6IEFkZGVkCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50R3Rr
OjpUZXh0Q2hlY2tlckNsaWVudEd0ayk6IGp1c3QKKyAgICAgICAgY2hhaW4gdXAgdG8gdGhlIFdl
YktpdFNwZWxsQ2hlY2tlci4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRHdGs6
On5UZXh0Q2hlY2tlckNsaWVudEd0ayk6IGRpdHRvLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hl
Y2tlckNsaWVudEd0azo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCk6IGRpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlckNsaWVudEd0azo6bGVhcm5Xb3JkKTogZGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50R3RrOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcp
OiBkaXR0by4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRHdGs6OmdldEF1dG9D
b3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKTogZGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OlRleHRDaGVja2VyQ2xpZW50R3RrOjpnZXRHdWVzc2VzRm9yV29yZCk6IGRpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckNsaWVudEd0azo6dXBkYXRlU3BlbGxDaGVja2luZ0xh
bmd1YWdlKTogZGl0dG8uCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGll
bnRHdGsuaDogc3RvcmUgYSByZWZlcmVuY2UgdG8KKyAgICAgICAgdGhlIFdlYktpdFNwZWxsQ2hl
Y2tlci4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6IHRoZSB3ZWJraXRzcGVsbGNoZWNrZXIu
aCBoZWFkZXIgaXMgcHVibGljLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRkZWZpbmVzLmg6IGRl
ZmluZXMgZm9yIHNwZWxsIGNoZWNrZXIgaW50ZXJmYWNlLgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXRnbG9iYWxzLmNwcDogQWRkIEFQSXMgdG8gZ2V0IGFuZCBzZXQgdGhlIGdsb2JhbAorICAgICAg
ICBzcGVsbCBjaGVja2VyLgorICAgICAgICAod2Via2l0X2dldF9zcGVsbF9jaGVja2VyKTogZ2V0
IEFQSS4KKyAgICAgICAgKHdlYmtpdF9zZXRfc3BlbGxfY2hlY2tlcik6IHNldCBBUEkuCisgICAg
ICAgICogd2Via2l0L3dlYmtpdGdsb2JhbHMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0c3Bl
bGxjaGVja2VyLmNwcDogQWRkZWQuIFNwZWxsIGNoZWNraW5nIGludGVyZmFjZS4KKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0c3BlbGxjaGVja2VyLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93
ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50LmNwcDogQWRkZWQuIERlZmF1bHQKKyAgICAgICAgaW1w
bGVtZW50aW9uLCB1c2VzIEVuY2hhbnQgbGlicmFyeS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
c3BlbGxjaGVja2VyZW5jaGFudC5oOiBBZGRlZC4KKwogMjAxMS0wNi0wNyAgWGFuIExvcGV6ICA8
eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29u
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBiNjc2ZDAzYzVhMThkZjU3ZjUwN2VjYjU3
YmUyOTY1ZWNhMjMwZmVlLi5iZGVmOGFhNDFhZWM0NTE5OTU4NmJiOWU3YjkwODI0MzBkMjM1ZGQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMzMsOCArMzMsOCBAQCB3ZWJraXRndGtf
Y3BwZmxhZ3MgKz0gXAogCS1ERU5BQkxFX1NQRUxMQ0hFQ0s9MQogCiB3ZWJraXRndGtfc291cmNl
cyArPSBcCi0JU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGll
bnRFbmNoYW50LmNwcCBcCi0JU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENo
ZWNrZXJDbGllbnRFbmNoYW50LmgKKwlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9U
ZXh0Q2hlY2tlckNsaWVudEd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L1RleHRDaGVja2VyQ2xpZW50R3RrLmgKIGVuZGlmCiAKICMgV2hlbiBidWlsZGluZyBXZWJD
b3JlL1dlYktpdCwgd2Ugd2FudCBXZWJDb3JlL2NvbmZpZy5oIGFuZCBOT1QgSmF2YVNjcmlwdENv
cmUvY29uZmlnLmgsCkBAIC0xMjIsNiArMTIyLDcgQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSAr
PSBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVz
cG9uc2UuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1
cml0eW9yaWdpbi5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHNvdXBhdXRoZGlhbG9nLmggXAorCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0c3BlbGxjaGVja2VyLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmggXAogCSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBcCkBAIC0yMTUsNiArMjE2
LDkgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRzZWN1cml0eW9yaWdpbnByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHNvdXBhdXRoZGlhbG9nLmMgXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRz
cGVsbGNoZWNrZXIuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c3BlbGxj
aGVja2VyZW5jaGFudC5jcHAgXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVs
bGNoZWNrZXJlbmNoYW50LmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2ZXJz
aW9uLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmli
dXRlcy5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJp
YnV0ZXNwcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudEd0ay5jcHAKaW5kZXggYmE0Y2VhNmI1ODU3NWY3ZjIxYzc4OWZhYTMy
ZTlmOWMzNWIzOWQ5ZC4uYmQ2NWJjMmVjNjZkNjVmNDBkMjRmMGQ5NjU1MDY5MDYzNjdjZjFlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRHdGsuY3BwCkBAIC00NCw4ICs0NCwxMCBAQAogI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NUmFuZ2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2lu
ZG93c0tleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVk
ZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisj
aW5jbHVkZSAid2Via2l0c3BlbGxjaGVja2VyLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vic2V0dGlu
Z3Nwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vidmlld3ByaXZhdGUuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC02MjUsNyArNjI3LDcgQEAgdm9pZCBFZGl0b3JDbGll
bnQ6OmhhbmRsZUlucHV0TWV0aG9kTW91c2VQcmVzcygpCiBFZGl0b3JDbGllbnQ6OkVkaXRvckNs
aWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIDogbV9pc0luUmVkbyhmYWxzZSkKICNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICAsIG1fdGV4dENoZWNrZXJDbGllbnQod2ViVmlldykK
KyAgICAsIG1fdGV4dENoZWNrZXJDbGllbnQoV0VCS0lUX1NQRUxMX0NIRUNLRVIod2Via2l0X2dl
dF90ZXh0X2NoZWNrZXIoKSkpCiAjZW5kaWYKICAgICAsIG1fd2ViVmlldyh3ZWJWaWV3KQogICAg
ICwgbV9wcmV2ZW50TmV4dENvbXBvc2l0aW9uQ29tbWl0KGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmggYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaAppbmRleCBlNmQwYmNk
ZmYyMjAzMjBlYjY4MjU1Yjg4NjM5NmNhOGRhZmE4OGM1Li5hMGZhZGQ4Y2I3Y2EyMDhiOTA0NGIw
ZTE1ZGNhMTVkODU1OWE5OThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaApAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotI2luY2x1ZGUg
IlRleHRDaGVja2VyQ2xpZW50RW5jaGFudC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50
R3RrLmgiCiAjZWxzZQogI2luY2x1ZGUgIkVtcHR5Q2xpZW50cy5oIgogI2VuZGlmCkBAIC0xMzks
NyArMTM5LDcgQEAgY2xhc3MgRWRpdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkVkaXRvckNs
aWVudCB7CiAKICAgICBwcml2YXRlOgogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgICAgICBU
ZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQgbV90ZXh0Q2hlY2tlckNsaWVudDsKKyAgICAgICAgVGV4
dENoZWNrZXJDbGllbnRHdGsgbV90ZXh0Q2hlY2tlckNsaWVudDsKICNlbHNlCiAgICAgICAgIFdl
YkNvcmU6OkVtcHR5VGV4dENoZWNrZXJDbGllbnQgbV90ZXh0Q2hlY2tlckNsaWVudDsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNr
ZXJDbGllbnRFbmNoYW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1Rl
eHRDaGVja2VyQ2xpZW50RW5jaGFudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ2MDAwMGI4YzM3M2ExZTA3YjNkNDkwNjA1NDQyZTIyZGM4MDMwNTAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRFbmNoYW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDIxMyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBh
dG9rZXIuY29tPgotICogIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgotICogIENvcHly
aWdodCAoQykgMjAwOSBEaWVnbyBFc2NhbGFudGUgVXJyZWxvIDxkaWVnb2VAZ25vbWUub3JnPgot
ICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgotICogIENvcHly
aWdodCAoQykgMjAxMCwgTWFydGluIFJvYmluc29uIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaW5jbHVkZSAid2Via2l0d2Vic2V0dGluZ3Nwcml2YXRlLmgiCi0jaW5jbHVkZSAi
d2Via2l0d2Vidmlld3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxlbmNoYW50Lmg+Ci0jaW5jbHVkZSA8
Z2xpYi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1FbmNoYW50QnJva2VyKiBUZXh0Q2hl
Y2tlckNsaWVudEVuY2hhbnQ6OmJyb2tlciA9IDA7Ci0KLVRleHRDaGVja2VyQ2xpZW50RW5jaGFu
dDo6VGV4dENoZWNrZXJDbGllbnRFbmNoYW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi0gICAg
OiBtX3dlYlZpZXcod2ViVmlldykKLSAgICAsIG1fZW5jaGFudERpY3RzKDApCi17Ci19Ci0KLVRl
eHRDaGVja2VyQ2xpZW50RW5jaGFudDo6flRleHRDaGVja2VyQ2xpZW50RW5jaGFudCgpCi17Ci0g
ICAgZ19zbGlzdF9mb3JlYWNoKG1fZW5jaGFudERpY3RzLCBmcmVlU3BlbGxDaGVja2luZ0xhbmd1
YWdlLCAwKTsKLSAgICBnX3NsaXN0X2ZyZWUobV9lbmNoYW50RGljdHMpOwotfQotCi12b2lkIFRl
eHRDaGVja2VyQ2xpZW50RW5jaGFudDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBT
dHJpbmcmIHRleHQpCi17Ci0gICAgR1NMaXN0KiBkaWN0cyA9IG1fZW5jaGFudERpY3RzOwotCi0g
ICAgZm9yICg7IGRpY3RzOyBkaWN0cyA9IGRpY3RzLT5uZXh0KSB7Ci0gICAgICAgIEVuY2hhbnRE
aWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFudERpY3QqPihkaWN0cy0+ZGF0YSk7Ci0KLSAg
ICAgICAgZW5jaGFudF9kaWN0X2FkZF90b19zZXNzaW9uKGRpY3QsIHRleHQudXRmOCgpLmRhdGEo
KSwgLTEpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0Q2hlY2tlckNsaWVudEVuY2hhbnQ6OmxlYXJu
V29yZChjb25zdCBTdHJpbmcmIHRleHQpCi17Ci0gICAgR1NMaXN0KiBkaWN0cyA9IG1fZW5jaGFu
dERpY3RzOwotCi0gICAgZm9yICg7IGRpY3RzOyBkaWN0cyA9IGRpY3RzLT5uZXh0KSB7Ci0gICAg
ICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFudERpY3QqPihkaWN0cy0+
ZGF0YSk7Ci0KLSAgICAgICAgZW5jaGFudF9kaWN0X2FkZF90b19wZXJzb25hbChkaWN0LCB0ZXh0
LnV0ZjgoKS5kYXRhKCksIC0xKTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXJDbGllbnRF
bmNoYW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5n
dGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKLXsK
LSAgICBHU0xpc3QqIGRpY3RzID0gbV9lbmNoYW50RGljdHM7Ci0gICAgaWYgKCFkaWN0cykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR093blB0cjxnY2hhcj4gdXRmOFRleHQoZ191dGYxNl90b191
dGY4KGNvbnN0X2Nhc3Q8Z3VuaWNoYXIyKj4odGV4dCksIGxlbmd0aCwgMCwgMCwgMCkpOwotICAg
IGludCB1dGY4TGVuZ3RoID0gZ191dGY4X3N0cmxlbih1dGY4VGV4dC5nZXQoKSwgLTEpOwotCi0g
ICAgUGFuZ29MYW5ndWFnZSogbGFuZ3VhZ2UocGFuZ29fbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQoKSk7
Ci0gICAgR093blB0cjxQYW5nb0xvZ0F0dHI+IGF0dHJzKGdfbmV3KFBhbmdvTG9nQXR0ciwgdXRm
OExlbmd0aCArIDEpKTsKLQotICAgIC8vIHBhbmdvX2dldF9sb2dfYXR0cnMgdXNlcyBhbiBhZGl0
aW9uYWwgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgdGV4dC4KLSAgICBwYW5nb19nZXRfbG9n
X2F0dHJzKHV0ZjhUZXh0LmdldCgpLCAtMSwgLTEsIGxhbmd1YWdlLCBhdHRycy5nZXQoKSwgdXRm
OExlbmd0aCArIDEpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGggKyAxOyBpKysp
IHsKLSAgICAgICAgLy8gV2UgZ28gdGhyb3VnaCBlYWNoIGNoYXJhY3RlciB1bnRpbCB3ZSBmaW5k
IGFuIGlzX3dvcmRfc3RhcnQsCi0gICAgICAgIC8vIHRoZW4gd2UgZ2V0IGludG8gYW4gaW5uZXIg
bG9vcCB0byBmaW5kIHRoZSBpc193b3JkX2VuZCBjb3JyZXNwb25kaW5nCi0gICAgICAgIC8vIHRv
IGl0LgotICAgICAgICBpZiAoYXR0cnMuZ2V0KClbaV0uaXNfd29yZF9zdGFydCkgewotICAgICAg
ICAgICAgaW50IHN0YXJ0ID0gaTsKLSAgICAgICAgICAgIGludCBlbmQgPSBpOwotICAgICAgICAg
ICAgaW50IHdvcmRMZW5ndGg7Ci0KLSAgICAgICAgICAgIHdoaWxlIChhdHRycy5nZXQoKVtlbmRd
LmlzX3dvcmRfZW5kIDwgMSkKLSAgICAgICAgICAgICAgICBlbmQrKzsKLQotICAgICAgICAgICAg
d29yZExlbmd0aCA9IGVuZCAtIHN0YXJ0OwotICAgICAgICAgICAgLy8gU2V0IHRoZSBpdGVyYXRv
ciB0byBiZSBhdCB0aGUgY3VycmVudCB3b3JkIGVuZCwgc28gd2UgZG9uJ3QKLSAgICAgICAgICAg
IC8vIGNoZWNrIGNoYXJhY3RlcnMgdHdpY2UuCi0gICAgICAgICAgICBpID0gZW5kOwotCi0gICAg
ICAgICAgICBnY2hhciogY3N0YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHV0ZjhUZXh0
LmdldCgpLCBzdGFydCk7Ci0gICAgICAgICAgICBnaW50IGJ5dGVzID0gc3RhdGljX2Nhc3Q8Z2lu
dD4oZ191dGY4X29mZnNldF90b19wb2ludGVyKHV0ZjhUZXh0LmdldCgpLCBlbmQpIC0gY3N0YXJ0
KTsKLSAgICAgICAgICAgIEdPd25QdHI8Z2NoYXI+IHdvcmQoZ19uZXcwKGdjaGFyLCBieXRlcyAr
IDEpKTsKLQotICAgICAgICAgICAgZ191dGY4X3N0cm5jcHkod29yZC5nZXQoKSwgY3N0YXJ0LCB3
b3JkTGVuZ3RoKTsKLQotICAgICAgICAgICAgZm9yICg7IGRpY3RzOyBkaWN0cyA9IGRpY3RzLT5u
ZXh0KSB7Ci0gICAgICAgICAgICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSBzdGF0aWNfY2FzdDxF
bmNoYW50RGljdCo+KGRpY3RzLT5kYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoZW5jaGFudF9k
aWN0X2NoZWNrKGRpY3QsIHdvcmQuZ2V0KCksIHdvcmRMZW5ndGgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICptaXNzcGVsbGluZ0xvY2F0aW9uID0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAg
ICptaXNzcGVsbGluZ0xlbmd0aCA9IHdvcmRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCBjaGVja2luZywgdGhpcyB3b3JkIGlzIG9r
IGluIGF0IGxlYXN0IG9uZSBkaWN0LgotICAgICAgICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdM
b2NhdGlvbiA9IC0xOwotICAgICAgICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdMZW5ndGggPSAw
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVN0cmluZyBUZXh0Q2hlY2tlckNsaWVudEVu
Y2hhbnQ6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0
cmluZyYgaW5wdXRXb3JkKQotewotICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSBpbXBsZW1lbnRl
ZCB1c2luZyBjdXN0b21pemVkIGFsZ29yaXRobXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGJyb3dzZXIu
Ci0gICAgLy8gQ3VycmVudGx5LCBpdCBjb21wdXRlcyBhbiBlbXB0eSBzdHJpbmcuCi0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi12b2lkIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYs
IGludCosIGludCopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXh0Q2hl
Y2tlckNsaWVudEVuY2hhbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwg
Y29uc3QgU3RyaW5nJiBjb250ZXh0LCBXVEY6OlZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQotewot
ICAgIEdTTGlzdCogZGljdHMgPSBtX2VuY2hhbnREaWN0czsKLSAgICBndWVzc2VzLmNsZWFyKCk7
Ci0KLSAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsKLSAgICAgICAgc2l6
ZV90IG51bWJlck9mU3VnZ2VzdGlvbnM7Ci0gICAgICAgIHNpemVfdCBpOwotCi0gICAgICAgIEVu
Y2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFudERpY3QqPihkaWN0cy0+ZGF0YSk7
Ci0gICAgICAgIGdjaGFyKiogc3VnZ2VzdGlvbnMgPSBlbmNoYW50X2RpY3Rfc3VnZ2VzdChkaWN0
LCB3b3JkLnV0ZjgoKS5kYXRhKCksIC0xLCAmbnVtYmVyT2ZTdWdnZXN0aW9ucyk7Ci0KLSAgICAg
ICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mU3VnZ2VzdGlvbnMgJiYgaSA8IDEwOyBpKyspCi0g
ICAgICAgICAgICBndWVzc2VzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KHN1Z2dlc3Rpb25zW2ld
KSk7Ci0KLSAgICAgICAgaWYgKG51bWJlck9mU3VnZ2VzdGlvbnMgPiAwKQotICAgICAgICAgICAg
ZW5jaGFudF9kaWN0X2ZyZWVfc3VnZ2VzdGlvbnMoZGljdCwgc3VnZ2VzdGlvbnMpOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgZ2V0QXZhaWxhYmxlRGljdGlvbmFyaWVzQ2FsbGJhY2soY29uc3Qg
Y2hhciogY29uc3QgbGFuZ3VhZ2VUYWcsIGNvbnN0IGNoYXIqIGNvbnN0LCBjb25zdCBjaGFyKiBj
b25zdCwgY29uc3QgY2hhciogY29uc3QsIHZvaWQqIGRhdGEpCi17Ci0gICAgVmVjdG9yPENTdHJp
bmc+KiBkaWN0cyA9IHN0YXRpY19jYXN0PFZlY3RvcjxDU3RyaW5nPio+KGRhdGEpOwotCi0gICAg
ZGljdHMtPmFwcGVuZChsYW5ndWFnZVRhZyk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXJDbGllbnRF
bmNoYW50Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoY29uc3QgY2hhciogc3BlbGxDaGVj
a2luZ0xhbmd1YWdlcykKLXsKLSAgICBFbmNoYW50RGljdCogZGljdDsKLSAgICBHU0xpc3QqIHNw
ZWxsRGljdGlvbmFyaWVzID0gMDsKLQotICAgIGlmICghYnJva2VyKQotICAgICAgICBicm9rZXIg
PSBlbmNoYW50X2Jyb2tlcl9pbml0KCk7Ci0KLSAgICBpZiAoc3BlbGxDaGVja2luZ0xhbmd1YWdl
cykgewotICAgICAgICBjaGFyKiogbGFuZ3MgPSBnX3N0cnNwbGl0KHNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMsICIsIiwgLTEpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgbGFuZ3NbaV07IGkrKykg
ewotICAgICAgICAgICAgaWYgKGVuY2hhbnRfYnJva2VyX2RpY3RfZXhpc3RzKGJyb2tlciwgbGFu
Z3NbaV0pKSB7Ci0gICAgICAgICAgICAgICAgZGljdCA9IGVuY2hhbnRfYnJva2VyX3JlcXVlc3Rf
ZGljdChicm9rZXIsIGxhbmdzW2ldKTsKLSAgICAgICAgICAgICAgICBzcGVsbERpY3Rpb25hcmll
cyA9IGdfc2xpc3RfYXBwZW5kKHNwZWxsRGljdGlvbmFyaWVzLCBkaWN0KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBnX3N0cmZyZWV2KGxhbmdzKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBjb25zdCBjaGFyKiBsYW5ndWFnZSA9IHBhbmdvX2xhbmd1YWdlX3RvX3N0cmluZyhn
dGtfZ2V0X2RlZmF1bHRfbGFuZ3VhZ2UoKSk7Ci0gICAgICAgIGlmIChlbmNoYW50X2Jyb2tlcl9k
aWN0X2V4aXN0cyhicm9rZXIsIGxhbmd1YWdlKSkgewotICAgICAgICAgICAgZGljdCA9IGVuY2hh
bnRfYnJva2VyX3JlcXVlc3RfZGljdChicm9rZXIsIGxhbmd1YWdlKTsKLSAgICAgICAgICAgIHNw
ZWxsRGljdGlvbmFyaWVzID0gZ19zbGlzdF9hcHBlbmQoc3BlbGxEaWN0aW9uYXJpZXMsIGRpY3Qp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm8gZGljdGlvbmFyaWVzIHNlbGVj
dGVkLCB3ZSBnZXQgb25lIGZyb20gdGhlIGxpc3QKLSAgICAgICAgICAgIFZlY3RvcjxDU3RyaW5n
PiBhbGxEaWN0aW9uYXJpZXM7Ci0gICAgICAgICAgICBlbmNoYW50X2Jyb2tlcl9saXN0X2RpY3Rz
KGJyb2tlciwgZ2V0QXZhaWxhYmxlRGljdGlvbmFyaWVzQ2FsbGJhY2ssICZhbGxEaWN0aW9uYXJp
ZXMpOwotICAgICAgICAgICAgaWYgKCFhbGxEaWN0aW9uYXJpZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgZGljdCA9IGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfZGljdChicm9rZXIsIGFs
bERpY3Rpb25hcmllc1swXS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIHNwZWxsRGljdGlvbmFy
aWVzID0gZ19zbGlzdF9hcHBlbmQoc3BlbGxEaWN0aW9uYXJpZXMsIGRpY3QpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGdfc2xpc3RfZm9yZWFjaChtX2VuY2hhbnREaWN0
cywgZnJlZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZSwgMCk7Ci0gICAgZ19zbGlzdF9mcmVlKG1fZW5j
aGFudERpY3RzKTsKLSAgICBtX2VuY2hhbnREaWN0cyA9IHNwZWxsRGljdGlvbmFyaWVzOwotfQot
Ci12b2lkIFRleHRDaGVja2VyQ2xpZW50RW5jaGFudDo6ZnJlZVNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZShncG9pbnRlciBkYXRhLCBncG9pbnRlcikKLXsKLSAgICBpZiAoIWJyb2tlcikKLSAgICAgICAg
YnJva2VyID0gZW5jaGFudF9icm9rZXJfaW5pdCgpOwotCi0gICAgRW5jaGFudERpY3QqIGRpY3Qg
PSBzdGF0aWNfY2FzdDxFbmNoYW50RGljdCo+KGRhdGEpOwotICAgIGVuY2hhbnRfYnJva2VyX2Zy
ZWVfZGljdChicm9rZXIsIGRpY3QpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudEd0ay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmRiYjQ4ZmQyZDI4MTVmNjM0MzJhNmFmN2Q3ZmRlODA2YmRiMGNmZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50
R3RrLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAg
VG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRk
LgorICogIENvcHlyaWdodCAoQykgMjAwOSBEaWVnbyBFc2NhbGFudGUgVXJyZWxvIDxkaWVnb2VA
Z25vbWUub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBJZ2Fs
aWEgUy5MLgorICogIENvcHlyaWdodCAoQykgMjAxMCwgTWFydGluIFJvYmluc29uIDxtcm9iaW5z
b25Ad2Via2l0Lm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudEd0ay5oIgorCisjaW5jbHVk
ZSAiR093blB0ci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAid2Vi
a2l0c3BlbGxjaGVja2VyLmgiCisjaW5jbHVkZSAid2Via2l0d2Vic2V0dGluZ3Nwcml2YXRlLmgi
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitUZXh0Q2hlY2tl
ckNsaWVudEd0azo6VGV4dENoZWNrZXJDbGllbnRHdGsoV2ViS2l0U3BlbGxDaGVja2VyKiBzcGVs
bENoZWNrZXIpCisgICAgOiBtX3NwZWxsQ2hlY2tlcihzcGVsbENoZWNrZXIpCit7Cit9CisKK1Rl
eHRDaGVja2VyQ2xpZW50R3RrOjp+VGV4dENoZWNrZXJDbGllbnRHdGsoKQoreworfQorCit2b2lk
IFRleHRDaGVja2VyQ2xpZW50R3RrOjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0
cmluZyYgdGV4dCkKK3sKKyAgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9pZ25vcmVfd29yZChtX3Nw
ZWxsQ2hlY2tlci5nZXQoKSwgdGV4dC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBUZXh0Q2hl
Y2tlckNsaWVudEd0azo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICB3ZWJr
aXRfc3BlbGxfY2hlY2tlcl9sZWFybl93b3JkKG1fc3BlbGxDaGVja2VyLmdldCgpLCB0ZXh0LnV0
ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50R3RrOjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxp
bmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBHT3duUHRyPGdjaGFy
PiB1dGY4VGV4dChnX3V0ZjE2X3RvX3V0ZjgoY29uc3RfY2FzdDxndW5pY2hhcjIqPih0ZXh0KSwg
bGVuZ3RoLCAwLCAwLCAwKSk7CisgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfY2hlY2tfc3BlbGxp
bmdfb2Zfc3RyaW5nKG1fc3BlbGxDaGVja2VyLmdldCgpLCB1dGY4VGV4dC5nZXQoKSwgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworfQorCitTdHJpbmcgVGV4dENoZWNr
ZXJDbGllbnRHdGs6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNv
bnN0IFN0cmluZyYgaW5wdXRXb3JkKQoreworICAgIHJldHVybiB3ZWJraXRfc3BlbGxfY2hlY2tl
cl9nZXRfYXV0b2NvcnJlY3Rfc3VnZ2VzdGlvbnNfZm9yX21pc3NwZWxsZWRfd29yZChtX3NwZWxs
Q2hlY2tlci5nZXQoKSwgaW5wdXRXb3JkLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFRleHRD
aGVja2VyQ2xpZW50R3RrOjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwg
VmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50R3RrOjpnZXRHdWVzc2VzRm9yV29yZChj
b25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgV1RGOjpWZWN0b3I8U3Ry
aW5nPiYgZ3Vlc3NlcykKK3sKKyAgICBjaGFyKiogc3VnZ2VzdGlvbnMgPSB3ZWJraXRfc3BlbGxf
Y2hlY2tlcl9nZXRfZ3Vlc3Nlc19mb3Jfd29yZChtX3NwZWxsQ2hlY2tlci5nZXQoKSwgd29yZC51
dGY4KCkuZGF0YSgpLCBjb250ZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgIGlmICghc3VnZ2VzdGlv
bnMpCisgICAgICAgIHJldHVybjsKKworICAgIGd1ZXNzZXMuY2xlYXIoKTsKKworICAgIGZvciAo
aW50IGkgPSAwOyBzdWdnZXN0aW9uc1tpXTsgaSsrKQorICAgICAgICBndWVzc2VzLmFwcGVuZChT
dHJpbmc6OmZyb21VVEY4KHN1Z2dlc3Rpb25zW2ldKSk7CisKKyAgICBnX3N0cmZyZWV2KHN1Z2dl
c3Rpb25zKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudEd0azo6dXBkYXRlU3BlbGxDaGVj
a2luZ0xhbmd1YWdlKGNvbnN0IGNoYXIqIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpCit7CisgICAg
d2Via2l0X3NwZWxsX2NoZWNrZXJfdXBkYXRlX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyhtX3Nw
ZWxsQ2hlY2tlci5nZXQoKSwgc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7Cit9Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0LmgKaW5kZXggNzdlOTZiYzlhNDI1NTliMjFkOTJkNjdkMjI4NzQzNWFl
MGY0NjMyOC4uNzE0NTFiMTUzNzE0ZDY0NDAzZjY1MmYyYzlmOTFkN2QxNmY5MmJkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c2VjdXJp
dHlvcmlnaW4uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0c3BlbGxjaGVja2VyLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNr
Zm9yd2FyZGxpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCmluZGV4IDBiODgwODQyYjQzM2I3
NDQ5ZTA3ZmRhYTA5OWEzOWVkN2Y5MzZkYzUuLjY3M2JiZGZlNjFkMjc2MTU3YjRkZjQ5ZGE3ZWM3
MjkyY2ZkYjAxYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
ZWZpbmVzLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApA
QCAtMTA0LDYgKzEwNCw5IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJQbHVnaW5EYXRhYmFz
ZUNsYXNzICAgV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2VDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9X
ZWJLaXRXZWJQbHVnaW4gICAgICBXZWJLaXRXZWJQbHVnaW47CiB0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0V2ViUGx1Z2luQ2xhc3MgV2ViS2l0V2ViUGx1Z2luQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRTcGVsbENoZWNrZXIgV2ViS2l0U3BlbGxDaGVja2VyOyAvKiBkdW1teSB0eXBlZGVm
ICovCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U3BlbGxDaGVja2VySW50ZXJmYWNlIFdlYktpdFNw
ZWxsQ2hlY2tlckludGVyZmFjZTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKaW5kZXggMTIxYzdjYzg5Y2VmOWFlNzM0
YzY2NDExN2U2MjFiNDMzZGMxNmRiMi4uN2FmYzhkY2FiODYzYjAwMDY0NWJlNGY3Nzk4NWNhOTFh
M2IyNjBiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2Jh
bHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcApA
QCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkZyYW1lTmV0
d29ya2luZ0NvbnRleHRHdGsuaCIKICNpbmNsdWRlICJHT3duUHRyLmgiCisjaW5jbHVkZSAiR1Jl
ZlB0ci5oIgogI2luY2x1ZGUgIkljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgpAQCAtNDIsNiArNDMsOCBAQAogI2luY2x1ZGUgIndl
YmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0aWNvbmRhdGFiYXNlLmgiCiAj
aW5jbHVkZSAid2Via2l0c291cGF1dGhkaWFsb2cuaCIKKyNpbmNsdWRlICJ3ZWJraXRzcGVsbGNo
ZWNrZXIuaCIKKyNpbmNsdWRlICJ3ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50LmgiCiAjaW5jbHVk
ZSAid2Via2l0d2ViZGF0YWJhc2UuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJwbHVnaW5kYXRhYmFz
ZXByaXZhdGUuaCIKICNpbmNsdWRlIDxsaWJpbnRsLmg+CkBAIC0yNDQsOSArMjQ3LDM1IEBAIFdl
YktpdEljb25EYXRhYmFzZSogd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCkKICAgICByZXR1cm4g
ZGF0YWJhc2U7CiB9CiAKK3N0YXRpYyBHUmVmUHRyPFdlYktpdFNwZWxsQ2hlY2tlcj4gdGV4dENo
ZWNrZXIgPSAwOworCiBzdGF0aWMgdm9pZCB3ZWJraXRFeGl0KCkKIHsKICAgICBnX29iamVjdF91
bnJlZih3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpKTsKKyAgICB0ZXh0Q2hlY2tlciA9IDA7
Cit9CisKK0dPYmplY3QqIHdlYmtpdF9nZXRfdGV4dF9jaGVja2VyKCkKK3sKKyAgICB3ZWJraXRJ
bml0KCk7CisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBpZiAoIXRleHRDaGVja2VyKQor
ICAgICAgICB0ZXh0Q2hlY2tlciA9IGFkb3B0R1JlZihXRUJLSVRfU1BFTExfQ0hFQ0tFUihnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUl9FTkNIQU5ULCBOVUxMKSkpOworI2Vu
ZGlmCisKKyAgICByZXR1cm4gR19PQkpFQ1QodGV4dENoZWNrZXIuZ2V0KCkpOworfQorCit2b2lk
IHdlYmtpdF9zZXRfdGV4dF9jaGVja2VyKEdPYmplY3QqIGNoZWNrZXIpCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbCghY2hlY2tlciB8fCBXRUJLSVRfSVNfU1BFTExfQ0hFQ0tFUihjaGVja2VyKSk7
CisKKyAgICB3ZWJraXRJbml0KCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVz
ZSB3ZSBuZWVkIHRoZSBjYXN0LCBhbmQgY2FzdGluZyBOVUxMCisgICAgLy8gaXMgbm90IGtvc2hl
ci4KKyAgICB0ZXh0Q2hlY2tlciA9IGNoZWNrZXIgPyBXRUJLSVRfU1BFTExfQ0hFQ0tFUihjaGVj
a2VyKSA6IDA7CiB9CiAKIHZvaWQgd2Via2l0SW5pdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGdsb2JhbHMuaAppbmRleCAzM2QyYjhiNDg0NzI1OWY0YTExZmJiZGI2YjQ2ZjU0MmU4
MTE5NDFhLi5hMzFhYTRjZGNjMWQ4NzBkYTMzYTZhMzU3OTk1Y2M1NTI1NzJhZmRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmgKQEAgLTY3LDYgKzY3LDEyIEBAIHdl
YmtpdF9zZXRfY2FjaGVfbW9kZWwgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDYWNo
ZU1vZGVsICAgICBjYWNoZV9tb2RlCiBXRUJLSVRfQVBJIFdlYktpdENhY2hlTW9kZWwKIHdlYmtp
dF9nZXRfY2FjaGVfbW9kZWwgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIAorV0VC
S0lUX0FQSSBHT2JqZWN0Kgord2Via2l0X2dldF90ZXh0X2NoZWNrZXIgICAgICAgICAgICAgICAg
ICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3NldF90ZXh0X2NoZWNr
ZXIgICAgICAgICAgICAgICAgICAgICAgICAoR09iamVjdCogIGNoZWNrZXIpOworCiBHX0VORF9E
RUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRzcGVsbGNoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxs
Y2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzZkYjQ4N2M2ODE5YmFiMGU5YjkwMmMyYTA3OTNhY2Jm
MGMzOTk1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRzcGVsbGNoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHNwZWxsY2hlY2tlci5oIgorCisvKioK
KyAqIFNFQ1RJT046d2Via2l0c3BlbGxjaGVja2VyCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IHRo
ZSBzcGVsbCBjaGVja2luZyBBUEkgZm9yIFdlYktpdAorICoKKyAqICNXZWJLaXRTcGVsbENoZWNr
ZXIgcHJvdmlkZXMgQVBJcyBmb3IgdGhlIHNwZWxsIGNoZWNraW5nCisgKiBmdW5jdGlvbmFsaXR5
IHVzZWQgaW50ZXJuYWxseSBieSBXZWJLaXQgdG8gcGVyZm9ybSBzcGVsbCBjaGVja2luZworICog
aW4gaW5wdXQgb3IgdGV4dCBhcmVhcy4gVGhpcyBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIGJ5
IGJyb3dzZXJzCisgKiB0byBpbXBsZW1lbnQgY3VzdG9tIHNwZWxsIGNoZWNraW5nIGNvbnRleHQg
bWVudXMgb3Igc29waGlzdGljYXRlZAorICogYXV0by1jb3JyZWN0IGZlYXR1cmVzLgorICovCisK
K0dfREVGSU5FX0lOVEVSRkFDRShXZWJLaXRTcGVsbENoZWNrZXIsIHdlYmtpdF9zcGVsbF9jaGVj
a2VyLCBHX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJf
ZGVmYXVsdF9pbml0KFdlYktpdFNwZWxsQ2hlY2tlckludGVyZmFjZSogaW50ZXJmYWNlKQorewor
fQorCisvKioKKyAqIHdlYmtpdF9zcGVsbF9jaGVja2VyX2NoZWNrX3NwZWxsaW5nX29mX3N0cmlu
ZzoKKyAqIEBjaGVja2VyOiBhICNXZWJLaXRTcGVsbENoZWNrZXIKKyAqIEBzdHJpbmc6IHRoZSBz
dHJpbmcgdG8gY2hlY2sgZm9yIG1pc3NwZWxsaW5ncworICogQG1pc3NwZWxsaW5nX2xvY2F0aW9u
OiAob3V0KSAoYWxsb3ctbm9uZSkgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgdG8gc3RvcmUgdGhl
IGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBtaXNzcGVsbGluZworICogQG1pc3NwZWxsaW5nX2xlbmd0
aDogKG91dCkgKGFsbG93LW5vbmUpIGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHRvIHN0b3JlIHRo
ZSBsZW5ndGggb2YgdGhlIGZpcnN0IG1pc3NwZWxsaW5nCisgKgorICogQ2hlY2tzIEBzdHJpbmcg
Zm9yIG1pc3NwZWxsaW5ncyB1c2luZyBAY2hlY2tlciwgc3RvcmluZyB0aGUKKyAqIGxvY2F0aW9u
IGFuZCBsZW5ndGggb2YgdGhlIGZpcnN0IG1pc3NwZWxsaW5nIGluCisgKiBAbWlzc3BlbGxpbmdf
bG9jYXRpb24gYW5kIEBtaXNzcGVsbGluZ19sZW5ndGggcmVzcGVjdGl2ZWx5LgorICoKKyAqIFNp
bmNlOiAxLjUuMQorICoqLwordm9pZCB3ZWJraXRfc3BlbGxfY2hlY2tlcl9jaGVja19zcGVsbGlu
Z19vZl9zdHJpbmcoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiBzdHJp
bmcsIGludCogbWlzc3BlbGxpbmdfbG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdfbGVuZ3RoKQor
eworICAgIFdlYktpdFNwZWxsQ2hlY2tlckludGVyZmFjZSogaW50ZXJmYWNlOworCisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfU1BFTExfQ0hFQ0tFUihjaGVja2VyKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChzdHJpbmcpOworCisgICAgaW50ZXJmYWNlID0gV0VCS0lUX1NQRUxMX0NI
RUNLRVJfR0VUX0lGQUNFKGNoZWNrZXIpOworICAgIGlmIChpbnRlcmZhY2UtPmNoZWNrX3NwZWxs
aW5nX29mX3N0cmluZykKKyAgICAgICAgaW50ZXJmYWNlLT5jaGVja19zcGVsbGluZ19vZl9zdHJp
bmcoY2hlY2tlciwgc3RyaW5nLCBtaXNzcGVsbGluZ19sb2NhdGlvbiwgbWlzc3BlbGxpbmdfbGVu
Z3RoKTsKK30KKworLyoqCisgKiB3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfZ3Vlc3Nlc19mb3Jf
d29yZDoKKyAqIEBjaGVja2VyOiBhICNXZWJLaXRTcGVsbENoZWNrZXIKKyAqIEB3b3JkOiB0aGUg
bWlzc3BlbGxlZCB3b3JkCisgKiBAY29udGV4dDogKGFsbG93LW5vbmUpIHRoZSBzdXJyb3VuZGlu
ZyBjb250ZXh0IG9mIHRoZSBtaXNzcGVsbGVkIHdvcmQKKyAqCisgKiBSZXR1cm5zIGEgJU5VTEwt
dGVybWluYXRlZCBhcnJheSBvZiBndWVzc2VzIGZvciBjb3JyZWN0aW9ucyBvZiB0aGUKKyAqIG1p
c3NwZWxsZWQgd29yZCBAd29yZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgYSBu
ZXdseSBhbGxvY2F0ZWQgJU5VTEwtdGVybWluYXRlZCBhcnJheQorICogb2YgZ3Vlc3NlZCBjb3Jy
ZWN0aW9ucyBmb3IgYSBtaXNzcGVsbGVkIHdvcmQgQHdvcmQuIEZyZWUgaXQgd2l0aAorICogJWdf
c3RyZnJlZXYgd2hlbiBkb25lIHdpdGggaXQuCisgKgorICogU2luY2U6IDEuNS4xCisgKiovCitj
aGFyKiogd2Via2l0X3NwZWxsX2NoZWNrZXJfZ2V0X2d1ZXNzZXNfZm9yX3dvcmQoV2ViS2l0U3Bl
bGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkLCBjb25zdCBjaGFyKiBjb250ZXh0
KQoreworICAgIFdlYktpdFNwZWxsQ2hlY2tlckludGVyZmFjZSogaW50ZXJmYWNlOworCisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVIoY2hlY2tlciksIDAp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHdvcmQsIDApOworCisgICAgaW50ZXJmYWNlID0g
V0VCS0lUX1NQRUxMX0NIRUNLRVJfR0VUX0lGQUNFKGNoZWNrZXIpOworICAgIGlmIChpbnRlcmZh
Y2UtPmdldF9ndWVzc2VzX2Zvcl93b3JkKQorICAgICAgICByZXR1cm4gaW50ZXJmYWNlLT5nZXRf
Z3Vlc3Nlc19mb3Jfd29yZChjaGVja2VyLCB3b3JkLCBjb250ZXh0KTsKKworICAgIHJldHVybiAw
OworfQorCisvKioKKyAqIHdlYmtpdF9zcGVsbF9jaGVja2VyX3VwZGF0ZV9zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXM6CisgKiBAY2hlY2tlcjogYSAjV2ViS2l0U3BlbGxDaGVja2VyCisgKiBAbGFu
Z3VhZ2VzOiAoYWxsb3ctbm9uZSkgYSBzdHJpbmcgb2YgbGFuZ3VhZ2VzIHRvIHVzZSBmb3IgQGNo
ZWNrZXIKKyAqCisgKiBTZXRzIEBsYW5ndWFnZXMgYXMgdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRv
IHVzZSBieSBAY2hlY2tlci4gVGhlCisgKiBhY2NlcHRlZCBmb3JtYXQgaXMgYSBsaXN0IG9mIGNv
bW1hICgnLCcpIHNlcGFyYXRlZCBsYW5ndWFnZSBjb2RlcworICogb2YgdGhlIGZvcm0gJ2VuX1VT
JywgaWUsIGxhbmd1YWdlX1ZBUklBTlQuCisgKgorICogU2luY2U6IDEuNS4xCisgKiovCit2b2lk
IHdlYmtpdF9zcGVsbF9jaGVja2VyX3VwZGF0ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMoV2Vi
S2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiBsYW5ndWFnZXMpCit7CisgICAg
V2ViS2l0U3BlbGxDaGVja2VySW50ZXJmYWNlKiBpbnRlcmZhY2U7CisKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKGNoZWNrZXIpKTsKKworICAgIGludGVyZmFj
ZSA9IFdFQktJVF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFDRShjaGVja2VyKTsKKyAgICBpZiAoaW50
ZXJmYWNlLT51cGRhdGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKQorICAgICAgICBpbnRlcmZh
Y2UtPnVwZGF0ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMoY2hlY2tlciwgbGFuZ3VhZ2VzKTsK
K30KKworLyoqCisgKiB3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfYXV0b2NvcnJlY3Rfc3VnZ2Vz
dGlvbnNfZm9yX21pc3NwZWxsZWRfd29yZDoKKyAqIEBjaGVja2VyOiBhICNXZWJLaXRTcGVsbENo
ZWNrZXIKKyAqIEB3b3JkOiBhIG1pc3NwZWxsZWQgd29yZAorICoKKyAqIFJldHVybnMgYSBzdWdn
ZXN0aW9uIGZvciBhIHdvcmQgdG8gdXNlIGluIGFuICJhdXRvY29ycmVjdCIgZmVhdHVyZS4KKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgdGhlIHN1Z2dlc3Rpb24gZm9yIHRoZSBhdXRv
Y29ycmVjdGlvbiBvZgorICogQHdvcmQKKyAqCisgKiBTaW5jZTogMS41LjEKKyAqKi8KK2NoYXIq
IHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9hdXRvY29ycmVjdF9zdWdnZXN0aW9uc19mb3JfbWlz
c3BlbGxlZF93b3JkKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29y
ZCkKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJJbnRlcmZhY2UqIGludGVyZmFjZTsKKworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKGNoZWNrZXIpLCAw
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh3b3JkLCAwKTsKKworICAgIGludGVyZmFjZSA9
IFdFQktJVF9TUEVMTF9DSEVDS0VSX0dFVF9JRkFDRShjaGVja2VyKTsKKyAgICBpZiAoaW50ZXJm
YWNlLT5nZXRfYXV0b2NvcnJlY3Rfc3VnZ2VzdGlvbnNfZm9yX21pc3NwZWxsZWRfd29yZCkKKyAg
ICAgICAgcmV0dXJuIGludGVyZmFjZS0+Z2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9t
aXNzcGVsbGVkX3dvcmQoY2hlY2tlciwgd29yZCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoq
CisgKiB3ZWJraXRfc3BlbGxfY2hlY2tlcl9sZWFybl93b3JkOgorICogQGNoZWNrZXI6IGEgI1dl
YktpdFNwZWxsQ2hlY2tlcgorICogQHdvcmQ6IHRoZSB3b3JkIHRvIGxlYXJuCisgKgorICogSW5z
dHJ1Y3RzIHRoZSBAY2hlY2tlciB0byBhZGQgQHdvcmQgdG8gaXRzIGRpY3Rpb25hcnkgYXMgYSBw
cm9wZXJseQorICogc3BlbGxlZCB3b3JkLiBUaGUgd29yZCB3aWxsIGJlIGxlYXJuZWQgcGVybWFu
ZW50bHkgaW4gdGhlIHVzZXIncworICogcGVyc29uYWwgZGljdGlvbmFyeS4KKyAqCisgKiBTaW5j
ZTogMS41LjEKKyAqKi8KK3ZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfbGVhcm5fd29yZChXZWJL
aXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQpCit7CisgICAgV2ViS2l0
U3BlbGxDaGVja2VySW50ZXJmYWNlKiBpbnRlcmZhY2U7CisKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKGNoZWNrZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHdvcmQpOworCisgICAgaW50ZXJmYWNlID0gV0VCS0lUX1NQRUxMX0NIRUNLRVJfR0VUX0lGQUNF
KGNoZWNrZXIpOworICAgIGlmIChpbnRlcmZhY2UtPmxlYXJuX3dvcmQpCisgICAgICAgIGludGVy
ZmFjZS0+bGVhcm5fd29yZChjaGVja2VyLCB3b3JkKTsKK30KKworLyoqCisgKiB3ZWJraXRfc3Bl
bGxfY2hlY2tlcl9pZ25vcmVfd29yZDoKKyAqIEBjaGVja2VyOiBhICNXZWJLaXRTcGVsbENoZWNr
ZXIKKyAqIEB3b3JkOiB0aGUgd29yZCB0byBpZ25vcmUKKyAqCisgKiBJbnN0cnVjdHMgdGhlIEBj
aGVja2VyIHRvIGlnbm9yZSBAd29yZCBhcyBhIG1pc3NwZWxsaW5nIGZvciB0aGlzCisgKiBzZXNz
aW9uLgorICoKKyAqIFNpbmNlOiAxLjUuMQorICoqLwordm9pZCB3ZWJraXRfc3BlbGxfY2hlY2tl
cl9pZ25vcmVfd29yZChXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdv
cmQpCit7CisgICAgV2ViS2l0U3BlbGxDaGVja2VySW50ZXJmYWNlKiBpbnRlcmZhY2U7CisKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKGNoZWNrZXIpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHdvcmQpOworCisgICAgaW50ZXJmYWNlID0gV0VCS0lUX1NQRUxM
X0NIRUNLRVJfR0VUX0lGQUNFKGNoZWNrZXIpOworICAgIGlmIChpbnRlcmZhY2UtPmlnbm9yZV93
b3JkKQorICAgICAgICBpbnRlcmZhY2UtPmlnbm9yZV93b3JkKGNoZWNrZXIsIHdvcmQpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tlci5o
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjM1YmZiN2E0NTYxOGM5NzFiYTgyNDI4NWU4MTBhN2M0MWVjZmVjMjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c3BlbGxjaGVja2VyLmgKQEAg
LTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIHdlYmtpdHNwZWxsY2hlY2tlcl9oCisjZGVmaW5lIHdlYmtpdHNwZWxsY2hlY2tlcl9oCisK
KyNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVIgICAgICAg
ICAgICh3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU1BF
TExfQ0hFQ0tFUihvYmopICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVIsIFdlYktpdFNwZWxsQ2hlY2tlcikpCisjZGVm
aW5lIFdFQktJVF9JU19TUEVMTF9DSEVDS0VSKG9iaikgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NQRUxMX0NIRUNLRVIpKQorI2RlZmluZSBX
RUJLSVRfU1BFTExfQ0hFQ0tFUl9HRVRfSUZBQ0Uob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9J
TlRFUkZBQ0UgKChvYmopLCBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSLCBXZWJLaXRTcGVsbENo
ZWNrZXJJbnRlcmZhY2UpKQorCitzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hlY2tlckludGVyZmFjZSB7
CisgICAgR1R5cGVJbnRlcmZhY2UgZ19pZmFjZTsKKworICAgIHZvaWQgICAoKmNoZWNrX3NwZWxs
aW5nX29mX3N0cmluZykgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0U3BlbGxDaGVja2Vy
KiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkLCBpbnQqIG1pc3NwZWxsaW5nX2xvY2F0aW9uLCBp
bnQqIG1pc3NwZWxsaW5nX2xlbmd0aCk7CisgICAgY2hhcioqICgqZ2V0X2d1ZXNzZXNfZm9yX3dv
cmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNr
ZXIsIGNvbnN0IGNoYXIqIHdvcmQsIGNvbnN0IGNoYXIqIGNvbnRleHQpOworICAgIHZvaWQgICAo
KnVwZGF0ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpICAgICAgICAgICAgICAgICAoV2ViS2l0
U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiBsYW5ndWFnZXMpOworICAgIGNoYXIq
ICAoKmdldF9hdXRvY29ycmVjdF9zdWdnZXN0aW9uc19mb3JfbWlzc3BlbGxlZF93b3JkKSAoV2Vi
S2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiB3b3JkKTsKKyAgICB2b2lkICAg
KCpsZWFybl93b3JkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29yZCk7CisgICAgdm9pZCAgICgq
aWdub3JlX3dvcmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRT
cGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQpOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZSB3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09OU1Q7
CisKK1dFQktJVF9BUEkgdm9pZCAgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9jaGVja19zcGVsbGlu
Z19vZl9zdHJpbmcoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVja2VyLCBjb25zdCBjaGFyKiBzdHJp
bmcsIGludCogbWlzc3BlbGxpbmdfbG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdfbGVuZ3RoKTsK
K1dFQktJVF9BUEkgY2hhcioqICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfZ3Vlc3Nlc19mb3Jf
d29yZChXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQsIGNvbnN0
IGNoYXIqIGNvbnRleHQpOworV0VCS0lUX0FQSSB2b2lkICAgIHdlYmtpdF9zcGVsbF9jaGVja2Vy
X3VwZGF0ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMoV2ViS2l0U3BlbGxDaGVja2VyKiBjaGVj
a2VyLCBjb25zdCBjaGFyKiBsYW5ndWFnZXMpOworV0VCS0lUX0FQSSBjaGFyKiAgIHdlYmtpdF9z
cGVsbF9jaGVja2VyX2dldF9hdXRvY29ycmVjdF9zdWdnZXN0aW9uc19mb3JfbWlzc3BlbGxlZF93
b3JkKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogd29yZCk7CitXRUJL
SVRfQVBJIHZvaWQgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfbGVhcm5fd29yZChXZWJLaXRTcGVs
bENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQpOworV0VCS0lUX0FQSSB2b2lkICAg
IHdlYmtpdF9zcGVsbF9jaGVja2VyX2lnbm9yZV93b3JkKFdlYktpdFNwZWxsQ2hlY2tlciogY2hl
Y2tlciwgY29uc3QgY2hhciogd29yZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c3BlbGxjaGVja2VyZW5jaGFu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c3BlbGxjaGVja2VyZW5jaGFu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmFlNDVkN2EyOGQwMjk2Yzc5YjEyMDJhZTgwOTQ4ZjlkY2QyMzk2
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVs
bGNoZWNrZXJlbmNoYW50LmNwcApAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50Lmgi
CisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKworI2luY2x1ZGUgIkdPd25QdHIuaCIKKyNpbmNs
dWRlICJ3ZWJraXRzcGVsbGNoZWNrZXIuaCIKKyNpbmNsdWRlIDxlbmNoYW50Lmg+CisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RhdGljIEVu
Y2hhbnRCcm9rZXIqIGJyb2tlciA9IDA7CisKK3N0cnVjdCBfV2ViS2l0U3BlbGxDaGVja2VyRW5j
aGFudFByaXZhdGUgeworICAgIEdTTGlzdCogZW5jaGFudERpY3RzOworfTsKKworc3RhdGljIHZv
aWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9p
bml0KFdlYktpdFNwZWxsQ2hlY2tlckludGVyZmFjZSogaW50ZXJmYWNlKTsKKworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUoV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudCwgd2Via2l0X3NwZWxsX2No
ZWNrZXJfZW5jaGFudCwgR19UWVBFX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9zcGVsbF9jaGVja2Vy
X2VuY2hhbnRfc3BlbGxfY2hlY2tlcl9pbnRlcmZhY2VfaW5pdCkpCisKK3N0YXRpYyB2b2lkIGNy
ZWF0ZUVuY2hhbnRCcm9rZXJJZk5lZWRlZCgpCit7CisgICAgaWYgKCFicm9rZXIpCisgICAgICAg
IGJyb2tlciA9IGVuY2hhbnRfYnJva2VyX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgZnJlZVNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZShncG9pbnRlciBkYXRhLCBncG9pbnRlcikKK3sKKyAgICBjcmVh
dGVFbmNoYW50QnJva2VySWZOZWVkZWQoKTsKKworICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gc3Rh
dGljX2Nhc3Q8RW5jaGFudERpY3QqPihkYXRhKTsKKyAgICBlbmNoYW50X2Jyb2tlcl9mcmVlX2Rp
Y3QoYnJva2VyLCBkaWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJf
ZW5jaGFudF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U3BlbGxDaGVj
a2VyRW5jaGFudFByaXZhdGUqIHByaXYgPSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UKG9i
amVjdCktPnByaXY7CisKKyAgICBnX3NsaXN0X2ZvcmVhY2gocHJpdi0+ZW5jaGFudERpY3RzLCBm
cmVlU3BlbGxDaGVja2luZ0xhbmd1YWdlLCAwKTsKKyAgICBnX3NsaXN0X2ZyZWUocHJpdi0+ZW5j
aGFudERpY3RzKTsKKworICAgIFdFQktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQob2JqZWN0KS0+
cHJpdi0+fldlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9zcGVsbF9jaGVja2VyX2VuY2hhbnRfY2xhc3NfaW5pdChXZWJLaXRTcGVsbENo
ZWNrZXJFbmNoYW50Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRfc3BlbGxfY2hlY2tlcl9lbmNoYW50X2ZpbmFsaXplOworCisgICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFBy
aXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9p
bml0KFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQqIGNoZWNrZXIpCit7CisgICAgV2ViS2l0U3Bl
bGxDaGVja2VyRW5jaGFudFByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUoY2hlY2tlciwgV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUl9FTkNIQU5ULCBXZWJLaXRTcGVs
bENoZWNrZXJFbmNoYW50UHJpdmF0ZSk7CisgICAgY2hlY2tlci0+cHJpdiA9IHByaXY7CisgICAg
bmV3IChwcml2KSBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSgpOworCisgICAgcHJp
di0+ZW5jaGFudERpY3RzID0gMDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tTcGVsbGluZ09mU3Ry
aW5nKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciogc3RyaW5nLCBpbnQq
IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCit7CisgICAgV2Vi
S2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGUqIHByaXYgPSBXRUJLSVRfU1BFTExfQ0hFQ0tF
Ul9FTkNIQU5UKGNoZWNrZXIpLT5wcml2OworCisgICAgR1NMaXN0KiBkaWN0cyA9IHByaXYtPmVu
Y2hhbnREaWN0czsKKyAgICBpZiAoIWRpY3RzKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQg
bGVuZ3RoID0gZ191dGY4X3N0cmxlbihzdHJpbmcsIC0xKTsKKworICAgIFBhbmdvTGFuZ3VhZ2Uq
IGxhbmd1YWdlKHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0KCkpOworICAgIEdPd25QdHI8UGFu
Z29Mb2dBdHRyPiBhdHRycyhnX25ldyhQYW5nb0xvZ0F0dHIsIGxlbmd0aCArIDEpKTsKKworICAg
IC8vIHBhbmdvX2dldF9sb2dfYXR0cnMgdXNlcyBhbiBhZGl0aW9uYWwgcG9zaXRpb24gYXQgdGhl
IGVuZCBvZiB0aGUgdGV4dC4KKyAgICBwYW5nb19nZXRfbG9nX2F0dHJzKHN0cmluZywgLTEsIC0x
LCBsYW5ndWFnZSwgYXR0cnMuZ2V0KCksIGxlbmd0aCArIDEpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW5ndGggKyAxOyBpKyspIHsKKyAgICAgICAgLy8gV2UgZ28gdGhyb3VnaCBlYWNo
IGNoYXJhY3RlciB1bnRpbCB3ZSBmaW5kIGFuIGlzX3dvcmRfc3RhcnQsCisgICAgICAgIC8vIHRo
ZW4gd2UgZ2V0IGludG8gYW4gaW5uZXIgbG9vcCB0byBmaW5kIHRoZSBpc193b3JkX2VuZCBjb3Jy
ZXNwb25kaW5nCisgICAgICAgIC8vIHRvIGl0LgorICAgICAgICBpZiAoYXR0cnMuZ2V0KClbaV0u
aXNfd29yZF9zdGFydCkgeworICAgICAgICAgICAgaW50IHN0YXJ0ID0gaTsKKyAgICAgICAgICAg
IGludCBlbmQgPSBpOworICAgICAgICAgICAgaW50IHdvcmRMZW5ndGg7CisKKyAgICAgICAgICAg
IHdoaWxlIChhdHRycy5nZXQoKVtlbmRdLmlzX3dvcmRfZW5kIDwgMSkKKyAgICAgICAgICAgICAg
ICBlbmQrKzsKKworICAgICAgICAgICAgd29yZExlbmd0aCA9IGVuZCAtIHN0YXJ0OworICAgICAg
ICAgICAgLy8gU2V0IHRoZSBpdGVyYXRvciB0byBiZSBhdCB0aGUgY3VycmVudCB3b3JkIGVuZCwg
c28gd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIGNoZWNrIGNoYXJhY3RlcnMgdHdpY2UuCisgICAg
ICAgICAgICBpID0gZW5kOworCisgICAgICAgICAgICBnY2hhciogY3N0YXJ0ID0gZ191dGY4X29m
ZnNldF90b19wb2ludGVyKHN0cmluZywgc3RhcnQpOworICAgICAgICAgICAgZ2ludCBieXRlcyA9
IHN0YXRpY19jYXN0PGdpbnQ+KGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihzdHJpbmcsIGVuZCkg
LSBjc3RhcnQpOworICAgICAgICAgICAgR093blB0cjxnY2hhcj4gd29yZChnX25ldzAoZ2NoYXIs
IGJ5dGVzICsgMSkpOworCisgICAgICAgICAgICBnX3V0Zjhfc3RybmNweSh3b3JkLmdldCgpLCBj
c3RhcnQsIHdvcmRMZW5ndGgpOworCisgICAgICAgICAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0g
ZGljdHMtPm5leHQpIHsKKyAgICAgICAgICAgICAgICBFbmNoYW50RGljdCogZGljdCA9IHN0YXRp
Y19jYXN0PEVuY2hhbnREaWN0Kj4oZGljdHMtPmRhdGEpOworICAgICAgICAgICAgICAgIGlmIChl
bmNoYW50X2RpY3RfY2hlY2soZGljdCwgd29yZC5nZXQoKSwgd29yZExlbmd0aCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgKm1pc3NwZWxsaW5nTG9jYXRpb24gPSBzdGFydDsKKyAgICAgICAgICAg
ICAgICAgICAgKm1pc3NwZWxsaW5nTGVuZ3RoID0gd29yZExlbmd0aDsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIGNoZWNraW5nLCB0aGlzIHdv
cmQgaXMgb2sgaW4gYXQgbGVhc3Qgb25lIGRpY3QuCisgICAgICAgICAgICAgICAgICAgICptaXNz
cGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAgICAgICAgICAgICAgICAgICptaXNzcGVsbGluZ0xl
bmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGNoYXIqKiBnZXRH
dWVzc2VzRm9yV29yZChXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdv
cmQsIGNvbnN0IGNoYXIqIGNvbnRleHQpCit7CisgICAgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFu
dFByaXZhdGUqIHByaXYgPSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UKGNoZWNrZXIpLT5w
cml2OworCisgICAgR1NMaXN0KiBkaWN0cyA9IHByaXYtPmVuY2hhbnREaWN0czsKKyAgICBjaGFy
KiogZ3Vlc3NlcyA9IDA7CisKKyAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQp
IHsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mU3VnZ2VzdGlvbnM7CisgICAgICAgIHNpemVfdCBp
OworCisgICAgICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gc3RhdGljX2Nhc3Q8RW5jaGFudERpY3Qq
PihkaWN0cy0+ZGF0YSk7CisgICAgICAgIGdjaGFyKiogc3VnZ2VzdGlvbnMgPSBlbmNoYW50X2Rp
Y3Rfc3VnZ2VzdChkaWN0LCB3b3JkLCAtMSwgJm51bWJlck9mU3VnZ2VzdGlvbnMpOworCisgICAg
ICAgIGlmIChudW1iZXJPZlN1Z2dlc3Rpb25zID4gMCkgeworICAgICAgICAgICAgaWYgKG51bWJl
ck9mU3VnZ2VzdGlvbnMgPiAxMCkKKyAgICAgICAgICAgICAgICBudW1iZXJPZlN1Z2dlc3Rpb25z
ID0gMTA7CisKKyAgICAgICAgICAgIGd1ZXNzZXMgPSBzdGF0aWNfY2FzdDxjaGFyKio+KGdfbWFs
bG9jMCgobnVtYmVyT2ZTdWdnZXN0aW9ucyArIDEpICogc2l6ZW9mKGNoYXIqKSkpOworICAgICAg
ICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mU3VnZ2VzdGlvbnMgJiYgaSA8IDEwOyBpKysp
CisgICAgICAgICAgICAgICAgZ3Vlc3Nlc1tpXSA9IGdfc3RyZHVwKHN1Z2dlc3Rpb25zW2ldKTsK
KworICAgICAgICAgICAgZ3Vlc3Nlc1tpXSA9IDA7CisKKyAgICAgICAgICAgIGVuY2hhbnRfZGlj
dF9mcmVlX3N1Z2dlc3Rpb25zKGRpY3QsIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBndWVzc2VzOworfQorCitzdGF0aWMgdm9pZCBnZXRBdmFpbGFibGVEaWN0
aW9uYXJpZXNDYWxsYmFjayhjb25zdCBjaGFyKiBjb25zdCBsYW5ndWFnZVRhZywgY29uc3QgY2hh
ciogY29uc3QsIGNvbnN0IGNoYXIqIGNvbnN0LCBjb25zdCBjaGFyKiBjb25zdCwgdm9pZCogZGF0
YSkKK3sKKyAgICBWZWN0b3I8Q1N0cmluZz4qIGRpY3RzID0gc3RhdGljX2Nhc3Q8VmVjdG9yPENT
dHJpbmc+Kj4oZGF0YSk7CisKKyAgICBkaWN0cy0+YXBwZW5kKGxhbmd1YWdlVGFnKTsKK30KKwor
c3RhdGljIHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhXZWJLaXRTcGVsbENoZWNr
ZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIGxhbmd1YWdlcykKK3sKKyAgICBHU0xpc3QqIHNwZWxs
RGljdGlvbmFyaWVzID0gMDsKKworICAgIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX1NQRUxMX0NIRUNLRVJfRU5DSEFOVChjaGVja2VyKS0+cHJpdjsKKwor
ICAgIGNyZWF0ZUVuY2hhbnRCcm9rZXJJZk5lZWRlZCgpOworCisgICAgaWYgKGxhbmd1YWdlcykg
eworICAgICAgICBjaGFyKiogbGFuZ3MgPSBnX3N0cnNwbGl0KGxhbmd1YWdlcywgIiwiLCAtMSk7
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBsYW5nc1tpXTsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAoZW5jaGFudF9icm9rZXJfZGljdF9leGlzdHMoYnJva2VyLCBsYW5nc1tpXSkpIHsKKyAgICAg
ICAgICAgICAgICBFbmNoYW50RGljdCogZGljdCA9IGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfZGlj
dChicm9rZXIsIGxhbmdzW2ldKTsKKyAgICAgICAgICAgICAgICBzcGVsbERpY3Rpb25hcmllcyA9
IGdfc2xpc3RfYXBwZW5kKHNwZWxsRGljdGlvbmFyaWVzLCBkaWN0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBnX3N0cmZyZWV2KGxhbmdzKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBjb25zdCBjaGFyKiBsYW5ndWFnZSA9IHBhbmdvX2xhbmd1YWdlX3RvX3N0cmluZyhndGtf
Z2V0X2RlZmF1bHRfbGFuZ3VhZ2UoKSk7CisgICAgICAgIGlmIChlbmNoYW50X2Jyb2tlcl9kaWN0
X2V4aXN0cyhicm9rZXIsIGxhbmd1YWdlKSkgeworICAgICAgICAgICAgRW5jaGFudERpY3QqIGRp
Y3QgPSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoYnJva2VyLCBsYW5ndWFnZSk7CisgICAg
ICAgICAgICBzcGVsbERpY3Rpb25hcmllcyA9IGdfc2xpc3RfYXBwZW5kKHNwZWxsRGljdGlvbmFy
aWVzLCBkaWN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIGRpY3Rpb25h
cmllcyBzZWxlY3RlZCwgd2UgZ2V0IG9uZSBmcm9tIHRoZSBsaXN0LgorICAgICAgICAgICAgVmVj
dG9yPENTdHJpbmc+IGFsbERpY3Rpb25hcmllczsKKyAgICAgICAgICAgIGVuY2hhbnRfYnJva2Vy
X2xpc3RfZGljdHMoYnJva2VyLCBnZXRBdmFpbGFibGVEaWN0aW9uYXJpZXNDYWxsYmFjaywgJmFs
bERpY3Rpb25hcmllcyk7CisgICAgICAgICAgICBpZiAoIWFsbERpY3Rpb25hcmllcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBFbmNoYW50RGljdCogZGljdCA9IGVuY2hhbnRfYnJva2Vy
X3JlcXVlc3RfZGljdChicm9rZXIsIGFsbERpY3Rpb25hcmllc1swXS5kYXRhKCkpOworICAgICAg
ICAgICAgICAgIHNwZWxsRGljdGlvbmFyaWVzID0gZ19zbGlzdF9hcHBlbmQoc3BlbGxEaWN0aW9u
YXJpZXMsIGRpY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGdfc2xp
c3RfZm9yZWFjaChwcml2LT5lbmNoYW50RGljdHMsIGZyZWVTcGVsbENoZWNraW5nTGFuZ3VhZ2Us
IDApOworICAgIGdfc2xpc3RfZnJlZShwcml2LT5lbmNoYW50RGljdHMpOworICAgIHByaXYtPmVu
Y2hhbnREaWN0cyA9IHNwZWxsRGljdGlvbmFyaWVzOworfQorCitzdGF0aWMgY2hhciogZ2V0QXV0
b2NvcnJlY3RTdWdnZXN0aW9uc0Zvck1pc3NwZWxsZWRXb3JkKFdlYktpdFNwZWxsQ2hlY2tlciog
Y2hlY2tlciwgY29uc3QgY2hhciogd29yZCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj
IHZvaWQgbGVhcm5Xb3JkKFdlYktpdFNwZWxsQ2hlY2tlciogY2hlY2tlciwgY29uc3QgY2hhciog
d29yZCkKK3sKKyAgICBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQoY2hlY2tlciktPnByaXY7CisgICAgR1NMaXN0KiBk
aWN0cyA9IHByaXYtPmVuY2hhbnREaWN0czsKKworICAgIGZvciAoOyBkaWN0czsgZGljdHMgPSBk
aWN0cy0+bmV4dCkgeworICAgICAgICBFbmNoYW50RGljdCogZGljdCA9IHN0YXRpY19jYXN0PEVu
Y2hhbnREaWN0Kj4oZGljdHMtPmRhdGEpOworCisgICAgICAgIGVuY2hhbnRfZGljdF9hZGRfdG9f
cGVyc29uYWwoZGljdCwgd29yZCwgLTEpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaWdub3Jl
V29yZChXZWJLaXRTcGVsbENoZWNrZXIqIGNoZWNrZXIsIGNvbnN0IGNoYXIqIHdvcmQpCit7Cisg
ICAgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudFByaXZhdGUqIHByaXYgPSBXRUJLSVRfU1BFTExf
Q0hFQ0tFUl9FTkNIQU5UKGNoZWNrZXIpLT5wcml2OworICAgIEdTTGlzdCogZGljdHMgPSBwcml2
LT5lbmNoYW50RGljdHM7CisKKyAgICBmb3IgKDsgZGljdHM7IGRpY3RzID0gZGljdHMtPm5leHQp
IHsKKyAgICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSBzdGF0aWNfY2FzdDxFbmNoYW50RGljdCo+
KGRpY3RzLT5kYXRhKTsKKworICAgICAgICBlbmNoYW50X2RpY3RfYWRkX3RvX3Nlc3Npb24oZGlj
dCwgd29yZCwgLTEpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NwZWxsX2NoZWNr
ZXJfZW5jaGFudF9zcGVsbF9jaGVja2VyX2ludGVyZmFjZV9pbml0KFdlYktpdFNwZWxsQ2hlY2tl
ckludGVyZmFjZSogaW50ZXJmYWNlKQoreworICAgIGludGVyZmFjZS0+Y2hlY2tfc3BlbGxpbmdf
b2Zfc3RyaW5nID0gY2hlY2tTcGVsbGluZ09mU3RyaW5nOworICAgIGludGVyZmFjZS0+Z2V0X2d1
ZXNzZXNfZm9yX3dvcmQgPSBnZXRHdWVzc2VzRm9yV29yZDsKKyAgICBpbnRlcmZhY2UtPnVwZGF0
ZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMgPSB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
OworICAgIGludGVyZmFjZS0+Z2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVs
bGVkX3dvcmQgPSBnZXRBdXRvY29ycmVjdFN1Z2dlc3Rpb25zRm9yTWlzc3BlbGxlZFdvcmQ7Cisg
ICAgaW50ZXJmYWNlLT5sZWFybl93b3JkID0gbGVhcm5Xb3JkOworICAgIGludGVyZmFjZS0+aWdu
b3JlX3dvcmQgPSBpZ25vcmVXb3JkOworfQorCisjZW5kaWYgLyogRU5BQkxFKFNQRUxMQ0hFQ0sp
ICovCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNo
ZWNrZXJlbmNoYW50LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c3BlbGxjaGVj
a2VyZW5jaGFudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZTFiY2FjN2M3NWI2YTBkNDkyYmQ1NGZhNzM1OWZk
MTcxZDg2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0c3BlbGxjaGVja2VyZW5jaGFudC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50
X2gKKyNkZWZpbmUgd2Via2l0c3BlbGxjaGVja2VyZW5jaGFudF9oCisKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NQ
RUxMX0NIRUNLRVJfRU5DSEFOVCAgICAgICAgICAgICh3ZWJraXRfc3BlbGxfY2hlY2tlcl9lbmNo
YW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9TUEVMTF9DSEVDS0VSX0VOQ0hBTlQob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZ
UEVfU1BFTExfQ0hFQ0tFUl9FTkNIQU5ULCBXZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50KSkKKyNk
ZWZpbmUgV0VCS0lUX1NQRUxMX0NIRUNLRVJfRU5DSEFOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX0VO
Q0hBTlQsIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9J
U19TUEVMTF9DSEVDS0VSX0VOQ0hBTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX1NQRUxMX0NIRUNLRVJfRU5DSEFOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9TUEVMTF9DSEVDS0VSX0VOQ0hB
TlQpKQorI2RlZmluZSBXRUJLSVRfU1BFTExfQ0hFQ0tFUl9FTkNIQU5UX0dFVF9DTEFTUyhvYmop
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1NQRUxMX0NI
RUNLRVJfRU5DSEFOVCwgV2ViS2l0U3BlbGxDaGVja2VyRW5jaGFudENsYXNzKSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQgV2ViS2l0U3BlbGxDaGVja2VyRW5j
aGFudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTcGVsbENoZWNrZXJFbmNoYW50Q2xhc3MgV2Vi
S2l0U3BlbGxDaGVja2VyRW5jaGFudENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNwZWxs
Q2hlY2tlckVuY2hhbnRQcml2YXRlIFdlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnRQcml2YXRlOwor
CitzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hlY2tlckVuY2hhbnQgeworICAgIEdPYmplY3QgcGFyZW50
X2luc3RhbmNlOworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0U3BlbGxDaGVja2Vy
RW5jaGFudFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hlY2tlckVu
Y2hhbnRDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUgd2Via2l0X3NwZWxsX2NoZWNrZXJfZW5jaGFudF9nZXRfdHlwZSh2b2lkKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIEVOQUJMRShTUEVMTENIRUNLKSAqLworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCAxNzM5
MWZjZDI3MGZjYTA2ZTY4YTIwZTZkZWQ4N2Y5YjIzMjZjOWM2Li40ZmNiYWMyNTA3ZGIyNjFjNDgx
YzVlYTJhMzBkMWQ1ZTVkOGM2N2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCkBAIC0zMjkyLDcgKzMyOTIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfdXBkYXRlX3NldHRpbmdzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCiAgICAgaWYgKGVuYWJsZVNwZWxsQ2hlY2tpbmcpIHsKICAgICAgICAgV2Vi
S2l0OjpFZGl0b3JDbGllbnQqIGNsaWVudCA9IHN0YXRpY19jYXN0PFdlYktpdDo6RWRpdG9yQ2xp
ZW50Kj4oY29yZSh3ZWJWaWV3KS0+ZWRpdG9yQ2xpZW50KCkpOwotICAgICAgICBzdGF0aWNfY2Fz
dDxXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50RW5jaGFudCo+KGNsaWVudC0+dGV4dENoZWNrZXIo
KSktPnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZShkZWZhdWx0U3BlbGxDaGVja2luZ0xhbmd1
YWdlcyk7CisgICAgICAgIHN0YXRpY19jYXN0PFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRHdGsq
PihjbGllbnQtPnRleHRDaGVja2VyKCkpLT51cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoZGVm
YXVsdFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOwogICAgIH0KICNlbmRpZgogCkBAIC0zNDIzLDE0
ICszNDIzLDE1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXR0aW5nc19ub3RpZnko
V2ViS2l0V2ViU2V0dGluZ3MqIHdlYlNldHRpbmdzLCBHUGFyCiAgICAgICAgIGdfb2JqZWN0X2dl
dChHX09CSkVDVCh3ZWJTZXR0aW5ncyksICJlbmFibGUtc3BlbGwtY2hlY2tpbmciLCAmZW5hYmxl
U3BlbGxDaGVja2luZywgTlVMTCk7CiAgICAgICAgIGlmIChlbmFibGVTcGVsbENoZWNraW5nKSB7
CiAgICAgICAgICAgICBXZWJLaXQ6OkVkaXRvckNsaWVudCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8
V2ViS2l0OjpFZGl0b3JDbGllbnQqPihjb3JlKHdlYlZpZXcpLT5lZGl0b3JDbGllbnQoKSk7Ci0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50RW5jaGFudCo+
KGNsaWVudC0+dGV4dENoZWNrZXIoKSktPnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZShnX3Zh
bHVlX2dldF9zdHJpbmcoJnZhbHVlKSk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJLaXQ6
OlRleHRDaGVja2VyQ2xpZW50R3RrKj4oY2xpZW50LT50ZXh0Q2hlY2tlcigpKS0+dXBkYXRlU3Bl
bGxDaGVja2luZ0xhbmd1YWdlKGdfdmFsdWVfZ2V0X3N0cmluZygmdmFsdWUpKTsKICAgICAgICAg
fQogICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGVsc2UgaWYgKG5hbWUg
PT0gZ19pbnRlcm5fc3RyaW5nKCJlbmFibGUtd2ViZ2wiKSkKLSAgICAgICAgc2V0dGluZ3MtPnNl
dFdlYkdMRW5hYmxlZChnX3ZhbHVlX2dldF9ib29sZWFuKCZ2YWx1ZSkpOworICAgICAgICBzZXR0
aW5ncy0+c2V0V2ViR0xFbmFibGVkKGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnZhbHVlKQorKTsKICNl
bmRpZgogCiAgICAgZWxzZSBpZiAoIWdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpF
Q1RfR0VUX0NMQVNTKHdlYlNldHRpbmdzKSwgbmFtZSkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>