<?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>102853</bug_id>
          
          <creation_ts>2012-11-20 17:50:15 -0800</creation_ts>
          <short_desc>[EFL][WK2] Add ewk_application_cache_manager APIs</short_desc>
          <delta_ts>2014-03-16 22:48:17 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61838</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Jiyeon Kim">jiyeon0402.kim</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jye.kang</cc>
    
    <cc>kihong.kwon</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>sunaeluv.kim</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>772337</commentid>
    <comment_count>0</comment_count>
    <who name="Jiyeon Kim">jiyeon0402.kim</who>
    <bug_when>2012-11-20 17:50:15 -0800</bug_when>
    <thetext>Add ewk_application_cache_manager API to manage offline application cache on webkit2 efl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772357</commentid>
    <comment_count>1</comment_count>
      <attachid>175316</attachid>
    <who name="Jiyeon Kim">jiyeon0402.kim</who>
    <bug_when>2012-11-20 18:18:41 -0800</bug_when>
    <thetext>Created attachment 175316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772824</commentid>
    <comment_count>2</comment_count>
      <attachid>175316</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-21 05:14:25 -0800</bug_when>
    <thetext>Comment on attachment 175316
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:47
&gt; +    WKApplicationCacheManagerGetApplicationCacheOrigins(toAPI(m_applicationCacheManager.get()), context, callback);

You may use getApplicationCacheOrigins(PassRefPtr&lt;ArrayCallback&gt;) instead of WK APIs.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:68
&gt; +struct Ewk_Application_Cache_Origins_Async_Get_Context {

I prefer to follow the WebKit coding style except in the public header files.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:84
&gt; +    OwnPtr&lt;Ewk_Error&gt; ewkError = Ewk_Error::create(wkError);

s/Ewk_Error/EwkError

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager_private.h:43
&gt; +        return adoptPtr(new Ewk_Application_Cache_Manager(context-&gt;applicationCacheManagerProxy()));

s/Ewk_Application_Cache_Manager/EwkApplicationCacheManager

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:138
&gt; +    return m_applicationCacheManager.get();

Inline function would be better.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:29
&gt; +#include &quot;UnitTestUtils/EWK2UnitTestEnvironment.h&quot;

unneeded include. Already included in EWK2UnitTestBase.h.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:32
&gt; +#include &lt;EWebKit2.h&gt;

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:33
&gt; +#include &lt;Ecore.h&gt;

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp:53
&gt; +    ASSERT_EQ(applicationCacheManager, ewk_context_application_cache_manager_get(context));

This comparison seems to be meaningless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772849</commentid>
    <comment_count>3</comment_count>
      <attachid>175316</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-21 05:49:37 -0800</bug_when>
    <thetext>Comment on attachment 175316
Patch

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

&gt; Source/WebKit2/PlatformEfl.cmake:47
&gt; +    UIProcess/API/efl/ewk_application_cache_manager.cpp

You need to add the new header to the installed headers below in the same file.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:62
&gt; +        originList = eina_list_append(originList, origin.release().leakRef());

calling .release() here will reset the pointer the NULL in the wrapperCache. This is probably not what you want.
Probably it should be something like eina_list_append(originList, ewk_object_ref(origin.get()))

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:83
&gt; +    Eina_List* originList = webApplicationCacheContext-&gt;manager-&gt;createOriginList(origins);

This list is never freed (leak). You should unref the list items and free the list at this end of this function.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:93
&gt; +    Ewk_Application_Cache_Origins_Async_Get_Context* context = new Ewk_Application_Cache_Origins_Async_Get_Context(ewkApplicationCacheManager, callback, userData);

context is never freed?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.h:51
&gt; + *                        the Eina_List and its items should be freed after use. Use ewk_security_origin_unref()

No, we usually don&apos;t pass ownership of callback arguments to the client. The client should clone the list (and ref its items) if it wishes to keep them outside the callback.
This is less leak prone and common practice I believe.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:29
&gt;&gt; +#include &quot;UnitTestUtils/EWK2UnitTestEnvironment.h&quot;
&gt; 
&gt; unneeded include. Already included in EWK2UnitTestBase.h.

?

&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:32
&gt;&gt; +#include &lt;EWebKit2.h&gt;
&gt; 
&gt; ditto.

So? This file is using Ewk types so it should include EWebKit2.h. Relying on other headers includes is bad practice.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:33
&gt;&gt; +#include &lt;Ecore.h&gt;
&gt; 
&gt; ditto.

So? This file is using ecore function so it should include Ecore.h. Relying on other headers includes is bad practice.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:81
&gt; +static void getApplicationCacheOriginsCallback(Eina_List* origins, Ewk_Error* error, void* userData)

Note that you&apos;re not freeing the origins list here, which proves my point that the current API is leak prone.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:111
&gt; +    Eina_Strbuf* body = eina_strbuf_new();

Should be inside the if case otherwise it leaks if the if condition is false.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:128
&gt; +    }

There should probably be an else case here which sets status to SOUP_STATUS_NOT_FOUND.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:157
&gt; +    const char* applicationCacheTestUrl = httpServer-&gt;getURLForPath(&quot;/application_cache.html&quot;).data();

You keep a pointer to memory owned by a temporary object (CString), this is bad and may crash.

Get rid of this useless variable and update next line to read:
ewk_view_url_set(view, httpServer-&gt;getURLForPath(&quot;/application_cache.html&quot;).data());

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:158
&gt; +    ewk_view_url_set(view, applicationCacheTestUrl);

There is loadUrlSync() to do this in 1 line instead of 2.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp:53
&gt;&gt; +    ASSERT_EQ(applicationCacheManager, ewk_context_application_cache_manager_get(context));
&gt; 
&gt; This comparison seems to be meaningless.

It is not meaningless, it makes sure we return the same pointer every time. This is consistent with our other tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773452</commentid>
    <comment_count>4</comment_count>
      <attachid>175316</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-11-21 17:55:25 -0800</bug_when>
    <thetext>Comment on attachment 175316
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:29
&gt;&gt;&gt; +#include &quot;UnitTestUtils/EWK2UnitTestEnvironment.h&quot;
&gt;&gt; 
&gt;&gt; unneeded include. Already included in EWK2UnitTestBase.h.
&gt; 
&gt; ?

I refactored EWK2UnitTestBase.h to include the EWK2UnitTestEnvironment.h, Ecore.h, Eina.h headers in http://trac.webkit.org/changeset/135349, as they are used commonly in API test cases.
Actually, I started this work as I have been pointed out that why &lt;gtest/gtest.h&gt; should be included in the test files even though it is already included in EWK2UnitTestBase.h file. Then according to Laszlo&apos;s comments, I moved out the duplicated headers in to EWK2UnitTestBase.h.

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp:53
&gt;&gt;&gt; +    ASSERT_EQ(applicationCacheManager, ewk_context_application_cache_manager_get(context));
&gt;&gt; 
&gt;&gt; This comparison seems to be meaningless.
&gt; 
&gt; It is not meaningless, it makes sure we return the same pointer every time. This is consistent with our other tests.

I got it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774909</commentid>
    <comment_count>5</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2012-11-24 18:14:14 -0800</bug_when>
    <thetext>(In reply to comment #4)

&gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:32
&gt; &gt; &gt;&gt; +#include &lt;EWebKit2.h&gt;
&gt; &gt; &gt; 
&gt; &gt; &gt; ditto.
&gt; &gt; 
&gt; &gt; So? This file is using Ewk types so it should include EWebKit2.h. Relying on other headers includes is bad practice.
 
&gt; I refactored EWK2UnitTestBase.h to include the EWK2UnitTestEnvironment.h, Ecore.h, Eina.h headers in http://trac.webkit.org/changeset/135349, as they are used commonly in API test cases.


I agree with Christophe in general that relying on other header includes is bad practice, but when it is justified it might make sense to break the general rule. As an example most WebKit files rely on Platform.h to include Compiler.h - as we made an exception with config.h (and even added this exception to the style checker). 

The idea of EWK2UnitTestBase.h is similar to config.h - EWK2UnitTestBase.h should be included first in every EFL API test-case. I do not feel strongly about EWK2UnitTestBase.h, but wanted to take this chance to explain why I supported r135349. We should either follow this new practice going forward for future API tests as well or revert r135349 for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783064</commentid>
    <comment_count>6</comment_count>
    <who name="Jiyeon Kim">jiyeon0402.kim</who>
    <bug_when>2012-12-04 16:04:14 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 175316 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=175316&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:47
&gt; &gt; +    WKApplicationCacheManagerGetApplicationCacheOrigins(toAPI(m_applicationCacheManager.get()), context, callback);
&gt; 
&gt; You may use getApplicationCacheOrigins(PassRefPtr&lt;ArrayCallback&gt;) instead of WK APIs.
Yes, I&apos;ll do.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:68
&gt; &gt; +struct Ewk_Application_Cache_Origins_Async_Get_Context {
&gt; 
&gt; I prefer to follow the WebKit coding style except in the public header files.
I think private header file is better than public header file.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:84
&gt; &gt; +    OwnPtr&lt;Ewk_Error&gt; ewkError = Ewk_Error::create(wkError);
&gt; 
&gt; s/Ewk_Error/EwkError
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager_private.h:43
&gt; &gt; +        return adoptPtr(new Ewk_Application_Cache_Manager(context-&gt;applicationCacheManagerProxy()));
&gt; 
&gt; s/Ewk_Application_Cache_Manager/EwkApplicationCacheManager
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:138
&gt; &gt; +    return m_applicationCacheManager.get();
&gt; 
&gt; Inline function would be better.
&gt; 
Yes I&apos;ll do.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:29
&gt; &gt; +#include &quot;UnitTestUtils/EWK2UnitTestEnvironment.h&quot;
&gt; 
&gt; unneeded include. Already included in EWK2UnitTestBase.h.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:32
&gt; &gt; +#include &lt;EWebKit2.h&gt;
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:33
&gt; &gt; +#include &lt;Ecore.h&gt;
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp:53
&gt; &gt; +    ASSERT_EQ(applicationCacheManager, ewk_context_application_cache_manager_get(context));
&gt; 
&gt; This comparison seems to be meaningless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783067</commentid>
    <comment_count>7</comment_count>
    <who name="Jiyeon Kim">jiyeon0402.kim</who>
    <bug_when>2012-12-04 16:07:59 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 175316 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=175316&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/PlatformEfl.cmake:47
&gt; &gt; +    UIProcess/API/efl/ewk_application_cache_manager.cpp
&gt; 
&gt; You need to add the new header to the installed headers below in the same file.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:62
&gt; &gt; +        originList = eina_list_append(originList, origin.release().leakRef());
&gt; 
&gt; calling .release() here will reset the pointer the NULL in the wrapperCache. This is probably not what you want.
&gt; Probably it should be something like eina_list_append(originList, ewk_object_ref(origin.get()))
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:83
&gt; &gt; +    Eina_List* originList = webApplicationCacheContext-&gt;manager-&gt;createOriginList(origins);
&gt; 
&gt; This list is never freed (leak). You should unref the list items and free the list at this end of this function.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:93
&gt; &gt; +    Ewk_Application_Cache_Origins_Async_Get_Context* context = new Ewk_Application_Cache_Origins_Async_Get_Context(ewkApplicationCacheManager, callback, userData);
&gt; 
&gt; context is never freed?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.h:51
&gt; &gt; + *                        the Eina_List and its items should be freed after use. Use ewk_security_origin_unref()
&gt; 
&gt; No, we usually don&apos;t pass ownership of callback arguments to the client. The client should clone the list (and ref its items) if it wishes to keep them outside the callback.
&gt; This is less leak prone and common practice I believe.
&gt; 
&gt;
Yes, I&apos;ll do. Thank you.
 &gt;&gt; 
Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:29
&gt; &gt;&gt; +#include &quot;UnitTestUtils/EWK2UnitTestEnvironment.h&quot;
&gt; &gt; 
&gt; &gt; unneeded include. Already included in EWK2UnitTestBase.h.
&gt; 
&gt; ?
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:32
&gt; &gt;&gt; +#include &lt;EWebKit2.h&gt;
&gt; &gt; 
&gt; &gt; ditto.
&gt; 
&gt; So? This file is using Ewk types so it should include EWebKit2.h. Relying on other headers includes is bad practice.
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:33
&gt; &gt;&gt; +#include &lt;Ecore.h&gt;
&gt; &gt; 
&gt; &gt; ditto.
&gt; 
&gt; So? This file is using ecore function so it should include Ecore.h. Relying on other headers includes is bad practice.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:81
&gt; &gt; +static void getApplicationCacheOriginsCallback(Eina_List* origins, Ewk_Error* error, void* userData)
&gt; 
&gt; Note that you&apos;re not freeing the origins list here, which proves my point that the current API is leak prone.
&gt; 
Yes, I&apos;ll fix.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:111
&gt; &gt; +    Eina_Strbuf* body = eina_strbuf_new();
&gt; 
&gt; Should be inside the if case otherwise it leaks if the if condition is false.
&gt; 
I added eina_strbuf_free in front of soup_message_body_complete and remove eina_strbuf_free in if case.
&gt; &gt; 
Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:128
&gt; &gt; +    }
&gt; 
&gt; There should probably be an else case here which sets status to SOUP_STATUS_NOT_FOUND.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:157
&gt; &gt; +    const char* applicationCacheTestUrl = httpServer-&gt;getURLForPath(&quot;/application_cache.html&quot;).data();
&gt; 
&gt; You keep a pointer to memory owned by a temporary object (CString), this is bad and may crash.
&gt; 
&gt; Get rid of this useless variable and update next line to read:
&gt; ewk_view_url_set(view, httpServer-&gt;getURLForPath(&quot;/application_cache.html&quot;).data());
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:158
&gt; &gt; +    ewk_view_url_set(view, applicationCacheTestUrl);
&gt; 
&gt; There is loadUrlSync() to do this in 1 line instead of 2.
&gt; 
I&apos;ll fix.
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp:53
&gt; &gt;&gt; +    ASSERT_EQ(applicationCacheManager, ewk_context_application_cache_manager_get(context));
&gt; &gt; 
&gt; &gt; This comparison seems to be meaningless.
&gt; 
&gt; It is not meaningless, it makes sure we return the same pointer every time. This is consistent with our other tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783071</commentid>
    <comment_count>8</comment_count>
      <attachid>177596</attachid>
    <who name="Jiyeon Kim">jiyeon0402.kim</who>
    <bug_when>2012-12-04 16:12:22 -0800</bug_when>
    <thetext>Created attachment 177596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783075</commentid>
    <comment_count>9</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2012-12-04 16:16:39 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=177596) [details]
&gt; Patch

Before making patch,
please rebase you local first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783207</commentid>
    <comment_count>10</comment_count>
      <attachid>177636</attachid>
    <who name="Jiyeon Kim">jiyeon0402.kim</who>
    <bug_when>2012-12-04 18:12:06 -0800</bug_when>
    <thetext>Created attachment 177636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783241</commentid>
    <comment_count>11</comment_count>
      <attachid>177636</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-12-04 18:53:20 -0800</bug_when>
    <thetext>Comment on attachment 177636
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:78
&gt; +        ewk_object_unref(static_cast&lt;Ewk_Security_Origin*&gt;(item));

I don&apos;t understand why you delete Ewk_Security_Origin via ewk_object_unref. AFAIK, ewk_object_unref is meaningful when item is based on EwkObject.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager_private.h:38
&gt; +struct Ewk_Application_Cache_Origins_Async_Get_Context {

Why do you use *_Get_* in struct name ? I don&apos;t know what does *Get* means here. Is Ewk_Application_Cache_Origins_Async_Context enough ?

Beside this struct is for internal usage, right ? If so, I prefer not to use _ in struct name.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:154
&gt; + * @param context context object to query.

We don&apos;t use . at the end of line in @param field.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:156
&gt; + * @return Ewk_Application_Cache_Manager object instance or @c NULL in case of failure.

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:78
&gt; +const char* applicationCacheCss =   &quot;output { font:2em sans-serif; }&quot;;

s/=   /= /g

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:138
&gt; +

Unneeded line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783271</commentid>
    <comment_count>12</comment_count>
      <attachid>177636</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2012-12-04 19:39:56 -0800</bug_when>
    <thetext>Comment on attachment 177636
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.h:34
&gt; +    unsigned getPort() const;

strange, is port() correct for coding style?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:31
&gt; +#include &quot;ewk_security_origin_private.h&quot;

private.h is required?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:33
&gt; +#include &lt;Ecore.h&gt;

I am not sure whether we should add EWebKit2.h and Ecore.h
In other test cases, it was omitted because EWK2UnitTestBase.h include.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:62
&gt; +const char* applicationCacheHtml =

Should it be globa?
If then, please add static.

And const char XXX[] = is prefered.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:126
&gt; +        eina_strbuf_append_printf(body, applicationCacheHtml, 0);
&gt; +        const size_t bodyLength = eina_strbuf_length_get(body);
&gt; +        soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_TAKE, eina_strbuf_string_steal(body), bodyLength);
&gt; +    } else if (!strcmp(path, applicationCacheManifestFile)) {
&gt; +        eina_strbuf_append_printf(body, applicationCacheManifest, 0);
&gt; +        const size_t bodyLength = eina_strbuf_length_get(body);
&gt; +        soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_TAKE, eina_strbuf_string_steal(body), bodyLength);
&gt; +    } else if (!strcmp(path, applicationCacheCssFile)) {
&gt; +        eina_strbuf_append_printf(body, applicationCacheCss, 0);
&gt; +        const size_t bodyLength = eina_strbuf_length_get(body);
&gt; +        soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_TAKE, eina_strbuf_string_steal(body), bodyLength);
&gt; +    } else
&gt; +        soup_message_set_status(message, SOUP_STATUS_NOT_FOUND);

How about reducing the duplication?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783359</commentid>
    <comment_count>13</comment_count>
    <who name="Jiyeon Kim">jiyeon0402.kim</who>
    <bug_when>2012-12-04 21:13:27 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 177636 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177636&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:78
&gt; &gt; +        ewk_object_unref(static_cast&lt;Ewk_Security_Origin*&gt;(item));
&gt; 
&gt; I don&apos;t understand why you delete Ewk_Security_Origin via ewk_object_unref. AFAIK, ewk_object_unref is meaningful when item is based on EwkObject.
Ewk_Security_Origin also based on EwkObject.
But I&apos;ll change ewk_object_unref(static_cast&lt;Ewk_Object*&gt;(item));
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager_private.h:38
&gt; &gt; +struct Ewk_Application_Cache_Origins_Async_Get_Context {
&gt; 
&gt; Why do you use *_Get_* in struct name ? I don&apos;t know what does *Get* means here. Is Ewk_Application_Cache_Origins_Async_Context enough ?
&gt; 
&gt; Beside this struct is for internal usage, right ? If so, I prefer not to use _ in struct name.
This struct is for get application cache origins Callback. So I added *Get*.
And other struct name also &quot;Get_Policy_Async_Data&quot;, &quot;Get_Hostnames_Async_Data
&quot;.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:154
&gt; &gt; + * @param context context object to query.
&gt; 
&gt; We don&apos;t use . at the end of line in @param field.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:156
&gt; &gt; + * @return Ewk_Application_Cache_Manager object instance or @c NULL in case of failure.
&gt; 
&gt; ditto.
&gt; 
&gt; 
 Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:78
&gt; &gt; +const char* applicationCacheCss =   &quot;output { font:2em sans-serif; }&quot;;
&gt; 
&gt; s/=   /= /g
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:138
&gt; &gt; +
&gt; 
&gt; Unneeded line.
I&apos;ll fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783371</commentid>
    <comment_count>14</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-12-04 21:22:38 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 177636 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177636&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:78
&gt; &gt; &gt; +        ewk_object_unref(static_cast&lt;Ewk_Security_Origin*&gt;(item));
&gt; &gt; 
&gt; &gt; I don&apos;t understand why you delete Ewk_Security_Origin via ewk_object_unref. AFAIK, ewk_object_unref is meaningful when item is based on EwkObject.
&gt; Ewk_Security_Origin also based on EwkObject.
&gt; But I&apos;ll change ewk_object_unref(static_cast&lt;Ewk_Object*&gt;(item));

Ah, my source was out of date. Ok, I got it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783422</commentid>
    <comment_count>15</comment_count>
    <who name="Jiyeon Kim">jiyeon0402.kim</who>
    <bug_when>2012-12-04 23:05:49 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 177636 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177636&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.h:34
&gt; &gt; +    unsigned getPort() const;
&gt; 
&gt; strange, is port() correct for coding style?
&gt; 
Yes, I&apos;ll fix.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:31
&gt; &gt; +#include &quot;ewk_security_origin_private.h&quot;
&gt; 
&gt; private.h is required?
&gt; 
I&apos;ll change ewk_security_origin.h to ewk_security_origin_private.h
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:33
&gt; &gt; +#include &lt;Ecore.h&gt;
&gt; 
&gt; I am not sure whether we should add EWebKit2.h and Ecore.h
&gt; In other test cases, it was omitted because EWK2UnitTestBase.h include.
&gt; 
I&apos;ll remove.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:62
&gt; &gt; +const char* applicationCacheHtml =
&gt; 
&gt; Should it be globa?
&gt; If then, please add static.
&gt; 
&gt; And const char XXX[] = is prefered.
&gt; 
I&apos;ll fix.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:126
&gt; &gt; +        eina_strbuf_append_printf(body, applicationCacheHtml, 0);
&gt; &gt; +        const size_t bodyLength = eina_strbuf_length_get(body);
&gt; &gt; +        soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_TAKE, eina_strbuf_string_steal(body), bodyLength);
&gt; &gt; +    } else if (!strcmp(path, applicationCacheManifestFile)) {
&gt; &gt; +        eina_strbuf_append_printf(body, applicationCacheManifest, 0);
&gt; &gt; +        const size_t bodyLength = eina_strbuf_length_get(body);
&gt; &gt; +        soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_TAKE, eina_strbuf_string_steal(body), bodyLength);
&gt; &gt; +    } else if (!strcmp(path, applicationCacheCssFile)) {
&gt; &gt; +        eina_strbuf_append_printf(body, applicationCacheCss, 0);
&gt; &gt; +        const size_t bodyLength = eina_strbuf_length_get(body);
&gt; &gt; +        soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_TAKE, eina_strbuf_string_steal(body), bodyLength);
&gt; &gt; +    } else
&gt; &gt; +        soup_message_set_status(message, SOUP_STATUS_NOT_FOUND);
&gt; 
&gt; How about reducing the duplication?
I&apos;ll reduce the duplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783430</commentid>
    <comment_count>16</comment_count>
      <attachid>177678</attachid>
    <who name="Jiyeon Kim">jiyeon0402.kim</who>
    <bug_when>2012-12-04 23:14:19 -0800</bug_when>
    <thetext>Created attachment 177678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783460</commentid>
    <comment_count>17</comment_count>
      <attachid>177678</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-12-05 00:14:33 -0800</bug_when>
    <thetext>Comment on attachment 177678
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:43
&gt; +    : m_applicationCacheManager(applicationCacheManager)

assert?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:54
&gt; +    const size_t length = WKArrayGetSize(origins);

const should not be used with local vars, due to coding style.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.cpp:80
&gt; +    delete webApplicationCacheContext;

if you used own_ptr for &apos;webApplicationCacheContext&apos; with adoption, manual delete would be avoided

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager_private.h:38
&gt; +struct _Ewk_Application_Cache_Origins_Async_Get_Context {

Do we have to use &quot;_&quot; for private object names?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager_private.h:39
&gt; +    const Ewk_Application_Cache_Manager* manager;

isn&apos;t it EwkApplicationCacheManager ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_private.h:58
&gt; +    inline EwkApplicationCacheManager* applicationCacheManager() const { return m_applicationCacheManager.get(); }

inline is unneeded here, as function is defined in header. 
And again const member returns mutable pointer :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808103</commentid>
    <comment_count>18</comment_count>
      <attachid>177678</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-01-16 00:13:01 -0800</bug_when>
    <thetext>Comment on attachment 177678
Patch

r- based on many comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991063</commentid>
    <comment_count>19</comment_count>
      <attachid>226870</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-03-16 19:09:52 -0700</bug_when>
    <thetext>Created attachment 226870
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991073</commentid>
    <comment_count>20</comment_count>
      <attachid>226872</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-03-16 20:16:15 -0700</bug_when>
    <thetext>Created attachment 226872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991094</commentid>
    <comment_count>21</comment_count>
      <attachid>226882</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-03-16 22:29:38 -0700</bug_when>
    <thetext>Created attachment 226882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991096</commentid>
    <comment_count>22</comment_count>
      <attachid>226882</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-03-16 22:36:30 -0700</bug_when>
    <thetext>Comment on attachment 226882
Patch

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

LGTM except for a wrong description.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_application_cache_manager.h:73
&gt; + * @return @c EINA_TRUE on successful request or @c EINA_FALSE on failure

This API returns *void*, not boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991099</commentid>
    <comment_count>23</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-03-16 22:46:52 -0700</bug_when>
    <thetext>Committed r165718: &lt;http://trac.webkit.org/changeset/165718&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175316</attachid>
            <date>2012-11-20 18:18:41 -0800</date>
            <delta_ts>2012-12-04 16:12:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102853-20121121111628.patch</filename>
            <type>text/plain</type>
            <size>28832</size>
            <attacher name="Jiyeon Kim">jiyeon0402.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjBhYTAxMjcyYWY3YWI1
YWJmMTVmMjU0ZDJlZGRjMzFhY2U5NzQ0Ny4uMmIyZTJkNzI5NGUxZjU4OWJmZDljYTZmMTExNzFl
NWNlNTYyMmFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTExLTIwICBKaXll
b24gS2ltICA8aml5ZW9uMDQwMi5raW1Ac2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0sy
XSBBZGQgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIgQVBJcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyODUzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyIHRvIG1hbmFnZSBvZmZsaW5lIGFwcGxpY2F0aW9uIGNhY2hlIGFuZAorICAgICAgICBl
d2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldCB0byBvcmlnaW5zIGxpc3Qg
b2YgYXBwbGljYXRpb24gY2FjaGUuCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBFd2tBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlciBBUElzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXI6OkV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyKToKKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpnZXRBcHBsaWNh
dGlvbkNhY2hlT3JpZ2lucyk6CisgICAgICAgIChFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6
Y3JlYXRlT3JpZ2luTGlzdCk6CisgICAgICAgIChFd2tfQXBwbGljYXRpb25fQ2FjaGVfT3JpZ2lu
c19Bc3luY19HZXRfQ29udGV4dCk6CisgICAgICAgIChFd2tfQXBwbGljYXRpb25fQ2FjaGVfT3Jp
Z2luc19Bc3luY19HZXRfQ29udGV4dDo6RXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5
bmNfR2V0X0NvbnRleHQpOgorICAgICAgICAoZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnNDYWxs
YmFjayk6CisgICAgICAgIChld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dl
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21h
bmFnZXIuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0
aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKEV3a0FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpj
cmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAg
ICAgICAgKEV3a0NvbnRleHQ6OkV3a0NvbnRleHQpOgorICAgICAgICAoRXdrQ29udGV4dDo6YXBw
bGljYXRpb25DYWNoZU1hbmFnZXIpOgorICAgICAgICAoZXdrX2NvbnRleHRfYXBwbGljYXRpb25f
Y2FjaGVfbWFuYWdlcl9nZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5o
OgorICAgICAgICAoRXdrQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuY3BwOgorICAgICAgICAoRVdLMlVu
aXRUZXN0U2VydmVyOjpnZXRQb3J0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oOgorICAgICAgICAoRVdLMlVuaXRU
ZXN0U2VydmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
YXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoT3JpZ2luRGF0
YSk6CisgICAgICAgIChPcmlnaW5EYXRhOjpPcmlnaW5EYXRhKToKKyAgICAgICAgKGdldEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgor
ICAgICAgICAodGltZXJDYWxsYmFjayk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcDoKKyAgICAgICAgKFRF
U1RfRik6CisKIDIwMTItMTEtMjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzUyOTUuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGJiODc0N2IxY2IxZjU4MzhjMmRkN2NjZGRmNzgyOTEx
ZWE2N2MxZTUuLjZkMjgyNmEyODE0M2M1NGY4MmZkNmQ4N2RiMDg0Y2NlODgwZTkzMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00NCw2ICs0NCw3IEBAIExJU1QoQVBQRU5EIFdlYktp
dDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL0V2YXNHTENvbnRleHQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
RXZhc0dMU3VyZmFjZS5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25f
Y2FjaGVfbWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXV0aF9yZXF1ZXN0
LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKICAg
ICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKQEAgLTM1
Nyw2ICszNTgsNyBAQCBUQVJHRVRfTElOS19MSUJSQVJJRVMoZXdrMlVuaXRUZXN0VXRpbHMgJHtF
V0syVW5pdFRlc3RzX0xJQlJBUklFU30pCiAjIFRoZSAiZXdrIiBvbiB0aGUgdGVzdCBuYW1lIG5l
ZWRzIHRvIGJlIHN1ZmZpeGVkIHdpdGggIjIiLCBvdGhlcndpc2UgaXQKICMgd2lsbCBjbGFzaCB3
aXRoIHRlc3RzIGZyb20gdGhlIFdlYktpdCAxIHRlc3Qgc3VpdGUuCiBTRVQoRVdLMlVuaXRUZXN0
c19CSU5BUklFUworICAgIHRlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyCiAgICAg
dGVzdF9ld2syX2F1dGhfcmVxdWVzdAogICAgIHRlc3RfZXdrMl9iYWNrX2ZvcndhcmRfbGlzdAog
ICAgIHRlc3RfZXdrMl9jb2xvcl9waWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oCmluZGV4IDA3Y2ExMjkzNTBmNGVkYjdlM2RiNGJmOTJhZDcwYjhjM2Ey
MDljZTQuLjY5YmQ5ZDgzN2I2NjdkOGYzZjJmZWJlYzQ2MGE5NzkxMGZlNmM1YTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtMjgsNiArMjgsNyBA
QAogI2lmbmRlZiBFV2ViS2l0Ml9oCiAjZGVmaW5lIEVXZWJLaXQyX2gKIAorI2luY2x1ZGUgImV3
a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmgiCiAjaW5jbHVkZSAiZXdrX2F1dGhfcmVxdWVz
dC5oIgogI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdC5oIgogI2luY2x1ZGUgImV3a19i
YWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDM4MTBjMTMzZTFiZjM0NDIxNGY5MjQxN2FkZDUyMTg3Njc0ZmUwNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19h
cHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJl
d2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0Lmgi
CisjaW5jbHVkZSAiV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oIgorI2luY2x1ZGUgIldLQXJy
YXkuaCIKKyNpbmNsdWRlICJXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmgiCisjaW5j
bHVkZSAiZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a19lcnJvcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbi5oIgor
I2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyOjpFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcihXZWJBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlclByb3h5KiBhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcikKKyAgICA6IG1fYXBwbGlj
YXRpb25DYWNoZU1hbmFnZXIoYXBwbGljYXRpb25DYWNoZU1hbmFnZXIpCit7IH0KKwordm9pZCBF
d2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6Z2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnMoV0tB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zRnVuY3Rpb24g
Y2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgV0tBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKHRvQVBJKG1fYXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIuZ2V0KCkpLCBjb250ZXh0LCBjYWxsYmFjayk7Cit9CisKK0VpbmFfTGlzdCogRXdr
QXBwbGljYXRpb25DYWNoZU1hbmFnZXI6OmNyZWF0ZU9yaWdpbkxpc3QoV0tBcnJheVJlZiBvcmln
aW5zKSBjb25zdAoreworICAgIEVpbmFfTGlzdCogb3JpZ2luTGlzdCA9IDA7CisgICAgY29uc3Qg
c2l6ZV90IGxlbmd0aCA9IFdLQXJyYXlHZXRTaXplKG9yaWdpbnMpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBXS1NlY3VyaXR5T3JpZ2luUmVm
IHdrT3JpZ2luUmVmID0gc3RhdGljX2Nhc3Q8V0tTZWN1cml0eU9yaWdpblJlZj4oV0tBcnJheUdl
dEl0ZW1BdEluZGV4KG9yaWdpbnMsIGkpKTsKKyAgICAgICAgUmVmUHRyPEV3a19TZWN1cml0eV9P
cmlnaW4+IG9yaWdpbiA9IG1fd3JhcHBlckNhY2hlLmdldCh3a09yaWdpblJlZik7CisgICAgICAg
IGlmICghb3JpZ2luKSB7CisgICAgICAgICAgICBvcmlnaW4gPSBFd2tTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKHdrT3JpZ2luUmVmKTsKKyAgICAgICAgICAgIG1fd3JhcHBlckNhY2hlLnNldCh3a09y
aWdpblJlZiwgb3JpZ2luKTsKKyAgICAgICAgfQorICAgICAgICBvcmlnaW5MaXN0ID0gZWluYV9s
aXN0X2FwcGVuZChvcmlnaW5MaXN0LCBvcmlnaW4ucmVsZWFzZSgpLmxlYWtSZWYoKSk7CisgICAg
fQorCisgICAgcmV0dXJuIG9yaWdpbkxpc3Q7Cit9CisKK3N0cnVjdCBFd2tfQXBwbGljYXRpb25f
Q2FjaGVfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCB7CisgICAgY29uc3QgRXdrX0FwcGxpY2F0
aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXI7CisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09y
aWdpbnNfR2V0X0NiIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJEYXRhOworCisgICAgRXdrX0Fw
cGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQoY29uc3QgRXdrX0FwcGxp
Y2F0aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXIsIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9Pcmln
aW5zX0dldF9DYiBjYWxsYmFjaywgdm9pZCogdXNlckRhdGEpCisgICAgICAgIDogbWFuYWdlciht
YW5hZ2VyKQorICAgICAgICAsIGNhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICAsIHVzZXJEYXRh
KHVzZXJEYXRhKQorICAgIHsgfQorfTsKKworc3RhdGljIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNo
ZU9yaWdpbnNDYWxsYmFjayhXS0FycmF5UmVmIG9yaWdpbnMsIFdLRXJyb3JSZWYgd2tFcnJvciwg
dm9pZCogY29udGV4dCkKK3sKKyAgICBPd25QdHI8RXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdp
bnNfQXN5bmNfR2V0X0NvbnRleHQqPiB3ZWJBcHBsaWNhdGlvbkNhY2hlQ29udGV4dCA9IGFkb3B0
UHRyKHN0YXRpY19jYXN0PEV3a19BcHBsaWNhdGlvbl9DYWNoZV9PcmlnaW5zX0FzeW5jX0dldF9D
b250ZXh0Kj4oY29udGV4dCkpOworICAgIEVpbmFfTGlzdCogb3JpZ2luTGlzdCA9IHdlYkFwcGxp
Y2F0aW9uQ2FjaGVDb250ZXh0LT5tYW5hZ2VyLT5jcmVhdGVPcmlnaW5MaXN0KG9yaWdpbnMpOwor
ICAgIE93blB0cjxFd2tfRXJyb3I+IGV3a0Vycm9yID0gRXdrX0Vycm9yOjpjcmVhdGUod2tFcnJv
cik7CisgICAgd2ViQXBwbGljYXRpb25DYWNoZUNvbnRleHQtPmNhbGxiYWNrKG9yaWdpbkxpc3Qs
IGV3a0Vycm9yLmdldCgpLCB3ZWJBcHBsaWNhdGlvbkNhY2hlQ29udGV4dC0+dXNlckRhdGEpOwor
fQorCitFaW5hX0Jvb2wgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfb3JpZ2luc19nZXQo
Y29uc3QgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIGV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyLCBFd2tfQXBwbGljYXRpb25fQ2FjaGVfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ssIHZv
aWQqIHVzZXJEYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlciwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChjYWxsYmFjaywgZmFsc2UpOworCisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hl
X09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQqIGNvbnRleHQgPSBuZXcgRXdrX0FwcGxpY2F0aW9u
X0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQoZXdrQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIsIGNhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgZXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIt
PmdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKGdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zQ2Fs
bGJhY2ssIGNvbnRleHQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdl
ci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2Nh
Y2hlX21hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZGFmN2Y0ZjI0Y2I1ZmIxZjRiNDJiYmZlM2NmNGI3
Y2RiMjMwZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaApAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgICBld2tfYXBw
bGljYXRpb25fY2FjaGVfbWFuYWdlci5oCisgKiBAYnJpZWYgIERlc2NyaWJlcyB0aGUgRXdrIEFw
cGxpY2F0aW9uIENhY2hlIE1hbmFnZXIgQVBJLgorICoKKyAqIEV3ayBBcHBsaWNhdGlvbiBDYWNo
ZSBNYW5hZ2VyIG1hbmFnZXMgd2ViIGFwcGxpY2F0aW9uIGNhY2hlLgorICovCisKKyNpZm5kZWYg
ZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfaAorI2RlZmluZSBld2tfYXBwbGljYXRpb25f
Y2FjaGVfbWFuYWdlcl9oCisKKyNpbmNsdWRlICJld2tfZXJyb3IuaCIKKyNpbmNsdWRlIDxFaW5h
Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENy
ZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyLiAqLwor
dHlwZWRlZiBzdHJ1Y3QgRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIgRXdrX0FwcGxpY2F0aW9u
X0NhY2hlX01hbmFnZXI7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX0FwcGxpY2F0aW9uX0NhY2hl
X09yaWdpbnNfR2V0X0NiIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9PcmlnaW5zX0dldF9DYgorICog
QGJyaWVmIENhbGxiYWNrIHR5cGUgZm9yIHVzZSB3aXRoIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9t
YW5hZ2VyX29yaWdpbnNfZ2V0KCkKKyAqCisgKiBAcGFyYW0gb3JpZ2lucyBAYyBFaW5hX0xpc3Qg
Y29udGFpbmluZyBAYyBFd2tfU2VjdXJpdHlfT3JpZ2luIGVsZW1lbnRzIG9yIEBjIE5VTEwgaW4g
Y2FzZSBvZiBlcnJvciwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEVpbmFfTGlzdCBh
bmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciB1c2UuIFVzZSBld2tfc2VjdXJpdHlf
b3JpZ2luX3VucmVmKCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdG8gZnJlZSB0aGUgaXRl
bXMKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfR2V0
X0NiKShFaW5hX0xpc3QgKm9yaWdpbnMsIEV3a19FcnJvciAqZXJyb3IsIHZvaWQgKnVzZXJfZGF0
YSk7CisKKy8qKgorICogR2V0cyBsaXN0IG9mIG9yaWdpbnMgdXNpbmcgYXBwbGljYXRpb24gY2Fj
aGUgYXN5bmNocm9ub3VzbHkuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5
IGZvciBjb250ZXh0IHN0cnVjdHVyZSBtYWRlIGZyb20gY2FsbGJhY2sgYW5kIHVzZXJfZGF0YS4K
KyAqCisgKiBAcGFyYW0gbWFuYWdlciBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciBvYmpl
Y3QKKyAqIEBwYXJhbSBjYWxsYmFjayBjYWxsYmFjayB0byBnZXQgYXBwbGljYXRpb24gY2FjaGUg
b3JpZ2lucworICogQHBhcmFtIHVzZXJfZGF0YSB1c2VyX2RhdGEgd2lsbCBiZSBwYXNzZWQgd2hl
biByZXN1bHRfY2FsbGJhY2sgaXMgY2FsbGVkLAorICogICAgLWkuZS4sIHVzZXIgZGF0YSB3aWxs
IGJlIGtlcHQgdW50aWwgY2FsbGJhY2sgaXMgY2FsbGVkCisgKgorICogQHJldHVybiBAYyBFSU5B
X1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCisgKi8KK0VBUEkgRWlu
YV9Cb29sIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KGNvbnN0IEV3
a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyICptYW5hZ2VyLCBFd2tfQXBwbGljYXRpb25fQ2Fj
aGVfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ssIHZvaWQgKnVzZXJfZGF0YSk7CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21h
bmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjgyM2NhOGRhZTllZjI1OGRmZjE2ZDA1YzVkYWNhZTgzYjY2YTQxMDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICog
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9t
YW5hZ2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9w
cml2YXRlX2gKKworI2luY2x1ZGUgIldLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCIKKyNpbmNs
dWRlICJXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmgiCisjaW5jbHVkZSAiV2ViQ29u
dGV4dC5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4uaCIKKyNpbmNsdWRlIDxXZWJL
aXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CisKK2NsYXNzIEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcj4gY3Jl
YXRlKFBhc3NSZWZQdHI8V2ViQ29udGV4dD4gY29udGV4dCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFd2tfQXBwbGljYXRpb25f
Q2FjaGVfTWFuYWdlcihjb250ZXh0LT5hcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5KCkpKTsK
KyAgICB9CisKKyAgICBFaW5hX0xpc3QqIGNyZWF0ZU9yaWdpbkxpc3QoV0tBcnJheVJlZiB3a0xp
c3QpIGNvbnN0OworICAgIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnMoV0tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zRnVuY3Rpb24gY2FsbGJh
Y2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEV3a0Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkqKTsK
KworICAgIFJlZlB0cjxXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5PiBtX2FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyOworICAgIG11dGFibGUgSGFzaE1hcDxXS1NlY3VyaXR5T3JpZ2luUmVm
LCBSZWZQdHI8RXdrX1NlY3VyaXR5X09yaWdpbj4gPiBtX3dyYXBwZXJDYWNoZTsKK307CisjZW5k
aWYgLy8gZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggMTM1MzQ5
ODhhMGM1ZWY1NTkxMWM5OWVkODY1NjdkMjEwZDc0ODQyYy4uOWQ1ODcyYzg0YmIzOGM1OTNlYmU3
YzRlODVhOWEwMzE5YWNiYjExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIldlYkNv
bnRleHQuaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJTb3Vw
UmVxdWVzdE1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgImV3a19hcHBsaWNhdGlvbl9jYWNoZV9t
YW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5j
bHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfZGF0YWJh
c2VfbWFuYWdlcl9wcml2YXRlLmgiCkBAIC02Myw2ICs2NCw3IEBAIHN0YXRpYyBpbmxpbmUgQ29u
dGV4dE1hcCYgY29udGV4dE1hcCgpCiAKIEV3a0NvbnRleHQ6OkV3a0NvbnRleHQoUGFzc1JlZlB0
cjxXZWJDb250ZXh0PiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBt
X2FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyOjpj
cmVhdGUobV9jb250ZXh0KSkKICAgICAsIG1fZGF0YWJhc2VNYW5hZ2VyKEV3a19EYXRhYmFzZV9N
YW5hZ2VyOjpjcmVhdGUobV9jb250ZXh0KSkKICAgICAsIG1fc3RvcmFnZU1hbmFnZXIoRXdrX1N0
b3JhZ2VfTWFuYWdlcjo6Y3JlYXRlKG1fY29udGV4dCkpCiAjaWYgRU5BQkxFKEJBVFRFUllfU1RB
VFVTKQpAQCAtMTMxLDYgKzEzMywxMSBAQCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IEV3a0NvbnRl
eHQ6OmRlZmF1bHRDb250ZXh0KCkKICAgICByZXR1cm4gZGVmYXVsdEluc3RhbmNlOwogfQogCitF
d2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciogRXdrQ29udGV4dDo6YXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIoKQoreworICAgIHJldHVybiBtX2FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmdldCgp
OworfQorCiBFd2tfQ29va2llX01hbmFnZXIqIEV3a0NvbnRleHQ6OmNvb2tpZU1hbmFnZXIoKQog
ewogICAgIGlmICghbV9jb29raWVNYW5hZ2VyKQpAQCAtMjA4LDYgKzIxNSwxMyBAQCB2b2lkIEV3
a0NvbnRleHQ6OnNldEFkZGl0aW9uYWxQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIH0K
ICNlbmRpZgogCitFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciogZXdrX2NvbnRleHRfYXBw
bGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQp
Cit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrQ29udGV4dCwgZXdr
Q29udGV4dCwgaW1wbCwgMCk7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxFd2tDb250ZXh0Kj4o
aW1wbCktPmFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKCk7Cit9CisKIEV3a19Db29raWVfTWFuYWdl
ciogZXdrX2NvbnRleHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tD
b250ZXh0KQogewogICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a0NvbnRl
eHQsIGV3a0NvbnRleHQsIGltcGwsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0LmgKaW5kZXggYmZiN2ZkMjYzYmMyOTI4NDg0YzZmZTVkZDA4YmUx
ZDgzODU5NTJlNS4uMzBhZTI0YmExZDFiNGFhMzdiOTZlZTJhN2UxYmE0Zjk5MDMwNjM0MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCkBAIC0z
Nyw2ICszNyw3IEBACiAjaWZuZGVmIGV3a19jb250ZXh0X2gKICNkZWZpbmUgZXdrX2NvbnRleHRf
aAogCisjaW5jbHVkZSAiZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaCIKICNpbmNsdWRl
ICJld2tfY29va2llX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfZGF0YWJhc2VfbWFuYWdlci5o
IgogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlLmgiCkBAIC0xNDgsNiArMTQ5LDE1IEBA
IEVBUEkgRXdrX0NvbnRleHQgKmV3a19jb250ZXh0X25ldyh2b2lkKTsKIEVBUEkgRXdrX0NvbnRl
eHQgKmV3a19jb250ZXh0X25ld193aXRoX2luamVjdGVkX2J1bmRsZV9wYXRoKGNvbnN0IGNoYXIg
KnBhdGgpOwogCiAvKioKKyAqIEdldHMgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIG1hbmFnZXIgaW5z
dGFuY2UgZm9yIHRoaXMgQGEgY29udGV4dC4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0
IG9iamVjdCB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9N
YW5hZ2VyIG9iamVjdCBpbnN0YW5jZSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAq
LworRUFQSSBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciAqZXdrX2NvbnRleHRfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQgKmNvbnRleHQpOworCisv
KioKICAqIEdldHMgdGhlIGNvb2tpZSBtYW5hZ2VyIGluc3RhbmNlIGZvciB0aGlzIEBhIGNvbnRl
eHQuCiAgKgogICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QgdG8gcXVlcnkuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2
YXRlLmgKaW5kZXggY2I1MmE5MmIwNDI4YmI5ODJiYjcwMmUxMGU3N2Q2NjVkNDMyZDU4OC4uZmQx
YTY1NzMwNDAwYzg5NTcxNDAzMDllODQxMmE2MDEzNzhkYTIxZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaApAQCAt
NTUsNiArNTUsOCBAQCBwdWJsaWM6CiAKICAgICB+RXdrQ29udGV4dCgpOwogCisgICAgRXdrX0Fw
cGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKCk7CisKICAg
ICBFd2tfQ29va2llX01hbmFnZXIqIGNvb2tpZU1hbmFnZXIoKTsKIAogICAgIEV3a19EYXRhYmFz
ZV9NYW5hZ2VyKiBkYXRhYmFzZU1hbmFnZXIoKTsKQEAgLTg5LDYgKzkxLDcgQEAgcHJpdmF0ZToK
IAogICAgIFJlZlB0cjxXZWJDb250ZXh0PiBtX2NvbnRleHQ7CiAKKyAgICBPd25QdHI8RXdrX0Fw
cGxpY2F0aW9uX0NhY2hlX01hbmFnZXI+IG1fYXBwbGljYXRpb25DYWNoZU1hbmFnZXI7CiAgICAg
T3duUHRyPEV3a19Db29raWVfTWFuYWdlcj4gbV9jb29raWVNYW5hZ2VyOwogICAgIE93blB0cjxF
d2tfRGF0YWJhc2VfTWFuYWdlcj4gbV9kYXRhYmFzZU1hbmFnZXI7CiAgICAgT3duUHRyPEV3a19G
YXZpY29uX0RhdGFiYXNlPiBtX2Zhdmljb25EYXRhYmFzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0
U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRU
ZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmNwcAppbmRleCA0ZWY0Y2Y3NmY3NzQxZTczNTQ0
ZDI3MTg4M2UxOGQxMzViMTdlMjlkLi40YTBiNTEzZDkwZjRlZDU3MGVlNTA4YmRhM2EwNDJkOTkz
NTc5NmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2
ZXIuY3BwCkBAIC01NCwzICs1NCw4IEBAIENTdHJpbmcgRVdLMlVuaXRUZXN0U2VydmVyOjpnZXRV
UkxGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpIGNvbnN0CiAKICAgICByZXR1cm4gdXJsU3RyaW5n
OwogfQorCit1bnNpZ25lZCBFV0syVW5pdFRlc3RTZXJ2ZXI6OmdldFBvcnQoKSBjb25zdAorewor
ICAgIHJldHVybiBzb3VwX3NlcnZlcl9nZXRfcG9ydChtX3NvdXBTZXJ2ZXIpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGls
cy9FV0syVW5pdFRlc3RTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmgKaW5kZXggYjk2N2NlNDA5
YmFkOWE0MTRkMDE0YmE3NzgzMGJjN2YyMDZkZmU3OC4uNTI5ZTk0N2Y0ZDZiMDA3MjMwMTg2YjE1
MzYxNjg2OTk5MDZlYmVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0
VGVzdFNlcnZlci5oCkBAIC0zMSw2ICszMSw3IEBAIHB1YmxpYzoKIAogICAgIENTdHJpbmcgZ2V0
VVJMRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKSBjb25zdDsKICAgICB2b2lkIHJ1bihTb3VwU2Vy
dmVyQ2FsbGJhY2spOworICAgIHVuc2lnbmVkIGdldFBvcnQoKSBjb25zdDsKIAogcHJpdmF0ZToK
ICAgICBTb3VwU2VydmVyKiBtX3NvdXBTZXJ2ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYXBwbGljYXRpb25fY2FjaGVfbWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTA1YzY0YzBmNTk4
Mjc0MTJmZTE5YTIzYjhhNjYzMGE2MjE5MjA0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNo
ZV9tYW5hZ2VyLmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgIlVu
aXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJVbml0VGVz
dFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmln
aW5fcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRU
ZXN0OworCitleHRlcm4gRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQqIGVudmlyb25tZW50OworCitz
dHJ1Y3QgT3JpZ2luRGF0YSB7CisgICAgRWluYV9MaXN0KiBvcmlnaW5MaXN0OworICAgIEV3a19B
cHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyKiBtYW5hZ2VyOworICAgIGJvb2wgZGlkUmVjZWl2ZU9y
aWdpbnNDYWxsYmFjazsKKyAgICBib29sIGlzU3luY2hyb25pemVkOworICAgIHVuc2lnbmVkIHRp
bWVvdXRTZWNvbmRzOworICAgIGNvbnN0IGNoYXIqIGV4cGVjdGVkUHJvdG9jb2w7CisgICAgY29u
c3QgY2hhciogZXhwZWN0ZWRIb3N0OworICAgIGNvbnN0IHVuc2lnbmVkIGV4cGVjdGVkUG9ydDsK
KworICAgIE9yaWdpbkRhdGEoRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXIs
IGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBjb25zdCB1bnNpZ25lZCBw
b3J0KQorICAgICAgICA6IG9yaWdpbkxpc3QoMCkKKyAgICAgICAgLCBtYW5hZ2VyKG1hbmFnZXIp
CisgICAgICAgICwgZGlkUmVjZWl2ZU9yaWdpbnNDYWxsYmFjayhmYWxzZSkKKyAgICAgICAgLCBp
c1N5bmNocm9uaXplZChmYWxzZSkKKyAgICAgICAgLCB0aW1lb3V0U2Vjb25kcygxMCkKKyAgICAg
ICAgLCBleHBlY3RlZFByb3RvY29sKHByb3RvY29sKQorICAgICAgICAsIGV4cGVjdGVkSG9zdCho
b3N0KQorICAgICAgICAsIGV4cGVjdGVkUG9ydChwb3J0KQorICAgIHsgfQorfTsKKworY29uc3Qg
Y2hhciogYXBwbGljYXRpb25DYWNoZUhUTUwgPQorICAgICI8aHRtbCBtYW5pZmVzdD0ndGVzdC5h
cHBjYWNoZSc+IgorICAgICI8aGVhZD4iCisgICAgIjx0aXRsZT5hcHBsaWNhdGlvbiBjYWNoZSB0
ZXN0PC90aXRsZT4iCisgICAgIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4iCisgICAg
InNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbG9jaycp
LnZhbHVlID0gbmV3IERhdGUoKTsgfSwgMTAwMCk7IgorICAgICI8L3NjcmlwdD4iCisgICAgIjxs
aW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nY2xvY2suY3NzJz4iCisgICAgIjwvaGVhZD4iCisg
ICAgIjxib2R5PiIKKyAgICAiPHA+IFRoZSB0aW1lIGlzOiA8b3V0cHV0IGlkPSdjbG9jayc+PC9v
dXRwdXQ+PC9wPiIKKyAgICAiPC9ib2R5PiIKKyAgICAiPC9odG1sPiI7Citjb25zdCBjaGFyKiBh
cHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QgPSAgICJDQUNIRSBNQU5JRkVTVFxuIgorICAgICJhcHBs
aWNhdGlvbl9jYWNoZS5odG1sXG4iCisgICAgImNsb2NrLmNzcyI7Citjb25zdCBjaGFyKiBhcHBs
aWNhdGlvbkNhY2hlQ1NTPSAgICJvdXRwdXQgeyBmb250OjJlbSBzYW5zLXNlcmlmOyB9IjsKKwor
CitzdGF0aWMgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0NhbGxiYWNrKEVpbmFfTGlz
dCogb3JpZ2lucywgRXdrX0Vycm9yKiBlcnJvciwgdm9pZCogdXNlckRhdGEpCit7CisgICAgQVNT
RVJUX0ZBTFNFKGVycm9yKTsKKworICAgIE9yaWdpbkRhdGEqIG9yaWdpbkRhdGEgPSBzdGF0aWNf
Y2FzdDxPcmlnaW5EYXRhKj4odXNlckRhdGEpOworICAgIG9yaWdpbkRhdGEtPmRpZFJlY2VpdmVP
cmlnaW5zQ2FsbGJhY2sgPSB0cnVlOworCisgICAgRWluYV9MaXN0KiBsOworICAgIHZvaWQqIGRh
dGE7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0gob3JpZ2lucywgbCwgZGF0YSkgeworICAgICAgICBv
cmlnaW5EYXRhLT5vcmlnaW5MaXN0ID0gZWluYV9saXN0X2FwcGVuZChvcmlnaW5EYXRhLT5vcmln
aW5MaXN0LCBkYXRhKTsKKyAgICAgICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luID0gc3Rh
dGljX2Nhc3Q8RXdrX1NlY3VyaXR5X09yaWdpbio+KGRhdGEpOworICAgICAgICBpZiAoIXN0cmNt
cChld2tfc2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldChvcmlnaW4pLCBvcmlnaW5EYXRhLT5l
eHBlY3RlZFByb3RvY29sKQorICAgICAgICAgICAgJiYgIXN0cmNtcChld2tfc2VjdXJpdHlfb3Jp
Z2luX2hvc3RfZ2V0KG9yaWdpbiksIG9yaWdpbkRhdGEtPmV4cGVjdGVkSG9zdCkKKyAgICAgICAg
ICAgICYmIGV3a19zZWN1cml0eV9vcmlnaW5fcG9ydF9nZXQob3JpZ2luKSA9PSBvcmlnaW5EYXRh
LT5leHBlY3RlZFBvcnQpIHsKKyAgICAgICAgICAgICAgICBvcmlnaW5EYXRhLT5pc1N5bmNocm9u
aXplZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3Qg
Y2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7
CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVO
VEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBFaW5hX1N0cmJ1ZiogYm9keSA9IGVp
bmFfc3RyYnVmX25ldygpOworCisgICAgaWYgKCFzdHJjbXAocGF0aCwgIi9hcHBsaWNhdGlvbl9j
YWNoZS5odG1sIikpIHsKKyAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50Zihib2R5LCBh
cHBsaWNhdGlvbkNhY2hlSFRNTCwgMCk7CisgICAgICAgIGNvbnN0IHNpemVfdCBib2R5TGVuZ3Ro
ID0gZWluYV9zdHJidWZfbGVuZ3RoX2dldChib2R5KTsKKyAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGVpbmFf
c3RyYnVmX3N0cmluZ19zdGVhbChib2R5KSwgYm9keUxlbmd0aCk7CisgICAgICAgIGVpbmFfc3Ry
YnVmX2ZyZWUoYm9keSk7CisgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwYXRoLCAiL3Rlc3Qu
YXBwY2FjaGUiKSkgeworICAgICAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50Zihib2R5
LCBhcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QsIDApOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90
IGJvZHlMZW5ndGggPSBlaW5hX3N0cmJ1Zl9sZW5ndGhfZ2V0KGJvZHkpOworICAgICAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1RBS0UsIGVpbmFfc3RyYnVmX3N0cmluZ19zdGVhbChib2R5KSwgYm9keUxlbmd0aCk7Cisg
ICAgICAgICAgICBlaW5hX3N0cmJ1Zl9mcmVlKGJvZHkpOworICAgICAgICB9IGVsc2UgaWYgKCFz
dHJjbXAocGF0aCwgIi9jbG9jay5jc3MiKSkgeworICAgICAgICAgICAgZWluYV9zdHJidWZfYXBw
ZW5kX3ByaW50Zihib2R5LCBhcHBsaWNhdGlvbkNhY2hlQ1NTLCAwKTsKKyAgICAgICAgICAgIGNv
bnN0IHNpemVfdCBib2R5TGVuZ3RoID0gZWluYV9zdHJidWZfbGVuZ3RoX2dldChib2R5KTsKKyAg
ICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9UQUtFLCBlaW5hX3N0cmJ1Zl9zdHJpbmdfc3RlYWwoYm9keSksIGJvZHlM
ZW5ndGgpOworICAgICAgICAgICAgZWluYV9zdHJidWZfZnJlZShib2R5KTsKKyAgICB9CisKKyAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30K
Kworc3RhdGljIGJvb2wgdGltZXJDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBPcmln
aW5EYXRhKiBvcmlnaW5EYXRhID0gc3RhdGljX2Nhc3Q8T3JpZ2luRGF0YSo+KHVzZXJEYXRhKTsK
KworICAgIGlmIChvcmlnaW5EYXRhLT5pc1N5bmNocm9uaXplZCB8fCAhLS0ob3JpZ2luRGF0YS0+
dGltZW91dFNlY29uZHMpKSB7CisgICAgICAgIGVjb3JlX21haW5fbG9vcF9xdWl0KCk7CisKKyAg
ICAgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKKyAgICB9CisKKyAgICBpZiAob3Jp
Z2luRGF0YS0+ZGlkUmVjZWl2ZU9yaWdpbnNDYWxsYmFjaykgeworICAgICAgICBvcmlnaW5EYXRh
LT5kaWRSZWNlaXZlT3JpZ2luc0NhbGxiYWNrID0gZmFsc2U7CisgICAgICAgIGV3a19hcHBsaWNh
dGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KG9yaWdpbkRhdGEtPm1hbmFnZXIsIGdldEFw
cGxpY2F0aW9uQ2FjaGVPcmlnaW5zQ2FsbGJhY2ssIG9yaWdpbkRhdGEpOworICAgIH0KKworICAg
IHJldHVybiBFQ09SRV9DQUxMQkFDS19SRU5FVzsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJh
c2UsIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KQoreworICAgIEV2
YXNfT2JqZWN0KiB2aWV3ID0gd2ViVmlldygpOworICAgIE93blB0cjxFV0syVW5pdFRlc3RTZXJ2
ZXI+IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRUZXN0U2VydmVyKTsKKyAgICBo
dHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgY29uc3QgY2hhciogYXBwbGlj
YXRpb25DYWNoZVRlc3RVcmwgPSBodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKCIvYXBwbGljYXRp
b25fY2FjaGUuaHRtbCIpLmRhdGEoKTsKKyAgICBld2tfdmlld191cmxfc2V0KHZpZXcsIGFwcGxp
Y2F0aW9uQ2FjaGVUZXN0VXJsKTsKKyAgICBBU1NFUlRfVFJVRSh3YWl0VW50aWxMb2FkRmluaXNo
ZWQoKSk7CisKKyAgICBPcmlnaW5EYXRhIG9yaWdpbkRhdGEoZXdrX2NvbnRleHRfYXBwbGljYXRp
b25fY2FjaGVfbWFuYWdlcl9nZXQoZXdrX3ZpZXdfY29udGV4dF9nZXQodmlldykpLCAiaHR0cCIs
ICIxMjcuMC4wLjEiLCBodHRwU2VydmVyLT5nZXRQb3J0KCkpOworICAgIEFTU0VSVF9UUlVFKGV3
a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KG9yaWdpbkRhdGEubWFuYWdl
ciwgZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnNDYWxsYmFjaywgJm9yaWdpbkRhdGEpKTsKKyAg
ICBFY29yZV9UaW1lciogYXBwbGljYXRpb25fY2FjaGVfdGltZXIgPSBlY29yZV90aW1lcl9hZGQo
MSwgcmVpbnRlcnByZXRfY2FzdDxFY29yZV9UYXNrX0NiPih0aW1lckNhbGxiYWNrKSwgJm9yaWdp
bkRhdGEpOworCisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisgICAgaWYgKGFwcGxpY2F0
aW9uX2NhY2hlX3RpbWVyKQorICAgICAgICBlY29yZV90aW1lcl9kZWwoYXBwbGljYXRpb25fY2Fj
aGVfdGltZXIpOworCisgICAgQVNTRVJUX1RSVUUob3JpZ2luRGF0YS5pc1N5bmNocm9uaXplZCk7
CisgICAgQVNTRVJUX0xFKDEsIGVpbmFfbGlzdF9jb3VudChvcmlnaW5EYXRhLm9yaWdpbkxpc3Qp
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L3Rlc3RfZXdrMl9jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcAppbmRleCA4NTY0YjBlODUyMjFiODEyOTJiMTcw
N2FlM2JhNzk4ZTRkMGJhY2RiLi5kNmQyMjQ0NzIzM2JlNTJmYTJiOTUyMzBmMzFmYjI4ODgxMTUz
YWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90
ZXN0X2V3azJfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwCkBAIC00NSw2ICs0NSwxNCBAQCBURVNUX0Yo
RVdLMlVuaXRUZXN0QmFzZSwgZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQpCiAgICAgQVNTRVJUX0VR
KGRlZmF1bHRDb250ZXh0LCBld2tfY29udGV4dF9kZWZhdWx0X2dldCgpKTsKIH0KIAorVEVTVF9G
KEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJf
Z2V0KQoreworICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQo
d2ViVmlldygpKTsKKyAgICBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciogYXBwbGljYXRp
b25DYWNoZU1hbmFnZXIgPSBld2tfY29udGV4dF9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2dl
dChjb250ZXh0KTsKKyAgICBBU1NFUlRfVFJVRShhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcik7Cisg
ICAgQVNTRVJUX0VRKGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLCBld2tfY29udGV4dF9hcHBsaWNh
dGlvbl9jYWNoZV9tYW5hZ2VyX2dldChjb250ZXh0KSk7Cit9CisKIFRFU1RfRihFV0syVW5pdFRl
c3RCYXNlLCBld2tfY29udGV4dF9jb29raWVfbWFuYWdlcl9nZXQpCiB7CiAgICAgRXdrX0NvbnRl
eHQqIGNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177596</attachid>
            <date>2012-12-04 16:12:22 -0800</date>
            <delta_ts>2012-12-04 18:11:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102853-20121205090950.patch</filename>
            <type>text/plain</type>
            <size>29374</size>
            <attacher name="Jiyeon Kim">jiyeon0402.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTNhN2RmNWViYTA0NzMx
ZjQ4ZTQ4MmRjYzcwMjY3MGUxZjY5YTQ5MS4uMTg2MzUwNzNmYjJmYWMxOGQ3OTEyYWQxZTU2ZTI5
MTI0MjQ2Y2ZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEyLTA0ICBKaXll
b24gS2ltICA8aml5ZW9uMDQwMi5raW1Ac2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0sy
XSBBZGQgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIgQVBJcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyODUzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyIHRvIG1hbmFnZSBvZmZsaW5lIGFwcGxpY2F0aW9uIGNhY2hlIGFuZAorICAgICAgICBl
d2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldCB0byBvcmlnaW5zIGxpc3Qg
b2YgYXBwbGljYXRpb24gY2FjaGUuCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBFd2tBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlciBBUElzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXI6OkV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyKToKKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpnZXRBcHBsaWNh
dGlvbkNhY2hlT3JpZ2lucyk6CisgICAgICAgIChFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6
Y3JlYXRlT3JpZ2luTGlzdCk6CisgICAgICAgIChnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0Nh
bGxiYWNrKToKKyAgICAgICAgKGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNf
Z2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVf
bWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrX0FwcGxp
Y2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQpOgorICAgICAgICAoRXdrX0Fw
cGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQ6OkV3a19BcHBsaWNhdGlv
bl9DYWNoZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KToKKyAgICAgICAgKEV3a0FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpj
cmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAg
ICAgICAgKEV3a0NvbnRleHQ6OkV3a0NvbnRleHQpOgorICAgICAgICAoZXdrX2NvbnRleHRfYXBw
bGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRf
cHJpdmF0ZS5oOgorICAgICAgICAoRXdrQ29udGV4dDo6YXBwbGljYXRpb25DYWNoZU1hbmFnZXIp
OgorICAgICAgICAoRXdrQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuY3BwOgorICAgICAgICAoRVdLMlVu
aXRUZXN0U2VydmVyOjpnZXRQb3J0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oOgorICAgICAgICAoRVdLMlVuaXRU
ZXN0U2VydmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
YXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoT3JpZ2luRGF0
YSk6CisgICAgICAgIChPcmlnaW5EYXRhOjpPcmlnaW5EYXRhKToKKyAgICAgICAgKGdldEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgor
ICAgICAgICAodGltZXJDYWxsYmFjayk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcDoKKyAgICAgICAgKFRF
U1RfRik6CisKIDIwMTItMTItMDMgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNv
bT4KIAogICAgICAgICBNYWtlIGl0IGVhc2llciB0byBhZGQgbW9yZSB3ZWIgcHJvY2VzcyBpbml0
aWFsaXphdGlvbiBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGRkZTdj
NWI0YWQ4ODNkZDAxMzBmN2QzNDIxMjM0MDgwZWFjZWZmZmQuLjgxNjE1NzM2MDhhNTQxYjMzZjNl
YWM3MjNjNDVjNjI1YjFiZTBlZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00NSw2
ICs0NSw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL0V2YXNHTENvbnRleHQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvRXZhc0dMU3VyZmFj
ZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9TbmFwc2hvdEltYWdlR0wuY3BwCisgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2F1dGhfcmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCkBAIC0yNTUsNiArMjU2LDcgQEAgU0VUKEZvcndhcmRp
bmdOZXR3b3JrSGVhZGVyc19OQU1FIGZvcndhcmRpbmctaGVhZGVyU291cCkKIENPTkZJR1VSRV9G
SUxFKGVmbC9ld2Via2l0Mi5wYy5pbiAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDIvZWZsL2V3
ZWJraXQyLnBjIEBPTkxZKQogU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIgorICAgICIke0NN
QUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9u
X2NhY2hlX21hbmFnZXIuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19hdXRoX3JlcXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5oIgogICAg
ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW0uaCIKQEAgLTM2NSw2ICszNjcsNyBAQCBUQVJHRVRfTElOS19MSUJS
QVJJRVMoZXdrMlVuaXRUZXN0VXRpbHMgJHtFV0syVW5pdFRlc3RzX0xJQlJBUklFU30pCiAjIFRo
ZSAiZXdrIiBvbiB0aGUgdGVzdCBuYW1lIG5lZWRzIHRvIGJlIHN1ZmZpeGVkIHdpdGggIjIiLCBv
dGhlcndpc2UgaXQKICMgd2lsbCBjbGFzaCB3aXRoIHRlc3RzIGZyb20gdGhlIFdlYktpdCAxIHRl
c3Qgc3VpdGUuCiBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUworICAgIHRlc3RfZXdrMl9hcHBs
aWNhdGlvbl9jYWNoZV9tYW5hZ2VyCiAgICAgdGVzdF9ld2syX2F1dGhfcmVxdWVzdAogICAgIHRl
c3RfZXdrMl9iYWNrX2ZvcndhcmRfbGlzdAogICAgIHRlc3RfZXdrMl9jb2xvcl9waWNrZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IGIxMjIxMTA4
NDQzYzBlNDk2YWNjOGMyZWM1M2ZjY2U3ODkzZjUxZjQuLjMwMjEzNDY3MDdkMjgyNjFmN2ZiMGY2
YWUwMDkwMmQ2ZGIwNGU4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RVdlYktpdDIuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmbmRlZiBFV2ViS2l0Ml9oCiAjZGVmaW5l
IEVXZWJLaXQyX2gKIAorI2luY2x1ZGUgImV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiZXdrX2F1dGhfcmVxdWVzdC5oIgogI2luY2x1ZGUgImV3a19iYWNrX2Zvcndh
cmRfbGlzdC5oIgogI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25f
Y2FjaGVfbWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
YXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU0YmQ1MTdkZDY5Nzlj
NDdhODg3ZGUwZjU5NmJkZjA3NTYzMzQ2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcApA
QCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5o
IgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlci5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXZWJBcHBsaWNhdGlv
bkNhY2hlTWFuYWdlclByb3h5LmgiCisjaW5jbHVkZSAiZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21h
bmFnZXJfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19lcnJvcl9wcml2YXRlLmgiCisjaW5jbHVk
ZSAiZXdrX29iamVjdC5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4uaCIKKyNpbmNs
dWRlICJld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitFd2tBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlcjo6RXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV2ViQXBwbGljYXRpb25DYWNoZU1h
bmFnZXJQcm94eSogYXBwbGljYXRpb25DYWNoZU1hbmFnZXIpCisgICAgOiBtX2FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyKGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKQoreyB9CisKK3ZvaWQgRXdrQXBw
bGljYXRpb25DYWNoZU1hbmFnZXI6OmdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKFdLQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXJHZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0Z1bmN0aW9uIGNhbGxi
YWNrLCB2b2lkKiBjb250ZXh0KSBjb25zdAoreworICAgIG1fYXBwbGljYXRpb25DYWNoZU1hbmFn
ZXItPmdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShjb250
ZXh0LCBjYWxsYmFjaykpOworfQorCitFaW5hX0xpc3QqIEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyOjpjcmVhdGVPcmlnaW5MaXN0KFdLQXJyYXlSZWYgb3JpZ2lucykgY29uc3QKK3sKKyAgICBF
aW5hX0xpc3QqIG9yaWdpbkxpc3QgPSAwOworICAgIGNvbnN0IHNpemVfdCBsZW5ndGggPSBXS0Fy
cmF5R2V0U2l6ZShvcmlnaW5zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgV0tTZWN1cml0eU9yaWdpblJlZiB3a09yaWdpblJlZiA9IHN0YXRp
Y19jYXN0PFdLU2VjdXJpdHlPcmlnaW5SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChvcmlnaW5z
LCBpKSk7CisgICAgICAgIFJlZlB0cjxFd2tfU2VjdXJpdHlfT3JpZ2luPiBvcmlnaW4gPSBtX3dy
YXBwZXJDYWNoZS5nZXQod2tPcmlnaW5SZWYpOworICAgICAgICBpZiAoIW9yaWdpbikgeworICAg
ICAgICAgICAgb3JpZ2luID0gRXdrU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh3a09yaWdpblJlZik7
CisgICAgICAgICAgICBtX3dyYXBwZXJDYWNoZS5zZXQod2tPcmlnaW5SZWYsIG9yaWdpbik7Cisg
ICAgICAgIH0KKyAgICAgICAgb3JpZ2luTGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQob3JpZ2luTGlz
dCwgZXdrX29iamVjdF9yZWYob3JpZ2luLmdldCgpKSk7CisgICAgfQorCisgICAgcmV0dXJuIG9y
aWdpbkxpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zQ2Fs
bGJhY2soV0tBcnJheVJlZiBvcmlnaW5zLCBXS0Vycm9yUmVmIHdrRXJyb3IsIHZvaWQqIGNvbnRl
eHQpCit7CisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRl
eHQqIHdlYkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0ID0gc3RhdGljX2Nhc3Q8RXdrX0FwcGxpY2F0
aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQqPihjb250ZXh0KTsKKyAgICBFaW5h
X0xpc3QqIG9yaWdpbkxpc3QgPSB3ZWJBcHBsaWNhdGlvbkNhY2hlQ29udGV4dC0+bWFuYWdlci0+
Y3JlYXRlT3JpZ2luTGlzdChvcmlnaW5zKTsKKyAgICBPd25QdHI8RXdrRXJyb3I+IGV3a0Vycm9y
ID0gRXdrRXJyb3I6OmNyZWF0ZSh3a0Vycm9yKTsKKyAgICB3ZWJBcHBsaWNhdGlvbkNhY2hlQ29u
dGV4dC0+Y2FsbGJhY2sob3JpZ2luTGlzdCwgZXdrRXJyb3IuZ2V0KCksIHdlYkFwcGxpY2F0aW9u
Q2FjaGVDb250ZXh0LT51c2VyRGF0YSk7CisKKyAgICB2b2lkKiBpdGVtOworICAgIEVJTkFfTElT
VF9GUkVFKG9yaWdpbkxpc3QsIGl0ZW0pCisgICAgICAgIGV3a19vYmplY3RfdW5yZWYoc3RhdGlj
X2Nhc3Q8RXdrX1NlY3VyaXR5X09yaWdpbio+KGl0ZW0pKTsKKworICAgIGRlbGV0ZSB3ZWJBcHBs
aWNhdGlvbkNhY2hlQ29udGV4dDsKK30KKworRWluYV9Cb29sIGV3a19hcHBsaWNhdGlvbl9jYWNo
ZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KGNvbnN0IEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2Vy
KiBld2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdp
bnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIsIGZhbHNlKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FsbGJhY2ssIGZhbHNlKTsKKworICAg
IEV3a19BcHBsaWNhdGlvbl9DYWNoZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KiBjb250ZXh0
ID0gbmV3IEV3a19BcHBsaWNhdGlvbl9DYWNoZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KGV3
a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLCBjYWxsYmFjaywgdXNlckRhdGEpOworICAgIGV3a0Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLT5nZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyhnZXRBcHBs
aWNhdGlvbkNhY2hlT3JpZ2luc0NhbGxiYWNrLCBjb250ZXh0KTsKKworICAgIHJldHVybiB0cnVl
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Fw
cGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBiNWYyYTJh
NDcwNmJiY2NhNTc0MWMxMzEyNDFlN2MxZmQ5OTQxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2Vy
LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVs
ZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
KioKKyAqIEBmaWxlICAgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaAorICogQGJyaWVm
ICBEZXNjcmliZXMgdGhlIEV3ayBBcHBsaWNhdGlvbiBDYWNoZSBNYW5hZ2VyIEFQSS4KKyAqCisg
KiBFd2sgQXBwbGljYXRpb24gQ2FjaGUgTWFuYWdlciBtYW5hZ2VzIHdlYiBhcHBsaWNhdGlvbiBj
YWNoZS4KKyAqLworCisjaWZuZGVmIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2gKKyNk
ZWZpbmUgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfaAorCisjaW5jbHVkZSAiZXdrX2Vy
cm9yLmgiCisjaW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAi
QyIgeworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfQXBwbGljYXRp
b25fQ2FjaGVfTWFuYWdlci4gKi8KK3R5cGVkZWYgc3RydWN0IEV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyOworCisvKioKKyAqIEB0eXBlZGVm
IEV3a19BcHBsaWNhdGlvbl9DYWNoZV9PcmlnaW5zX0dldF9DYiBFd2tfQXBwbGljYXRpb25fQ2Fj
aGVfT3JpZ2luc19HZXRfQ2IKKyAqIEBicmllZiBDYWxsYmFjayB0eXBlIGZvciB1c2Ugd2l0aCBl
d2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldCgpCisgKgorICogQHBhcmFt
IG9yaWdpbnMgQGMgRWluYV9MaXN0IGNvbnRhaW5pbmcgQGMgRXdrX1NlY3VyaXR5X09yaWdpbiBl
bGVtZW50cyBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IsCisgKiAgICAgICAgICAgICAgICAg
ICAgICAgIHRoZSBFaW5hX0xpc3QgYW5kIGl0cyBpdGVtcyBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIg
dXNlLiBVc2UgZXdrX29iamVjdF91bnJlZigpCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRv
IGZyZWUgdGhlIGl0ZW1zCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19BcHBsaWNhdGlvbl9DYWNo
ZV9PcmlnaW5zX0dldF9DYikoRWluYV9MaXN0ICpvcmlnaW5zLCBFd2tfRXJyb3IgKmVycm9yLCB2
b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEdldHMgbGlzdCBvZiBvcmlnaW5zIHVzaW5nIGFw
cGxpY2F0aW9uIGNhY2hlIGFzeW5jaHJvbm91c2x5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxs
b2NhdGVzIG1lbW9yeSBmb3IgY29udGV4dCBzdHJ1Y3R1cmUgbWFkZSBmcm9tIGNhbGxiYWNrIGFu
ZCB1c2VyX2RhdGEuCisgKgorICogQHBhcmFtIG1hbmFnZXIgRXdrX0FwcGxpY2F0aW9uX0NhY2hl
X01hbmFnZXIgb2JqZWN0CisgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbGJhY2sgdG8gZ2V0IGFwcGxp
Y2F0aW9uIGNhY2hlIG9yaWdpbnMKKyAqIEBwYXJhbSB1c2VyX2RhdGEgdXNlcl9kYXRhIHdpbGwg
YmUgcGFzc2VkIHdoZW4gcmVzdWx0X2NhbGxiYWNrIGlzIGNhbGxlZCwKKyAqICAgIC1pLmUuLCB1
c2VyIGRhdGEgd2lsbCBiZSBrZXB0IHVudGlsIGNhbGxiYWNrIGlzIGNhbGxlZAorICoKKyAqIEBy
ZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZQor
ICovCitFQVBJIEVpbmFfQm9vbCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5z
X2dldChjb25zdCBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciAqbWFuYWdlciwgRXdrX0Fw
cGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkICp1c2VyX2RhdGEp
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a19hcHBsaWNh
dGlvbl9jYWNoZV9tYW5hZ2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX3ByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2Vy
X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTU2NzU3ZmQxZDIxZDc1ZGM0ZDI1NzNkZTcyZWFlMjcw
ZWJmNzk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlX2gKKyNkZWZpbmUgZXdrX2FwcGxpY2F0aW9uX2Nh
Y2hlX21hbmFnZXJfcHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXS0FwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyLmgiCisjaW5jbHVkZSAiV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5oIgorI2lu
Y2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luLmgiCisj
aW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdHJ1Y3QgRXdrX0FwcGxpY2F0aW9uX0NhY2hl
X09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQgeworICAgIGNvbnN0IEV3a19BcHBsaWNhdGlvbl9D
YWNoZV9NYW5hZ2VyKiBtYW5hZ2VyOworICAgIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9PcmlnaW5z
X0dldF9DYiBjYWxsYmFjazsKKyAgICB2b2lkKiB1c2VyRGF0YTsKKworICAgIEV3a19BcHBsaWNh
dGlvbl9DYWNoZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KGNvbnN0IEV3a19BcHBsaWNhdGlv
bl9DYWNoZV9NYW5hZ2VyKiBtYW5hZ2VyLCBFd2tfQXBwbGljYXRpb25fQ2FjaGVfT3JpZ2luc19H
ZXRfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQorICAgICAgICA6IG1hbmFnZXIobWFuYWdl
cikKKyAgICAgICAgLCBjYWxsYmFjayhjYWxsYmFjaykKKyAgICAgICAgLCB1c2VyRGF0YSh1c2Vy
RGF0YSkKKyAgICB7IH0KK307CisKK2NsYXNzIEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdl
cj4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViQ29udGV4dD4gY29udGV4dCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFd2tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlcihjb250ZXh0LT5hcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5KCkp
KTsKKyAgICB9CisKKyAgICBFaW5hX0xpc3QqIGNyZWF0ZU9yaWdpbkxpc3QoV0tBcnJheVJlZiB3
a0xpc3QpIGNvbnN0OworICAgIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnMoV0tBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zRnVuY3Rpb24gY2Fs
bGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEV3
a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkq
KTsKKworICAgIFJlZlB0cjxXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5PiBtX2FwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyOworICAgIG11dGFibGUgSGFzaE1hcDxXS1NlY3VyaXR5T3JpZ2lu
UmVmLCBSZWZQdHI8RXdrX1NlY3VyaXR5X09yaWdpbj4gPiBtX3dyYXBwZXJDYWNoZTsKK307Cisj
ZW5kaWYgLy8gZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggMTM1
MzQ5ODhhMGM1ZWY1NTkxMWM5OWVkODY1NjdkMjEwZDc0ODQyYy4uZTVlMGZmZGNiMzAxMjExZmVi
ZTk5NjliMjIwZDMxNzJlNzFkNmI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIldl
YkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJT
b3VwUmVxdWVzdE1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgImV3a19hcHBsaWNhdGlvbl9jYWNo
ZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfZGF0
YWJhc2VfbWFuYWdlcl9wcml2YXRlLmgiCkBAIC02Myw2ICs2NCw3IEBAIHN0YXRpYyBpbmxpbmUg
Q29udGV4dE1hcCYgY29udGV4dE1hcCgpCiAKIEV3a0NvbnRleHQ6OkV3a0NvbnRleHQoUGFzc1Jl
ZlB0cjxXZWJDb250ZXh0PiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAg
LCBtX2FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2Vy
OjpjcmVhdGUobV9jb250ZXh0KSkKICAgICAsIG1fZGF0YWJhc2VNYW5hZ2VyKEV3a19EYXRhYmFz
ZV9NYW5hZ2VyOjpjcmVhdGUobV9jb250ZXh0KSkKICAgICAsIG1fc3RvcmFnZU1hbmFnZXIoRXdr
X1N0b3JhZ2VfTWFuYWdlcjo6Y3JlYXRlKG1fY29udGV4dCkpCiAjaWYgRU5BQkxFKEJBVFRFUllf
U1RBVFVTKQpAQCAtMjA4LDYgKzIxMCwxMyBAQCB2b2lkIEV3a0NvbnRleHQ6OnNldEFkZGl0aW9u
YWxQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIH0KICNlbmRpZgogCitFd2tfQXBwbGlj
YXRpb25fQ2FjaGVfTWFuYWdlciogZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdl
cl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCit7CisgICAgRVdLX09CSl9HRVRf
SU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrQ29udGV4dCwgZXdrQ29udGV4dCwgaW1wbCwgMCk7CisK
KyAgICByZXR1cm4gY29uc3RfY2FzdDxFd2tDb250ZXh0Kj4oaW1wbCktPmFwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyKCk7Cit9CisKIEV3a19Db29raWVfTWFuYWdlciogZXdrX2NvbnRleHRfY29va2ll
X21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQogewogICAgIEVXS19P
QkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a0NvbnRleHQsIGV3a0NvbnRleHQsIGltcGws
IDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgK
aW5kZXggNWRlYjVjNGYwZDBhYjViYzgzZTQ3OTM4NTIzNmNhMGY1NTM0NTkyOS4uNDk3MTIwMTAz
OTY4ODRlZTRhY2JlNGZiNzEwNTVlYzFiNzQ5NThjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCkBAIC0zNyw2ICszNyw3IEBACiAjaWZuZGVm
IGV3a19jb250ZXh0X2gKICNkZWZpbmUgZXdrX2NvbnRleHRfaAogCisjaW5jbHVkZSAiZXdrX2Fw
cGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXIu
aCIKICNpbmNsdWRlICJld2tfZGF0YWJhc2VfbWFuYWdlci5oIgogI2luY2x1ZGUgImV3a19mYXZp
Y29uX2RhdGFiYXNlLmgiCkBAIC0xNDgsNiArMTQ5LDE1IEBAIEVBUEkgRXdrX0NvbnRleHQgKmV3
a19jb250ZXh0X25ldyh2b2lkKTsKIEVBUEkgRXdrX0NvbnRleHQgKmV3a19jb250ZXh0X25ld193
aXRoX2luamVjdGVkX2J1bmRsZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOwogCiAvKioKKyAqIEdl
dHMgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIG1hbmFnZXIgaW5zdGFuY2UgZm9yIHRoaXMgQGEgY29u
dGV4dC4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0byBxdWVyeS4KKyAq
CisgKiBAcmV0dXJuIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyIG9iamVjdCBpbnN0YW5j
ZSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqLworRUFQSSBFd2tfQXBwbGljYXRp
b25fQ2FjaGVfTWFuYWdlciAqZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9n
ZXQoY29uc3QgRXdrX0NvbnRleHQgKmNvbnRleHQpOworCisvKioKICAqIEdldHMgdGhlIGNvb2tp
ZSBtYW5hZ2VyIGluc3RhbmNlIGZvciB0aGlzIEBhIGNvbnRleHQuCiAgKgogICogQHBhcmFtIGNv
bnRleHQgY29udGV4dCBvYmplY3QgdG8gcXVlcnkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKaW5kZXggY2I1MmE5MmIw
NDI4YmI5ODJiYjcwMmUxMGU3N2Q2NjVkNDMyZDU4OC4uMGE2MTFjNjllOGNiODk3OGUwZjBkYWJh
YjE0OWI0MjY1NWExMDc2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaApAQCAtNTUsNiArNTUsOCBAQCBwdWJsaWM6
CiAKICAgICB+RXdrQ29udGV4dCgpOwogCisgICAgaW5saW5lIEV3a19BcHBsaWNhdGlvbl9DYWNo
ZV9NYW5hZ2VyKiBhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fYXBw
bGljYXRpb25DYWNoZU1hbmFnZXIuZ2V0KCk7IH0KKwogICAgIEV3a19Db29raWVfTWFuYWdlciog
Y29va2llTWFuYWdlcigpOwogCiAgICAgRXdrX0RhdGFiYXNlX01hbmFnZXIqIGRhdGFiYXNlTWFu
YWdlcigpOwpAQCAtODksNiArOTEsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFdlYkNvbnRl
eHQ+IG1fY29udGV4dDsKIAorICAgIE93blB0cjxFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdl
cj4gbV9hcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjsKICAgICBPd25QdHI8RXdrX0Nvb2tpZV9NYW5h
Z2VyPiBtX2Nvb2tpZU1hbmFnZXI7CiAgICAgT3duUHRyPEV3a19EYXRhYmFzZV9NYW5hZ2VyPiBt
X2RhdGFiYXNlTWFuYWdlcjsKICAgICBPd25QdHI8RXdrX0Zhdmljb25fRGF0YWJhc2U+IG1fZmF2
aWNvbkRhdGFiYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RT
ZXJ2ZXIuY3BwCmluZGV4IDRlZjRjZjc2Zjc3NDFlNzM1NDRkMjcxODgzZTE4ZDEzNWIxN2UyOWQu
LjRhMGI1MTNkOTBmNGVkNTcwZWU1MDhiZGEzYTA0MmQ5OTM1Nzk2ZDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVu
aXRUZXN0U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5jcHAKQEAgLTU0LDMgKzU0LDgg
QEAgQ1N0cmluZyBFV0syVW5pdFRlc3RTZXJ2ZXI6OmdldFVSTEZvclBhdGgoY29uc3QgY2hhciog
cGF0aCkgY29uc3QKIAogICAgIHJldHVybiB1cmxTdHJpbmc7CiB9CisKK3Vuc2lnbmVkIEVXSzJV
bml0VGVzdFNlcnZlcjo6Z2V0UG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNvdXBfc2VydmVy
X2dldF9wb3J0KG1fc291cFNlcnZlcik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9F
V0syVW5pdFRlc3RTZXJ2ZXIuaAppbmRleCBiOTY3Y2U0MDliYWQ5YTQxNGQwMTRiYTc3ODMwYmM3
ZjIwNmRmZTc4Li41MjllOTQ3ZjRkNmIwMDcyMzAxODZiMTUzNjE2ODY5OTkwNmViZWQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0
aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmgKQEAgLTMxLDYg
KzMxLDcgQEAgcHVibGljOgogCiAgICAgQ1N0cmluZyBnZXRVUkxGb3JQYXRoKGNvbnN0IGNoYXIq
IHBhdGgpIGNvbnN0OwogICAgIHZvaWQgcnVuKFNvdXBTZXJ2ZXJDYWxsYmFjayk7CisgICAgdW5z
aWduZWQgZ2V0UG9ydCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNvdXBTZXJ2ZXIqIG1fc291
cFNlcnZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL3Rlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNoZV9t
YW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iODQxMjIwMjBkYTg3Nzc1MDQwYzljN2M2NTNkNmQyYjc4
MDgzODkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvdGVzdF9ld2syX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3BwCkBAIC0wLDAg
KzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGls
cy9FV0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRl
c3RFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2Vy
dmVyLmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCisjaW5jbHVk
ZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0syVW5pdFRlc3Q7CisKK2V4dGVybiBFV0syVW5p
dFRlc3RFbnZpcm9ubWVudCogZW52aXJvbm1lbnQ7CisKK3N0cnVjdCBPcmlnaW5EYXRhIHsKKyAg
ICBFaW5hX0xpc3QqIG9yaWdpbkxpc3Q7CisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFn
ZXIqIG1hbmFnZXI7CisgICAgYm9vbCBkaWRSZWNlaXZlT3JpZ2luc0NhbGxiYWNrOworICAgIGJv
b2wgaXNTeW5jaHJvbml6ZWQ7CisgICAgdW5zaWduZWQgdGltZW91dFNlY29uZHM7CisgICAgY29u
c3QgY2hhciogZXhwZWN0ZWRQcm90b2NvbDsKKyAgICBjb25zdCBjaGFyKiBleHBlY3RlZEhvc3Q7
CisgICAgY29uc3QgdW5zaWduZWQgZXhwZWN0ZWRQb3J0OworCisgICAgT3JpZ2luRGF0YShFd2tf
QXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciogbWFuYWdlciwgY29uc3QgY2hhciogcHJvdG9jb2ws
IGNvbnN0IGNoYXIqIGhvc3QsIGNvbnN0IHVuc2lnbmVkIHBvcnQpCisgICAgICAgIDogb3JpZ2lu
TGlzdCgwKQorICAgICAgICAsIG1hbmFnZXIobWFuYWdlcikKKyAgICAgICAgLCBkaWRSZWNlaXZl
T3JpZ2luc0NhbGxiYWNrKGZhbHNlKQorICAgICAgICAsIGlzU3luY2hyb25pemVkKGZhbHNlKQor
ICAgICAgICAsIHRpbWVvdXRTZWNvbmRzKDEwKQorICAgICAgICAsIGV4cGVjdGVkUHJvdG9jb2wo
cHJvdG9jb2wpCisgICAgICAgICwgZXhwZWN0ZWRIb3N0KGhvc3QpCisgICAgICAgICwgZXhwZWN0
ZWRQb3J0KHBvcnQpCisgICAgeyB9Cit9OworCitjb25zdCBjaGFyKiBhcHBsaWNhdGlvbkNhY2hl
SHRtbCA9CisgICAgIjxodG1sIG1hbmlmZXN0PSd0ZXN0LmFwcGNhY2hlJz4iCisgICAgIjxoZWFk
PiIKKyAgICAiPHRpdGxlPmFwcGxpY2F0aW9uIGNhY2hlIHRlc3Q8L3RpdGxlPiIKKyAgICAiPHNj
cmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiIKKyAgICAic2V0VGltZW91dChmdW5jdGlvbigp
IHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb2NrJykudmFsdWUgPSBuZXcgRGF0ZSgpOyB9
LCAxMDAwKTsiCisgICAgIjwvc2NyaXB0PiIKKyAgICAiPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBo
cmVmPSdjbG9jay5jc3MnPiIKKyAgICAiPC9oZWFkPiIKKyAgICAiPGJvZHk+IgorICAgICI8cD4g
VGhlIHRpbWUgaXM6IDxvdXRwdXQgaWQ9J2Nsb2NrJz48L291dHB1dD48L3A+IgorICAgICI8L2Jv
ZHk+IgorICAgICI8L2h0bWw+IjsKK2NvbnN0IGNoYXIqIGFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVz
dCA9ICAgIkNBQ0hFIE1BTklGRVNUXG4iCisgICAgImFwcGxpY2F0aW9uX2NhY2hlLmh0bWxcbiIK
KyAgICAiY2xvY2suY3NzIjsKK2NvbnN0IGNoYXIqIGFwcGxpY2F0aW9uQ2FjaGVDc3MgPSAgICJv
dXRwdXQgeyBmb250OjJlbSBzYW5zLXNlcmlmOyB9IjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxp
Y2F0aW9uQ2FjaGVIdG1sRmlsZVtdID0gIi9hcHBsaWNhdGlvbl9jYWNoZS5odG1sIjsKK3N0YXRp
YyBjb25zdCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdEZpbGVbXSA9ICIvdGVzdC5hcHBj
YWNoZSI7CitzdGF0aWMgY29uc3QgY2hhciBhcHBsaWNhdGlvbkNhY2hlQ3NzRmlsZVtdID0gIi9j
bG9jay5jc3MiOworCitzdGF0aWMgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0NhbGxi
YWNrKEVpbmFfTGlzdCogb3JpZ2lucywgRXdrX0Vycm9yKiBlcnJvciwgdm9pZCogdXNlckRhdGEp
Cit7CisgICAgQVNTRVJUX0ZBTFNFKGVycm9yKTsKKworICAgIE9yaWdpbkRhdGEqIG9yaWdpbkRh
dGEgPSBzdGF0aWNfY2FzdDxPcmlnaW5EYXRhKj4odXNlckRhdGEpOworICAgIG9yaWdpbkRhdGEt
PmRpZFJlY2VpdmVPcmlnaW5zQ2FsbGJhY2sgPSB0cnVlOworCisgICAgRWluYV9MaXN0KiBsOwor
ICAgIHZvaWQqIGRhdGE7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0gob3JpZ2lucywgbCwgZGF0YSkg
eworICAgICAgICBvcmlnaW5EYXRhLT5vcmlnaW5MaXN0ID0gZWluYV9saXN0X2FwcGVuZChvcmln
aW5EYXRhLT5vcmlnaW5MaXN0LCBkYXRhKTsKKyAgICAgICAgRXdrX1NlY3VyaXR5X09yaWdpbiog
b3JpZ2luID0gc3RhdGljX2Nhc3Q8RXdrX1NlY3VyaXR5X09yaWdpbio+KGRhdGEpOworICAgICAg
ICBpZiAoIXN0cmNtcChld2tfc2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldChvcmlnaW4pLCBv
cmlnaW5EYXRhLT5leHBlY3RlZFByb3RvY29sKQorICAgICAgICAgICAgJiYgIXN0cmNtcChld2tf
c2VjdXJpdHlfb3JpZ2luX2hvc3RfZ2V0KG9yaWdpbiksIG9yaWdpbkRhdGEtPmV4cGVjdGVkSG9z
dCkKKyAgICAgICAgICAgICYmIGV3a19zZWN1cml0eV9vcmlnaW5fcG9ydF9nZXQob3JpZ2luKSA9
PSBvcmlnaW5EYXRhLT5leHBlY3RlZFBvcnQpIHsKKyAgICAgICAgICAgICAgICBvcmlnaW5EYXRh
LT5pc1N5bmNocm9uaXplZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZWNvcmVfbWFpbl9sb29w
X3F1aXQoKTsKKyAgICAgICAgfQorICAgIH0KK30KK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNr
KFNvdXBTZXJ2ZXIqLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hh
c2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3Nh
Z2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX09LKTsKKyAgICBFaW5hX1N0cmJ1ZiogYm9keSA9IGVpbmFfc3RyYnVmX25ldygp
OworCisgICAgaWYgKCFzdHJjbXAocGF0aCwgYXBwbGljYXRpb25DYWNoZUh0bWxGaWxlKSkgewor
ICAgICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGJvZHksIGFwcGxpY2F0aW9uQ2FjaGVI
dG1sLCAwKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJvZHlMZW5ndGggPSBlaW5hX3N0cmJ1Zl9s
ZW5ndGhfZ2V0KGJvZHkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgZWluYV9zdHJidWZfc3RyaW5nX3N0
ZWFsKGJvZHkpLCBib2R5TGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAocGF0aCwgYXBw
bGljYXRpb25DYWNoZU1hbmlmZXN0RmlsZSkpIHsKKyAgICAgICAgZWluYV9zdHJidWZfYXBwZW5k
X3ByaW50Zihib2R5LCBhcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QsIDApOworICAgICAgICBjb25z
dCBzaXplX3QgYm9keUxlbmd0aCA9IGVpbmFfc3RyYnVmX2xlbmd0aF9nZXQoYm9keSk7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9UQUtFLCBlaW5hX3N0cmJ1Zl9zdHJpbmdfc3RlYWwoYm9keSksIGJvZHlMZW5ndGgp
OworICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwYXRoLCBhcHBsaWNhdGlvbkNhY2hlQ3NzRmlsZSkp
IHsKKyAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50Zihib2R5LCBhcHBsaWNhdGlvbkNh
Y2hlQ3NzLCAwKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJvZHlMZW5ndGggPSBlaW5hX3N0cmJ1
Zl9sZW5ndGhfZ2V0KGJvZHkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgZWluYV9zdHJidWZfc3RyaW5n
X3N0ZWFsKGJvZHkpLCBib2R5TGVuZ3RoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKKworICAgIGVp
bmFfc3RyYnVmX2ZyZWUoYm9keSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyBib29sIHRpbWVyQ2FsbGJhY2sodm9p
ZCogdXNlckRhdGEpCit7CisgICAgT3JpZ2luRGF0YSogb3JpZ2luRGF0YSA9IHN0YXRpY19jYXN0
PE9yaWdpbkRhdGEqPih1c2VyRGF0YSk7CisKKyAgICBpZiAob3JpZ2luRGF0YS0+aXNTeW5jaHJv
bml6ZWQgfHwgIS0tKG9yaWdpbkRhdGEtPnRpbWVvdXRTZWNvbmRzKSkgeworICAgICAgICBlY29y
ZV9tYWluX2xvb3BfcXVpdCgpOworCisgICAgICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5D
RUw7CisgICAgfQorCisgICAgaWYgKG9yaWdpbkRhdGEtPmRpZFJlY2VpdmVPcmlnaW5zQ2FsbGJh
Y2spIHsKKyAgICAgICAgb3JpZ2luRGF0YS0+ZGlkUmVjZWl2ZU9yaWdpbnNDYWxsYmFjayA9IGZh
bHNlOworICAgICAgICBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldChv
cmlnaW5EYXRhLT5tYW5hZ2VyLCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0NhbGxiYWNrLCBv
cmlnaW5EYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfUkVORVc7Cit9
CisKK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdl
cl9vcmlnaW5zX2dldCkKK3sKKyAgICBFdmFzX09iamVjdCogdmlldyA9IHdlYlZpZXcoKTsKKyAg
ICBPd25QdHI8RVdLMlVuaXRUZXN0U2VydmVyPiBodHRwU2VydmVyID0gYWRvcHRQdHIobmV3IEVX
SzJVbml0VGVzdFNlcnZlcik7CisgICAgaHR0cFNlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsK
KworICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGh0dHBTZXJ2ZXItPmdldFVSTEZvclBhdGgo
YXBwbGljYXRpb25DYWNoZUh0bWxGaWxlKS5kYXRhKCkpKTsKKworICAgIE9yaWdpbkRhdGEgb3Jp
Z2luRGF0YShld2tfY29udGV4dF9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2dldChld2tfdmll
d19jb250ZXh0X2dldCh2aWV3KSksICJodHRwIiwgIjEyNy4wLjAuMSIsIGh0dHBTZXJ2ZXItPmdl
dFBvcnQoKSk7CisgICAgQVNTRVJUX1RSVUUoZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJf
b3JpZ2luc19nZXQob3JpZ2luRGF0YS5tYW5hZ2VyLCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lu
c0NhbGxiYWNrLCAmb3JpZ2luRGF0YSkpOworICAgIEVjb3JlX1RpbWVyKiBhcHBsaWNhdGlvbl9j
YWNoZV90aW1lciA9IGVjb3JlX3RpbWVyX2FkZCgxLCByZWludGVycHJldF9jYXN0PEVjb3JlX1Rh
c2tfQ2I+KHRpbWVyQ2FsbGJhY2spLCAmb3JpZ2luRGF0YSk7CisKKyAgICBlY29yZV9tYWluX2xv
b3BfYmVnaW4oKTsKKyAgICBpZiAoYXBwbGljYXRpb25fY2FjaGVfdGltZXIpCisgICAgICAgIGVj
b3JlX3RpbWVyX2RlbChhcHBsaWNhdGlvbl9jYWNoZV90aW1lcik7CisKKyAgICBBU1NFUlRfVFJV
RShvcmlnaW5EYXRhLmlzU3luY2hyb25pemVkKTsKKyAgICBBU1NFUlRfTEUoMSwgZWluYV9saXN0
X2NvdW50KG9yaWdpbkRhdGEub3JpZ2luTGlzdCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3Bw
CmluZGV4IDljZDRlNjE2ZDU2NDU4OTcwOTE4OGFiNjJkN2ZhYjQ0NDk2NGYzYmEuLjg4MDg2Njhh
Yjg3Y2U4M2ZkNmYyYjcxNzE1ZGZmMGQ2ZDdlNzVkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5j
cHAKQEAgLTQxLDYgKzQxLDE0IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfY29udGV4
dF9kZWZhdWx0X2dldCkKICAgICBBU1NFUlRfRVEoZGVmYXVsdENvbnRleHQsIGV3a19jb250ZXh0
X2RlZmF1bHRfZ2V0KCkpOwogfQogCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2NvbnRl
eHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQpCit7CisgICAgRXdrX0NvbnRleHQqIGNv
bnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpOworICAgIEV3a19BcHBsaWNh
dGlvbl9DYWNoZV9NYW5hZ2VyKiBhcHBsaWNhdGlvbkNhY2hlTWFuYWdlciA9IGV3a19jb250ZXh0
X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZ2V0KGNvbnRleHQpOworICAgIEFTU0VSVF9UUlVF
KGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKTsKKyAgICBBU1NFUlRfRVEoYXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIsIGV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZ2V0KGNvbnRl
eHQpKTsKK30KKwogVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2Nvb2tpZV9t
YW5hZ2VyX2dldCkKIHsKICAgICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRl
eHRfZ2V0KHdlYlZpZXcoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177636</attachid>
            <date>2012-12-04 18:12:06 -0800</date>
            <delta_ts>2012-12-04 23:14:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102853-20121205110934.patch</filename>
            <type>text/plain</type>
            <size>29413</size>
            <attacher name="Jiyeon Kim">jiyeon0402.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDcyOGZlMWM2M2IwZGE3
MzFlMTBkZmVkMTM1YjBlNzAwMDM0Mjg4Ni4uNjcwNDljYTVmZWZkMGY1ZmYyOWM0NzAxODlhZDMy
NTczYmRhOGNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEyLTA0ICBKaXll
b24gS2ltICA8aml5ZW9uMDQwMi5raW1Ac2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0sy
XSBBZGQgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIgQVBJcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyODUzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyIHRvIG1hbmFnZSBvZmZsaW5lIGFwcGxpY2F0aW9uIGNhY2hlIGFuZAorICAgICAgICBl
d2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldCB0byBvcmlnaW5zIGxpc3Qg
b2YgYXBwbGljYXRpb24gY2FjaGUuCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBFd2tBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlciBBUElzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXI6OkV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyKToKKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpnZXRBcHBsaWNh
dGlvbkNhY2hlT3JpZ2lucyk6CisgICAgICAgIChFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6
Y3JlYXRlT3JpZ2luTGlzdCk6CisgICAgICAgIChnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0Nh
bGxiYWNrKToKKyAgICAgICAgKGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNf
Z2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVf
bWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrX0FwcGxp
Y2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQpOgorICAgICAgICAoRXdrX0Fw
cGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQ6OkV3a19BcHBsaWNhdGlv
bl9DYWNoZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KToKKyAgICAgICAgKEV3a0FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpj
cmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAg
ICAgICAgKEV3a0NvbnRleHQ6OkV3a0NvbnRleHQpOgorICAgICAgICAoZXdrX2NvbnRleHRfYXBw
bGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRf
cHJpdmF0ZS5oOgorICAgICAgICAoRXdrQ29udGV4dDo6YXBwbGljYXRpb25DYWNoZU1hbmFnZXIp
OgorICAgICAgICAoRXdrQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuY3BwOgorICAgICAgICAoRVdLMlVu
aXRUZXN0U2VydmVyOjpnZXRQb3J0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oOgorICAgICAgICAoRVdLMlVuaXRU
ZXN0U2VydmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
YXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoT3JpZ2luRGF0
YSk6CisgICAgICAgIChPcmlnaW5EYXRhOjpPcmlnaW5EYXRhKToKKyAgICAgICAgKGdldEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgor
ICAgICAgICAodGltZXJDYWxsYmFjayk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcDoKKyAgICAgICAgKFRF
U1RfRik6CisKIDIwMTItMTItMDQgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJLaXQyXSBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xs
ZXJzIHNob3VsZCBiZSB0cmVhdGVkIGFzIHR5cGUgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
VHlwZSBmb3IgZW5jb2RpbmcgcHVycG9zZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
ZGRlN2M1YjRhZDg4M2RkMDEzMGY3ZDM0MjEyMzQwODBlYWNlZmZmZC4uODE2MTU3MzYwOGE1NDFi
MzNmM2VhYzcyM2M0NWM2MjViMWJlMGVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTQ1LDYgKzQ1LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvRXZhc0dMQ29udGV4dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9FdmFzR0xT
dXJmYWNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1NuYXBzaG90SW1hZ2VHTC5jcHAKKyAg
ICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHAKICAg
ICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXV0aF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKQEAgLTI1NSw2ICsyNTYsNyBAQCBTRVQoRm9y
d2FyZGluZ05ldHdvcmtIZWFkZXJzX05BTUUgZm9yd2FyZGluZy1oZWFkZXJTb3VwKQogQ09ORklH
VVJFX0ZJTEUoZWZsL2V3ZWJraXQyLnBjLmluICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi9l
ZmwvZXdlYmtpdDIucGMgQE9OTFkpCiBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgiCisgICAg
IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2F1dGhfcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0Lmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbS5oIgpAQCAtMzY1LDYgKzM2Nyw3IEBAIFRBUkdFVF9MSU5L
X0xJQlJBUklFUyhld2syVW5pdFRlc3RVdGlscyAke0VXSzJVbml0VGVzdHNfTElCUkFSSUVTfSkK
ICMgVGhlICJld2siIG9uIHRoZSB0ZXN0IG5hbWUgbmVlZHMgdG8gYmUgc3VmZml4ZWQgd2l0aCAi
MiIsIG90aGVyd2lzZSBpdAogIyB3aWxsIGNsYXNoIHdpdGggdGVzdHMgZnJvbSB0aGUgV2ViS2l0
IDEgdGVzdCBzdWl0ZS4KIFNFVChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCisgICAgdGVzdF9ld2sy
X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIKICAgICB0ZXN0X2V3azJfYXV0aF9yZXF1ZXN0CiAg
ICAgdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0CiAgICAgdGVzdF9ld2syX2NvbG9yX3BpY2tl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggYjEy
MjExMDg0NDNjMGU0OTZhY2M4YzJlYzUzZmNjZTc4OTNmNTFmNC4uMzAyMTM0NjcwN2QyODI2MWY3
ZmIwZjZhZTAwOTAyZDZkYjA0ZTg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWZuZGVmIEVXZWJLaXQyX2gKICNk
ZWZpbmUgRVdlYktpdDJfaAogCisjaW5jbHVkZSAiZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFn
ZXIuaCIKICNpbmNsdWRlICJld2tfYXV0aF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX2JhY2tf
Zm9yd2FyZF9saXN0LmgiCiAjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNh
dGlvbl9jYWNoZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTRiZDUxN2Rk
Njk3OWM0N2E4ODdkZTBmNTk2YmRmMDc1NjMzNDY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIu
Y3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBF
bGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5h
Z2VyLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldlYkFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJld2tfYXBwbGljYXRpb25fY2Fj
aGVfbWFuYWdlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2Vycm9yX3ByaXZhdGUuaCIKKyNp
bmNsdWRlICJld2tfb2JqZWN0LmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbi5oIgor
I2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyOjpFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcihXZWJBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlclByb3h5KiBhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcikKKyAgICA6IG1fYXBwbGlj
YXRpb25DYWNoZU1hbmFnZXIoYXBwbGljYXRpb25DYWNoZU1hbmFnZXIpCit7IH0KKwordm9pZCBF
d2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6Z2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnMoV0tB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zRnVuY3Rpb24g
Y2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgbV9hcHBsaWNhdGlvbkNhY2hl
TWFuYWdlci0+Z2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnMoQXJyYXlDYWxsYmFjazo6Y3JlYXRl
KGNvbnRleHQsIGNhbGxiYWNrKSk7Cit9CisKK0VpbmFfTGlzdCogRXdrQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXI6OmNyZWF0ZU9yaWdpbkxpc3QoV0tBcnJheVJlZiBvcmlnaW5zKSBjb25zdAorewor
ICAgIEVpbmFfTGlzdCogb3JpZ2luTGlzdCA9IDA7CisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9
IFdLQXJyYXlHZXRTaXplKG9yaWdpbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgeworICAgICAgICBXS1NlY3VyaXR5T3JpZ2luUmVmIHdrT3JpZ2luUmVmID0g
c3RhdGljX2Nhc3Q8V0tTZWN1cml0eU9yaWdpblJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KG9y
aWdpbnMsIGkpKTsKKyAgICAgICAgUmVmUHRyPEV3a19TZWN1cml0eV9PcmlnaW4+IG9yaWdpbiA9
IG1fd3JhcHBlckNhY2hlLmdldCh3a09yaWdpblJlZik7CisgICAgICAgIGlmICghb3JpZ2luKSB7
CisgICAgICAgICAgICBvcmlnaW4gPSBFd2tTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHdrT3JpZ2lu
UmVmKTsKKyAgICAgICAgICAgIG1fd3JhcHBlckNhY2hlLnNldCh3a09yaWdpblJlZiwgb3JpZ2lu
KTsKKyAgICAgICAgfQorICAgICAgICBvcmlnaW5MaXN0ID0gZWluYV9saXN0X2FwcGVuZChvcmln
aW5MaXN0LCBld2tfb2JqZWN0X3JlZihvcmlnaW4uZ2V0KCkpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gb3JpZ2luTGlzdDsKK30KKworc3RhdGljIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdp
bnNDYWxsYmFjayhXS0FycmF5UmVmIG9yaWdpbnMsIFdLRXJyb3JSZWYgd2tFcnJvciwgdm9pZCog
Y29udGV4dCkKK3sKKyAgICBFd2tfQXBwbGljYXRpb25fQ2FjaGVfT3JpZ2luc19Bc3luY19HZXRf
Q29udGV4dCogd2ViQXBwbGljYXRpb25DYWNoZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxFd2tfQXBw
bGljYXRpb25fQ2FjaGVfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCo+KGNvbnRleHQpOworICAg
IEVpbmFfTGlzdCogb3JpZ2luTGlzdCA9IHdlYkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0LT5tYW5h
Z2VyLT5jcmVhdGVPcmlnaW5MaXN0KG9yaWdpbnMpOworICAgIE93blB0cjxFd2tFcnJvcj4gZXdr
RXJyb3IgPSBFd2tFcnJvcjo6Y3JlYXRlKHdrRXJyb3IpOworICAgIHdlYkFwcGxpY2F0aW9uQ2Fj
aGVDb250ZXh0LT5jYWxsYmFjayhvcmlnaW5MaXN0LCBld2tFcnJvci5nZXQoKSwgd2ViQXBwbGlj
YXRpb25DYWNoZUNvbnRleHQtPnVzZXJEYXRhKTsKKworICAgIHZvaWQqIGl0ZW07CisgICAgRUlO
QV9MSVNUX0ZSRUUob3JpZ2luTGlzdCwgaXRlbSkKKyAgICAgICAgZXdrX29iamVjdF91bnJlZihz
dGF0aWNfY2FzdDxFd2tfU2VjdXJpdHlfT3JpZ2luKj4oaXRlbSkpOworCisgICAgZGVsZXRlIHdl
YkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0OworfQorCitFaW5hX0Jvb2wgZXdrX2FwcGxpY2F0aW9u
X2NhY2hlX21hbmFnZXJfb3JpZ2luc19nZXQoY29uc3QgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01h
bmFnZXIqIGV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLCBFd2tfQXBwbGljYXRpb25fQ2FjaGVf
T3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwgZmFsc2Up
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYWxsYmFjaywgZmFsc2UpOwor
CisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQqIGNv
bnRleHQgPSBuZXcgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRl
eHQoZXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIsIGNhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAg
ZXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXItPmdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKGdl
dEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zQ2FsbGJhY2ssIGNvbnRleHQpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGI1
ZjJhMmE0NzA2YmJjY2E1NzQxYzEzMTI0MWU3YzFmZDk5NDE4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21h
bmFnZXIuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1
bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8qKgorICogQGZpbGUgICBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5oCisgKiBA
YnJpZWYgIERlc2NyaWJlcyB0aGUgRXdrIEFwcGxpY2F0aW9uIENhY2hlIE1hbmFnZXIgQVBJLgor
ICoKKyAqIEV3ayBBcHBsaWNhdGlvbiBDYWNoZSBNYW5hZ2VyIG1hbmFnZXMgd2ViIGFwcGxpY2F0
aW9uIGNhY2hlLgorICovCisKKyNpZm5kZWYgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJf
aAorI2RlZmluZSBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9oCisKKyNpbmNsdWRlICJl
d2tfZXJyb3IuaCIKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19BcHBs
aWNhdGlvbl9DYWNoZV9NYW5hZ2VyLiAqLwordHlwZWRlZiBzdHJ1Y3QgRXdrQXBwbGljYXRpb25D
YWNoZU1hbmFnZXIgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXI7CisKKy8qKgorICogQHR5
cGVkZWYgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfR2V0X0NiIEV3a19BcHBsaWNhdGlv
bl9DYWNoZV9PcmlnaW5zX0dldF9DYgorICogQGJyaWVmIENhbGxiYWNrIHR5cGUgZm9yIHVzZSB3
aXRoIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KCkKKyAqCisgKiBA
cGFyYW0gb3JpZ2lucyBAYyBFaW5hX0xpc3QgY29udGFpbmluZyBAYyBFd2tfU2VjdXJpdHlfT3Jp
Z2luIGVsZW1lbnRzIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvciwKKyAqICAgICAgICAgICAg
ICAgICAgICAgICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBh
ZnRlciB1c2UuIFVzZSBld2tfb2JqZWN0X3VucmVmKCkKKyAqICAgICAgICAgICAgICAgICAgICAg
ICAgdG8gZnJlZSB0aGUgaXRlbXMKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0FwcGxpY2F0aW9u
X0NhY2hlX09yaWdpbnNfR2V0X0NiKShFaW5hX0xpc3QgKm9yaWdpbnMsIEV3a19FcnJvciAqZXJy
b3IsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogR2V0cyBsaXN0IG9mIG9yaWdpbnMgdXNp
bmcgYXBwbGljYXRpb24gY2FjaGUgYXN5bmNocm9ub3VzbHkuCisgKgorICogVGhpcyBmdW5jdGlv
biBhbGxvY2F0ZXMgbWVtb3J5IGZvciBjb250ZXh0IHN0cnVjdHVyZSBtYWRlIGZyb20gY2FsbGJh
Y2sgYW5kIHVzZXJfZGF0YS4KKyAqCisgKiBAcGFyYW0gbWFuYWdlciBFd2tfQXBwbGljYXRpb25f
Q2FjaGVfTWFuYWdlciBvYmplY3QKKyAqIEBwYXJhbSBjYWxsYmFjayBjYWxsYmFjayB0byBnZXQg
YXBwbGljYXRpb24gY2FjaGUgb3JpZ2lucworICogQHBhcmFtIHVzZXJfZGF0YSB1c2VyX2RhdGEg
d2lsbCBiZSBwYXNzZWQgd2hlbiByZXN1bHRfY2FsbGJhY2sgaXMgY2FsbGVkLAorICogICAgLWku
ZS4sIHVzZXIgZGF0YSB3aWxsIGJlIGtlcHQgdW50aWwgY2FsbGJhY2sgaXMgY2FsbGVkCisgKgor
ICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvbiBmYWls
dXJlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29y
aWdpbnNfZ2V0KGNvbnN0IEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyICptYW5hZ2VyLCBF
d2tfQXBwbGljYXRpb25fQ2FjaGVfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ssIHZvaWQgKnVzZXJf
ZGF0YSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gZXdrX2Fw
cGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21h
bmFnZXJfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5NTY3NTdmZDFkMjFkNzVkYzRkMjU3M2RlNzJl
YWUyNzBlYmY3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmgKQEAgLTAsMCAr
MSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19h
cHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfYXBwbGljYXRp
b25fY2FjaGVfbWFuYWdlcl9wcml2YXRlX2gKKworI2luY2x1ZGUgIldLQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4u
aCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0cnVjdCBFd2tfQXBwbGljYXRpb25f
Q2FjaGVfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCB7CisgICAgY29uc3QgRXdrX0FwcGxpY2F0
aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXI7CisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09y
aWdpbnNfR2V0X0NiIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJEYXRhOworCisgICAgRXdrX0Fw
cGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQoY29uc3QgRXdrX0FwcGxp
Y2F0aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXIsIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9Pcmln
aW5zX0dldF9DYiBjYWxsYmFjaywgdm9pZCogdXNlckRhdGEpCisgICAgICAgIDogbWFuYWdlciht
YW5hZ2VyKQorICAgICAgICAsIGNhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICAsIHVzZXJEYXRh
KHVzZXJEYXRhKQorICAgIHsgfQorfTsKKworY2xhc3MgRXdrQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyPiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJDb250ZXh0PiBjb250ZXh0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGNvbnRleHQpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV3a0Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKGNvbnRleHQtPmFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJv
eHkoKSkpOworICAgIH0KKworICAgIEVpbmFfTGlzdCogY3JlYXRlT3JpZ2luTGlzdChXS0FycmF5
UmVmIHdrTGlzdCkgY29uc3Q7CisgICAgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyhX
S0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyR2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnNGdW5jdGlv
biBjYWxsYmFjaywgdm9pZCogY29udGV4dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQ
cm94eSopOworCisgICAgUmVmUHRyPFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHk+IG1f
YXBwbGljYXRpb25DYWNoZU1hbmFnZXI7CisgICAgbXV0YWJsZSBIYXNoTWFwPFdLU2VjdXJpdHlP
cmlnaW5SZWYsIFJlZlB0cjxFd2tfU2VjdXJpdHlfT3JpZ2luPiA+IG1fd3JhcHBlckNhY2hlOwor
fTsKKyNlbmRpZiAvLyBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRl
eCAyYTIyMjExOThkMzdiMjdlN2U4MGU2OWZhMTYzODlkOTVmYTRmMmIyLi5lYzhkNTMyOTMxYTYx
NzBhMDljMmNmY2E4ZTg4MzE1YjJmZThiMzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUg
IldlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5LmgiCisjaW5jbHVkZSAiZXdrX2FwcGxpY2F0aW9u
X2NhY2hlX21hbmFnZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUu
aCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3
a19kYXRhYmFzZV9tYW5hZ2VyX3ByaXZhdGUuaCIKQEAgLTYzLDYgKzY0LDcgQEAgc3RhdGljIGlu
bGluZSBDb250ZXh0TWFwJiBjb250ZXh0TWFwKCkKIAogRXdrQ29udGV4dDo6RXdrQ29udGV4dChQ
YXNzUmVmUHRyPFdlYkNvbnRleHQ+IGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkK
KyAgICAsIG1fYXBwbGljYXRpb25DYWNoZU1hbmFnZXIoRXdrQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXI6OmNyZWF0ZShtX2NvbnRleHQpKQogICAgICwgbV9kYXRhYmFzZU1hbmFnZXIoRXdrRGF0YWJh
c2VNYW5hZ2VyOjpjcmVhdGUobV9jb250ZXh0KSkKICAgICAsIG1fc3RvcmFnZU1hbmFnZXIoRXdr
U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShtX2NvbnRleHQpKQogI2lmIEVOQUJMRShCQVRURVJZX1NU
QVRVUykKQEAgLTIwOCw2ICsyMTAsMTMgQEAgdm9pZCBFd2tDb250ZXh0OjpzZXRBZGRpdGlvbmFs
UGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiB9CiAjZW5kaWYKIAorRXdrX0FwcGxpY2F0
aW9uX0NhY2hlX01hbmFnZXIqIGV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJf
Z2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQoreworICAgIEVXS19PQkpfR0VUX0lN
UExfT1JfUkVUVVJOKGNvbnN0IEV3a0NvbnRleHQsIGV3a0NvbnRleHQsIGltcGwsIDApOworCisg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RXdrQ29udGV4dCo+KGltcGwpLT5hcHBsaWNhdGlvbkNhY2hl
TWFuYWdlcigpOworfQorCiBFd2tfQ29va2llX01hbmFnZXIqIGV3a19jb250ZXh0X2Nvb2tpZV9t
YW5hZ2VyX2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKIHsKICAgICBFV0tfT0JK
X0dFVF9JTVBMX09SX1JFVFVSTihjb25zdCBFd2tDb250ZXh0LCBld2tDb250ZXh0LCBpbXBsLCAw
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCmlu
ZGV4IDVkZWI1YzRmMGQwYWI1YmM4M2U0NzkzODUyMzZjYTBmNTUzNDU5MjkuLjQ5NzEyMDEwMzk2
ODg0ZWU0YWNiZTRmYjcxMDU1ZWMxYjc0OTU4YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaApAQCAtMzcsNiArMzcsNyBAQAogI2lmbmRlZiBl
d2tfY29udGV4dF9oCiAjZGVmaW5lIGV3a19jb250ZXh0X2gKIAorI2luY2x1ZGUgImV3a19hcHBs
aWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiZXdrX2RhdGFiYXNlX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfZmF2aWNv
bl9kYXRhYmFzZS5oIgpAQCAtMTQ4LDYgKzE0OSwxNSBAQCBFQVBJIEV3a19Db250ZXh0ICpld2tf
Y29udGV4dF9uZXcodm9pZCk7CiBFQVBJIEV3a19Db250ZXh0ICpld2tfY29udGV4dF9uZXdfd2l0
aF9pbmplY3RlZF9idW5kbGVfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKIAogLyoqCisgKiBHZXRz
IHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBtYW5hZ2VyIGluc3RhbmNlIGZvciB0aGlzIEBhIGNvbnRl
eHQuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QgdG8gcXVlcnkuCisgKgor
ICogQHJldHVybiBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciBvYmplY3QgaW5zdGFuY2Ug
b3IgQGMgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK0VBUEkgRXdrX0FwcGxpY2F0aW9u
X0NhY2hlX01hbmFnZXIgKmV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZ2V0
KGNvbnN0IEV3a19Db250ZXh0ICpjb250ZXh0KTsKKworLyoqCiAgKiBHZXRzIHRoZSBjb29raWUg
bWFuYWdlciBpbnN0YW5jZSBmb3IgdGhpcyBAYSBjb250ZXh0LgogICoKICAqIEBwYXJhbSBjb250
ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHF1ZXJ5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IDIxYTFjNTE3NTVm
OTU0MTg5ODQyMTlhMTE5NDBmNTZjNDRhYmY1MDAuLmQ4ZGExYmZlYWE4Mjc4ODhhZDgwYWI2ZjNh
MGMwNTUyY2M3NzU3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKQEAgLTU1LDYgKzU1LDggQEAgcHVibGljOgog
CiAgICAgfkV3a0NvbnRleHQoKTsKIAorICAgIGlubGluZSBFd2tBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlciogYXBwbGljYXRpb25DYWNoZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX2FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyLmdldCgpOyB9CisKICAgICBFd2tDb29raWVNYW5hZ2VyKiBjb29raWVN
YW5hZ2VyKCk7CiAKICAgICBFd2tEYXRhYmFzZU1hbmFnZXIqIGRhdGFiYXNlTWFuYWdlcigpOwpA
QCAtODksNiArOTEsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFdlYkNvbnRleHQ+IG1fY29u
dGV4dDsKIAorICAgIE93blB0cjxFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcj4gbV9hcHBsaWNh
dGlvbkNhY2hlTWFuYWdlcjsKICAgICBPd25QdHI8RXdrQ29va2llTWFuYWdlcj4gbV9jb29raWVN
YW5hZ2VyOwogICAgIE93blB0cjxFd2tEYXRhYmFzZU1hbmFnZXI+IG1fZGF0YWJhc2VNYW5hZ2Vy
OwogICAgIE93blB0cjxFd2tGYXZpY29uRGF0YWJhc2U+IG1fZmF2aWNvbkRhdGFiYXNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RV
dGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuY3BwCmluZGV4IDRl
ZjRjZjc2Zjc3NDFlNzM1NDRkMjcxODgzZTE4ZDEzNWIxN2UyOWQuLjRhMGI1MTNkOTBmNGVkNTcw
ZWU1MDhiZGEzYTA0MmQ5OTM1Nzk2ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxz
L0VXSzJVbml0VGVzdFNlcnZlci5jcHAKQEAgLTU0LDMgKzU0LDggQEAgQ1N0cmluZyBFV0syVW5p
dFRlc3RTZXJ2ZXI6OmdldFVSTEZvclBhdGgoY29uc3QgY2hhciogcGF0aCkgY29uc3QKIAogICAg
IHJldHVybiB1cmxTdHJpbmc7CiB9CisKK3Vuc2lnbmVkIEVXSzJVbml0VGVzdFNlcnZlcjo6Z2V0
UG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNvdXBfc2VydmVyX2dldF9wb3J0KG1fc291cFNl
cnZlcik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIu
aAppbmRleCBiOTY3Y2U0MDliYWQ5YTQxNGQwMTRiYTc3ODMwYmM3ZjIwNmRmZTc4Li41MjllOTQ3
ZjRkNmIwMDcyMzAxODZiMTUzNjE2ODY5OTkwNmViZWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNl
cnZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRU
ZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmgKQEAgLTMxLDYgKzMxLDcgQEAgcHVibGljOgog
CiAgICAgQ1N0cmluZyBnZXRVUkxGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpIGNvbnN0OwogICAg
IHZvaWQgcnVuKFNvdXBTZXJ2ZXJDYWxsYmFjayk7CisgICAgdW5zaWduZWQgZ2V0UG9ydCgpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIFNvdXBTZXJ2ZXIqIG1fc291cFNlcnZlcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9hcHBs
aWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL3Rlc3RzL3Rlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iODQxMjIwMjBkYTg3Nzc1MDQwYzljN2M2NTNkNmQyYjc4MDgzODkwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2sy
X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RCYXNl
LmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RFbnZpcm9ubWVudC5oIgor
I2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSAi
ZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNp
bmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBFV0syVW5pdFRlc3Q7CisKK2V4dGVybiBFV0syVW5pdFRlc3RFbnZpcm9ubWVudCog
ZW52aXJvbm1lbnQ7CisKK3N0cnVjdCBPcmlnaW5EYXRhIHsKKyAgICBFaW5hX0xpc3QqIG9yaWdp
bkxpc3Q7CisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXI7CisgICAg
Ym9vbCBkaWRSZWNlaXZlT3JpZ2luc0NhbGxiYWNrOworICAgIGJvb2wgaXNTeW5jaHJvbml6ZWQ7
CisgICAgdW5zaWduZWQgdGltZW91dFNlY29uZHM7CisgICAgY29uc3QgY2hhciogZXhwZWN0ZWRQ
cm90b2NvbDsKKyAgICBjb25zdCBjaGFyKiBleHBlY3RlZEhvc3Q7CisgICAgY29uc3QgdW5zaWdu
ZWQgZXhwZWN0ZWRQb3J0OworCisgICAgT3JpZ2luRGF0YShFd2tfQXBwbGljYXRpb25fQ2FjaGVf
TWFuYWdlciogbWFuYWdlciwgY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3Qs
IGNvbnN0IHVuc2lnbmVkIHBvcnQpCisgICAgICAgIDogb3JpZ2luTGlzdCgwKQorICAgICAgICAs
IG1hbmFnZXIobWFuYWdlcikKKyAgICAgICAgLCBkaWRSZWNlaXZlT3JpZ2luc0NhbGxiYWNrKGZh
bHNlKQorICAgICAgICAsIGlzU3luY2hyb25pemVkKGZhbHNlKQorICAgICAgICAsIHRpbWVvdXRT
ZWNvbmRzKDEwKQorICAgICAgICAsIGV4cGVjdGVkUHJvdG9jb2wocHJvdG9jb2wpCisgICAgICAg
ICwgZXhwZWN0ZWRIb3N0KGhvc3QpCisgICAgICAgICwgZXhwZWN0ZWRQb3J0KHBvcnQpCisgICAg
eyB9Cit9OworCitjb25zdCBjaGFyKiBhcHBsaWNhdGlvbkNhY2hlSHRtbCA9CisgICAgIjxodG1s
IG1hbmlmZXN0PSd0ZXN0LmFwcGNhY2hlJz4iCisgICAgIjxoZWFkPiIKKyAgICAiPHRpdGxlPmFw
cGxpY2F0aW9uIGNhY2hlIHRlc3Q8L3RpdGxlPiIKKyAgICAiPHNjcmlwdCB0eXBlPSd0ZXh0L2ph
dmFzY3JpcHQnPiIKKyAgICAic2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2Nsb2NrJykudmFsdWUgPSBuZXcgRGF0ZSgpOyB9LCAxMDAwKTsiCisgICAgIjwv
c2NyaXB0PiIKKyAgICAiPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPSdjbG9jay5jc3MnPiIK
KyAgICAiPC9oZWFkPiIKKyAgICAiPGJvZHk+IgorICAgICI8cD4gVGhlIHRpbWUgaXM6IDxvdXRw
dXQgaWQ9J2Nsb2NrJz48L291dHB1dD48L3A+IgorICAgICI8L2JvZHk+IgorICAgICI8L2h0bWw+
IjsKK2NvbnN0IGNoYXIqIGFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdCA9ICAgIkNBQ0hFIE1BTklG
RVNUXG4iCisgICAgImFwcGxpY2F0aW9uX2NhY2hlLmh0bWxcbiIKKyAgICAiY2xvY2suY3NzIjsK
K2NvbnN0IGNoYXIqIGFwcGxpY2F0aW9uQ2FjaGVDc3MgPSAgICJvdXRwdXQgeyBmb250OjJlbSBz
YW5zLXNlcmlmOyB9IjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVIdG1sRmls
ZVtdID0gIi9hcHBsaWNhdGlvbl9jYWNoZS5odG1sIjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxp
Y2F0aW9uQ2FjaGVNYW5pZmVzdEZpbGVbXSA9ICIvdGVzdC5hcHBjYWNoZSI7CitzdGF0aWMgY29u
c3QgY2hhciBhcHBsaWNhdGlvbkNhY2hlQ3NzRmlsZVtdID0gIi9jbG9jay5jc3MiOworCitzdGF0
aWMgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0NhbGxiYWNrKEVpbmFfTGlzdCogb3Jp
Z2lucywgRXdrX0Vycm9yKiBlcnJvciwgdm9pZCogdXNlckRhdGEpCit7CisgICAgQVNTRVJUX0ZB
TFNFKGVycm9yKTsKKworICAgIE9yaWdpbkRhdGEqIG9yaWdpbkRhdGEgPSBzdGF0aWNfY2FzdDxP
cmlnaW5EYXRhKj4odXNlckRhdGEpOworICAgIG9yaWdpbkRhdGEtPmRpZFJlY2VpdmVPcmlnaW5z
Q2FsbGJhY2sgPSB0cnVlOworCisgICAgRWluYV9MaXN0KiBsOworICAgIHZvaWQqIGRhdGE7Cisg
ICAgRUlOQV9MSVNUX0ZPUkVBQ0gob3JpZ2lucywgbCwgZGF0YSkgeworICAgICAgICBvcmlnaW5E
YXRhLT5vcmlnaW5MaXN0ID0gZWluYV9saXN0X2FwcGVuZChvcmlnaW5EYXRhLT5vcmlnaW5MaXN0
LCBkYXRhKTsKKyAgICAgICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luID0gc3RhdGljX2Nh
c3Q8RXdrX1NlY3VyaXR5X09yaWdpbio+KGRhdGEpOworICAgICAgICBpZiAoIXN0cmNtcChld2tf
c2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldChvcmlnaW4pLCBvcmlnaW5EYXRhLT5leHBlY3Rl
ZFByb3RvY29sKQorICAgICAgICAgICAgJiYgIXN0cmNtcChld2tfc2VjdXJpdHlfb3JpZ2luX2hv
c3RfZ2V0KG9yaWdpbiksIG9yaWdpbkRhdGEtPmV4cGVjdGVkSG9zdCkKKyAgICAgICAgICAgICYm
IGV3a19zZWN1cml0eV9vcmlnaW5fcG9ydF9nZXQob3JpZ2luKSA9PSBvcmlnaW5EYXRhLT5leHBl
Y3RlZFBvcnQpIHsKKyAgICAgICAgICAgICAgICBvcmlnaW5EYXRhLT5pc1N5bmNocm9uaXplZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICAgICAg
fQorICAgIH0KK30KK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqLCBTb3Vw
TWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGll
bnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQ
X01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAg
ICBFaW5hX1N0cmJ1ZiogYm9keSA9IGVpbmFfc3RyYnVmX25ldygpOworCisgICAgaWYgKCFzdHJj
bXAocGF0aCwgYXBwbGljYXRpb25DYWNoZUh0bWxGaWxlKSkgeworICAgICAgICBlaW5hX3N0cmJ1
Zl9hcHBlbmRfcHJpbnRmKGJvZHksIGFwcGxpY2F0aW9uQ2FjaGVIdG1sLCAwKTsKKyAgICAgICAg
Y29uc3Qgc2l6ZV90IGJvZHlMZW5ndGggPSBlaW5hX3N0cmJ1Zl9sZW5ndGhfZ2V0KGJvZHkpOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfVEFLRSwgZWluYV9zdHJidWZfc3RyaW5nX3N0ZWFsKGJvZHkpLCBib2R5TGVu
Z3RoKTsKKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAocGF0aCwgYXBwbGljYXRpb25DYWNoZU1hbmlm
ZXN0RmlsZSkpIHsKKyAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50Zihib2R5LCBhcHBs
aWNhdGlvbkNhY2hlTWFuaWZlc3QsIDApOworICAgICAgICBjb25zdCBzaXplX3QgYm9keUxlbmd0
aCA9IGVpbmFfc3RyYnVmX2xlbmd0aF9nZXQoYm9keSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBlaW5h
X3N0cmJ1Zl9zdHJpbmdfc3RlYWwoYm9keSksIGJvZHlMZW5ndGgpOworICAgIH0gZWxzZSBpZiAo
IXN0cmNtcChwYXRoLCBhcHBsaWNhdGlvbkNhY2hlQ3NzRmlsZSkpIHsKKyAgICAgICAgZWluYV9z
dHJidWZfYXBwZW5kX3ByaW50Zihib2R5LCBhcHBsaWNhdGlvbkNhY2hlQ3NzLCAwKTsKKyAgICAg
ICAgY29uc3Qgc2l6ZV90IGJvZHlMZW5ndGggPSBlaW5hX3N0cmJ1Zl9sZW5ndGhfZ2V0KGJvZHkp
OworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfVEFLRSwgZWluYV9zdHJidWZfc3RyaW5nX3N0ZWFsKGJvZHkpLCBib2R5
TGVuZ3RoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKKworICAgIGVpbmFfc3RyYnVmX2ZyZWUoYm9k
eSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9k
eSk7Cit9CisKK3N0YXRpYyBib29sIHRpbWVyQ2FsbGJhY2sodm9pZCogdXNlckRhdGEpCit7Cisg
ICAgT3JpZ2luRGF0YSogb3JpZ2luRGF0YSA9IHN0YXRpY19jYXN0PE9yaWdpbkRhdGEqPih1c2Vy
RGF0YSk7CisKKyAgICBpZiAob3JpZ2luRGF0YS0+aXNTeW5jaHJvbml6ZWQgfHwgIS0tKG9yaWdp
bkRhdGEtPnRpbWVvdXRTZWNvbmRzKSkgeworICAgICAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgp
OworCisgICAgICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7CisgICAgfQorCisgICAg
aWYgKG9yaWdpbkRhdGEtPmRpZFJlY2VpdmVPcmlnaW5zQ2FsbGJhY2spIHsKKyAgICAgICAgb3Jp
Z2luRGF0YS0+ZGlkUmVjZWl2ZU9yaWdpbnNDYWxsYmFjayA9IGZhbHNlOworICAgICAgICBld2tf
YXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldChvcmlnaW5EYXRhLT5tYW5hZ2Vy
LCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0NhbGxiYWNrLCBvcmlnaW5EYXRhKTsKKyAgICB9
CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfUkVORVc7Cit9CisKK1RFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldCkKK3sK
KyAgICBFdmFzX09iamVjdCogdmlldyA9IHdlYlZpZXcoKTsKKyAgICBPd25QdHI8RVdLMlVuaXRU
ZXN0U2VydmVyPiBodHRwU2VydmVyID0gYWRvcHRQdHIobmV3IEVXSzJVbml0VGVzdFNlcnZlcik7
CisgICAgaHR0cFNlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIEFTU0VSVF9UUlVF
KGxvYWRVcmxTeW5jKGh0dHBTZXJ2ZXItPmdldFVSTEZvclBhdGgoYXBwbGljYXRpb25DYWNoZUh0
bWxGaWxlKS5kYXRhKCkpKTsKKworICAgIE9yaWdpbkRhdGEgb3JpZ2luRGF0YShld2tfY29udGV4
dF9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2dldChld2tfdmlld19jb250ZXh0X2dldCh2aWV3
KSksICJodHRwIiwgIjEyNy4wLjAuMSIsIGh0dHBTZXJ2ZXItPmdldFBvcnQoKSk7CisgICAgQVNT
RVJUX1RSVUUoZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfb3JpZ2luc19nZXQob3JpZ2lu
RGF0YS5tYW5hZ2VyLCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0NhbGxiYWNrLCAmb3JpZ2lu
RGF0YSkpOworICAgIEVjb3JlX1RpbWVyKiBhcHBsaWNhdGlvbl9jYWNoZV90aW1lciA9IGVjb3Jl
X3RpbWVyX2FkZCgxLCByZWludGVycHJldF9jYXN0PEVjb3JlX1Rhc2tfQ2I+KHRpbWVyQ2FsbGJh
Y2spLCAmb3JpZ2luRGF0YSk7CisKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKyAgICBp
ZiAoYXBwbGljYXRpb25fY2FjaGVfdGltZXIpCisgICAgICAgIGVjb3JlX3RpbWVyX2RlbChhcHBs
aWNhdGlvbl9jYWNoZV90aW1lcik7CisKKyAgICBBU1NFUlRfVFJVRShvcmlnaW5EYXRhLmlzU3lu
Y2hyb25pemVkKTsKKyAgICBBU1NFUlRfTEUoMSwgZWluYV9saXN0X2NvdW50KG9yaWdpbkRhdGEu
b3JpZ2luTGlzdCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwCmluZGV4IDljZDRlNjE2ZDU2
NDU4OTcwOTE4OGFiNjJkN2ZhYjQ0NDk2NGYzYmEuLjg4MDg2NjhhYjg3Y2U4M2ZkNmYyYjcxNzE1
ZGZmMGQ2ZDdlNzVkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5jcHAKQEAgLTQxLDYgKzQxLDE0
IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfY29udGV4dF9kZWZhdWx0X2dldCkKICAg
ICBBU1NFUlRfRVEoZGVmYXVsdENvbnRleHQsIGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KCkpOwog
fQogCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2Fj
aGVfbWFuYWdlcl9nZXQpCit7CisgICAgRXdrX0NvbnRleHQqIGNvbnRleHQgPSBld2tfdmlld19j
b250ZXh0X2dldCh3ZWJWaWV3KCkpOworICAgIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2Vy
KiBhcHBsaWNhdGlvbkNhY2hlTWFuYWdlciA9IGV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hl
X21hbmFnZXJfZ2V0KGNvbnRleHQpOworICAgIEFTU0VSVF9UUlVFKGFwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyKTsKKyAgICBBU1NFUlRfRVEoYXBwbGljYXRpb25DYWNoZU1hbmFnZXIsIGV3a19jb250
ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZ2V0KGNvbnRleHQpKTsKK30KKwogVEVTVF9G
KEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2VyX2dldCkKIHsKICAg
ICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177678</attachid>
            <date>2012-12-04 23:14:19 -0800</date>
            <delta_ts>2014-03-16 19:09:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102853-20121205161147.patch</filename>
            <type>text/plain</type>
            <size>29183</size>
            <attacher name="Jiyeon Kim">jiyeon0402.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDcyOGZlMWM2M2IwZGE3
MzFlMTBkZmVkMTM1YjBlNzAwMDM0Mjg4Ni4uNjcwNDljYTVmZWZkMGY1ZmYyOWM0NzAxODlhZDMy
NTczYmRhOGNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEyLTA0ICBKaXll
b24gS2ltICA8aml5ZW9uMDQwMi5raW1Ac2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bV0sy
XSBBZGQgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIgQVBJcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyODUzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyIHRvIG1hbmFnZSBvZmZsaW5lIGFwcGxpY2F0aW9uIGNhY2hlIGFuZAorICAgICAgICBl
d2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldCB0byBvcmlnaW5zIGxpc3Qg
b2YgYXBwbGljYXRpb24gY2FjaGUuCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBFd2tBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlciBBUElzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXI6OkV3a0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyKToKKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpnZXRBcHBsaWNh
dGlvbkNhY2hlT3JpZ2lucyk6CisgICAgICAgIChFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6
Y3JlYXRlT3JpZ2luTGlzdCk6CisgICAgICAgIChnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0Nh
bGxiYWNrKToKKyAgICAgICAgKGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNf
Z2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVf
bWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrX0FwcGxp
Y2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQpOgorICAgICAgICAoRXdrX0Fw
cGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQ6OkV3a19BcHBsaWNhdGlv
bl9DYWNoZV9PcmlnaW5zX0FzeW5jX0dldF9Db250ZXh0KToKKyAgICAgICAgKEV3a0FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpj
cmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAg
ICAgICAgKEV3a0NvbnRleHQ6OkV3a0NvbnRleHQpOgorICAgICAgICAoZXdrX2NvbnRleHRfYXBw
bGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRf
cHJpdmF0ZS5oOgorICAgICAgICAoRXdrQ29udGV4dDo6YXBwbGljYXRpb25DYWNoZU1hbmFnZXIp
OgorICAgICAgICAoRXdrQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuY3BwOgorICAgICAgICAoRVdLMlVu
aXRUZXN0U2VydmVyOjpnZXRQb3J0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oOgorICAgICAgICAoRVdLMlVuaXRU
ZXN0U2VydmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
YXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoT3JpZ2luRGF0
YSk6CisgICAgICAgIChPcmlnaW5EYXRhOjpPcmlnaW5EYXRhKToKKyAgICAgICAgKGdldEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgor
ICAgICAgICAodGltZXJDYWxsYmFjayk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcDoKKyAgICAgICAgKFRF
U1RfRik6CisKIDIwMTItMTItMDQgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJLaXQyXSBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xs
ZXJzIHNob3VsZCBiZSB0cmVhdGVkIGFzIHR5cGUgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
VHlwZSBmb3IgZW5jb2RpbmcgcHVycG9zZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
ZGRlN2M1YjRhZDg4M2RkMDEzMGY3ZDM0MjEyMzQwODBlYWNlZmZmZC4uODE2MTU3MzYwOGE1NDFi
MzNmM2VhYzcyM2M0NWM2MjViMWJlMGVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTQ1LDYgKzQ1LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvRXZhc0dMQ29udGV4dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9FdmFzR0xT
dXJmYWNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1NuYXBzaG90SW1hZ2VHTC5jcHAKKyAg
ICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHAKICAg
ICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXV0aF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKQEAgLTI1NSw2ICsyNTYsNyBAQCBTRVQoRm9y
d2FyZGluZ05ldHdvcmtIZWFkZXJzX05BTUUgZm9yd2FyZGluZy1oZWFkZXJTb3VwKQogQ09ORklH
VVJFX0ZJTEUoZWZsL2V3ZWJraXQyLnBjLmluICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0Mi9l
ZmwvZXdlYmtpdDIucGMgQE9OTFkpCiBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgiCisgICAg
IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2F1dGhfcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0Lmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbS5oIgpAQCAtMzY1LDYgKzM2Nyw3IEBAIFRBUkdFVF9MSU5L
X0xJQlJBUklFUyhld2syVW5pdFRlc3RVdGlscyAke0VXSzJVbml0VGVzdHNfTElCUkFSSUVTfSkK
ICMgVGhlICJld2siIG9uIHRoZSB0ZXN0IG5hbWUgbmVlZHMgdG8gYmUgc3VmZml4ZWQgd2l0aCAi
MiIsIG90aGVyd2lzZSBpdAogIyB3aWxsIGNsYXNoIHdpdGggdGVzdHMgZnJvbSB0aGUgV2ViS2l0
IDEgdGVzdCBzdWl0ZS4KIFNFVChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCisgICAgdGVzdF9ld2sy
X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIKICAgICB0ZXN0X2V3azJfYXV0aF9yZXF1ZXN0CiAg
ICAgdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0CiAgICAgdGVzdF9ld2syX2NvbG9yX3BpY2tl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggYjEy
MjExMDg0NDNjMGU0OTZhY2M4YzJlYzUzZmNjZTc4OTNmNTFmNC4uMzAyMTM0NjcwN2QyODI2MWY3
ZmIwZjZhZTAwOTAyZDZkYjA0ZTg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWZuZGVmIEVXZWJLaXQyX2gKICNk
ZWZpbmUgRVdlYktpdDJfaAogCisjaW5jbHVkZSAiZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFn
ZXIuaCIKICNpbmNsdWRlICJld2tfYXV0aF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX2JhY2tf
Zm9yd2FyZF9saXN0LmgiCiAjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNh
dGlvbl9jYWNoZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmYyZjI4NmNj
ZjkwNzBmMmFhNmI1OWI1MDgxNmZkMjI5ODIyNjdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIu
Y3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBF
bGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5h
Z2VyLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldlYkFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJld2tfYXBwbGljYXRpb25fY2Fj
aGVfbWFuYWdlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2Vycm9yX3ByaXZhdGUuaCIKKyNp
bmNsdWRlICJld2tfb2JqZWN0LmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbi5oIgor
I2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyOjpFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcihXZWJBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlclByb3h5KiBhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcikKKyAgICA6IG1fYXBwbGlj
YXRpb25DYWNoZU1hbmFnZXIoYXBwbGljYXRpb25DYWNoZU1hbmFnZXIpCit7IH0KKwordm9pZCBF
d2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6Z2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnMoV0tB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zRnVuY3Rpb24g
Y2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgbV9hcHBsaWNhdGlvbkNhY2hl
TWFuYWdlci0+Z2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnMoQXJyYXlDYWxsYmFjazo6Y3JlYXRl
KGNvbnRleHQsIGNhbGxiYWNrKSk7Cit9CisKK0VpbmFfTGlzdCogRXdrQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXI6OmNyZWF0ZU9yaWdpbkxpc3QoV0tBcnJheVJlZiBvcmlnaW5zKSBjb25zdAorewor
ICAgIEVpbmFfTGlzdCogb3JpZ2luTGlzdCA9IDA7CisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9
IFdLQXJyYXlHZXRTaXplKG9yaWdpbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgeworICAgICAgICBXS1NlY3VyaXR5T3JpZ2luUmVmIHdrT3JpZ2luUmVmID0g
c3RhdGljX2Nhc3Q8V0tTZWN1cml0eU9yaWdpblJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KG9y
aWdpbnMsIGkpKTsKKyAgICAgICAgUmVmUHRyPEV3a19TZWN1cml0eV9PcmlnaW4+IG9yaWdpbiA9
IG1fd3JhcHBlckNhY2hlLmdldCh3a09yaWdpblJlZik7CisgICAgICAgIGlmICghb3JpZ2luKSB7
CisgICAgICAgICAgICBvcmlnaW4gPSBFd2tTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHdrT3JpZ2lu
UmVmKTsKKyAgICAgICAgICAgIG1fd3JhcHBlckNhY2hlLnNldCh3a09yaWdpblJlZiwgb3JpZ2lu
KTsKKyAgICAgICAgfQorICAgICAgICBvcmlnaW5MaXN0ID0gZWluYV9saXN0X2FwcGVuZChvcmln
aW5MaXN0LCBld2tfb2JqZWN0X3JlZihvcmlnaW4uZ2V0KCkpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gb3JpZ2luTGlzdDsKK30KKworc3RhdGljIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdp
bnNDYWxsYmFjayhXS0FycmF5UmVmIG9yaWdpbnMsIFdLRXJyb3JSZWYgd2tFcnJvciwgdm9pZCog
Y29udGV4dCkKK3sKKyAgICBFd2tfQXBwbGljYXRpb25fQ2FjaGVfT3JpZ2luc19Bc3luY19HZXRf
Q29udGV4dCogd2ViQXBwbGljYXRpb25DYWNoZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxFd2tfQXBw
bGljYXRpb25fQ2FjaGVfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dCo+KGNvbnRleHQpOworICAg
IEVpbmFfTGlzdCogb3JpZ2luTGlzdCA9IHdlYkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0LT5tYW5h
Z2VyLT5jcmVhdGVPcmlnaW5MaXN0KG9yaWdpbnMpOworICAgIE93blB0cjxFd2tFcnJvcj4gZXdr
RXJyb3IgPSBFd2tFcnJvcjo6Y3JlYXRlKHdrRXJyb3IpOworICAgIHdlYkFwcGxpY2F0aW9uQ2Fj
aGVDb250ZXh0LT5jYWxsYmFjayhvcmlnaW5MaXN0LCBld2tFcnJvci5nZXQoKSwgd2ViQXBwbGlj
YXRpb25DYWNoZUNvbnRleHQtPnVzZXJEYXRhKTsKKworICAgIHZvaWQqIGl0ZW07CisgICAgRUlO
QV9MSVNUX0ZSRUUob3JpZ2luTGlzdCwgaXRlbSkKKyAgICAgICAgZXdrX29iamVjdF91bnJlZihz
dGF0aWNfY2FzdDxFd2tfT2JqZWN0Kj4oaXRlbSkpOworCisgICAgZGVsZXRlIHdlYkFwcGxpY2F0
aW9uQ2FjaGVDb250ZXh0OworfQorCitFaW5hX0Jvb2wgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21h
bmFnZXJfb3JpZ2luc19nZXQoY29uc3QgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIGV3
a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLCBFd2tfQXBwbGljYXRpb25fQ2FjaGVfT3JpZ2luc19H
ZXRfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChld2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwgZmFsc2UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYWxsYmFjaywgZmFsc2UpOworCisgICAgRXdr
X0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQqIGNvbnRleHQgPSBu
ZXcgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQoZXdrQXBw
bGljYXRpb25DYWNoZU1hbmFnZXIsIGNhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgZXdrQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXItPmdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKGdldEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5zQ2FsbGJhY2ssIGNvbnRleHQpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGI1ZjJhMmE0NzA2
YmJjY2E1NzQxYzEzMTI0MWU3YzFmZDk5NDE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaApA
QCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgor
ICogQGZpbGUgICBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5oCisgKiBAYnJpZWYgIERl
c2NyaWJlcyB0aGUgRXdrIEFwcGxpY2F0aW9uIENhY2hlIE1hbmFnZXIgQVBJLgorICoKKyAqIEV3
ayBBcHBsaWNhdGlvbiBDYWNoZSBNYW5hZ2VyIG1hbmFnZXMgd2ViIGFwcGxpY2F0aW9uIGNhY2hl
LgorICovCisKKyNpZm5kZWYgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfaAorI2RlZmlu
ZSBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9oCisKKyNpbmNsdWRlICJld2tfZXJyb3Iu
aCIKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7
CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19BcHBsaWNhdGlvbl9D
YWNoZV9NYW5hZ2VyLiAqLwordHlwZWRlZiBzdHJ1Y3QgRXdrQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXI7CisKKy8qKgorICogQHR5cGVkZWYgRXdr
X0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfR2V0X0NiIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9P
cmlnaW5zX0dldF9DYgorICogQGJyaWVmIENhbGxiYWNrIHR5cGUgZm9yIHVzZSB3aXRoIGV3a19h
cHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KCkKKyAqCisgKiBAcGFyYW0gb3Jp
Z2lucyBAYyBFaW5hX0xpc3QgY29udGFpbmluZyBAYyBFd2tfU2VjdXJpdHlfT3JpZ2luIGVsZW1l
bnRzIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvciwKKyAqICAgICAgICAgICAgICAgICAgICAg
ICAgdGhlIEVpbmFfTGlzdCBhbmQgaXRzIGl0ZW1zIHNob3VsZCBiZSBmcmVlZCBhZnRlciB1c2Uu
IFVzZSBld2tfb2JqZWN0X3VucmVmKCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdG8gZnJl
ZSB0aGUgaXRlbXMKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09y
aWdpbnNfR2V0X0NiKShFaW5hX0xpc3QgKm9yaWdpbnMsIEV3a19FcnJvciAqZXJyb3IsIHZvaWQg
KnVzZXJfZGF0YSk7CisKKy8qKgorICogR2V0cyBsaXN0IG9mIG9yaWdpbnMgdXNpbmcgYXBwbGlj
YXRpb24gY2FjaGUgYXN5bmNocm9ub3VzbHkuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0
ZXMgbWVtb3J5IGZvciBjb250ZXh0IHN0cnVjdHVyZSBtYWRlIGZyb20gY2FsbGJhY2sgYW5kIHVz
ZXJfZGF0YS4KKyAqCisgKiBAcGFyYW0gbWFuYWdlciBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFu
YWdlciBvYmplY3QKKyAqIEBwYXJhbSBjYWxsYmFjayBjYWxsYmFjayB0byBnZXQgYXBwbGljYXRp
b24gY2FjaGUgb3JpZ2lucworICogQHBhcmFtIHVzZXJfZGF0YSB1c2VyX2RhdGEgd2lsbCBiZSBw
YXNzZWQgd2hlbiByZXN1bHRfY2FsbGJhY2sgaXMgY2FsbGVkLAorICogICAgLWkuZS4sIHVzZXIg
ZGF0YSB3aWxsIGJlIGtlcHQgdW50aWwgY2FsbGJhY2sgaXMgY2FsbGVkCisgKgorICogQHJldHVy
biBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcywgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCisgKi8K
K0VBUEkgRWluYV9Cb29sIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNfZ2V0
KGNvbnN0IEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyICptYW5hZ2VyLCBFd2tfQXBwbGlj
YXRpb25fQ2FjaGVfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ssIHZvaWQgKnVzZXJfZGF0YSk7CisK
KyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gZXdrX2FwcGxpY2F0aW9u
X2NhY2hlX21hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlkNTM4ZjU0ZjY3MDZjMGM4ZjljM2M0Mzg1OWUyMjFjYmE4NTI4
NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmgKQEAgLTAsMCArMSw2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19hcHBsaWNhdGlv
bl9jYWNoZV9tYW5hZ2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfYXBwbGljYXRpb25fY2FjaGVf
bWFuYWdlcl9wcml2YXRlX2gKKworI2luY2x1ZGUgIldLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIu
aCIKKyNpbmNsdWRlICJXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4uaCIKKyNpbmNs
dWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0cnVjdCBfRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09y
aWdpbnNfQXN5bmNfR2V0X0NvbnRleHQgeworICAgIGNvbnN0IEV3a19BcHBsaWNhdGlvbl9DYWNo
ZV9NYW5hZ2VyKiBtYW5hZ2VyOworICAgIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9PcmlnaW5zX0dl
dF9DYiBjYWxsYmFjazsKKyAgICB2b2lkKiB1c2VyRGF0YTsKKworICAgIF9Fd2tfQXBwbGljYXRp
b25fQ2FjaGVfT3JpZ2luc19Bc3luY19HZXRfQ29udGV4dChjb25zdCBFd2tfQXBwbGljYXRpb25f
Q2FjaGVfTWFuYWdlciogbWFuYWdlciwgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfR2V0
X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKKyAgICAgICAgOiBtYW5hZ2VyKG1hbmFnZXIp
CisgICAgICAgICwgY2FsbGJhY2soY2FsbGJhY2spCisgICAgICAgICwgdXNlckRhdGEodXNlckRh
dGEpCisgICAgeyB9Cit9OworCit0eXBlZGVmIHN0cnVjdCBfRXdrX0FwcGxpY2F0aW9uX0NhY2hl
X09yaWdpbnNfQXN5bmNfR2V0X0NvbnRleHQgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNf
QXN5bmNfR2V0X0NvbnRleHQ7CisKK2NsYXNzIEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdl
cj4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViQ29udGV4dD4gY29udGV4dCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFd2tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlcihjb250ZXh0LT5hcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5KCkp
KTsKKyAgICB9CisKKyAgICBFaW5hX0xpc3QqIGNyZWF0ZU9yaWdpbkxpc3QoV0tBcnJheVJlZiB3
a0xpc3QpIGNvbnN0OworICAgIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnMoV0tBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zRnVuY3Rpb24gY2Fs
bGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEV3
a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkq
KTsKKworICAgIFJlZlB0cjxXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5PiBtX2FwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyOworICAgIG11dGFibGUgSGFzaE1hcDxXS1NlY3VyaXR5T3JpZ2lu
UmVmLCBSZWZQdHI8RXdrX1NlY3VyaXR5X09yaWdpbj4gPiBtX3dyYXBwZXJDYWNoZTsKK307Cisj
ZW5kaWYgLy8gZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggMmEy
MjIxMTk4ZDM3YjI3ZTdlODBlNjlmYTE2Mzg5ZDk1ZmE0ZjJiMi4uZWM4ZDUzMjkzMWE2MTcwYTA5
YzJjZmNhOGU4ODMxNWIyZmU4YjMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIldl
YkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJT
b3VwUmVxdWVzdE1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgImV3a19hcHBsaWNhdGlvbl9jYWNo
ZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfZGF0
YWJhc2VfbWFuYWdlcl9wcml2YXRlLmgiCkBAIC02Myw2ICs2NCw3IEBAIHN0YXRpYyBpbmxpbmUg
Q29udGV4dE1hcCYgY29udGV4dE1hcCgpCiAKIEV3a0NvbnRleHQ6OkV3a0NvbnRleHQoUGFzc1Jl
ZlB0cjxXZWJDb250ZXh0PiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAg
LCBtX2FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpj
cmVhdGUobV9jb250ZXh0KSkKICAgICAsIG1fZGF0YWJhc2VNYW5hZ2VyKEV3a0RhdGFiYXNlTWFu
YWdlcjo6Y3JlYXRlKG1fY29udGV4dCkpCiAgICAgLCBtX3N0b3JhZ2VNYW5hZ2VyKEV3a1N0b3Jh
Z2VNYW5hZ2VyOjpjcmVhdGUobV9jb250ZXh0KSkKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMp
CkBAIC0yMDgsNiArMjEwLDEzIEBAIHZvaWQgRXdrQ29udGV4dDo6c2V0QWRkaXRpb25hbFBsdWdp
blBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogfQogI2VuZGlmCiAKK0V3a19BcHBsaWNhdGlvbl9D
YWNoZV9NYW5hZ2VyKiBld2tfY29udGV4dF9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2dldChj
b25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09S
X1JFVFVSTihjb25zdCBFd2tDb250ZXh0LCBld2tDb250ZXh0LCBpbXBsLCAwKTsKKworICAgIHJl
dHVybiBjb25zdF9jYXN0PEV3a0NvbnRleHQqPihpbXBsKS0+YXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIoKTsKK30KKwogRXdrX0Nvb2tpZV9NYW5hZ2VyKiBld2tfY29udGV4dF9jb29raWVfbWFuYWdl
cl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiB7CiAgICAgRVdLX09CSl9HRVRf
SU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrQ29udGV4dCwgZXdrQ29udGV4dCwgaW1wbCwgMCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAppbmRleCA1
ZGViNWM0ZjBkMGFiNWJjODNlNDc5Mzg1MjM2Y2EwZjU1MzQ1OTI5Li43NzZiZDk0ZGFiMWI1ZGEw
ZjM2ZWZiMTM2OTY3NWEzZTY2ZjVjOWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpZm5kZWYgZXdrX2Nv
bnRleHRfaAogI2RlZmluZSBld2tfY29udGV4dF9oCiAKKyNpbmNsdWRlICJld2tfYXBwbGljYXRp
b25fY2FjaGVfbWFuYWdlci5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlci5oIgogI2lu
Y2x1ZGUgImV3a19kYXRhYmFzZV9tYW5hZ2VyLmgiCiAjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0
YWJhc2UuaCIKQEAgLTE0OCw2ICsxNDksMTUgQEAgRUFQSSBFd2tfQ29udGV4dCAqZXdrX2NvbnRl
eHRfbmV3KHZvaWQpOwogRUFQSSBFd2tfQ29udGV4dCAqZXdrX2NvbnRleHRfbmV3X3dpdGhfaW5q
ZWN0ZWRfYnVuZGxlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CiAKIC8qKgorICogR2V0cyB0aGUg
YXBwbGljYXRpb24gY2FjaGUgbWFuYWdlciBpbnN0YW5jZSBmb3IgdGhpcyBAYSBjb250ZXh0Lgor
ICoKKyAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHF1ZXJ5CisgKgorICogQHJl
dHVybiBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciBvYmplY3QgaW5zdGFuY2Ugb3IgQGMg
TlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqLworRUFQSSBFd2tfQXBwbGljYXRpb25fQ2FjaGVf
TWFuYWdlciAqZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQoY29uc3Qg
RXdrX0NvbnRleHQgKmNvbnRleHQpOworCisvKioKICAqIEdldHMgdGhlIGNvb2tpZSBtYW5hZ2Vy
IGluc3RhbmNlIGZvciB0aGlzIEBhIGNvbnRleHQuCiAgKgogICogQHBhcmFtIGNvbnRleHQgY29u
dGV4dCBvYmplY3QgdG8gcXVlcnkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKaW5kZXggMjFhMWM1MTc1NWY5NTQxODk4
NDIxOWExMTk0MGY1NmM0NGFiZjUwMC4uZDhkYTFiZmVhYTgyNzg4OGFkODBhYjZmM2EwYzA1NTJj
Yzc3NTc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHRfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0X3ByaXZhdGUuaApAQCAtNTUsNiArNTUsOCBAQCBwdWJsaWM6CiAKICAgICB+
RXdrQ29udGV4dCgpOwogCisgICAgaW5saW5lIEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKiBh
cHBsaWNhdGlvbkNhY2hlTWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIuZ2V0KCk7IH0KKwogICAgIEV3a0Nvb2tpZU1hbmFnZXIqIGNvb2tpZU1hbmFnZXIo
KTsKIAogICAgIEV3a0RhdGFiYXNlTWFuYWdlciogZGF0YWJhc2VNYW5hZ2VyKCk7CkBAIC04OSw2
ICs5MSw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8V2ViQ29udGV4dD4gbV9jb250ZXh0Owog
CisgICAgT3duUHRyPEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyPiBtX2FwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyOwogICAgIE93blB0cjxFd2tDb29raWVNYW5hZ2VyPiBtX2Nvb2tpZU1hbmFnZXI7
CiAgICAgT3duUHRyPEV3a0RhdGFiYXNlTWFuYWdlcj4gbV9kYXRhYmFzZU1hbmFnZXI7CiAgICAg
T3duUHRyPEV3a0Zhdmljb25EYXRhYmFzZT4gbV9mYXZpY29uRGF0YWJhc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VX
SzJVbml0VGVzdFNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5jcHAKaW5kZXggNGVmNGNmNzZm
Nzc0MWU3MzU0NGQyNzE4ODNlMThkMTM1YjE3ZTI5ZC4uYmQ4YzY5MzAzMWM5MmM5NDRjZjFjMjgy
Njc0YjljZjQwMTZjNWVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVu
aXRUZXN0U2VydmVyLmNwcApAQCAtNTQsMyArNTQsOCBAQCBDU3RyaW5nIEVXSzJVbml0VGVzdFNl
cnZlcjo6Z2V0VVJMRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKSBjb25zdAogCiAgICAgcmV0dXJu
IHVybFN0cmluZzsKIH0KKwordW5zaWduZWQgRVdLMlVuaXRUZXN0U2VydmVyOjpwb3J0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc291cF9zZXJ2ZXJfZ2V0X3BvcnQobV9zb3VwU2VydmVyKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRU
ZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oCmluZGV4IGI5
NjdjZTQwOWJhZDlhNDE0ZDAxNGJhNzc4MzBiYzdmMjA2ZGZlNzguLjNkNWU2MmYyMWY4ZDZkYTNl
YzE3NGJiNzcyNDMzZGRkYTRlMGY1MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9F
V0syVW5pdFRlc3RTZXJ2ZXIuaApAQCAtMzEsNiArMzEsNyBAQCBwdWJsaWM6CiAKICAgICBDU3Ry
aW5nIGdldFVSTEZvclBhdGgoY29uc3QgY2hhciogcGF0aCkgY29uc3Q7CiAgICAgdm9pZCBydW4o
U291cFNlcnZlckNhbGxiYWNrKTsKKyAgICB1bnNpZ25lZCBwb3J0KCkgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgU291cFNlcnZlciogbV9zb3VwU2VydmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2FwcGxpY2F0aW9uX2NhY2hl
X21hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVz
dF9ld2syX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2N2MyZWE2
NWY5NDE3ZTlkYTFkNjVmMjMzYTQzNDhkNjQ2OTZjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfYXBwbGljYXRpb25f
Y2FjaGVfbWFuYWdlci5jcHAKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRl
ICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiVW5p
dFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlf
b3JpZ2luLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0OworCitzdHJ1Y3QgT3JpZ2luRGF0
YSB7CisgICAgRWluYV9MaXN0KiBvcmlnaW5MaXN0OworICAgIEV3a19BcHBsaWNhdGlvbl9DYWNo
ZV9NYW5hZ2VyKiBtYW5hZ2VyOworICAgIGJvb2wgZGlkUmVjZWl2ZU9yaWdpbnNDYWxsYmFjazsK
KyAgICBib29sIGlzU3luY2hyb25pemVkOworICAgIHVuc2lnbmVkIHRpbWVvdXRTZWNvbmRzOwor
ICAgIGNvbnN0IGNoYXIqIGV4cGVjdGVkUHJvdG9jb2w7CisgICAgY29uc3QgY2hhciogZXhwZWN0
ZWRIb3N0OworICAgIGNvbnN0IHVuc2lnbmVkIGV4cGVjdGVkUG9ydDsKKworICAgIE9yaWdpbkRh
dGEoRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXIsIGNvbnN0IGNoYXIqIHBy
b3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBjb25zdCB1bnNpZ25lZCBwb3J0KQorICAgICAgICA6
IG9yaWdpbkxpc3QoMCkKKyAgICAgICAgLCBtYW5hZ2VyKG1hbmFnZXIpCisgICAgICAgICwgZGlk
UmVjZWl2ZU9yaWdpbnNDYWxsYmFjayhmYWxzZSkKKyAgICAgICAgLCBpc1N5bmNocm9uaXplZChm
YWxzZSkKKyAgICAgICAgLCB0aW1lb3V0U2Vjb25kcygxMCkKKyAgICAgICAgLCBleHBlY3RlZFBy
b3RvY29sKHByb3RvY29sKQorICAgICAgICAsIGV4cGVjdGVkSG9zdChob3N0KQorICAgICAgICAs
IGV4cGVjdGVkUG9ydChwb3J0KQorICAgIHsgfQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgYXBw
bGljYXRpb25DYWNoZUh0bWxbXSA9CisgICAgIjxodG1sIG1hbmlmZXN0PSd0ZXN0LmFwcGNhY2hl
Jz4iCisgICAgIjxoZWFkPiIKKyAgICAiPHRpdGxlPmFwcGxpY2F0aW9uIGNhY2hlIHRlc3Q8L3Rp
dGxlPiIKKyAgICAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiIKKyAgICAic2V0VGlt
ZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb2NrJykudmFsdWUg
PSBuZXcgRGF0ZSgpOyB9LCAxMDAwKTsiCisgICAgIjwvc2NyaXB0PiIKKyAgICAiPGxpbmsgcmVs
PSdzdHlsZXNoZWV0JyBocmVmPSdjbG9jay5jc3MnPiIKKyAgICAiPC9oZWFkPiIKKyAgICAiPGJv
ZHk+IgorICAgICI8cD4gVGhlIHRpbWUgaXM6IDxvdXRwdXQgaWQ9J2Nsb2NrJz48L291dHB1dD48
L3A+IgorICAgICI8L2JvZHk+IgorICAgICI8L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyIGFw
cGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFtdID0gIkNBQ0hFIE1BTklGRVNUXG4iCisgICAgImFwcGxp
Y2F0aW9uX2NhY2hlLmh0bWxcbiIKKyAgICAiY2xvY2suY3NzIjsKK3N0YXRpYyBjb25zdCBjaGFy
IGFwcGxpY2F0aW9uQ2FjaGVDc3NbXSA9ICJvdXRwdXQgeyBmb250OjJlbSBzYW5zLXNlcmlmOyB9
IjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVIdG1sRmlsZVtdID0gIi9hcHBs
aWNhdGlvbl9jYWNoZS5odG1sIjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVN
YW5pZmVzdEZpbGVbXSA9ICIvdGVzdC5hcHBjYWNoZSI7CitzdGF0aWMgY29uc3QgY2hhciBhcHBs
aWNhdGlvbkNhY2hlQ3NzRmlsZVtdID0gIi9jbG9jay5jc3MiOworCitzdGF0aWMgdm9pZCBnZXRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luc0NhbGxiYWNrKEVpbmFfTGlzdCogb3JpZ2lucywgRXdrX0Vy
cm9yKiBlcnJvciwgdm9pZCogdXNlckRhdGEpCit7CisgICAgQVNTRVJUX0ZBTFNFKGVycm9yKTsK
KworICAgIE9yaWdpbkRhdGEqIG9yaWdpbkRhdGEgPSBzdGF0aWNfY2FzdDxPcmlnaW5EYXRhKj4o
dXNlckRhdGEpOworICAgIG9yaWdpbkRhdGEtPmRpZFJlY2VpdmVPcmlnaW5zQ2FsbGJhY2sgPSB0
cnVlOworCisgICAgRWluYV9MaXN0KiBsOworICAgIHZvaWQqIGRhdGE7CisgICAgRUlOQV9MSVNU
X0ZPUkVBQ0gob3JpZ2lucywgbCwgZGF0YSkgeworICAgICAgICBvcmlnaW5EYXRhLT5vcmlnaW5M
aXN0ID0gZWluYV9saXN0X2FwcGVuZChvcmlnaW5EYXRhLT5vcmlnaW5MaXN0LCBkYXRhKTsKKyAg
ICAgICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luID0gc3RhdGljX2Nhc3Q8RXdrX1NlY3Vy
aXR5X09yaWdpbio+KGRhdGEpOworICAgICAgICBpZiAoIXN0cmNtcChld2tfc2VjdXJpdHlfb3Jp
Z2luX3Byb3RvY29sX2dldChvcmlnaW4pLCBvcmlnaW5EYXRhLT5leHBlY3RlZFByb3RvY29sKQor
ICAgICAgICAgICAgJiYgIXN0cmNtcChld2tfc2VjdXJpdHlfb3JpZ2luX2hvc3RfZ2V0KG9yaWdp
biksIG9yaWdpbkRhdGEtPmV4cGVjdGVkSG9zdCkKKyAgICAgICAgICAgICYmIGV3a19zZWN1cml0
eV9vcmlnaW5fcG9ydF9nZXQob3JpZ2luKSA9PSBvcmlnaW5EYXRhLT5leHBlY3RlZFBvcnQpIHsK
KyAgICAgICAgICAgICAgICBvcmlnaW5EYXRhLT5pc1N5bmNocm9uaXplZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICAgICAgfQorICAgIH0KK30K
K3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0Kiwg
Z3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQp
IHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
Tk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBFaW5hX1N0cmJ1
ZiogYm9keSA9IGVpbmFfc3RyYnVmX25ldygpOworCisgICAgaWYgKCFzdHJjbXAocGF0aCwgYXBw
bGljYXRpb25DYWNoZUh0bWxGaWxlKSkKKyAgICAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50
Zihib2R5LCBhcHBsaWNhdGlvbkNhY2hlSHRtbCwgMCk7CisgICAgZWxzZSBpZiAoIXN0cmNtcChw
YXRoLCBhcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RGaWxlKSkKKyAgICAgICAgZWluYV9zdHJidWZf
YXBwZW5kX3ByaW50Zihib2R5LCBhcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QsIDApOworICAgIGVs
c2UgaWYgKCFzdHJjbXAocGF0aCwgYXBwbGljYXRpb25DYWNoZUNzc0ZpbGUpKQorICAgICAgICBl
aW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGJvZHksIGFwcGxpY2F0aW9uQ2FjaGVDc3MsIDApOwor
ICAgIGVsc2UgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19OT1RfRk9VTkQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgZWluYV9zdHJidWZfZnJlZShib2R5KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBib2R5TGVuZ3RoID0g
ZWluYV9zdHJidWZfbGVuZ3RoX2dldChib2R5KTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgZWluYV9zdHJidWZf
c3RyaW5nX3N0ZWFsKGJvZHkpLCBib2R5TGVuZ3RoKTsKKyAgICBlaW5hX3N0cmJ1Zl9mcmVlKGJv
ZHkpOworCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSk7Cit9CisKK3N0YXRpYyBib29sIHRpbWVyQ2FsbGJhY2sodm9pZCogdXNlckRhdGEpCit7
CisgICAgT3JpZ2luRGF0YSogb3JpZ2luRGF0YSA9IHN0YXRpY19jYXN0PE9yaWdpbkRhdGEqPih1
c2VyRGF0YSk7CisKKyAgICBpZiAob3JpZ2luRGF0YS0+aXNTeW5jaHJvbml6ZWQgfHwgIS0tKG9y
aWdpbkRhdGEtPnRpbWVvdXRTZWNvbmRzKSkgeworICAgICAgICBlY29yZV9tYWluX2xvb3BfcXVp
dCgpOworICAgICAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworICAgIH0KKworICAg
IGlmIChvcmlnaW5EYXRhLT5kaWRSZWNlaXZlT3JpZ2luc0NhbGxiYWNrKSB7CisgICAgICAgIG9y
aWdpbkRhdGEtPmRpZFJlY2VpdmVPcmlnaW5zQ2FsbGJhY2sgPSBmYWxzZTsKKyAgICAgICAgZXdr
X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfb3JpZ2luc19nZXQob3JpZ2luRGF0YS0+bWFuYWdl
ciwgZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnNDYWxsYmFjaywgb3JpZ2luRGF0YSk7CisgICAg
fQorCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX1JFTkVXOworfQorCitURVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfb3JpZ2luc19nZXQpCit7
CisgICAgRXZhc19PYmplY3QqIHZpZXcgPSB3ZWJWaWV3KCk7CisgICAgT3duUHRyPEVXSzJVbml0
VGVzdFNlcnZlcj4gaHR0cFNlcnZlciA9IGFkb3B0UHRyKG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXIp
OworICAgIGh0dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBBU1NFUlRfVFJV
RShsb2FkVXJsU3luYyhodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKGFwcGxpY2F0aW9uQ2FjaGVI
dG1sRmlsZSkuZGF0YSgpKSk7CisKKyAgICBPcmlnaW5EYXRhIG9yaWdpbkRhdGEoZXdrX2NvbnRl
eHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQoZXdrX3ZpZXdfY29udGV4dF9nZXQodmll
dykpLCAiaHR0cCIsICIxMjcuMC4wLjEiLCBodHRwU2VydmVyLT5wb3J0KCkpOworICAgIEFTU0VS
VF9UUlVFKGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX29yaWdpbnNfZ2V0KG9yaWdpbkRh
dGEubWFuYWdlciwgZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnNDYWxsYmFjaywgJm9yaWdpbkRh
dGEpKTsKKyAgICBFY29yZV9UaW1lciogYXBwbGljYXRpb25fY2FjaGVfdGltZXIgPSBlY29yZV90
aW1lcl9hZGQoMSwgcmVpbnRlcnByZXRfY2FzdDxFY29yZV9UYXNrX0NiPih0aW1lckNhbGxiYWNr
KSwgJm9yaWdpbkRhdGEpOworCisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisgICAgaWYg
KGFwcGxpY2F0aW9uX2NhY2hlX3RpbWVyKQorICAgICAgICBlY29yZV90aW1lcl9kZWwoYXBwbGlj
YXRpb25fY2FjaGVfdGltZXIpOworCisgICAgQVNTRVJUX1RSVUUob3JpZ2luRGF0YS5pc1N5bmNo
cm9uaXplZCk7CisgICAgQVNTRVJUX0xFKDEsIGVpbmFfbGlzdF9jb3VudChvcmlnaW5EYXRhLm9y
aWdpbkxpc3QpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcAppbmRleCA5Y2Q0ZTYxNmQ1NjQ1
ODk3MDkxODhhYjYyZDdmYWI0NDQ5NjRmM2JhLi44ODA4NjY4YWI4N2NlODNmZDZmMmI3MTcxNWRm
ZjBkNmQ3ZTc1ZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwCkBAIC00MSw2ICs0MSwxNCBA
QCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQpCiAgICAg
QVNTRVJUX0VRKGRlZmF1bHRDb250ZXh0LCBld2tfY29udGV4dF9kZWZhdWx0X2dldCgpKTsKIH0K
IAorVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hl
X21hbmFnZXJfZ2V0KQoreworICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29u
dGV4dF9nZXQod2ViVmlldygpKTsKKyAgICBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciog
YXBwbGljYXRpb25DYWNoZU1hbmFnZXIgPSBld2tfY29udGV4dF9hcHBsaWNhdGlvbl9jYWNoZV9t
YW5hZ2VyX2dldChjb250ZXh0KTsKKyAgICBBU1NFUlRfVFJVRShhcHBsaWNhdGlvbkNhY2hlTWFu
YWdlcik7CisgICAgQVNTRVJUX0VRKGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLCBld2tfY29udGV4
dF9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2dldChjb250ZXh0KSk7Cit9CisKIFRFU1RfRihF
V0syVW5pdFRlc3RCYXNlLCBld2tfY29udGV4dF9jb29raWVfbWFuYWdlcl9nZXQpCiB7CiAgICAg
RXdrX0NvbnRleHQqIGNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226870</attachid>
            <date>2014-03-16 19:09:52 -0700</date>
            <delta_ts>2014-03-16 20:16:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102853-20140317110929.patch</filename>
            <type>text/plain</type>
            <size>27400</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY1NTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDk5OWVhMjYwNjdkNTRj
NDkxMmQ0YmE3NzhmNjAwYjJmZTFlNTI1OC4uMTdmZDg2N2MwYmQ3NTY1NWYwODUzMjJhYTJkZGU1
OTNkNTJhNDI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTAzLTE2ICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEFk
ZCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlciBBUElzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI4NTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBhcHBsaWNhdGlvbiBjYWNo
ZSBtYW5hZ2VyIHRvIGdldCBsaXN0IG9mIG9yaWdpbnMgd2hpY2ggc3RvcmVzCisgICAgICAgIGFw
cGxpY2F0aW9uIGNhY2hlIGFuZCByZW1vdmUgc3BlY2lmaWVkIG9yaWdpbiBvciBhbGwuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZTogQWRkZWQgbmV3bHkgYWRkZWQgZmlsZXMuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpFd2tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlcik6CisgICAgICAgIChFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6
fkV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKEdldF9PcmlnaW5zX0FzeW5j
X0RhdGE6OkdldF9PcmlnaW5zX0FzeW5jX0RhdGEpOgorICAgICAgICAoZ2V0QXBwbGljYXRpb25D
YWNoZU9yaWdpbnNDYWxsYmFjayk6CisgICAgICAgIChld2tfYXBwbGljYXRpb25fY2FjaGVfbWFu
YWdlcl9hc3luY19vcmlnaW5zX2dldCk6CisgICAgICAgIChld2tfYXBwbGljYXRpb25fY2FjaGVf
b3JpZ2luc19mcmVlKToKKyAgICAgICAgKGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2Rl
bGV0ZV9hbGwpOgorICAgICAgICAoZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZGVsZXRl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFu
YWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRp
b25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrQXBwbGljYXRp
b25DYWNoZU1hbmFnZXI6OmltcGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcDoKKyAgICAgICAgKEV3a0NvbnRleHQ6OmFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
KToKKyAgICAgICAgKGV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZ2V0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaDoKKyAgICAgICAgKEV3a1Nl
Y3VyaXR5T3JpZ2luOjp3a1NlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5jcHA6CisgICAgICAg
IChFV0syVW5pdFRlc3RTZXJ2ZXI6OnBvcnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIu
Y3BwOgorICAgICAgICBBZGRlZCB0byB0ZXN0IGFwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuCisg
ICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChnZXRPcmlnaW5zQ2FsbGJhY2spOgor
ICAgICAgICAodGltZXJDYWxsYmFjayk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcDoKKyAgICAgICAgQWRk
ZWQgdGVzdCBjYXNlIHRvIHRlc3QgZ2V0dGVyIG9mIGFwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIu
CisgICAgICAgIChURVNUX0YpOgorCiAyMDE0LTAzLTEyICBEZWFuIEphY2tzb24gIDxkaW5vQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV2ViR0xdIFdlYktpdDEgKyBXZWJLaXQyIGlPUyBjbGllbnRz
IHNob3VsZCBjaGVjayBsb2FkIHBvbGljeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBm
OTYyNWQ5ODVlNGJiMmExMmZiZTg0MmQ5N2IxNTJkZWJkZTAyYmQyLi5lOTM3NzAwODgyYWZmYmVh
NmZiMWMwODg1Y2VkOTcyNjMwNTM3MTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
NzMsNiArNzMsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL0dlc3R1cmVSZWNvZ25p
emVyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1NuYXBzaG90SW1hZ2VHTC5jcHAKKyAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfYXV0aF9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKQEAgLTMzNiw2ICszMzcsNyBAQCBzZXQoRVdlYktp
dDJfSEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2F1dGhfcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgiCiAgICAgIiR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJk
X2xpc3RfaXRlbS5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaCIKICAgICAiJHtDTUFLRV9D
VVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb2xvcl9waWNrZXIuaCIK
ICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9tZW51LmgiCkBAIC00NDgsNiArNDUwLDcgQEAgdGFyZ2V0X2xpbmtf
bGlicmFyaWVzKGV3azJVbml0VGVzdFV0aWxzICR7RVdLMlVuaXRUZXN0c19MSUJSQVJJRVN9KQog
IyBUaGUgImV3ayIgb24gdGhlIHRlc3QgbmFtZSBuZWVkcyB0byBiZSBzdWZmaXhlZCB3aXRoICIy
Iiwgb3RoZXJ3aXNlIGl0CiAjIHdpbGwgY2xhc2ggd2l0aCB0ZXN0cyBmcm9tIHRoZSBXZWJLaXQg
MSB0ZXN0IHN1aXRlLgogc2V0KEVXSzJVbml0VGVzdHNfQklOQVJJRVMKKyAgICB0ZXN0X2V3azJf
YXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcgogICAgIHRlc3RfZXdrMl9hdXRoX3JlcXVlc3QKICAg
ICB0ZXN0X2V3azJfYmFja19mb3J3YXJkX2xpc3QKICAgICB0ZXN0X2V3azJfY29sb3JfcGlja2Vy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzI2OGQ0YWQ4
YjMzNDg2Njg0ZWYxNGFjNzM2YjMyODk0MjJkZWU2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2Vy
LmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJl
d2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5oIgorCisjaW5jbHVkZSAiV0tBcnJheS5oIgor
I2luY2x1ZGUgImV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX3ByaXZhdGUuaCIKKyNpbmNs
dWRlICJld2tfb2JqZWN0LmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRl
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0V3a0FwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyOjpFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcihXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
UmVmIGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKQorICAgIDogbV9hcHBsaWNhdGlvbkNhY2hlTWFu
YWdlcihhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcikKK3sKK30KKworRXdrQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXI6On5Fd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcigpCit7Cit9CisKK3N0cnVjdCBH
ZXRfT3JpZ2luc19Bc3luY19EYXRhIHsKKyAgICBFd2tfQXBwbGljYXRpb25fQ2FjaGVfQXN5bmNf
T3JpZ2luc19HZXRfQ2IgY2FsbGJhY2s7CisgICAgdm9pZCogdXNlckRhdGE7CisKKyAgICBHZXRf
T3JpZ2luc19Bc3luY19EYXRhKEV3a19BcHBsaWNhdGlvbl9DYWNoZV9Bc3luY19PcmlnaW5zX0dl
dF9DYiBjYWxsYmFjaywgdm9pZCogdXNlckRhdGEpCisgICAgICAgIDogY2FsbGJhY2soY2FsbGJh
Y2spCisgICAgICAgICwgdXNlckRhdGEodXNlckRhdGEpCisgICAgeyB9Cit9OworCitzdGF0aWMg
dm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0NhbGxiYWNrKFdLQXJyYXlSZWYgd2tPcmln
aW5zLCBXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQoreworICAgIEVpbmFfTGlzdCogb3JpZ2lu
cyA9IG51bGxwdHI7CisgICAgYXV0byBjYWxsYmFja0RhdGEgPSBzdGQ6OnVuaXF1ZV9wdHI8R2V0
X09yaWdpbnNfQXN5bmNfRGF0YT4oc3RhdGljX2Nhc3Q8R2V0X09yaWdpbnNfQXN5bmNfRGF0YSo+
KGNvbnRleHQpKTsKKworICAgIGNvbnN0IHNpemVfdCBvcmlnaW5zQ291bnQgPSBXS0FycmF5R2V0
U2l6ZSh3a09yaWdpbnMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3JpZ2luc0NvdW50
OyArK2kpIHsKKyAgICAgICAgV0tTZWN1cml0eU9yaWdpblJlZiBzZWN1cml0eU9yaWdpblJlZiA9
IHN0YXRpY19jYXN0PFdLU2VjdXJpdHlPcmlnaW5SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3
a09yaWdpbnMsIGkpKTsKKyAgICAgICAgb3JpZ2lucyA9IGVpbmFfbGlzdF9hcHBlbmQob3JpZ2lu
cywgRXdrU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShzZWN1cml0eU9yaWdpblJlZikubGVha1JlZigp
KTsKKyAgICB9CisKKyAgICBjYWxsYmFja0RhdGEtPmNhbGxiYWNrKG9yaWdpbnMsIGNhbGxiYWNr
RGF0YS0+dXNlckRhdGEpOworfQorCit2b2lkIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2Vy
X2FzeW5jX29yaWdpbnNfZ2V0KGNvbnN0IEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyKiBt
YW5hZ2VyLCBFd2tfQXBwbGljYXRpb25fQ2FjaGVfQXN5bmNfT3JpZ2luc19HZXRfQ2IgY2FsbGJh
Y2ssIHZvaWQqIHVzZXJEYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG1h
bmFnZXIpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNhbGxiYWNrKTsKKworICAg
IEdldF9PcmlnaW5zX0FzeW5jX0RhdGEqIGNhbGxiYWNrRGF0YSA9IG5ldyBHZXRfT3JpZ2luc19B
c3luY19EYXRhKGNhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgV0tBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKG1hbmFnZXItPmltcGwoKSwgY2FsbGJhY2tE
YXRhLCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0NhbGxiYWNrKTsKK30KKwordm9pZCBld2tf
YXBwbGljYXRpb25fY2FjaGVfb3JpZ2luc19mcmVlKEVpbmFfTGlzdCogb3JpZ2lucykKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihvcmlnaW5zKTsKKworICAgIHZvaWQqIG9yaWdp
biA9IDA7CisgICAgRUlOQV9MSVNUX0ZSRUUob3JpZ2lucywgb3JpZ2luKQorICAgICAgICBld2tf
b2JqZWN0X3VucmVmKHN0YXRpY19jYXN0PEV3a1NlY3VyaXR5T3JpZ2luKj4ob3JpZ2luKSk7Cit9
CisKK0VpbmFfQm9vbCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9kZWxldGVfYWxsKEV3
a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChtYW5hZ2VyLCBmYWxzZSk7CisKKyAgICBXS0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyRGVsZXRlQWxsRW50cmllcyhtYW5hZ2VyLT5pbXBsKCkpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9k
ZWxldGUoRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXIsIEV3a19TZWN1cml0
eV9PcmlnaW4qIG9yaWdpbikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
bWFuYWdlciwgZmFsc2UpOworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKEV3a1NlY3Vy
aXR5T3JpZ2luLCBvcmlnaW4sIGltcGwsIGZhbHNlKTsKKworICAgIFdLQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3JpZ2luKG1hbmFnZXItPmltcGwoKSwgaW1wbC0+d2tT
ZWN1cml0eU9yaWdpbigpKTsKKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9j
YWNoZV9tYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU2ZTM2ZWM1MDJkYjMzNTg3MWI3MmRlYjUyYzM4
YjRjMDI4MTg0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmgKQEAgLTAsMCArMSwxMDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgICAgZXdrX2FwcGxpY2F0aW9uX2Nh
Y2hlX21hbmFnZXIuaAorICogQGJyaWVmICAgRGVzY3JpYmVzIHRoZSBFd2sgQXBwbGljYXRpb24g
Q2FjaGUgTWFuYWdlciBBUEkuCisgKi8KKworI2lmbmRlZiBld2tfYXBwbGljYXRpb25fY2FjaGVf
bWFuYWdlcl9oCisjZGVmaW5lIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2gKKworI2lu
Y2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW4uaCIKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBl
IG5hbWUgZm9yIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyICovCit0eXBlZGVmIHN0cnVj
dCBFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdl
cjsKKworLyoqCisgKiBAdHlwZWRlZiBFd2tfQXBwbGljYXRpb25fQ2FjaGVfQXN5bmNfT3JpZ2lu
c19HZXRfQ2IgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX0FzeW5jX09yaWdpbnNfR2V0X0NiCisgKiBA
YnJpZWYgQ2FsbGJhY2sgZm9yIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2FzeW5jX29y
aWdpbnNfZ2V0CisgKgorICogQG5vdGUgVGhlIEBhIG9yaWdpbnMgc2hvdWxkIGJlIGZyZWVkIGxp
a2UgYmVsb3cgY29kZSBhZnRlciB1c2UuCisgKgorICogQGNvZGUKKyAqCisgKiBzdGF0aWMgdm9p
ZAorICogX29yaWdpbnNfZ2V0X2NiKEVpbmFfTGlzdCogb3JpZ2lucywgZGF0YSkKKyAqIHsKKyAq
ICAgIC8vIC4uLgorICoKKyAqICAgIHZvaWQgKm9yaWdpbjsKKyAqICAgIEVJTkFfTElTVF9GUkVF
KG9yaWdpbnMsIG9yaWdpbikKKyAqICAgICAgZXdrX29iamVjdF91bnJlZigoRXdrX09iamVjdCop
b3JpZ2luKTsKKyAqIH0KKyAqCisgKiBAZW5kY29kZQorICovCit0eXBlZGVmIHZvaWQgKCpFd2tf
QXBwbGljYXRpb25fQ2FjaGVfQXN5bmNfT3JpZ2luc19HZXRfQ2IpKEVpbmFfTGlzdCogb3JpZ2lu
cywgdm9pZCogdXNlcl9kYXRhKTsKKworLyoqCisgKiBSZXF1ZXN0cyBmb3IgZ2V0dGluZyB3ZWIg
YXBwbGljYXRpb24gY2FjaGUgb3JpZ2lucy4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0
IG9iamVjdAorICogQHBhcmFtIHJlc3VsdF9jYWxsYmFjayBjYWxsYmFjayB0byBnZXQgd2ViIGFw
cGxpY2F0aW9uIGNhY2hlIG9yaWdpbnMKKyAqIEBwYXJhbSB1c2VyX2RhdGEgdXNlcl9kYXRhIHdp
bGwgYmUgcGFzc3NlZCB3aGVuIHJlc3VsdF9jYWxsYmFjayBpcyBjYWxsZWQKKyAqCisgKiBAcmV0
dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzZnVsIHJlcXVlc3Qgb3IgQGMgRUlOQV9GQUxTRSBv
biBmYWlsdXJlCisgKgorICogQHNlZSBFd2tfQXBwbGljYXRpb25fQ2FjaGVfQXN5bmNfT3JpZ2lu
c19HZXRfQ2IKKyAqLworRUFQSSB2b2lkIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2Fz
eW5jX29yaWdpbnNfZ2V0KGNvbnN0IEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyICptYW5h
Z2VyLCBFd2tfQXBwbGljYXRpb25fQ2FjaGVfQXN5bmNfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ss
IHZvaWQgKmRhdGEpOworCisvKioKKyAqIFJlcXVlc3RzIGZvciBkZWxldGluZyBhbGwgd2ViIGFw
cGxpY2F0aW9uIGNhY2hlcy4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVjdAor
ICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3NmdWwgcmVxdWVzdCBvciBAYyBF
SU5BIEZBTFNFIG9uIGZhaWx1cmUKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX2FwcGxpY2F0aW9u
X2NhY2hlX21hbmFnZXJfZGVsZXRlX2FsbChFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciAq
bWFuYWdlcik7CisKKy8qKgorICogUmVxdWVzdHMgZm9yIGRlbGV0aW5nIHdlYiBhcHBsaWNhdGlv
biBjYWNoZSBmb3Igb3JpZ2luLgorICoKKyAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgb2JqZWN0
CisgKiBAcGFyYW0gb3JpZ2luIGFwcGxpY2F0aW9uIGNhY2hlIG9yaWdpbgorICoKKyAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3NmdWwgcmVxdWVzdCBvciBAYyBFSU5BX0ZBTFNFIG9u
IGZhaWx1cmUKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFn
ZXJfZGVsZXRlKEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyICptYW5hZ2VyLCBFd2tfU2Vj
dXJpdHlfT3JpZ2luKiBvcmlnaW4pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgor
CisjZW5kaWYgLy8gZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21h
bmFnZXJfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Fw
cGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmMjJjMDA4Zjc4
MmNlMGI4ZTNjNjZkNzQ5YzU2Nzg1YmJkMjA1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9w
cml2YXRlLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2FwcGxpY2F0aW9uX2NhY2hl
X21hbmFnZXJfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2Vy
X3ByaXZhdGVfaAorCisjaW5jbHVkZSAiV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKworY2xh
c3MgRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEV3
a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgYXBw
bGljYXRpb25DYWNoZU1hbmFnZXIpOworICAgIH5Fd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcigp
OworCisgICAgV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiBpbXBsKCkgY29uc3QgeyByZXR1
cm4gbV9hcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFdL
UmV0YWluUHRyPFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWY+IG1fYXBwbGljYXRpb25DYWNo
ZU1hbmFnZXI7Cit9OworCisjZW5kaWYgLy8gZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJf
cHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dC5jcHAKaW5kZXggYTQ1NWI3YTk3ZmIzYmE5YzQzNGVjYjkxMjFiY2U4NDM1MzcwOGQ0OS4u
MjNmYzZlYzNhODRiNjBlZTE5NWI3OGMyMmQ2ZTFlZmY0MDcwMWVjNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMjcsMTEgKzI3
LDEzIEBACiAjaW5jbHVkZSAiTmV0d29ya0luZm9Qcm92aWRlci5oIgogI2luY2x1ZGUgIlJlcXVl
c3RNYW5hZ2VyQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAi
V0tDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldLQ29udGV4dFNvdXAuaCIKICNpbmNsdWRl
ICJXS051bWJlci5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4
dC5oIgogI2luY2x1ZGUgIldlYkljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgImV3a19hcHBsaWNh
dGlvbl9jYWNoZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2
YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRl
ICJld2tfZGF0YWJhc2VfbWFuYWdlcl9wcml2YXRlLmgiCkBAIC0xMzksNiArMTQxLDE0IEBAIEV3
a0NvbnRleHQqIEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCkKICAgICByZXR1cm4gZGVmYXVs
dEluc3RhbmNlOwogfQogCitFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciogRXdrQ29udGV4dDo6
YXBwbGljYXRpb25DYWNoZU1hbmFnZXIoKQoreworICAgIGlmICghbV9hcHBsaWNhdGlvbkNhY2hl
TWFuYWdlcikKKyAgICAgICAgbV9hcHBsaWNhdGlvbkNhY2hlTWFuYWdlciA9IHN0ZDo6bWFrZV91
bmlxdWU8RXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXI+KFdLQ29udGV4dEdldEFwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyKG1fY29udGV4dC5nZXQoKSkpOworCisgICAgcmV0dXJuIG1fYXBwbGljYXRp
b25DYWNoZU1hbmFnZXIuZ2V0KCk7Cit9CisKIEV3a0Nvb2tpZU1hbmFnZXIqIEV3a0NvbnRleHQ6
OmNvb2tpZU1hbmFnZXIoKQogewogICAgIGlmICghbV9jb29raWVNYW5hZ2VyKQpAQCAtMjQ5LDYg
KzI1OSwxMyBAQCBKU0dsb2JhbENvbnRleHRSZWYgRXdrQ29udGV4dDo6anNHbG9iYWxDb250ZXh0
KCkKICAgICByZXR1cm4gbV9qc0dsb2JhbENvbnRleHQ7CiB9CiAKK0V3a19BcHBsaWNhdGlvbl9D
YWNoZV9NYW5hZ2VyKiBld2tfY29udGV4dF9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2dldChj
b25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAgICBFV0tfT0JKX0dFVF9JTVBMX09S
X1JFVFVSTihjb25zdCBFd2tDb250ZXh0LCBld2tDb250ZXh0LCBpbXBsLCBudWxscHRyKTsKKwor
ICAgIHJldHVybiBjb25zdF9jYXN0PEV3a0NvbnRleHQqPihpbXBsKS0+YXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIoKTsKK30KKwogRXdrX0Nvb2tpZV9NYW5hZ2VyKiBld2tfY29udGV4dF9jb29raWVf
bWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiB7CiAgICAgRVdLX09C
Sl9HRVRfSU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrQ29udGV4dCwgZXdrQ29udGV4dCwgaW1wbCwg
bnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfY29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHQuaAppbmRleCAxM2IxNmQzYzE0NjhkNGYwNDBhZmIwYmUwNjNiODgwZTkwM2Q3YmY1Li40Mjhk
N2YxYWUxY2EzZjM5ZDU2ZTI1NTBlOGI2YTBjM2IwMGIxMGIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKQEAgLTM3LDYgKzM3LDcgQEAKICNp
Zm5kZWYgZXdrX2NvbnRleHRfaAogI2RlZmluZSBld2tfY29udGV4dF9oCiAKKyNpbmNsdWRlICJl
d2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFu
YWdlci5oIgogI2luY2x1ZGUgImV3a19kYXRhYmFzZV9tYW5hZ2VyLmgiCiAjaW5jbHVkZSAiZXdr
X2Zhdmljb25fZGF0YWJhc2UuaCIKQEAgLTE2MSw2ICsxNjIsMTUgQEAgRUFQSSBFd2tfQ29udGV4
dCAqZXdrX2NvbnRleHRfbmV3KHZvaWQpOwogRUFQSSBFd2tfQ29udGV4dCAqZXdrX2NvbnRleHRf
bmV3X3dpdGhfaW5qZWN0ZWRfYnVuZGxlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CiAKIC8qKgor
ICogR2V0cyB0aGUgYXBwbGljYXRpb24gY2FjaGUgbWFuYWdlciBpbnN0YW5jZSBmb3IgdGhpcyBA
YSBjb250ZXh0LgorICoKKyAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHF1ZXJ5
LgorICoKKyAqIEByZXR1cm4gRXdrX0Nvb2tpZV9NYW5hZ2VyIG9iamVjdCBpbnN0YW5jZSBvciBA
YyBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqLworRUFQSSBFd2tfQXBwbGljYXRpb25fQ2Fj
aGVfTWFuYWdlciAqZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQoY29u
c3QgRXdrX0NvbnRleHQgKmNvbnRleHQpOworCisvKioKICAqIEdldHMgdGhlIGNvb2tpZSBtYW5h
Z2VyIGluc3RhbmNlIGZvciB0aGlzIEBhIGNvbnRleHQuCiAgKgogICogQHBhcmFtIGNvbnRleHQg
Y29udGV4dCBvYmplY3QgdG8gcXVlcnkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKaW5kZXggZmUzMzE0OTU2MjZhNjQz
ZDczY2EwMDNjZjkxOGU1NGE2N2E3ZWMzOC4uNDZjMzcyZTYzMjFjZDVjYzRiYzU2YzVjYmFjYzhm
MzQyNTRhZmIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHRfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaApAQCAtMzAsNiArMzAsNyBAQAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCitjbGFzcyBFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjsKIGNsYXNz
IEV3a0Nvb2tpZU1hbmFnZXI7CiBjbGFzcyBFd2tGYXZpY29uRGF0YWJhc2U7CiAKQEAgLTU3LDgg
KzU4LDggQEAgcHVibGljOgogCiAgICAgfkV3a0NvbnRleHQoKTsKIAorICAgIEV3a0FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyKiBhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcigpOwogICAgIEV3a0Nvb2tp
ZU1hbmFnZXIqIGNvb2tpZU1hbmFnZXIoKTsKLQogICAgIEV3a0RhdGFiYXNlTWFuYWdlciogZGF0
YWJhc2VNYW5hZ2VyKCk7CiAKICAgICBib29sIHNldEZhdmljb25EYXRhYmFzZURpcmVjdG9yeVBh
dGgoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeSk7CkBAIC0xMDAsNiArMTAxLDcgQEAg
cHJpdmF0ZToKIAogICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV9jb250ZXh0OwogCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyPiBtX2FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFd2tDb29raWVNYW5hZ2VyPiBt
X2Nvb2tpZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV3a0RhdGFiYXNlTWFuYWdlcj4g
bV9kYXRhYmFzZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV3a0Zhdmljb25EYXRhYmFz
ZT4gbV9mYXZpY29uRGF0YWJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oCmluZGV4IGU3
ODdjZTE1ZGUwZGQ2ZjFiNmFhY2U5NDdiMTA4ZDQ5NjI0YjFiOWUuLjU2ZjZjZjBmODJiMDdjYTI0
ZDMwZTM3OTgxOWYxN2RhN2Y4NWQ3YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oCkBA
IC00OSw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBjaGFyKiBwcm90b2NvbCgpIGNvbnN0
OwogICAgIHVpbnQzMl90IHBvcnQoKSBjb25zdDsKIAorICAgIFdLU2VjdXJpdHlPcmlnaW5SZWYg
d2tTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fd2tPcmlnaW4uZ2V0KCk7IH0KKwog
cHJpdmF0ZToKICAgICBleHBsaWNpdCBFd2tTZWN1cml0eU9yaWdpbihXS1NlY3VyaXR5T3JpZ2lu
UmVmIG9yaWdpblJlZik7CiAgICAgZXhwbGljaXQgRXdrU2VjdXJpdHlPcmlnaW4oY29uc3QgY2hh
ciogdXJsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVy
LmNwcAppbmRleCA0ZWY0Y2Y3NmY3NzQxZTczNTQ0ZDI3MTg4M2UxOGQxMzViMTdlMjlkLi5iZDhj
NjkzMDMxYzkyYzk0NGNmMWMyODI2NzRiOWNmNDAxNmM1ZWE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVz
dFNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
VW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuY3BwCkBAIC01NCwzICs1NCw4IEBAIENT
dHJpbmcgRVdLMlVuaXRUZXN0U2VydmVyOjpnZXRVUkxGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgp
IGNvbnN0CiAKICAgICByZXR1cm4gdXJsU3RyaW5nOwogfQorCit1bnNpZ25lZCBFV0syVW5pdFRl
c3RTZXJ2ZXI6OnBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBzb3VwX3NlcnZlcl9nZXRfcG9y
dChtX3NvdXBTZXJ2ZXIpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRU
ZXN0U2VydmVyLmgKaW5kZXggYjk2N2NlNDA5YmFkOWE0MTRkMDE0YmE3NzgzMGJjN2YyMDZkZmU3
OC4uODFkMjQ4Y2FhNTc1NTdjOWYwMDI0YjczNTU3ZjFkOGY1NDg0NjA3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0sy
VW5pdFRlc3RTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oCkBAIC0zMCw2ICszMCw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FV0syVW5pdFRlc3RTZXJ2ZXIoKTsKIAogICAgIENTdHJp
bmcgZ2V0VVJMRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBw
b3J0KCkgY29uc3Q7CisKICAgICB2b2lkIHJ1bihTb3VwU2VydmVyQ2FsbGJhY2spOwogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
dGVzdF9ld2syX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFn
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUyMGNmZDVhZGY4YmI3MmQ2Y2NhNDVmNTZmYmE2M2VlNDY3Njcy
Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy90ZXN0X2V3azJfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5jcHAKQEAgLTAsMCArMSwx
MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VX
SzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVu
dmlyb25tZW50LmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIu
aCIKKyNpbmNsdWRlIDxFV2ViS2l0Mi5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0
OworCitzdGF0aWMgY29uc3QgY2hhciBhcHBsaWNhdGlvbkNhY2hlSHRtbFtdID0KKyAgICAiPCFk
b2N0eXBlIGh0bWw+IgorICAgICI8aHRtbCBtYW5pZmVzdD0ndGVzdC5hcHBjYWNoZSc+IgorICAg
ICI8aGVhZD48bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9J2Nsb2NrLmNzcyc+PC9oZWFkPiIK
KyAgICAiPGJvZHk+QXBwbGljYXRpb24gQ2FjaGUgVGVzdDwvYm9keT4iCisgICAgIjwvaHRtbD4i
Oworc3RhdGljIGNvbnN0IGNoYXIgYXBwbGljYXRpb25DYWNoZU1hbmlmZXN0W10gPSAiQ0FDSEUg
TUFOSUZFU1RcbiIKKyAgICAiYXBwbGljYXRpb25fY2FjaGUuaHRtbFxuIgorICAgICJjbG9jay5j
c3MiOworc3RhdGljIGNvbnN0IGNoYXIgYXBwbGljYXRpb25DYWNoZUNzc1tdID0gIm91dHB1dCB7
IGZvbnQ6MmVtIHNhbnMtc2VyaWY7IH0iOworc3RhdGljIGNvbnN0IGNoYXIgYXBwbGljYXRpb25D
YWNoZUh0bWxGaWxlW10gPSAiL2FwcGxpY2F0aW9uX2NhY2hlLmh0bWwiOworc3RhdGljIGNvbnN0
IGNoYXIgYXBwbGljYXRpb25DYWNoZU1hbmlmZXN0RmlsZVtdID0gIi90ZXN0LmFwcGNhY2hlIjsK
K3N0YXRpYyBjb25zdCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVDc3NGaWxlW10gPSAiL2Nsb2NrLmNz
cyI7CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250
ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhP
RF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBFaW5h
X1N0cmJ1ZiogYm9keSA9IGVpbmFfc3RyYnVmX25ldygpOworCisgICAgaWYgKCFzdHJjbXAocGF0
aCwgYXBwbGljYXRpb25DYWNoZUh0bWxGaWxlKSkKKyAgICAgICAgZWluYV9zdHJidWZfYXBwZW5k
X3ByaW50Zihib2R5LCBhcHBsaWNhdGlvbkNhY2hlSHRtbCk7CisgICAgZWxzZSBpZiAoIXN0cmNt
cChwYXRoLCBhcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RGaWxlKSkKKyAgICAgICAgZWluYV9zdHJi
dWZfYXBwZW5kX3ByaW50Zihib2R5LCBhcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QpOworICAgIGVs
c2UgaWYgKCFzdHJjbXAocGF0aCwgYXBwbGljYXRpb25DYWNoZUNzc0ZpbGUpKQorICAgICAgICBl
aW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGJvZHksIGFwcGxpY2F0aW9uQ2FjaGVDc3MpOworICAg
IGVsc2UgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NU
QVRVU19OT1RfRk9VTkQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNz
YWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgZWluYV9zdHJidWZfZnJlZShib2R5KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBib2R5TGVuZ3RoID0gZWlu
YV9zdHJidWZfbGVuZ3RoX2dldChib2R5KTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQo
bWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgZWluYV9zdHJidWZfc3Ry
aW5nX3N0ZWFsKGJvZHkpLCBib2R5TGVuZ3RoKTsKKyAgICBlaW5hX3N0cmJ1Zl9mcmVlKGJvZHkp
OworCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9k
eSk7Cit9CisKK3N0cnVjdCBPcmlnaW5zRGF0YSB7CisgICAgRWluYV9MaXN0KiBpdGVtczsKKyAg
ICBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciogbWFuYWdlcjsKK307CisKK3N0YXRpYyB2
b2lkIGdldE9yaWdpbnNDYWxsYmFjayhFaW5hX0xpc3QqIG9yaWdpbnMsIHZvaWQqIGV2ZW50X2lu
Zm8pCit7CisgICAgRWluYV9MaXN0KiogcmV0ID0gc3RhdGljX2Nhc3Q8RWluYV9MaXN0Kio+KGV2
ZW50X2luZm8pOworICAgICpyZXQgPSBvcmlnaW5zOworICAgIGVjb3JlX21haW5fbG9vcF9xdWl0
KCk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgdGltZXJDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSkK
K3sKKyAgICBPcmlnaW5zRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PE9yaWdpbnNEYXRhKj4odXNl
ckRhdGEpOworICAgIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2FzeW5jX29yaWdpbnNf
Z2V0KGRhdGEtPm1hbmFnZXIsIGdldE9yaWdpbnNDYWxsYmFjaywgJmRhdGEtPml0ZW1zKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2FwcGxp
Y2F0aW9uX2NhY2hlX21hbmFnZXIpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVXSzJVbml0VGVz
dFNlcnZlcj4gaHR0cFNlcnZlciA9IHN0ZDo6bWFrZV91bmlxdWU8RVdLMlVuaXRUZXN0U2VydmVy
PigpOworICAgIGh0dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBFY29yZV9U
aW1lciogYXBwbGljYXRpb25DYWNoZVRpbWVyOworICAgIE9yaWdpbnNEYXRhIGRhdGE7CisgICAg
ZGF0YS5tYW5hZ2VyID0gZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQo
ZXdrX3ZpZXdfY29udGV4dF9nZXQod2ViVmlldygpKSk7CisKKyAgICAvLyBCZWZvcmUgdGVzdGlu
ZywgcmVtb3ZlIGFsbCBjYWNoZXMuCisgICAgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJf
ZGVsZXRlX2FsbChkYXRhLm1hbmFnZXIpOworCisgICAgYXBwbGljYXRpb25DYWNoZVRpbWVyID0g
ZWNvcmVfdGltZXJfYWRkKDAuNSwgdGltZXJDYWxsYmFjaywgJmRhdGEpOworICAgIGVjb3JlX21h
aW5fbG9vcF9iZWdpbigpOworICAgIEFTU0VSVF9FUSgwLCBlaW5hX2xpc3RfY291bnQoZGF0YS5p
dGVtcykpOworCisgICAgQVNTRVJUX1RSVUUobG9hZFVybFN5bmMoaHR0cFNlcnZlci0+Z2V0VVJM
Rm9yUGF0aChhcHBsaWNhdGlvbkNhY2hlSHRtbEZpbGUpLmRhdGEoKSkpOworCisgICAgYXBwbGlj
YXRpb25DYWNoZVRpbWVyID0gZWNvcmVfdGltZXJfYWRkKDAuNSwgdGltZXJDYWxsYmFjaywgJmRh
dGEpOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworICAgIEFTU0VSVF9FUSgxLCBlaW5h
X2xpc3RfY291bnQoZGF0YS5pdGVtcykpOworCisgICAgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21h
bmFnZXJfZGVsZXRlKGRhdGEubWFuYWdlciwgc3RhdGljX2Nhc3Q8RXdrX1NlY3VyaXR5X09yaWdp
bio+KGVpbmFfbGlzdF9udGgoZGF0YS5pdGVtcywgMCkpKTsKKworICAgIHZvaWQqIG9yaWdpbjsK
KyAgICBFSU5BX0xJU1RfRlJFRShkYXRhLml0ZW1zLCBvcmlnaW4pCisgICAgICAgIGV3a19vYmpl
Y3RfdW5yZWYoc3RhdGljX2Nhc3Q8RXdrX09iamVjdCo+KG9yaWdpbikpOworCisgICAgZGF0YS5p
dGVtcyA9IG51bGxwdHI7CisKKyAgICBhcHBsaWNhdGlvbkNhY2hlVGltZXIgPSBlY29yZV90aW1l
cl9hZGQoMC41LCB0aW1lckNhbGxiYWNrLCAmZGF0YSk7CisgICAgZWNvcmVfbWFpbl9sb29wX2Jl
Z2luKCk7CisgICAgQVNTRVJUX0VRKDAsIGVpbmFfbGlzdF9jb3VudChkYXRhLml0ZW1zKSk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0
X2V3azJfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy90ZXN0X2V3azJfY29udGV4dC5jcHAKaW5kZXggZjlkYjBlZjI2MTcwYmUzZGVjMGRhNDlhMmQ5
MGJlYWZiZmRhZGI3ZC4uNTc2ZGUyZTJiZDAzZDYxOGE2Mzg4ZmFjNmRlMTYyNjU1MWEzMjMwOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9l
d2syX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcApAQCAtNTUsNiArNTUsMTQgQEAgVEVTVF9GKEVXSzJD
b250ZXh0VGVzdCwgZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQpCiAgICAgQVNTRVJUX0VRKGRlZmF1
bHRDb250ZXh0LCBld2tfY29udGV4dF9kZWZhdWx0X2dldCgpKTsKIH0KIAorVEVTVF9GKEVXSzJV
bml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZ2V0KQor
eworICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQod2ViVmll
dygpKTsKKyAgICBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciogYXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIgPSBld2tfY29udGV4dF9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2dldChjb250
ZXh0KTsKKyAgICBBU1NFUlRfVFJVRShhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcik7CisgICAgQVNT
RVJUX0VRKGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLCBld2tfY29udGV4dF9hcHBsaWNhdGlvbl9j
YWNoZV9tYW5hZ2VyX2dldChjb250ZXh0KSk7Cit9CisKIFRFU1RfRihFV0syQ29udGV4dFRlc3Qs
IGV3a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2VyX2dldCkKIHsKICAgICBFd2tfQ29udGV4dCogY29u
dGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226872</attachid>
            <date>2014-03-16 20:16:15 -0700</date>
            <delta_ts>2014-03-16 22:29:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102853-20140317121552.patch</filename>
            <type>text/plain</type>
            <size>27122</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY1NzE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWQ2YmNhMzQ4MTc3YTAz
MTc0OGY5NjhkNjI0NDVhM2ZkZTY2ZDdkZC4uMzA5OTU0Yzk1N2Q1YThmMmQ0ZWVkOWE0ZjE5ZDZm
Njc3MmZjMGVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTAzLTE2ICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEFk
ZCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlciBBUElzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI4NTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBhcHBsaWNhdGlvbiBjYWNo
ZSBtYW5hZ2VyIHRvIGdldCBsaXN0IG9mIG9yaWdpbnMgd2hpY2ggc3RvcmVzCisgICAgICAgIGFw
cGxpY2F0aW9uIGNhY2hlIGFuZCByZW1vdmUgc3BlY2lmaWVkIG9yaWdpbiBvciBhbGwuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZTogQWRkZWQgbmV3bHkgYWRkZWQgZmlsZXMuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpFd2tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlcik6CisgICAgICAgIChFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6
fkV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKEdldF9PcmlnaW5zX0FzeW5j
X0RhdGE6OkdldF9PcmlnaW5zX0FzeW5jX0RhdGEpOgorICAgICAgICAoZ2V0QXBwbGljYXRpb25D
YWNoZU9yaWdpbnNDYWxsYmFjayk6CisgICAgICAgIChld2tfYXBwbGljYXRpb25fY2FjaGVfbWFu
YWdlcl9hc3luY19vcmlnaW5zX2dldCk6CisgICAgICAgIChld2tfYXBwbGljYXRpb25fY2FjaGVf
b3JpZ2luc19mcmVlKToKKyAgICAgICAgKGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2Rl
bGV0ZV9hbGwpOgorICAgICAgICAoZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZGVsZXRl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFu
YWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRp
b25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrQXBwbGljYXRp
b25DYWNoZU1hbmFnZXI6OmltcGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcDoKKyAgICAgICAgKEV3a0NvbnRleHQ6OmFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
KToKKyAgICAgICAgKGV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZ2V0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaDoKKyAgICAgICAgKEV3a1Nl
Y3VyaXR5T3JpZ2luOjp3a1NlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5jcHA6CisgICAgICAg
IChFV0syVW5pdFRlc3RTZXJ2ZXI6OnBvcnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIu
Y3BwOgorICAgICAgICBBZGRlZCB0byB0ZXN0IGFwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuCisg
ICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChnZXRPcmlnaW5zQ2FsbGJhY2spOgor
ICAgICAgICAodGltZXJDYWxsYmFjayk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcDoKKyAgICAgICAgQWRk
ZWQgdGVzdCBjYXNlIHRvIHRlc3QgZ2V0dGVyIG9mIGFwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIu
CisgICAgICAgIChURVNUX0YpOgorCiAyMDE0LTAzLTE2ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBNb3ZlIEdUSyBXZWJLaXQyIGNvZGUgdG8gc3RkOjp1
bmlxdWVfcHRyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGY5NjI1ZDk4NWU0YmIyYTEy
ZmJlODQyZDk3YjE1MmRlYmRlMDJiZDIuLmU5Mzc3MDA4ODJhZmZiZWE2ZmIxYzA4ODVjZWQ5NzI2
MzA1MzcxOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC03Myw2ICs3Myw3IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcu
Y3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXIuY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvU25hcHNob3RJbWFnZUdMLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19hdXRoX3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9y
d2FyZF9saXN0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtLmNwcApAQCAtMzM2LDYgKzMzNyw3IEBAIHNldChFV2ViS2l0Ml9IRUFERVJTCiAgICAg
IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXV0aF9y
ZXF1ZXN0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgiCisg
ICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBw
bGljYXRpb25fY2FjaGVfbWFuYWdlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbG9yX3BpY2tlci5oIgogICAgICIke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaCIKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
X21lbnUuaCIKQEAgLTQ0OCw2ICs0NTAsNyBAQCB0YXJnZXRfbGlua19saWJyYXJpZXMoZXdrMlVu
aXRUZXN0VXRpbHMgJHtFV0syVW5pdFRlc3RzX0xJQlJBUklFU30pCiAjIFRoZSAiZXdrIiBvbiB0
aGUgdGVzdCBuYW1lIG5lZWRzIHRvIGJlIHN1ZmZpeGVkIHdpdGggIjIiLCBvdGhlcndpc2UgaXQK
ICMgd2lsbCBjbGFzaCB3aXRoIHRlc3RzIGZyb20gdGhlIFdlYktpdCAxIHRlc3Qgc3VpdGUuCiBz
ZXQoRVdLMlVuaXRUZXN0c19CSU5BUklFUworICAgIHRlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNo
ZV9tYW5hZ2VyCiAgICAgdGVzdF9ld2syX2F1dGhfcmVxdWVzdAogICAgIHRlc3RfZXdrMl9iYWNr
X2ZvcndhcmRfbGlzdAogICAgIHRlc3RfZXdrMl9jb2xvcl9waWNrZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlv
bl9jYWNoZV9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2U1ZDQ3MmJhMmZiODNmZmU1MDkyYjI4
NmM4OGQwZGU1M2MwYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3BwCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2FwcGxpY2F0aW9uX2Nh
Y2hlX21hbmFnZXIuaCIKKworI2luY2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJld2tfYXBw
bGljYXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX29iamVjdC5o
IgorI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OworCitFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6RXdrQXBwbGljYXRp
b25DYWNoZU1hbmFnZXIoV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiBhcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlcikKKyAgICA6IG1fYXBwbGljYXRpb25DYWNoZU1hbmFnZXIoYXBwbGljYXRpb25D
YWNoZU1hbmFnZXIpCit7Cit9CisKK0V3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjp+RXdrQXBw
bGljYXRpb25DYWNoZU1hbmFnZXIoKQoreworfQorCitzdHJ1Y3QgR2V0X09yaWdpbnNfQXN5bmNf
RGF0YSB7CisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX0FzeW5jX09yaWdpbnNfR2V0X0NiIGNh
bGxiYWNrOworICAgIHZvaWQqIHVzZXJEYXRhOworCisgICAgR2V0X09yaWdpbnNfQXN5bmNfRGF0
YShFd2tfQXBwbGljYXRpb25fQ2FjaGVfQXN5bmNfT3JpZ2luc19HZXRfQ2IgY2FsbGJhY2ssIHZv
aWQqIHVzZXJEYXRhKQorICAgICAgICA6IGNhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICAsIHVz
ZXJEYXRhKHVzZXJEYXRhKQorICAgIHsgfQorfTsKKworc3RhdGljIHZvaWQgZ2V0QXBwbGljYXRp
b25DYWNoZU9yaWdpbnNDYWxsYmFjayhXS0FycmF5UmVmIHdrT3JpZ2lucywgV0tFcnJvclJlZiwg
dm9pZCogY29udGV4dCkKK3sKKyAgICBFaW5hX0xpc3QqIG9yaWdpbnMgPSBudWxscHRyOworICAg
IGF1dG8gY2FsbGJhY2tEYXRhID0gc3RkOjp1bmlxdWVfcHRyPEdldF9PcmlnaW5zX0FzeW5jX0Rh
dGE+KHN0YXRpY19jYXN0PEdldF9PcmlnaW5zX0FzeW5jX0RhdGEqPihjb250ZXh0KSk7CisKKyAg
ICBjb25zdCBzaXplX3Qgb3JpZ2luc0NvdW50ID0gV0tBcnJheUdldFNpemUod2tPcmlnaW5zKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9yaWdpbnNDb3VudDsgKytpKSB7CisgICAgICAg
IFdLU2VjdXJpdHlPcmlnaW5SZWYgc2VjdXJpdHlPcmlnaW5SZWYgPSBzdGF0aWNfY2FzdDxXS1Nl
Y3VyaXR5T3JpZ2luUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tPcmlnaW5zLCBpKSk7Cisg
ICAgICAgIG9yaWdpbnMgPSBlaW5hX2xpc3RfYXBwZW5kKG9yaWdpbnMsIEV3a1NlY3VyaXR5T3Jp
Z2luOjpjcmVhdGUoc2VjdXJpdHlPcmlnaW5SZWYpLmxlYWtSZWYoKSk7CisgICAgfQorCisgICAg
Y2FsbGJhY2tEYXRhLT5jYWxsYmFjayhvcmlnaW5zLCBjYWxsYmFja0RhdGEtPnVzZXJEYXRhKTsK
K30KKwordm9pZCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9hc3luY19vcmlnaW5zX2dl
dChjb25zdCBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciogbWFuYWdlciwgRXdrX0FwcGxp
Y2F0aW9uX0NhY2hlX0FzeW5jX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0
YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihtYW5hZ2VyKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjYWxsYmFjayk7CisKKyAgICBHZXRfT3JpZ2luc19Bc3lu
Y19EYXRhKiBjYWxsYmFja0RhdGEgPSBuZXcgR2V0X09yaWdpbnNfQXN5bmNfRGF0YShjYWxsYmFj
aywgdXNlckRhdGEpOworICAgIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJHZXRBcHBsaWNhdGlv
bkNhY2hlT3JpZ2lucyhtYW5hZ2VyLT5pbXBsKCksIGNhbGxiYWNrRGF0YSwgZ2V0QXBwbGljYXRp
b25DYWNoZU9yaWdpbnNDYWxsYmFjayk7Cit9CisKK0VpbmFfQm9vbCBld2tfYXBwbGljYXRpb25f
Y2FjaGVfbWFuYWdlcl9kZWxldGVfYWxsKEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyKiBt
YW5hZ2VyKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtYW5hZ2VyLCBm
YWxzZSk7CisKKyAgICBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyRGVsZXRlQWxsRW50cmllcyht
YW5hZ2VyLT5pbXBsKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBld2tf
YXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9kZWxldGUoRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01h
bmFnZXIqIG1hbmFnZXIsIEV3a19TZWN1cml0eV9PcmlnaW4qIG9yaWdpbikKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWFuYWdlciwgZmFsc2UpOworICAgIEVXS19PQkpf
R0VUX0lNUExfT1JfUkVUVVJOKEV3a1NlY3VyaXR5T3JpZ2luLCBvcmlnaW4sIGltcGwsIGZhbHNl
KTsKKworICAgIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3JpZ2lu
KG1hbmFnZXItPmltcGwoKSwgaW1wbC0+d2tTZWN1cml0eU9yaWdpbigpKTsKKworICAgIHJldHVy
biB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjMy
YTJjNmIzZTgwMDFiYTA1YTFiYjg2ZmYzMGIyMGMwMmMwNWU4ZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9t
YW5hZ2VyLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3a19hcHBsaWNh
dGlvbl9jYWNoZV9tYW5hZ2VyLmgKKyAqIEBicmllZiAgIERlc2NyaWJlcyB0aGUgRXdrIEFwcGxp
Y2F0aW9uIENhY2hlIE1hbmFnZXIgQVBJLgorICovCisKKyNpZm5kZWYgZXdrX2FwcGxpY2F0aW9u
X2NhY2hlX21hbmFnZXJfaAorI2RlZmluZSBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9o
CisKKyNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2luLmgiCisjaW5jbHVkZSA8RWluYS5oPgor
CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKiBDcmVhdGVz
IGEgdHlwZSBuYW1lIGZvciBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciAqLwordHlwZWRl
ZiBzdHJ1Y3QgRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIgRXdrX0FwcGxpY2F0aW9uX0NhY2hl
X01hbmFnZXI7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX0FzeW5j
X09yaWdpbnNfR2V0X0NiIEV3a19BcHBsaWNhdGlvbl9DYWNoZV9Bc3luY19PcmlnaW5zX0dldF9D
YgorICogQGJyaWVmIENhbGxiYWNrIGZvciBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9h
c3luY19vcmlnaW5zX2dldAorICoKKyAqIEBub3RlIFRoZSBAYSBvcmlnaW5zIHNob3VsZCBiZSBm
cmVlZCBsaWtlIGJlbG93IGNvZGUgYWZ0ZXIgdXNlLgorICoKKyAqIEBjb2RlCisgKgorICogc3Rh
dGljIHZvaWQKKyAqIF9vcmlnaW5zX2dldF9jYihFaW5hX0xpc3QqIG9yaWdpbnMsIGRhdGEpCisg
KiB7CisgKiAgICAvLyAuLi4KKyAqCisgKiAgICB2b2lkICpvcmlnaW47CisgKiAgICBFSU5BX0xJ
U1RfRlJFRShvcmlnaW5zLCBvcmlnaW4pCisgKiAgICAgIGV3a19vYmplY3RfdW5yZWYoKEV3a19P
YmplY3QqKW9yaWdpbik7CisgKiB9CisgKgorICogQGVuZGNvZGUKKyAqLwordHlwZWRlZiB2b2lk
ICgqRXdrX0FwcGxpY2F0aW9uX0NhY2hlX0FzeW5jX09yaWdpbnNfR2V0X0NiKShFaW5hX0xpc3Qg
Km9yaWdpbnMsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogUmVxdWVzdHMgZm9yIGdldHRp
bmcgd2ViIGFwcGxpY2F0aW9uIGNhY2hlIG9yaWdpbnMuCisgKgorICogQHBhcmFtIGNvbnRleHQg
Y29udGV4dCBvYmplY3QKKyAqIEBwYXJhbSByZXN1bHRfY2FsbGJhY2sgY2FsbGJhY2sgdG8gZ2V0
IHdlYiBhcHBsaWNhdGlvbiBjYWNoZSBvcmlnaW5zCisgKiBAcGFyYW0gdXNlcl9kYXRhIHVzZXJf
ZGF0YSB3aWxsIGJlIHBhc3NzZWQgd2hlbiByZXN1bHRfY2FsbGJhY2sgaXMgY2FsbGVkCisgKgor
ICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2Vzc2Z1bCByZXF1ZXN0IG9yIEBjIEVJTkFf
RkFMU0Ugb24gZmFpbHVyZQorICoKKyAqIEBzZWUgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX0FzeW5j
X09yaWdpbnNfR2V0X0NiCisgKi8KK0VBUEkgdm9pZCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFu
YWdlcl9hc3luY19vcmlnaW5zX2dldChjb25zdCBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdl
ciAqbWFuYWdlciwgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX0FzeW5jX09yaWdpbnNfR2V0X0NiIGNh
bGxiYWNrLCB2b2lkICpkYXRhKTsKKworLyoqCisgKiBSZXF1ZXN0cyBmb3IgZGVsZXRpbmcgYWxs
IHdlYiBhcHBsaWNhdGlvbiBjYWNoZXMuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBv
YmplY3QKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzZnVsIHJlcXVlc3Qg
b3IgQGMgRUlOQSBGQUxTRSBvbiBmYWlsdXJlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19hcHBs
aWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2RlbGV0ZV9hbGwoRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01h
bmFnZXIgKm1hbmFnZXIpOworCisvKioKKyAqIFJlcXVlc3RzIGZvciBkZWxldGluZyB3ZWIgYXBw
bGljYXRpb24gY2FjaGUgZm9yIG9yaWdpbi4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0
IG9iamVjdAorICogQHBhcmFtIG9yaWdpbiBhcHBsaWNhdGlvbiBjYWNoZSBvcmlnaW4KKyAqCisg
KiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzZnVsIHJlcXVlc3Qgb3IgQGMgRUlOQV9G
QUxTRSBvbiBmYWlsdXJlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19hcHBsaWNhdGlvbl9jYWNo
ZV9tYW5hZ2VyX2RlbGV0ZShFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciAqbWFuYWdlciwg
RXdrX1NlY3VyaXR5X09yaWdpbiAqb3JpZ2luKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9Cisj
ZW5kaWYKKworI2VuZGlmIC8vIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9j
YWNoZV9tYW5hZ2VyX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjIy
YzAwOGY3ODJjZTBiOGUzYzY2ZDc0OWM1Njc4NWJiZDIwNWNiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21h
bmFnZXJfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19hcHBsaWNhdGlv
bl9jYWNoZV9tYW5hZ2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfYXBwbGljYXRpb25fY2FjaGVf
bWFuYWdlcl9wcml2YXRlX2gKKworI2luY2x1ZGUgIldLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIu
aCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+
CisKK2NsYXNzIEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcihXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
UmVmIGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKTsKKyAgICB+RXdrQXBwbGljYXRpb25DYWNoZU1h
bmFnZXIoKTsKKworICAgIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgaW1wbCgpIGNvbnN0
IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZU1hbmFnZXIuZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICBXS1JldGFpblB0cjxXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmPiBtX2FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyOworfTsKKworI2VuZGlmIC8vIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9t
YW5hZ2VyX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCmluZGV4IGE0NTViN2E5N2ZiM2JhOWM0MzRlY2I5MTIxYmNlODQzNTM3
MDhkNDkuLjIzZmM2ZWMzYTg0YjYwZWUxOTViNzhjMjJkNmUxZWZmNDA3MDFlYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTI3
LDExICsyNywxMyBAQAogI2luY2x1ZGUgIk5ldHdvcmtJbmZvUHJvdmlkZXIuaCIKICNpbmNsdWRl
ICJSZXF1ZXN0TWFuYWdlckNsaWVudEVmbC5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2lu
Y2x1ZGUgIldLQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJXS0NvbnRleHRTb3VwLmgiCiAj
aW5jbHVkZSAiV0tOdW1iZXIuaCIKICNpbmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgIldl
YkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJld2tf
YXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRl
eHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlcl9wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX2RhdGFiYXNlX21hbmFnZXJfcHJpdmF0ZS5oIgpAQCAtMTM5LDYgKzE0MSwx
NCBAQCBFd2tDb250ZXh0KiBFd2tDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgpCiAgICAgcmV0dXJu
IGRlZmF1bHRJbnN0YW5jZTsKIH0KIAorRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIqIEV3a0Nv
bnRleHQ6OmFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKCkKK3sKKyAgICBpZiAoIW1fYXBwbGljYXRp
b25DYWNoZU1hbmFnZXIpCisgICAgICAgIG1fYXBwbGljYXRpb25DYWNoZU1hbmFnZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyPihXS0NvbnRleHRHZXRBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlcihtX2NvbnRleHQuZ2V0KCkpKTsKKworICAgIHJldHVybiBtX2Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmdldCgpOworfQorCiBFd2tDb29raWVNYW5hZ2VyKiBFd2tD
b250ZXh0Ojpjb29raWVNYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fY29va2llTWFuYWdlcikKQEAg
LTI0OSw2ICsyNTksMTMgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEV3a0NvbnRleHQ6OmpzR2xvYmFs
Q29udGV4dCgpCiAgICAgcmV0dXJuIG1fanNHbG9iYWxDb250ZXh0OwogfQogCitFd2tfQXBwbGlj
YXRpb25fQ2FjaGVfTWFuYWdlciogZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdl
cl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCit7CisgICAgRVdLX09CSl9HRVRf
SU1QTF9PUl9SRVRVUk4oY29uc3QgRXdrQ29udGV4dCwgZXdrQ29udGV4dCwgaW1wbCwgbnVsbHB0
cik7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxFd2tDb250ZXh0Kj4oaW1wbCktPmFwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyKCk7Cit9CisKIEV3a19Db29raWVfTWFuYWdlciogZXdrX2NvbnRleHRf
Y29va2llX21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQogewogICAg
IEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a0NvbnRleHQsIGV3a0NvbnRleHQs
IGltcGwsIG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0LmgKaW5kZXggMTNiMTZkM2MxNDY4ZDRmMDQwYWZiMGJlMDYzYjg4MGU5MDNkN2Jm
NS4uNDI4ZDdmMWFlMWNhM2YzOWQ1NmUyNTUwZThiNmEwYzNiMDBiMTBiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCkBAIC0zNyw2ICszNyw3
IEBACiAjaWZuZGVmIGV3a19jb250ZXh0X2gKICNkZWZpbmUgZXdrX2NvbnRleHRfaAogCisjaW5j
bHVkZSAiZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfY29v
a2llX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfZGF0YWJhc2VfbWFuYWdlci5oIgogI2luY2x1
ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlLmgiCkBAIC0xNjEsNiArMTYyLDE1IEBAIEVBUEkgRXdr
X0NvbnRleHQgKmV3a19jb250ZXh0X25ldyh2b2lkKTsKIEVBUEkgRXdrX0NvbnRleHQgKmV3a19j
b250ZXh0X25ld193aXRoX2luamVjdGVkX2J1bmRsZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOwog
CiAvKioKKyAqIEdldHMgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIG1hbmFnZXIgaW5zdGFuY2UgZm9y
IHRoaXMgQGEgY29udGV4dC4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0
byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIEV3a19Db29raWVfTWFuYWdlciBvYmplY3QgaW5zdGFu
Y2Ugb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK0VBUEkgRXdrX0FwcGxpY2F0
aW9uX0NhY2hlX01hbmFnZXIgKmV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJf
Z2V0KGNvbnN0IEV3a19Db250ZXh0ICpjb250ZXh0KTsKKworLyoqCiAgKiBHZXRzIHRoZSBjb29r
aWUgbWFuYWdlciBpbnN0YW5jZSBmb3IgdGhpcyBAYSBjb250ZXh0LgogICoKICAqIEBwYXJhbSBj
b250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHF1ZXJ5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IGZlMzMxNDk1
NjI2YTY0M2Q3M2NhMDAzY2Y5MThlNTRhNjdhN2VjMzguLjQ2YzM3MmU2MzIxY2Q1Y2M0YmM1NmM1
Y2JhY2M4ZjM0MjU0YWZiMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKIAorY2xhc3MgRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXI7
CiBjbGFzcyBFd2tDb29raWVNYW5hZ2VyOwogY2xhc3MgRXdrRmF2aWNvbkRhdGFiYXNlOwogCkBA
IC01Nyw4ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIH5Fd2tDb250ZXh0KCk7CiAKKyAgICBFd2tB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlciogYXBwbGljYXRpb25DYWNoZU1hbmFnZXIoKTsKICAgICBF
d2tDb29raWVNYW5hZ2VyKiBjb29raWVNYW5hZ2VyKCk7Ci0KICAgICBFd2tEYXRhYmFzZU1hbmFn
ZXIqIGRhdGFiYXNlTWFuYWdlcigpOwogCiAgICAgYm9vbCBzZXRGYXZpY29uRGF0YWJhc2VEaXJl
Y3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtMTAwLDYgKzEw
MSw3IEBAIHByaXZhdGU6CiAKICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4
dDsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcj4gbV9h
cHBsaWNhdGlvbkNhY2hlTWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXdrQ29va2llTWFu
YWdlcj4gbV9jb29raWVNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFd2tEYXRhYmFzZU1h
bmFnZXI+IG1fZGF0YWJhc2VNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFd2tGYXZpY29u
RGF0YWJhc2U+IG1fZmF2aWNvbkRhdGFiYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaApp
bmRleCBlNzg3Y2UxNWRlMGRkNmYxYjZhYWNlOTQ3YjEwOGQ0OTYyNGIxYjllLi41NmY2Y2YwZjgy
YjA3Y2EyNGQzMGUzNzk4MTlmMTdkYTdmODVkN2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZh
dGUuaApAQCAtNDksNiArNDksOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgY2hhciogcHJvdG9jb2wo
KSBjb25zdDsKICAgICB1aW50MzJfdCBwb3J0KCkgY29uc3Q7CiAKKyAgICBXS1NlY3VyaXR5T3Jp
Z2luUmVmIHdrU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3drT3JpZ2luLmdldCgp
OyB9CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRXdrU2VjdXJpdHlPcmlnaW4oV0tTZWN1cml0
eU9yaWdpblJlZiBvcmlnaW5SZWYpOwogICAgIGV4cGxpY2l0IEV3a1NlY3VyaXR5T3JpZ2luKGNv
bnN0IGNoYXIqIHVybCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVz
dFNlcnZlci5jcHAKaW5kZXggNGVmNGNmNzZmNzc0MWU3MzU0NGQyNzE4ODNlMThkMTM1YjE3ZTI5
ZC4uYmQ4YzY5MzAzMWM5MmM5NDRjZjFjMjgyNjc0YjljZjQwMTZjNWVhOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0sy
VW5pdFRlc3RTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmNwcApAQCAtNTQsMyArNTQs
OCBAQCBDU3RyaW5nIEVXSzJVbml0VGVzdFNlcnZlcjo6Z2V0VVJMRm9yUGF0aChjb25zdCBjaGFy
KiBwYXRoKSBjb25zdAogCiAgICAgcmV0dXJuIHVybFN0cmluZzsKIH0KKwordW5zaWduZWQgRVdL
MlVuaXRUZXN0U2VydmVyOjpwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc291cF9zZXJ2ZXJf
Z2V0X3BvcnQobV9zb3VwU2VydmVyKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VX
SzJVbml0VGVzdFNlcnZlci5oCmluZGV4IGI5NjdjZTQwOWJhZDlhNDE0ZDAxNGJhNzc4MzBiYzdm
MjA2ZGZlNzguLjgxZDI0OGNhYTU3NTU3YzlmMDAyNGI3MzU1N2YxZDhmNTQ4NDYwNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRp
bHMvRVdLMlVuaXRUZXN0U2VydmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuaApAQCAtMzAsNiAr
MzAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RVdLMlVuaXRUZXN0U2VydmVyKCk7CiAKICAg
ICBDU3RyaW5nIGdldFVSTEZvclBhdGgoY29uc3QgY2hhciogcGF0aCkgY29uc3Q7CisgICAgdW5z
aWduZWQgcG9ydCgpIGNvbnN0OworCiAgICAgdm9pZCBydW4oU291cFNlcnZlckNhbGxiYWNrKTsK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL3Rlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNo
ZV9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjBjZmQ1YWRmOGJiNzJkNmNjYTQ1ZjU2ZmJhNjNl
ZTQ2NzY3MmNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3BwCkBAIC0w
LDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RV
dGlscy9FV0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5p
dFRlc3RFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0
U2VydmVyLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJV
bml0VGVzdDsKKworc3RhdGljIGNvbnN0IGNoYXIgYXBwbGljYXRpb25DYWNoZUh0bWxbXSA9Cisg
ICAgIjwhZG9jdHlwZSBodG1sPiIKKyAgICAiPGh0bWwgbWFuaWZlc3Q9J3Rlc3QuYXBwY2FjaGUn
PiIKKyAgICAiPGhlYWQ+PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPSdjbG9jay5jc3MnPjwv
aGVhZD4iCisgICAgIjxib2R5PkFwcGxpY2F0aW9uIENhY2hlIFRlc3Q8L2JvZHk+IgorICAgICI8
L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFtdID0g
IkNBQ0hFIE1BTklGRVNUXG4iCisgICAgImFwcGxpY2F0aW9uX2NhY2hlLmh0bWxcbiIKKyAgICAi
Y2xvY2suY3NzIjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVDc3NbXSA9ICJv
dXRwdXQgeyBmb250OjJlbSBzYW5zLXNlcmlmOyB9IjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxp
Y2F0aW9uQ2FjaGVIdG1sRmlsZVtdID0gIi9hcHBsaWNhdGlvbl9jYWNoZS5odG1sIjsKK3N0YXRp
YyBjb25zdCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdEZpbGVbXSA9ICIvdGVzdC5hcHBj
YWNoZSI7CitzdGF0aWMgY29uc3QgY2hhciBhcHBsaWNhdGlvbkNhY2hlQ3NzRmlsZVtdID0gIi9j
bG9jay5jc3MiOworCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiwgU291
cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xp
ZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09V
UF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Cisg
ICAgRWluYV9TdHJidWYqIGJvZHkgPSBlaW5hX3N0cmJ1Zl9uZXcoKTsKKworICAgIGlmICghc3Ry
Y21wKHBhdGgsIGFwcGxpY2F0aW9uQ2FjaGVIdG1sRmlsZSkpCisgICAgICAgIGVpbmFfc3RyYnVm
X2FwcGVuZF9wcmludGYoYm9keSwgYXBwbGljYXRpb25DYWNoZUh0bWwpOworICAgIGVsc2UgaWYg
KCFzdHJjbXAocGF0aCwgYXBwbGljYXRpb25DYWNoZU1hbmlmZXN0RmlsZSkpCisgICAgICAgIGVp
bmFfc3RyYnVmX2FwcGVuZF9wcmludGYoYm9keSwgYXBwbGljYXRpb25DYWNoZU1hbmlmZXN0KTsK
KyAgICBlbHNlIGlmICghc3RyY21wKHBhdGgsIGFwcGxpY2F0aW9uQ2FjaGVDc3NGaWxlKSkKKyAg
ICAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50Zihib2R5LCBhcHBsaWNhdGlvbkNhY2hlQ3Nz
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxl
dGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgICAgIGVpbmFfc3RyYnVmX2ZyZWUoYm9k
eSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBzaXplX3QgYm9keUxlbmd0
aCA9IGVpbmFfc3RyYnVmX2xlbmd0aF9nZXQoYm9keSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGVpbmFfc3Ry
YnVmX3N0cmluZ19zdGVhbChib2R5KSwgYm9keUxlbmd0aCk7CisgICAgZWluYV9zdHJidWZfZnJl
ZShib2R5KTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHkpOworfQorCitzdHJ1Y3QgT3JpZ2luc0RhdGEgeworICAgIEVpbmFfTGlzdCogaXRl
bXM7CisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXI7Cit9OworCitz
dGF0aWMgdm9pZCBnZXRPcmlnaW5zQ2FsbGJhY2soRWluYV9MaXN0KiBvcmlnaW5zLCB2b2lkKiBl
dmVudF9pbmZvKQoreworICAgIEVpbmFfTGlzdCoqIHJldCA9IHN0YXRpY19jYXN0PEVpbmFfTGlz
dCoqPihldmVudF9pbmZvKTsKKyAgICAqcmV0ID0gb3JpZ2luczsKKyAgICBlY29yZV9tYWluX2xv
b3BfcXVpdCgpOworfQorCitzdGF0aWMgRWluYV9Cb29sIHRpbWVyQ2FsbGJhY2sodm9pZCogdXNl
ckRhdGEpCit7CisgICAgT3JpZ2luc0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxPcmlnaW5zRGF0
YSo+KHVzZXJEYXRhKTsKKyAgICBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9hc3luY19v
cmlnaW5zX2dldChkYXRhLT5tYW5hZ2VyLCBnZXRPcmlnaW5zQ2FsbGJhY2ssICZkYXRhLT5pdGVt
cyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3
a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxFV0sy
VW5pdFRlc3RTZXJ2ZXI+IGh0dHBTZXJ2ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEVXSzJVbml0VGVz
dFNlcnZlcj4oKTsKKyAgICBodHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAg
RWNvcmVfVGltZXIqIGFwcGxpY2F0aW9uQ2FjaGVUaW1lcjsKKyAgICBPcmlnaW5zRGF0YSBkYXRh
OworICAgIGRhdGEubWFuYWdlciA9IGV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFn
ZXJfZ2V0KGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSkpOworCisgICAgLy8gQmVmb3Jl
IHRlc3RpbmcsIHJlbW92ZSBhbGwgY2FjaGVzLgorICAgIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9t
YW5hZ2VyX2RlbGV0ZV9hbGwoZGF0YS5tYW5hZ2VyKTsKKworICAgIGFwcGxpY2F0aW9uQ2FjaGVU
aW1lciA9IGVjb3JlX3RpbWVyX2FkZCgwLjUsIHRpbWVyQ2FsbGJhY2ssICZkYXRhKTsKKyAgICBl
Y29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKyAgICBBU1NFUlRfRVEoMCwgZWluYV9saXN0X2NvdW50
KGRhdGEuaXRlbXMpKTsKKworICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGh0dHBTZXJ2ZXIt
PmdldFVSTEZvclBhdGgoYXBwbGljYXRpb25DYWNoZUh0bWxGaWxlKS5kYXRhKCkpKTsKKworICAg
IGFwcGxpY2F0aW9uQ2FjaGVUaW1lciA9IGVjb3JlX3RpbWVyX2FkZCgwLjUsIHRpbWVyQ2FsbGJh
Y2ssICZkYXRhKTsKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKyAgICBBU1NFUlRfRVEo
MSwgZWluYV9saXN0X2NvdW50KGRhdGEuaXRlbXMpKTsKKworICAgIGV3a19hcHBsaWNhdGlvbl9j
YWNoZV9tYW5hZ2VyX2RlbGV0ZShkYXRhLm1hbmFnZXIsIHN0YXRpY19jYXN0PEV3a19TZWN1cml0
eV9PcmlnaW4qPihlaW5hX2xpc3RfbnRoKGRhdGEuaXRlbXMsIDApKSk7CisKKyAgICB2b2lkKiBv
cmlnaW47CisgICAgRUlOQV9MSVNUX0ZSRUUoZGF0YS5pdGVtcywgb3JpZ2luKQorICAgICAgICBl
d2tfb2JqZWN0X3VucmVmKHN0YXRpY19jYXN0PEV3a19PYmplY3QqPihvcmlnaW4pKTsKKworICAg
IGRhdGEuaXRlbXMgPSBudWxscHRyOworCisgICAgYXBwbGljYXRpb25DYWNoZVRpbWVyID0gZWNv
cmVfdGltZXJfYWRkKDAuNSwgdGltZXJDYWxsYmFjaywgJmRhdGEpOworICAgIGVjb3JlX21haW5f
bG9vcF9iZWdpbigpOworICAgIEFTU0VSVF9FUSgwLCBlaW5hX2xpc3RfY291bnQoZGF0YS5pdGVt
cykpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwCmluZGV4IGY5ZGIwZWYyNjE3MGJlM2RlYzBk
YTQ5YTJkOTBiZWFmYmZkYWRiN2QuLjU3NmRlMmUyYmQwM2Q2MThhNjM4OGZhYzZkZTE2MjY1NTFh
MzIzMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L3Rlc3RfZXdrMl9jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5jcHAKQEAgLTU1LDYgKzU1LDE0IEBAIFRFU1Rf
RihFV0syQ29udGV4dFRlc3QsIGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KQogICAgIEFTU0VSVF9F
UShkZWZhdWx0Q29udGV4dCwgZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQoKSk7CiB9CiAKK1RFU1Rf
RihFV0syVW5pdFRlc3RCYXNlLCBld2tfY29udGV4dF9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2Vy
X2dldCkKK3sKKyAgICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0
KHdlYlZpZXcoKSk7CisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIGFwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyID0gZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9n
ZXQoY29udGV4dCk7CisgICAgQVNTRVJUX1RSVUUoYXBwbGljYXRpb25DYWNoZU1hbmFnZXIpOwor
ICAgIEFTU0VSVF9FUShhcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwgZXdrX2NvbnRleHRfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlcl9nZXQoY29udGV4dCkpOworfQorCiBURVNUX0YoRVdLMkNvbnRl
eHRUZXN0LCBld2tfY29udGV4dF9jb29raWVfbWFuYWdlcl9nZXQpCiB7CiAgICAgRXdrX0NvbnRl
eHQqIGNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226882</attachid>
            <date>2014-03-16 22:29:38 -0700</date>
            <delta_ts>2014-03-16 22:48:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102853-20140317142915.patch</filename>
            <type>text/plain</type>
            <size>26996</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY1NzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWQ2YmNhMzQ4MTc3YTAz
MTc0OGY5NjhkNjI0NDVhM2ZkZTY2ZDdkZC4uY2E2NTA4Y2Y5ZTk5OTFlODM1MGViMmU4ZmExOTM1
ZTgwNzIwMGRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTAzLTE2ICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEFk
ZCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlciBBUElzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI4NTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBhcHBsaWNhdGlvbiBjYWNo
ZSBtYW5hZ2VyIHRvIGdldCBsaXN0IG9mIG9yaWdpbnMgd2hpY2ggc3RvcmVzCisgICAgICAgIGFw
cGxpY2F0aW9uIGNhY2hlIGFuZCByZW1vdmUgc3BlY2lmaWVkIG9yaWdpbiBvciBhbGwuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZTogQWRkZWQgbmV3bHkgYWRkZWQgZmlsZXMuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpFd2tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlcik6CisgICAgICAgIChFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6
fkV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKEdldF9PcmlnaW5zX0RhdGE6
OkdldF9PcmlnaW5zX0RhdGEpOgorICAgICAgICAoZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnND
YWxsYmFjayk6CisgICAgICAgIChld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5z
X2dldCk6CisgICAgICAgIChld2tfYXBwbGljYXRpb25fY2FjaGVfb3JpZ2luc19mcmVlKToKKyAg
ICAgICAgKGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2RlbGV0ZV9hbGwpOgorICAgICAg
ICAoZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZGVsZXRlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9w
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXI6Omlt
cGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAg
ICAgKEV3a0NvbnRleHQ6OmFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKGV3a19j
b250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2Vj
dXJpdHlfb3JpZ2luX3ByaXZhdGUuaDoKKyAgICAgICAgKEV3a1NlY3VyaXR5T3JpZ2luOjp3a1Nl
Y3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVz
dFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5jcHA6CisgICAgICAgIChFV0syVW5pdFRlc3RTZXJ2
ZXI6OnBvcnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRp
bHMvRVdLMlVuaXRUZXN0U2VydmVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3BwOgorICAgICAgICBBZGRl
ZCB0byB0ZXN0IGFwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuCisgICAgICAgIChzZXJ2ZXJDYWxs
YmFjayk6CisgICAgICAgIChnZXRPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAodGltZXJDYWxs
YmFjayk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcDoKKyAgICAgICAgQWRkZWQgdGVzdCBjYXNlIHRvIHRl
c3QgZ2V0dGVyIG9mIGFwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuCisgICAgICAgIChURVNUX0Yp
OgorCiAyMDE0LTAzLTE2ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBNb3ZlIEdUSyBXZWJLaXQyIGNvZGUgdG8gc3RkOjp1bmlxdWVfcHRyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlCmluZGV4IGY5NjI1ZDk4NWU0YmIyYTEyZmJlODQyZDk3YjE1MmRlYmRl
MDJiZDIuLmU5Mzc3MDA4ODJhZmZiZWE2ZmIxYzA4ODVjZWQ5NzI2MzA1MzcxOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlCkBAIC03Myw2ICs3Myw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvR2VzdHVyZVJlY29nbml6ZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvU25h
cHNob3RJbWFnZUdMLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9j
YWNoZV9tYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19hdXRoX3JlcXVlc3Qu
Y3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcApAQCAtMzM2
LDYgKzMzNyw3IEBAIHNldChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXV0aF9yZXF1ZXN0LmgiCiAgICAgIiR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3
YXJkX2xpc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVO
VF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYXBwbGljYXRpb25fY2FjaGVfbWFu
YWdlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbG9yX3BpY2tlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X21lbnUuaCIKQEAgLTQ0OCw2
ICs0NTAsNyBAQCB0YXJnZXRfbGlua19saWJyYXJpZXMoZXdrMlVuaXRUZXN0VXRpbHMgJHtFV0sy
VW5pdFRlc3RzX0xJQlJBUklFU30pCiAjIFRoZSAiZXdrIiBvbiB0aGUgdGVzdCBuYW1lIG5lZWRz
IHRvIGJlIHN1ZmZpeGVkIHdpdGggIjIiLCBvdGhlcndpc2UgaXQKICMgd2lsbCBjbGFzaCB3aXRo
IHRlc3RzIGZyb20gdGhlIFdlYktpdCAxIHRlc3Qgc3VpdGUuCiBzZXQoRVdLMlVuaXRUZXN0c19C
SU5BUklFUworICAgIHRlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyCiAgICAgdGVz
dF9ld2syX2F1dGhfcmVxdWVzdAogICAgIHRlc3RfZXdrMl9iYWNrX2ZvcndhcmRfbGlzdAogICAg
IHRlc3RfZXdrMl9jb2xvcl9waWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43MGYxM2E5ZjczNjBkMzMwY2FmOGQzNjBkYmQ5ZGFlN2VhYmQwZGY0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Fw
cGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaCIKKwor
I2luY2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJld2tfYXBwbGljYXRpb25fY2FjaGVfbWFu
YWdlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX29iamVjdC5oIgorI2luY2x1ZGUgImV3a19z
ZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitF
d2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcjo6RXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIoV0tB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiBhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcikKKyAgICA6
IG1fYXBwbGljYXRpb25DYWNoZU1hbmFnZXIoYXBwbGljYXRpb25DYWNoZU1hbmFnZXIpCit7Cit9
CisKK0V3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjp+RXdrQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIoKQoreworfQorCitzdHJ1Y3QgR2V0X09yaWdpbnNfRGF0YSB7CisgICAgRXdrX0FwcGxpY2F0
aW9uX0NhY2hlX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJEYXRhOwor
CisgICAgR2V0X09yaWdpbnNfRGF0YShFd2tfQXBwbGljYXRpb25fQ2FjaGVfT3JpZ2luc19HZXRf
Q2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQorICAgICAgICA6IGNhbGxiYWNrKGNhbGxiYWNr
KQorICAgICAgICAsIHVzZXJEYXRhKHVzZXJEYXRhKQorICAgIHsgfQorfTsKKworc3RhdGljIHZv
aWQgZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnNDYWxsYmFjayhXS0FycmF5UmVmIHdrT3JpZ2lu
cywgV0tFcnJvclJlZiwgdm9pZCogY29udGV4dCkKK3sKKyAgICBFaW5hX0xpc3QqIG9yaWdpbnMg
PSBudWxscHRyOworICAgIGF1dG8gY2FsbGJhY2tEYXRhID0gc3RkOjp1bmlxdWVfcHRyPEdldF9P
cmlnaW5zX0RhdGE+KHN0YXRpY19jYXN0PEdldF9PcmlnaW5zX0RhdGEqPihjb250ZXh0KSk7CisK
KyAgICBjb25zdCBzaXplX3Qgb3JpZ2luc0NvdW50ID0gV0tBcnJheUdldFNpemUod2tPcmlnaW5z
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9yaWdpbnNDb3VudDsgKytpKSB7CisgICAg
ICAgIFdLU2VjdXJpdHlPcmlnaW5SZWYgc2VjdXJpdHlPcmlnaW5SZWYgPSBzdGF0aWNfY2FzdDxX
S1NlY3VyaXR5T3JpZ2luUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tPcmlnaW5zLCBpKSk7
CisgICAgICAgIG9yaWdpbnMgPSBlaW5hX2xpc3RfYXBwZW5kKG9yaWdpbnMsIEV3a1NlY3VyaXR5
T3JpZ2luOjpjcmVhdGUoc2VjdXJpdHlPcmlnaW5SZWYpLmxlYWtSZWYoKSk7CisgICAgfQorCisg
ICAgY2FsbGJhY2tEYXRhLT5jYWxsYmFjayhvcmlnaW5zLCBjYWxsYmFja0RhdGEtPnVzZXJEYXRh
KTsKK30KKwordm9pZCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldChj
b25zdCBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciogbWFuYWdlciwgRXdrX0FwcGxpY2F0
aW9uX0NhY2hlX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihtYW5hZ2VyKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihjYWxsYmFjayk7CisKKyAgICBHZXRfT3JpZ2luc19EYXRhKiBjYWxsYmFj
a0RhdGEgPSBuZXcgR2V0X09yaWdpbnNfRGF0YShjYWxsYmFjaywgdXNlckRhdGEpOworICAgIFdL
QXBwbGljYXRpb25DYWNoZU1hbmFnZXJHZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyhtYW5hZ2Vy
LT5pbXBsKCksIGNhbGxiYWNrRGF0YSwgZ2V0QXBwbGljYXRpb25DYWNoZU9yaWdpbnNDYWxsYmFj
ayk7Cit9CisKK0VpbmFfQm9vbCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9kZWxldGVf
YWxsKEV3a19BcHBsaWNhdGlvbl9DYWNoZV9NYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtYW5hZ2VyLCBmYWxzZSk7CisKKyAgICBXS0FwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyRGVsZXRlQWxsRW50cmllcyhtYW5hZ2VyLT5pbXBsKCkpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFu
YWdlcl9kZWxldGUoRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXIsIEV3a19T
ZWN1cml0eV9PcmlnaW4qIG9yaWdpbikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwobWFuYWdlciwgZmFsc2UpOworICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKEV3
a1NlY3VyaXR5T3JpZ2luLCBvcmlnaW4sIGltcGwsIGZhbHNlKTsKKworICAgIFdLQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3JpZ2luKG1hbmFnZXItPmltcGwoKSwgaW1w
bC0+d2tTZWN1cml0eU9yaWdpbigpKTsKKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hl
X21hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNh
dGlvbl9jYWNoZV9tYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNjMDQ1MDAwZGE2N2FiMDJkMzFkNDA3
Zjk1Y2JiYzY0MDJiZThhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmgKQEAgLTAsMCArMSwx
MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmgK
KyAqIEBicmllZiAgIERlc2NyaWJlcyB0aGUgRXdrIEFwcGxpY2F0aW9uIENhY2hlIE1hbmFnZXIg
QVBJLgorICovCisKKyNpZm5kZWYgZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfaAorI2Rl
ZmluZSBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9oCisKKyNpbmNsdWRlICJld2tfc2Vj
dXJpdHlfb3JpZ2luLmgiCisjaW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMK
K2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tf
QXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciAqLwordHlwZWRlZiBzdHJ1Y3QgRXdrQXBwbGljYXRp
b25DYWNoZU1hbmFnZXIgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXI7CisKKy8qKgorICog
QHR5cGVkZWYgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfR2V0X0NiIEV3a19BcHBsaWNh
dGlvbl9DYWNoZV9PcmlnaW5zX0dldF9DYgorICogQGJyaWVmIENhbGxiYWNrIGZvciBld2tfYXBw
bGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldAorICoKKyAqIEBub3RlIFRoZSBAYSBv
cmlnaW5zIHNob3VsZCBiZSBmcmVlZCBsaWtlIGJlbG93IGNvZGUgYWZ0ZXIgdXNlLgorICoKKyAq
IEBjb2RlCisgKgorICogc3RhdGljIHZvaWQKKyAqIF9vcmlnaW5zX2dldF9jYihFaW5hX0xpc3Qq
IG9yaWdpbnMsIGRhdGEpCisgKiB7CisgKiAgICAvLyAuLi4KKyAqCisgKiAgICB2b2lkICpvcmln
aW47CisgKiAgICBFSU5BX0xJU1RfRlJFRShvcmlnaW5zLCBvcmlnaW4pCisgKiAgICAgIGV3a19v
YmplY3RfdW5yZWYoKEV3a19PYmplY3QqKW9yaWdpbik7CisgKiB9CisgKgorICogQGVuZGNvZGUK
KyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfR2V0X0Ni
KShFaW5hX0xpc3QgKm9yaWdpbnMsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogUmVxdWVz
dHMgZm9yIGdldHRpbmcgd2ViIGFwcGxpY2F0aW9uIGNhY2hlIG9yaWdpbnMuCisgKgorICogQHBh
cmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QKKyAqIEBwYXJhbSByZXN1bHRfY2FsbGJhY2sgY2Fs
bGJhY2sgdG8gZ2V0IHdlYiBhcHBsaWNhdGlvbiBjYWNoZSBvcmlnaW5zCisgKiBAcGFyYW0gdXNl
cl9kYXRhIHVzZXJfZGF0YSB3aWxsIGJlIHBhc3NzZWQgd2hlbiByZXN1bHRfY2FsbGJhY2sgaXMg
Y2FsbGVkCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2Vzc2Z1bCByZXF1ZXN0
IG9yIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZQorICoKKyAqIEBzZWUgRXdrX0FwcGxpY2F0aW9u
X0NhY2hlX09yaWdpbnNfR2V0X0NiCisgKi8KK0VBUEkgdm9pZCBld2tfYXBwbGljYXRpb25fY2Fj
aGVfbWFuYWdlcl9vcmlnaW5zX2dldChjb25zdCBFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdl
ciAqbWFuYWdlciwgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX09yaWdpbnNfR2V0X0NiIGNhbGxiYWNr
LCB2b2lkICpkYXRhKTsKKworLyoqCisgKiBSZXF1ZXN0cyBmb3IgZGVsZXRpbmcgYWxsIHdlYiBh
cHBsaWNhdGlvbiBjYWNoZXMuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QK
KyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzZnVsIHJlcXVlc3Qgb3IgQGMg
RUlOQSBGQUxTRSBvbiBmYWlsdXJlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19hcHBsaWNhdGlv
bl9jYWNoZV9tYW5hZ2VyX2RlbGV0ZV9hbGwoRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIg
Km1hbmFnZXIpOworCisvKioKKyAqIFJlcXVlc3RzIGZvciBkZWxldGluZyB3ZWIgYXBwbGljYXRp
b24gY2FjaGUgZm9yIG9yaWdpbi4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVj
dAorICogQHBhcmFtIG9yaWdpbiBhcHBsaWNhdGlvbiBjYWNoZSBvcmlnaW4KKyAqCisgKiBAcmV0
dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzZnVsIHJlcXVlc3Qgb3IgQGMgRUlOQV9GQUxTRSBv
biBmYWlsdXJlCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5h
Z2VyX2RlbGV0ZShFd2tfQXBwbGljYXRpb25fQ2FjaGVfTWFuYWdlciAqbWFuYWdlciwgRXdrX1Nl
Y3VyaXR5X09yaWdpbiAqb3JpZ2luKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYK
KworI2VuZGlmIC8vIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19hcHBsaWNhdGlvbl9jYWNoZV9t
YW5hZ2VyX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19h
cHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjIyYzAwOGY3
ODJjZTBiOGUzYzY2ZDc0OWM1Njc4NWJiZDIwNWNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJf
cHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19hcHBsaWNhdGlvbl9jYWNo
ZV9tYW5hZ2VyX3ByaXZhdGVfaAorI2RlZmluZSBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdl
cl9wcml2YXRlX2gKKworI2luY2x1ZGUgIldLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCIKKyNp
bmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKK2Ns
YXNzIEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBF
d2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcihXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmIGFw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKTsKKyAgICB+RXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIo
KTsKKworICAgIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYgaW1wbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXBwbGljYXRpb25DYWNoZU1hbmFnZXIuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBX
S1JldGFpblB0cjxXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmPiBtX2FwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyOworfTsKKworI2VuZGlmIC8vIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2Vy
X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHQuY3BwCmluZGV4IGE0NTViN2E5N2ZiM2JhOWM0MzRlY2I5MTIxYmNlODQzNTM3MDhkNDku
LjIzZmM2ZWMzYTg0YjYwZWUxOTViNzhjMjJkNmUxZWZmNDA3MDFlYzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTI3LDExICsy
NywxMyBAQAogI2luY2x1ZGUgIk5ldHdvcmtJbmZvUHJvdmlkZXIuaCIKICNpbmNsdWRlICJSZXF1
ZXN0TWFuYWdlckNsaWVudEVmbC5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUg
IldLQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJXS0NvbnRleHRTb3VwLmgiCiAjaW5jbHVk
ZSAiV0tOdW1iZXIuaCIKICNpbmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgIldlYkNvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJld2tfYXBwbGlj
YXRpb25fY2FjaGVfbWFuYWdlcl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJp
dmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlcl9wcml2YXRlLmgiCiAjaW5jbHVk
ZSAiZXdrX2RhdGFiYXNlX21hbmFnZXJfcHJpdmF0ZS5oIgpAQCAtMTM5LDYgKzE0MSwxNCBAQCBF
d2tDb250ZXh0KiBFd2tDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgpCiAgICAgcmV0dXJuIGRlZmF1
bHRJbnN0YW5jZTsKIH0KIAorRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXIqIEV3a0NvbnRleHQ6
OmFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKCkKK3sKKyAgICBpZiAoIW1fYXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIpCisgICAgICAgIG1fYXBwbGljYXRpb25DYWNoZU1hbmFnZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEV3a0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyPihXS0NvbnRleHRHZXRBcHBsaWNhdGlv
bkNhY2hlTWFuYWdlcihtX2NvbnRleHQuZ2V0KCkpKTsKKworICAgIHJldHVybiBtX2FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyLmdldCgpOworfQorCiBFd2tDb29raWVNYW5hZ2VyKiBFd2tDb250ZXh0
Ojpjb29raWVNYW5hZ2VyKCkKIHsKICAgICBpZiAoIW1fY29va2llTWFuYWdlcikKQEAgLTI0OSw2
ICsyNTksMTMgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEV3a0NvbnRleHQ6OmpzR2xvYmFsQ29udGV4
dCgpCiAgICAgcmV0dXJuIG1fanNHbG9iYWxDb250ZXh0OwogfQogCitFd2tfQXBwbGljYXRpb25f
Q2FjaGVfTWFuYWdlciogZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQo
Y29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCit7CisgICAgRVdLX09CSl9HRVRfSU1QTF9P
Ul9SRVRVUk4oY29uc3QgRXdrQ29udGV4dCwgZXdrQ29udGV4dCwgaW1wbCwgbnVsbHB0cik7CisK
KyAgICByZXR1cm4gY29uc3RfY2FzdDxFd2tDb250ZXh0Kj4oaW1wbCktPmFwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyKCk7Cit9CisKIEV3a19Db29raWVfTWFuYWdlciogZXdrX2NvbnRleHRfY29va2ll
X21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQogewogICAgIEVXS19P
QkpfR0VUX0lNUExfT1JfUkVUVVJOKGNvbnN0IEV3a0NvbnRleHQsIGV3a0NvbnRleHQsIGltcGws
IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmgKaW5kZXggMTNiMTZkM2MxNDY4ZDRmMDQwYWZiMGJlMDYzYjg4MGU5MDNkN2JmNS4uNDI4
ZDdmMWFlMWNhM2YzOWQ1NmUyNTUwZThiNmEwYzNiMDBiMTBiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCkBAIC0zNyw2ICszNyw3IEBACiAj
aWZuZGVmIGV3a19jb250ZXh0X2gKICNkZWZpbmUgZXdrX2NvbnRleHRfaAogCisjaW5jbHVkZSAi
ZXdrX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuaCIKICNpbmNsdWRlICJld2tfY29va2llX21h
bmFnZXIuaCIKICNpbmNsdWRlICJld2tfZGF0YWJhc2VfbWFuYWdlci5oIgogI2luY2x1ZGUgImV3
a19mYXZpY29uX2RhdGFiYXNlLmgiCkBAIC0xNjEsNiArMTYyLDE1IEBAIEVBUEkgRXdrX0NvbnRl
eHQgKmV3a19jb250ZXh0X25ldyh2b2lkKTsKIEVBUEkgRXdrX0NvbnRleHQgKmV3a19jb250ZXh0
X25ld193aXRoX2luamVjdGVkX2J1bmRsZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOwogCiAvKioK
KyAqIEdldHMgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIG1hbmFnZXIgaW5zdGFuY2UgZm9yIHRoaXMg
QGEgY29udGV4dC4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0byBxdWVy
eS4KKyAqCisgKiBAcmV0dXJuIEV3a19Db29raWVfTWFuYWdlciBvYmplY3QgaW5zdGFuY2Ugb3Ig
QGMgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK0VBUEkgRXdrX0FwcGxpY2F0aW9uX0Nh
Y2hlX01hbmFnZXIgKmV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZ2V0KGNv
bnN0IEV3a19Db250ZXh0ICpjb250ZXh0KTsKKworLyoqCiAgKiBHZXRzIHRoZSBjb29raWUgbWFu
YWdlciBpbnN0YW5jZSBmb3IgdGhpcyBAYSBjb250ZXh0LgogICoKICAqIEBwYXJhbSBjb250ZXh0
IGNvbnRleHQgb2JqZWN0IHRvIHF1ZXJ5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IGZlMzMxNDk1NjI2YTY0
M2Q3M2NhMDAzY2Y5MThlNTRhNjdhN2VjMzguLjQ2YzM3MmU2MzIxY2Q1Y2M0YmM1NmM1Y2JhY2M4
ZjM0MjU0YWZiMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIAorY2xhc3MgRXdrQXBwbGljYXRpb25DYWNoZU1hbmFnZXI7CiBjbGFz
cyBFd2tDb29raWVNYW5hZ2VyOwogY2xhc3MgRXdrRmF2aWNvbkRhdGFiYXNlOwogCkBAIC01Nyw4
ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIH5Fd2tDb250ZXh0KCk7CiAKKyAgICBFd2tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlciogYXBwbGljYXRpb25DYWNoZU1hbmFnZXIoKTsKICAgICBFd2tDb29r
aWVNYW5hZ2VyKiBjb29raWVNYW5hZ2VyKCk7Ci0KICAgICBFd2tEYXRhYmFzZU1hbmFnZXIqIGRh
dGFiYXNlTWFuYWdlcigpOwogCiAgICAgYm9vbCBzZXRGYXZpY29uRGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtMTAwLDYgKzEwMSw3IEBA
IHByaXZhdGU6CiAKICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4dDsKIAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFd2tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcj4gbV9hcHBsaWNh
dGlvbkNhY2hlTWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXdrQ29va2llTWFuYWdlcj4g
bV9jb29raWVNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFd2tEYXRhYmFzZU1hbmFnZXI+
IG1fZGF0YWJhc2VNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFd2tGYXZpY29uRGF0YWJh
c2U+IG1fZmF2aWNvbkRhdGFiYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaAppbmRleCBl
Nzg3Y2UxNWRlMGRkNmYxYjZhYWNlOTQ3YjEwOGQ0OTYyNGIxYjllLi41NmY2Y2YwZjgyYjA3Y2Ey
NGQzMGUzNzk4MTlmMTdkYTdmODVkN2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2VjdXJpdHlfb3JpZ2luX3ByaXZhdGUuaApA
QCAtNDksNiArNDksOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgY2hhciogcHJvdG9jb2woKSBjb25z
dDsKICAgICB1aW50MzJfdCBwb3J0KCkgY29uc3Q7CiAKKyAgICBXS1NlY3VyaXR5T3JpZ2luUmVm
IHdrU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3drT3JpZ2luLmdldCgpOyB9CisK
IHByaXZhdGU6CiAgICAgZXhwbGljaXQgRXdrU2VjdXJpdHlPcmlnaW4oV0tTZWN1cml0eU9yaWdp
blJlZiBvcmlnaW5SZWYpOwogICAgIGV4cGxpY2l0IEV3a1NlY3VyaXR5T3JpZ2luKGNvbnN0IGNo
YXIqIHVybCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZl
ci5jcHAKaW5kZXggNGVmNGNmNzZmNzc0MWU3MzU0NGQyNzE4ODNlMThkMTM1YjE3ZTI5ZC4uYmQ4
YzY5MzAzMWM5MmM5NDRjZjFjMjgyNjc0YjljZjQwMTZjNWVhOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRl
c3RTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmNwcApAQCAtNTQsMyArNTQsOCBAQCBD
U3RyaW5nIEVXSzJVbml0VGVzdFNlcnZlcjo6Z2V0VVJMRm9yUGF0aChjb25zdCBjaGFyKiBwYXRo
KSBjb25zdAogCiAgICAgcmV0dXJuIHVybFN0cmluZzsKIH0KKwordW5zaWduZWQgRVdLMlVuaXRU
ZXN0U2VydmVyOjpwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc291cF9zZXJ2ZXJfZ2V0X3Bv
cnQobV9zb3VwU2VydmVyKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0
VGVzdFNlcnZlci5oCmluZGV4IGI5NjdjZTQwOWJhZDlhNDE0ZDAxNGJhNzc4MzBiYzdmMjA2ZGZl
NzguLjgxZDI0OGNhYTU3NTU3YzlmMDAyNGI3MzU1N2YxZDhmNTQ4NDYwNzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdL
MlVuaXRUZXN0U2VydmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
dGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuaApAQCAtMzAsNiArMzAsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RVdLMlVuaXRUZXN0U2VydmVyKCk7CiAKICAgICBDU3Ry
aW5nIGdldFVSTEZvclBhdGgoY29uc3QgY2hhciogcGF0aCkgY29uc3Q7CisgICAgdW5zaWduZWQg
cG9ydCgpIGNvbnN0OworCiAgICAgdm9pZCBydW4oU291cFNlcnZlckNhbGxiYWNrKTsKIAogcHJp
dmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L3Rlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9hcHBsaWNhdGlvbl9jYWNoZV9tYW5h
Z2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yZWZmYmY2NWRhZjY0YzQ0MTFjNDY3YThmZWQ1OTQ3OTg1ODIz
ZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
dGVzdHMvdGVzdF9ld2syX2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXIuY3BwCkBAIC0wLDAgKzEs
MTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9F
V0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RF
bnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVy
LmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVz
dDsKKworc3RhdGljIGNvbnN0IGNoYXIgYXBwbGljYXRpb25DYWNoZUh0bWxbXSA9CisgICAgIjwh
ZG9jdHlwZSBodG1sPiIKKyAgICAiPGh0bWwgbWFuaWZlc3Q9J3Rlc3QuYXBwY2FjaGUnPiIKKyAg
ICAiPGhlYWQ+PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPSdjbG9jay5jc3MnPjwvaGVhZD4i
CisgICAgIjxib2R5PkFwcGxpY2F0aW9uIENhY2hlIFRlc3Q8L2JvZHk+IgorICAgICI8L2h0bWw+
IjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFtdID0gIkNBQ0hF
IE1BTklGRVNUXG4iCisgICAgImFwcGxpY2F0aW9uX2NhY2hlLmh0bWxcbiIKKyAgICAiY2xvY2su
Y3NzIjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVDc3NbXSA9ICJvdXRwdXQg
eyBmb250OjJlbSBzYW5zLXNlcmlmOyB9IjsKK3N0YXRpYyBjb25zdCBjaGFyIGFwcGxpY2F0aW9u
Q2FjaGVIdG1sRmlsZVtdID0gIi9hcHBsaWNhdGlvbl9jYWNoZS5odG1sIjsKK3N0YXRpYyBjb25z
dCBjaGFyIGFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdEZpbGVbXSA9ICIvdGVzdC5hcHBjYWNoZSI7
CitzdGF0aWMgY29uc3QgY2hhciBhcHBsaWNhdGlvbkNhY2hlQ3NzRmlsZVtdID0gIi9jbG9jay5j
c3MiOworCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiwgU291cE1lc3Nh
Z2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29u
dGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRI
T0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgRWlu
YV9TdHJidWYqIGJvZHkgPSBlaW5hX3N0cmJ1Zl9uZXcoKTsKKworICAgIGlmICghc3RyY21wKHBh
dGgsIGFwcGxpY2F0aW9uQ2FjaGVIdG1sRmlsZSkpCisgICAgICAgIGVpbmFfc3RyYnVmX2FwcGVu
ZF9wcmludGYoYm9keSwgYXBwbGljYXRpb25DYWNoZUh0bWwpOworICAgIGVsc2UgaWYgKCFzdHJj
bXAocGF0aCwgYXBwbGljYXRpb25DYWNoZU1hbmlmZXN0RmlsZSkpCisgICAgICAgIGVpbmFfc3Ry
YnVmX2FwcGVuZF9wcmludGYoYm9keSwgYXBwbGljYXRpb25DYWNoZU1hbmlmZXN0KTsKKyAgICBl
bHNlIGlmICghc3RyY21wKHBhdGgsIGFwcGxpY2F0aW9uQ2FjaGVDc3NGaWxlKSkKKyAgICAgICAg
ZWluYV9zdHJidWZfYXBwZW5kX3ByaW50Zihib2R5LCBhcHBsaWNhdGlvbkNhY2hlQ3NzKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX0ZPVU5EKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgICAgIGVpbmFfc3RyYnVmX2ZyZWUoYm9keSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBzaXplX3QgYm9keUxlbmd0aCA9IGVp
bmFfc3RyYnVmX2xlbmd0aF9nZXQoYm9keSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGVpbmFfc3RyYnVmX3N0
cmluZ19zdGVhbChib2R5KSwgYm9keUxlbmd0aCk7CisgICAgZWluYV9zdHJidWZfZnJlZShib2R5
KTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHkpOworfQorCitzdHJ1Y3QgT3JpZ2luc0RhdGEgeworICAgIEVpbmFfTGlzdCogaXRlbXM7Cisg
ICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIG1hbmFnZXI7Cit9OworCitzdGF0aWMg
dm9pZCBnZXRPcmlnaW5zQ2FsbGJhY2soRWluYV9MaXN0KiBvcmlnaW5zLCB2b2lkKiBldmVudF9p
bmZvKQoreworICAgIEVpbmFfTGlzdCoqIHJldCA9IHN0YXRpY19jYXN0PEVpbmFfTGlzdCoqPihl
dmVudF9pbmZvKTsKKyAgICAqcmV0ID0gb3JpZ2luczsKKyAgICBlY29yZV9tYWluX2xvb3BfcXVp
dCgpOworfQorCitzdGF0aWMgRWluYV9Cb29sIHRpbWVyQ2FsbGJhY2sodm9pZCogdXNlckRhdGEp
Cit7CisgICAgT3JpZ2luc0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxPcmlnaW5zRGF0YSo+KHVz
ZXJEYXRhKTsKKyAgICBld2tfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9vcmlnaW5zX2dldChk
YXRhLT5tYW5hZ2VyLCBnZXRPcmlnaW5zQ2FsbGJhY2ssICZkYXRhLT5pdGVtcyk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19hcHBsaWNhdGlv
bl9jYWNoZV9tYW5hZ2VyKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxFV0syVW5pdFRlc3RTZXJ2
ZXI+IGh0dHBTZXJ2ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEVXSzJVbml0VGVzdFNlcnZlcj4oKTsK
KyAgICBodHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgRWNvcmVfVGltZXIq
IGFwcGxpY2F0aW9uQ2FjaGVUaW1lcjsKKyAgICBPcmlnaW5zRGF0YSBkYXRhOworICAgIGRhdGEu
bWFuYWdlciA9IGV3a19jb250ZXh0X2FwcGxpY2F0aW9uX2NhY2hlX21hbmFnZXJfZ2V0KGV3a192
aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSkpOworCisgICAgLy8gQmVmb3JlIHRlc3RpbmcsIHJl
bW92ZSBhbGwgY2FjaGVzLgorICAgIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2RlbGV0
ZV9hbGwoZGF0YS5tYW5hZ2VyKTsKKworICAgIGFwcGxpY2F0aW9uQ2FjaGVUaW1lciA9IGVjb3Jl
X3RpbWVyX2FkZCgwLjUsIHRpbWVyQ2FsbGJhY2ssICZkYXRhKTsKKyAgICBlY29yZV9tYWluX2xv
b3BfYmVnaW4oKTsKKyAgICBBU1NFUlRfRVEoMCwgZWluYV9saXN0X2NvdW50KGRhdGEuaXRlbXMp
KTsKKworICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGh0dHBTZXJ2ZXItPmdldFVSTEZvclBh
dGgoYXBwbGljYXRpb25DYWNoZUh0bWxGaWxlKS5kYXRhKCkpKTsKKworICAgIGFwcGxpY2F0aW9u
Q2FjaGVUaW1lciA9IGVjb3JlX3RpbWVyX2FkZCgwLjUsIHRpbWVyQ2FsbGJhY2ssICZkYXRhKTsK
KyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKyAgICBBU1NFUlRfRVEoMSwgZWluYV9saXN0
X2NvdW50KGRhdGEuaXRlbXMpKTsKKworICAgIGV3a19hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2Vy
X2RlbGV0ZShkYXRhLm1hbmFnZXIsIHN0YXRpY19jYXN0PEV3a19TZWN1cml0eV9PcmlnaW4qPihl
aW5hX2xpc3RfbnRoKGRhdGEuaXRlbXMsIDApKSk7CisKKyAgICB2b2lkKiBvcmlnaW47CisgICAg
RUlOQV9MSVNUX0ZSRUUoZGF0YS5pdGVtcywgb3JpZ2luKQorICAgICAgICBld2tfb2JqZWN0X3Vu
cmVmKHN0YXRpY19jYXN0PEV3a19PYmplY3QqPihvcmlnaW4pKTsKKworICAgIGRhdGEuaXRlbXMg
PSBudWxscHRyOworCisgICAgYXBwbGljYXRpb25DYWNoZVRpbWVyID0gZWNvcmVfdGltZXJfYWRk
KDAuNSwgdGltZXJDYWxsYmFjaywgJmRhdGEpOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigp
OworICAgIEFTU0VSVF9FUSgwLCBlaW5hX2xpc3RfY291bnQoZGF0YS5pdGVtcykpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2sy
X2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVz
dF9ld2syX2NvbnRleHQuY3BwCmluZGV4IGY5ZGIwZWYyNjE3MGJlM2RlYzBkYTQ5YTJkOTBiZWFm
YmZkYWRiN2QuLjU3NmRlMmUyYmQwM2Q2MThhNjM4OGZhYzZkZTE2MjY1NTFhMzIzMDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9j
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90
ZXN0X2V3azJfY29udGV4dC5jcHAKQEAgLTU1LDYgKzU1LDE0IEBAIFRFU1RfRihFV0syQ29udGV4
dFRlc3QsIGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KQogICAgIEFTU0VSVF9FUShkZWZhdWx0Q29u
dGV4dCwgZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQoKSk7CiB9CiAKK1RFU1RfRihFV0syVW5pdFRl
c3RCYXNlLCBld2tfY29udGV4dF9hcHBsaWNhdGlvbl9jYWNoZV9tYW5hZ2VyX2dldCkKK3sKKyAg
ICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7
CisgICAgRXdrX0FwcGxpY2F0aW9uX0NhY2hlX01hbmFnZXIqIGFwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyID0gZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2FjaGVfbWFuYWdlcl9nZXQoY29udGV4dCk7
CisgICAgQVNTRVJUX1RSVUUoYXBwbGljYXRpb25DYWNoZU1hbmFnZXIpOworICAgIEFTU0VSVF9F
UShhcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwgZXdrX2NvbnRleHRfYXBwbGljYXRpb25fY2FjaGVf
bWFuYWdlcl9nZXQoY29udGV4dCkpOworfQorCiBURVNUX0YoRVdLMkNvbnRleHRUZXN0LCBld2tf
Y29udGV4dF9jb29raWVfbWFuYWdlcl9nZXQpCiB7CiAgICAgRXdrX0NvbnRleHQqIGNvbnRleHQg
PSBld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>