<?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>69343</bug_id>
          
          <creation_ts>2011-10-04 09:57:05 -0700</creation_ts>
          <short_desc>[GTK] Initial implementation of back forward list for WebKit2 GTK+ API</short_desc>
          <delta_ts>2015-05-29 06:53:52 -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>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>69823</dependson>
    
    <dependson>70010</dependson>
          <blocked>69825</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>477659</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-04 09:57:05 -0700</bug_when>
    <thetext>It&apos;s currently missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477669</commentid>
    <comment_count>1</comment_count>
      <attachid>109635</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-04 10:04:40 -0700</bug_when>
    <thetext>Created attachment 109635
Patch

Initial impementation of bf list. The API is a bit different from webkit1. In wk1 we have WebkitWebHistoryItem, which is a bit confusing, it made me think there was a WebKitWebHistory object. So, I&apos;ve renamed it to WebKitWebBackForwardListItem. C API doesn&apos;t expose AddItem method, so I haven&apos;t included it in GTK+ API for now, I&apos;ve asked apple guys if there&apos;s a reason for not exposing such a method. I&apos;ve tried to not add methods present in wk1 API that don&apos;t seem to be used, to the patch a bit smaller too, we can add them in following patches if they are actually needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477672</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-04 10:08:24 -0700</bug_when>
    <thetext>Attachment 109635 did not pass style-queue:

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

Last 3072 characters of output:
rent_item is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:130:  webkit_web_back_forward_list_get_back_item is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:146:  webkit_web_back_forward_list_get_forward_item is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:163:  webkit_web_back_forward_list_get_nth_item is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:176:  webkit_web_back_forward_list_get_length is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:192:  webkit_web_back_forward_list_get_back_list is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:208:  webkit_web_back_forward_list_get_back_list_with_limit is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:222:  webkit_web_back_forward_list_get_forward_list is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:238:  webkit_web_back_forward_list_get_forward_list_with_limit is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:271:  webkit_web_view_get_back_forward_list is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardListItem.cpp:44:  webkit_web_back_forward_list_item_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardListItem.cpp:51:  webkit_web_back_forward_list_item_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardListItem.cpp:81:  webkit_web_back_forward_list_item_get_uri is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardListItem.cpp:94:  webkit_web_back_forward_list_item_get_title is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardListItem.cpp:107:  webkit_web_back_forward_list_item_get_original_uri is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 67 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478461</commentid>
    <comment_count>3</comment_count>
      <attachid>109635</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-05 10:05:59 -0700</bug_when>
    <thetext>Comment on attachment 109635
Patch

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

Looks quite nice. Why not WebKitBackForwradList instead of WebkitWebBackForwardList?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:38
&gt; +static void webkit_web_back_forward_list_init(WebKitWebBackForwardList* webList)

webList -&gt; list if you rename?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:56
&gt; +    static GHashTable* items = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref);

NULL -&gt; 0

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:70
&gt; +    g_hash_table_insert(historyItems(), (gpointer)wkItem, item);

No need for a cast here. Maybe this should happen in webkitWebBackForwardListItemCreate so that if we use it somewhere else we don&apos;t have to duplicate this?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:75
&gt; +static GList* webkitWebBackForwardListCreateList(WKArrayRef wkList)

I like the convention wkFoo. We should use that everywhere!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:82
&gt; +    guint listCount = WKArrayGetSize(wkList);
&gt; +    if (!listCount)
&gt; +        return 0;

I don&apos;t think this optimization adds much. You can probably just omit it.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:109
&gt; + * Returns the current item in @back_forward_list.

I think this should be expanded a bit. What is the current item exactly and how does the navigation on the page change it? When the user navigates does this BF list update in real-time or do they have to refetch it?

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:130
&gt;&gt; +WebKitWebBackForwardListItem* webkit_web_back_forward_list_get_back_item(WebKitWebBackForwardList* webBackForwardList)
&gt; 
&gt; webkit_web_back_forward_list_get_back_item is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

I&apos;ll work on fixing these annoying style bot issues next.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardListPrivate.h:38
&gt; +G_BEGIN_DECLS
&gt; +
&gt; +WebKitWebBackForwardList* webkitWebBackForwardListCreate(WKBackForwardListRef);
&gt; +WebKitWebBackForwardListItem* webkitWebBackForwardListItemCreate(WKBackForwardListItemRef);
&gt; +
&gt; +G_END_DECLS

Might as well let these symbols be mangled and by omittng the G_BEGIN_DECLS/G_END_DECLS declarations.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:47
&gt;      WebKitWebContext* context;
&gt;  
&gt;      GRefPtr&lt;WebKitWebLoaderClient&gt; loaderClient;
&gt; +    GRefPtr&lt;WebKitWebBackForwardList&gt; backForwardList;

Please move this under context. Let&apos;s keep the clients in a clump together.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:62
&gt; +    WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
&gt; +    priv-&gt;backForwardList = adoptGRef(webkitWebBackForwardListCreate(WKPageGetBackForwardList(toAPI(page))));

Why not cache the result of the toAPI call instead?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/testbackforwardlist.c:1
&gt; +/*

I guess this will change once we finish overhauling the unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478990</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-05 23:53:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 109635 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109635&amp;action=review
&gt; 
&gt; Looks quite nice. Why not WebKitBackForwradList instead of WebkitWebBackForwardList?

Just because wk1 API uses this name, it would make porting easier.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:38
&gt; &gt; +static void webkit_web_back_forward_list_init(WebKitWebBackForwardList* webList)
&gt; 
&gt; webList -&gt; list if you rename?

Yes.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:56
&gt; &gt; +    static GHashTable* items = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref);
&gt; 
&gt; NULL -&gt; 0

Right.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:70
&gt; &gt; +    g_hash_table_insert(historyItems(), (gpointer)wkItem, item);
&gt; 
&gt; No need for a cast here. Maybe this should happen in webkitWebBackForwardListItemCreate so that if we use it somewhere else we don&apos;t have to duplicate this?

Yes, the cast is needed, because wkItem is const. Moving it to webkitWebBackForwardListItemCreate() we wouldn&apos;t need GetOrCreate().

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:75
&gt; &gt; +static GList* webkitWebBackForwardListCreateList(WKArrayRef wkList)
&gt; 
&gt; I like the convention wkFoo. We should use that everywhere!

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:82
&gt; &gt; +    guint listCount = WKArrayGetSize(wkList);
&gt; &gt; +    if (!listCount)
&gt; &gt; +        return 0;
&gt; 
&gt; I don&apos;t think this optimization adds much. You can probably just omit it.

Right, the loop won&apos;t iterate anyway, so it will return NULL too.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:109
&gt; &gt; + * Returns the current item in @back_forward_list.
&gt; 
&gt; I think this should be expanded a bit. What is the current item exactly and how does the navigation on the page change it? When the user navigates does this BF list update in real-time or do they have to refetch it?

Ok.

&gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardList.cpp:130
&gt; &gt;&gt; +WebKitWebBackForwardListItem* webkit_web_back_forward_list_get_back_item(WebKitWebBackForwardList* webBackForwardList)
&gt; &gt; 
&gt; &gt; webkit_web_back_forward_list_get_back_item is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; 
&gt; I&apos;ll work on fixing these annoying style bot issues next.

Remember I already filed a bug for this:

https://bugs.webkit.org/show_bug.cgi?id=65179

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardListPrivate.h:38
&gt; &gt; +G_BEGIN_DECLS
&gt; &gt; +
&gt; &gt; +WebKitWebBackForwardList* webkitWebBackForwardListCreate(WKBackForwardListRef);
&gt; &gt; +WebKitWebBackForwardListItem* webkitWebBackForwardListItemCreate(WKBackForwardListItemRef);
&gt; &gt; +
&gt; &gt; +G_END_DECLS
&gt; 
&gt; Might as well let these symbols be mangled and by omittng the G_BEGIN_DECLS/G_END_DECLS declarations.

I don&apos;t understand what you mean.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:47
&gt; &gt;      WebKitWebContext* context;
&gt; &gt;  
&gt; &gt;      GRefPtr&lt;WebKitWebLoaderClient&gt; loaderClient;
&gt; &gt; +    GRefPtr&lt;WebKitWebBackForwardList&gt; backForwardList;
&gt; 
&gt; Please move this under context. Let&apos;s keep the clients in a clump together.

WebContext is not a client, it&apos;s a property.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:62
&gt; &gt; +    WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
&gt; &gt; +    priv-&gt;backForwardList = adoptGRef(webkitWebBackForwardListCreate(WKPageGetBackForwardList(toAPI(page))));
&gt; 
&gt; Why not cache the result of the toAPI call instead?

Cache where? toAPI is just a cast, the page is already cached in parent class. 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/testbackforwardlist.c:1
&gt; &gt; +/*
&gt; 
&gt; I guess this will change once we finish overhauling the unit tests.

Yes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479167</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-06 08:23:27 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 109635 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109635&amp;action=review
&gt; &gt; 
&gt; &gt; Looks quite nice. Why not WebKitBackForwradList instead of WebkitWebBackForwardList?
&gt; 
&gt; Just because wk1 API uses this name, it would make porting easier.

It&apos;s just my opinion, but WebKitWebBackFowardList seems a little redudant. It&apos;s the WebKit, so I imagine it&apos;s a web back-foward list.  Porting is going to be really tough, but this is just a simple search and replace. Let&apos;s not let the old API hold us back.

&gt; &gt; No need for a cast here. Maybe this should happen in webkitWebBackForwardListItemCreate so that if we use it somewhere else we don&apos;t have to duplicate this?
&gt; 
&gt; Yes, the cast is needed, because wkItem is const. Moving it to 
webkitWebBackForwardListItemCreate() we wouldn&apos;t need GetOrCreate().

You should use a C++ style cast in this cast const_cast&lt;etc&gt;(...). This brings up an interesting problem. The hash you have has a subtle bug. If the WK item is freed and another is reallocated in the same spot the cache will return the wrong item. You&apos;ll need to ensure that they are the same item when returning them, I think.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardListPrivate.h:38
&gt; &gt; &gt; +G_BEGIN_DECLS
&gt; &gt; &gt; +
&gt; &gt; &gt; +WebKitWebBackForwardList* webkitWebBackForwardListCreate(WKBackForwardListRef);
&gt; &gt; &gt; +WebKitWebBackForwardListItem* webkitWebBackForwardListItemCreate(WKBackForwardListItemRef);
&gt; &gt; &gt; +
&gt; &gt; &gt; +G_END_DECLS
&gt; &gt; 
&gt; &gt; Might as well let these symbols be mangled and by omittng the G_BEGIN_DECLS/G_END_DECLS declarations.
&gt; 
&gt; I don&apos;t understand what you mean.

G_BEGIN_DECLS/G_END_DECLS essentially does an extern &quot;C&quot;{ }. This prevents the symbol names from being mangled by the compiler. I think removing those lines will prevent this and make it harder for people to use the private API.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:47
&gt; &gt; &gt;      WebKitWebContext* context;
&gt; &gt; &gt;  
&gt; &gt; &gt;      GRefPtr&lt;WebKitWebLoaderClient&gt; loaderClient;
&gt; &gt; &gt; +    GRefPtr&lt;WebKitWebBackForwardList&gt; backForwardList;
&gt; &gt; 
&gt; &gt; Please move this under context. Let&apos;s keep the clients in a clump together.

I just think it would be nice to keep the clients in a group at the end. So:
 WebKitWebContext* context
GRefPtr&lt;WebKitWebBackForwardList&gt; backForwardList;
Other property;
Other property;

GRefPtr&lt;WebKitWebLoaderClient&gt; loaderClient;
GRefPtr&lt;WebKitWebLoaderClient&gt; otherClient;

Just a nit!

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:62
&gt; &gt; &gt; +    WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
&gt; &gt; &gt; +    priv-&gt;backForwardList = adoptGRef(webkitWebBackForwardListCreate(WKPageGetBackForwardList(toAPI(page))));
&gt; &gt; 
&gt; &gt; Why not cache the result of the toAPI call instead?
&gt; 
&gt; Cache where? toAPI is just a cast, the page is already cached in parent class. 

I was just suggesting putting the result of the cast in the local page variable, instead of splitting the conversion from WebKitWebView to the toAPI(page) across two lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479169</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-06 08:29:06 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 109635 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109635&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; Looks quite nice. Why not WebKitBackForwradList instead of WebkitWebBackForwardList?
&gt; &gt; 
&gt; &gt; Just because wk1 API uses this name, it would make porting easier.
&gt; 
&gt; It&apos;s just my opinion, but WebKitWebBackFowardList seems a little redudant. It&apos;s the WebKit, so I imagine it&apos;s a web back-foward list.  Porting is going to be really tough, but this is just a simple search and replace. Let&apos;s not let the old API hold us back.

I agree, and I also prefer WebKitBackForwardList, I&apos;ll rename it.

&gt; &gt; &gt; No need for a cast here. Maybe this should happen in webkitWebBackForwardListItemCreate so that if we use it somewhere else we don&apos;t have to duplicate this?
&gt; &gt; 
&gt; &gt; Yes, the cast is needed, because wkItem is const. Moving it to 
&gt; webkitWebBackForwardListItemCreate() we wouldn&apos;t need GetOrCreate().
&gt; 
&gt; You should use a C++ style cast in this cast const_cast&lt;etc&gt;(...). This brings up an interesting problem. The hash you have has a subtle bug. If the WK item is freed and another is reallocated in the same spot the cache will return the wrong item. You&apos;ll need to ensure that they are the same item when returning them, I think.

I used the pointer because items are cached by WebProcess.

&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebBackForwardListPrivate.h:38
&gt; &gt; &gt; &gt; +G_BEGIN_DECLS
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +WebKitWebBackForwardList* webkitWebBackForwardListCreate(WKBackForwardListRef);
&gt; &gt; &gt; &gt; +WebKitWebBackForwardListItem* webkitWebBackForwardListItemCreate(WKBackForwardListItemRef);
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +G_END_DECLS
&gt; &gt; &gt; 
&gt; &gt; &gt; Might as well let these symbols be mangled and by omittng the G_BEGIN_DECLS/G_END_DECLS declarations.
&gt; &gt; 
&gt; &gt; I don&apos;t understand what you mean.
&gt; 
&gt; G_BEGIN_DECLS/G_END_DECLS essentially does an extern &quot;C&quot;{ }. This prevents the symbol names from being mangled by the compiler. I think removing those lines will prevent this and make it harder for people to use the private API.

Ok, I see.

&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:47
&gt; &gt; &gt; &gt;      WebKitWebContext* context;
&gt; &gt; &gt; &gt;  
&gt; &gt; &gt; &gt;      GRefPtr&lt;WebKitWebLoaderClient&gt; loaderClient;
&gt; &gt; &gt; &gt; +    GRefPtr&lt;WebKitWebBackForwardList&gt; backForwardList;
&gt; &gt; &gt; 
&gt; &gt; &gt; Please move this under context. Let&apos;s keep the clients in a clump together.
&gt; 
&gt; I just think it would be nice to keep the clients in a group at the end. So:
&gt;  WebKitWebContext* context
&gt; GRefPtr&lt;WebKitWebBackForwardList&gt; backForwardList;
&gt; Other property;
&gt; Other property;
&gt; 
&gt; GRefPtr&lt;WebKitWebLoaderClient&gt; loaderClient;
&gt; GRefPtr&lt;WebKitWebLoaderClient&gt; otherClient;
&gt; 
&gt; Just a nit!

As you wish :-)

&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:62
&gt; &gt; &gt; &gt; +    WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
&gt; &gt; &gt; &gt; +    priv-&gt;backForwardList = adoptGRef(webkitWebBackForwardListCreate(WKPageGetBackForwardList(toAPI(page))));
&gt; &gt; &gt; 
&gt; &gt; &gt; Why not cache the result of the toAPI call instead?
&gt; &gt; 
&gt; &gt; Cache where? toAPI is just a cast, the page is already cached in parent class. 
&gt; 
&gt; I was just suggesting putting the result of the cast in the local page variable, instead of splitting the conversion from WebKitWebView to the toAPI(page) across two lines.

I think it doesn&apos;t make any difference, we still need two lines, that would only make the first line longer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479214</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-06 09:39:51 -0700</bug_when>
    <thetext>(In reply to comment #6)

&gt; &gt; You should use a C++ style cast in this cast const_cast&lt;etc&gt;(...). This brings up an interesting problem. The hash you have has a subtle bug. If the WK item is freed and another is reallocated in the same spot the cache will return the wrong item. You&apos;ll need to ensure that they are the same item when returning them, I think.
&gt; 
&gt; I used the pointer because items are cached by WebProcess.

You&apos;ll still need to check that the item is the same in getOrCreate. Otherwise you might return the wrong cached GTK+ item for an particular WK item.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479946</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-07 05:21:41 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; 
&gt; &gt; &gt; You should use a C++ style cast in this cast const_cast&lt;etc&gt;(...). This brings up an interesting problem. The hash you have has a subtle bug. If the WK item is freed and another is reallocated in the same spot the cache will return the wrong item. You&apos;ll need to ensure that they are the same item when returning them, I think.
&gt; &gt; 
&gt; &gt; I used the pointer because items are cached by WebProcess.
&gt; 
&gt; You&apos;ll still need to check that the item is the same in getOrCreate. Otherwise you might return the wrong cached GTK+ item for an particular WK item.

Right, I now keep a reference of the item to make sure it&apos;s not freed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479951</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-07 05:41:00 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; &gt; No need for a cast here. Maybe this should happen in webkitWebBackForwardListItemCreate so that if we use it somewhere else we don&apos;t have to duplicate this?
&gt; &gt; 
&gt; &gt; Yes, the cast is needed, because wkItem is const. Moving it to 
&gt; webkitWebBackForwardListItemCreate() we wouldn&apos;t need GetOrCreate().
&gt; 
&gt; You should use a C++ style cast in this cast const_cast&lt;etc&gt;(...). This brings up an interesting problem. The hash you have has a subtle bug. If the WK item is freed and another is reallocated in the same spot the cache will return the wrong item. You&apos;ll need to ensure that they are the same item when returning them, I think.

None of the C++ casts work here . . .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479952</commentid>
    <comment_count>10</comment_count>
      <attachid>110130</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-07 05:49:51 -0700</bug_when>
    <thetext>Created attachment 110130
Updated patch

Updated patch addressing all comments, expect the C++ style cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481541</commentid>
    <comment_count>11</comment_count>
      <attachid>110491</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-11 03:09:10 -0700</bug_when>
    <thetext>Created attachment 110491
Updated patch

- Use a HashMap instead of a GHashTable for list items, this way we don&apos;t need the cast
- Add tests for can_go_back and can_go_forward, since these methods depend on the back forward list too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482940</commentid>
    <comment_count>12</comment_count>
      <attachid>110491</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-12 18:46:15 -0700</bug_when>
    <thetext>Comment on attachment 110491
Updated patch

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

Looks good. Only giving r- because of the memory leak. I guess you&apos;ll need to convert the unit test. Let me know if you want me to do that -- perfectly willing to since I created this mess.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:30
&gt; + * @Short_description: List of visited pages
&gt; + * @Title: WebKitBackForwardList
&gt; + * @See_also: #WebKitWebView, #WebKitBackForwardListItem

In our old documentation the character after &apos;@&apos; is not capitalized. I&apos;m not sure if this matter, but for the sake of consistency, why don&apos;t we keep it a small character.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:33
&gt; + * go back and forward to the most recent page. Items are inserted

go back and forward to the most recent page -&gt; used to navigate to recent pages ?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:42
&gt; + * specified item. All other methods returning #WebKitBackForwardListItem&lt;!-- --&gt;s

Does &apos;&lt;!-- --&gt;&apos; add a space? If so might be better to just write &quot;one or more&quot; before it instead of having a space and then an &apos;s&apos;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:108
&gt; + * Return value: (transfer none): a #WebKitWebHistoryItem,
&gt; + *    or %NULL if @back_forward_list is empty.

No comma necessary before or

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:124
&gt; + * Returns: (transfer none): the #WebKitBackForwardListItem
&gt; + *    preceding the current item, or %NULL.

Ditto. Please make this change below as well.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:216
&gt; + *    items succeeding the current item

succeeding -&gt; following ?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:232
&gt; + *    items succeeding the current item, limited by @limit

succeeding -&gt; following

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:78
&gt; +typedef HashMap&lt;WKBackForwardListItemRef, GRefPtr&lt;WebKitBackForwardListItem&gt; &gt; HistoryItemsMap;
&gt; +
&gt; +WebKitBackForwardListItem* webkitBackForwardListItemGetOrCreate(WKBackForwardListItemRef wkListItem)
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(HistoryItemsMap, itemsMap, ());
&gt; +
&gt; +    if (!wkListItem)
&gt; +        return 0;
&gt; +
&gt; +    GRefPtr&lt;WebKitBackForwardListItem&gt; listItem = itemsMap.get(wkListItem);
&gt; +    if (listItem)
&gt; +        return listItem.get();
&gt; +
&gt; +    listItem = adoptGRef(WEBKIT_BACK_FORWARD_LIST_ITEM(g_object_new(WEBKIT_TYPE_BACK_FORWARD_LIST_ITEM, NULL)));
&gt; +    listItem-&gt;priv-&gt;wkListItem = wkListItem;
&gt; +    itemsMap.set(wkListItem, listItem);

This means that the items will leak indefinitely because there&apos;s a reference to the GObject in the HashMap and a reference to the WKItem in the GObject. It&apos;s very common to to access the back forward list (for instance via the back and forward buttons in the browser). Perhaps there&apos;s a way not to leak memory here? I wonder if it&apos;s useful to have a pile of GObjects that are g_object_unref&apos;d in an idle? This could be quite useful across the entire library.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:131
&gt; + * webkit_back_forward_list_item_get_original_uri:
&gt; + * @back_forward_list_item: a #WebKitWebHistoryItem
&gt; + *
&gt; + * Returns: the original URI of @back_forward_list_item

Do you mind explaining a bit more how the original URI differs from the URI?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483092</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-13 03:32:13 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 110491 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110491&amp;action=review
&gt; 
&gt; Looks good. Only giving r- because of the memory leak. I guess you&apos;ll need to convert the unit test. Let me know if you want me to do that -- perfectly willing to since I created this mess.
&gt;
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:30
&gt; &gt; + * @Short_description: List of visited pages
&gt; &gt; + * @Title: WebKitBackForwardList
&gt; &gt; + * @See_also: #WebKitWebView, #WebKitBackForwardListItem
&gt; 
&gt; In our old documentation the character after &apos;@&apos; is not capitalized. I&apos;m not sure if this matter, but for the sake of consistency, why don&apos;t we keep it a small character.

No, it doesn&apos;t matter, I&apos;ll change it anyway.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:33
&gt; &gt; + * go back and forward to the most recent page. Items are inserted
&gt; 
&gt; go back and forward to the most recent page -&gt; used to navigate to recent pages ?

OK.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:42
&gt; &gt; + * specified item. All other methods returning #WebKitBackForwardListItem&lt;!-- --&gt;s
&gt; 
&gt; Does &apos;&lt;!-- --&gt;&apos; add a space? If so might be better to just write &quot;one or more&quot; before it instead of having a space and then an &apos;s&apos;

Of course not, it&apos;s needed to not break the link.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:108
&gt; &gt; + * Return value: (transfer none): a #WebKitWebHistoryItem,
&gt; &gt; + *    or %NULL if @back_forward_list is empty.
&gt; 
&gt; No comma necessary before or

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:124
&gt; &gt; + * Returns: (transfer none): the #WebKitBackForwardListItem
&gt; &gt; + *    preceding the current item, or %NULL.
&gt; 
&gt; Ditto. Please make this change below as well.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:216
&gt; &gt; + *    items succeeding the current item
&gt; 
&gt; succeeding -&gt; following ?

OK.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:232
&gt; &gt; + *    items succeeding the current item, limited by @limit
&gt; 
&gt; succeeding -&gt; following

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:78
&gt; &gt; +typedef HashMap&lt;WKBackForwardListItemRef, GRefPtr&lt;WebKitBackForwardListItem&gt; &gt; HistoryItemsMap;
&gt; &gt; +
&gt; &gt; +WebKitBackForwardListItem* webkitBackForwardListItemGetOrCreate(WKBackForwardListItemRef wkListItem)
&gt; &gt; +{
&gt; &gt; +    DEFINE_STATIC_LOCAL(HistoryItemsMap, itemsMap, ());
&gt; &gt; +
&gt; &gt; +    if (!wkListItem)
&gt; &gt; +        return 0;
&gt; &gt; +
&gt; &gt; +    GRefPtr&lt;WebKitBackForwardListItem&gt; listItem = itemsMap.get(wkListItem);
&gt; &gt; +    if (listItem)
&gt; &gt; +        return listItem.get();
&gt; &gt; +
&gt; &gt; +    listItem = adoptGRef(WEBKIT_BACK_FORWARD_LIST_ITEM(g_object_new(WEBKIT_TYPE_BACK_FORWARD_LIST_ITEM, NULL)));
&gt; &gt; +    listItem-&gt;priv-&gt;wkListItem = wkListItem;
&gt; &gt; +    itemsMap.set(wkListItem, listItem);
&gt; 
&gt; This means that the items will leak indefinitely because there&apos;s a reference to the GObject in the HashMap and a reference to the WKItem in the GObject.

Yes, it&apos;s the same we are doing in webkit1.

&gt; It&apos;s very common to to access the back forward list (for instance via the back and forward buttons in the browser). Perhaps there&apos;s a way not to leak memory here?

We are not leaking memory when returning items, since we don&apos;t transfer ownership of items to the caller, the only reference it&apos;s owned by the hashmap. 

&gt; I wonder if it&apos;s useful to have a pile of GObjects that are g_object_unref&apos;d in an idle? This could be quite useful across the entire library.

I don&apos;t see the point, we are caching list items, it&apos;s not a memory leak, we might limit the cache size, though. Items are cached by WebProcessProxy too, so at least the memory of the WK items won&apos;t be freed in any case.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:131
&gt; &gt; + * webkit_back_forward_list_item_get_original_uri:
&gt; &gt; + * @back_forward_list_item: a #WebKitWebHistoryItem
&gt; &gt; + *
&gt; &gt; + * Returns: the original URI of @back_forward_list_item
&gt; 
&gt; Do you mind explaining a bit more how the original URI differs from the URI?

Added a comment in get_uri() documentation, pointing to this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483095</commentid>
    <comment_count>14</comment_count>
      <attachid>110819</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-13 03:42:44 -0700</bug_when>
    <thetext>Created attachment 110819
Updated patch

Use new tests stuff and adressed review comments. It depend on bug #70010 too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486663</commentid>
    <comment_count>15</comment_count>
      <attachid>111588</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-19 04:05:40 -0700</bug_when>
    <thetext>Created attachment 111588
New patch

This new patch fixes the problem of list items not being freed. Now list items have a floating reference when they are created and the global cache doesn&apos;t keep any reference to the items. Every bf list holds a reference to all of their items, so that when a bf list creates a new item, it consumes the floating reference, and all other bf lists that get this item from the global cache will increase the reference counter. This way an item will be valid as long as it belongs to a bf list. When an item is removed from all bf lists it, its reference counter is 0 and the object is deleted. When an item is deleted it&apos;s removed from the global cache.

I&apos;ve added a changed signal to bf list that is emitted when the list changes (current item is updated, an item is added or one or more items are removed). It allow us to delete objects from our cache, and users will be notified that those items have been removed. 

To make sure items are not leaked I&apos;ve added a way to watch objects in unit tests. Test class contains a HashSet of objects that are added manually, and removed from the HashSet when the object is finalized. In the class destructor the HashSet should be empty if all watched objects have been deleted. 

I detected a circular dependency between WebView and WebLoaderClient that made the view not being released. I&apos;ve fixed it to make unit tests pass, but it won&apos;t be needed when bug #69358 is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486689</commentid>
    <comment_count>16</comment_count>
      <attachid>111595</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-19 05:14:50 -0700</bug_when>
    <thetext>Created attachment 111595
Another update

Minor update just to use ASSERT instead of g_assert in webkitBackForwardListItemFinalized()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487514</commentid>
    <comment_count>17</comment_count>
      <attachid>111759</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-20 05:52:01 -0700</bug_when>
    <thetext>Created attachment 111759
Patch updated to current git master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487724</commentid>
    <comment_count>18</comment_count>
      <attachid>111759</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-20 11:23:19 -0700</bug_when>
    <thetext>Comment on attachment 111759
Patch updated to current git master

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

This looks pretty good, but I really dislike returning NULL for empty strings (see below). I also have some suggestions for the test. I would r+ this with those fixes, but I&apos;d like to hear your response first.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:36
&gt; + * WebKitBackForwardList maintains a list of visited pages used to
&gt; + * used to navigate to recent pages. Items are inserted in the list
&gt; + * in the order they are visited.

Double &quot;used to&quot; here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:138
&gt; +        WebKitBackForwardListItem* item = webkitBackForwardListItemGetOrCreate(wkItem);
&gt; +        if (!item)
&gt; +            continue;
&gt; +
&gt; +        list = g_list_prepend(list, item);

I think it would be better to do:

list = g_list_prepend(list, webkitBackForwardListItemGetOrCreate(wkItem));

and then ASSERT(item) before returning in webkitBackForwardListGetOrCreateItem.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:176
&gt; + * Return value: (transfer none): a #WebKitWebHistoryItem
&gt; + *    or %NULL if @back_forward_list is empty.

Might as well use &quot;Returns&quot; everywhere. :)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:205
&gt; + * Returns the item that succeeds the current item.

succeeds -&gt; follows

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:63
&gt; +typedef HashMap&lt;WKBackForwardListItemRef, WebKitBackForwardListItem* &gt; HistoryItemsMap;

No need for the extra space after WebKitBackForwardListItem*. This is only needed when there are two &apos;&gt;&apos; in a row to avoid disambiguities during C++ compilation.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:90
&gt; +                      static_cast&lt;gpointer&gt;(const_cast&lt;OpaqueWKBackForwardListItem*&gt;(wkListItem)));

You can probably omit the surrounding static_cast&lt;gpointer&gt;(). gpointer is a void* and you shouldn&apos;t need to cast a non-const pointer to void*.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:104
&gt; + * Returns: the URI of @back_forward_list_item.

Better say or %NULL or return an empty string. I would prefer returning an empty string, but it&apos;s up to you. In what situations can this be an empty string? If there&apos;s a particular case it&apos;s good to mention it.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:124
&gt; + * Returns: the page title of @back_forward_list_item.
&gt; + */

Now here I *definitely* think you should return an empty string. An empty title is different than not having a title. For instance one could make a page that has &lt;title&gt;&lt;/title&gt;. I don&apos;t think that&apos;s a NULL case. I don&apos;t trust all consumers of the API to null check the return value of these methods, so empty strings everywhere makes the API a bit safer.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:153
&gt; +    WKRetainPtr&lt;WKURLRef&gt; wkOriginalURI(AdoptWK, WKBackForwardListItemCopyOriginalURL(priv-&gt;wkListItem.get()));
&gt; +    if (toImpl(wkOriginalURI.get())-&gt;string().isEmpty())
&gt; +        return 0;

Please return an empty string instead of null. If the original URI is &quot;&quot; the appropriate result from this function is &quot;&quot;.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:64
&gt; +static void webkitWebViewSetLoaderClient(WebKitWebView* webView, WebKitWebLoaderClient* loaderClient, WKPageRef wkPage)
&gt; +{
&gt; +    webView-&gt;priv-&gt;loaderClient = loaderClient;
&gt; +    webkitWebLoaderClientAttachLoaderClientToPage(loaderClient, wkPage);
&gt; +}
&gt; +

This change is unrelated. Please remove it from this patch and open a new bug for it. I&apos;m not sure I see the point of splitting it out though.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:72
&gt; -    webkitWebViewBaseCreateWebPage(WEBKIT_WEB_VIEW_BASE(webView), webkitWebContextGetWKContext(priv-&gt;context), 0);
&gt; +    WebPageProxy* page = webkitWebViewBaseCreateWebPage(WEBKIT_WEB_VIEW_BASE(webView), webkitWebContextGetWKContext(priv-&gt;context), 0);
&gt;  
&gt;      static GRefPtr&lt;WebKitWebLoaderClient&gt; defaultLoaderClient = adoptGRef(WEBKIT_WEB_LOADER_CLIENT(g_object_new(WEBKIT_TYPE_WEB_LOADER_CLIENT, NULL)));
&gt; -    webkit_web_view_set_loader_client(webView, defaultLoaderClient.get());
&gt; +    webkitWebViewSetLoaderClient(webView, defaultLoaderClient.get(), toAPI(page));

Please just include the back-foward stuff in this patch.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:247
&gt;      WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
&gt; -    webkitWebLoaderClientAttachLoaderClientToPage(loaderClient, toAPI(page));
&gt; -    priv-&gt;loaderClient = loaderClient;
&gt; +    webkitWebViewSetLoaderClient(webView, loaderClient, toAPI(page));

See above. :)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:427
&gt; -/*
&gt; +/**

Again, I think you should split this out into a new patch. r+ from me for fixing this small doc problem, just in another commit.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:26
&gt; +#include &lt;string.h&gt;

Please use cstring here instead of string.h

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:30
&gt; +static const size_t wkBackForwardListLimit = 100;

I think this &quot;wk&quot; should just be &quot;k&quot;, since that&apos;s the way we typically name globals.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:64
&gt; +    static void checkItem(WebKitBackForwardListItem* item, const gchar* title, const gchar* uri, const gchar* originalURI)

Please use char insetad of gchar.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:79
&gt; +    static void checkList(WebKitBackForwardList* list, guint type, WebKitBackForwardListItem** items, guint nItems)

Please use unsigned instead of guint.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:86
&gt; +        for (GList* listItem = listItems; listItem; listItem = g_list_next(listItem), i++) {

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:141
&gt; +    void waitUntilLoadFinished()
&gt; +    {
&gt; +        m_hasChanged = false;
&gt; +        LoadTrackingTest::waitUntilLoadFinished();
&gt; +        g_assert(m_hasChanged);
&gt; +    }
&gt; +
&gt; +    void waitUntilLoadFinishedAndCheckRemovedItems(GList* removedItems)
&gt; +    {
&gt; +        m_expectedRemovedItems = removedItems;
&gt; +        waitUntilLoadFinished();
&gt; +        m_expectedRemovedItems = 0;

I think a more generic way to do this would simply be to keep a Vector of added items and a Vector of removed items. After the test runs, compare the lists to what you expect in the test. I think this approach pushes too many assertions into the fixture itself.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:145
&gt; +    gulong m_changedFlags;

Please use unsigned long here.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h:57
&gt; +    void watchObject(GObject* object)

I think it&apos;s good to rename this to something that even an imbecile like me can understand just by looking at it. My suggestion is assertObjectIsDeletedWhenTestFinishes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488258</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-21 01:33:38 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 111759 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111759&amp;action=review
&gt; 
&gt; This looks pretty good, but I really dislike returning NULL for empty strings (see below). I also have some suggestions for the test. I would r+ this with those fixes, but I&apos;d like to hear your response first.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:36
&gt; &gt; + * WebKitBackForwardList maintains a list of visited pages used to
&gt; &gt; + * used to navigate to recent pages. Items are inserted in the list
&gt; &gt; + * in the order they are visited.
&gt; 
&gt; Double &quot;used to&quot; here.

oops.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:138
&gt; &gt; +        WebKitBackForwardListItem* item = webkitBackForwardListItemGetOrCreate(wkItem);
&gt; &gt; +        if (!item)
&gt; &gt; +            continue;
&gt; &gt; +
&gt; &gt; +        list = g_list_prepend(list, item);
&gt; 
&gt; I think it would be better to do:
&gt; 
&gt; list = g_list_prepend(list, webkitBackForwardListItemGetOrCreate(wkItem));
&gt; 
&gt; and then ASSERT(item) before returning in webkitBackForwardListGetOrCreateItem.

Agree, much better, webkitBackForwardListItemGetOrCreate(wkItem) should always return a valid pointer.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:176
&gt; &gt; + * Return value: (transfer none): a #WebKitWebHistoryItem
&gt; &gt; + *    or %NULL if @back_forward_list is empty.
&gt; 
&gt; Might as well use &quot;Returns&quot; everywhere. :)

Indeed, and #WebKitWebHistoryItem doesn&apos;t even exist . . . I&apos;m sorry, I&apos;ll fix it

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp:205
&gt; &gt; + * Returns the item that succeeds the current item.
&gt; 
&gt; succeeds -&gt; follows

Ok

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:63
&gt; &gt; +typedef HashMap&lt;WKBackForwardListItemRef, WebKitBackForwardListItem* &gt; HistoryItemsMap;
&gt; 
&gt; No need for the extra space after WebKitBackForwardListItem*. This is only needed when there are two &apos;&gt;&apos; in a row to avoid disambiguities during C++ compilation.

ah, ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:90
&gt; &gt; +                      static_cast&lt;gpointer&gt;(const_cast&lt;OpaqueWKBackForwardListItem*&gt;(wkListItem)));
&gt; 
&gt; You can probably omit the surrounding static_cast&lt;gpointer&gt;(). gpointer is a void* and you shouldn&apos;t need to cast a non-const pointer to void*.

I think I tried that, and compiler still complained, but I&apos;ll try again.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:104
&gt; &gt; + * Returns: the URI of @back_forward_list_item.
&gt; 
&gt; Better say or %NULL or return an empty string. I would prefer returning an empty string, but it&apos;s up to you. In what situations can this be an empty string? If there&apos;s a particular case it&apos;s good to mention it.

hmm, sure, I forgot to add or %NULL in the docs, sorry. I still think it&apos;s better to return NULL instad of an empty string, I think it&apos;s a common pattern in gnome platform and what users would expect.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:64
&gt; &gt; +static void webkitWebViewSetLoaderClient(WebKitWebView* webView, WebKitWebLoaderClient* loaderClient, WKPageRef wkPage)
&gt; &gt; +{
&gt; &gt; +    webView-&gt;priv-&gt;loaderClient = loaderClient;
&gt; &gt; +    webkitWebLoaderClientAttachLoaderClientToPage(loaderClient, wkPage);
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; This change is unrelated. Please remove it from this patch and open a new bug for it. I&apos;m not sure I see the point of splitting it out though.

in constructor we don&apos;t want to check web view is a web view (g_return macro) and that loaderClient is different than current one, so better move the common code that don&apos;t need checks to a helper function. I&apos;ll file a separate bug report for this.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:72
&gt; &gt; -    webkitWebViewBaseCreateWebPage(WEBKIT_WEB_VIEW_BASE(webView), webkitWebContextGetWKContext(priv-&gt;context), 0);
&gt; &gt; +    WebPageProxy* page = webkitWebViewBaseCreateWebPage(WEBKIT_WEB_VIEW_BASE(webView), webkitWebContextGetWKContext(priv-&gt;context), 0);
&gt; &gt;  
&gt; &gt;      static GRefPtr&lt;WebKitWebLoaderClient&gt; defaultLoaderClient = adoptGRef(WEBKIT_WEB_LOADER_CLIENT(g_object_new(WEBKIT_TYPE_WEB_LOADER_CLIENT, NULL)));
&gt; &gt; -    webkit_web_view_set_loader_client(webView, defaultLoaderClient.get());
&gt; &gt; +    webkitWebViewSetLoaderClient(webView, defaultLoaderClient.get(), toAPI(page));
&gt; 
&gt; Please just include the back-foward stuff in this patch.

Ok, ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:247
&gt; &gt;      WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
&gt; &gt; -    webkitWebLoaderClientAttachLoaderClientToPage(loaderClient, toAPI(page));
&gt; &gt; -    priv-&gt;loaderClient = loaderClient;
&gt; &gt; +    webkitWebViewSetLoaderClient(webView, loaderClient, toAPI(page));
&gt; 
&gt; See above. :)

Yes, sorry :-P

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:427
&gt; &gt; -/*
&gt; &gt; +/**
&gt; 
&gt; Again, I think you should split this out into a new patch. r+ from me for fixing this small doc problem, just in another commit.

https://bugs.webkit.org/show_bug.cgi?id=70587

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:26
&gt; &gt; +#include &lt;string.h&gt;
&gt; 
&gt; Please use cstring here instead of string.h

I think we need it for strlen()

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:30
&gt; &gt; +static const size_t wkBackForwardListLimit = 100;
&gt; 
&gt; I think this &quot;wk&quot; should just be &quot;k&quot;, since that&apos;s the way we typically name globals.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:64
&gt; &gt; +    static void checkItem(WebKitBackForwardListItem* item, const gchar* title, const gchar* uri, const gchar* originalURI)
&gt; 
&gt; Please use char insetad of gchar.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:79
&gt; &gt; +    static void checkList(WebKitBackForwardList* list, guint type, WebKitBackForwardListItem** items, guint nItems)
&gt; 
&gt; Please use unsigned instead of guint.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:86
&gt; &gt; +        for (GList* listItem = listItems; listItem; listItem = g_list_next(listItem), i++) {
&gt; 
&gt; Ditto.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:141
&gt; &gt; +    void waitUntilLoadFinished()
&gt; &gt; +    {
&gt; &gt; +        m_hasChanged = false;
&gt; &gt; +        LoadTrackingTest::waitUntilLoadFinished();
&gt; &gt; +        g_assert(m_hasChanged);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    void waitUntilLoadFinishedAndCheckRemovedItems(GList* removedItems)
&gt; &gt; +    {
&gt; &gt; +        m_expectedRemovedItems = removedItems;
&gt; &gt; +        waitUntilLoadFinished();
&gt; &gt; +        m_expectedRemovedItems = 0;
&gt; 
&gt; I think a more generic way to do this would simply be to keep a Vector of added items and a Vector of removed items. After the test runs, compare the lists to what you expect in the test. I think this approach pushes too many assertions into the fixture itself.

Why is it better to compare two vectors instead of just checking a HashSet is empty?

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp:145
&gt; &gt; +    gulong m_changedFlags;
&gt; 
&gt; Please use unsigned long here.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h:57
&gt; &gt; +    void watchObject(GObject* object)
&gt; 
&gt; I think it&apos;s good to rename this to something that even an imbecile like me can understand just by looking at it. My suggestion is assertObjectIsDeletedWhenTestFinishes.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488348</commentid>
    <comment_count>20</comment_count>
      <attachid>111959</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-21 06:34:40 -0700</bug_when>
    <thetext>Created attachment 111959
New patch

Another update addressing all review comments, except returning empty strings, I still think we should return NULL instead, for the following reasons:

 - It&apos;s a common pattern in GNOME platform, so we should be consistent with our platform
 - For this reason, this is what our users expect, look at this ephy commit for example: 
   http://git.gnome.org/browse/epiphany/commit/?id=9ea9e684b4cb5563d5b395a93b923771b0f6bffc
   Even though wk1 returns empty strings, both new and old code in that patch checks for NULL, not to for &quot;&quot;
 - Mac API returns NULL too (well, nil): see http://trac.webkit.org/browser/trunk/Source/WebKit/mac/History/WebHistoryItem.mm#L167
 - It avoids unnecessary allocation and string comparison</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489211</commentid>
    <comment_count>21</comment_count>
      <attachid>111959</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-24 01:00:14 -0700</bug_when>
    <thetext>Comment on attachment 111959
New patch

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

Okay! We should later use a similar helper to the Mac port for dealing with the empty string -&gt; null return. I think that would cut down on the code and codify this way of writing the API.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:104
&gt; + * Returns: the URI of @back_forward_list_item or %NULL.

Do you mind appending &quot;when the URI is empty&quot; here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:123
&gt; + * Returns: the page title of @back_forward_list_item or %NULL.

...and &quot;when the title is empty&quot; here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp:144
&gt; + * Returns: the original URI of @back_forward_list_item or %NULL.

...and &quot;when the URI is empty&quot; here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489340</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-24 08:23:26 -0700</bug_when>
    <thetext>Committed r98245: &lt;http://trac.webkit.org/changeset/98245&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098106</commentid>
    <comment_count>23</comment_count>
    <who name="Sam P.">sam</who>
    <bug_when>2015-05-29 04:36:18 -0700</bug_when>
    <thetext>Would it be possible to expose the AddItem method?  The lack of AddItem is a big blocker for porting the Sugar Browse activity [1] to webkit2.

Browse uses AddItem to load and save a tabs history, which is very important to our browser.

[1]  https://github.com/sugarlabs/browse-activity</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098109</commentid>
    <comment_count>24</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-05-29 06:53:52 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Would it be possible to expose the AddItem method?  The lack of AddItem is a
&gt; big blocker for porting the Sugar Browse activity [1] to webkit2.
&gt; 
&gt; Browse uses AddItem to load and save a tabs history, which is very important
&gt; to our browser.
&gt; 
&gt; [1]  https://github.com/sugarlabs/browse-activity

I want it for Epiphany too. Since WK2 we lost the ability to move back/forward lists from one tab to a newly-created tab. This should be a new bug report, though.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109635</attachid>
            <date>2011-10-04 10:04:40 -0700</date>
            <delta_ts>2011-10-07 05:49:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-bf-list.diff</filename>
            <type>text/plain</type>
            <size>42828</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjZjU1NTdhLi5iODA5NzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYg
QEAKKzIwMTEtMTAtMDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYmFjayBmb3J3YXJk
IGxpc3QgZm9yIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdl
YmtpdFdlYkJhY2tGb3J3YXJkTGlzdEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfaW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2NsYXNzX2luaXQpOgorICAgICAgICAoaGlzdG9yeUl0ZW1zKToKKyAgICAgICAgKHdlYmtp
dFdlYkJhY2tGb3J3YXJkTGlzdEdldE9yQ3JlYXRlSXRlbSk6CisgICAgICAgICh3ZWJraXRXZWJC
YWNrRm9yd2FyZExpc3RDcmVhdGVMaXN0KToKKyAgICAgICAgKHdlYmtpdFdlYkJhY2tGb3J3YXJk
TGlzdENyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9j
dXJyZW50X2l0ZW0pOgorICAgICAgICAod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
YmFja19pdGVtKToKKyAgICAgICAgKHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zv
cndhcmRfaXRlbSk6CisgICAgICAgICh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9u
dGhfaXRlbSk6CisgICAgICAgICh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5n
dGgpOgorICAgICAgICAod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93
aXRoX2xpbWl0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zv
cndhcmRfbGlzdCk6CisgICAgICAgICh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9m
b3J3YXJkX2xpc3Rfd2l0aF9saW1pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKHdl
YmtpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1GaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1faW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW1fY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJCYWNrRm9y
d2FyZExpc3RJdGVtQ3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfaXRlbV9nZXRfdXJpKToKKyAgICAgICAgKHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbV9nZXRfdGl0bGUpOgorICAgICAgICAod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtX2dldF9vcmlnaW5hbF91cmkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdDb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9y
d2FyZF9saXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGJhY2tmb3J3YXJkbGlzdC5j
OiBBZGRlZC4KKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHdlYkJhY2tGb3J3
YXJkTGlzdEZpeHR1cmVTZXR1cCk6CisgICAgICAgICh3ZWJCYWNrRm9yd2FyZExpc3RGaXh0dXJl
VGVhcmRvd24pOgorICAgICAgICAoZ2V0VVJJRm9yUGF0aCk6CisgICAgICAgIChjaGVja0l0ZW0p
OgorICAgICAgICAoY2hlY2tJdGVtSW5kZXgpOgorICAgICAgICAoY2hlY2tMaXN0KToKKyAgICAg
ICAgKGxvYWRGaW5pc2hlZCk6CisgICAgICAgICh0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlv
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
Lmg6CisKIDIwMTEtMTAtMDMgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4K
IAogICAgICAgICBDb250ZW50IGFyZWEgZG9lcyBub3QgcmV0dXJuIHRvIHRoZSBjb3JyZWN0IHBv
c2l0aW9uIGFmdGVyIHJ1YmJlcmJhbmRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggMjM4OGJm
Yi4uNzQ3N2Y1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTcwLDYgKzcwLDggQEAgbGlid2Vi
a2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5P
Ul9WRVJTSU9OQF9sYV9IRUEKIGxpYndlYmtpdDJndGtpbmNsdWRlZGlyID0gJChsaWJ3ZWJraXRn
dGtpbmNsdWRlZGlyKS93ZWJraXQyCiB3ZWJraXQyZ3RrX2hlYWRlcnMgPSBcCiAJJChXZWJLaXQy
KS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdC5oIFwKKwkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCiAJJChXZWJLaXQy
KS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAogCSQoV2ViS2l0MikvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmggXAogCSQoV2ViS2l0MikvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIFwKQEAgLTQ2Nyw2ICs0NjksMTEgQEAgbGli
d2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9N
SU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRFcnJvci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRF
cnJvci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZh
dGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUu
aCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNw
cCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFBy
aXZhdGUuaCBcCkBAIC0xMDgxLDcgKzEwODgsOCBAQCBESVNUQ0xFQU5GSUxFUyArPSBcCiBURVNU
X1BST0dTICs9IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvd2Via2l0Mi90ZXN0d2ViY29udGV4dCBc
CiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIvdGVzdHdlYnZpZXcgXAotCVByb2dyYW1zL3Vu
aXR0ZXN0cy93ZWJraXQyL3Rlc3Rsb2FkaW5nCisJUHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIv
dGVzdGxvYWRpbmcgXAorCVByb2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3RiYWNrZm9yd2Fy
ZGxpc3QKIAogbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9QUk9HUykKIHdlYmtpdDJfdGVzdHNf
Y2ZsYWdzID0gXApAQCAtMTEyNCw2ICsxMTMyLDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0c193ZWJr
aXQyX3Rlc3Rsb2FkaW5nX0NGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jZmxhZ3MpCiBQcm9ncmFt
c191bml0dGVzdHNfd2Via2l0Ml90ZXN0bG9hZGluZ19MREFERCA9ICQod2Via2l0Ml90ZXN0c19s
ZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2FkaW5nX0xERkxBR1MgPSAk
KHdlYmtpdDJfdGVzdHNfbGRmbGFncykKIAorUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVz
dGJhY2tmb3J3YXJkbGlzdF9TT1VSQ0VTID0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvdGVzdGJhY2tmb3J3YXJkbGlzdC5jCitQcm9ncmFtc191bml0dGVzdHNfd2Via2l0
Ml90ZXN0YmFja2ZvcndhcmRsaXN0X0NGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jZmxhZ3MpCitQ
cm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0YmFja2ZvcndhcmRsaXN0X0xEQUREID0gJCh3
ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGJhY2tm
b3J3YXJkbGlzdF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKICMgV2ViS2l0
V2ViUHJvY2VzcwogbGliZXhlY19QUk9HUkFNUyArPSBcCiAJUHJvZ3JhbXMvV2ViS2l0V2ViUHJv
Y2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uODMyNTI1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTAsMCArMSwyNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdFdlYkJhY2tGb3J3YXJkTGlzdC5oIgorCisjaW5jbHVkZSAi
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tC
YWNrRm9yd2FyZExpc3QuaD4KKworc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2
YXRlIHsKKyAgICBXS0JhY2tGb3J3YXJkTGlzdFJlZiBsaXN0OworfTsKKworR19ERUZJTkVfVFlQ
RShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QsIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Qs
IEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYkJhY2tGb3J3YXJkTGlzdEZp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9M
SVNUKG9iamVjdCktPnByaXYtPn5XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlKCk7Cisg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2luaXQoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJMaXN0KQorewor
ICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUod2ViTGlzdCwgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNU
LCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlKTsKKyAgICB3ZWJMaXN0LT5wcml2ID0g
cHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUoKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0
KFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzKiB3ZWJMaXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJMaXN0Q2xhc3MpOwor
CisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFdlYkJhY2tGb3J3YXJkTGlzdEZp
bmFsaXplOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHdlYkxpc3RDbGFzcywgc2l6
ZW9mKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUpKTsKK30KKworc3RhdGljIEdIYXNo
VGFibGUqIGhpc3RvcnlJdGVtcygpCit7CisgICAgc3RhdGljIEdIYXNoVGFibGUqIGl0ZW1zID0g
Z19oYXNoX3RhYmxlX25ld19mdWxsKGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0X2VxdWFsLCBOVUxM
LCBnX29iamVjdF91bnJlZik7CisgICAgcmV0dXJuIGl0ZW1zOworfQorCitzdGF0aWMgV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0V2ViQmFja0ZvcndhcmRMaXN0R2V0T3JDcmVh
dGVJdGVtKFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0l0ZW0pCit7CisgICAgaWYgKCF3a0l0
ZW0pCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRl
bSogaXRlbSA9IHN0YXRpY19jYXN0PFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qPihnX2hh
c2hfdGFibGVfbG9va3VwKGhpc3RvcnlJdGVtcygpLCB3a0l0ZW0pKTsKKyAgICBpZiAoaXRlbSkK
KyAgICAgICAgcmV0dXJuIGl0ZW07CisKKyAgICBpdGVtID0gd2Via2l0V2ViQmFja0ZvcndhcmRM
aXN0SXRlbUNyZWF0ZSh3a0l0ZW0pOworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQoaGlzdG9yeUl0
ZW1zKCksIChncG9pbnRlcil3a0l0ZW0sIGl0ZW0pOworCisgICAgcmV0dXJuIGl0ZW07Cit9CisK
K3N0YXRpYyBHTGlzdCogd2Via2l0V2ViQmFja0ZvcndhcmRMaXN0Q3JlYXRlTGlzdChXS0FycmF5
UmVmIHdrTGlzdCkKK3sKKyAgICBpZiAoIXdrTGlzdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBndWludCBsaXN0Q291bnQgPSBXS0FycmF5R2V0U2l6ZSh3a0xpc3QpOworICAgIGlmICghbGlz
dENvdW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMaXN0KiBsaXN0ID0gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RDb3VudDsgKytpKSB7CisgICAgICAgIFdLQmFja0Zv
cndhcmRMaXN0SXRlbVJlZiB3a0l0ZW0gPSBzdGF0aWNfY2FzdDxXS0JhY2tGb3J3YXJkTGlzdEl0
ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a0xpc3QsIGkpKTsKKyAgICAgICAgV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9IHdlYmtpdFdlYkJhY2tGb3J3YXJkTGlzdEdl
dE9yQ3JlYXRlSXRlbSh3a0l0ZW0pOworICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBsaXN0ID0gZ19saXN0X3ByZXBlbmQobGlzdCwgaXRlbSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
d2Via2l0V2ViQmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdLQmFja0ZvcndhcmRMaXN0UmVmIHdrTGlz
dCkKK3sKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkxpc3QgPSBXRUJLSVRfV0VC
X0JBQ0tfRk9SV0FSRF9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JX
QVJEX0xJU1QsIE5VTEwpKTsKKyAgICB3ZWJMaXN0LT5wcml2LT5saXN0ID0gd2tMaXN0OworCisg
ICAgcmV0dXJuIHdlYkxpc3Q7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfY3VycmVudF9pdGVtOgorICogQGJhY2tfZm9yd2FyZF9saXN0OiBhICNXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGl0ZW0gaW4gQGJh
Y2tfZm9yd2FyZF9saXN0LgorICoKKyAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiBh
ICNXZWJLaXRXZWJIaXN0b3J5SXRlbSwKKyAqICAgIG9yICVOVUxMIGlmIEB3ZWJfYmFja19mb3J3
YXJkX2xpc3QgaXMgZW1wdHkuCisgKi8KK1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCks
IDApOworCisgICAgcmV0dXJuIHdlYmtpdFdlYkJhY2tGb3J3YXJkTGlzdEdldE9yQ3JlYXRlSXRl
bShXS0JhY2tGb3J3YXJkTGlzdEdldEN1cnJlbnRJdGVtKHdlYkJhY2tGb3J3YXJkTGlzdC0+cHJp
di0+bGlzdCkpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfaXRlbToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0CisgKgorICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IHByZWNlZGVzIHRoZSBjdXJyZW50
IGl0ZW0uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0KKyAqICAgIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtLCBvciAl
TlVMTC4KKyAqLworV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2Vi
QmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19X
RUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1
cm4gd2Via2l0V2ViQmFja0ZvcndhcmRMaXN0R2V0T3JDcmVhdGVJdGVtKFdLQmFja0ZvcndhcmRM
aXN0R2V0QmFja0l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LT5wcml2LT5saXN0KSk7Cit9CisKKy8q
KgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtOgorICog
QGJhY2tfZm9yd2FyZF9saXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBS
ZXR1cm5zIHRoZSBpdGVtIHRoYXQgc3VjY2VlZHMgdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRl
bQorICogICAgZm9sbG93aW5nIHRoZSBjdXJyZW50IGl0ZW0sIG9yICVOVUxMCisgKi8KK1dlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2ZvcndhcmRfaXRlbShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlz
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FS
RF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIDApOworCisgICAgcmV0dXJuIHdlYmtpdFdlYkJh
Y2tGb3J3YXJkTGlzdEdldE9yQ3JlYXRlSXRlbShXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRJ
dGVtKHdlYkJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+bGlzdCkpOworfQorCisvKioKKyAqIHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtOgorICogQGJhY2tfZm9yd2FyZF9s
aXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqIEBpbmRleDogdGhlIGluZGV4IG9m
IHRoZSBpdGVtCisgKgorICogUmV0dXJucyB0aGUgaXRlbSBhdCBhIGdpdmVuIGluZGV4IHJlbGF0
aXZlIHRvIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiB0aGUgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0KKyAqICAgIGxvY2F0ZWQgYXQgdGhl
IHNwZWNpZmllZCBpbmRleCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtCisgKi8KK1dlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X250aF9pdGVtKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBn
aW50IGluZGV4KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFD
S19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Vi
a2l0V2ViQmFja0ZvcndhcmRMaXN0R2V0T3JDcmVhdGVJdGVtKFdLQmFja0ZvcndhcmRMaXN0R2V0
SXRlbUF0SW5kZXgod2ViQmFja0ZvcndhcmRMaXN0LT5wcml2LT5saXN0LCBpbmRleCkpOworfQor
CisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aDoKKyAqIEBi
YWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0
dXJuczogdGhlIGxlbmd0aCBvZiBAYmFja19mb3J3YXJkX2xpc3QuCisgKi8KK2d1aW50IHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIDApOworCisg
ICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSogcHJpdiA9IHdlYkJhY2tGb3J3YXJk
TGlzdC0+cHJpdjsKKyAgICBndWludCBjdXJyZW50SXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpID8gMSA6IDA7Cisg
ICAgcmV0dXJuIFdLQmFja0ZvcndhcmRMaXN0R2V0QmFja0xpc3RDb3VudChwcml2LT5saXN0KSAr
IFdLQmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZExpc3RDb3VudChwcml2LT5saXN0KSArIGN1cnJl
bnRJdGVtOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfbGlzdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0CisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXQuV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSkgKHRyYW5zZmVyIGNvbnRhaW5lcik6IGEgI0dMaXN0IG9mCisgKiAgICBpdGVtcyBw
cmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbQorICovCitHTGlzdCogd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfYmFja19saXN0KFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFj
a0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJf
QkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICBndWludCBs
aW1pdCA9IFdLQmFja0ZvcndhcmRMaXN0R2V0QmFja0xpc3RDb3VudCh3ZWJCYWNrRm9yd2FyZExp
c3QtPnByaXYtPmxpc3QpOworICAgIHJldHVybiB3ZWJraXRXZWJCYWNrRm9yd2FyZExpc3RDcmVh
dGVMaXN0KFdLQmFja0ZvcndhcmRMaXN0Q29weUJhY2tMaXN0V2l0aExpbWl0KHdlYkJhY2tGb3J3
YXJkTGlzdC0+cHJpdi0+bGlzdCwgbGltaXQpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdDoKKyAqIEBiYWNrX2Zvcndh
cmRfbGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKiBAbGltaXQ6IHRoZSBudW1i
ZXIgb2YgaXRlbXMgdG8gcmV0cmlldmUKKyAqCisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFdl
YktpdC5XZWJCYWNrRm9yd2FyZExpc3RJdGVtKSAodHJhbnNmZXIgY29udGFpbmVyKTogYSAjR0xp
c3Qgb2YKKyAqICAgIGl0ZW1zIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5
IEBsaW1pdAorICovCitHTGlzdCogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFj
a19saXN0X3dpdGhfbGltaXQoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2Fy
ZExpc3QsIGd1aW50IGxpbWl0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICBy
ZXR1cm4gd2Via2l0V2ViQmFja0ZvcndhcmRMaXN0Q3JlYXRlTGlzdChXS0JhY2tGb3J3YXJkTGlz
dENvcHlCYWNrTGlzdFdpdGhMaW1pdCh3ZWJCYWNrRm9yd2FyZExpc3QtPnByaXYtPmxpc3QsIGxp
bWl0KSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9saXN0OgorICogQGJhY2tfZm9yd2FyZF9saXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3QKKyAqCisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdC5XZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtKSAodHJhbnNmZXIgY29udGFpbmVyKTogYSAjR0xpc3Qgb2YKKyAqICAgIGl0ZW1z
IHN1Y2NlZWRpbmcgdGhlIGN1cnJlbnQgaXRlbQorICovCitHTGlzdCogd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
d2ViQmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICBn
dWludCBsaW1pdCA9IFdLQmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZExpc3RDb3VudCh3ZWJCYWNr
Rm9yd2FyZExpc3QtPnByaXYtPmxpc3QpOworICAgIHJldHVybiB3ZWJraXRXZWJCYWNrRm9yd2Fy
ZExpc3RDcmVhdGVMaXN0KFdLQmFja0ZvcndhcmRMaXN0Q29weUZvcndhcmRMaXN0V2l0aExpbWl0
KHdlYkJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+bGlzdCwgbGltaXQpKTsKK30KKworLyoqCisgKiB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdDoK
KyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKiBA
bGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmlldmUKKyAqCisgKiBSZXR1cm5zOiAo
ZWxlbWVudC10eXBlIFdlYktpdC5XZWJCYWNrRm9yd2FyZExpc3RJdGVtKSAodHJhbnNmZXIgY29u
dGFpbmVyKTogYSAjR0xpc3Qgb2YKKyAqICAgIGl0ZW1zIHN1Y2NlZWRpbmcgdGhlIGN1cnJlbnQg
aXRlbSwgbGltaXRlZCBieSBAbGltaXQKKyAqLworR0xpc3QqIHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0KFdlYktpdFdlYkJhY2tGb3J3YXJk
TGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBndWludCBsaW1pdCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJk
TGlzdCksIDApOworCisgICAgcmV0dXJuIHdlYmtpdFdlYkJhY2tGb3J3YXJkTGlzdENyZWF0ZUxp
c3QoV0tCYWNrRm9yd2FyZExpc3RDb3B5Rm9yd2FyZExpc3RXaXRoTGltaXQod2ViQmFja0Zvcndh
cmRMaXN0LT5wcml2LT5saXN0LCBsaW1pdCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDU5NzJkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0LmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJ
VDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUg
aW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0X2gKKyNkZWZpbmUgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0X2gKKworI2luY2x1ZGUg
PFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCAgICAgICAgICAgICh3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9X
RUJfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNULCBXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3QpKQorI2RlZmluZSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNU
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Q2xh
c3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9CQUNL
X0ZPUldBUkRfTElTVCkpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Rf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9CQUNLX0ZPUldB
UkRfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QsIFdlYktpdFdlYkJhY2tGb3J3YXJk
TGlzdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCAg
ICAgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdENsYXNzICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Q2xhc3M7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSBXZWJLaXRXZWJC
YWNrRm9yd2FyZExpc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQ
cml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RDbGFz
cyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dLX0VYUE9SVCBHVHlw
ZQord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfdHlwZSAgICAgICAgICAgICAgICAg
ICAgKHZvaWQpOworCitXS19FWFBPUlQgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRlbSAqCit3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0gICAgICAgICAgICAo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dLX0VYUE9S
VCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtICoKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2JhY2tfaXRlbSAgICAgICAgICAgICAgIChXZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3QgKmJhY2tfZm9yd2FyZF9saXN0KTsKKworV0tfRVhQT1JUIFdlYktpdFdlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0gKgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVt
ICAgICAgICAgICAgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3Qp
OworCitXS19FWFBPUlQgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRlbSAqCit3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbSAgICAgICAgICAgICAgICAoV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4KTsKK1dLX0VYUE9SVCBndWludAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfbGVuZ3RoICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXS19FWFBPUlQgR0xpc3QgKgord2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0ICAgICAgICAgICAgICAgKFdlYktpdFdlYkJh
Y2tGb3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXS19FWFBPUlQgR0xpc3QgKgor
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X3dpdGhfbGltaXQgICAg
KFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAg
ICAgICAgICAgICAgICAgICBsaW1pdCk7CisKK1dLX0VYUE9SVCBHTGlzdCAqCit3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QgICAgICAgICAgICAoV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dLX0VYUE9SVCBHTGlzdCAq
Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1p
dCAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAg
ICAgICAgICAgICAgICAgICAgIGxpbWl0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJCYWNrRm9y
d2FyZExpc3RJdGVtLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjMwYjA4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtLmNwcApAQCAtMCwwICsxLDEx
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oIgorCisjaW5j
bHVkZSAiV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYktp
dDIvV0tCYWNrRm9yd2FyZExpc3RJdGVtLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSB7Cisg
ICAgQ1N0cmluZyB1cmk7CisgICAgQ1N0cmluZyB0aXRsZTsKKyAgICBDU3RyaW5nIG9yaWdpbmFs
VVJJOworfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtLCB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0sIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRp
YyB2b2lkIHdlYmtpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1GaW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9JVEVNKG9iamVjdCktPnBy
aXYtPn5XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSgpOworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW1faW5pdChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB3ZWJMaXN0SXRl
bSkKK3sKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSogcHJpdiA9IEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSh3ZWJMaXN0SXRlbSwgV0VCS0lUX1RZUEVfV0VCX0JB
Q0tfRk9SV0FSRF9MSVNUX0lURU0sIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRl
KTsKKyAgICB3ZWJMaXN0SXRlbS0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fY2xhc3NfaW5pdChXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtQ2xhc3MqIHdlYkxpc3RJdGVtQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBn
T2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJMaXN0SXRlbUNsYXNzKTsKKworICAgIGdP
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtRmluYWxp
emU7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViTGlzdEl0ZW1DbGFzcywgc2l6
ZW9mKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKSk7Cit9CisKK1dlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1DcmVhdGUo
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrTGlzdEl0ZW0pCit7CisgICAgV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSogd2ViTGlzdEl0ZW0gPSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9M
SVNUX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9J
VEVNLCBOVUxMKSk7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUqIHBy
aXYgPSB3ZWJMaXN0SXRlbS0+cHJpdjsKKworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmko
QWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTCh3a0xpc3RJdGVtKSk7CisgICAg
cHJpdi0+dXJpID0gdG9JbXBsKHVyaS5nZXQoKSktPnN0cmluZygpLnV0ZjgoKTsKKyAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdGl0bGUoQWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RJdGVt
Q29weVRpdGxlKHdrTGlzdEl0ZW0pKTsKKyAgICBwcml2LT50aXRsZSA9IHRvSW1wbCh0aXRsZS5n
ZXQoKSktPnN0cmluZygpLnV0ZjgoKTsKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gb3JpZ2lu
YWxVUkkoQWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weU9yaWdpbmFsVVJMKHdrTGlz
dEl0ZW0pKTsKKyAgICBwcml2LT5vcmlnaW5hbFVSSSA9IHRvSW1wbChvcmlnaW5hbFVSSS5nZXQo
KSktPnN0cmluZygpLnV0ZjgoKTsKKworICAgIHJldHVybiB3ZWJMaXN0SXRlbTsKK30KKworLyoq
CisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3VyaToKKyAqIEBiYWNr
X2ZvcndhcmRfbGlzdF9pdGVtOiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtCisgKgor
ICogUmV0dXJuczogdGhlIFVSSSBvZiBAYmFja19mb3J3YXJkX2xpc3RfaXRlbQorICovCitjb25z
dCBnY2hhciogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmkoV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdEl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGxpc3RJdGVtKSwgMCk7
CisKKyAgICByZXR1cm4gbGlzdEl0ZW0tPnByaXYtPnVyaS5kYXRhKCk7Cit9CisKKy8qKgorICog
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF90aXRsZToKKyAqIEBiYWNrX2Zv
cndhcmRfbGlzdF9pdGVtOiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtCisgKgorICog
UmV0dXJuczogdGhlIHBhZ2UgdGl0bGUgb2YgQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW0KKyAqLwor
Y29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdGl0bGUo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdEl0ZW0pCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGxpc3RJdGVt
KSwgMCk7CisKKyAgICByZXR1cm4gbGlzdEl0ZW0tPnByaXYtPnRpdGxlLmRhdGEoKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3Vy
aToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdF9pdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQor
ICoKKyAqIFJldHVybnM6IHRoZSBvcmlnaW5hbCBVUkkgb2YgQGJhY2tfZm9yd2FyZF9saXN0X2l0
ZW0KKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9n
ZXRfb3JpZ2luYWxfdXJpKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxpc3RJdGVtKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJ
U1RfSVRFTShsaXN0SXRlbSksIDApOworCisgICAgcmV0dXJuIGxpc3RJdGVtLT5wcml2LT5vcmln
aW5hbFVSSS5kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkYTk2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0uaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lU
Ml9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBp
bmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtX2gKKyNkZWZpbmUgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRlbV9oCisKKyNp
bmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1Rf
SVRFTSAgICAgICAgICAgICh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9JVEVNKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dF
Ql9CQUNLX0ZPUldBUkRfTElTVF9JVEVNLCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtKSkK
KyNkZWZpbmUgV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9JVEVNX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9CQUNL
X0ZPUldBUkRfTElTVF9JVEVNLCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3MpKQor
I2RlZmluZSBXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0ob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0JBQ0tf
Rk9SV0FSRF9MSVNUX0lURU0pKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9M
SVNUX0lURU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0pKQorI2RlZmluZSBXRUJLSVRf
V0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0lU
RU0sIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtICAgICAgICBXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1D
bGFzcyAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW1DbGFzczsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSBXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVt
IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW1Qcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXS19FWFBP
UlQgR1R5cGUKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdHlwZSAgICAg
ICAgICh2b2lkKTsKKworV0tfRVhQT1JUIGNvbnN0IGdjaGFyICoKK3dlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJpICAgICAgICAgIChXZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3RJdGVtKiBsaXN0X2l0ZW0pOworCitXS19FWFBPUlQgY29uc3QgZ2NoYXIgKgord2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF90aXRsZSAgICAgICAgKFdlYktpdFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0qIGxpc3RfaXRlbSk7CisKK1dLX0VYUE9SVCBjb25zdCBnY2hhciAqCit3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdF9pdGVtKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYWEwY2I0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZV9oCisjZGVm
aW5lIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSAiV2ViQmFj
a0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0LmgiCisj
aW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisKK0dfQkVHSU5fREVDTFMKKworV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0KiB3ZWJraXRXZWJCYWNrRm9yd2FyZExpc3RDcmVhdGUoV0tCYWNrRm9y
d2FyZExpc3RSZWYpOworV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbUNyZWF0ZShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CmluZGV4IDg5M2VjNGQuLmFlZDE5NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgogCisjaW5jbHVkZSAiV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNvbnRl
eHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCkBAIC00Myw2ICs0NCw3IEBAIHN0cnVjdCBf
V2ViS2l0V2ViVmlld1ByaXZhdGUgewogICAgIFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQ7CiAK
ICAgICBHUmVmUHRyPFdlYktpdFdlYkxvYWRlckNsaWVudD4gbG9hZGVyQ2xpZW50OworICAgIEdS
ZWZQdHI8V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0PiBiYWNrRm9yd2FyZExpc3Q7CiB9OwogCiBH
X0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXcsIHdlYmtpdF93ZWJfdmlldywgV0VCS0lUX1RZUEVf
V0VCX1ZJRVdfQkFTRSkKQEAgLTU1LDYgKzU3LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0
ZVdlYlBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldyksIHdlYmtpdFdlYkNvbnRleHRH
ZXRXS0NvbnRleHQocHJpdi0+Y29udGV4dCksIDApOwogCiAgICAgcHJpdi0+bG9hZGVyQ2xpZW50
ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVChnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfV0VCX0xPQURFUl9DTElFTlQsICJ3ZWItdmlldyIsIHdlYlZpZXcsIE5VTEwpKSk7CisK
KyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lU
X1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOworICAgIHByaXYtPmJhY2tGb3J3YXJkTGlzdCA9IGFk
b3B0R1JlZih3ZWJraXRXZWJCYWNrRm9yd2FyZExpc3RDcmVhdGUoV0tQYWdlR2V0QmFja0Zvcndh
cmRMaXN0KHRvQVBJKHBhZ2UpKSkpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0
UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKQEAgLTI1MywzICsyNTgsMTkgQEAgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIFdlYlBh
Z2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdf
QkFTRSh3ZWJWaWV3KSk7CiAgICAgV0tQYWdlR29Gb3J3YXJkKHRvQVBJKHBhZ2UpKTsKIH0KKwor
LyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0OgorICogQHdlYl92
aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogT2J0YWlucyB0aGUgI1dlYktpdFdlYkJhY2tG
b3J3YXJkTGlzdCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuICNXZWJLaXRXZWJWaWV3LiBUaGUK
KyAqICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QgaXMgb3duZWQgYnkgdGhlICNXZWJLaXRXZWJW
aWV3LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QKKyAqLworV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKKwor
ICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5iYWNrRm9yd2FyZExpc3QuZ2V0KCk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXgg
YTc5YjIxYi4uYjkzZmNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBXZWJLaXRXZWJW
aWV3X2gKICNkZWZpbmUgV2ViS2l0V2ViVmlld19oCiAKKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4
dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViTG9hZGVyQ2xpZW50Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgpAQCAtNjYsMzMgKzY3LDM2IEBAIHN0cnVj
dCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKIH07CiAKIFdLX0VYUE9SVCBHVHlwZQotd2Via2l0X3dl
Yl92aWV3X2dldF90eXBlICAgICAgICAgICh2b2lkKTsKK3dlYmtpdF93ZWJfdmlld19nZXRfdHlw
ZSAgICAgICAgICAgICAgKHZvaWQpOwogCiBXS19FWFBPUlQgR3RrV2lkZ2V0ICoKLXdlYmtpdF93
ZWJfdmlld19uZXcgICAgICAgICAgICAgICAodm9pZCk7Cit3ZWJraXRfd2ViX3ZpZXdfbmV3ICAg
ICAgICAgICAgICAgICAgICh2b2lkKTsKIAogV0tfRVhQT1JUIEd0a1dpZGdldCAqCi13ZWJraXRf
d2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCAgKFdlYktpdFdlYkNvbnRleHQgICAgICAqY29udGV4
dCk7Cit3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCAgICAgIChXZWJLaXRXZWJDb250
ZXh0ICAgICAgKmNvbnRleHQpOwogCiBXS19FWFBPUlQgV2ViS2l0V2ViQ29udGV4dCAqCi13ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2Vi
X3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0ICAgICAgICAgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICp3ZWJfdmlldyk7CiAKIFdLX0VYUE9SVCBXZWJLaXRXZWJMb2FkZXJDbGll
bnQgKgotd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50IChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgKndlYl92aWV3KTsKK3dlYmtpdF93ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVudCAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXS19FWFBPUlQgdm9pZAotd2Vi
a2l0X3dlYl92aWV3X3NldF9sb2FkZXJfY2xpZW50IChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndl
Yl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQgKmxvYWRlcl9jbGllbnQpOword2Via2l0X3dlYl92aWV3X3NldF9sb2FkZXJfY2xp
ZW50ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCAqbG9hZGVyX2Ns
aWVudCk7CiAKIFdLX0VYUE9SVCB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkgICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqdXJpKTsKK3dlYmtpdF93ZWJf
dmlld19sb2FkX3VyaSAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3Zp
ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAg
ICAgICAgICAgKnVyaSk7CiAKIFdLX0VYUE9SVCB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfZ29fYmFj
ayAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dl
Yl92aWV3X2dvX2JhY2sgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJf
dmlldyk7CiAKIFdLX0VYUE9SVCB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZCAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dv
X2ZvcndhcmQgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CisK
K1dLX0VYUE9SVCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqCit3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2JhY2tfZm9yd2FyZF9saXN0IChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKIAog
R19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvdGVzdGJhY2tmb3J3YXJkbGlzdC5jIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvdGVzdGJhY2tmb3J3YXJkbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJlYjk1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0YmFja2ZvcndhcmRsaXN0LmMKQEAgLTAsMCAr
MSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKwordHlwZWRlZiBlbnVtIHsKKyAgICBC
QUNLV0FSRCwKKyAgICBGT1JXQVJECit9IExpc3RUeXBlOworCitTb3VwVVJJICpiYXNlVVJJOwor
CisvKiBGb3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8KK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxi
YWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciogcGF0
aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRl
ciBkYXRhKQoreworICAgIGNoYXIgKmJvZHk7CisKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09V
UF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09V
UF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgYm9k
eSA9IGdfc3RyZHVwX3ByaW50ZigiPGh0bWw+PHRpdGxlPiVzPC90aXRsZT48Ym9keT4lczwvYm9k
eT48L2h0bWw+IiwgcGF0aCArIDEsIHBhdGggKyAxKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBib2R5LCBzdHJsZW4o
Ym9keSkpOworCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobXNnLT5yZXNwb25zZV9i
b2R5KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7
CisgICAgR01haW5Mb29wICpsb29wOworfSBXZWJCYWNrRm9yd2FyZExpc3RGaXh0dXJlOworCitz
dGF0aWMgdm9pZCB3ZWJCYWNrRm9yd2FyZExpc3RGaXh0dXJlU2V0dXAoV2ViQmFja0ZvcndhcmRM
aXN0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUt
PndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBm
aXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB3ZWJCYWNrRm9y
d2FyZExpc3RGaXh0dXJlVGVhcmRvd24oV2ViQmFja0ZvcndhcmRMaXN0Rml4dHVyZSAqZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndl
YlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0
aWMgY2hhciAqZ2V0VVJJRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNvdXBVUkkg
KnVyaTsKKyAgICBjaGFyICp1cmlTdHJpbmc7CisKKyAgICB1cmkgPSBzb3VwX3VyaV9uZXdfd2l0
aF9iYXNlKGJhc2VVUkksIHBhdGgpOworICAgIHVyaVN0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmlu
Zyh1cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHVyaSk7CisKKyAgICByZXR1cm4gdXJp
U3RyaW5nOworfQorCitzdGF0aWMgdm9pZCBjaGVja0l0ZW0oV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0SXRlbSAqaXRlbSwgY29uc3QgZ2NoYXIgKnRpdGxlLCBjb25zdCBnY2hhciAqdXJpLCBjb25z
dCBnY2hhciAqb3JpZ2luYWxVUkkpCit7CisgICAgZ19hc3NlcnQoaXRlbSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJpKGl0ZW0p
LCA9PSwgdXJpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX2dldF90aXRsZShpdGVtKSwgPT0gLCB0aXRsZSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKGl0
ZW0pLCA9PSwgb3JpZ2luYWxVUkkpOworfQorCitzdGF0aWMgdm9pZCBjaGVja0l0ZW1JbmRleChX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QgKmxpc3QpCit7CisgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgLTEpID09IHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbShsaXN0KSk7CisgICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgMCkgPT0gd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAxKSA9
PSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOwor
fQorCitzdGF0aWMgdm9pZCBjaGVja0xpc3QoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0ICpsaXN0
LCBMaXN0VHlwZSB0eXBlLCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RJdGVtICoqaXRlbXMsIGd1
aW50IG5JdGVtcykKK3sKKyAgICBHTGlzdCAqbGlzdEl0ZW07CisgICAgZ3VpbnQgaTsKKyAgICBH
TGlzdCAqbGlzdEl0ZW1zID0gdHlwZSA9PSBCQUNLV0FSRCA/IHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdChsaXN0KSA6CisgICAgICAgIHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdChsaXN0KTsKKyAgICBnX2Fzc2VydChsaXN0SXRl
bXMpOworCisgICAgaSA9IDA7CisgICAgZm9yIChsaXN0SXRlbSA9IGxpc3RJdGVtczsgbGlzdEl0
ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0ZW0pLCBpKyspIHsKKyAgICAgICAgZ19h
c3NlcnRfY21wdWludChpLCA8LCBuSXRlbXMpOworICAgICAgICBnX2Fzc2VydChsaXN0SXRlbS0+
ZGF0YSA9PSBpdGVtc1tpXSk7CisgICAgfQorICAgIGdfbGlzdF9mcmVlKGxpc3RJdGVtcyk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkRmluaXNoZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpj
bGllbnQsIFdlYkJhY2tGb3J3YXJkTGlzdEZpeHR1cmUgKmZpeHR1cmUpCit7CisgICAgZ19tYWlu
X2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyogTmF2
aWdhdGlvbiAqLworc3RhdGljIHZvaWQgdGVzdEJhY2tGb3J3YXJkTGlzdE5hdmlnYXRpb24oV2Vi
QmFja0ZvcndhcmRMaXN0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIGNoYXIgKnVyaVBhZ2UxLCAqdXJpUGFnZTI7CisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50
ICpjbGllbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQoZml4dHVyZS0+d2Vi
Vmlldyk7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0ICpsaXN0ID0gd2Via2l0X3dlYl92
aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdChmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtICppdGVtUGFnZTEsICppdGVtUGFnZTI7CisgICAgV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0SXRlbSAqaXRlbXNbMV07CisKKyAgICBnX2Fzc2VydF9jbXB1aW50
KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDApOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0
ZW0obGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2l0ZW0obGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOworICAgIGNoZWNrSXRlbUluZGV4KGxpc3Qp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xp
c3QobGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9mb3J3YXJkX2xpc3QobGlzdCkpOworCisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJs
b2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNoZWQpLCBmaXh0dXJlKTsKKworICAg
IHVyaVBhZ2UxID0gZ2V0VVJJRm9yUGF0aCgiL1BhZ2UxIik7CisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVBhZ2UxKTsKKyAgICBnX21haW5fbG9vcF9y
dW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOworICAgIGl0ZW1QYWdlMSA9
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KTsKKyAg
ICBjaGVja0l0ZW0oaXRlbVBhZ2UxLCAiUGFnZTEiLCB1cmlQYWdlMSwgdXJpUGFnZTEpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlz
dCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2l0ZW0obGlzdCkpOworICAgIGNoZWNrSXRlbUluZGV4KGxpc3QpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QobGlzdCkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Qo
bGlzdCkpOworCisgICAgdXJpUGFnZTIgPSBnZXRVUklGb3JQYXRoKCIvUGFnZTIiKTsKKyAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpUGFnZTIpOworICAg
IGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMik7Cisg
ICAgaXRlbVBhZ2UyID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9p
dGVtKGxpc3QpOworICAgIGNoZWNrSXRlbShpdGVtUGFnZTIsICJQYWdlMiIsIHVyaVBhZ2UyLCB1
cmlQYWdlMik7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
YmFja19pdGVtKGxpc3QpID09IGl0ZW1QYWdlMSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShsaXN0KSk7CisgICAgY2hlY2tJdGVt
SW5kZXgobGlzdCk7CisgICAgaXRlbXNbMF0gPSBpdGVtUGFnZTE7CisgICAgY2hlY2tMaXN0KGxp
c3QsIEJBQ0tXQVJELCBpdGVtcywgMSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdChsaXN0KSk7CisKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ29fYmFjayhmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVy
ZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDIpOworICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMSA9
PSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0obGlzdCkpOwor
ICAgIGNoZWNrSXRlbSh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0
ZW0obGlzdCksICJQYWdlMSIsIHVyaVBhZ2UxLCB1cmlQYWdlMSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbShsaXN0KSk7CisgICAgZ19h
c3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGxpc3Qp
ID09IGl0ZW1QYWdlMik7CisgICAgY2hlY2tJdGVtSW5kZXgobGlzdCk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdChsaXN0KSk7CisgICAg
aXRlbXNbMF0gPSBpdGVtUGFnZTI7CisgICAgY2hlY2tMaXN0KGxpc3QsIEZPUldBUkQsIGl0ZW1z
LCAxKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkKGZpeHR1cmUtPndlYlZpZXcp
OworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKKworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwg
Mik7CisgICAgZ19hc3NlcnQoaXRlbVBhZ2UyID09IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KSk7CisgICAgY2hlY2tJdGVtKHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KSwgIlBhZ2UyIiwgdXJpUGFnZTIs
IHVyaVBhZ2UyKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2l0ZW0obGlzdCkgPT0gaXRlbVBhZ2UxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGxpc3QpKTsKKyAgICBjaGVja0l0
ZW1JbmRleChsaXN0KTsKKyAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKKyAgICBjaGVja0xpc3Qo
bGlzdCwgQkFDS1dBUkQsIGl0ZW1zLCAxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KGxpc3QpKTsKKworICAgIGdfZnJlZSh1cmlQ
YWdlMSk7CisgICAgZ19mcmVlKHVyaVBhZ2UyKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQoreworICAgIFNvdXBTZXJ2ZXIgKnNlcnZlcjsKKworICAgIGdfdGhyZWFkX2lu
aXQoTlVMTCk7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAg
Z19zZXRlbnYoIldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19QQVRILCBGQUxTRSk7CisK
KyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7
CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9h
ZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKKwor
ICAgIGJhc2VVUkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7CisgICAgc291
cF91cmlfc2V0X3BvcnQoYmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisK
KyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQyL2JhY2tmb3J3YXJkbGlzdC9uYXZpZ2F0aW9uIiwKKyAgICAgICAg
ICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdEZpeHR1cmUsIE5VTEwsCisgICAgICAgICAgICAgICB3
ZWJCYWNrRm9yd2FyZExpc3RGaXh0dXJlU2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0QmFja0Zv
cndhcmRMaXN0TmF2aWdhdGlvbiwKKyAgICAgICAgICAgICAgIHdlYkJhY2tGb3J3YXJkTGlzdEZp
eHR1cmVUZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggZmRhMWE4Ni4uYzE0M2M5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtMjQs
NiArMjQsOCBAQAogCiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdEVycm9yLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJC
YWNrRm9yd2FyZExpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFdlYkxvYWRlckNsaWVudC5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0V2ViVmlld0Jhc2UuaD4K
</data>
<flag name="review"
          id="106911"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110130</attachid>
            <date>2011-10-07 05:49:51 -0700</date>
            <delta_ts>2011-10-11 03:09:10 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-bf-list.2.diff</filename>
            <type>text/plain</type>
            <size>43377</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1OWQ5MGU5Li41Y2UyZTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUg
QEAKKzIwMTEtMTAtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYmFjayBmb3J3YXJk
IGxpc3QgZm9yIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtp
dEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9pbml0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0
KToKKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QpOgorICAgICAgICAo
d2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfYmFja19pdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfZm9yd2FyZF9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
bnRoX2l0ZW0pOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgp
OgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QpOgorICAg
ICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCk6
CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCk6Cisg
ICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xp
bWl0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3Qu
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbS5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZp
bmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2luaXQpOgor
ICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fY2xhc3NfaW5pdCk6CisgICAg
ICAgIChoaXN0b3J5SXRlbXMpOgorICAgICAgICAod2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUdl
dE9yQ3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91
cmkpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlKToK
KyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0u
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRM
aXN0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZCk6CisgICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvdGVzdGJhY2tmb3J3YXJkbGlzdC5jOiBBZGRlZC4KKyAgICAgICAgKHNlcnZlckNh
bGxiYWNrKToKKyAgICAgICAgKHdlYkJhY2tGb3J3YXJkTGlzdEZpeHR1cmVTZXR1cCk6CisgICAg
ICAgICh3ZWJCYWNrRm9yd2FyZExpc3RGaXh0dXJlVGVhcmRvd24pOgorICAgICAgICAoZ2V0VVJJ
Rm9yUGF0aCk6CisgICAgICAgIChjaGVja0l0ZW0pOgorICAgICAgICAoY2hlY2tJdGVtSW5kZXgp
OgorICAgICAgICAoY2hlY2tMaXN0KToKKyAgICAgICAgKGxvYWRGaW5pc2hlZCk6CisgICAgICAg
ICh0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlvbik6CisgICAgICAgIChtYWluKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6CisKIDIwMTEtMTAtMDYgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtXaW5DYWlyb10gQ29ycmVj
dCBpbXByb3BlciBpZGVudGlmaWNhdGlvbiBvZiBXS1FDIGV4dGVuc2lvbnMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IDlhNzc1MDkuLmY5Y2FkMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC02
OSw2ICs2OSw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBf
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfSEVBCiAKIGxpYndlYmtpdDJndGtpbmNs
dWRlZGlyID0gJChsaWJ3ZWJraXRndGtpbmNsdWRlZGlyKS93ZWJraXQyCiB3ZWJraXQyZ3RrX2hl
YWRlcnMgPSBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2Fy
ZExpc3QuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5l
cy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIFwKQEAgLTQ2NSw2
ICs0NjcsMTEgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9A
V0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2NwcC9XS1JldGFpblB0ci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmggXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2
YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMu
aCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwIFwKQEAgLTEw
ODMsNyArMTA5MCw4IEBAIERJU1RDTEVBTkZJTEVTICs9IFwKIFRFU1RfUFJPR1MgKz0gXAogCVBy
b2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3R3ZWJjb250ZXh0IFwKIAlQcm9ncmFtcy91bml0
dGVzdHMvd2Via2l0Mi90ZXN0d2VidmlldyBcCi0JUHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIv
dGVzdGxvYWRpbmcKKwlQcm9ncmFtcy91bml0dGVzdHMvd2Via2l0Mi90ZXN0bG9hZGluZyBcCisJ
UHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIvdGVzdGJhY2tmb3J3YXJkbGlzdAogCiBub2luc3Rf
UFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQogd2Via2l0Ml90ZXN0c19jZmxhZ3MgPSBcCkBAIC0x
MTI2LDYgKzExMzQsMTEgQEAgUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdf
Q0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0c193ZWJr
aXQyX3Rlc3Rsb2FkaW5nX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNf
dW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19s
ZGZsYWdzKQogCitQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0YmFja2ZvcndhcmRsaXN0
X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0YmFj
a2ZvcndhcmRsaXN0LmMKK1Byb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3RiYWNrZm9yd2Fy
ZGxpc3RfQ0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX3VuaXR0ZXN0
c193ZWJraXQyX3Rlc3RiYWNrZm9yd2FyZGxpc3RfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRh
ZGQpCitQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0YmFja2ZvcndhcmRsaXN0X0xERkxB
R1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKKwogIyBXZWJLaXRXZWJQcm9jZXNzCiBsaWJl
eGVjX1BST0dSQU1TICs9IFwKIAlQcm9ncmFtcy9XZWJLaXRXZWJQcm9jZXNzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3Qu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRM
aXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjAzNzU2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0LmNwcApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QmFj
a0ZvcndhcmRMaXN0LmgiCisKKyNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRl
LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0JhY2tGb3J3YXJkTGlzdC5oPgorCisvKioKKyAqIFNF
Q1RJT046IFdlYktpdEJhY2tGb3J3YXJkTGlzdAorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBMaXN0
IG9mIHZpc2l0ZWQgcGFnZXMKKyAqIEBUaXRsZTogV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKiBA
U2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3LCAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbQorICoK
KyAqIFdlYktpdEJhY2tGb3J3YXJkTGlzdCBtYWludGFpbnMgYSBsaXN0IG9mIHZpc2l0ZWQgcGFn
ZXMgdXNlZCB0bworICogZ28gYmFjayBhbmQgZm9yd2FyZCB0byB0aGUgbW9zdCByZWNlbnQgcGFn
ZS4gSXRlbXMgYXJlIGluc2VydGVkCisgKiBpbiB0aGUgbGlzdCBpbiB0aGUgb3JkZXIgdGhleSBh
cmUgdmlzaXRlZC4KKyAqCisgKiBXZWJLaXRCYWNrRm9yd2FyZExpc3QgYWxzbyBtYWludGFpbnMg
dGhlIG5vdGlvbiBvZiB0aGUgY3VycmVudCBpdGVtCisgKiAod2hpY2ggaXMgYWx3YXlzIGF0IGlu
ZGV4IDApLCB0aGUgcHJlY2VkaW5nIGl0ZW0gKHdoaWNoIGlzIGF0IGluZGV4IC0xKSwKKyAqIGFu
ZCB0aGUgZm9sbG93aW5nIGl0ZW0gKHdoaWNoIGlzIGF0IGluZGV4IDEpLgorICogTWV0aG9kcyB3
ZWJraXRfd2ViX3ZpZXdfZ29fYmFjaygpIGFuZCB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZCgp
IG1vdmUKKyAqIHRoZSBjdXJyZW50IGl0ZW0gYmFja3dhcmQgb3IgZm9yd2FyZCBieSBvbmUuIE1l
dGhvZAorICogd2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9pdGVtKCkgc2V0cyB0
aGUgY3VycmVudCBpdGVtIHRvIHRoZQorICogc3BlY2lmaWVkIGl0ZW0uIEFsbCBvdGhlciBtZXRo
b2RzIHJldHVybmluZyAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbTwhLS0gLS0+cworICogZG8g
bm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgaXRlbSwgdGhleSBqdXN0IHJldHVy
biB0aGUgcmVxdWVzdGVkCisgKiBpdGVtIG9yIGl0ZW1zLgorICovCisKK3N0cnVjdCBfV2ViS2l0
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSB7CisgICAgV0tCYWNrRm9yd2FyZExpc3RSZWYgd2tMaXN0
OworfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRCYWNrRm9yd2FyZExpc3QsIHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0QmFja0Zv
cndhcmRMaXN0RmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9CQUNLX0ZP
UldBUkRfTElTVChvYmplY3QpLT5wcml2LT5+V2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSgp
OworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfaW5pdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QpCit7CisgICAgV2ViS2l0
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFU
RShsaXN0LCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0ZvcndhcmRM
aXN0UHJpdmF0ZSk7CisgICAgbGlzdC0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJL
aXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9jbGFzc19pbml0KFdlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzKiBsaXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhsaXN0Q2xhc3MpOworCisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEJhY2tG
b3J3YXJkTGlzdEZpbmFsaXplOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGxpc3RD
bGFzcywgc2l6ZW9mKFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUpKTsKK30KKworc3RhdGlj
IEdMaXN0KiB3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGVMaXN0KFdLQXJyYXlSZWYgd2tMaXN0
KQoreworICAgIGlmICghd2tMaXN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMaXN0KiBs
aXN0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKHdrTGlz
dCk7ICsraSkgeworICAgICAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tJdGVtID0gc3Rh
dGljX2Nhc3Q8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgo
d2tMaXN0LCBpKSk7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0gPSB3
ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVhdGUod2tJdGVtKTsKKyAgICAgICAgaWYg
KCFpdGVtKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbGlzdCA9IGdfbGlzdF9w
cmVwZW5kKGxpc3QsIGl0ZW0pOworICAgIH0KKworICAgIHJldHVybiBsaXN0OworfQorCitXZWJL
aXRCYWNrRm9yd2FyZExpc3QqIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZShXS0JhY2tGb3J3
YXJkTGlzdFJlZiB3a0xpc3QpCit7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0ID0g
V0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9CQUNLX0ZP
UldBUkRfTElTVCwgTlVMTCkpOworICAgIGxpc3QtPnByaXYtPndrTGlzdCA9IHdrTGlzdDsKKwor
ICAgIHJldHVybiBsaXN0OworfQorCisvKioKKyAqIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfY3VycmVudF9pdGVtOgorICogQGJhY2tfZm9yd2FyZF9saXN0OiBhICNXZWJLaXRCYWNrRm9y
d2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGl0ZW0gaW4gQGJhY2tfZm9yd2Fy
ZF9saXN0LgorICoKKyAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiBhICNXZWJLaXRX
ZWJIaXN0b3J5SXRlbSwKKyAqICAgIG9yICVOVUxMIGlmIEBiYWNrX2ZvcndhcmRfbGlzdCBpcyBl
bXB0eS4KKyAqLworV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9jdXJyZW50X2l0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2Fy
ZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FS
RF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOworCisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3
YXJkTGlzdEl0ZW1HZXRPckNyZWF0ZShXS0JhY2tGb3J3YXJkTGlzdEdldEN1cnJlbnRJdGVtKGJh
Y2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW06CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dl
YktpdEJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhhdCBwcmVjZWRl
cyB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhl
ICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKiAgICBwcmVjZWRpbmcgdGhlIGN1cnJlbnQg
aXRlbSwgb3IgJU5VTEwuCisgKi8KK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNL
X0ZPUldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIHJldHVybiB3ZWJraXRC
YWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVhdGUoV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrSXRl
bShiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCkpOworfQorCisvKioKKyAqIHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtOgorICogQGJhY2tfZm9yd2FyZF9saXN0
OiBhICNXZWJLaXRCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBpdGVtIHRoYXQg
c3VjY2VlZHMgdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IHRoZSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbQorICogICAgZm9sbG93aW5nIHRoZSBj
dXJyZW50IGl0ZW0sIG9yICVOVUxMCisgKi8KK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKFdlYktpdEJhY2tGb3J3YXJk
TGlzdCogYmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19CQUNLX0ZPUldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIHJldHVy
biB3ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVhdGUoV0tCYWNrRm9yd2FyZExpc3RH
ZXRGb3J3YXJkSXRlbShiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCkpOworfQorCisvKioK
KyAqIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW06CisgKiBAYmFja19mb3J3
YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICogQGluZGV4OiB0aGUgaW5kZXgg
b2YgdGhlIGl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gaW5kZXggcmVs
YXRpdmUgdG8gdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IHRoZSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbQorICogICAgbG9jYXRlZCBhdCB0aGUg
c3BlY2lmaWVkIGluZGV4IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGl0ZW0KKyAqLworV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRl
bShXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCwgZ2ludCBpbmRleCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFj
a0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0SXRl
bUdldE9yQ3JlYXRlKFdLQmFja0ZvcndhcmRMaXN0R2V0SXRlbUF0SW5kZXgoYmFja0ZvcndhcmRM
aXN0LT5wcml2LT53a0xpc3QsIGluZGV4KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9sZW5ndGg6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJh
Y2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnM6IHRoZSBsZW5ndGggb2YgQGJhY2tfZm9yd2Fy
ZF9saXN0LgorICovCitndWludCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aChX
ZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFja0ZvcndhcmRMaXN0KSwg
MCk7CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKiBwcml2ID0gYmFja0Zvcndh
cmRMaXN0LT5wcml2OworICAgIGd1aW50IGN1cnJlbnRJdGVtID0gd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9jdXJyZW50X2l0ZW0oYmFja0ZvcndhcmRMaXN0KSA/IDEgOiAwOworICAgIHJl
dHVybiBXS0JhY2tGb3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQocHJpdi0+d2tMaXN0KSArIFdL
QmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZExpc3RDb3VudChwcml2LT53a0xpc3QpICsgY3VycmVu
dEl0ZW07Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xp
c3Q6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICoK
KyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJkTGlzdEl0ZW0pICh0
cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMgcHJlY2VkaW5nIHRo
ZSBjdXJyZW50IGl0ZW0KKyAqLworR0xpc3QqIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
YmFja19saXN0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVChiYWNrRm9y
d2FyZExpc3QpLCAwKTsKKworICAgIGd1aW50IGxpbWl0ID0gV0tCYWNrRm9yd2FyZExpc3RHZXRC
YWNrTGlzdENvdW50KGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0KTsKKyAgICByZXR1cm4g
d2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlTGlzdChXS0JhY2tGb3J3YXJkTGlzdENvcHlCYWNr
TGlzdFdpdGhMaW1pdChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCwgbGltaXQpKTsKK30K
KworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93aXRoX2xp
bWl0OgorICogQGJhY2tfZm9yd2FyZF9saXN0OiBhICNXZWJLaXRCYWNrRm9yd2FyZExpc3QKKyAq
IEBsaW1pdDogdGhlIG51bWJlciBvZiBpdGVtcyB0byByZXRyaWV2ZQorICoKKyAqIFJldHVybnM6
IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJkTGlzdEl0ZW0pICh0cmFuc2ZlciBjb250
YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMgcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0
ZW0sIGxpbWl0ZWQgYnkgQGxpbWl0CisgKi8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2JhY2tfbGlzdF93aXRoX2xpbWl0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0Zv
cndhcmRMaXN0LCBndWludCBsaW1pdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1
cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlTGlzdChXS0JhY2tGb3J3YXJkTGlzdENvcHlC
YWNrTGlzdFdpdGhMaW1pdChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCwgbGltaXQpKTsK
K30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdDoK
KyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgorICog
UmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXQuQmFja0ZvcndhcmRMaXN0SXRlbSkgKHRyYW5z
ZmVyIGNvbnRhaW5lcik6IGEgI0dMaXN0IG9mCisgKiAgICBpdGVtcyBzdWNjZWVkaW5nIHRoZSBj
dXJyZW50IGl0ZW0KKyAqLworR0xpc3QqIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9saXN0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVChiYWNrRm9y
d2FyZExpc3QpLCAwKTsKKworICAgIGd1aW50IGxpbWl0ID0gV0tCYWNrRm9yd2FyZExpc3RHZXRG
b3J3YXJkTGlzdENvdW50KGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0KTsKKyAgICByZXR1
cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlTGlzdChXS0JhY2tGb3J3YXJkTGlzdENvcHlG
b3J3YXJkTGlzdFdpdGhMaW1pdChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCwgbGltaXQp
KTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlz
dF93aXRoX2xpbWl0OgorICogQGJhY2tfZm9yd2FyZF9saXN0OiBhICNXZWJLaXRCYWNrRm9yd2Fy
ZExpc3QKKyAqIEBsaW1pdDogdGhlIG51bWJlciBvZiBpdGVtcyB0byByZXRyaWV2ZQorICoKKyAq
IFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJkTGlzdEl0ZW0pICh0cmFu
c2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMgc3VjY2VlZGluZyB0aGUg
Y3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5IEBsaW1pdAorICovCitHTGlzdCogd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdChXZWJLaXRCYWNrRm9yd2Fy
ZExpc3QqIGJhY2tGb3J3YXJkTGlzdCwgZ3VpbnQgbGltaXQpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDAp
OworCisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNrRm9y
d2FyZExpc3RDb3B5Rm9yd2FyZExpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53
a0xpc3QsIGxpbWl0KSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjRjZGIwODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaApAQCAtMCwwICsxLDg4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dF
QktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJv
ciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisj
ZW5kaWYKKworI2lmbmRlZiBXZWJLaXRCYWNrRm9yd2FyZExpc3RfaAorI2RlZmluZSBXZWJLaXRC
YWNrRm9yd2FyZExpc3RfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0JB
Q0tfRk9SV0FSRF9MSVNUICAgICAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQkFDS19GT1JX
QVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdCkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZP
UldBUkRfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0ZvcndhcmRMaXN0
Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfQkFDS19GT1JX
QVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQkFDS19G
T1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfQkFD
S19GT1JXQVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzKSkKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdCAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzICAgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0
UHJpdmF0ZSBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEJh
Y2tGb3J3YXJkTGlzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRCYWNrRm9y
d2FyZExpc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExp
c3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfdHlwZSAgICAgICAgICAgICAg
ICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0gKgor
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0gICAgICAgICAgICAoV2Vi
S2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbSAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfaXRlbSAgICAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9yd2Fy
ZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICoKK3dlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtICAgICAgICAgICAgKFdlYktpdEJh
Y2tGb3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIFdlYktpdEJh
Y2tGb3J3YXJkTGlzdEl0ZW0gKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRl
bSAgICAgICAgICAgICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgICAgICAgICAgICAgaW5kZXgpOworV0VCS0lUX0FQSSBndWludAord2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGggICAgICAgICAgICAgICAgICAoV2ViS2l0QmFj
a0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgR0xpc3QgKgor
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QgICAgICAgICAgICAgICAoV2Vi
S2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgR0xp
c3QgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCAg
ICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAg
ICAgICAgICAgbGltaXQpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0ICAgICAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJkTGlz
dCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQgKFdlYktpdEJhY2tGb3J3
YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgIGxpbWl0KTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NDhlMGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtLmNwcApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbS5oIgorCisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIgor
I2luY2x1ZGUgPFdlYktpdDIvV0tCYWNrRm9yd2FyZExpc3RJdGVtLmg+CisjaW5jbHVkZSA8V2Vi
S2l0Mi9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
UHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPiB3a0xp
c3RJdGVtOworICAgIENTdHJpbmcgdXJpOworICAgIENTdHJpbmcgdGl0bGU7CisgICAgQ1N0cmlu
ZyBvcmlnaW5hbFVSSTsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbSwgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0sIEdfVFlQRV9PQkpFQ1QpCisKK3N0
YXRpYyB2b2lkIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1GaW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0ob2JqZWN0KS0+cHJpdi0+
fldlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1faW5p
dChXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0SXRlbSkKK3sKKyAgICBXZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFU
RShsaXN0SXRlbSwgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSwgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbVByaXZhdGUpOworICAgIGxpc3RJdGVtLT5wcml2ID0gcHJpdjsKKyAg
ICBuZXcgKHByaXYpIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2NsYXNzX2luaXQoV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbUNsYXNzKiBsaXN0SXRlbUNsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MobGlzdEl0ZW1DbGFzcyk7CisKKyAg
ICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZpbmFs
aXplOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGxpc3RJdGVtQ2xhc3MsIHNpemVv
ZihXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSkpOworfQorCitzdGF0aWMgR0hhc2hU
YWJsZSogaGlzdG9yeUl0ZW1zKCkKK3sKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSogaXRlbXMgPSBn
X2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19kaXJlY3RfaGFzaCwgZ19kaXJlY3RfZXF1YWwsIDAsIGdf
b2JqZWN0X3VucmVmKTsKKyAgICByZXR1cm4gaXRlbXM7Cit9CisKK1dlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0qIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNyZWF0ZShXS0JhY2tGb3J3
YXJkTGlzdEl0ZW1SZWYgd2tMaXN0SXRlbSkKK3sKKyAgICBpZiAoIXdrTGlzdEl0ZW0pCisgICAg
ICAgIHJldHVybiAwOworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdEl0ZW0g
PSBzdGF0aWNfY2FzdDxXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKj4oZ19oYXNoX3RhYmxlX2xv
b2t1cChoaXN0b3J5SXRlbXMoKSwgd2tMaXN0SXRlbSkpOworICAgIGlmIChsaXN0SXRlbSkKKyAg
ICAgICAgcmV0dXJuIGxpc3RJdGVtOworCisgICAgbGlzdEl0ZW0gPSBXRUJLSVRfQkFDS19GT1JX
QVJEX0xJU1RfSVRFTShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1Rf
SVRFTSwgTlVMTCkpOworICAgIGxpc3RJdGVtLT5wcml2LT53a0xpc3RJdGVtID0gd2tMaXN0SXRl
bTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KGhpc3RvcnlJdGVtcygpLCAoZ3BvaW50ZXIpd2tM
aXN0SXRlbSwgbGlzdEl0ZW0pOworCisgICAgcmV0dXJuIGxpc3RJdGVtOworfQorCisvKioKKyAq
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmk6CisgKiBAYmFja19mb3J3YXJk
X2xpc3RfaXRlbTogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbQorICoKKyAqIFJldHVybnM6
IHRoZSBVUkkgb2YgQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW0KKyAqLworY29uc3QgZ2NoYXIqIHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmkoV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbSogbGlzdEl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JB
Q0tfRk9SV0FSRF9MSVNUX0lURU0obGlzdEl0ZW0pLCAwKTsKKworICAgIFdlYktpdEJhY2tGb3J3
YXJkTGlzdEl0ZW1Qcml2YXRlKiBwcml2ID0gbGlzdEl0ZW0tPnByaXY7CisgICAgV0tSZXRhaW5Q
dHI8V0tVUkxSZWY+IHdrVVJJKEFkb3B0V0ssIFdLQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlVUkwo
cHJpdi0+d2tMaXN0SXRlbS5nZXQoKSkpOworICAgIGlmICh0b0ltcGwod2tVUkkuZ2V0KCkpLT5z
dHJpbmcoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgQ1N0cmlu
ZyYgdXJpID0gdG9JbXBsKHdrVVJJLmdldCgpKS0+c3RyaW5nKCkudXRmOCgpOworICAgIGlmIChw
cml2LT51cmkgIT0gdXJpKQorICAgICAgICBwcml2LT51cmkgPSB1cmk7CisKKyAgICByZXR1cm4g
cHJpdi0+dXJpLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbV9nZXRfdGl0bGU6CisgKiBAYmFja19mb3J3YXJkX2xpc3RfaXRlbTogYSAjV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbQorICoKKyAqIFJldHVybnM6IHRoZSBwYWdlIHRpdGxlIG9mIEBiYWNr
X2ZvcndhcmRfbGlzdF9pdGVtCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfaXRlbV9nZXRfdGl0bGUoV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdEl0ZW0p
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNU
X0lURU0obGlzdEl0ZW0pLCAwKTsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2
YXRlKiBwcml2ID0gbGlzdEl0ZW0tPnByaXY7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHdrVGl0bGUoQWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weVRpdGxlKHByaXYtPndr
TGlzdEl0ZW0uZ2V0KCkpKTsKKyAgICBpZiAodG9JbXBsKHdrVGl0bGUuZ2V0KCkpLT5zdHJpbmco
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgQ1N0cmluZyYgdGl0
bGUgPSB0b0ltcGwod2tUaXRsZS5nZXQoKSktPnN0cmluZygpLnV0ZjgoKTsKKyAgICBpZiAocHJp
di0+dGl0bGUgIT0gdGl0bGUpCisgICAgICAgIHByaXYtPnRpdGxlID0gdGl0bGU7CisKKyAgICBy
ZXR1cm4gcHJpdi0+dGl0bGUuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmk6CisgKiBAYmFja19mb3J3YXJkX2xpc3RfaXRl
bTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm5zOiB0aGUgb3JpZ2luYWwg
VVJJIG9mIEBiYWNrX2ZvcndhcmRfbGlzdF9pdGVtCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKFdlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0qIGxpc3RJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGxpc3RJdGVtKSwgMCk7CisKKyAgICBXZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtUHJpdmF0ZSogcHJpdiA9IGxpc3RJdGVtLT5wcml2OworICAgIFdLUmV0
YWluUHRyPFdLVVJMUmVmPiB3a09yaWdpbmFsVVJJKEFkb3B0V0ssIFdLQmFja0ZvcndhcmRMaXN0
SXRlbUNvcHlPcmlnaW5hbFVSTChwcml2LT53a0xpc3RJdGVtLmdldCgpKSk7CisgICAgaWYgKHRv
SW1wbCh3a09yaWdpbmFsVVJJLmdldCgpKS0+c3RyaW5nKCkuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGNvbnN0IENTdHJpbmcmIG9yaWdpbmFsVVJJID0gdG9JbXBsKHdrT3Jp
Z2luYWxVUkkuZ2V0KCkpLT5zdHJpbmcoKS51dGY4KCk7CisgICAgaWYgKHByaXYtPm9yaWdpbmFs
VVJJICE9IG9yaWdpbmFsVVJJKQorICAgICAgICBwcml2LT5vcmlnaW5hbFVSSSA9IG9yaWdpbmFs
VVJJOworCisgICAgcmV0dXJuIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3
YXJkTGlzdEl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNmODky
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQy
L3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1faAorI2RlZmluZSBXZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9C
QUNLX0ZPUldBUkRfTElTVF9JVEVNICAgICAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZPUldBUkRfTElTVF9JVEVN
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0sIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0p
KQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRFTV9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldB
UkRfTElTVF9JVEVNLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3MpKQorI2RlZmluZSBX
RUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVF9JVEVN
KSkKKyNkZWZpbmUgV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU1fQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQkFDS19GT1JX
QVJEX0xJU1RfSVRFTSkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZPUldBUkRfTElTVF9JVEVNX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9U
WVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0sIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1DbGFz
cykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICAgICAgICBX
ZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3
YXJkTGlzdEl0ZW1DbGFzcyAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1DbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSBXZWJLaXRCYWNrRm9y
d2FyZExpc3RJdGVtUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Q
cml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xh
c3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdHlwZSAgICAgICAgICh2b2lk
KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbV9nZXRfdXJpICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0X2l0
ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX2dldF90aXRsZSAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxpc3Rf
aXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogbGlz
dF9pdGVtKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1YzNkMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tG
b3J3YXJkTGlzdFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViS2l0QmFja0ZvcndhcmRM
aXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGVfaAorCisj
aW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0QmFja0Zvcndh
cmRMaXN0LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisKK1dlYktpdEJhY2tGb3J3
YXJkTGlzdCogd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdLQmFja0ZvcndhcmRMaXN0UmVm
KTsKK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1H
ZXRPckNyZWF0ZShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYpOworCisjZW5kaWYgLy8gV2ViS2l0
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDJjMzNmMzMuLmE3ODhjZWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0
V2ViVmlldy5oIgogCisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2Vi
TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCkBA
IC00NCw2ICs0NSw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewogICAgIFdlYktp
dFdlYkNvbnRleHQqIGNvbnRleHQ7CiAKICAgICBHUmVmUHRyPFdlYktpdFdlYkxvYWRlckNsaWVu
dD4gbG9hZGVyQ2xpZW50OworICAgIEdSZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRMaXN0PiBiYWNr
Rm9yd2FyZExpc3Q7CiB9OwogCiBHX0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXcsIHdlYmtpdF93
ZWJfdmlldywgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRSkKQEAgLTU2LDYgKzU4LDkgQEAgc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICB3
ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmll
dyksIHdlYmtpdFdlYkNvbnRleHRHZXRXS0NvbnRleHQocHJpdi0+Y29udGV4dCksIDApOwogCiAg
ICAgcHJpdi0+bG9hZGVyQ2xpZW50ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJfTE9BREVSX0NMSUVO
VChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9DTElFTlQsICJ3ZWItdmlldyIs
IHdlYlZpZXcsIE5VTEwpKSk7CisKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJW
aWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOworICAgIHByaXYt
PmJhY2tGb3J3YXJkTGlzdCA9IGFkb3B0R1JlZih3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGUo
V0tQYWdlR2V0QmFja0ZvcndhcmRMaXN0KHRvQVBJKHBhZ2UpKSkpOwogfQogCiBzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQs
IGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKQEAgLTI4MSwzICsy
ODYsMTkgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFn
ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSk7CiAgICAgV0tQYWdlR29Gb3J3YXJkKHRv
QVBJKHBhZ2UpKTsKIH0KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2Fy
ZF9saXN0OgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogT2J0YWlucyB0
aGUgI1dlYktpdEJhY2tGb3J3YXJkTGlzdCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuICNXZWJL
aXRXZWJWaWV3LiBUaGUKKyAqICNXZWJLaXRCYWNrRm9yd2FyZExpc3QgaXMgb3duZWQgYnkgdGhl
ICNXZWJLaXRXZWJWaWV3LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNX
ZWJLaXRCYWNrRm9yd2FyZExpc3QKKyAqLworV2ViS2l0QmFja0ZvcndhcmRMaXN0KiB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAw
KTsKKworICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5iYWNrRm9yd2FyZExpc3QuZ2V0KCk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgK
aW5kZXggZGUyNmE4NS4uY2JkZWFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBXZWJL
aXRXZWJWaWV3X2gKICNkZWZpbmUgV2ViS2l0V2ViVmlld19oCiAKKyNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5l
cy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0V2ViTG9hZGVyQ2xpZW50Lmg+CkBAIC02NywzOSArNjgsNDIgQEAgc3RydWN0
IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X3dl
Yl92aWV3X2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOword2Via2l0X3dlYl92aWV3X2dldF90
eXBlICAgICAgICAgICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgR3RrV2lkZ2V0ICoKLXdlYmtp
dF93ZWJfdmlld19uZXcgICAgICAgICAgICAgICAgICh2b2lkKTsKK3dlYmtpdF93ZWJfdmlld19u
ZXcgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIEd0a1dpZGdldCAqCi13
ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAg
ICpjb250ZXh0KTsKK3dlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0ICAgICAgKFdlYktp
dFdlYkNvbnRleHQgICAgICAqY29udGV4dCk7CiAKIFdFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4
dCAqCi13ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAgICAoV2ViS2l0V2ViVmlldyAg
ICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSBXZWJLaXRX
ZWJMb2FkZXJDbGllbnQgKgotd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50ICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
ZXJfY2xpZW50ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CiAKIFdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X3NldF9sb2FkZXJfY2xpZW50ICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKK3dlYmtpdF93ZWJf
dmlld19zZXRfbG9hZGVyX2NsaWVudCAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3Zp
ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQgKmxvYWRlcl9jbGllbnQpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaSAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAg
ICAgICAqdXJpKTsKK3dlYmtpdF93ZWJfdmlld19sb2FkX3VyaSAgICAgICAgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKnVyaSk7CiAKIFdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X3dlYl92aWV3X2xvYWRfYWx0ZXJuYXRlX2h0bWwgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2NoYXIgICAgICAgICAgICpjb250ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqYmFzZV91cmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICp1bnJlYWNoYWJs
ZV91cmkpOword2Via2l0X3dlYl92aWV3X2xvYWRfYWx0ZXJuYXRlX2h0bWwgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqY29udGVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqYmFzZV91cmksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAg
ICAgKnVucmVhY2hhYmxlX3VyaSk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3
X2dvX2JhY2sgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOwor
d2Via2l0X3dlYl92aWV3X2dvX2JhY2sgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAg
ICAgICp3ZWJfdmlldyk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X2dvX2Zv
cndhcmQgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0
X3dlYl92aWV3X2dvX2ZvcndhcmQgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3
ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgV2ViS2l0QmFja0ZvcndhcmRMaXN0ICoKK3dlYmtpdF93
ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2Vi
X3ZpZXcpOwogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0YmFja2ZvcndhcmRsaXN0LmMgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0YmFja2ZvcndhcmRsaXN0LmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmZGU1ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3RiYWNrZm9yd2FyZGxpc3Qu
YwpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1
ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCit0eXBlZGVmIGVu
dW0geworICAgIEJBQ0tXQVJELAorICAgIEZPUldBUkQKK30gTGlzdFR5cGU7CisKK1NvdXBVUkkg
KmJhc2VVUkk7CisKKy8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3RhdGljIHZvaWQg
c2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25z
dCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRl
eHQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciAqYm9keTsKKworICAgIGlmIChtc2ctPm1l
dGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7
CisKKyAgICBib2R5ID0gZ19zdHJkdXBfcHJpbnRmKCI8aHRtbD48dGl0bGU+JXM8L3RpdGxlPjxi
b2R5PiVzPC9ib2R5PjwvaHRtbD4iLCBwYXRoICsgMSwgcGF0aCArIDEpOworICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGJv
ZHksIHN0cmxlbihib2R5KSk7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ct
PnJlc3BvbnNlX2JvZHkpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0V2ViVmll
dyAqd2ViVmlldzsKKyAgICBHTWFpbkxvb3AgKmxvb3A7Cit9IEJhY2tGb3J3YXJkTGlzdEZpeHR1
cmU7CisKK3N0YXRpYyB2b2lkIHdlYkJhY2tGb3J3YXJkTGlzdEZpeHR1cmVTZXR1cChCYWNrRm9y
d2FyZExpc3RGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4
dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwor
ICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZ19v
YmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYkJh
Y2tGb3J3YXJkTGlzdEZpeHR1cmVUZWFyZG93bihCYWNrRm9yd2FyZExpc3RGaXh0dXJlICpmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+
d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0
YXRpYyBjaGFyICpnZXRVUklGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgU291cFVS
SSAqdXJpOworICAgIGNoYXIgKnVyaVN0cmluZzsKKworICAgIHVyaSA9IHNvdXBfdXJpX25ld193
aXRoX2Jhc2UoYmFzZVVSSSwgcGF0aCk7CisgICAgdXJpU3RyaW5nID0gc291cF91cmlfdG9fc3Ry
aW5nKHVyaSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKKworICAgIHJldHVybiB1
cmlTdHJpbmc7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrSXRlbShXZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtICppdGVtLCBjb25zdCBnY2hhciAqdGl0bGUsIGNvbnN0IGdjaGFyICp1cmksIGNvbnN0
IGdjaGFyICpvcmlnaW5hbFVSSSkKK3sKKyAgICBnX2Fzc2VydChpdGVtKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3VyaShpdGVtKSwgPT0s
IHVyaSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X2dldF90aXRsZShpdGVtKSwgPT0gLCB0aXRsZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSksID09LCBvcmln
aW5hbFVSSSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrSXRlbUluZGV4KFdlYktpdEJhY2tGb3J3
YXJkTGlzdCAqbGlzdCkKK3sKKyAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X250aF9pdGVtKGxpc3QsIC0xKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfaXRlbShsaXN0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9udGhfaXRlbShsaXN0LCAwKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJl
bnRfaXRlbShsaXN0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9udGhfaXRlbShsaXN0LCAxKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfaXRlbShsaXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrTGlzdChXZWJLaXRCYWNrRm9y
d2FyZExpc3QgKmxpc3QsIExpc3RUeXBlIHR5cGUsIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0g
KippdGVtcywgZ3VpbnQgbkl0ZW1zKQoreworICAgIEdMaXN0ICpsaXN0SXRlbTsKKyAgICBndWlu
dCBpOworICAgIEdMaXN0ICpsaXN0SXRlbXMgPSB0eXBlID09IEJBQ0tXQVJEID8gd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QobGlzdCkgOgorICAgICAgICB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdChsaXN0KTsKKyAgICBnX2Fzc2VydChsaXN0
SXRlbXMpOworCisgICAgaSA9IDA7CisgICAgZm9yIChsaXN0SXRlbSA9IGxpc3RJdGVtczsgbGlz
dEl0ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0ZW0pLCBpKyspIHsKKyAgICAgICAg
Z19hc3NlcnRfY21wdWludChpLCA8LCBuSXRlbXMpOworICAgICAgICBnX2Fzc2VydChsaXN0SXRl
bS0+ZGF0YSA9PSBpdGVtc1tpXSk7CisgICAgfQorICAgIGdfbGlzdF9mcmVlKGxpc3RJdGVtcyk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkRmluaXNoZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50
ICpjbGllbnQsIEJhY2tGb3J3YXJkTGlzdEZpeHR1cmUgKmZpeHR1cmUpCit7CisgICAgZ19tYWlu
X2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyogTmF2
aWdhdGlvbiAqLworc3RhdGljIHZvaWQgdGVzdEJhY2tGb3J3YXJkTGlzdE5hdmlnYXRpb24oQmFj
a0ZvcndhcmRMaXN0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAg
IGNoYXIgKnVyaVBhZ2UxLCAqdXJpUGFnZTI7CisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpj
bGllbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQoZml4dHVyZS0+d2ViVmll
dyk7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9iYWNrX2ZvcndhcmRfbGlzdChmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBXZWJLaXRCYWNrRm9y
d2FyZExpc3RJdGVtICppdGVtUGFnZTEsICppdGVtUGFnZTI7CisgICAgV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbSAqaXRlbXNbMV07CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlzdCkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShsaXN0
KSk7CisgICAgY2hlY2tJdGVtSW5kZXgobGlzdCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KGxpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QobGlzdCkpOworCisgICAgZ19zaWdu
YWxfY29ubmVjdChjbGllbnQsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNo
ZWQpLCBmaXh0dXJlKTsKKworICAgIHVyaVBhZ2UxID0gZ2V0VVJJRm9yUGF0aCgiL1BhZ2UxIik7
CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVBhZ2Ux
KTsKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydF9j
bXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMSk7
CisgICAgaXRlbVBhZ2UxID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0
ZW0obGlzdCk7CisgICAgY2hlY2tJdGVtKGl0ZW1QYWdlMSwgIlBhZ2UxIiwgdXJpUGFnZTEsIHVy
aVBhZ2UxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2l0ZW0obGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2ZvcndhcmRfaXRlbShsaXN0KSk7CisgICAgY2hlY2tJdGVtSW5kZXgobGlzdCk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KGxpc3QpKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QobGlz
dCkpOworCisgICAgdXJpUGFnZTIgPSBnZXRVUklGb3JQYXRoKCIvUGFnZTIiKTsKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpUGFnZTIpOworICAgIGdf
bWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAyKTsKKyAgICBpdGVt
UGFnZTIgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KTsK
KyAgICBjaGVja0l0ZW0oaXRlbVBhZ2UyLCAiUGFnZTIiLCB1cmlQYWdlMiwgdXJpUGFnZTIpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKGxpc3Qp
ID09IGl0ZW1QYWdlMSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfZm9yd2FyZF9pdGVtKGxpc3QpKTsKKyAgICBjaGVja0l0ZW1JbmRleChsaXN0KTsKKyAgICBp
dGVtc1swXSA9IGl0ZW1QYWdlMTsKKyAgICBjaGVja0xpc3QobGlzdCwgQkFDS1dBUkQsIGl0ZW1z
LCAxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3QobGlzdCkpOworCisgICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2soZml4dHVyZS0+d2Vi
Vmlldyk7CisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZ19hc3Nl
cnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0s
IDIpOworICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2N1cnJlbnRfaXRlbShsaXN0KSk7CisgICAgY2hlY2tJdGVtKHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpLCAiUGFnZTEiLCB1cmlQYWdlMSwgdXJpUGFn
ZTEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRl
bShsaXN0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2l0ZW0obGlzdCkgPT0gaXRlbVBhZ2UyKTsKKyAgICBjaGVja0l0ZW1JbmRleChsaXN0KTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QobGlz
dCkpOworICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UyOworICAgIGNoZWNrTGlzdChsaXN0LCBGT1JX
QVJELCBpdGVtcywgMSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChmaXh0dXJl
LT53ZWJWaWV3KTsKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBn
X2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKGxpc3Qp
LCA9PSwgMik7CisgICAgZ19hc3NlcnQoaXRlbVBhZ2UyID09IHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpKTsKKyAgICBjaGVja0l0ZW0od2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0obGlzdCksICJQYWdlMiIsIHVyaVBhZ2UyLCB1
cmlQYWdlMik7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2l0ZW0obGlzdCkgPT0gaXRlbVBhZ2UxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOworICAgIGNoZWNrSXRlbUluZGV4KGxp
c3QpOworICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UxOworICAgIGNoZWNrTGlzdChsaXN0LCBCQUNL
V0FSRCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2ZvcndhcmRfbGlzdChsaXN0KSk7CisKKyAgICBnX2ZyZWUodXJpUGFnZTEpOworICAgIGdf
ZnJlZSh1cmlQYWdlMik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sK
KyAgICBTb3VwU2VydmVyICpzZXJ2ZXI7CisKKyAgICBnX3RocmVhZF9pbml0KE5VTEwpOworICAg
IGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfc2V0ZW52KCJXRUJL
SVRfRVhFQ19QQVRIIiwgV0VCS0lUX0VYRUNfUEFUSCwgRkFMU0UpOworCisgICAgc2VydmVyID0g
c291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2Vy
dmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2Vy
dmVyLCBOVUxMLCBzZXJ2ZXJDYWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAgICBiYXNlVVJJID0g
c291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAgIHNvdXBfdXJpX3NldF9wb3J0
KGJhc2VVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgZ190ZXN0X2J1
Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0Mi9iYWNrZm9yd2FyZGxpc3QvbmF2aWdhdGlvbiIsCisgICAgICAgICAgICAgICBCYWNrRm9y
d2FyZExpc3RGaXh0dXJlLCBOVUxMLAorICAgICAgICAgICAgICAgd2ViQmFja0ZvcndhcmRMaXN0
Rml4dHVyZVNldHVwLAorICAgICAgICAgICAgICAgdGVzdEJhY2tGb3J3YXJkTGlzdE5hdmlnYXRp
b24sCisgICAgICAgICAgICAgICB3ZWJCYWNrRm9yd2FyZExpc3RGaXh0dXJlVGVhcmRvd24pOwor
CisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IDMxZjExMGEuLjU4M2M4MjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTIyLDYgKzIyLDggQEAKIAogI2Rl
ZmluZSBfX1dFQktJVDJfSF9JTlNJREVfXwogCisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNr
Rm9yd2FyZExpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RXJyb3IuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110491</attachid>
            <date>2011-10-11 03:09:10 -0700</date>
            <delta_ts>2011-10-13 03:42:44 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-bf-list3.diff</filename>
            <type>text/plain</type>
            <size>44638</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmM2JmZmJjLi43NTgwOWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQg
QEAKKzIwMTEtMTAtMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYmFjayBmb3J3YXJk
IGxpc3QgZm9yIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtp
dEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9pbml0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0
KToKKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QpOgorICAgICAgICAo
d2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfYmFja19pdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfZm9yd2FyZF9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
bnRoX2l0ZW0pOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgp
OgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QpOgorICAg
ICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCk6
CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCk6Cisg
ICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xp
bWl0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3Qu
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbS5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZp
bmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2luaXQpOgor
ICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fY2xhc3NfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVhdGUpOgorICAgICAgICAod2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3VyaSk6CisgICAgICAgICh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdGl0bGUpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmg6IEFkZGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Vi
a2l0V2ViVmlld0NvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfYmFj
a19mb3J3YXJkX2xpc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0YmFja2ZvcndhcmRs
aXN0LmM6IEFkZGVkLgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAod2ViQmFj
a0ZvcndhcmRMaXN0Rml4dHVyZVNldHVwKToKKyAgICAgICAgKHdlYkJhY2tGb3J3YXJkTGlzdEZp
eHR1cmVUZWFyZG93bik6CisgICAgICAgIChnZXRVUklGb3JQYXRoKToKKyAgICAgICAgKGNoZWNr
SXRlbSk6CisgICAgICAgIChjaGVja0l0ZW1JbmRleCk6CisgICAgICAgIChjaGVja0xpc3QpOgor
ICAgICAgICAobG9hZEZpbmlzaGVkKToKKyAgICAgICAgKHRlc3RCYWNrRm9yd2FyZExpc3ROYXZp
Z2F0aW9uKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDIuaDoKKwogMjAxMS0xMC0xMCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVzZSBhIENhY2hlZEltYWdlQ2xpZW50IGluc3RlYWQgb2YgQ2FjaGVkUmVz
b3VyY2VDbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggZTNmOTg0Ni4uN2UyN2Y5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0KQEAgLTY5LDYgKzY5LDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lU
R1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9I
RUEKIAogbGlid2Via2l0Mmd0a2luY2x1ZGVkaXIgPSAkKGxpYndlYmtpdGd0a2luY2x1ZGVkaXIp
L3dlYmtpdDIKIHdlYmtpdDJndGtfaGVhZGVycyA9IFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RXJyb3IuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmggXApAQCAtNDY3LDYgKzQ2OSwxMSBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRH
VEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NP
VQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL1dLUmV0YWluUHRyLmggXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBcCisJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAorCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAg
XAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0uaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbS5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRFcnJvci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRFcnJvci5jcHAgXApAQCAtMTA4Niw3ICsxMDkzLDggQEAgRElTVENMRUFORklMRVMgKz0g
XAogVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIvdGVzdHdlYmNv
bnRleHQgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3R3ZWJ2aWV3IFwKLQlQcm9n
cmFtcy91bml0dGVzdHMvd2Via2l0Mi90ZXN0bG9hZGluZworCVByb2dyYW1zL3VuaXR0ZXN0cy93
ZWJraXQyL3Rlc3Rsb2FkaW5nIFwKKwlQcm9ncmFtcy91bml0dGVzdHMvd2Via2l0Mi90ZXN0YmFj
a2ZvcndhcmRsaXN0CiAKIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRFU1RfUFJPR1MpCiB3ZWJraXQy
X3Rlc3RzX2NmbGFncyA9IFwKQEAgLTExMjksNiArMTEzNywxMSBAQCBQcm9ncmFtc191bml0dGVz
dHNfd2Via2l0Ml90ZXN0bG9hZGluZ19DRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY2ZsYWdzKQog
UHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfTERBREQgPSAkKHdlYmtpdDJf
dGVzdHNfbGRhZGQpCiBQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0bG9hZGluZ19MREZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX3VuaXR0ZXN0c193ZWJr
aXQyX3Rlc3RiYWNrZm9yd2FyZGxpc3RfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL3Rlc3RiYWNrZm9yd2FyZGxpc3QuYworUHJvZ3JhbXNfdW5pdHRlc3Rz
X3dlYmtpdDJfdGVzdGJhY2tmb3J3YXJkbGlzdF9DRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY2Zs
YWdzKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGJhY2tmb3J3YXJkbGlzdF9MREFE
RCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rl
c3RiYWNrZm9yd2FyZGxpc3RfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCiAj
IFdlYktpdFdlYlByb2Nlc3MKIGxpYmV4ZWNfUFJPR1JBTVMgKz0gXAogCVByb2dyYW1zL1dlYktp
dFdlYlByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjZiMDM3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0wLDAgKzEsMjM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3QuaCIKKworI2luY2x1ZGUgIldlYktp
dEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFja0Zvcndh
cmRMaXN0Lmg+CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKiBA
U2hvcnRfZGVzY3JpcHRpb246IExpc3Qgb2YgdmlzaXRlZCBwYWdlcworICogQFRpdGxlOiBXZWJL
aXRCYWNrRm9yd2FyZExpc3QKKyAqIEBTZWVfYWxzbzogI1dlYktpdFdlYlZpZXcsICNXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtCisgKgorICogV2ViS2l0QmFja0ZvcndhcmRMaXN0IG1haW50YWlu
cyBhIGxpc3Qgb2YgdmlzaXRlZCBwYWdlcyB1c2VkIHRvCisgKiBnbyBiYWNrIGFuZCBmb3J3YXJk
IHRvIHRoZSBtb3N0IHJlY2VudCBwYWdlLiBJdGVtcyBhcmUgaW5zZXJ0ZWQKKyAqIGluIHRoZSBs
aXN0IGluIHRoZSBvcmRlciB0aGV5IGFyZSB2aXNpdGVkLgorICoKKyAqIFdlYktpdEJhY2tGb3J3
YXJkTGlzdCBhbHNvIG1haW50YWlucyB0aGUgbm90aW9uIG9mIHRoZSBjdXJyZW50IGl0ZW0KKyAq
ICh3aGljaCBpcyBhbHdheXMgYXQgaW5kZXggMCksIHRoZSBwcmVjZWRpbmcgaXRlbSAod2hpY2gg
aXMgYXQgaW5kZXggLTEpLAorICogYW5kIHRoZSBmb2xsb3dpbmcgaXRlbSAod2hpY2ggaXMgYXQg
aW5kZXggMSkuCisgKiBNZXRob2RzIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKCkgYW5kIHdlYmtp
dF93ZWJfdmlld19nb19mb3J3YXJkKCkgbW92ZQorICogdGhlIGN1cnJlbnQgaXRlbSBiYWNrd2Fy
ZCBvciBmb3J3YXJkIGJ5IG9uZS4gTWV0aG9kCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFj
a19mb3J3YXJkX2l0ZW0oKSBzZXRzIHRoZSBjdXJyZW50IGl0ZW0gdG8gdGhlCisgKiBzcGVjaWZp
ZWQgaXRlbS4gQWxsIG90aGVyIG1ldGhvZHMgcmV0dXJuaW5nICNXZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtPCEtLSAtLT5zCisgKiBkbyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVu
dCBpdGVtLCB0aGV5IGp1c3QgcmV0dXJuIHRoZSByZXF1ZXN0ZWQKKyAqIGl0ZW0gb3IgaXRlbXMu
CisgKi8KKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlIHsKKyAgICBXS0Jh
Y2tGb3J3YXJkTGlzdFJlZiB3a0xpc3Q7Cit9OworCitHX0RFRklORV9UWVBFKFdlYktpdEJhY2tG
b3J3YXJkTGlzdCwgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0LCBHX1RZUEVfT0JKRUNUKQorCitz
dGF0aWMgdm9pZCB3ZWJraXRCYWNrRm9yd2FyZExpc3RGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUKG9iamVjdCktPnByaXYtPn5XZWJLaXRC
YWNrRm9yd2FyZExpc3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pbml0KFdlYktpdEJhY2tGb3J3YXJkTGlz
dCogbGlzdCkKK3sKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKiBwcml2ID0gR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGxpc3QsIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9M
SVNULCBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKTsKKyAgICBsaXN0LT5wcml2ID0gcHJp
djsKKyAgICBuZXcgKHByaXYpIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUoKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2NsYXNzX2luaXQoV2ViS2l0QmFj
a0ZvcndhcmRMaXN0Q2xhc3MqIGxpc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGxpc3RDbGFzcyk7CisKKyAgICBnT2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0QmFja0ZvcndhcmRMaXN0RmluYWxpemU7CisKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUobGlzdENsYXNzLCBzaXplb2YoV2ViS2l0QmFja0ZvcndhcmRMaXN0
UHJpdmF0ZSkpOworfQorCitzdGF0aWMgR0xpc3QqIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0
ZUxpc3QoV0tBcnJheVJlZiB3a0xpc3QpCit7CisgICAgaWYgKCF3a0xpc3QpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgR0xpc3QqIGxpc3QgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgV0tBcnJheUdldFNpemUod2tMaXN0KTsgKytpKSB7CisgICAgICAgIFdLQmFja0ZvcndhcmRM
aXN0SXRlbVJlZiB3a0l0ZW0gPSBzdGF0aWNfY2FzdDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWY+
KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a0xpc3QsIGkpKTsKKyAgICAgICAgV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbSogaXRlbSA9IHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNyZWF0
ZSh3a0l0ZW0pOworICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBsaXN0ID0gZ19saXN0X3ByZXBlbmQobGlzdCwgaXRlbSk7CisgICAgfQorCisgICAg
cmV0dXJuIGxpc3Q7Cit9CisKK1dlYktpdEJhY2tGb3J3YXJkTGlzdCogd2Via2l0QmFja0Zvcndh
cmRMaXN0Q3JlYXRlKFdLQmFja0ZvcndhcmRMaXN0UmVmIHdrTGlzdCkKK3sKKyAgICBXZWJLaXRC
YWNrRm9yd2FyZExpc3QqIGxpc3QgPSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1QoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNULCBOVUxMKSk7CisgICAgbGlzdC0+cHJp
di0+d2tMaXN0ID0gd2tMaXN0OworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKKy8qKgorICogd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW06CisgKiBAYmFja19mb3J3YXJk
X2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMgdGhlIGN1cnJl
bnQgaXRlbSBpbiBAYmFja19mb3J3YXJkX2xpc3QuCisgKgorICogUmV0dXJuIHZhbHVlOiAodHJh
bnNmZXIgbm9uZSk6IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtLAorICogICAgb3IgJU5VTEwgaWYg
QGJhY2tfZm9yd2FyZF9saXN0IGlzIGVtcHR5LgorICovCitXZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShXZWJLaXRCYWNr
Rm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAg
ICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUdldE9yQ3JlYXRlKFdLQmFja0Zvcndh
cmRMaXN0R2V0Q3VycmVudEl0ZW0oYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QpKTsKK30K
KworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbToKKyAqIEBi
YWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJu
cyB0aGUgaXRlbSB0aGF0IHByZWNlZGVzIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0KKyAqICAg
IHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtLCBvciAlTlVMTC4KKyAqLworV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbSogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0oV2Vi
S2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDAp
OworCisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNyZWF0ZShXS0Jh
Y2tGb3J3YXJkTGlzdEdldEJhY2tJdGVtKGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0KSk7
Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW06
CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICoKKyAq
IFJldHVybnMgdGhlIGl0ZW0gdGhhdCBzdWNjZWVkcyB0aGUgY3VycmVudCBpdGVtLgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
CisgKiAgICBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgaXRlbSwgb3IgJU5VTEwKKyAqLworV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2l0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJk
TGlzdCksIDApOworCisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNy
ZWF0ZShXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRJdGVtKGJhY2tGb3J3YXJkTGlzdC0+cHJp
di0+d2tMaXN0KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9u
dGhfaXRlbToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0
CisgKiBAaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUgaXRlbQorICoKKyAqIFJldHVybnMgdGhlIGl0
ZW0gYXQgYSBnaXZlbiBpbmRleCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtLgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
CisgKiAgICBsb2NhdGVkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1
cnJlbnQgaXRlbQorICovCitXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0Zvcndh
cmRMaXN0LCBnaW50IGluZGV4KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19CQUNLX0ZPUldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIHJldHVybiB3
ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVhdGUoV0tCYWNrRm9yd2FyZExpc3RHZXRJ
dGVtQXRJbmRleChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCwgaW5kZXgpKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aDoKKyAqIEBiYWNrX2Zv
cndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJuczogdGhl
IGxlbmd0aCBvZiBAYmFja19mb3J3YXJkX2xpc3QuCisgKi8KK2d1aW50IHdlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRM
aXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZPUldBUkRf
TElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdFBy
aXZhdGUqIHByaXYgPSBiYWNrRm9yd2FyZExpc3QtPnByaXY7CisgICAgZ3VpbnQgY3VycmVudEl0
ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShiYWNrRm9yd2Fy
ZExpc3QpID8gMSA6IDA7CisgICAgcmV0dXJuIFdLQmFja0ZvcndhcmRMaXN0R2V0QmFja0xpc3RD
b3VudChwcml2LT53a0xpc3QpICsgV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkTGlzdENvdW50
KHByaXYtPndrTGlzdCkgKyBjdXJyZW50SXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2Vi
S2l0QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXQu
QmFja0ZvcndhcmRMaXN0SXRlbSkgKHRyYW5zZmVyIGNvbnRhaW5lcik6IGEgI0dMaXN0IG9mCisg
KiAgICBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbQorICovCitHTGlzdCogd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBi
YWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JB
Q0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOworCisgICAgZ3VpbnQgbGltaXQg
PSBXS0JhY2tGb3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQoYmFja0ZvcndhcmRMaXN0LT5wcml2
LT53a0xpc3QpOworICAgIHJldHVybiB3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGVMaXN0KFdL
QmFja0ZvcndhcmRMaXN0Q29weUJhY2tMaXN0V2l0aExpbWl0KGJhY2tGb3J3YXJkTGlzdC0+cHJp
di0+d2tMaXN0LCBsaW1pdCkpOworfQorCisvKioKKyAqIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19saXN0X3dpdGhfbGltaXQ6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dl
YktpdEJhY2tGb3J3YXJkTGlzdAorICogQGxpbWl0OiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJl
dHJpZXZlCisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXQuQmFja0ZvcndhcmRM
aXN0SXRlbSkgKHRyYW5zZmVyIGNvbnRhaW5lcik6IGEgI0dMaXN0IG9mCisgKiAgICBpdGVtcyBw
cmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbSwgbGltaXRlZCBieSBAbGltaXQKKyAqLworR0xpc3Qq
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X3dpdGhfbGltaXQoV2ViS2l0
QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QsIGd1aW50IGxpbWl0KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVChiYWNrRm9yd2Fy
ZExpc3QpLCAwKTsKKworICAgIHJldHVybiB3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGVMaXN0
KFdLQmFja0ZvcndhcmRMaXN0Q29weUJhY2tMaXN0V2l0aExpbWl0KGJhY2tGb3J3YXJkTGlzdC0+
cHJpdi0+d2tMaXN0LCBsaW1pdCkpOworfQorCisvKioKKyAqIHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfZm9yd2FyZF9saXN0OgorICogQGJhY2tfZm9yd2FyZF9saXN0OiBhICNXZWJLaXRC
YWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdC5CYWNr
Rm9yd2FyZExpc3RJdGVtKSAodHJhbnNmZXIgY29udGFpbmVyKTogYSAjR0xpc3Qgb2YKKyAqICAg
IGl0ZW1zIHN1Y2NlZWRpbmcgdGhlIGN1cnJlbnQgaXRlbQorICovCitHTGlzdCogd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBi
YWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JB
Q0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOworCisgICAgZ3VpbnQgbGltaXQg
PSBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQoYmFja0ZvcndhcmRMaXN0LT5w
cml2LT53a0xpc3QpOworICAgIHJldHVybiB3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGVMaXN0
KFdLQmFja0ZvcndhcmRMaXN0Q29weUZvcndhcmRMaXN0V2l0aExpbWl0KGJhY2tGb3J3YXJkTGlz
dC0+cHJpdi0+d2tMaXN0LCBsaW1pdCkpOworfQorCisvKioKKyAqIHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQ6CisgKiBAYmFja19mb3J3YXJkX2xp
c3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICogQGxpbWl0OiB0aGUgbnVtYmVyIG9mIGl0
ZW1zIHRvIHJldHJpZXZlCisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXQuQmFj
a0ZvcndhcmRMaXN0SXRlbSkgKHRyYW5zZmVyIGNvbnRhaW5lcik6IGEgI0dMaXN0IG9mCisgKiAg
ICBpdGVtcyBzdWNjZWVkaW5nIHRoZSBjdXJyZW50IGl0ZW0sIGxpbWl0ZWQgYnkgQGxpbWl0Cisg
Ki8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRo
X2xpbWl0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0LCBndWludCBsaW1p
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJ
U1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRM
aXN0Q3JlYXRlTGlzdChXS0JhY2tGb3J3YXJkTGlzdENvcHlGb3J3YXJkTGlzdFdpdGhMaW1pdChi
YWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCwgbGltaXQpKTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkYjA4OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJk
TGlzdC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJL
SVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdEJhY2tGb3J3YXJk
TGlzdF9oCisjZGVmaW5lIFdlYktpdEJhY2tGb3J3YXJkTGlzdF9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5o
PgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1QgICAgICAgICAgICAod2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZPUldB
UkRfTElTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0ZvcndhcmRMaXN0KSkK
KyNkZWZpbmUgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNU
LCBXZWJLaXRCYWNrRm9yd2FyZExpc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19CQUNLX0ZP
UldBUkRfTElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCkpCisjZGVmaW5lIFdFQktJVF9JU19CQUNL
X0ZPUldBUkRfTElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCkpCisjZGVmaW5lIFdFQktJVF9CQUNL
X0ZPUldBUkRfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0ZvcndhcmRM
aXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0ICAgICAg
ICBXZWJLaXRCYWNrRm9yd2FyZExpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0Zvcndh
cmRMaXN0Q2xhc3MgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZh
dGU7CisKK3N0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0IHsKKyAgICBHT2JqZWN0IHBhcmVu
dDsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1
Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF90eXBlICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbSAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJl
bnRfaXRlbSAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9yd2FyZF9s
aXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICoKK3dlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtICAgICAgICAgICAgICAgKFdlYktpdEJhY2tG
b3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIFdlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0gKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0
ZW0gICAgICAgICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7
CisKK1dFQktJVF9BUEkgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSAqCit3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtICAgICAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2Fy
ZExpc3QgKmJhY2tfZm9yd2FyZF9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgICAgICBpbmRleCk7CitX
RUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCAgICAg
ICAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9yd2FyZF9saXN0KTsK
KworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tf
bGlzdCAgICAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9yd2FyZF9s
aXN0KTsKKworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfbGlzdF93aXRoX2xpbWl0ICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9y
d2FyZF9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICBsaW1pdCk7CisKK1dFQktJVF9BUEkgR0xp
c3QgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QgICAgICAgICAg
ICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9B
UEkgR0xpc3QgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0
aF9saW1pdCAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAg
ICAgICAgICAgICAgICAgbGltaXQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQw
Nzk1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmgiCisKKyNpbmNsdWRlICJXZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0JhY2tGb3J3YXJkTGlz
dEl0ZW0uaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdHJ1Y3Qg
X1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlIHsKKyAgICBXS1JldGFpblB0cjxXS0Jh
Y2tGb3J3YXJkTGlzdEl0ZW1SZWY+IHdrTGlzdEl0ZW07CisgICAgQ1N0cmluZyB1cmk7CisgICAg
Q1N0cmluZyB0aXRsZTsKKyAgICBDU3RyaW5nIG9yaWdpbmFsVVJJOworfTsKKworR19ERUZJTkVf
VFlQRShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbSwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0QmFja0ZvcndhcmRMaXN0
SXRlbUZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRfQkFDS19GT1JXQVJE
X0xJU1RfSVRFTShvYmplY3QpLT5wcml2LT5+V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZh
dGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV9pbml0KFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxp
c3RJdGVtKQoreworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKiBwcml2ID0g
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGxpc3RJdGVtLCBXRUJLSVRfVFlQRV9CQUNLX0ZP
UldBUkRfTElTVF9JVEVNLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSk7CisgICAg
bGlzdEl0ZW0tPnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbVByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2l0ZW1fY2xhc3NfaW5pdChXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3MqIGxpc3RJ
dGVtQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhsaXN0SXRlbUNsYXNzKTsKKworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJr
aXRCYWNrRm9yd2FyZExpc3RJdGVtRmluYWxpemU7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUobGlzdEl0ZW1DbGFzcywgc2l6ZW9mKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2
YXRlKSk7Cit9CisKK3R5cGVkZWYgSGFzaE1hcDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIEdS
ZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbT4gPiBIaXN0b3J5SXRlbXNNYXA7CisKK1dl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNy
ZWF0ZShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tMaXN0SXRlbSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhpc3RvcnlJdGVtc01hcCwgaXRlbXNNYXAsICgpKTsKKworICAgIGlmICgh
d2tMaXN0SXRlbSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHUmVmUHRyPFdlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0+IGxpc3RJdGVtID0gaXRlbXNNYXAuZ2V0KHdrTGlzdEl0ZW0pOworICAg
IGlmIChsaXN0SXRlbSkKKyAgICAgICAgcmV0dXJuIGxpc3RJdGVtLmdldCgpOworCisgICAgbGlz
dEl0ZW0gPSBhZG9wdEdSZWYoV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0sIE5VTEwpKSk7CisgICAgbGlz
dEl0ZW0tPnByaXYtPndrTGlzdEl0ZW0gPSB3a0xpc3RJdGVtOworICAgIGl0ZW1zTWFwLnNldCh3
a0xpc3RJdGVtLCBsaXN0SXRlbSk7CisKKyAgICByZXR1cm4gbGlzdEl0ZW0uZ2V0KCk7Cit9CisK
Ky8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3VyaToKKyAqIEBiYWNr
X2ZvcndhcmRfbGlzdF9pdGVtOiBhICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKgorICog
UmV0dXJuczogdGhlIFVSSSBvZiBAYmFja19mb3J3YXJkX2xpc3RfaXRlbQorICovCitjb25zdCBn
Y2hhciogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3VyaShXZWJLaXRCYWNrRm9y
d2FyZExpc3RJdGVtKiBsaXN0SXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShsaXN0SXRlbSksIDApOworCisgICAgV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUqIHByaXYgPSBsaXN0SXRlbS0+cHJpdjsKKyAgICBX
S1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkkoQWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RJdGVt
Q29weVVSTChwcml2LT53a0xpc3RJdGVtLmdldCgpKSk7CisgICAgaWYgKHRvSW1wbCh3a1VSSS5n
ZXQoKSktPnN0cmluZygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25z
dCBDU3RyaW5nJiB1cmkgPSB0b0ltcGwod2tVUkkuZ2V0KCkpLT5zdHJpbmcoKS51dGY4KCk7Cisg
ICAgaWYgKHByaXYtPnVyaSAhPSB1cmkpCisgICAgICAgIHByaXYtPnVyaSA9IHVyaTsKKworICAg
IHJldHVybiBwcml2LT51cmkuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtX2dldF90aXRsZToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdF9pdGVtOiBhICNX
ZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKgorICogUmV0dXJuczogdGhlIHBhZ2UgdGl0bGUg
b2YgQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW0KKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX2dldF90aXRsZShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBs
aXN0SXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JX
QVJEX0xJU1RfSVRFTShsaXN0SXRlbSksIDApOworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbVByaXZhdGUqIHByaXYgPSBsaXN0SXRlbS0+cHJpdjsKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gd2tUaXRsZShBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VGl0bGUo
cHJpdi0+d2tMaXN0SXRlbS5nZXQoKSkpOworICAgIGlmICh0b0ltcGwod2tUaXRsZS5nZXQoKSkt
PnN0cmluZygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBDU3Ry
aW5nJiB0aXRsZSA9IHRvSW1wbCh3a1RpdGxlLmdldCgpKS0+c3RyaW5nKCkudXRmOCgpOworICAg
IGlmIChwcml2LT50aXRsZSAhPSB0aXRsZSkKKyAgICAgICAgcHJpdi0+dGl0bGUgPSB0aXRsZTsK
KworICAgIHJldHVybiBwcml2LT50aXRsZS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaToKKyAqIEBiYWNrX2ZvcndhcmRf
bGlzdF9pdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJldHVybnM6IHRoZSBv
cmlnaW5hbCBVUkkgb2YgQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW0KKyAqLworY29uc3QgZ2NoYXIq
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbSogbGlzdEl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0obGlzdEl0ZW0pLCAwKTsKKworICAgIFdl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKiBwcml2ID0gbGlzdEl0ZW0tPnByaXY7Cisg
ICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrT3JpZ2luYWxVUkkoQWRvcHRXSywgV0tCYWNrRm9y
d2FyZExpc3RJdGVtQ29weU9yaWdpbmFsVVJMKHByaXYtPndrTGlzdEl0ZW0uZ2V0KCkpKTsKKyAg
ICBpZiAodG9JbXBsKHdrT3JpZ2luYWxVUkkuZ2V0KCkpLT5zdHJpbmcoKS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgQ1N0cmluZyYgb3JpZ2luYWxVUkkgPSB0b0lt
cGwod2tPcmlnaW5hbFVSSS5nZXQoKSktPnN0cmluZygpLnV0ZjgoKTsKKyAgICBpZiAocHJpdi0+
b3JpZ2luYWxVUkkgIT0gb3JpZ2luYWxVUkkpCisgICAgICAgIHByaXYtPm9yaWdpbmFsVVJJID0g
b3JpZ2luYWxVUkk7CisKKyAgICByZXR1cm4gcHJpdi0+b3JpZ2luYWxVUkkuZGF0YSgpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmU4M2Y4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkg
PHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisK
KyNpZm5kZWYgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbV9oCisjZGVmaW5lIFdlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW1faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0gICAgICAgICAgICAod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0JBQ0tfRk9SV0FSRF9M
SVNUX0lURU0ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSwgV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbSkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZPUldBUkRfTElTVF9JVEVNX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0JB
Q0tfRk9SV0FSRF9MSVNUX0lURU0sIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1DbGFzcykpCisj
ZGVmaW5lIFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVF9JVEVNKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9M
SVNUX0lURU0pKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTV9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9C
QUNLX0ZPUldBUkRfTElTVF9JVEVNKSkKKyNkZWZpbmUgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNU
X0lURU1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0g
ICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW07Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbUNsYXNzICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbUNsYXNz
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlIFdlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0geworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW1DbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF90eXBlICAgICAg
ICAgKHZvaWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtX2dldF91cmkgICAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0q
IGxpc3RfaXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlICAgICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRl
bSogbGlzdF9pdGVtKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpIChXZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtKiBsaXN0X2l0ZW0pOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJk
TGlzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzVjM2Qy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0
ZV9oCisKKyNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRC
YWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KKworV2ViS2l0
QmFja0ZvcndhcmRMaXN0KiB3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGUoV0tCYWNrRm9yd2Fy
ZExpc3RSZWYpOworV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0QmFja0ZvcndhcmRM
aXN0SXRlbUdldE9yQ3JlYXRlKFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZik7CisKKyNlbmRpZiAv
LyBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggYzJlOTgwNC4uNzQzYTgy
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJXZWJLaXRXZWJWaWV3LmgiCiAKKyNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJLaXRXZWJMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUuaCIKQEAgLTQ1LDYgKzQ2LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAg
ICAgV2ViS2l0V2ViQ29udGV4dCogY29udGV4dDsKIAogICAgIEdSZWZQdHI8V2ViS2l0V2ViTG9h
ZGVyQ2xpZW50PiBsb2FkZXJDbGllbnQ7CisgICAgR1JlZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExp
c3Q+IGJhY2tGb3J3YXJkTGlzdDsKIH07CiAKIEdfREVGSU5FX1RZUEUoV2ViS2l0V2ViVmlldywg
d2Via2l0X3dlYl92aWV3LCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFKQpAQCAtNTcsNiArNTks
OSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0
KQogICAgIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFT
RSh3ZWJWaWV3KSwgd2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4dChwcml2LT5jb250ZXh0KSwg
MCk7CiAKICAgICBwcml2LT5sb2FkZXJDbGllbnQgPSBhZG9wdEdSZWYoV0VCS0lUX1dFQl9MT0FE
RVJfQ0xJRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfTE9BREVSX0NMSUVOVCwgIndl
Yi12aWV3Iiwgd2ViVmlldywgTlVMTCkpKTsKKworICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdl
YmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSk7Cisg
ICAgcHJpdi0+YmFja0ZvcndhcmRMaXN0ID0gYWRvcHRHUmVmKHdlYmtpdEJhY2tGb3J3YXJkTGlz
dENyZWF0ZShXS1BhZ2VHZXRCYWNrRm9yd2FyZExpc3QodG9BUEkocGFnZSkpKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQpAQCAt
MzM4LDMgKzM0MywxOSBAQCBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQo
V2ViS2l0V2ViVmlldyogd2ViVmlldykKIAogICAgIHJldHVybiBXS1BhZ2VDYW5Hb0ZvcndhcmQo
dG9BUEkod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZp
ZXcpKSkpOwogfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xp
c3Q6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBPYnRhaW5zIHRoZSAj
V2ViS2l0QmFja0ZvcndhcmRMaXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gI1dlYktpdFdl
YlZpZXcuIFRoZQorICogI1dlYktpdEJhY2tGb3J3YXJkTGlzdCBpcyBvd25lZCBieSB0aGUgI1dl
YktpdFdlYlZpZXcuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktp
dEJhY2tGb3J3YXJkTGlzdAorICovCitXZWJLaXRCYWNrRm9yd2FyZExpc3QqIHdlYmtpdF93ZWJf
dmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOwor
CisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPmJhY2tGb3J3YXJkTGlzdC5nZXQoKTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRl
eCA1OTk3YTVhLi44YjAwNDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIFdlYktpdFdl
YlZpZXdfaAogI2RlZmluZSBXZWJLaXRXZWJWaWV3X2gKIAorI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRXZWJMb2FkZXJDbGllbnQuaD4KQEAgLTY3LDUxICs2OCw1NCBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdDbGFzcyB7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUg
ICAgICAgICAgICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBHdGtXaWRnZXQgKgotd2Via2l0X3dl
Yl92aWV3X25ldyAgICAgICAgICAgICAgICAgKHZvaWQpOword2Via2l0X3dlYl92aWV3X25ldyAg
ICAgICAgICAgICAgICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgR3RrV2lkZ2V0ICoKLXdlYmtp
dF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgKmNv
bnRleHQpOword2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQgICAgICAoV2ViS2l0V2Vi
Q29udGV4dCAgICAgICpjb250ZXh0KTsKIAogV0VCS0lUX0FQSSBXZWJLaXRXZWJDb250ZXh0ICoK
LXdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgKndlYl92aWV3KTsKK3dlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCAgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIFdlYktpdFdlYkxv
YWRlckNsaWVudCAqCi13ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9j
bGllbnQgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQ
SSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfc2V0X2xvYWRlcl9jbGllbnQgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmxvYWRlcl9jbGllbnQpOword2Via2l0X3dlYl92aWV3
X3NldF9sb2FkZXJfY2xpZW50ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYkxvYWRlckNs
aWVudCAqbG9hZGVyX2NsaWVudCk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAg
ICp1cmkpOword2Via2l0X3dlYl92aWV3X2xvYWRfdXJpICAgICAgICAgICAgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqdXJpKTsKIAogV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfd2ViX3ZpZXdfbG9hZF9hbHRlcm5hdGVfaHRtbCAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciAgICAgICAgICAgKmNvbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICpiYXNlX3VyaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKnVucmVhY2hhYmxlX3Vy
aSk7Ci0KK3dlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1sICAgKFdlYktpdFdlYlZp
ZXcgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKmNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKmJhc2VfdXJpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAg
ICp1bnJlYWNoYWJsZV91cmkpOwogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfcmVs
b2FkICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJr
aXRfd2ViX3ZpZXdfcmVsb2FkICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
KndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfcmVsb2FkX2J5
cGFzc19jYWNoZSAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2Vi
X3ZpZXdfcmVsb2FkX2J5cGFzc19jYWNoZSAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92
aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdf
Z29fYmFjayAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsK
KwogCiBXRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2dvX2JhY2sgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsK
IAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZCAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ29fZm9y
d2FyZCAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKKworV0VC
S0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3QgKgord2Via2l0X3dlYl92aWV3X2dldF9iYWNr
X2ZvcndhcmRfbGlzdCAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CiAKIFdFQktJ
VF9BUEkgZ2Jvb2xlYW4KLXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKK3dlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9y
d2FyZCAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOwogCiBHX0VORF9E
RUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy90ZXN0YmFja2ZvcndhcmRsaXN0LmMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy90ZXN0YmFja2ZvcndhcmRsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uM2E4ZDhiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3RiYWNrZm9yd2FyZGxpc3QuYwpAQCAtMCwwICsxLDIzNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCit0eXBlZGVmIGVudW0geworICAgIEJBQ0tXQVJE
LAorICAgIEZPUldBUkQKK30gTGlzdFR5cGU7CisKK1NvdXBVUkkgKmJhc2VVUkk7CisKKy8qIEZv
ciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291
cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFz
aFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQsIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgY2hhciAqYm9keTsKKworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhP
RF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRV
U19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBib2R5ID0gZ19z
dHJkdXBfcHJpbnRmKCI8aHRtbD48dGl0bGU+JXM8L3RpdGxlPjxib2R5PiVzPC9ib2R5PjwvaHRt
bD4iLCBwYXRoICsgMSwgcGF0aCArIDEpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
c2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGJvZHksIHN0cmxlbihib2R5KSk7
CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwor
fQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBH
TWFpbkxvb3AgKmxvb3A7Cit9IEJhY2tGb3J3YXJkTGlzdEZpeHR1cmU7CisKK3N0YXRpYyB2b2lk
IHdlYkJhY2tGb3J3YXJkTGlzdEZpeHR1cmVTZXR1cChCYWNrRm9yd2FyZExpc3RGaXh0dXJlICpm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGZpeHR1cmUtPmxvb3Ag
PSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4
dHVyZS0+d2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYkJhY2tGb3J3YXJkTGlzdEZpeHR1
cmVUZWFyZG93bihCYWNrRm9yd2FyZExpc3RGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19t
YWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRVUklG
b3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgU291cFVSSSAqdXJpOworICAgIGNoYXIg
KnVyaVN0cmluZzsKKworICAgIHVyaSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2UoYmFzZVVSSSwg
cGF0aCk7CisgICAgdXJpU3RyaW5nID0gc291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpOwor
ICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKKworICAgIHJldHVybiB1cmlTdHJpbmc7Cit9CisKK3N0
YXRpYyB2b2lkIGNoZWNrSXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICppdGVtLCBjb25z
dCBnY2hhciAqdGl0bGUsIGNvbnN0IGdjaGFyICp1cmksIGNvbnN0IGdjaGFyICpvcmlnaW5hbFVS
SSkKK3sKKyAgICBnX2Fzc2VydChpdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3VyaShpdGVtKSwgPT0sIHVyaSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF90aXRsZShpdGVtKSwg
PT0gLCB0aXRsZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSksID09LCBvcmlnaW5hbFVSSSk7Cit9CisKK3N0
YXRpYyB2b2lkIGNoZWNrSXRlbUluZGV4KFdlYktpdEJhY2tGb3J3YXJkTGlzdCAqbGlzdCkKK3sK
KyAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3Qs
IC0xKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbShsaXN0KSk7Cisg
ICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAw
KSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KSk7Cisg
ICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAx
KSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShsaXN0KSk7Cit9
CisKK3N0YXRpYyB2b2lkIGNoZWNrTGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmxpc3QsIExp
c3RUeXBlIHR5cGUsIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0gKippdGVtcywgZ3VpbnQgbkl0
ZW1zKQoreworICAgIEdMaXN0ICpsaXN0SXRlbTsKKyAgICBndWludCBpOworICAgIEdMaXN0ICps
aXN0SXRlbXMgPSB0eXBlID09IEJBQ0tXQVJEID8gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2xpc3QobGlzdCkgOgorICAgICAgICB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2ZvcndhcmRfbGlzdChsaXN0KTsKKyAgICBnX2Fzc2VydChsaXN0SXRlbXMpOworCisgICAgaSA9
IDA7CisgICAgZm9yIChsaXN0SXRlbSA9IGxpc3RJdGVtczsgbGlzdEl0ZW07IGxpc3RJdGVtID0g
Z19saXN0X25leHQobGlzdEl0ZW0pLCBpKyspIHsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChp
LCA8LCBuSXRlbXMpOworICAgICAgICBnX2Fzc2VydChsaXN0SXRlbS0+ZGF0YSA9PSBpdGVtc1tp
XSk7CisgICAgfQorICAgIGdfbGlzdF9mcmVlKGxpc3RJdGVtcyk7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBsb2FkRmluaXNoZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIEJhY2tGb3J3
YXJkTGlzdEZpeHR1cmUgKmZpeHR1cmUpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJl
LT5sb29wKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyogTmF2aWdhdGlvbiAqLworc3RhdGlj
IHZvaWQgdGVzdEJhY2tGb3J3YXJkTGlzdE5hdmlnYXRpb24oQmFja0ZvcndhcmRMaXN0Rml4dHVy
ZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGNoYXIgKnVyaVBhZ2UxLCAq
dXJpUGFnZTI7CisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQoZml4dHVyZS0+d2ViVmlldyk7CisgICAgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0ICpsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlz
dChmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICppdGVt
UGFnZTEsICppdGVtUGFnZTI7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSAqaXRlbXNb
MV07CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKGZpeHR1cmUt
PndlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJk
KGZpeHR1cmUtPndlYlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0obGlzdCkpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbShsaXN0KSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGxpc3Qp
KTsKKyAgICBjaGVja0l0ZW1JbmRleChsaXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QobGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdChsaXN0KSk7CisKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRGaW5pc2hl
ZCksIGZpeHR1cmUpOworCisgICAgdXJpUGFnZTEgPSBnZXRVUklGb3JQYXRoKCIvUGFnZTEiKTsK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpUGFnZTEp
OworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKKworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2soZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQoZml4dHVyZS0+d2ViVmlldykpOwor
CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0
aChsaXN0KSwgPT0sIDEpOworICAgIGl0ZW1QYWdlMSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKGxpc3QpOworICAgIGNoZWNrSXRlbShpdGVtUGFnZTEsICJQYWdl
MSIsIHVyaVBhZ2UxLCB1cmlQYWdlMSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfYmFja19pdGVtKGxpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOworICAgIGNoZWNrSXRlbUluZGV4
KGxpc3QpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tf
bGlzdChsaXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Zm9yd2FyZF9saXN0KGxpc3QpKTsKKworICAgIHVyaVBhZ2UyID0gZ2V0VVJJRm9yUGF0aCgiL1Bh
Z2UyIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVy
aVBhZ2UyKTsKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2soZml4dHVyZS0+d2ViVmlldykpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQoZml4dHVyZS0+d2ViVmll
dykpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2xlbmd0aChsaXN0KSwgPT0sIDIpOworICAgIGl0ZW1QYWdlMiA9IHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpOworICAgIGNoZWNrSXRlbShpdGVtUGFnZTIs
ICJQYWdlMiIsIHVyaVBhZ2UyLCB1cmlQYWdlMik7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlzdCkgPT0gaXRlbVBhZ2UxKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOwor
ICAgIGNoZWNrSXRlbUluZGV4KGxpc3QpOworICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UxOworICAg
IGNoZWNrTGlzdChsaXN0LCBCQUNLV0FSRCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdChsaXN0KSk7CisKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfZ29fYmFjayhmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBnX21haW5fbG9vcF9y
dW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19iYWNrKGZpeHR1cmUtPndlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2dvX2ZvcndhcmQoZml4dHVyZS0+d2ViVmlldykpOworCisgICAgZ19hc3NlcnRfY21wdWlu
dCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDIpOworICAg
IGdfYXNzZXJ0KGl0ZW1QYWdlMSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJl
bnRfaXRlbShsaXN0KSk7CisgICAgY2hlY2tJdGVtKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfY3VycmVudF9pdGVtKGxpc3QpLCAiUGFnZTEiLCB1cmlQYWdlMSwgdXJpUGFnZTEpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbShsaXN0KSk7
CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0o
bGlzdCkgPT0gaXRlbVBhZ2UyKTsKKyAgICBjaGVja0l0ZW1JbmRleChsaXN0KTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QobGlzdCkpOworICAg
IGl0ZW1zWzBdID0gaXRlbVBhZ2UyOworICAgIGNoZWNrTGlzdChsaXN0LCBGT1JXQVJELCBpdGVt
cywgMSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChmaXh0dXJlLT53ZWJWaWV3
KTsKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2soZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQoZml4dHVyZS0+d2ViVmlldykpOwor
CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0
aChsaXN0KSwgPT0sIDIpOworICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMiA9PSB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KSk7CisgICAgY2hlY2tJdGVtKHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpLCAiUGFnZTIiLCB1cmlQ
YWdlMiwgdXJpUGFnZTIpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfYmFja19pdGVtKGxpc3QpID09IGl0ZW1QYWdlMSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGxpc3QpKTsKKyAgICBjaGVja0l0ZW1J
bmRleChsaXN0KTsKKyAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKKyAgICBjaGVja0xpc3QobGlz
dCwgQkFDS1dBUkQsIGl0ZW1zLCAxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2xpc3QobGlzdCkpOworCisgICAgZ19mcmVlKHVyaVBhZ2UxKTsK
KyAgICBnX2ZyZWUodXJpUGFnZTIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy
Z3YpCit7CisgICAgU291cFNlcnZlciAqc2VydmVyOworCisgICAgZ190aHJlYWRfaW5pdChOVUxM
KTsKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3NldGVu
digiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKKworICAgIHNl
cnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICBz
b3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNvdXBfc2VydmVyX2FkZF9oYW5k
bGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOworCisgICAgYmFz
ZVVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9z
ZXRfcG9ydChiYXNlVVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKKworICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdDIvYmFja2ZvcndhcmRsaXN0L25hdmlnYXRpb24iLAorICAgICAgICAgICAgICAg
QmFja0ZvcndhcmRMaXN0Rml4dHVyZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYkJhY2tGb3J3
YXJkTGlzdEZpeHR1cmVTZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RCYWNrRm9yd2FyZExpc3RO
YXZpZ2F0aW9uLAorICAgICAgICAgICAgICAgd2ViQmFja0ZvcndhcmRMaXN0Rml4dHVyZVRlYXJk
b3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCAzMWYxMTBhLi41ODNjODI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0yMiw2ICsyMiw4IEBA
CiAKICNkZWZpbmUgX19XRUJLSVQyX0hfSU5TSURFX18KIAorI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0QmFja0ZvcndhcmRMaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVy
cm9yLmg+Cg==
</data>
<flag name="review"
          id="108010"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110819</attachid>
            <date>2011-10-13 03:42:44 -0700</date>
            <delta_ts>2011-10-19 04:05:40 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-bf-list-4.diff</filename>
            <type>text/plain</type>
            <size>43732</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3YmMzYzQwLi5mMGM1MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTgg
QEAKKzIwMTEtMTAtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYmFjayBmb3J3YXJk
IGxpc3QgZm9yIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21w
aWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplKToK
KyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pbml0KToKKyAgICAgICAgKHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3
YXJkTGlzdENyZWF0ZUxpc3QpOgorICAgICAgICAod2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRl
KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKToK
KyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKToKKyAgICAg
ICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKToKKyAgICAgICAg
KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0pOgorICAgICAgICAod2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9iYWNrX2xpc3QpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5jcHA6IEFkZGVkLgorICAgICAg
ICAod2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9pdGVtX2luaXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW1fY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRCYWNrRm9yd2FyZExpc3RJ
dGVtR2V0T3JDcmVhdGUpOiBIZWxwZXIgZnVuY3Rpb24gdGhhdAorICAgICAgICBjcmVhdGVzIGEg
bmV3IFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0gZm9yIHRoZSBnaXZlbgorICAgICAgICBXZWJC
YWNrRm9yd2FyZExpc3RJdGVtIG9yIHJldHVybnMgaXQgZnJvbSB0aGUgY2FjaGUgaWYgaXQncwor
ICAgICAgICBhbHJlYWR5IGNhY2hlZC4KKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX2dldF91cmkpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1f
Z2V0X3RpdGxlKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9v
cmlnaW5hbF91cmkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3
YXJkTGlzdEl0ZW0uaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3Rl
ZCk6IENyZWF0ZSB0aGUgYmFjayBmb3J3YXJkIGxpc3Qgb2YgdGhlCisgICAgICAgIHZpZXcuCisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KTogUmV0dXJuIHRo
ZSBiYWNrIGZvcndhcmQKKyAgICAgICAgbGlzdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05V
bWFrZWZpbGUuYW06IEFkZCBuZXcgdGVzdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChzZXJ2ZXJDYWxs
YmFjayk6CisgICAgICAgIChjaGVja0l0ZW0pOgorICAgICAgICAoY2hlY2tJdGVtSW5kZXgpOgor
ICAgICAgICAoY2hlY2tMaXN0KToKKyAgICAgICAgKHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0
aW9uKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBJbmNsdWRlIFdlYktpdEJhY2tGb3J3YXJk
TGlzdC5oIGFuZAorICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmgKKwogMjAxMS0x
MC0xMiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFBh
c3MgUGFyc2VkIEFjY2VwdCBBdHRyaWJ1dGUgTUlNRSBUeXBlcyB0byBXZWJLaXQgQ2xpZW50cwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAzNjA0NzJjLi43NGQ4YTRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5hbQpAQCAtNjksNiArNjksOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9S
X1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0hFQQogCiBsaWJ3ZWJr
aXQyZ3RraW5jbHVkZWRpciA9ICQobGlid2Via2l0Z3RraW5jbHVkZWRpcikvd2Via2l0Mgogd2Vi
a2l0Mmd0a19oZWFkZXJzID0gXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QmFja0ZvcndhcmRMaXN0LmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdERlZmluZXMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJv
ci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBc
CkBAIC00NjcsNiArNDY5LDExIEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1Jf
VkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvV0tSZXRhaW5QdHIuaCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBcCisJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmNwcCBcCisJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zvcndh
cmRMaXN0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREZWZpbmVzLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVy
cm9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRC
YWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0QmFja0ZvcndhcmRMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zYTBkYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmNwcApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0LmgiCisKKyNpbmNsdWRlICJXZWJLaXRCYWNrRm9y
d2FyZExpc3RQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0JhY2tGb3J3YXJkTGlzdC5o
PgorCisvKioKKyAqIFNFQ1RJT046IFdlYktpdEJhY2tGb3J3YXJkTGlzdAorICogQFNob3J0X2Rl
c2NyaXB0aW9uOiBMaXN0IG9mIHZpc2l0ZWQgcGFnZXMKKyAqIEBUaXRsZTogV2ViS2l0QmFja0Zv
cndhcmRMaXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3LCAjV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbQorICoKKyAqIFdlYktpdEJhY2tGb3J3YXJkTGlzdCBtYWludGFpbnMgYSBsaXN0
IG9mIHZpc2l0ZWQgcGFnZXMgdXNlZCB0bworICogdXNlZCB0byBuYXZpZ2F0ZSB0byByZWNlbnQg
cGFnZXMuIEl0ZW1zIGFyZSBpbnNlcnRlZCBpbiB0aGUgbGlzdAorICogaW4gdGhlIG9yZGVyIHRo
ZXkgYXJlIHZpc2l0ZWQuCisgKgorICogV2ViS2l0QmFja0ZvcndhcmRMaXN0IGFsc28gbWFpbnRh
aW5zIHRoZSBub3Rpb24gb2YgdGhlIGN1cnJlbnQgaXRlbQorICogKHdoaWNoIGlzIGFsd2F5cyBh
dCBpbmRleCAwKSwgdGhlIHByZWNlZGluZyBpdGVtICh3aGljaCBpcyBhdCBpbmRleCAtMSksCisg
KiBhbmQgdGhlIGZvbGxvd2luZyBpdGVtICh3aGljaCBpcyBhdCBpbmRleCAxKS4KKyAqIE1ldGhv
ZHMgd2Via2l0X3dlYl92aWV3X2dvX2JhY2soKSBhbmQgd2Via2l0X3dlYl92aWV3X2dvX2Zvcndh
cmQoKSBtb3ZlCisgKiB0aGUgY3VycmVudCBpdGVtIGJhY2t3YXJkIG9yIGZvcndhcmQgYnkgb25l
LiBNZXRob2QKKyAqIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
KCkgc2V0cyB0aGUgY3VycmVudCBpdGVtIHRvIHRoZQorICogc3BlY2lmaWVkIGl0ZW0uIEFsbCBv
dGhlciBtZXRob2RzIHJldHVybmluZyAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbTwhLS0gLS0+
cworICogZG8gbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgaXRlbSwgdGhleSBq
dXN0IHJldHVybiB0aGUgcmVxdWVzdGVkCisgKiBpdGVtIG9yIGl0ZW1zLgorICovCisKK3N0cnVj
dCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSB7CisgICAgV0tCYWNrRm9yd2FyZExpc3RS
ZWYgd2tMaXN0OworfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRCYWNrRm9yd2FyZExpc3QsIHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Vi
a2l0QmFja0ZvcndhcmRMaXN0RmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdFQktJ
VF9CQUNLX0ZPUldBUkRfTElTVChvYmplY3QpLT5wcml2LT5+V2ViS2l0QmFja0ZvcndhcmRMaXN0
UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfaW5pdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QpCit7Cisg
ICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShsaXN0LCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0UHJpdmF0ZSk7CisgICAgbGlzdC0+cHJpdiA9IHByaXY7CisgICAgbmV3IChw
cml2KSBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0KFdlYktpdEJhY2tGb3J3YXJkTGlzdENs
YXNzKiBsaXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhsaXN0Q2xhc3MpOworCisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKGxpc3RDbGFzcywgc2l6ZW9mKFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUpKTsKK30K
Kworc3RhdGljIEdMaXN0KiB3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGVMaXN0KFdLQXJyYXlS
ZWYgd2tMaXN0KQoreworICAgIGlmICghd2tMaXN0KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IEdMaXN0KiBsaXN0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlHZXRT
aXplKHdrTGlzdCk7ICsraSkgeworICAgICAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tJ
dGVtID0gc3RhdGljX2Nhc3Q8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPihXS0FycmF5R2V0SXRl
bUF0SW5kZXgod2tMaXN0LCBpKSk7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0q
IGl0ZW0gPSB3ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVhdGUod2tJdGVtKTsKKyAg
ICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbGlzdCA9
IGdfbGlzdF9wcmVwZW5kKGxpc3QsIGl0ZW0pOworICAgIH0KKworICAgIHJldHVybiBsaXN0Owor
fQorCitXZWJLaXRCYWNrRm9yd2FyZExpc3QqIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZShX
S0JhY2tGb3J3YXJkTGlzdFJlZiB3a0xpc3QpCit7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0
KiBsaXN0ID0gV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9CQUNLX0ZPUldBUkRfTElTVCwgTlVMTCkpOworICAgIGxpc3QtPnByaXYtPndrTGlzdCA9IHdr
TGlzdDsKKworICAgIHJldHVybiBsaXN0OworfQorCisvKioKKyAqIHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfY3VycmVudF9pdGVtOgorICogQGJhY2tfZm9yd2FyZF9saXN0OiBhICNXZWJL
aXRCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGl0ZW0gaW4gQGJh
Y2tfZm9yd2FyZF9saXN0LgorICoKKyAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiBh
ICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICogICAgb3IgJU5VTEwgaWYgQGJhY2tfZm9yd2FyZF9s
aXN0IGlzIGVtcHR5LgorICovCitXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJh
Y2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFD
S19GT1JXQVJEX0xJU1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0
QmFja0ZvcndhcmRMaXN0SXRlbUdldE9yQ3JlYXRlKFdLQmFja0ZvcndhcmRMaXN0R2V0Q3VycmVu
dEl0ZW0oYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QpKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbToKKyAqIEBiYWNrX2ZvcndhcmRfbGlz
dDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUgaXRlbSB0aGF0
IHByZWNlZGVzIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiB0aGUgI1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0KKyAqICAgIHByZWNlZGluZyB0aGUg
Y3VycmVudCBpdGVtLCBvciAlTlVMTC4KKyAqLworV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSog
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0oV2ViS2l0QmFja0ZvcndhcmRM
aXN0KiBiYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOworCisgICAgcmV0dXJu
IHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNyZWF0ZShXS0JhY2tGb3J3YXJkTGlzdEdl
dEJhY2tJdGVtKGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0KSk7Cit9CisKKy8qKgorICog
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW06CisgKiBAYmFja19mb3J3
YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMgdGhlIGl0
ZW0gdGhhdCBzdWNjZWVkcyB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBub25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKiAgICBmb2xsb3dp
bmcgdGhlIGN1cnJlbnQgaXRlbSBvciAlTlVMTC4KKyAqLworV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbSogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0oV2ViS2l0QmFj
a0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOworCisg
ICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNyZWF0ZShXS0JhY2tGb3J3
YXJkTGlzdEdldEZvcndhcmRJdGVtKGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0KSk7Cit9
CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbToKKyAqIEBi
YWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKiBAaW5kZXg6IHRo
ZSBpbmRleCBvZiB0aGUgaXRlbQorICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gYXQgYSBnaXZlbiBp
bmRleCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBub25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKiAgICBsb2NhdGVk
IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgaXRlbS4KKyAq
LworV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9udGhfaXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCwgZ2ludCBp
bmRleCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJE
X0xJU1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0Zvcndh
cmRMaXN0SXRlbUdldE9yQ3JlYXRlKFdLQmFja0ZvcndhcmRMaXN0R2V0SXRlbUF0SW5kZXgoYmFj
a0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QsIGluZGV4KSk7Cit9CisKKy8qKgorICogd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGg6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEg
I1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnM6IHRoZSBsZW5ndGggb2YgQGJh
Y2tfZm9yd2FyZF9saXN0LgorICovCitndWludCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2xlbmd0aChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFja0Zvcndh
cmRMaXN0KSwgMCk7CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKiBwcml2ID0g
YmFja0ZvcndhcmRMaXN0LT5wcml2OworICAgIGd1aW50IGN1cnJlbnRJdGVtID0gd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0oYmFja0ZvcndhcmRMaXN0KSA/IDEgOiAw
OworICAgIHJldHVybiBXS0JhY2tGb3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQocHJpdi0+d2tM
aXN0KSArIFdLQmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZExpc3RDb3VudChwcml2LT53a0xpc3Qp
ICsgY3VycmVudEl0ZW07Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2xpc3Q6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJk
TGlzdAorICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJkTGlz
dEl0ZW0pICh0cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMgcHJl
Y2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0uCisgKi8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2JhY2tfbGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlz
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJ
U1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICBndWludCBsaW1pdCA9IFdLQmFja0Zvcndh
cmRMaXN0R2V0QmFja0xpc3RDb3VudChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCk7Cisg
ICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNrRm9yd2FyZExp
c3RDb3B5QmFja0xpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QsIGxp
bWl0KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xp
c3Rfd2l0aF9saW1pdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0Zvcndh
cmRMaXN0CisgKiBAbGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmlldmUKKyAqCisg
KiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdC5CYWNrRm9yd2FyZExpc3RJdGVtKSAodHJh
bnNmZXIgY29udGFpbmVyKTogYSAjR0xpc3Qgb2YKKyAqICAgIGl0ZW1zIHByZWNlZGluZyB0aGUg
Y3VycmVudCBpdGVtIGxpbWl0ZWQgYnkgQGxpbWl0LgorICovCitHTGlzdCogd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdChXZWJLaXRCYWNrRm9yd2FyZExp
c3QqIGJhY2tGb3J3YXJkTGlzdCwgZ3VpbnQgbGltaXQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOwor
CisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNrRm9yd2Fy
ZExpc3RDb3B5QmFja0xpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3Qs
IGxpbWl0KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2xpc3Q6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlz
dAorICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJkTGlzdEl0
ZW0pICh0cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMgZm9sbG93
aW5nIHRoZSBjdXJyZW50IGl0ZW0uCisgKi8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2ZvcndhcmRfbGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlz
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJ
U1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICBndWludCBsaW1pdCA9IFdLQmFja0Zvcndh
cmRMaXN0R2V0Rm9yd2FyZExpc3RDb3VudChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCk7
CisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNrRm9yd2Fy
ZExpc3RDb3B5Rm9yd2FyZExpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xp
c3QsIGxpbWl0KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9m
b3J3YXJkX2xpc3Rfd2l0aF9saW1pdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0
QmFja0ZvcndhcmRMaXN0CisgKiBAbGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmll
dmUKKyAqCisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdC5CYWNrRm9yd2FyZExpc3RJ
dGVtKSAodHJhbnNmZXIgY29udGFpbmVyKTogYSAjR0xpc3Qgb2YKKyAqICAgIGl0ZW1zIGZvbGxv
d2luZyB0aGUgY3VycmVudCBpdGVtIGxpbWl0ZWQgYnkgQGxpbWl0LgorICovCitHTGlzdCogd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdChXZWJLaXRC
YWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCwgZ3VpbnQgbGltaXQpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJk
TGlzdCksIDApOworCisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3Qo
V0tCYWNrRm9yd2FyZExpc3RDb3B5Rm9yd2FyZExpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0
LT5wcml2LT53a0xpc3QsIGxpbWl0KSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZGIwODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaApAQCAtMCww
ICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElP
TikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJl
Y3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRCYWNrRm9yd2FyZExpc3RfaAorI2RlZmlu
ZSBXZWJLaXRCYWNrRm9yd2FyZExpc3RfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUICAgICAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVf
QkFDS19GT1JXQVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdCkpCisjZGVmaW5lIFdFQktJ
VF9CQUNLX0ZPUldBUkRfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0Zv
cndhcmRMaXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1Qob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVf
QkFDS19GT1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1Rf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfQkFDS19GT1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1Rf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X1RZUEVfQkFDS19GT1JXQVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzKSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdCAgICAgICAgV2ViS2l0QmFja0Zv
cndhcmRMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzICAg
V2ViS2l0QmFja0ZvcndhcmRMaXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0Zv
cndhcmRMaXN0UHJpdmF0ZSBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlOworCitzdHJ1Y3Qg
X1dlYktpdEJhY2tGb3J3YXJkTGlzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJL
aXRCYWNrRm9yd2FyZExpc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfdHlwZSAgICAg
ICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0gKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0gICAgICAg
ICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJ
VF9BUEkgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2JhY2tfaXRlbSAgICAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJh
Y2tfZm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
ICoKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtICAgICAgICAgICAg
KFdlYktpdEJhY2tGb3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJ
IFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0gKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9udGhfaXRlbSAgICAgICAgICAgICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2Zv
cndhcmRfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdpbnQgICAgICAgICAgICAgICAgICAgaW5kZXgpOworV0VCS0lUX0FQSSBndWlu
dAord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGggICAgICAgICAgICAgICAgICAo
V2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkg
R0xpc3QgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QgICAgICAgICAg
ICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJ
VF9BUEkgR0xpc3QgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0
aF9saW1pdCAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50
ICAgICAgICAgICAgICAgICAgbGltaXQpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0ICAgICAgICAgICAgKFdlYktpdEJhY2tG
b3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQgKFdlYktp
dEJhY2tGb3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAg
IGxpbWl0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxY2ExMzgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9y
d2FyZExpc3RJdGVtLmNwcApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbS5oIgorCisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJp
dmF0ZS5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYWNrRm9yd2FyZExpc3RJdGVtLmg+CisjaW5j
bHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9y
d2FyZExpc3RJdGVtUHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9yd2FyZExpc3RJ
dGVtUmVmPiB3a0xpc3RJdGVtOworICAgIENTdHJpbmcgdXJpOworICAgIENTdHJpbmcgdGl0bGU7
CisgICAgQ1N0cmluZyBvcmlnaW5hbFVSSTsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbSwgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0sIEdfVFlQRV9P
QkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1GaW5hbGl6ZShH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0ob2Jq
ZWN0KS0+cHJpdi0+fldlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKCk7CisgICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2l0ZW1faW5pdChXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0SXRlbSkKK3sKKyAg
ICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShsaXN0SXRlbSwgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRF
TSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUpOworICAgIGxpc3RJdGVtLT5wcml2
ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRl
KCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2NsYXNz
X2luaXQoV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbUNsYXNzKiBsaXN0SXRlbUNsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MobGlzdEl0ZW1D
bGFzcyk7CisKKyAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0QmFja0ZvcndhcmRM
aXN0SXRlbUZpbmFsaXplOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGxpc3RJdGVt
Q2xhc3MsIHNpemVvZihXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSkpOworfQorCit0
eXBlZGVmIEhhc2hNYXA8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmLCBHUmVmUHRyPFdlYktpdEJh
Y2tGb3J3YXJkTGlzdEl0ZW0+ID4gSGlzdG9yeUl0ZW1zTWFwOworCitXZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtKiB3ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVhdGUoV0tCYWNrRm9y
d2FyZExpc3RJdGVtUmVmIHdrTGlzdEl0ZW0pCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChI
aXN0b3J5SXRlbXNNYXAsIGl0ZW1zTWFwLCAoKSk7CisKKyAgICBpZiAoIXdrTGlzdEl0ZW0pCisg
ICAgICAgIHJldHVybiAwOworCisgICAgR1JlZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
PiBsaXN0SXRlbSA9IGl0ZW1zTWFwLmdldCh3a0xpc3RJdGVtKTsKKyAgICBpZiAobGlzdEl0ZW0p
CisgICAgICAgIHJldHVybiBsaXN0SXRlbS5nZXQoKTsKKworICAgIGxpc3RJdGVtID0gYWRvcHRH
UmVmKFdFQktJVF9CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9CQUNLX0ZPUldBUkRfTElTVF9JVEVNLCBOVUxMKSkpOworICAgIGxpc3RJdGVtLT5wcml2LT53
a0xpc3RJdGVtID0gd2tMaXN0SXRlbTsKKyAgICBpdGVtc01hcC5zZXQod2tMaXN0SXRlbSwgbGlz
dEl0ZW0pOworCisgICAgcmV0dXJuIGxpc3RJdGVtLmdldCgpOworfQorCisvKioKKyAqIHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmk6CisgKiBAYmFja19mb3J3YXJkX2xpc3Rf
aXRlbTogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbQorICoKKyAqIFRoaXMgVVJJIG1heSBk
aWZmZXIgZnJvbSB0aGUgb3JpZ2luYWwgVVJJIGlmIHRoZSBwYWdlIHdhcywKKyAqIGZvciBleGFt
cGxlLCByZWRpcmVjdGVkIHRvIGEgbmV3IGxvY2F0aW9uLgorICogU2VlIGFsc28gd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSgpLgorICoKKyAqIFJldHVybnM6
IHRoZSBVUkkgb2YgQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW0uCisgKi8KK2NvbnN0IGdjaGFyKiB3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJpKFdlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0qIGxpc3RJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19C
QUNLX0ZPUldBUkRfTElTVF9JVEVNKGxpc3RJdGVtKSwgMCk7CisKKyAgICBXZWJLaXRCYWNrRm9y
d2FyZExpc3RJdGVtUHJpdmF0ZSogcHJpdiA9IGxpc3RJdGVtLT5wcml2OworICAgIFdLUmV0YWlu
UHRyPFdLVVJMUmVmPiB3a1VSSShBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VVJM
KHByaXYtPndrTGlzdEl0ZW0uZ2V0KCkpKTsKKyAgICBpZiAodG9JbXBsKHdrVVJJLmdldCgpKS0+
c3RyaW5nKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IENTdHJp
bmcmIHVyaSA9IHRvSW1wbCh3a1VSSS5nZXQoKSktPnN0cmluZygpLnV0ZjgoKTsKKyAgICBpZiAo
cHJpdi0+dXJpICE9IHVyaSkKKyAgICAgICAgcHJpdi0+dXJpID0gdXJpOworCisgICAgcmV0dXJu
IHByaXYtPnVyaS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW1fZ2V0X3RpdGxlOgorICogQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW06IGEgI1dlYktpdEJh
Y2tGb3J3YXJkTGlzdEl0ZW0KKyAqCisgKiBSZXR1cm5zOiB0aGUgcGFnZSB0aXRsZSBvZiBAYmFj
a19mb3J3YXJkX2xpc3RfaXRlbS4KKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtX2dldF90aXRsZShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0SXRl
bSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJ
U1RfSVRFTShsaXN0SXRlbSksIDApOworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVBy
aXZhdGUqIHByaXYgPSBsaXN0SXRlbS0+cHJpdjsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2tUaXRsZShBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VGl0bGUocHJpdi0+
d2tMaXN0SXRlbS5nZXQoKSkpOworICAgIGlmICh0b0ltcGwod2tUaXRsZS5nZXQoKSktPnN0cmlu
ZygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBDU3RyaW5nJiB0
aXRsZSA9IHRvSW1wbCh3a1RpdGxlLmdldCgpKS0+c3RyaW5nKCkudXRmOCgpOworICAgIGlmIChw
cml2LT50aXRsZSAhPSB0aXRsZSkKKyAgICAgICAgcHJpdi0+dGl0bGUgPSB0aXRsZTsKKworICAg
IHJldHVybiBwcml2LT50aXRsZS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdF9p
dGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJldHVybnM6IHRoZSBvcmlnaW5h
bCBVUkkgb2YgQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW0uCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKFdlYktpdEJhY2tGb3J3
YXJkTGlzdEl0ZW0qIGxpc3RJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGxpc3RJdGVtKSwgMCk7CisKKyAgICBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSogcHJpdiA9IGxpc3RJdGVtLT5wcml2OworICAgIFdL
UmV0YWluUHRyPFdLVVJMUmVmPiB3a09yaWdpbmFsVVJJKEFkb3B0V0ssIFdLQmFja0ZvcndhcmRM
aXN0SXRlbUNvcHlPcmlnaW5hbFVSTChwcml2LT53a0xpc3RJdGVtLmdldCgpKSk7CisgICAgaWYg
KHRvSW1wbCh3a09yaWdpbmFsVVJJLmdldCgpKS0+c3RyaW5nKCkuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGNvbnN0IENTdHJpbmcmIG9yaWdpbmFsVVJJID0gdG9JbXBsKHdr
T3JpZ2luYWxVUkkuZ2V0KCkpLT5zdHJpbmcoKS51dGY4KCk7CisgICAgaWYgKHByaXYtPm9yaWdp
bmFsVVJJICE9IG9yaWdpbmFsVVJJKQorICAgICAgICBwcml2LT5vcmlnaW5hbFVSSSA9IG9yaWdp
bmFsVVJJOworCisgICAgcmV0dXJuIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNm
ODkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lE
RV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZu
ZGVmIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1faAorI2RlZmluZSBXZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQ
RV9CQUNLX0ZPUldBUkRfTElTVF9JVEVNICAgICAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZPUldBUkRfTElTVF9J
VEVNKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0sIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0pKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRFTV9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9CQUNLX0ZP
UldBUkRfTElTVF9JVEVNLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3MpKQorI2RlZmlu
ZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVF9J
VEVNKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU1fQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQkFDS19G
T1JXQVJEX0xJU1RfSVRFTSkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZPUldBUkRfTElTVF9JVEVN
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0sIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1D
bGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICAgICAg
ICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW1DbGFzcyAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1DbGFzczsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSBXZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW1Qcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdHlwZSAgICAgICAgICh2
b2lkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfaXRlbV9nZXRfdXJpICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0
X2l0ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX2dldF90aXRsZSAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxp
c3RfaXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSog
bGlzdF9pdGVtKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RQ
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1YzNkMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViS2l0QmFja0Zvcndh
cmRMaXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGVfaAor
CisjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0QmFja0Zv
cndhcmRMaXN0LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisKK1dlYktpdEJhY2tG
b3J3YXJkTGlzdCogd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdLQmFja0ZvcndhcmRMaXN0
UmVmKTsKK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0
ZW1HZXRPckNyZWF0ZShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYpOworCisjZW5kaWYgLy8gV2Vi
S2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGMyZTk4MDQuLjc0M2E4MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0V2ViVmlldy5oIgogCisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5o
IgogI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
V2ViTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgi
CkBAIC00NSw2ICs0Niw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewogICAgIFdl
YktpdFdlYkNvbnRleHQqIGNvbnRleHQ7CiAKICAgICBHUmVmUHRyPFdlYktpdFdlYkxvYWRlckNs
aWVudD4gbG9hZGVyQ2xpZW50OworICAgIEdSZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRMaXN0PiBi
YWNrRm9yd2FyZExpc3Q7CiB9OwogCiBHX0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXcsIHdlYmtp
dF93ZWJfdmlldywgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRSkKQEAgLTU3LDYgKzU5LDkgQEAg
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAg
ICB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2Vi
VmlldyksIHdlYmtpdFdlYkNvbnRleHRHZXRXS0NvbnRleHQocHJpdi0+Y29udGV4dCksIDApOwog
CiAgICAgcHJpdi0+bG9hZGVyQ2xpZW50ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJfTE9BREVSX0NM
SUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9DTElFTlQsICJ3ZWItdmll
dyIsIHdlYlZpZXcsIE5VTEwpKSk7CisKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRX
ZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOworICAgIHBy
aXYtPmJhY2tGb3J3YXJkTGlzdCA9IGFkb3B0R1JlZih3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVh
dGUoV0tQYWdlR2V0QmFja0ZvcndhcmRMaXN0KHRvQVBJKHBhZ2UpKSkpOwogfQogCiBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKQEAgLTMzOCwz
ICszNDMsMTkgQEAgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcpCiAKICAgICByZXR1cm4gV0tQYWdlQ2FuR29Gb3J3YXJkKHRvQVBJ
KHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSkp
KTsKIH0KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0Ogor
ICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogT2J0YWlucyB0aGUgI1dlYktp
dEJhY2tGb3J3YXJkTGlzdCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuICNXZWJLaXRXZWJWaWV3
LiBUaGUKKyAqICNXZWJLaXRCYWNrRm9yd2FyZExpc3QgaXMgb3duZWQgYnkgdGhlICNXZWJLaXRX
ZWJWaWV3LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRCYWNr
Rm9yd2FyZExpc3QKKyAqLworV2ViS2l0QmFja0ZvcndhcmRMaXN0KiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2JhY2tfZm9yd2FyZF9saXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKKworICAg
IHJldHVybiB3ZWJWaWV3LT5wcml2LT5iYWNrRm9yd2FyZExpc3QuZ2V0KCk7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggNTk5
N2E1YS4uOGIwMDQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBXZWJLaXRXZWJWaWV3
X2gKICNkZWZpbmUgV2ViS2l0V2ViVmlld19oCiAKKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50Lmg+CkBAIC02Nyw1MSArNjgsNTQgQEAgc3RydWN0IF9XZWJLaXRX
ZWJWaWV3Q2xhc3MgewogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X3dlYl92aWV3X2dl
dF90eXBlICAgICAgICAgICAgKHZvaWQpOword2Via2l0X3dlYl92aWV3X2dldF90eXBlICAgICAg
ICAgICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgR3RrV2lkZ2V0ICoKLXdlYmtpdF93ZWJfdmll
d19uZXcgICAgICAgICAgICAgICAgICh2b2lkKTsKK3dlYmtpdF93ZWJfdmlld19uZXcgICAgICAg
ICAgICAgICAgICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIEd0a1dpZGdldCAqCi13ZWJraXRfd2Vi
X3ZpZXdfbmV3X3dpdGhfY29udGV4dCAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICpjb250ZXh0
KTsKK3dlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0ICAgICAgKFdlYktpdFdlYkNvbnRl
eHQgICAgICAqY29udGV4dCk7CiAKIFdFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4dCAqCi13ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3
ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSBXZWJLaXRXZWJMb2FkZXJD
bGllbnQgKgotd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50ICAgKFdlYktpdFdlYlZp
ZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CiAKIFdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X3dlYl92aWV3X3NldF9sb2FkZXJfY2xpZW50ICAgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKK3dlYmtpdF93ZWJfdmlld19zZXRf
bG9hZGVyX2NsaWVudCAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQg
KmxvYWRlcl9jbGllbnQpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaSAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqdXJp
KTsKK3dlYmtpdF93ZWJfdmlld19sb2FkX3VyaSAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAgICAgICAgICAgKnVyaSk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0
X3dlYl92aWV3X2xvYWRfYWx0ZXJuYXRlX2h0bWwgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2Vi
X3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgICAgICpjb250ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdjaGFyICAgICAgICAgICAqYmFzZV91cmksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICp1bnJlYWNoYWJsZV91cmkpOwot
Cit3ZWJraXRfd2ViX3ZpZXdfbG9hZF9hbHRlcm5hdGVfaHRtbCAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgICAgICAgICAgICpjb250ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICpiYXNlX3VyaSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqdW5y
ZWFjaGFibGVfdXJpKTsKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X3JlbG9hZCAg
ICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dl
Yl92aWV3X3JlbG9hZCAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJf
dmlldyk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3Nf
Y2FjaGUgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3
X3JlbG9hZF9ieXBhc3NfY2FjaGUgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7
CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X2dvX2JhY2sgICAgICAgICAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dvX2Jh
Y2sgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CisKIAog
V0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrICAgICAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2Nhbl9n
b19iYWNrICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CiAKIFdF
QktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQgICAgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQg
ICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CisKK1dFQktJVF9B
UEkgV2ViS2l0QmFja0ZvcndhcmRMaXN0ICoKK3dlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3
YXJkX2xpc3QgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJ
IGdib29sZWFuCi13ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQgICAgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKIAogR19FTkRfREVDTFMK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05V
bWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVt
YWtlZmlsZS5hbQppbmRleCBkNWUxOGJhLi45Y2YzMmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAtMSw3ICsx
LDggQEAKIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2Vi
S2l0V2ViQ29udGV4dCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJW
aWV3IFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVu
dAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50IFwK
KwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdAogCiBub2luc3Rf
UFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQogd2Via2l0Ml90ZXN0c19jcHBmbGFncyA9IFwKQEAg
LTYyLDMgKzYzLDkgQEAgUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJMb2Fk
ZXJDbGllbnRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3AKIFByb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50X0xEQUREID0gJCh3ZWJraXQyX3Rlc3Rz
X2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJMb2FkZXJDbGll
bnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQogCisKK1Byb2dyYW1zX1dlYktp
dDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X1NPVVJDRVMgPSBcCisgICAgICAgIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3Bw
CitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9DUFBGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0
QmFja0ZvcndhcmRMaXN0X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERGTEFHUyA9ICQod2Via2l0Ml90
ZXN0c19sZGZsYWdzKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3Qu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJhY2tGb3J3
YXJkTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZiODRmMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0
cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCit0eXBlZGVmIGVudW0gewor
ICAgIEJBQ0tXQVJELAorICAgIEZPUldBUkQKK30gTGlzdFR5cGU7CisKK3N0YXRpYyBXZWJLaXRU
ZXN0U2VydmVyKiBrU2VydmVyOworCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2Vy
dmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtc2csIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFi
bGUqIHF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywg
U09VUF9TVEFUVVNfT0spOworCisgICAgY2hhciogYm9keSA9IGdfc3RyZHVwX3ByaW50ZigiPGh0
bWw+PHRpdGxlPiVzPC90aXRsZT48Ym9keT4lczwvYm9keT48L2h0bWw+IiwgcGF0aCArIDEsIHBh
dGggKyAxKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9UQUtFLCBib2R5LCBzdHJsZW4oYm9keSkpOworCisgICAgc291cF9tZXNz
YWdlX2JvZHlfY29tcGxldGUobXNnLT5yZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQg
Y2hlY2tJdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0sIGNvbnN0IGdjaGFyKiB0
aXRsZSwgY29uc3QgZ2NoYXIqIHVyaSwgY29uc3QgZ2NoYXIqIG9yaWdpbmFsVVJJKQoreworICAg
IGdfYXNzZXJ0KGl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfaXRlbV9nZXRfdXJpKGl0ZW0pLCA9PSwgdXJpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlKGl0ZW0pLCA9PSAsIHRpdGxl
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0
X29yaWdpbmFsX3VyaShpdGVtKSwgPT0sIG9yaWdpbmFsVVJJKTsKK30KKworc3RhdGljIHZvaWQg
Y2hlY2tJdGVtSW5kZXgoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0KQoreworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgLTEpID09IHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKGxpc3QpKTsKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDApID09IHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpKTsKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEpID09IHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGxpc3QpKTsKK30KKworc3RhdGlj
IHZvaWQgY2hlY2tMaXN0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCwgTGlzdFR5cGUgdHlw
ZSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSoqIGl0ZW1zLCBndWludCBuSXRlbXMpCit7Cisg
ICAgR0xpc3QqIGxpc3RJdGVtcyA9IHR5cGUgPT0gQkFDS1dBUkQgPyB3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdChsaXN0KSA6CisgICAgICAgIHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KGxpc3QpOworICAgIGdfYXNzZXJ0KGxpc3RJdGVtcyk7
CisKKyAgICBndWludCBpID0gMDsKKyAgICBmb3IgKEdMaXN0KiBsaXN0SXRlbSA9IGxpc3RJdGVt
czsgbGlzdEl0ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0ZW0pLCBpKyspIHsKKyAg
ICAgICAgZ19hc3NlcnRfY21wdWludChpLCA8LCBuSXRlbXMpOworICAgICAgICBnX2Fzc2VydChs
aXN0SXRlbS0+ZGF0YSA9PSBpdGVtc1tpXSk7CisgICAgfQorICAgIGdfbGlzdF9mcmVlKGxpc3RJ
dGVtcyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKExv
YWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0QmFja0Zv
cndhcmRMaXN0KiBsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh0
ZXN0LT5tX3dlYlZpZXcpOworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1zWzFd
OworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dl
YlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRl
c3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KSk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKGxpc3QpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOwor
ICAgIGNoZWNrSXRlbUluZGV4KGxpc3QpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdChsaXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KGxpc3QpKTsKKworICAgIENTdHJpbmcgdXJp
UGFnZTEgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvUGFnZTEiKTsKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF91cmkodGVzdC0+bV93ZWJWaWV3LCB1cmlQYWdlMS5kYXRhKCkpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
dmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3Nl
cnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0s
IDEpOworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlMSA9IHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpOworICAgIGNoZWNrSXRlbShp
dGVtUGFnZTEsICJQYWdlMSIsIHVyaVBhZ2UxLmRhdGEoKSwgdXJpUGFnZTEuZGF0YSgpKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlzdCkp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRl
bShsaXN0KSk7CisgICAgY2hlY2tJdGVtSW5kZXgobGlzdCk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KGxpc3QpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QobGlzdCkpOworCisgICAg
Q1N0cmluZyB1cmlQYWdlMiA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9QYWdlMiIpOworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh0ZXN0LT5tX3dlYlZpZXcsIHVyaVBhZ2UyLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKKwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgo
bGlzdCksID09LCAyKTsKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtUGFnZTIg
PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KTsKKyAgICBj
aGVja0l0ZW0oaXRlbVBhZ2UyLCAiUGFnZTIiLCB1cmlQYWdlMi5kYXRhKCksIHVyaVBhZ2UyLmRh
dGEoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0
ZW0obGlzdCkgPT0gaXRlbVBhZ2UxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOworICAgIGNoZWNrSXRlbUluZGV4KGxpc3Qp
OworICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UxOworICAgIGNoZWNrTGlzdChsaXN0LCBCQUNLV0FS
RCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2ZvcndhcmRfbGlzdChsaXN0KSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayh0ZXN0
LT5tX3dlYlZpZXcpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQodGVzdC0+bV93ZWJW
aWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMik7CisgICAgZ19hc3NlcnQoaXRlbVBhZ2UxID09IHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpKTsKKyAgICBjaGVja0l0
ZW0od2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0obGlzdCksICJQYWdl
MSIsIHVyaVBhZ2UxLmRhdGEoKSwgdXJpUGFnZTEuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlzdCkpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGxpc3QpID09IGl0ZW1Q
YWdlMik7CisgICAgY2hlY2tJdGVtSW5kZXgobGlzdCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KGxpc3QpKTsKKyAgICBpdGVtc1swXSA9IGl0
ZW1QYWdlMjsKKyAgICBjaGVja0xpc3QobGlzdCwgRk9SV0FSRCwgaXRlbXMsIDEpOworCisgICAg
d2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQodGVzdC0+bV93ZWJWaWV3KTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19j
YW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92
aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3NlcnRfY21w
dWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDIpOwor
ICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMiA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1
cnJlbnRfaXRlbShsaXN0KSk7CisgICAgY2hlY2tJdGVtKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKGxpc3QpLCAiUGFnZTIiLCB1cmlQYWdlMi5kYXRhKCksIHVyaVBh
Z2UyLmRhdGEoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2l0ZW0obGlzdCkgPT0gaXRlbVBhZ2UxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOworICAgIGNoZWNrSXRlbUluZGV4
KGxpc3QpOworICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UxOworICAgIGNoZWNrTGlzdChsaXN0LCBC
QUNLV0FSRCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2ZvcndhcmRfbGlzdChsaXN0KSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAg
ICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2Vy
dmVyQ2FsbGJhY2spOworCisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJCYWNrRm9yd2FyZExp
c3QiLCAibmF2aWdhdGlvbiIsIHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKTsKK30KKwor
dm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCAzMWYxMTBhLi41ODNjODI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0yMiw2ICsy
Miw4IEBACiAKICNkZWZpbmUgX19XRUJLSVQyX0hfSU5TSURFX18KIAorI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEVycm9yLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111588</attachid>
            <date>2011-10-19 04:05:40 -0700</date>
            <delta_ts>2011-10-19 05:14:50 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-bf-list5.diff</filename>
            <type>text/plain</type>
            <size>60348</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2YjM1ODVmLi4zY2M5ZWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUg
QEAKKzIwMTEtMTAtMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYmFjayBmb3J3YXJk
IGxpc3QgZm9yIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21w
aWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplKToK
KyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pbml0KToKKyAgICAgICAgKHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3
YXJkTGlzdEdldE9yQ3JlYXRlSXRlbSk6IEhlbHBlciBmdW5jdGlvbiB0aGF0CisgICAgICAgIGNy
ZWF0ZXMgYSBuZXcgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSBmb3IgdGhlIGdpdmVuCisgICAg
ICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0gb3IgcmV0dXJucyBpdCBmcm9tIHRoZSBjYWNoZSBp
ZiBpdCdzCisgICAgICAgIGFscmVhZHkgY2FjaGVkLgorICAgICAgICAod2Via2l0QmFja0Zvcndh
cmRMaXN0Q3JlYXRlTGlzdCk6IEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEKKyAgICAgICAg
V0tBcnJheSBvZiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtcyBpbnRvIGEgR0xpc3Qgb2YKKyAgICAg
ICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbXMuCisgICAgICAgICh3ZWJraXRCYWNrRm9yd2Fy
ZExpc3RDcmVhdGUpOiBDcmVhdGUgYSBuZXcgV2ViS2l0QmFja0ZvcndhcmRMaXN0LgorICAgICAg
ICAod2Via2l0QmFja0ZvcndhcmRMaXN0Q2hhbmdlZCk6IEVtaXRzIGNoYW5nZWQgc2lnbmFsIHdo
ZW4gdGhlIGJhY2sKKyAgICAgICAgZm9yd2FyZCBsaXN0IGNoYW5nZXMuCisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSk6CisgICAgICAgICh3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X250aF9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfbGVuZ3RoKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFj
a19saXN0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0
X3dpdGhfbGltaXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2xpc3QpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3Rfd2l0aF9saW1pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3
YXJkTGlzdEl0ZW1GaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2NsYXNz
X2luaXQpOgorICAgICAgICAoaGlzdG9yeUl0ZW1zTWFwKTogR2xvYmFsIGNhY2hlIGZvciBXZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtcy4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0
ZW1GaW5hbGl6ZWQpOgorICAgICAgICAod2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUdldE9yQ3Jl
YXRlKTogSGVscGVyIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgY3JlYXRlcyBhIG5ldyBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtIGZvciB0aGUgZ2l2ZW4KKyAgICAgICAgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSBvciByZXR1cm5zIGl0IGZyb20gdGhlIGdsb2JhbCBjYWNoZSBpZiBpdCdzCisgICAg
ICAgIGFscmVhZHkgY2FjaGVkLgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fZ2V0X3VyaSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRf
dGl0bGUpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdp
bmFsX3VyaSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChkaWRDaGFuZ2VCYWNrRm9yd2Fy
ZExpc3QpOgorICAgICAgICAod2Via2l0V2ViTG9hZGVyQ2xpZW50Q29uc3RydWN0ZWQpOgorICAg
ICAgICAod2Via2l0V2ViTG9hZGVyQ2xpZW50TG9hZEZhaWxlZCk6CisgICAgICAgICh3ZWJraXRX
ZWJMb2FkZXJDbGllbnRTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRXZWJMb2FkZXJDbGll
bnRHZXRQcm9wZXJ0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Vi
a2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0dOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xv
YWRUcmFja2luZ1Rlc3QuY3BwOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6TG9hZFRyYWNr
aW5nVGVzdCk6IFdhdGNoIHRoZSBsb2FkZXIgY2xpZW50IHRvCisgICAgICAgIG1ha2Ugc3VyZSBp
dCdzIG5vdCBsZWFrZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJh
Y2tGb3J3YXJkTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAg
ICAgICAodGVzdEJhY2tGb3J3YXJkTGlzdE5hdmlnYXRpb24pOgorICAgICAgICAodGVzdEJhY2tG
b3J3YXJkTGlzdExpbWl0QW5kQ2FjaGUpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAg
KGFmdGVyQWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5o
OgorICAgICAgICAoVGVzdDo6flRlc3QpOiBDaGVja3MgdGhlcmUgYXJlIG5vIG9iamVjdHMgbGVh
a2VkLgorICAgICAgICAoVGVzdDo6b2JqZWN0RmluYWxpemVkKTogQ2FsbGJhY2sgY2FsbGVkIHdo
ZW4gYSBHT2JqZWN0IGlzCisgICAgICAgIGRlbGV0ZWQsIHVzZWQgdG8gcmVtb3ZlIHRoZSB3YXRj
aGVkIG9iamVjdCB0aGUgbGlzdC4KKyAgICAgICAgKFRlc3Q6OndhdGNoT2JqZWN0KTogQWRkIGFu
IG9iamVjdCB0byB0aGUgbGlzdCBmbyB3YXRjaGVkCisgICAgICAgIG9iamVjdHMgYW5kIGFkZCBh
IHdlYWsgcG9pbnRlciB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCB3aGVuIHRoZQorICAgICAg
ICBvYmplY3QgaXMgZmluYWxpemVkLiBJZiB0aGVyZSBhcmVuJ3Qgb2JqZWN0cyBsZWFrZWQsIHRo
ZSBsaXN0CisgICAgICAgIHNob3VsZCBiZSBlbXB0eSB3aGVuIHRoZSB0ZXN0IGZpbmlzaGVzLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcDoKKyAgICAg
ICAgKFdlYlZpZXdUZXN0OjpXZWJWaWV3VGVzdCk6IFdhdGNoIHRoZSB3ZWIgdmlldyB0byBtYWtl
IHN1cmUgaXQncworICAgICAgICBub3QgbGVha2VkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1dlYlZpZXdUZXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3Q6
CisKIDIwMTEtMTAtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtVTklYXSBVc2UgU09DS19TRVFQQUNLRVQgd2hlbiBhdmFpbGFibGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0KaW5kZXggNzNlY2YwNi4uZmY1Yzc4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KQEAgLTcxLDYgKzcxLDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9W
RVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9IRUEKIAogbGlid2Via2l0
Mmd0a2luY2x1ZGVkaXIgPSAkKGxpYndlYmtpdGd0a2luY2x1ZGVkaXIpL3dlYmtpdDIKIHdlYmtp
dDJndGtfaGVhZGVycyA9IFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdC5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdEl0ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREZWZpbmVzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3Iu
aCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXApA
QCAtNDc0LDYgKzQ3NiwxMSBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZF
UlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvY3BwL1dLUmV0YWluUHRyLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAgXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCisJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5j
cHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJk
TGlzdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RGVmaW5lcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJv
ci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEJhY2tGb3J3YXJkTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NGQzNjhhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0QmFja0Zvcndh
cmRMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKKyNpbmNsdWRlIDxX
ZWJLaXQyL1dLQmFja0ZvcndhcmRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgorCisvKioKKyAqIFNFQ1RJT046IFdlYktpdEJhY2tGb3J3YXJkTGlzdAorICogQFNob3J0
X2Rlc2NyaXB0aW9uOiBMaXN0IG9mIHZpc2l0ZWQgcGFnZXMKKyAqIEBUaXRsZTogV2ViS2l0QmFj
a0ZvcndhcmRMaXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3LCAjV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbQorICoKKyAqIFdlYktpdEJhY2tGb3J3YXJkTGlzdCBtYWludGFpbnMgYSBs
aXN0IG9mIHZpc2l0ZWQgcGFnZXMgdXNlZCB0bworICogdXNlZCB0byBuYXZpZ2F0ZSB0byByZWNl
bnQgcGFnZXMuIEl0ZW1zIGFyZSBpbnNlcnRlZCBpbiB0aGUgbGlzdAorICogaW4gdGhlIG9yZGVy
IHRoZXkgYXJlIHZpc2l0ZWQuCisgKgorICogV2ViS2l0QmFja0ZvcndhcmRMaXN0IGFsc28gbWFp
bnRhaW5zIHRoZSBub3Rpb24gb2YgdGhlIGN1cnJlbnQgaXRlbQorICogKHdoaWNoIGlzIGFsd2F5
cyBhdCBpbmRleCAwKSwgdGhlIHByZWNlZGluZyBpdGVtICh3aGljaCBpcyBhdCBpbmRleCAtMSks
CisgKiBhbmQgdGhlIGZvbGxvd2luZyBpdGVtICh3aGljaCBpcyBhdCBpbmRleCAxKS4KKyAqIE1l
dGhvZHMgd2Via2l0X3dlYl92aWV3X2dvX2JhY2soKSBhbmQgd2Via2l0X3dlYl92aWV3X2dvX2Zv
cndhcmQoKSBtb3ZlCisgKiB0aGUgY3VycmVudCBpdGVtIGJhY2t3YXJkIG9yIGZvcndhcmQgYnkg
b25lLiBNZXRob2QKKyAqIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtKCkgc2V0cyB0aGUgY3VycmVudCBpdGVtIHRvIHRoZQorICogc3BlY2lmaWVkIGl0ZW0uIEFs
bCBvdGhlciBtZXRob2RzIHJldHVybmluZyAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbTwhLS0g
LS0+cworICogZG8gbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgaXRlbSwgdGhl
eSBqdXN0IHJldHVybiB0aGUgcmVxdWVzdGVkCisgKiBpdGVtIG9yIGl0ZW1zLgorICovCisKK2Vu
dW0geworICAgIENIQU5HRUQsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKwordHlwZWRlZiBIYXNo
TWFwPFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiwgR1JlZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtPiA+IEJhY2tGb3J3YXJkTGlzdEl0ZW1zTWFwOworCitzdHJ1Y3QgX1dlYktpdEJhY2tG
b3J3YXJkTGlzdFByaXZhdGUgeworICAgIFdLQmFja0ZvcndhcmRMaXN0UmVmIHdrTGlzdDsKKyAg
ICBCYWNrRm9yd2FyZExpc3RJdGVtc01hcCBpdGVtc01hcDsKK307CisKK3N0YXRpYyBndWludCBz
aWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRCYWNr
Rm9yd2FyZExpc3QsIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdCwgR19UWVBFX09CSkVDVCkKKwor
c3RhdGljIHZvaWQgd2Via2l0QmFja0ZvcndhcmRMaXN0RmluYWxpemUoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdFQktJVF9CQUNLX0ZPUldBUkRfTElTVChvYmplY3QpLT5wcml2LT5+V2ViS2l0
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaW5pdChXZWJLaXRCYWNrRm9yd2FyZExp
c3QqIGxpc3QpCit7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSogcHJpdiA9IEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShsaXN0LCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRf
TElTVCwgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSk7CisgICAgbGlzdC0+cHJpdiA9IHBy
aXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0KFdlYktpdEJh
Y2tGb3J3YXJkTGlzdENsYXNzKiBsaXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhsaXN0Q2xhc3MpOworCisgICAgZ09iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplOworCisgICAgLyoqCisg
ICAgICogV2ViS2l0QmFja0ZvcndhcmRMaXN0OjpjaGFuZ2VkOgorICAgICAqIEBiYWNrX2Zvcndh
cmRfbGlzdDogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3Qgb24gd2hpY2ggdGhlIHNpZ25hbCB3
YXMgZW1pdHRlZAorICAgICAqIEBpdGVtX2FkZGVkOiAoYWxsb3ctbm9uZSk6IHRoZSAjV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbSBhZGRlZCBvciAlTlVMTAorICAgICAqIEBpdGVtc19yZW1vdmVk
OiBhICNHTGlzdCBvZiAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbTwhLS0gLS0+cworICAgICAq
CisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIEBiYWNrX2ZvcndhcmRfbGlzdCBj
aGFuZ2VzLiBUaGlzIGhhcHBlbnMKKyAgICAgKiB3aGVuIHRoZSBjdXJyZW50IGl0ZW0gaXMgdXBk
YXRlZCwgYSBuZXcgaXRlbSBpcyBhZGRlZCBvciBvbmUgb3IgbW9yZQorICAgICAqIGl0ZW1zIGFy
ZSByZW1vdmVkLiBOb3RlIHRoYXQgYm90aCBAaXRlbV9hZGRlZCBhbmQgQGl0ZW1zX3JlbW92ZWQg
Y2FuCisgICAgICogJU5VTEwgd2hlbiBvbmx5IHRoZSBjdXJyZW50IGl0ZW0gaXMgdXBkYXRlZC4g
SXRlbXMgYXJlIG9ubHkgcmVtb3ZlZAorICAgICAqIHdoZW4gdGhlIGxpc3QgaXMgY2xlYXJlZCBv
ciB0aGUgbWF4aW11bSBpdGVtcyBsaW1pdCBpcyByZWFjaGVkLgorICAgICAqLworICAgIHNpZ25h
bHNbQ0hBTkdFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImNoYW5nZWQiLAorICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MobGlzdENsYXNzKSwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX09CSkVDVF9QT0lOVEVS
LAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVF9JVEVNLAorICAgICAgICAgICAgICAg
ICAgICAgR19UWVBFX1BPSU5URVIpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGxp
c3RDbGFzcywgc2l6ZW9mKFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUpKTsKK30KKworc3Rh
dGljIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEdldE9y
Q3JlYXRlSXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0
SXRlbVJlZiB3a0xpc3RJdGVtKQoreworICAgIGlmICghd2tMaXN0SXRlbSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKiBwcml2ID0gbGlzdC0+
cHJpdjsKKyAgICBHUmVmUHRyPFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0+IGxpc3RJdGVtID0g
cHJpdi0+aXRlbXNNYXAuZ2V0KHdrTGlzdEl0ZW0pOworICAgIGlmIChsaXN0SXRlbSkKKyAgICAg
ICAgcmV0dXJuIGxpc3RJdGVtLmdldCgpOworCisgICAgbGlzdEl0ZW0gPSB3ZWJraXRCYWNrRm9y
d2FyZExpc3RJdGVtR2V0T3JDcmVhdGUod2tMaXN0SXRlbSk7CisgICAgcHJpdi0+aXRlbXNNYXAu
c2V0KHdrTGlzdEl0ZW0sIGxpc3RJdGVtKTsKKworICAgIHJldHVybiBsaXN0SXRlbS5nZXQoKTsK
K30KKworc3RhdGljIEdMaXN0KiB3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGVMaXN0KFdLQXJy
YXlSZWYgd2tMaXN0KQoreworICAgIGlmICghd2tMaXN0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEdMaXN0KiBsaXN0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlH
ZXRTaXplKHdrTGlzdCk7ICsraSkgeworICAgICAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYg
d2tJdGVtID0gc3RhdGljX2Nhc3Q8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPihXS0FycmF5R2V0
SXRlbUF0SW5kZXgod2tMaXN0LCBpKSk7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0qIGl0ZW0gPSB3ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVhdGUod2tJdGVtKTsK
KyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbGlz
dCA9IGdfbGlzdF9wcmVwZW5kKGxpc3QsIGl0ZW0pOworICAgIH0KKworICAgIHJldHVybiBsaXN0
OworfQorCitXZWJLaXRCYWNrRm9yd2FyZExpc3QqIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0
ZShXS0JhY2tGb3J3YXJkTGlzdFJlZiB3a0xpc3QpCit7CisgICAgV2ViS2l0QmFja0ZvcndhcmRM
aXN0KiBsaXN0ID0gV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgTlVMTCkpOworICAgIGxpc3QtPnByaXYtPndrTGlzdCA9
IHdrTGlzdDsKKworICAgIHJldHVybiBsaXN0OworfQorCit2b2lkIHdlYmtpdEJhY2tGb3J3YXJk
TGlzdENoYW5nZWQoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QsIFdLQmFj
a0ZvcndhcmRMaXN0SXRlbVJlZiB3a0FkZGVkSXRlbSwgV0tBcnJheVJlZiB3a1JlbW92ZWRJdGVt
cykKK3sKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZEl0ZW0gPSB3ZWJraXRC
YWNrRm9yd2FyZExpc3RHZXRPckNyZWF0ZUl0ZW0oYmFja0ZvcndhcmRMaXN0LCB3a0FkZGVkSXRl
bSk7CisgICAgR0xpc3QqIHJlbW92ZWRJdGVtcyA9IDA7CisKKyAgICBzaXplX3QgcmVtb3ZlZEl0
ZW1zU2l6ZSA9IHdrUmVtb3ZlZEl0ZW1zID8gV0tBcnJheUdldFNpemUod2tSZW1vdmVkSXRlbXMp
IDogMDsKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKiBwcml2ID0gYmFja0Zvcndh
cmRMaXN0LT5wcml2OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVtb3ZlZEl0ZW1zU2l6
ZTsgKytpKSB7CisgICAgICAgIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0l0ZW0gPSBzdGF0
aWNfY2FzdDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3
a1JlbW92ZWRJdGVtcywgaSkpOworICAgICAgICByZW1vdmVkSXRlbXMgPSBnX2xpc3RfcHJlcGVu
ZChyZW1vdmVkSXRlbXMsIGdfb2JqZWN0X3JlZihHX09CSkVDVChwcml2LT5pdGVtc01hcC5nZXQo
d2tJdGVtKS5nZXQoKSkpKTsKKyAgICAgICAgcHJpdi0+aXRlbXNNYXAucmVtb3ZlKHdrSXRlbSk7
CisgICAgfQorCisgICAgZ19zaWduYWxfZW1pdChiYWNrRm9yd2FyZExpc3QsIHNpZ25hbHNbQ0hB
TkdFRF0sIDAsIGFkZGVkSXRlbSwgcmVtb3ZlZEl0ZW1zLCBOVUxMKTsKKyAgICBnX2xpc3RfZnJl
ZV9mdWxsKHJlbW92ZWRJdGVtcywgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0
X3VucmVmKSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJy
ZW50X2l0ZW06CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlz
dAorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgaXRlbSBpbiBAYmFja19mb3J3YXJkX2xpc3Qu
CisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktpdFdlYkhpc3Rv
cnlJdGVtCisgKiAgICBvciAlTlVMTCBpZiBAYmFja19mb3J3YXJkX2xpc3QgaXMgZW1wdHkuCisg
Ki8KK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfY3VycmVudF9pdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVChi
YWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIHJldHVybiB3ZWJraXRCYWNrRm9yd2FyZExpc3RH
ZXRPckNyZWF0ZUl0ZW0oYmFja0ZvcndhcmRMaXN0LCBXS0JhY2tGb3J3YXJkTGlzdEdldEN1cnJl
bnRJdGVtKGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0KSk7Cit9CisKKy8qKgorICogd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW06CisgKiBAYmFja19mb3J3YXJkX2xp
c3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhh
dCBwcmVjZWRlcyB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKiAgICBwcmVjZWRpbmcgdGhl
IGN1cnJlbnQgaXRlbSBvciAlTlVMTC4KKyAqLworV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSog
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0oV2ViS2l0QmFja0ZvcndhcmRM
aXN0KiBiYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOworCisgICAgcmV0dXJu
IHdlYmtpdEJhY2tGb3J3YXJkTGlzdEdldE9yQ3JlYXRlSXRlbShiYWNrRm9yd2FyZExpc3QsIFdL
QmFja0ZvcndhcmRMaXN0R2V0QmFja0l0ZW0oYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3Qp
KTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRl
bToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgor
ICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IHN1Y2NlZWRzIHRoZSBjdXJyZW50IGl0ZW0uCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0KKyAqICAgIGZvbGxvd2luZyB0aGUgY3VycmVudCBpdGVtIG9yICVOVUxMLgorICovCitXZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfaXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFja0Zvcndh
cmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0R2V0T3JDcmVh
dGVJdGVtKGJhY2tGb3J3YXJkTGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkSXRlbShi
YWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCkpOworfQorCisvKioKKyAqIHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW06CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dl
YktpdEJhY2tGb3J3YXJkTGlzdAorICogQGluZGV4OiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KKyAq
CisgKiBSZXR1cm5zIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1
cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbQorICogICAgbG9jYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4
IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGl0ZW0uCisgKi8KK1dlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0qIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0oV2ViS2l0QmFja0Zv
cndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QsIGdpbnQgaW5kZXgpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCks
IDApOworCisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEdldE9yQ3JlYXRlSXRlbShi
YWNrRm9yd2FyZExpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0SXRlbUF0SW5kZXgoYmFja0Zvcndh
cmRMaXN0LT5wcml2LT53a0xpc3QsIGluZGV4KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9sZW5ndGg6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktp
dEJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnM6IHRoZSBsZW5ndGggb2YgQGJhY2tfZm9y
d2FyZF9saXN0LgorICovCitndWludCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0
aChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFja0ZvcndhcmRMaXN0
KSwgMCk7CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKiBwcml2ID0gYmFja0Zv
cndhcmRMaXN0LT5wcml2OworICAgIGd1aW50IGN1cnJlbnRJdGVtID0gd2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0oYmFja0ZvcndhcmRMaXN0KSA/IDEgOiAwOworICAg
IHJldHVybiBXS0JhY2tGb3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQocHJpdi0+d2tMaXN0KSAr
IFdLQmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZExpc3RDb3VudChwcml2LT53a0xpc3QpICsgY3Vy
cmVudEl0ZW07Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2xpc3Q6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAor
ICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJkTGlzdEl0ZW0p
ICh0cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMgcHJlY2VkaW5n
IHRoZSBjdXJyZW50IGl0ZW0uCisgKi8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2JhY2tfbGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFj
a0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICBndWludCBsaW1pdCA9IFdLQmFja0ZvcndhcmRMaXN0
R2V0QmFja0xpc3RDb3VudChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCk7CisgICAgcmV0
dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNrRm9yd2FyZExpc3RDb3B5
QmFja0xpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QsIGxpbWl0KSk7
Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0
aF9saW1pdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0
CisgKiBAbGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmlldmUKKyAqCisgKiBSZXR1
cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdC5CYWNrRm9yd2FyZExpc3RJdGVtKSAodHJhbnNmZXIg
Y29udGFpbmVyKTogYSAjR0xpc3Qgb2YKKyAqICAgIGl0ZW1zIHByZWNlZGluZyB0aGUgY3VycmVu
dCBpdGVtIGxpbWl0ZWQgYnkgQGxpbWl0LgorICovCitHTGlzdCogd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJh
Y2tGb3J3YXJkTGlzdCwgZ3VpbnQgbGltaXQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOworCisgICAg
cmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNrRm9yd2FyZExpc3RD
b3B5QmFja0xpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QsIGxpbWl0
KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xp
c3Q6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICoK
KyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJkTGlzdEl0ZW0pICh0
cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMgZm9sbG93aW5nIHRo
ZSBjdXJyZW50IGl0ZW0uCisgKi8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2ZvcndhcmRfbGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFj
a0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICBndWludCBsaW1pdCA9IFdLQmFja0ZvcndhcmRMaXN0
R2V0Rm9yd2FyZExpc3RDb3VudChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCk7CisgICAg
cmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNrRm9yd2FyZExpc3RD
b3B5Rm9yd2FyZExpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QsIGxp
bWl0KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3Rfd2l0aF9saW1pdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0Zv
cndhcmRMaXN0CisgKiBAbGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmlldmUKKyAq
CisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdC5CYWNrRm9yd2FyZExpc3RJdGVtKSAo
dHJhbnNmZXIgY29udGFpbmVyKTogYSAjR0xpc3Qgb2YKKyAqICAgIGl0ZW1zIGZvbGxvd2luZyB0
aGUgY3VycmVudCBpdGVtIGxpbWl0ZWQgYnkgQGxpbWl0LgorICovCitHTGlzdCogd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdChXZWJLaXRCYWNrRm9y
d2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCwgZ3VpbnQgbGltaXQpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCks
IDApOworCisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNr
Rm9yd2FyZExpc3RDb3B5Rm9yd2FyZExpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2
LT53a0xpc3QsIGxpbWl0KSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjRjZGIwODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaApAQCAtMCwwICsxLDg4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNl
cnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRCYWNrRm9yd2FyZExpc3RfaAorI2RlZmluZSBXZWJL
aXRCYWNrRm9yd2FyZExpc3RfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaD4KKyNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBF
X0JBQ0tfRk9SV0FSRF9MSVNUICAgICAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQkFDS19G
T1JXQVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdCkpCisjZGVmaW5lIFdFQktJVF9CQUNL
X0ZPUldBUkRfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChr
bGFzcyksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0ZvcndhcmRM
aXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfQkFDS19G
T1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQkFD
S19GT1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVf
QkFDS19GT1JXQVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzKSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdCAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRM
aXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzICAgV2ViS2l0
QmFja0ZvcndhcmRMaXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRM
aXN0UHJpdmF0ZSBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktp
dEJhY2tGb3J3YXJkTGlzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2Fy
ZExpc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfdHlwZSAgICAgICAgICAg
ICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0g
Kgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0gICAgICAgICAgICAo
V2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkg
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfaXRlbSAgICAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9y
d2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICoKK3dl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtICAgICAgICAgICAgKFdlYktp
dEJhY2tGb3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIFdlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW0gKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhf
aXRlbSAgICAgICAgICAgICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRf
bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdpbnQgICAgICAgICAgICAgICAgICAgaW5kZXgpOworV0VCS0lUX0FQSSBndWludAord2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGggICAgICAgICAgICAgICAgICAoV2ViS2l0
QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgR0xpc3Qg
Kgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QgICAgICAgICAgICAgICAo
V2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkg
R0xpc3QgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1p
dCAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAg
ICAgICAgICAgICAgbGltaXQpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0ICAgICAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJk
TGlzdCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQgKFdlYktpdEJhY2tG
b3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgIGxpbWl0
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Mjg5ODcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtLmNwcApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbS5oIgorCisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYWNrRm9yd2FyZExpc3RJdGVtLmg+CisjaW5jbHVkZSA8
V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtUHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVm
PiB3a0xpc3RJdGVtOworICAgIENTdHJpbmcgdXJpOworICAgIENTdHJpbmcgdGl0bGU7CisgICAg
Q1N0cmluZyBvcmlnaW5hbFVSSTsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbSwgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0sIEdfVFlQRV9JTklUSUFM
TFlfVU5PV05FRCkKKworc3RhdGljIHZvaWQgd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRF
TShvYmplY3QpLT5wcml2LT5+V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9pbml0KFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxpc3RJdGVtKQor
eworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKiBwcml2ID0gR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKGxpc3RJdGVtLCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElT
VF9JVEVNLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSk7CisgICAgbGlzdEl0ZW0t
PnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVBy
aXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1f
Y2xhc3NfaW5pdChXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3MqIGxpc3RJdGVtQ2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhsaXN0
SXRlbUNsYXNzKTsKKworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRCYWNrRm9y
d2FyZExpc3RJdGVtRmluYWxpemU7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUobGlz
dEl0ZW1DbGFzcywgc2l6ZW9mKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKSk7Cit9
CisKK3R5cGVkZWYgSGFzaE1hcDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIFdlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0qID4gSGlzdG9yeUl0ZW1zTWFwOworCitzdGF0aWMgSGlzdG9yeUl0ZW1z
TWFwJiBoaXN0b3J5SXRlbXNNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGlzdG9y
eUl0ZW1zTWFwLCBpdGVtc01hcCwgKCkpOworICAgIHJldHVybiBpdGVtc01hcDsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZpbmFsaXplZChncG9pbnRlciB3a0xp
c3RJdGVtLCBHT2JqZWN0KiBmaW5hbGl6ZWRMaXN0SXRlbSkKK3sKKyAgICBnX2Fzc2VydChHX09C
SkVDVChoaXN0b3J5SXRlbXNNYXAoKS5nZXQoc3RhdGljX2Nhc3Q8V0tCYWNrRm9yd2FyZExpc3RJ
dGVtUmVmPih3a0xpc3RJdGVtKSkpID09IGZpbmFsaXplZExpc3RJdGVtKTsKKyAgICBoaXN0b3J5
SXRlbXNNYXAoKS5yZW1vdmUoc3RhdGljX2Nhc3Q8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPih3
a0xpc3RJdGVtKSk7Cit9CisKK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdEJhY2tG
b3J3YXJkTGlzdEl0ZW1HZXRPckNyZWF0ZShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tMaXN0
SXRlbSkKK3sKKyAgICBpZiAoIXdrTGlzdEl0ZW0pCisgICAgICAgIHJldHVybiAwOworCisgICAg
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdEl0ZW0gPSBoaXN0b3J5SXRlbXNNYXAoKS5n
ZXQod2tMaXN0SXRlbSk7CisgICAgaWYgKGxpc3RJdGVtKQorICAgICAgICByZXR1cm4gbGlzdEl0
ZW07CisKKyAgICBsaXN0SXRlbSA9IFdFQktJVF9CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVF9JVEVNLCBOVUxMKSk7CisgICAg
bGlzdEl0ZW0tPnByaXYtPndrTGlzdEl0ZW0gPSB3a0xpc3RJdGVtOworCisgICAgZ19vYmplY3Rf
d2Vha19yZWYoR19PQkpFQ1QobGlzdEl0ZW0pLCB3ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtRmlu
YWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGdwb2ludGVyPihjb25z
dF9jYXN0PE9wYXF1ZVdLQmFja0ZvcndhcmRMaXN0SXRlbSo+KHdrTGlzdEl0ZW0pKSk7CisgICAg
aGlzdG9yeUl0ZW1zTWFwKCkuc2V0KHdrTGlzdEl0ZW0sIGxpc3RJdGVtKTsKKworICAgIHJldHVy
biBsaXN0SXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9n
ZXRfdXJpOgorICogQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW06IGEgI1dlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0KKyAqCisgKiBUaGlzIFVSSSBtYXkgZGlmZmVyIGZyb20gdGhlIG9yaWdpbmFsIFVS
SSBpZiB0aGUgcGFnZSB3YXMsCisgKiBmb3IgZXhhbXBsZSwgcmVkaXJlY3RlZCB0byBhIG5ldyBs
b2NhdGlvbi4KKyAqIFNlZSBhbHNvIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9v
cmlnaW5hbF91cmkoKS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgVVJJIG9mIEBiYWNrX2ZvcndhcmRf
bGlzdF9pdGVtLgorICovCitjb25zdCBnY2hhciogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fZ2V0X3VyaShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0SXRlbSkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShsaXN0
SXRlbSksIDApOworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUqIHByaXYg
PSBsaXN0SXRlbS0+cHJpdjsKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkkoQWRvcHRX
SywgV0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTChwcml2LT53a0xpc3RJdGVtLmdldCgpKSk7
CisgICAgaWYgKHRvSW1wbCh3a1VSSS5nZXQoKSktPnN0cmluZygpLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBwcml2LT51cmkgPSB0b0ltcGwod2tVUkkuZ2V0KCkpLT5zdHJp
bmcoKS51dGY4KCk7CisgICAgcmV0dXJuIHByaXYtPnVyaS5kYXRhKCk7Cit9CisKKy8qKgorICog
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlOgorICogQGJhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW06IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0KKyAqCisgKiBSZXR1cm5z
OiB0aGUgcGFnZSB0aXRsZSBvZiBAYmFja19mb3J3YXJkX2xpc3RfaXRlbS4KKyAqLworY29uc3Qg
Z2NoYXIqIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF90aXRsZShXZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtKiBsaXN0SXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShsaXN0SXRlbSksIDApOworCisgICAgV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUqIHByaXYgPSBsaXN0SXRlbS0+cHJpdjsKKyAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZShBZG9wdFdLLCBXS0JhY2tGb3J3YXJk
TGlzdEl0ZW1Db3B5VGl0bGUocHJpdi0+d2tMaXN0SXRlbS5nZXQoKSkpOworICAgIGlmICh0b0lt
cGwod2tUaXRsZS5nZXQoKSktPnN0cmluZygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBwcml2LT50aXRsZSA9IHRvSW1wbCh3a1RpdGxlLmdldCgpKS0+c3RyaW5nKCkudXRm
OCgpOworICAgIHJldHVybiBwcml2LT50aXRsZS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaToKKyAqIEBiYWNrX2Zvcndh
cmRfbGlzdF9pdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFNlZSBhbHNvIHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmkoKS4KKyAqCisgKiBSZXR1cm5zOiB0
aGUgb3JpZ2luYWwgVVJJIG9mIEBiYWNrX2ZvcndhcmRfbGlzdF9pdGVtLgorICovCitjb25zdCBn
Y2hhciogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaShXZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0SXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShsaXN0SXRlbSksIDApOworCisg
ICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUqIHByaXYgPSBsaXN0SXRlbS0+cHJp
djsKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tPcmlnaW5hbFVSSShBZG9wdFdLLCBXS0Jh
Y2tGb3J3YXJkTGlzdEl0ZW1Db3B5T3JpZ2luYWxVUkwocHJpdi0+d2tMaXN0SXRlbS5nZXQoKSkp
OworICAgIGlmICh0b0ltcGwod2tPcmlnaW5hbFVSSS5nZXQoKSktPnN0cmluZygpLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwcml2LT5vcmlnaW5hbFVSSSA9IHRvSW1wbCh3
a09yaWdpbmFsVVJJLmdldCgpKS0+c3RyaW5nKCkudXRmOCgpOworICAgIHJldHVybiBwcml2LT5v
cmlnaW5hbFVSSS5kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNmY2M3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaApA
QCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
ZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01Q
SUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRl
ZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
X2gKKyNkZWZpbmUgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbV9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSAgICAg
ICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVF9J
VEVNLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKSkKKyNkZWZpbmUgV0VCS0lUX0JBQ0tfRk9S
V0FSRF9MSVNUX0lURU1fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSwgV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNU
X0lURU0ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSkpCisjZGVmaW5lIFdFQktJVF9JU19CQUNL
X0ZPUldBUkRfTElTVF9JVEVNX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0pKQorI2RlZmluZSBX
RUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRFTV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVF9JVEVN
LCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbSAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbTsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3MgICBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbVByaXZhdGUgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGU7CisKK3N0
cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSB7CisgICAgR0luaXRpYWxseVVub3duZWQg
cGFyZW50OworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUgKnByaXY7Cit9
OworCitzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1DbGFzcyB7CisgICAgR0luaXRp
YWxseVVub3duZWRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdHlwZSAgICAgICAgICh2b2lkKTsKKwor
V0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9n
ZXRfdXJpICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0X2l0ZW0pOwor
CitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X2dldF90aXRsZSAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxpc3RfaXRlbSk7
CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdF9pdGVt
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxMmE5ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJk
TGlzdFByaXZhdGUuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJp
dmF0ZV9oCisjZGVmaW5lIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGVfaAorCisjaW5jbHVk
ZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0
LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisKK1dlYktpdEJhY2tGb3J3YXJkTGlz
dCogd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdLQmFja0ZvcndhcmRMaXN0UmVmKTsKK1dl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNy
ZWF0ZShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYpOwordm9pZCB3ZWJraXRCYWNrRm9yd2FyZExp
c3RDaGFuZ2VkKFdlYktpdEJhY2tGb3J3YXJkTGlzdCosIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJl
ZiB3a0FkZGVkSXRlbSwgV0tBcnJheVJlZiB3a1JlbW92ZWRJdGVtcyk7CisKKyNlbmRpZiAvLyBX
ZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnQuY3BwCmluZGV4IDJh
OTA5MDAuLjYxYjc5ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmNwcApAQCAtMjAsNiArMjAsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFdlYkxvYWRlckNsaWVudC5oIgog
CisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YktpdEVycm9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5oIgogI2luY2x1ZGUgIldlYktp
dFByaXZhdGUuaCIKQEAgLTUxLDcgKzUyLDcgQEAgZW51bSB7CiB9OwogCiBzdHJ1Y3QgX1dlYktp
dFdlYkxvYWRlckNsaWVudFByaXZhdGUgewotICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gdmll
dzsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OwogCiAgICAgZ2RvdWJsZSBlc3RpbWF0ZWRQcm9n
cmVzczsKIH07CkBAIC0xMzYsNiArMTM3LDEyIEBAIHN0YXRpYyB2b2lkIGRpZENoYW5nZVByb2dy
ZXNzKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogICAgIGdfb2JqZWN0
X25vdGlmeShHX09CSkVDVChjbGllbnRJbmZvKSwgImVzdGltYXRlZC1wcm9ncmVzcyIpOwogfQog
CitzdGF0aWMgdm9pZCBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmIHBhZ2UsIFdL
QmFja0ZvcndhcmRMaXN0SXRlbVJlZiBhZGRlZEl0ZW0sIFdLQXJyYXlSZWYgcmVtb3ZlZEl0ZW1z
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCog
Y2xpZW50ID0gV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKGNsaWVudEluZm8pOworICAgIHdlYmtp
dEJhY2tGb3J3YXJkTGlzdENoYW5nZWQod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRf
bGlzdChjbGllbnQtPnByaXYtPnZpZXcpLCBhZGRlZEl0ZW0sIHJlbW92ZWRJdGVtcyk7Cit9CisK
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYkxvYWRlckNsaWVudENvbnN0cnVjdGVkKEdPYmplY3QqIG9i
amVjdCkKIHsKICAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNsaWVudCA9IFdFQktJVF9XRUJf
TE9BREVSX0NMSUVOVChvYmplY3QpOwpAQCAtMTQzLDcgKzE1MCw3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdFdlYkxvYWRlckNsaWVudENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIAogICAgIFdL
UGFnZUxvYWRlckNsaWVudCBsb2FkZXJDbGllbnQgPSB7CiAgICAgICAgIGtXS1BhZ2VMb2FkZXJD
bGllbnRDdXJyZW50VmVyc2lvbiwKLSAgICAgICAgY2xpZW50LCAgLy8gY2xpZW50SW5mbworICAg
ICAgICBjbGllbnQsIC8vIGNsaWVudEluZm8KICAgICAgICAgZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZSwKICAgICAgICAgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUsCiAgICAgICAgIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JG
b3JGcmFtZSwKQEAgLTE2NiwxMSArMTczLDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkxvYWRl
ckNsaWVudENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgMCwgICAgICAgLy8g
ZGlkQmVjb21lVW5yZXNwb25zaXZlCiAgICAgICAgIDAsICAgICAgIC8vIGRpZEJlY29tZVJlc3Bv
bnNpdmUKICAgICAgICAgMCwgICAgICAgLy8gcHJvY2Vzc0RpZENyYXNoCi0gICAgICAgIDAsICAg
ICAgIC8vIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdAotICAgICAgICAwLCAgICAgICAvLyBzaG91
bGRHb1RvQmFja0ZvcndhcmRMaXN0SXRlbQotICAgICAgICAwICAgICAgICAvLyBkaWRGYWlsVG9J
bml0aWFsaXplUGx1Z2luCisgICAgICAgIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCwKKyAgICAg
ICAgMCwgLy8gc2hvdWxkR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0KKyAgICAgICAgMCAvLyBkaWRG
YWlsVG9Jbml0aWFsaXplUGx1Z2luCiAgICAgfTsKLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3
ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UocHJpdi0+dmlldy5n
ZXQoKSkpOworICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFn
ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShwcml2LT52aWV3KSk7CiAgICAgV0tQYWdlU2V0UGFnZUxv
YWRlckNsaWVudCh0b0FQSShwYWdlKSwgJmxvYWRlckNsaWVudCk7CiB9CiAKQEAgLTE4Miw3ICsx
ODksNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViTG9hZGVyQ2xpZW50TG9hZEZhaWxlZChX
ZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNsaWVudCwgYwogICAgICAgICByZXR1cm4gRkFMU0U7CiAK
ICAgICBHT3duUHRyPGNoYXI+IGh0bWxTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCI8aHRtbD48Ym9k
eT4lczwvYm9keT48L2h0bWw+IiwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9hbHRlcm5hdGVfaHRtbChjbGllbnQtPnByaXYtPnZpZXcuZ2V0KCksIGh0bWxTdHJp
bmcuZ2V0KCksIDAsIGZhaWxpbmdVUkkpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVy
bmF0ZV9odG1sKGNsaWVudC0+cHJpdi0+dmlldywgaHRtbFN0cmluZy5nZXQoKSwgMCwgZmFpbGlu
Z1VSSSk7CiAKICAgICByZXR1cm4gVFJVRTsKIH0KQEAgLTE5Myw3ICsyMDAsNyBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJMb2FkZXJDbGllbnRTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BJZCwgY29ucwogCiAgICAgc3dpdGNoIChwcm9wSWQpIHsKICAgICBjYXNlIFBST1Bf
V0VCX1ZJRVc6Ci0gICAgICAgIGNsaWVudC0+cHJpdi0+dmlldyA9IGFkb3B0R1JlZihXRUJLSVRf
V0VCX1ZJRVcoZ192YWx1ZV9kdXBfb2JqZWN0KHZhbHVlKSkpOworICAgICAgICBjbGllbnQtPnBy
aXYtPnZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKQEAgLTIwNiw3ICsyMTMs
NyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJMb2FkZXJDbGllbnRHZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbAogCiAgICAgc3dpdGNoIChwcm9wSWQpIHsKICAg
ICBjYXNlIFBST1BfV0VCX1ZJRVc6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
Y2xpZW50LT5wcml2LT52aWV3LmdldCgpKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCBjbGllbnQtPnByaXYtPnZpZXcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1Bf
RVNUSU1BVEVEX1BST0dSRVNTOgogICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdl
YmtpdF93ZWJfbG9hZGVyX2NsaWVudF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGNsaWVudCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cAppbmRleCA5NjcyMTA0Li5kNzBlY2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXcuaCIKIAorI2luY2x1ZGUgIldl
YktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYkxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgpAQCAtNDYsNiArNDcsNyBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdQcml2YXRlIHsKICAgICBDU3RyaW5nIGN1c3RvbVRleHRFbmNvZGluZzsKIAog
ICAgIEdSZWZQdHI8V2ViS2l0V2ViTG9hZGVyQ2xpZW50PiBsb2FkZXJDbGllbnQ7CisgICAgR1Jl
ZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsKIH07CiAKIEdfREVG
SU5FX1RZUEUoV2ViS2l0V2ViVmlldywgd2Via2l0X3dlYl92aWV3LCBXRUJLSVRfVFlQRV9XRUJf
VklFV19CQVNFKQpAQCAtNTgsNiArNjAsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29u
c3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2Vi
UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgd2Via2l0V2ViQ29udGV4dEdldFdL
Q29udGV4dChwcml2LT5jb250ZXh0KSwgMCk7CiAKICAgICBwcml2LT5sb2FkZXJDbGllbnQgPSBh
ZG9wdEdSZWYoV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9XRUJfTE9BREVSX0NMSUVOVCwgIndlYi12aWV3Iiwgd2ViVmlldywgTlVMTCkpKTsKKworICAg
IFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VC
X1ZJRVdfQkFTRSh3ZWJWaWV3KSk7CisgICAgcHJpdi0+YmFja0ZvcndhcmRMaXN0ID0gYWRvcHRH
UmVmKHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZShXS1BhZ2VHZXRCYWNrRm9yd2FyZExpc3Qo
dG9BUEkocGFnZSkpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcGFyYW1TcGVjKQpAQCAtMzgxLDMgKzM4NiwxOSBAQCB2b2lkIHdlYmtpdF93ZWJf
dmlld19zZXRfY3VzdG9tX2NoYXJzZXQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgZ2No
YXIqIGNoYQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0VuY29kaW5nTmFtZSA9IGNo
YXJzZXQgPyBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNoYXJzZXQpKSA6
IDA7CiAgICAgV0tQYWdlU2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh0b0FQSShwYWdlKSwgd2tF
bmNvZGluZ05hbWUuZ2V0KCkpOwogfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfYmFj
a19mb3J3YXJkX2xpc3Q6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBP
YnRhaW5zIHRoZSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2
ZW4gI1dlYktpdFdlYlZpZXcuIFRoZQorICogI1dlYktpdEJhY2tGb3J3YXJkTGlzdCBpcyBvd25l
ZCBieSB0aGUgI1dlYktpdFdlYlZpZXcuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiB0aGUgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICovCitXZWJLaXRCYWNrRm9yd2FyZExpc3Qq
IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldyksIDApOworCisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPmJhY2tGb3J3YXJkTGlzdC5n
ZXQoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuaAppbmRleCA5YWZkNWZhLi4xYjQ3MzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZu
ZGVmIFdlYktpdFdlYlZpZXdfaAogI2RlZmluZSBXZWJLaXRXZWJWaWV3X2gKIAorI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJMb2FkZXJDbGllbnQuaD4KQEAgLTY3LDUxICs2OCw1NCBA
QCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13
ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7Cit3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3R5cGUgICAgICAgICAgICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBHdGtXaWRnZXQg
Kgotd2Via2l0X3dlYl92aWV3X25ldyAgICAgICAgICAgICAgICAgKHZvaWQpOword2Via2l0X3dl
Yl92aWV3X25ldyAgICAgICAgICAgICAgICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgR3RrV2lk
Z2V0ICoKLXdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0ICAgIChXZWJLaXRXZWJDb250
ZXh0ICAgICAgKmNvbnRleHQpOword2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQgICAg
ICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICpjb250ZXh0KTsKIAogV0VCS0lUX0FQSSBXZWJLaXRX
ZWJDb250ZXh0ICoKLXdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKK3dlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCAg
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJ
IFdlYktpdFdlYkxvYWRlckNsaWVudCAqCi13ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGll
bnQgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2xvYWRlcl9jbGllbnQgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsK
IAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfc2V0X2xvYWRlcl9jbGllbnQgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmxvYWRlcl9jbGllbnQpOword2Vi
a2l0X3dlYl92aWV3X3NldF9sb2FkZXJfY2xpZW50ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktp
dFdlYkxvYWRlckNsaWVudCAqbG9hZGVyX2NsaWVudCk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Vi
a2l0X3dlYl92aWV3X2xvYWRfdXJpICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAq
d2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgICAgICAgICAgICp1cmkpOword2Via2l0X3dlYl92aWV3X2xvYWRfdXJpICAgICAgICAgICAg
ICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqdXJpKTsKIAogV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfbG9hZF9hbHRlcm5hdGVfaHRtbCAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKmNvbnRlbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICpiYXNlX3VyaSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKnVu
cmVhY2hhYmxlX3VyaSk7Ci0KK3dlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1sICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKmNvbnRlbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKmJh
c2VfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgICAgICAgICAgICp1bnJlYWNoYWJsZV91cmkpOwogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
d2ViX3ZpZXdfcmVsb2FkICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJf
dmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkICAgICAgICAgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3Zp
ZXdfcmVsb2FkX2J5cGFzc19jYWNoZSAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7
Cit3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkX2J5cGFzc19jYWNoZSAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfZ29f
YmFjayAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJr
aXRfd2ViX3ZpZXdfZ29fYmFjayAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
KndlYl92aWV3KTsKKwogCiBXRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfd2ViX3ZpZXdfY2Fu
X2dvX2JhY2sgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJr
aXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
KndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2Fy
ZCAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2Vi
X3ZpZXdfZ29fZm9yd2FyZCAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92
aWV3KTsKKworV0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3QgKgord2Via2l0X3dlYl92
aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmll
dyk7CiAKIFdFQktJVF9BUEkgZ2Jvb2xlYW4KLXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2Fy
ZCAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKK3dlYmtpdF93ZWJfdmll
d19jYW5fZ29fZm9yd2FyZCAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcp
OwogCiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKIHdlYmtpdF93ZWJfdmlld19nZXRfY3VzdG9t
X2NoYXJzZXQgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5k
ZXggMjg1NjBjMC4uZDkxMmI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTIsNyArMiw4IEBAIFRFU1RfUFJP
R1MgKz0gXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dCBc
CiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3IFwKIAlQcm9ncmFt
cy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudCBcCi0JUHJvZ3JhbXMv
V2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncworCVByb2dyYW1zL1dlYktpdDJBUElU
ZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0
QmFja0ZvcndhcmRMaXN0CiAKIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRFU1RfUFJPR1MpCiB3ZWJr
aXQyX3Rlc3RzX2NwcGZsYWdzID0gXApAQCAtNjgsMyArNjksMTAgQEAgUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0aW5nc19TT1VSQ0VTID0gXAogUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0aW5nc19DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19j
cHBmbGFncykKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0U2V0dGluZ3NfTERB
REQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dFdlYktpdFNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKKworUHJv
Z3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfU09VUkNFUyA9IFwKKyAg
ICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJhY2tGb3J3
YXJkTGlzdC5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0
X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQp
CitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREZMQUdTID0g
JCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAKaW5kZXggODAy
MTQwYi4uYmFjMTEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAKQEAgLTc0LDYgKzc0LDggQEAg
TG9hZFRyYWNraW5nVGVzdDo6TG9hZFRyYWNraW5nVGVzdCgpCiAgICAgZ19zaWduYWxfY29ubmVj
dChjbGllbnQsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNoZWRDYWxsYmFj
ayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9hZC1mYWlsZWQiLCBH
X0NBTExCQUNLKGxvYWRGYWlsZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoY2xpZW50LCAibm90aWZ5Ojplc3RpbWF0ZWQtcHJvZ3Jlc3MiLCBHX0NBTExCQUNLKGVzdGlt
YXRlZFByb2dyZXNzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisKKyAgICB3YXRjaE9iamVjdChH
X09CSkVDVChjbGllbnQpKTsKIH0KIAogTG9hZFRyYWNraW5nVGVzdDo6fkxvYWRUcmFja2luZ1Rl
c3QoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41ZTkzZTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTAsMCArMSwy
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgIldlYktp
dFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+
CisKKy8vIEJhY2sgZm9yd2FyZCBsaXN0IGxpbWl0IGlzIDEwMCBieSBkZWZhdWx0Lgorc3RhdGlj
IGNvbnN0IHNpemVfdCB3a0JhY2tGb3J3YXJkTGlzdExpbWl0ID0gMTAwOworCitzdGF0aWMgV2Vi
S2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291
cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFz
aFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQsIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyht
c2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGNoYXIqIGJvZHkgPSBnX3N0cmR1cF9wcmludGYo
IjxodG1sPjx0aXRsZT4lczwvdGl0bGU+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiIsIHBhdGggKyAx
LCBwYXRoICsgMSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfVEFLRSwgYm9keSwgc3RybGVuKGJvZHkpKTsKKworICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK2NsYXNzIEJh
Y2tGb3J3YXJkTGlzdFRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEJhY2tGb3J3YXJkTGlzdFRlc3QpOworCisgICAgZW51
bSB7CisgICAgICAgIEJhY2t3YXJkLAorICAgICAgICBGb3J3YXJkCisgICAgfTsKKworICAgIGVu
dW0geworICAgICAgICBDdXJyZW50SXRlbSAgPSAxIDw8IDAsCisgICAgICAgIEFkZGVkSXRlbSAg
ICA9IDEgPDwgMSwKKyAgICAgICAgUmVtb3ZlZEl0ZW1zID0gMSA8PCAyCisgICAgfTsKKworICAg
IHN0YXRpYyB2b2lkIGNoZWNrSXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtLCBj
b25zdCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiB1cmksIGNvbnN0IGdjaGFyKiBvcmlnaW5h
bFVSSSkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW0pOworICAgICAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3VyaShpdGVtKSwgPT0sIHVy
aSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9nZXRfdGl0bGUoaXRlbSksID09ICwgdGl0bGUpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaShpdGVtKSwgPT0s
IG9yaWdpbmFsVVJJKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja0l0ZW1JbmRleChX
ZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIC0xKSA9PSB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbShsaXN0KSk7CisgICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgMCkgPT0gd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0obGlzdCkpOworICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEpID09IHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGxpc3QpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBjaGVja0xpc3QoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0LCBndWlu
dCB0eXBlLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiogaXRlbXMsIGd1aW50IG5JdGVtcykK
KyAgICB7CisgICAgICAgIEdMaXN0KiBsaXN0SXRlbXMgPSB0eXBlID09IEJhY2tGb3J3YXJkTGlz
dFRlc3Q6OkJhY2t3YXJkID8gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Qo
bGlzdCkgOgorICAgICAgICAgICAgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3QobGlzdCk7CisgICAgICAgIGdfYXNzZXJ0KGxpc3RJdGVtcyk7CisKKyAgICAgICAgZ3Vp
bnQgaSA9IDA7CisgICAgICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gbGlzdEl0ZW1zOyBsaXN0
SXRlbTsgbGlzdEl0ZW0gPSBnX2xpc3RfbmV4dChsaXN0SXRlbSksIGkrKykgeworICAgICAgICAg
ICAgZ19hc3NlcnRfY21wdWludChpLCA8LCBuSXRlbXMpOworICAgICAgICAgICAgZ19hc3NlcnQo
bGlzdEl0ZW0tPmRhdGEgPT0gaXRlbXNbaV0pOworICAgICAgICB9CisgICAgICAgIGdfbGlzdF9m
cmVlKGxpc3RJdGVtcyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYmFja0ZvcndhcmRMaXN0
Q2hhbmdlZChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QsIFdlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0qIGFkZGVkSXRlbSwgR0xpc3QqIHJlbW92ZWRJdGVtcywgQmFja0ZvcndhcmRMaXN0VGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1faGFzQ2hhbmdlZCA9IHRydWU7CisKKyAg
ICAgICAgaWYgKHRlc3QtPm1fY2hhbmdlZEZsYWdzICYgQmFja0ZvcndhcmRMaXN0VGVzdDo6QWRk
ZWRJdGVtKSB7CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJ
U1RfSVRFTShhZGRlZEl0ZW0pKTsKKyAgICAgICAgICAgIHRlc3QtPndhdGNoT2JqZWN0KEdfT0JK
RUNUKGFkZGVkSXRlbSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFh
ZGRlZEl0ZW0pOworCisgICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OlJlbW92ZWRJdGVtcykgeworICAgICAgICAgICAgZ19hc3NlcnQocmVtb3Zl
ZEl0ZW1zKTsKKyAgICAgICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSByZW1vdmVkSXRlbXM7IGl0
ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oaXRlci0+ZGF0YSkpOworICAgICAgICAgICAgICAg
IGlmICh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKQorICAgICAgICAgICAgICAgICAgICBn
X2Fzc2VydChnX2xpc3RfZmluZCh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zLCBpdGVyLT5k
YXRhKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnX2Fz
c2VydCghcmVtb3ZlZEl0ZW1zKTsKKyAgICB9CisKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0KCkK
KyAgICAgICAgOiBtX2xpc3Qod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCht
X3dlYlZpZXcpKQorICAgICAgICAsIG1fY2hhbmdlZEZsYWdzKDApCisgICAgICAgICwgbV9oYXND
aGFuZ2VkKGZhbHNlKQorICAgICAgICAsIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMoMCkKKyAgICB7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9saXN0LCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0so
YmFja0ZvcndhcmRMaXN0Q2hhbmdlZCksIHRoaXMpOworICAgICAgICB3YXRjaE9iamVjdChHX09C
SkVDVChtX2xpc3QpKTsKKyAgICB9CisKKyAgICB+QmFja0ZvcndhcmRMaXN0VGVzdCgpCisgICAg
eworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9saXN0LCBH
X1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lk
IHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpCisgICAgeworICAgICAgICBtX2hhc0NoYW5nZWQgPSBm
YWxzZTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisgICAgICAgIGdfYXNzZXJ0KG1faGFzQ2hhbmdlZCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0
VW50aWxMb2FkRmluaXNoZWRBbmRDaGVja1JlbW92ZWRJdGVtcyhHTGlzdCogcmVtb3ZlZEl0ZW1z
KQorICAgIHsKKyAgICAgICAgbV9leHBlY3RlZFJlbW92ZWRJdGVtcyA9IHJlbW92ZWRJdGVtczsK
KyAgICAgICAgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgICAgIG1fZXhwZWN0ZWRSZW1v
dmVkSXRlbXMgPSAwOworICAgIH0KKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbV9saXN0
OworICAgIGd1bG9uZyBtX2NoYW5nZWRGbGFnczsKKyAgICBib29sIG1faGFzQ2hhbmdlZDsKKyAg
ICBHTGlzdCogbV9leHBlY3RlZFJlbW92ZWRJdGVtczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RC
YWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKEJhY2tGb3J3YXJkTGlzdFRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbXNbMV07CisK
KyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmll
dykpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQodGVzdC0+
bV93ZWJWaWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3Qt
Pm1fbGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zv
cndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVj
a0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7CisK
KyAgICBDU3RyaW5nIHVyaVBhZ2UxID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL1BhZ2UxIik7
CisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50
SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkodGVzdC0+bV93ZWJWaWV3LCB1cmlQYWdlMS5kYXRhKCkpOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3Qp
LCA9PSwgMSk7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBhZ2UxID0gd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KTsKKyAg
ICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0oaXRlbVBhZ2UxLCAiUGFnZTEiLCB1cmlQ
YWdlMS5kYXRhKCksIHVyaVBhZ2UxLmRhdGEoKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3Qp
KTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3Qp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdCh0
ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7CisKKyAgICBDU3RyaW5nIHVyaVBhZ2UyID0g
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL1BhZ2UyIik7CisgICAgdGVzdC0+bV9jaGFuZ2VkRmxh
Z3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRl
c3Q6OkFkZGVkSXRlbTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodGVzdC0+bV93ZWJW
aWV3LCB1cmlQYWdlMi5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2Vi
VmlldykpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQodGVz
dC0+bV93ZWJWaWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAyKTsKKyAgICBXZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtKiBpdGVtUGFnZTIgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNo
ZWNrSXRlbShpdGVtUGFnZTIsICJQYWdlMiIsIHVyaVBhZ2UyLmRhdGEoKSwgdXJpUGFnZTIuZGF0
YSgpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRl
bSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdlMSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tG
b3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7CisgICAgaXRlbXNb
MF0gPSBpdGVtUGFnZTE7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3Qt
Pm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QmFja3dhcmQsIGl0ZW1zLCAxKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+
bV9saXN0KSk7CisKKyAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlzdFRl
c3Q6OkN1cnJlbnRJdGVtOworICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKHRlc3QtPm1fd2Vi
Vmlldyk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmlldykpOworICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsK
KworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5n
dGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOworICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMSA9PSB3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAg
ICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2UxIiwgdXJpUGFnZTEuZGF0YSgp
LCB1cmlQYWdlMS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdl
Mik7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Qo
dGVzdC0+bV9saXN0KSk7CisgICAgaXRlbXNbMF0gPSBpdGVtUGFnZTI7CisgICAgQmFja0Zvcndh
cmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6
Rm9yd2FyZCwgaXRlbXMsIDEpOworCisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9y
d2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2Fy
ZCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmll
dykpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQodGVzdC0+
bV93ZWJWaWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAyKTsKKyAgICBnX2Fzc2VydChpdGVt
UGFnZTIgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+
bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCksICJQYWdlMiIsIHVy
aVBhZ2UyLmRhdGEoKSwgdXJpUGFnZTIuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdlMSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVt
KHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4
KHRlc3QtPm1fbGlzdCk7CisgICAgaXRlbXNbMF0gPSBpdGVtUGFnZTE7CisgICAgQmFja0Zvcndh
cmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6
QmFja3dhcmQsIGl0ZW1zLCAxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKEJhY2tGb3J3YXJkTGlzdFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3a0JhY2tGb3J3
YXJkTGlzdExpbWl0OyBpKyspIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVw
X3ByaW50ZigiL1BhZ2UlZCIsIGkpKTsKKyAgICAgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBC
YWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFk
ZGVkSXRlbTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHRlc3QtPm1fd2ViVmll
dywga1NlcnZlci0+Z2V0VVJJRm9yUGF0aChwYXRoLmdldCgpKS5kYXRhKCkpOworICAgICAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICB9CisKKyAgICBnX2Fzc2VydF9jbXB1
aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09
LCB3a0JhY2tGb3J3YXJkTGlzdExpbWl0KTsKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
KiBpdGVtUGFnZUZpcnN0ID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbSh0
ZXN0LT5tX2xpc3QsIC0od2tCYWNrRm9yd2FyZExpc3RMaW1pdCAtIDEpKTsKKyAgICBHT3duUHRy
PEdMaXN0PiByZW1vdmVkSXRlbXMoZ19saXN0X3ByZXBlbmQoMCwgaXRlbVBhZ2VGaXJzdCkpOwor
CisgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIsIHdrQmFj
a0ZvcndhcmRMaXN0TGltaXQpKTsKKyAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVt
IHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6UmVtb3ZlZEl0ZW1zOworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3VyaSh0ZXN0LT5tX3dlYlZpZXcsIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgocGF0aC5n
ZXQoKSkuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWRBbmRDaGVja1Jl
bW92ZWRJdGVtcyhyZW1vdmVkSXRlbXMuZ2V0KCkpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgd2tC
YWNrRm9yd2FyZExpc3RMaW1pdCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2Vy
dmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2Fs
bGJhY2spOworCisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3Qi
LCAibmF2aWdhdGlvbiIsIHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKTsKKyAgICBCYWNr
Rm9yd2FyZExpc3RUZXN0OjphZGQoIkJhY2tGb3J3YXJkTGlzdCIsICJsaXN0LWxpbWl0LWFuZC1j
YWNoZSIsIHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKTsKK30KKwordm9pZCBhZnRl
ckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oCmluZGV4IDJhYWMxOGMuLmIzY2Fl
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RNYWluLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dE1haW4uaApAQCAtMjAsOCArMjAsOSBAQAogI2lmbmRlZiBUZXN0TWFpbl9oCiAjZGVmaW5lIFRl
c3RNYWluX2gKIAotI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dPd25QdHIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IYXNoU2V0Lmg+CiAKICNkZWZpbmUgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDbGFzc05h
bWUpIFwKICAgICBzdGF0aWMgdm9pZCBzZXRVcChDbGFzc05hbWUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkgXApAQCAtNDIsNiArNDMsMjQgQEAgY2xhc3MgVGVzdAogewogcHVibGljOgog
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVGVzdCk7CisKKyAgICB+VGVzdCgpCisgICAgewor
ICAgICAgICBnX2Fzc2VydChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgb2JqZWN0RmluYWxpemVkKFRlc3QqIHRlc3QsIEdPYmplY3QqIGZpbmFs
aXplZE9iamVjdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fd2F0Y2hlZE9iamVjdHMucmVtb3Zl
KGZpbmFsaXplZE9iamVjdCk7CisgICAgfQorCisgICAgdm9pZCB3YXRjaE9iamVjdChHT2JqZWN0
KiBvYmplY3QpCisgICAgeworICAgICAgICBtX3dhdGNoZWRPYmplY3RzLmFkZChvYmplY3QpOwor
ICAgICAgICBnX29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJlaW50ZXJwcmV0X2Nhc3Q8R1dlYWtO
b3RpZnk+KG9iamVjdEZpbmFsaXplZCksIHRoaXMpOworICAgIH0KKworICAgIEhhc2hTZXQ8R09i
amVjdCo+IG1fd2F0Y2hlZE9iamVjdHM7CiB9OwogCiAjZW5kaWYgLy8gVGVzdE1haW5faApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rl
c3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rl
c3QuY3BwCmluZGV4IGYzODRkM2IuLmJkMGVjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKQEAgLTI0LDYgKzI0
LDcgQEAgV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKICAgICA6IG1fd2ViVmlldyhXRUJLSVRf
V0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25ldygpKSkpCiAgICAg
LCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKIHsKKyAgICB3YXRjaE9iamVj
dChHX09CSkVDVChtX3dlYlZpZXcpKTsKIH0KIAogV2ViVmlld1Rlc3Q6On5XZWJWaWV3VGVzdCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJW
aWV3VGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuaAppbmRleCBjYzMyOGE1Li4xYTE2YjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKQEAgLTIzLDcgKzIzLDcg
QEAKICNpbmNsdWRlICJUZXN0TWFpbi5oIgogI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgog
Ci1jbGFzcyBXZWJWaWV3VGVzdCB7CitjbGFzcyBXZWJWaWV3VGVzdDogcHVibGljIFRlc3Qgewog
cHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2ViVmlld1Rlc3QpOwogICAgIFdl
YlZpZXdUZXN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgK
aW5kZXggNTQwYzZlNi4uZmEzZTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDIuaApAQCAtMjMsNiArMjMsOCBAQAogCiAjZGVmaW5lIF9fV0VCS0lUMl9IX0lO
U0lERV9fCiAKKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RGVmaW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RW51bVR5cGVz
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFcnJvci5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKaW5kZXggYzNhMTc4
Ni4uMDI4NmU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mm1hcnNoYWwubGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQybWFyc2hhbC5saXN0CkBAIC0xLDMgKzEsNCBAQAogQk9PTEVBTjpTVFJJTkcsUE9J
TlRFUgogQk9PTEVBTjpWT0lECitWT0lEOk9CSkVDVCxQT0lOVEVSCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111595</attachid>
            <date>2011-10-19 05:14:50 -0700</date>
            <delta_ts>2011-10-20 05:52:01 -0700</delta_ts>
            <desc>Another update</desc>
            <filename>wk2-bf-list6.diff</filename>
            <type>text/plain</type>
            <size>60346</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2YjM1ODVmLi4zY2M5ZWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUg
QEAKKzIwMTEtMTAtMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYmFjayBmb3J3YXJk
IGxpc3QgZm9yIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21w
aWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplKToK
KyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pbml0KToKKyAgICAgICAgKHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3
YXJkTGlzdEdldE9yQ3JlYXRlSXRlbSk6IEhlbHBlciBmdW5jdGlvbiB0aGF0CisgICAgICAgIGNy
ZWF0ZXMgYSBuZXcgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSBmb3IgdGhlIGdpdmVuCisgICAg
ICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0gb3IgcmV0dXJucyBpdCBmcm9tIHRoZSBjYWNoZSBp
ZiBpdCdzCisgICAgICAgIGFscmVhZHkgY2FjaGVkLgorICAgICAgICAod2Via2l0QmFja0Zvcndh
cmRMaXN0Q3JlYXRlTGlzdCk6IEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEKKyAgICAgICAg
V0tBcnJheSBvZiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtcyBpbnRvIGEgR0xpc3Qgb2YKKyAgICAg
ICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbXMuCisgICAgICAgICh3ZWJraXRCYWNrRm9yd2Fy
ZExpc3RDcmVhdGUpOiBDcmVhdGUgYSBuZXcgV2ViS2l0QmFja0ZvcndhcmRMaXN0LgorICAgICAg
ICAod2Via2l0QmFja0ZvcndhcmRMaXN0Q2hhbmdlZCk6IEVtaXRzIGNoYW5nZWQgc2lnbmFsIHdo
ZW4gdGhlIGJhY2sKKyAgICAgICAgZm9yd2FyZCBsaXN0IGNoYW5nZXMuCisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSk6CisgICAgICAgICh3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X250aF9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfbGVuZ3RoKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFj
a19saXN0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0
X3dpdGhfbGltaXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2xpc3QpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3Rfd2l0aF9saW1pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3
YXJkTGlzdEl0ZW1GaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2NsYXNz
X2luaXQpOgorICAgICAgICAoaGlzdG9yeUl0ZW1zTWFwKTogR2xvYmFsIGNhY2hlIGZvciBXZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtcy4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0
ZW1GaW5hbGl6ZWQpOgorICAgICAgICAod2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUdldE9yQ3Jl
YXRlKTogSGVscGVyIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgY3JlYXRlcyBhIG5ldyBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtIGZvciB0aGUgZ2l2ZW4KKyAgICAgICAgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSBvciByZXR1cm5zIGl0IGZyb20gdGhlIGdsb2JhbCBjYWNoZSBpZiBpdCdzCisgICAg
ICAgIGFscmVhZHkgY2FjaGVkLgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fZ2V0X3VyaSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRf
dGl0bGUpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdp
bmFsX3VyaSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChkaWRDaGFuZ2VCYWNrRm9yd2Fy
ZExpc3QpOgorICAgICAgICAod2Via2l0V2ViTG9hZGVyQ2xpZW50Q29uc3RydWN0ZWQpOgorICAg
ICAgICAod2Via2l0V2ViTG9hZGVyQ2xpZW50TG9hZEZhaWxlZCk6CisgICAgICAgICh3ZWJraXRX
ZWJMb2FkZXJDbGllbnRTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRXZWJMb2FkZXJDbGll
bnRHZXRQcm9wZXJ0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Vi
a2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0dOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xv
YWRUcmFja2luZ1Rlc3QuY3BwOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6TG9hZFRyYWNr
aW5nVGVzdCk6IFdhdGNoIHRoZSBsb2FkZXIgY2xpZW50IHRvCisgICAgICAgIG1ha2Ugc3VyZSBp
dCdzIG5vdCBsZWFrZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJh
Y2tGb3J3YXJkTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAg
ICAgICAodGVzdEJhY2tGb3J3YXJkTGlzdE5hdmlnYXRpb24pOgorICAgICAgICAodGVzdEJhY2tG
b3J3YXJkTGlzdExpbWl0QW5kQ2FjaGUpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAg
KGFmdGVyQWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5o
OgorICAgICAgICAoVGVzdDo6flRlc3QpOiBDaGVja3MgdGhlcmUgYXJlIG5vIG9iamVjdHMgbGVh
a2VkLgorICAgICAgICAoVGVzdDo6b2JqZWN0RmluYWxpemVkKTogQ2FsbGJhY2sgY2FsbGVkIHdo
ZW4gYSBHT2JqZWN0IGlzCisgICAgICAgIGRlbGV0ZWQsIHVzZWQgdG8gcmVtb3ZlIHRoZSB3YXRj
aGVkIG9iamVjdCB0aGUgbGlzdC4KKyAgICAgICAgKFRlc3Q6OndhdGNoT2JqZWN0KTogQWRkIGFu
IG9iamVjdCB0byB0aGUgbGlzdCBmbyB3YXRjaGVkCisgICAgICAgIG9iamVjdHMgYW5kIGFkZCBh
IHdlYWsgcG9pbnRlciB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCB3aGVuIHRoZQorICAgICAg
ICBvYmplY3QgaXMgZmluYWxpemVkLiBJZiB0aGVyZSBhcmVuJ3Qgb2JqZWN0cyBsZWFrZWQsIHRo
ZSBsaXN0CisgICAgICAgIHNob3VsZCBiZSBlbXB0eSB3aGVuIHRoZSB0ZXN0IGZpbmlzaGVzLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcDoKKyAgICAg
ICAgKFdlYlZpZXdUZXN0OjpXZWJWaWV3VGVzdCk6IFdhdGNoIHRoZSB3ZWIgdmlldyB0byBtYWtl
IHN1cmUgaXQncworICAgICAgICBub3QgbGVha2VkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1dlYlZpZXdUZXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3Q6
CisKIDIwMTEtMTAtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtVTklYXSBVc2UgU09DS19TRVFQQUNLRVQgd2hlbiBhdmFpbGFibGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0KaW5kZXggNzNlY2YwNi4uZmY1Yzc4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KQEAgLTcxLDYgKzcxLDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9W
RVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9IRUEKIAogbGlid2Via2l0
Mmd0a2luY2x1ZGVkaXIgPSAkKGxpYndlYmtpdGd0a2luY2x1ZGVkaXIpL3dlYmtpdDIKIHdlYmtp
dDJndGtfaGVhZGVycyA9IFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdC5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdEl0ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREZWZpbmVzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3Iu
aCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXApA
QCAtNDc0LDYgKzQ3NiwxMSBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZF
UlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvY3BwL1dLUmV0YWluUHRyLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAgXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCisJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5j
cHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJk
TGlzdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RGVmaW5lcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJv
ci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEJhY2tGb3J3YXJkTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NGQzNjhhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0QmFja0Zvcndh
cmRMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKKyNpbmNsdWRlIDxX
ZWJLaXQyL1dLQmFja0ZvcndhcmRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgorCisvKioKKyAqIFNFQ1RJT046IFdlYktpdEJhY2tGb3J3YXJkTGlzdAorICogQFNob3J0
X2Rlc2NyaXB0aW9uOiBMaXN0IG9mIHZpc2l0ZWQgcGFnZXMKKyAqIEBUaXRsZTogV2ViS2l0QmFj
a0ZvcndhcmRMaXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3LCAjV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbQorICoKKyAqIFdlYktpdEJhY2tGb3J3YXJkTGlzdCBtYWludGFpbnMgYSBs
aXN0IG9mIHZpc2l0ZWQgcGFnZXMgdXNlZCB0bworICogdXNlZCB0byBuYXZpZ2F0ZSB0byByZWNl
bnQgcGFnZXMuIEl0ZW1zIGFyZSBpbnNlcnRlZCBpbiB0aGUgbGlzdAorICogaW4gdGhlIG9yZGVy
IHRoZXkgYXJlIHZpc2l0ZWQuCisgKgorICogV2ViS2l0QmFja0ZvcndhcmRMaXN0IGFsc28gbWFp
bnRhaW5zIHRoZSBub3Rpb24gb2YgdGhlIGN1cnJlbnQgaXRlbQorICogKHdoaWNoIGlzIGFsd2F5
cyBhdCBpbmRleCAwKSwgdGhlIHByZWNlZGluZyBpdGVtICh3aGljaCBpcyBhdCBpbmRleCAtMSks
CisgKiBhbmQgdGhlIGZvbGxvd2luZyBpdGVtICh3aGljaCBpcyBhdCBpbmRleCAxKS4KKyAqIE1l
dGhvZHMgd2Via2l0X3dlYl92aWV3X2dvX2JhY2soKSBhbmQgd2Via2l0X3dlYl92aWV3X2dvX2Zv
cndhcmQoKSBtb3ZlCisgKiB0aGUgY3VycmVudCBpdGVtIGJhY2t3YXJkIG9yIGZvcndhcmQgYnkg
b25lLiBNZXRob2QKKyAqIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtKCkgc2V0cyB0aGUgY3VycmVudCBpdGVtIHRvIHRoZQorICogc3BlY2lmaWVkIGl0ZW0uIEFs
bCBvdGhlciBtZXRob2RzIHJldHVybmluZyAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbTwhLS0g
LS0+cworICogZG8gbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgaXRlbSwgdGhl
eSBqdXN0IHJldHVybiB0aGUgcmVxdWVzdGVkCisgKiBpdGVtIG9yIGl0ZW1zLgorICovCisKK2Vu
dW0geworICAgIENIQU5HRUQsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKwordHlwZWRlZiBIYXNo
TWFwPFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiwgR1JlZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtPiA+IEJhY2tGb3J3YXJkTGlzdEl0ZW1zTWFwOworCitzdHJ1Y3QgX1dlYktpdEJhY2tG
b3J3YXJkTGlzdFByaXZhdGUgeworICAgIFdLQmFja0ZvcndhcmRMaXN0UmVmIHdrTGlzdDsKKyAg
ICBCYWNrRm9yd2FyZExpc3RJdGVtc01hcCBpdGVtc01hcDsKK307CisKK3N0YXRpYyBndWludCBz
aWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRCYWNr
Rm9yd2FyZExpc3QsIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdCwgR19UWVBFX09CSkVDVCkKKwor
c3RhdGljIHZvaWQgd2Via2l0QmFja0ZvcndhcmRMaXN0RmluYWxpemUoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdFQktJVF9CQUNLX0ZPUldBUkRfTElTVChvYmplY3QpLT5wcml2LT5+V2ViS2l0
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaW5pdChXZWJLaXRCYWNrRm9yd2FyZExp
c3QqIGxpc3QpCit7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSogcHJpdiA9IEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShsaXN0LCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRf
TElTVCwgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSk7CisgICAgbGlzdC0+cHJpdiA9IHBy
aXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0KFdlYktpdEJh
Y2tGb3J3YXJkTGlzdENsYXNzKiBsaXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhsaXN0Q2xhc3MpOworCisgICAgZ09iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplOworCisgICAgLyoqCisg
ICAgICogV2ViS2l0QmFja0ZvcndhcmRMaXN0OjpjaGFuZ2VkOgorICAgICAqIEBiYWNrX2Zvcndh
cmRfbGlzdDogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3Qgb24gd2hpY2ggdGhlIHNpZ25hbCB3
YXMgZW1pdHRlZAorICAgICAqIEBpdGVtX2FkZGVkOiAoYWxsb3ctbm9uZSk6IHRoZSAjV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbSBhZGRlZCBvciAlTlVMTAorICAgICAqIEBpdGVtc19yZW1vdmVk
OiBhICNHTGlzdCBvZiAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbTwhLS0gLS0+cworICAgICAq
CisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIEBiYWNrX2ZvcndhcmRfbGlzdCBj
aGFuZ2VzLiBUaGlzIGhhcHBlbnMKKyAgICAgKiB3aGVuIHRoZSBjdXJyZW50IGl0ZW0gaXMgdXBk
YXRlZCwgYSBuZXcgaXRlbSBpcyBhZGRlZCBvciBvbmUgb3IgbW9yZQorICAgICAqIGl0ZW1zIGFy
ZSByZW1vdmVkLiBOb3RlIHRoYXQgYm90aCBAaXRlbV9hZGRlZCBhbmQgQGl0ZW1zX3JlbW92ZWQg
Y2FuCisgICAgICogJU5VTEwgd2hlbiBvbmx5IHRoZSBjdXJyZW50IGl0ZW0gaXMgdXBkYXRlZC4g
SXRlbXMgYXJlIG9ubHkgcmVtb3ZlZAorICAgICAqIHdoZW4gdGhlIGxpc3QgaXMgY2xlYXJlZCBv
ciB0aGUgbWF4aW11bSBpdGVtcyBsaW1pdCBpcyByZWFjaGVkLgorICAgICAqLworICAgIHNpZ25h
bHNbQ0hBTkdFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImNoYW5nZWQiLAorICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MobGlzdENsYXNzKSwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX09CSkVDVF9QT0lOVEVS
LAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVF9JVEVNLAorICAgICAgICAgICAgICAg
ICAgICAgR19UWVBFX1BPSU5URVIpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGxp
c3RDbGFzcywgc2l6ZW9mKFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUpKTsKK30KKworc3Rh
dGljIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEdldE9y
Q3JlYXRlSXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0
SXRlbVJlZiB3a0xpc3RJdGVtKQoreworICAgIGlmICghd2tMaXN0SXRlbSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKiBwcml2ID0gbGlzdC0+
cHJpdjsKKyAgICBHUmVmUHRyPFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0+IGxpc3RJdGVtID0g
cHJpdi0+aXRlbXNNYXAuZ2V0KHdrTGlzdEl0ZW0pOworICAgIGlmIChsaXN0SXRlbSkKKyAgICAg
ICAgcmV0dXJuIGxpc3RJdGVtLmdldCgpOworCisgICAgbGlzdEl0ZW0gPSB3ZWJraXRCYWNrRm9y
d2FyZExpc3RJdGVtR2V0T3JDcmVhdGUod2tMaXN0SXRlbSk7CisgICAgcHJpdi0+aXRlbXNNYXAu
c2V0KHdrTGlzdEl0ZW0sIGxpc3RJdGVtKTsKKworICAgIHJldHVybiBsaXN0SXRlbS5nZXQoKTsK
K30KKworc3RhdGljIEdMaXN0KiB3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGVMaXN0KFdLQXJy
YXlSZWYgd2tMaXN0KQoreworICAgIGlmICghd2tMaXN0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEdMaXN0KiBsaXN0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlH
ZXRTaXplKHdrTGlzdCk7ICsraSkgeworICAgICAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYg
d2tJdGVtID0gc3RhdGljX2Nhc3Q8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPihXS0FycmF5R2V0
SXRlbUF0SW5kZXgod2tMaXN0LCBpKSk7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0qIGl0ZW0gPSB3ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVhdGUod2tJdGVtKTsK
KyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbGlz
dCA9IGdfbGlzdF9wcmVwZW5kKGxpc3QsIGl0ZW0pOworICAgIH0KKworICAgIHJldHVybiBsaXN0
OworfQorCitXZWJLaXRCYWNrRm9yd2FyZExpc3QqIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0
ZShXS0JhY2tGb3J3YXJkTGlzdFJlZiB3a0xpc3QpCit7CisgICAgV2ViS2l0QmFja0ZvcndhcmRM
aXN0KiBsaXN0ID0gV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgTlVMTCkpOworICAgIGxpc3QtPnByaXYtPndrTGlzdCA9
IHdrTGlzdDsKKworICAgIHJldHVybiBsaXN0OworfQorCit2b2lkIHdlYmtpdEJhY2tGb3J3YXJk
TGlzdENoYW5nZWQoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QsIFdLQmFj
a0ZvcndhcmRMaXN0SXRlbVJlZiB3a0FkZGVkSXRlbSwgV0tBcnJheVJlZiB3a1JlbW92ZWRJdGVt
cykKK3sKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZEl0ZW0gPSB3ZWJraXRC
YWNrRm9yd2FyZExpc3RHZXRPckNyZWF0ZUl0ZW0oYmFja0ZvcndhcmRMaXN0LCB3a0FkZGVkSXRl
bSk7CisgICAgR0xpc3QqIHJlbW92ZWRJdGVtcyA9IDA7CisKKyAgICBzaXplX3QgcmVtb3ZlZEl0
ZW1zU2l6ZSA9IHdrUmVtb3ZlZEl0ZW1zID8gV0tBcnJheUdldFNpemUod2tSZW1vdmVkSXRlbXMp
IDogMDsKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKiBwcml2ID0gYmFja0Zvcndh
cmRMaXN0LT5wcml2OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVtb3ZlZEl0ZW1zU2l6
ZTsgKytpKSB7CisgICAgICAgIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0l0ZW0gPSBzdGF0
aWNfY2FzdDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3
a1JlbW92ZWRJdGVtcywgaSkpOworICAgICAgICByZW1vdmVkSXRlbXMgPSBnX2xpc3RfcHJlcGVu
ZChyZW1vdmVkSXRlbXMsIGdfb2JqZWN0X3JlZihHX09CSkVDVChwcml2LT5pdGVtc01hcC5nZXQo
d2tJdGVtKS5nZXQoKSkpKTsKKyAgICAgICAgcHJpdi0+aXRlbXNNYXAucmVtb3ZlKHdrSXRlbSk7
CisgICAgfQorCisgICAgZ19zaWduYWxfZW1pdChiYWNrRm9yd2FyZExpc3QsIHNpZ25hbHNbQ0hB
TkdFRF0sIDAsIGFkZGVkSXRlbSwgcmVtb3ZlZEl0ZW1zLCBOVUxMKTsKKyAgICBnX2xpc3RfZnJl
ZV9mdWxsKHJlbW92ZWRJdGVtcywgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0
X3VucmVmKSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJy
ZW50X2l0ZW06CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlz
dAorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgaXRlbSBpbiBAYmFja19mb3J3YXJkX2xpc3Qu
CisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktpdFdlYkhpc3Rv
cnlJdGVtCisgKiAgICBvciAlTlVMTCBpZiBAYmFja19mb3J3YXJkX2xpc3QgaXMgZW1wdHkuCisg
Ki8KK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfY3VycmVudF9pdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVChi
YWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIHJldHVybiB3ZWJraXRCYWNrRm9yd2FyZExpc3RH
ZXRPckNyZWF0ZUl0ZW0oYmFja0ZvcndhcmRMaXN0LCBXS0JhY2tGb3J3YXJkTGlzdEdldEN1cnJl
bnRJdGVtKGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0KSk7Cit9CisKKy8qKgorICogd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW06CisgKiBAYmFja19mb3J3YXJkX2xp
c3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhh
dCBwcmVjZWRlcyB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKiAgICBwcmVjZWRpbmcgdGhl
IGN1cnJlbnQgaXRlbSBvciAlTlVMTC4KKyAqLworV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSog
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0oV2ViS2l0QmFja0ZvcndhcmRM
aXN0KiBiYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOworCisgICAgcmV0dXJu
IHdlYmtpdEJhY2tGb3J3YXJkTGlzdEdldE9yQ3JlYXRlSXRlbShiYWNrRm9yd2FyZExpc3QsIFdL
QmFja0ZvcndhcmRMaXN0R2V0QmFja0l0ZW0oYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3Qp
KTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRl
bToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgor
ICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IHN1Y2NlZWRzIHRoZSBjdXJyZW50IGl0ZW0uCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0KKyAqICAgIGZvbGxvd2luZyB0aGUgY3VycmVudCBpdGVtIG9yICVOVUxMLgorICovCitXZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfaXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFja0Zvcndh
cmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0R2V0T3JDcmVh
dGVJdGVtKGJhY2tGb3J3YXJkTGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkSXRlbShi
YWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCkpOworfQorCisvKioKKyAqIHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW06CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dl
YktpdEJhY2tGb3J3YXJkTGlzdAorICogQGluZGV4OiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KKyAq
CisgKiBSZXR1cm5zIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1
cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbQorICogICAgbG9jYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4
IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGl0ZW0uCisgKi8KK1dlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0qIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0oV2ViS2l0QmFja0Zv
cndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QsIGdpbnQgaW5kZXgpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCks
IDApOworCisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEdldE9yQ3JlYXRlSXRlbShi
YWNrRm9yd2FyZExpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0SXRlbUF0SW5kZXgoYmFja0Zvcndh
cmRMaXN0LT5wcml2LT53a0xpc3QsIGluZGV4KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9sZW5ndGg6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktp
dEJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnM6IHRoZSBsZW5ndGggb2YgQGJhY2tfZm9y
d2FyZF9saXN0LgorICovCitndWludCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0
aChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFja0ZvcndhcmRMaXN0
KSwgMCk7CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKiBwcml2ID0gYmFja0Zv
cndhcmRMaXN0LT5wcml2OworICAgIGd1aW50IGN1cnJlbnRJdGVtID0gd2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0oYmFja0ZvcndhcmRMaXN0KSA/IDEgOiAwOworICAg
IHJldHVybiBXS0JhY2tGb3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQocHJpdi0+d2tMaXN0KSAr
IFdLQmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZExpc3RDb3VudChwcml2LT53a0xpc3QpICsgY3Vy
cmVudEl0ZW07Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2xpc3Q6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAor
ICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJkTGlzdEl0ZW0p
ICh0cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMgcHJlY2VkaW5n
IHRoZSBjdXJyZW50IGl0ZW0uCisgKi8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2JhY2tfbGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFj
a0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICBndWludCBsaW1pdCA9IFdLQmFja0ZvcndhcmRMaXN0
R2V0QmFja0xpc3RDb3VudChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCk7CisgICAgcmV0
dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNrRm9yd2FyZExpc3RDb3B5
QmFja0xpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QsIGxpbWl0KSk7
Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0
aF9saW1pdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0
CisgKiBAbGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmlldmUKKyAqCisgKiBSZXR1
cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdC5CYWNrRm9yd2FyZExpc3RJdGVtKSAodHJhbnNmZXIg
Y29udGFpbmVyKTogYSAjR0xpc3Qgb2YKKyAqICAgIGl0ZW1zIHByZWNlZGluZyB0aGUgY3VycmVu
dCBpdGVtIGxpbWl0ZWQgYnkgQGxpbWl0LgorICovCitHTGlzdCogd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJh
Y2tGb3J3YXJkTGlzdCwgZ3VpbnQgbGltaXQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOworCisgICAg
cmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNrRm9yd2FyZExpc3RD
b3B5QmFja0xpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QsIGxpbWl0
KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xp
c3Q6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICoK
KyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJkTGlzdEl0ZW0pICh0
cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMgZm9sbG93aW5nIHRo
ZSBjdXJyZW50IGl0ZW0uCisgKi8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2ZvcndhcmRfbGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFj
a0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICBndWludCBsaW1pdCA9IFdLQmFja0ZvcndhcmRMaXN0
R2V0Rm9yd2FyZExpc3RDb3VudChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCk7CisgICAg
cmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNrRm9yd2FyZExpc3RD
b3B5Rm9yd2FyZExpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QsIGxp
bWl0KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3Rfd2l0aF9saW1pdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0Zv
cndhcmRMaXN0CisgKiBAbGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmlldmUKKyAq
CisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdC5CYWNrRm9yd2FyZExpc3RJdGVtKSAo
dHJhbnNmZXIgY29udGFpbmVyKTogYSAjR0xpc3Qgb2YKKyAqICAgIGl0ZW1zIGZvbGxvd2luZyB0
aGUgY3VycmVudCBpdGVtIGxpbWl0ZWQgYnkgQGxpbWl0LgorICovCitHTGlzdCogd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdChXZWJLaXRCYWNrRm9y
d2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCwgZ3VpbnQgbGltaXQpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCks
IDApOworCisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoV0tCYWNr
Rm9yd2FyZExpc3RDb3B5Rm9yd2FyZExpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2
LT53a0xpc3QsIGxpbWl0KSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjRjZGIwODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaApAQCAtMCwwICsxLDg4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNl
cnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRCYWNrRm9yd2FyZExpc3RfaAorI2RlZmluZSBXZWJL
aXRCYWNrRm9yd2FyZExpc3RfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaD4KKyNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBF
X0JBQ0tfRk9SV0FSRF9MSVNUICAgICAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQkFDS19G
T1JXQVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdCkpCisjZGVmaW5lIFdFQktJVF9CQUNL
X0ZPUldBUkRfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChr
bGFzcyksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0ZvcndhcmRM
aXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfQkFDS19G
T1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQkFD
S19GT1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVf
QkFDS19GT1JXQVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzKSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdCAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRM
aXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzICAgV2ViS2l0
QmFja0ZvcndhcmRMaXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRM
aXN0UHJpdmF0ZSBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktp
dEJhY2tGb3J3YXJkTGlzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2Fy
ZExpc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfdHlwZSAgICAgICAgICAg
ICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0g
Kgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0gICAgICAgICAgICAo
V2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkg
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfaXRlbSAgICAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9y
d2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICoKK3dl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtICAgICAgICAgICAgKFdlYktp
dEJhY2tGb3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIFdlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW0gKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhf
aXRlbSAgICAgICAgICAgICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRf
bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdpbnQgICAgICAgICAgICAgICAgICAgaW5kZXgpOworV0VCS0lUX0FQSSBndWludAord2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGggICAgICAgICAgICAgICAgICAoV2ViS2l0
QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgR0xpc3Qg
Kgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QgICAgICAgICAgICAgICAo
V2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkg
R0xpc3QgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1p
dCAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAg
ICAgICAgICAgICAgbGltaXQpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0ICAgICAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJk
TGlzdCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQgKFdlYktpdEJhY2tG
b3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgIGxpbWl0
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTA2OGUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtLmNwcApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbS5oIgorCisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYWNrRm9yd2FyZExpc3RJdGVtLmg+CisjaW5jbHVkZSA8
V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtUHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVm
PiB3a0xpc3RJdGVtOworICAgIENTdHJpbmcgdXJpOworICAgIENTdHJpbmcgdGl0bGU7CisgICAg
Q1N0cmluZyBvcmlnaW5hbFVSSTsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbSwgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0sIEdfVFlQRV9JTklUSUFM
TFlfVU5PV05FRCkKKworc3RhdGljIHZvaWQgd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRF
TShvYmplY3QpLT5wcml2LT5+V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9pbml0KFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxpc3RJdGVtKQor
eworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKiBwcml2ID0gR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKGxpc3RJdGVtLCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElT
VF9JVEVNLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSk7CisgICAgbGlzdEl0ZW0t
PnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVBy
aXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1f
Y2xhc3NfaW5pdChXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3MqIGxpc3RJdGVtQ2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhsaXN0
SXRlbUNsYXNzKTsKKworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRCYWNrRm9y
d2FyZExpc3RJdGVtRmluYWxpemU7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUobGlz
dEl0ZW1DbGFzcywgc2l6ZW9mKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKSk7Cit9
CisKK3R5cGVkZWYgSGFzaE1hcDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIFdlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0qID4gSGlzdG9yeUl0ZW1zTWFwOworCitzdGF0aWMgSGlzdG9yeUl0ZW1z
TWFwJiBoaXN0b3J5SXRlbXNNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGlzdG9y
eUl0ZW1zTWFwLCBpdGVtc01hcCwgKCkpOworICAgIHJldHVybiBpdGVtc01hcDsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZpbmFsaXplZChncG9pbnRlciB3a0xp
c3RJdGVtLCBHT2JqZWN0KiBmaW5hbGl6ZWRMaXN0SXRlbSkKK3sKKyAgICBBU1NFUlQoR19PQkpF
Q1QoaGlzdG9yeUl0ZW1zTWFwKCkuZ2V0KHN0YXRpY19jYXN0PFdLQmFja0ZvcndhcmRMaXN0SXRl
bVJlZj4od2tMaXN0SXRlbSkpKSA9PSBmaW5hbGl6ZWRMaXN0SXRlbSk7CisgICAgaGlzdG9yeUl0
ZW1zTWFwKCkucmVtb3ZlKHN0YXRpY19jYXN0PFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4od2tM
aXN0SXRlbSkpOworfQorCitXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiB3ZWJraXRCYWNrRm9y
d2FyZExpc3RJdGVtR2V0T3JDcmVhdGUoV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrTGlzdEl0
ZW0pCit7CisgICAgaWYgKCF3a0xpc3RJdGVtKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxpc3RJdGVtID0gaGlzdG9yeUl0ZW1zTWFwKCkuZ2V0
KHdrTGlzdEl0ZW0pOworICAgIGlmIChsaXN0SXRlbSkKKyAgICAgICAgcmV0dXJuIGxpc3RJdGVt
OworCisgICAgbGlzdEl0ZW0gPSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSwgTlVMTCkpOworICAgIGxp
c3RJdGVtLT5wcml2LT53a0xpc3RJdGVtID0gd2tMaXN0SXRlbTsKKworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGxpc3RJdGVtKSwgd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZpbmFs
aXplZCwKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxncG9pbnRlcj4oY29uc3Rf
Y2FzdDxPcGFxdWVXS0JhY2tGb3J3YXJkTGlzdEl0ZW0qPih3a0xpc3RJdGVtKSkpOworICAgIGhp
c3RvcnlJdGVtc01hcCgpLnNldCh3a0xpc3RJdGVtLCBsaXN0SXRlbSk7CisKKyAgICByZXR1cm4g
bGlzdEl0ZW07Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0
X3VyaToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdF9pdGVtOiBhICNXZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtCisgKgorICogVGhpcyBVUkkgbWF5IGRpZmZlciBmcm9tIHRoZSBvcmlnaW5hbCBVUkkg
aWYgdGhlIHBhZ2Ugd2FzLAorICogZm9yIGV4YW1wbGUsIHJlZGlyZWN0ZWQgdG8gYSBuZXcgbG9j
YXRpb24uCisgKiBTZWUgYWxzbyB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3Jp
Z2luYWxfdXJpKCkuCisgKgorICogUmV0dXJuczogdGhlIFVSSSBvZiBAYmFja19mb3J3YXJkX2xp
c3RfaXRlbS4KKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X2dldF91cmkoV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdEl0ZW0pCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0obGlzdEl0
ZW0pLCAwKTsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKiBwcml2ID0g
bGlzdEl0ZW0tPnByaXY7CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJJKEFkb3B0V0ss
IFdLQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlVUkwocHJpdi0+d2tMaXN0SXRlbS5nZXQoKSkpOwor
ICAgIGlmICh0b0ltcGwod2tVUkkuZ2V0KCkpLT5zdHJpbmcoKS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcHJpdi0+dXJpID0gdG9JbXBsKHdrVVJJLmdldCgpKS0+c3RyaW5n
KCkudXRmOCgpOworICAgIHJldHVybiBwcml2LT51cmkuZGF0YSgpOworfQorCisvKioKKyAqIHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF90aXRsZToKKyAqIEBiYWNrX2ZvcndhcmRf
bGlzdF9pdGVtOiBhICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKgorICogUmV0dXJuczog
dGhlIHBhZ2UgdGl0bGUgb2YgQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW0uCisgKi8KK2NvbnN0IGdj
aGFyKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdGl0bGUoV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbSogbGlzdEl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0obGlzdEl0ZW0pLCAwKTsKKworICAgIFdlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKiBwcml2ID0gbGlzdEl0ZW0tPnByaXY7CisgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVGl0bGUoQWRvcHRXSywgV0tCYWNrRm9yd2FyZExp
c3RJdGVtQ29weVRpdGxlKHByaXYtPndrTGlzdEl0ZW0uZ2V0KCkpKTsKKyAgICBpZiAodG9JbXBs
KHdrVGl0bGUuZ2V0KCkpLT5zdHJpbmcoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcHJpdi0+dGl0bGUgPSB0b0ltcGwod2tUaXRsZS5nZXQoKSktPnN0cmluZygpLnV0Zjgo
KTsKKyAgICByZXR1cm4gcHJpdi0+dGl0bGUuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmk6CisgKiBAYmFja19mb3J3YXJk
X2xpc3RfaXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBTZWUgYWxzbyB3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJpKCkuCisgKgorICogUmV0dXJuczogdGhl
IG9yaWdpbmFsIFVSSSBvZiBAYmFja19mb3J3YXJkX2xpc3RfaXRlbS4KKyAqLworY29uc3QgZ2No
YXIqIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdEl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0obGlzdEl0ZW0pLCAwKTsKKworICAg
IFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKiBwcml2ID0gbGlzdEl0ZW0tPnByaXY7
CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrT3JpZ2luYWxVUkkoQWRvcHRXSywgV0tCYWNr
Rm9yd2FyZExpc3RJdGVtQ29weU9yaWdpbmFsVVJMKHByaXYtPndrTGlzdEl0ZW0uZ2V0KCkpKTsK
KyAgICBpZiAodG9JbXBsKHdrT3JpZ2luYWxVUkkuZ2V0KCkpLT5zdHJpbmcoKS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcHJpdi0+b3JpZ2luYWxVUkkgPSB0b0ltcGwod2tP
cmlnaW5hbFVSSS5nZXQoKSktPnN0cmluZygpLnV0ZjgoKTsKKyAgICByZXR1cm4gcHJpdi0+b3Jp
Z2luYWxVUkkuZGF0YSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZmNjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmgKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYg
IWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElM
QVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbV9o
CisjZGVmaW5lIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1faAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0gICAgICAg
ICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRF
TSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZPUldB
UkRfTElTVF9JVEVNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0sIFdlYktpdEJhY2tGb3J3
YXJkTGlzdEl0ZW1DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVF9J
VEVNKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0pKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19G
T1JXQVJEX0xJU1RfSVRFTV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVF9JVEVNKSkKKyNkZWZpbmUgV0VC
S0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSwg
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW0gICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW07Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbUNsYXNzICAgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW1Qcml2YXRlIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlOworCitzdHJ1
Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0geworICAgIEdJbml0aWFsbHlVbm93bmVkIHBh
cmVudDsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlICpwcml2OworfTsK
Kworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3MgeworICAgIEdJbml0aWFs
bHlVbm93bmVkQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3R5cGUgICAgICAgICAodm9pZCk7CisKK1dF
QktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0
X3VyaSAgICAgICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdF9pdGVtKTsKKwor
V0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9n
ZXRfdGl0bGUgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0X2l0ZW0pOwor
CitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X2dldF9vcmlnaW5hbF91cmkgKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxpc3RfaXRlbSk7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMTJhOWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3RQcml2YXRlLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlX2gKKworI2luY2x1ZGUg
IldlYkJhY2tGb3J3YXJkTGlzdC5oIgorI2luY2x1ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdC5o
IgorI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgorCitXZWJLaXRCYWNrRm9yd2FyZExpc3Qq
IHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZShXS0JhY2tGb3J3YXJkTGlzdFJlZik7CitXZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtKiB3ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVh
dGUoV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmKTsKK3ZvaWQgd2Via2l0QmFja0ZvcndhcmRMaXN0
Q2hhbmdlZChXZWJLaXRCYWNrRm9yd2FyZExpc3QqLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYg
d2tBZGRlZEl0ZW0sIFdLQXJyYXlSZWYgd2tSZW1vdmVkSXRlbXMpOworCisjZW5kaWYgLy8gV2Vi
S2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmNwcAppbmRleCAyYTkw
OTAwLi42MWI3OWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJMb2FkZXJDbGllbnQuaCIKIAor
I2luY2x1ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJL
aXRFcnJvci5oIgogI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKICNpbmNsdWRlICJXZWJLaXRQ
cml2YXRlLmgiCkBAIC01MSw3ICs1Miw3IEBAIGVudW0gewogfTsKIAogc3RydWN0IF9XZWJLaXRX
ZWJMb2FkZXJDbGllbnRQcml2YXRlIHsKLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHZpZXc7
CisgICAgV2ViS2l0V2ViVmlldyogdmlldzsKIAogICAgIGdkb3VibGUgZXN0aW1hdGVkUHJvZ3Jl
c3M7CiB9OwpAQCAtMTM2LDYgKzEzNywxMiBAQCBzdGF0aWMgdm9pZCBkaWRDaGFuZ2VQcm9ncmVz
cyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKICAgICBnX29iamVjdF9u
b3RpZnkoR19PQkpFQ1QoY2xpZW50SW5mbyksICJlc3RpbWF0ZWQtcHJvZ3Jlc3MiKTsKIH0KIAor
c3RhdGljIHZvaWQgZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdLUGFnZVJlZiBwYWdlLCBXS0Jh
Y2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWRkZWRJdGVtLCBXS0FycmF5UmVmIHJlbW92ZWRJdGVtcywg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNs
aWVudCA9IFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVChjbGllbnRJbmZvKTsKKyAgICB3ZWJraXRC
YWNrRm9yd2FyZExpc3RDaGFuZ2VkKHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xp
c3QoY2xpZW50LT5wcml2LT52aWV3KSwgYWRkZWRJdGVtLCByZW1vdmVkSXRlbXMpOworfQorCiBz
dGF0aWMgdm9pZCB3ZWJraXRXZWJMb2FkZXJDbGllbnRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmpl
Y3QpCiB7CiAgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQgPSBXRUJLSVRfV0VCX0xP
QURFUl9DTElFTlQob2JqZWN0KTsKQEAgLTE0Myw3ICsxNTAsNyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJMb2FkZXJDbGllbnRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAKICAgICBXS1Bh
Z2VMb2FkZXJDbGllbnQgbG9hZGVyQ2xpZW50ID0gewogICAgICAgICBrV0tQYWdlTG9hZGVyQ2xp
ZW50Q3VycmVudFZlcnNpb24sCi0gICAgICAgIGNsaWVudCwgIC8vIGNsaWVudEluZm8KKyAgICAg
ICAgY2xpZW50LCAvLyBjbGllbnRJbmZvCiAgICAgICAgIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWUsCiAgICAgICAgIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lLAogICAgICAgICBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9y
RnJhbWUsCkBAIC0xNjYsMTEgKzE3MywxMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJMb2FkZXJD
bGllbnRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIDAsICAgICAgIC8vIGRp
ZEJlY29tZVVucmVzcG9uc2l2ZQogICAgICAgICAwLCAgICAgICAvLyBkaWRCZWNvbWVSZXNwb25z
aXZlCiAgICAgICAgIDAsICAgICAgIC8vIHByb2Nlc3NEaWRDcmFzaAotICAgICAgICAwLCAgICAg
ICAvLyBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QKLSAgICAgICAgMCwgICAgICAgLy8gc2hvdWxk
R29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0KLSAgICAgICAgMCAgICAgICAgLy8gZGlkRmFpbFRvSW5p
dGlhbGl6ZVBsdWdpbgorICAgICAgICBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QsCisgICAgICAg
IDAsIC8vIHNob3VsZEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtCisgICAgICAgIDAgLy8gZGlkRmFp
bFRvSW5pdGlhbGl6ZVBsdWdpbgogICAgIH07Ci0gICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
a2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHByaXYtPnZpZXcuZ2V0
KCkpKTsKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2Uo
V0VCS0lUX1dFQl9WSUVXX0JBU0UocHJpdi0+dmlldykpOwogICAgIFdLUGFnZVNldFBhZ2VMb2Fk
ZXJDbGllbnQodG9BUEkocGFnZSksICZsb2FkZXJDbGllbnQpOwogfQogCkBAIC0xODIsNyArMTg5
LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYkxvYWRlckNsaWVudExvYWRGYWlsZWQoV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQsIGMKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCiAg
ICAgR093blB0cjxjaGFyPiBodG1sU3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiPGh0bWw+PGJvZHk+
JXM8L2JvZHk+PC9odG1sPiIsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfYWx0ZXJuYXRlX2h0bWwoY2xpZW50LT5wcml2LT52aWV3LmdldCgpLCBodG1sU3RyaW5n
LmdldCgpLCAwLCBmYWlsaW5nVVJJKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9hbHRlcm5h
dGVfaHRtbChjbGllbnQtPnByaXYtPnZpZXcsIGh0bWxTdHJpbmcuZ2V0KCksIDAsIGZhaWxpbmdV
UkkpOwogCiAgICAgcmV0dXJuIFRSVUU7CiB9CkBAIC0xOTMsNyArMjAwLDcgQEAgc3RhdGljIHZv
aWQgd2Via2l0V2ViTG9hZGVyQ2xpZW50U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wSWQsIGNvbnMKIAogICAgIHN3aXRjaCAocHJvcElkKSB7CiAgICAgY2FzZSBQUk9QX1dF
Ql9WSUVXOgotICAgICAgICBjbGllbnQtPnByaXYtPnZpZXcgPSBhZG9wdEdSZWYoV0VCS0lUX1dF
Ql9WSUVXKGdfdmFsdWVfZHVwX29iamVjdCh2YWx1ZSkpKTsKKyAgICAgICAgY2xpZW50LT5wcml2
LT52aWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CkBAIC0yMDYsNyArMjEzLDcg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViTG9hZGVyQ2xpZW50R2V0UHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWwKIAogICAgIHN3aXRjaCAocHJvcElkKSB7CiAgICAg
Y2FzZSBQUk9QX1dFQl9WSUVXOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIGNs
aWVudC0+cHJpdi0+dmlldy5nZXQoKSk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgY2xpZW50LT5wcml2LT52aWV3KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0VT
VElNQVRFRF9QUk9HUkVTUzoKICAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJr
aXRfd2ViX2xvYWRlcl9jbGllbnRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhjbGllbnQpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAK
aW5kZXggOTY3MjEwNC4uZDcwZWNjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3LmgiCiAKKyNpbmNsdWRlICJXZWJL
aXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFBy
aXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKQEAgLTQ2LDYgKzQ3LDcgQEAgc3RydWN0IF9XZWJL
aXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgQ1N0cmluZyBjdXN0b21UZXh0RW5jb2Rpbmc7CiAKICAg
ICBHUmVmUHRyPFdlYktpdFdlYkxvYWRlckNsaWVudD4gbG9hZGVyQ2xpZW50OworICAgIEdSZWZQ
dHI8V2ViS2l0QmFja0ZvcndhcmRMaXN0PiBiYWNrRm9yd2FyZExpc3Q7CiB9OwogCiBHX0RFRklO
RV9UWVBFKFdlYktpdFdlYlZpZXcsIHdlYmtpdF93ZWJfdmlldywgV0VCS0lUX1RZUEVfV0VCX1ZJ
RVdfQkFTRSkKQEAgLTU4LDYgKzYwLDkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0
cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBh
Z2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldyksIHdlYmtpdFdlYkNvbnRleHRHZXRXS0Nv
bnRleHQocHJpdi0+Y29udGV4dCksIDApOwogCiAgICAgcHJpdi0+bG9hZGVyQ2xpZW50ID0gYWRv
cHRHUmVmKFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
V0VCX0xPQURFUl9DTElFTlQsICJ3ZWItdmlldyIsIHdlYlZpZXcsIE5VTEwpKSk7CisKKyAgICBX
ZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9W
SUVXX0JBU0Uod2ViVmlldykpOworICAgIHByaXYtPmJhY2tGb3J3YXJkTGlzdCA9IGFkb3B0R1Jl
Zih3ZWJraXRCYWNrRm9yd2FyZExpc3RDcmVhdGUoV0tQYWdlR2V0QmFja0ZvcndhcmRMaXN0KHRv
QVBJKHBhZ2UpKSkpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBhcmFtU3BlYykKQEAgLTM4MSwzICszODYsMTkgQEAgdm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfc2V0X2N1c3RvbV9jaGFyc2V0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGdjaGFy
KiBjaGEKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tFbmNvZGluZ05hbWUgPSBjaGFy
c2V0ID8gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjaGFyc2V0KSkgOiAw
OwogICAgIFdLUGFnZVNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUodG9BUEkocGFnZSksIHdrRW5j
b2RpbmdOYW1lLmdldCgpKTsKIH0KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tf
Zm9yd2FyZF9saXN0OgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogT2J0
YWlucyB0aGUgI1dlYktpdEJhY2tGb3J3YXJkTGlzdCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVu
ICNXZWJLaXRXZWJWaWV3LiBUaGUKKyAqICNXZWJLaXRCYWNrRm9yd2FyZExpc3QgaXMgb3duZWQg
YnkgdGhlICNXZWJLaXRXZWJWaWV3LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
dGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3QKKyAqLworV2ViS2l0QmFja0ZvcndhcmRMaXN0KiB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZp
ZXcpLCAwKTsKKworICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5iYWNrRm9yd2FyZExpc3QuZ2V0
KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmgKaW5kZXggOWFmZDVmYS4uMWI0NzM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRl
ZiBXZWJLaXRXZWJWaWV3X2gKICNkZWZpbmUgV2ViS2l0V2ViVmlld19oCiAKKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
RGVmaW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5oPgogI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0V2ViTG9hZGVyQ2xpZW50Lmg+CkBAIC02Nyw1MSArNjgsNTQgQEAg
c3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Vi
a2l0X3dlYl92aWV3X2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOword2Via2l0X3dlYl92aWV3
X2dldF90eXBlICAgICAgICAgICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgR3RrV2lkZ2V0ICoK
LXdlYmtpdF93ZWJfdmlld19uZXcgICAgICAgICAgICAgICAgICh2b2lkKTsKK3dlYmtpdF93ZWJf
dmlld19uZXcgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIEd0a1dpZGdl
dCAqCi13ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCAgICAoV2ViS2l0V2ViQ29udGV4
dCAgICAgICpjb250ZXh0KTsKK3dlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0ICAgICAg
KFdlYktpdFdlYkNvbnRleHQgICAgICAqY29udGV4dCk7CiAKIFdFQktJVF9BUEkgV2ViS2l0V2Vi
Q29udGV4dCAqCi13ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSBX
ZWJLaXRXZWJMb2FkZXJDbGllbnQgKgotd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkZXJfY2xpZW50ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CiAK
IFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X3NldF9sb2FkZXJfY2xpZW50ICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKK3dlYmtp
dF93ZWJfdmlld19zZXRfbG9hZGVyX2NsaWVudCAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAq
d2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRX
ZWJMb2FkZXJDbGllbnQgKmxvYWRlcl9jbGllbnQpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtp
dF93ZWJfdmlld19sb2FkX3VyaSAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndl
Yl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
ICAgICAgICAgICAqdXJpKTsKK3dlYmtpdF93ZWJfdmlld19sb2FkX3VyaSAgICAgICAgICAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKnVyaSk7CiAKIFdFQktJVF9B
UEkgdm9pZAotd2Via2l0X3dlYl92aWV3X2xvYWRfYWx0ZXJuYXRlX2h0bWwgKFdlYktpdFdlYlZp
ZXcgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2NoYXIgICAgICAgICAgICpjb250ZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqYmFzZV91cmksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICp1bnJl
YWNoYWJsZV91cmkpOwotCit3ZWJraXRfd2ViX3ZpZXdfbG9hZF9hbHRlcm5hdGVfaHRtbCAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICpjb250ZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICpiYXNl
X3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
ICAgICAgICAgICAqdW5yZWFjaGFibGVfdXJpKTsKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dl
Yl92aWV3X3JlbG9hZCAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3Zp
ZXcpOword2Via2l0X3dlYl92aWV3X3JlbG9hZCAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgICp3ZWJfdmlldyk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3
X3JlbG9hZF9ieXBhc3NfY2FjaGUgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOwor
d2Via2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3NfY2FjaGUgICAoV2ViS2l0V2ViVmlldyAgICAg
ICAgICp3ZWJfdmlldyk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X2dvX2Jh
Y2sgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0
X3dlYl92aWV3X2dvX2JhY2sgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3
ZWJfdmlldyk7CisKIAogV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19iYWNrICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0
X3dlYl92aWV3X2Nhbl9nb19iYWNrICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3
ZWJfdmlldyk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQg
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Via2l0X3dlYl92
aWV3X2dvX2ZvcndhcmQgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmll
dyk7CisKK1dFQktJVF9BUEkgV2ViS2l0QmFja0ZvcndhcmRMaXN0ICoKK3dlYmtpdF93ZWJfdmll
d19nZXRfYmFja19mb3J3YXJkX2xpc3QgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcp
OwogCiBXRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2dvX2ZvcndhcmQgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsK
IAogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9j
aGFyc2V0ICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4
IDI4NTYwYzAuLmQ5MTJiNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC0yLDcgKzIsOCBAQCBURVNUX1BST0dT
ICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQgXAog
CVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViVmlldyBcCiAJUHJvZ3JhbXMv
V2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJMb2FkZXJDbGllbnQgXAotCVByb2dyYW1zL1dl
YktpdDJBUElUZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVz
dHMvVGVzdFdlYktpdFNldHRpbmdzIFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJh
Y2tGb3J3YXJkTGlzdAogCiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQogd2Via2l0
Ml90ZXN0c19jcHBmbGFncyA9IFwKQEAgLTY4LDMgKzY5LDEwIEBAIFByb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0V2ViS2l0U2V0dGluZ3NfU09VUkNFUyA9IFwKIFByb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0V2ViS2l0U2V0dGluZ3NfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3Bw
ZmxhZ3MpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFNldHRpbmdzX0xEQURE
ID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RX
ZWJLaXRTZXR0aW5nc19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dy
YW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X1NPVVJDRVMgPSBcCisgICAg
ICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9yd2Fy
ZExpc3QuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9D
UFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQor
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuY3BwCmluZGV4IDgwMjE0
MGIuLmJhYzExMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuY3BwCkBAIC03NCw2ICs3NCw4IEBAIExv
YWRUcmFja2luZ1Rlc3Q6OkxvYWRUcmFja2luZ1Rlc3QoKQogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
Y2xpZW50LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZEZpbmlzaGVkQ2FsbGJhY2sp
LCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmFpbGVkIiwgR19D
QUxMQkFDSyhsb2FkRmFpbGVkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0
KGNsaWVudCwgIm5vdGlmeTo6ZXN0aW1hdGVkLXByb2dyZXNzIiwgR19DQUxMQkFDSyhlc3RpbWF0
ZWRQcm9ncmVzc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOworCisgICAgd2F0Y2hPYmplY3QoR19P
QkpFQ1QoY2xpZW50KSk7CiB9CiAKIExvYWRUcmFja2luZ1Rlc3Q6On5Mb2FkVHJhY2tpbmdUZXN0
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNWU5M2U3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0wLDAgKzEsMjY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRU
ZXN0U2VydmVyLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291
cC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgor
CisvLyBCYWNrIGZvcndhcmQgbGlzdCBsaW1pdCBpcyAxMDAgYnkgZGVmYXVsdC4KK3N0YXRpYyBj
b25zdCBzaXplX3Qgd2tCYWNrRm9yd2FyZExpc3RMaW1pdCA9IDEwMDsKKworc3RhdGljIFdlYktp
dFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBT
ZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciogcGF0aCwgR0hhc2hU
YWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQor
eworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNn
LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBjaGFyKiBib2R5ID0gZ19zdHJkdXBfcHJpbnRmKCI8
aHRtbD48dGl0bGU+JXM8L3RpdGxlPjxib2R5PiVzPC9ib2R5PjwvaHRtbD4iLCBwYXRoICsgMSwg
cGF0aCArIDEpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1RBS0UsIGJvZHksIHN0cmxlbihib2R5KSk7CisKKyAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitjbGFzcyBCYWNr
Rm9yd2FyZExpc3RUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShCYWNrRm9yd2FyZExpc3RUZXN0KTsKKworICAgIGVudW0g
eworICAgICAgICBCYWNrd2FyZCwKKyAgICAgICAgRm9yd2FyZAorICAgIH07CisKKyAgICBlbnVt
IHsKKyAgICAgICAgQ3VycmVudEl0ZW0gID0gMSA8PCAwLAorICAgICAgICBBZGRlZEl0ZW0gICAg
PSAxIDw8IDEsCisgICAgICAgIFJlbW92ZWRJdGVtcyA9IDEgPDwgMgorICAgIH07CisKKyAgICBz
dGF0aWMgdm9pZCBjaGVja0l0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSwgY29u
c3QgZ2NoYXIqIHRpdGxlLCBjb25zdCBnY2hhciogdXJpLCBjb25zdCBnY2hhciogb3JpZ2luYWxV
UkkpCisgICAgeworICAgICAgICBnX2Fzc2VydChpdGVtKTsKKyAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmkoaXRlbSksID09LCB1cmkp
OworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1f
Z2V0X3RpdGxlKGl0ZW0pLCA9PSAsIHRpdGxlKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSksID09LCBv
cmlnaW5hbFVSSSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2hlY2tJdGVtSW5kZXgoV2Vi
S2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAtMSkgPT0gd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlzdCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDApID09IHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpKTsKKyAgICAgICAgZ19hc3NlcnQo
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAxKSA9PSB3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShsaXN0KSk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgY2hlY2tMaXN0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCwgZ3VpbnQg
dHlwZSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSoqIGl0ZW1zLCBndWludCBuSXRlbXMpCisg
ICAgeworICAgICAgICBHTGlzdCogbGlzdEl0ZW1zID0gdHlwZSA9PSBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpCYWNrd2FyZCA/IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KGxp
c3QpIDoKKyAgICAgICAgICAgIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9s
aXN0KGxpc3QpOworICAgICAgICBnX2Fzc2VydChsaXN0SXRlbXMpOworCisgICAgICAgIGd1aW50
IGkgPSAwOworICAgICAgICBmb3IgKEdMaXN0KiBsaXN0SXRlbSA9IGxpc3RJdGVtczsgbGlzdEl0
ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0ZW0pLCBpKyspIHsKKyAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcHVpbnQoaSwgPCwgbkl0ZW1zKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KGxp
c3RJdGVtLT5kYXRhID09IGl0ZW1zW2ldKTsKKyAgICAgICAgfQorICAgICAgICBnX2xpc3RfZnJl
ZShsaXN0SXRlbXMpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGJhY2tGb3J3YXJkTGlzdENo
YW5nZWQoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0LCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtKiBhZGRlZEl0ZW0sIEdMaXN0KiByZW1vdmVkSXRlbXMsIEJhY2tGb3J3YXJkTGlzdFRlc3Qq
IHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX2hhc0NoYW5nZWQgPSB0cnVlOworCisgICAg
ICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVk
SXRlbSkgeworICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNU
X0lURU0oYWRkZWRJdGVtKSk7CisgICAgICAgICAgICB0ZXN0LT53YXRjaE9iamVjdChHX09CSkVD
VChhZGRlZEl0ZW0pKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCghYWRk
ZWRJdGVtKTsKKworICAgICAgICBpZiAodGVzdC0+bV9jaGFuZ2VkRmxhZ3MgJiBCYWNrRm9yd2Fy
ZExpc3RUZXN0OjpSZW1vdmVkSXRlbXMpIHsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHJlbW92ZWRJ
dGVtcyk7CisgICAgICAgICAgICBmb3IgKEdMaXN0KiBpdGVyID0gcmVtb3ZlZEl0ZW1zOyBpdGVy
OyBpdGVyID0gaXRlci0+bmV4dCkgeworICAgICAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGl0ZXItPmRhdGEpKTsKKyAgICAgICAgICAgICAgICBp
ZiAodGVzdC0+bV9leHBlY3RlZFJlbW92ZWRJdGVtcykKKyAgICAgICAgICAgICAgICAgICAgZ19h
c3NlcnQoZ19saXN0X2ZpbmQodGVzdC0+bV9leHBlY3RlZFJlbW92ZWRJdGVtcywgaXRlci0+ZGF0
YSkpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ19hc3Nl
cnQoIXJlbW92ZWRJdGVtcyk7CisgICAgfQorCisgICAgQmFja0ZvcndhcmRMaXN0VGVzdCgpCisg
ICAgICAgIDogbV9saXN0KHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QobV93
ZWJWaWV3KSkKKyAgICAgICAgLCBtX2NoYW5nZWRGbGFncygwKQorICAgICAgICAsIG1faGFzQ2hh
bmdlZChmYWxzZSkKKyAgICAgICAgLCBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKDApCisgICAgewor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fbGlzdCwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGJh
Y2tGb3J3YXJkTGlzdENoYW5nZWQpLCB0aGlzKTsKKyAgICAgICAgd2F0Y2hPYmplY3QoR19PQkpF
Q1QobV9saXN0KSk7CisgICAgfQorCisgICAgfkJhY2tGb3J3YXJkTGlzdFRlc3QoKQorICAgIHsK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fbGlzdCwgR19T
SUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCB3
YWl0VW50aWxMb2FkRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgbV9oYXNDaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
ICAgICAgICBnX2Fzc2VydChtX2hhc0NoYW5nZWQpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVu
dGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMoR0xpc3QqIHJlbW92ZWRJdGVtcykK
KyAgICB7CisgICAgICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSByZW1vdmVkSXRlbXM7Cisg
ICAgICAgIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgICAgICBtX2V4cGVjdGVkUmVtb3Zl
ZEl0ZW1zID0gMDsKKyAgICB9CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIG1fbGlzdDsK
KyAgICBndWxvbmcgbV9jaGFuZ2VkRmxhZ3M7CisgICAgYm9vbCBtX2hhc0NoYW5nZWQ7CisgICAg
R0xpc3QqIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXM7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0QmFj
a0ZvcndhcmRMaXN0TmF2aWdhdGlvbihCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1zWzFdOworCisg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcp
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1f
d2ViVmlldykpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5t
X2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJ
dGVtSW5kZXgodGVzdC0+bV9saXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOworCisg
ICAgQ1N0cmluZyB1cmlQYWdlMSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9QYWdlMSIpOwor
ICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0
ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07CisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpKHRlc3QtPm1fd2ViVmlldywgdXJpUGFnZTEuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
dmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwg
PT0sIDEpOworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlMSA9IHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCk7CisgICAg
QmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKGl0ZW1QYWdlMSwgIlBhZ2UxIiwgdXJpUGFn
ZTEuZGF0YSgpLCB1cmlQYWdlMS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7
CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVz
dC0+bV9saXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Zm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOworCisgICAgQ1N0cmluZyB1cmlQYWdlMiA9IGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9QYWdlMiIpOworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdz
ID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0
OjpBZGRlZEl0ZW07CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHRlc3QtPm1fd2ViVmll
dywgdXJpUGFnZTIuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZp
ZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3Qt
Pm1fd2ViVmlldykpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMik7CisgICAgV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbSogaXRlbVBhZ2UyID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9j
dXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVj
a0l0ZW0oaXRlbVBhZ2UyLCAiUGFnZTIiLCB1cmlQYWdlMi5kYXRhKCksIHVyaVBhZ2UyLmRhdGEo
KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0o
dGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBCYWNrRm9y
d2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOworICAgIGl0ZW1zWzBd
ID0gaXRlbVBhZ2UxOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrTGlzdCh0ZXN0LT5t
X2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkJhY2t3YXJkLCBpdGVtcywgMSk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1f
bGlzdCkpOworCisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0
OjpDdXJyZW50SXRlbTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayh0ZXN0LT5tX3dlYlZp
ZXcpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQodGVzdC0+bV93ZWJWaWV3KSk7CisK
KyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3Ro
KHRlc3QtPm1fbGlzdCksID09LCAyKTsKKyAgICBnX2Fzc2VydChpdGVtUGFnZTEgPT0gd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAg
QmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCksICJQYWdlMSIsIHVyaVBhZ2UxLmRhdGEoKSwg
dXJpUGFnZTEuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTIp
OworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KHRl
c3QtPm1fbGlzdCkpOworICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UyOworICAgIEJhY2tGb3J3YXJk
TGlzdFRlc3Q6OmNoZWNrTGlzdCh0ZXN0LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkZv
cndhcmQsIGl0ZW1zLCAxKTsKKworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0Zvcndh
cmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07CisgICAgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQo
dGVzdC0+bV93ZWJWaWV3KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcp
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1f
d2ViVmlldykpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMik7CisgICAgZ19hc3NlcnQoaXRlbVBh
Z2UyID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1f
bGlzdCkpOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbSh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpLCAiUGFnZTIiLCB1cmlQ
YWdlMi5kYXRhKCksIHVyaVBhZ2UyLmRhdGEoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTEpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0
ZXN0LT5tX2xpc3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0
ZXN0LT5tX2xpc3QpOworICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UxOworICAgIEJhY2tGb3J3YXJk
TGlzdFRlc3Q6OmNoZWNrTGlzdCh0ZXN0LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkJh
Y2t3YXJkLCBpdGVtcywgMSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
QmFja0ZvcndhcmRMaXN0TGltaXRBbmRDYWNoZShCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2tCYWNrRm9yd2Fy
ZExpc3RMaW1pdDsgaSsrKSB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX3N0cmR1cF9w
cmludGYoIi9QYWdlJWQiLCBpKSk7CisgICAgICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFj
a0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRl
ZEl0ZW07CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh0ZXN0LT5tX3dlYlZpZXcs
IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgocGF0aC5nZXQoKSkuZGF0YSgpKTsKKyAgICAgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgfQorCisgICAgZ19hc3NlcnRfY21wdWlu
dCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwg
d2tCYWNrRm9yd2FyZExpc3RMaW1pdCk7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSog
aXRlbVBhZ2VGaXJzdCA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0odGVz
dC0+bV9saXN0LCAtKHdrQmFja0ZvcndhcmRMaXN0TGltaXQgLSAxKSk7CisgICAgR093blB0cjxH
TGlzdD4gcmVtb3ZlZEl0ZW1zKGdfbGlzdF9wcmVwZW5kKDAsIGl0ZW1QYWdlRmlyc3QpKTsKKwor
ICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX3N0cmR1cF9wcmludGYoIi9QYWdlJWQiLCB3a0JhY2tG
b3J3YXJkTGlzdExpbWl0KSk7CisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2Fy
ZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbSB8
IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OlJlbW92ZWRJdGVtczsKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF91cmkodGVzdC0+bV93ZWJWaWV3LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0
KCkpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1v
dmVkSXRlbXMocmVtb3ZlZEl0ZW1zLmdldCgpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIHdrQmFj
a0ZvcndhcmRMaXN0TGltaXQpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZl
ciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxi
YWNrKTsKKworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmFkZCgiQmFja0ZvcndhcmRMaXN0Iiwg
Im5hdmlnYXRpb24iLCB0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlvbik7CisgICAgQmFja0Zv
cndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3QiLCAibGlzdC1saW1pdC1hbmQtY2Fj
aGUiLCB0ZXN0QmFja0ZvcndhcmRMaXN0TGltaXRBbmRDYWNoZSk7Cit9CisKK3ZvaWQgYWZ0ZXJB
bGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaAppbmRleCAyYWFjMThjLi5iM2NhZTRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
TWFpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RN
YWluLmgKQEAgLTIwLDggKzIwLDkgQEAKICNpZm5kZWYgVGVzdE1haW5faAogI2RlZmluZSBUZXN0
TWFpbl9oCiAKLSNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9HT3duUHRyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSGFzaFNldC5oPgogCiAjZGVmaW5lIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ2xhc3NOYW1l
KSBcCiAgICAgc3RhdGljIHZvaWQgc2V0VXAoQ2xhc3NOYW1lKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpIFwKQEAgLTQyLDYgKzQzLDI0IEBAIGNsYXNzIFRlc3QKIHsKIHB1YmxpYzoKICAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFRlc3QpOworCisgICAgflRlc3QoKQorICAgIHsKKyAg
ICAgICAgZ19hc3NlcnQobV93YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIG9iamVjdEZpbmFsaXplZChUZXN0KiB0ZXN0LCBHT2JqZWN0KiBmaW5hbGl6
ZWRPYmplY3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3dhdGNoZWRPYmplY3RzLnJlbW92ZShm
aW5hbGl6ZWRPYmplY3QpOworICAgIH0KKworICAgIHZvaWQgd2F0Y2hPYmplY3QoR09iamVjdCog
b2JqZWN0KQorICAgIHsKKyAgICAgICAgbV93YXRjaGVkT2JqZWN0cy5hZGQob2JqZWN0KTsKKyAg
ICAgICAgZ19vYmplY3Rfd2Vha19yZWYob2JqZWN0LCByZWludGVycHJldF9jYXN0PEdXZWFrTm90
aWZ5PihvYmplY3RGaW5hbGl6ZWQpLCB0aGlzKTsKKyAgICB9CisKKyAgICBIYXNoU2V0PEdPYmpl
Y3QqPiBtX3dhdGNoZWRPYmplY3RzOwogfTsKIAogI2VuZGlmIC8vIFRlc3RNYWluX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0
LmNwcAppbmRleCBmMzg0ZDNiLi5iZDBlY2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCkBAIC0yNCw2ICsyNCw3
IEBAIFdlYlZpZXdUZXN0OjpXZWJWaWV3VGVzdCgpCiAgICAgOiBtX3dlYlZpZXcoV0VCS0lUX1dF
Ql9WSUVXKGdfb2JqZWN0X3JlZl9zaW5rKHdlYmtpdF93ZWJfdmlld19uZXcoKSkpKQogICAgICwg
bV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCiB7CisgICAgd2F0Y2hPYmplY3Qo
R19PQkpFQ1QobV93ZWJWaWV3KSk7CiB9CiAKIFdlYlZpZXdUZXN0Ojp+V2ViVmlld1Rlc3QoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdU
ZXN0LmgKaW5kZXggY2MzMjhhNS4uMWExNmIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCkBAIC0yMyw3ICsyMyw3IEBA
CiAjaW5jbHVkZSAiVGVzdE1haW4uaCIKICNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KIAot
Y2xhc3MgV2ViVmlld1Rlc3QgeworY2xhc3MgV2ViVmlld1Rlc3Q6IHB1YmxpYyBUZXN0IHsKIHB1
YmxpYzoKICAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdlYlZpZXdUZXN0KTsKICAgICBXZWJW
aWV3VGVzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmlu
ZGV4IDU0MGM2ZTYuLmZhM2UzMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmgKQEAgLTIzLDYgKzIzLDggQEAKIAogI2RlZmluZSBfX1dFQktJVDJfSF9JTlNJ
REVfXwogCisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RXJyb3IuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CmluZGV4IGMzYTE3ODYu
LjAyODZlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDJtYXJzaGFsLmxpc3QKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mm1hcnNoYWwubGlzdApAQCAtMSwzICsxLDQgQEAKIEJPT0xFQU46U1RSSU5HLFBPSU5U
RVIKIEJPT0xFQU46Vk9JRAorVk9JRDpPQkpFQ1QsUE9JTlRFUgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111759</attachid>
            <date>2011-10-20 05:52:01 -0700</date>
            <delta_ts>2011-10-21 06:34:40 -0700</delta_ts>
            <desc>Patch updated to current git master</desc>
            <filename>wk2-bf-list7.diff</filename>
            <type>text/plain</type>
            <size>58556</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3YzMxMTYxLi44YjM3NTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsOTYg
QEAKIDIwMTEtMTAtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYmFjayBmb3J3YXJk
IGxpc3QgZm9yIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21w
aWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplKToK
KyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pbml0KToKKyAgICAgICAgKHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3
YXJkTGlzdEdldE9yQ3JlYXRlSXRlbSk6IEhlbHBlciBmdW5jdGlvbiB0aGF0CisgICAgICAgIGNy
ZWF0ZXMgYSBuZXcgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSBmb3IgdGhlIGdpdmVuCisgICAg
ICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0gb3IgcmV0dXJucyBpdCBmcm9tIHRoZSBjYWNoZSBp
ZiBpdCdzCisgICAgICAgIGFscmVhZHkgY2FjaGVkLgorICAgICAgICAod2Via2l0QmFja0Zvcndh
cmRMaXN0Q3JlYXRlTGlzdCk6IEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEKKyAgICAgICAg
V0tBcnJheSBvZiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtcyBpbnRvIGEgR0xpc3Qgb2YKKyAgICAg
ICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbXMuCisgICAgICAgICh3ZWJraXRCYWNrRm9yd2Fy
ZExpc3RDcmVhdGUpOiBDcmVhdGUgYSBuZXcgV2ViS2l0QmFja0ZvcndhcmRMaXN0LgorICAgICAg
ICAod2Via2l0QmFja0ZvcndhcmRMaXN0Q2hhbmdlZCk6IEVtaXRzIGNoYW5nZWQgc2lnbmFsIHdo
ZW4gdGhlIGJhY2sKKyAgICAgICAgZm9yd2FyZCBsaXN0IGNoYW5nZXMuCisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSk6CisgICAgICAgICh3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X250aF9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfbGVuZ3RoKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFj
a19saXN0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0
X3dpdGhfbGltaXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2xpc3QpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3Rfd2l0aF9saW1pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3
YXJkTGlzdEl0ZW1GaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2NsYXNz
X2luaXQpOgorICAgICAgICAoaGlzdG9yeUl0ZW1zTWFwKTogR2xvYmFsIGNhY2hlIGZvciBXZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtcy4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0
ZW1GaW5hbGl6ZWQpOgorICAgICAgICAod2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUdldE9yQ3Jl
YXRlKTogSGVscGVyIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgY3JlYXRlcyBhIG5ldyBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtIGZvciB0aGUgZ2l2ZW4KKyAgICAgICAgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSBvciByZXR1cm5zIGl0IGZyb20gdGhlIGdsb2JhbCBjYWNoZSBpZiBpdCdzCisgICAg
ICAgIGFscmVhZHkgY2FjaGVkLgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fZ2V0X3VyaSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRf
dGl0bGUpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdp
bmFsX3VyaSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCk6
IENhbGwgd2Via2l0QmFja0ZvcndhcmRMaXN0Q2hhbmdlZCgpIHRvCisgICAgICAgIG5vdGlmeSB0
aGF0IHRoZSBsaXN0IGhhcyBjaGFuZ2VkLgorICAgICAgICAod2Via2l0V2ViTG9hZGVyQ2xpZW50
QXR0YWNoTG9hZGVyQ2xpZW50VG9QYWdlKTogQWRkCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZv
ciBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3U2V0TG9hZGVyQ2xpZW50
KTogSW50ZXJuYWwgZnVuY3Rpb24gdG8gc2V0IHRoZQorICAgICAgICBsb2FkZXIgY2xpZW50Lgor
ICAgICAgICAod2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKTogQ3JlYXRlIHRoZSBiYWNrIGZvcndh
cmQgbGlzdCBmb3IgdGhlCisgICAgICAgIHZpZXcuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
c2V0X2xvYWRlcl9jbGllbnQpOiBVc2UKKyAgICAgICAgd2Via2l0V2ViVmlld1NldExvYWRlckNs
aWVudCgpLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCk6
IFJldHVybiB0aGUgYmFjayBmb3J3YXJkCisgICAgICAgIGxpc3QuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRl
V2ViUGFnZSk6IFJldHVybiB0aGUgbmV3bHkgY3JlYXRlZAorICAgICAgICBXZWJQYWdlUHJveHkg
dG8gYXZvaWQgaGF2aW5nIHRvIGNhbGwgd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKCkKKyAgICAg
ICAgYWZ0ZXIgY3JlYXRpbmcgaXQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgdGVzdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChzZXJ2ZXJD
YWxsYmFjayk6CisgICAgICAgICh0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlvbik6CisgICAg
ICAgICh0ZXN0QmFja0ZvcndhcmRMaXN0TGltaXRBbmRDYWNoZSk6CisgICAgICAgIChiZWZvcmVB
bGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RNYWluLmg6CisgICAgICAgIChUZXN0Ojp+VGVzdCk6IENoZWNrcyB0aGVyZSBhcmUg
bm8gb2JqZWN0cyBsZWFrZWQuCisgICAgICAgIChUZXN0OjpvYmplY3RGaW5hbGl6ZWQpOiBDYWxs
YmFjayBjYWxsZWQgd2hlbiBhIEdPYmplY3QgaXMKKyAgICAgICAgZGVsZXRlZCwgdXNlZCB0byBy
ZW1vdmUgdGhlIHdhdGNoZWQgb2JqZWN0IHRoZSBsaXN0LgorICAgICAgICAoVGVzdDo6d2F0Y2hP
YmplY3QpOiBBZGQgYW4gb2JqZWN0IHRvIHRoZSBsaXN0IG9mIHdhdGNoZWQgb2JqZWN0cworICAg
ICAgICBhbmQgYWRkIGEgd2VhayBwb2ludGVyIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IHdo
ZW4gdGhlIG9iamVjdAorICAgICAgICBpcyBmaW5hbGl6ZWQuIElmIHRoZXJlIGFyZW4ndCBvYmpl
Y3RzIGxlYWtlZCwgdGhlIGxpc3Qgc2hvdWxkIGJlCisgICAgICAgIGVtcHR5IHdoZW4gdGhlIHRl
c3QgZmluaXNoZXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rl
c3QuY3BwOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KTogV2F0Y2ggdGhlIHdl
YiB2aWV3IHRvIG1ha2Ugc3VyZSBpdCdzCisgICAgICAgIG5vdCBsZWFrZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaDogTWFrZSBXZWJWaWV3VGVzdCBp
bmhlcml0CisgICAgICAgIGZyb20gVGVzdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmg6IEluY2x1ZGUgV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggYW5kCisgICAgICAgIFdl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQybWFyc2hhbC5saXN0OgorCisyMDExLTEwLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBbR1RLXSBSZW1vdmUgV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50UHJpdmF0ZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzA0ODgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA1MmRmZTcyLi4zMmJlZTdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtNzEsNiArNzEsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05A
X2xhX0hFQQogCiBsaWJ3ZWJraXQyZ3RraW5jbHVkZWRpciA9ICQobGlid2Via2l0Z3RraW5jbHVk
ZWRpcikvd2Via2l0Mgogd2Via2l0Mmd0a19oZWFkZXJzID0gXAorCSQoV2ViS2l0MikvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAorCSQoV2ViS2l0MikvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKIAkkKFdlYktpdDIpL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYkNvbnRleHQuaCBcCkBAIC00NzQsNiArNDc2LDExIEBAIGxpYndlYmtpdDJndGtfQFdF
QktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBf
bGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvV0tSZXRhaW5QdHIuaCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBc
CisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0
LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEVycm9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEVycm9yLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi40ZDM2OGE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmNwcApAQCAtMCww
ICsxLDMwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0LmgiCisKKyNpbmNs
dWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0TWFy
c2hhbC5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYWNrRm9yd2FyZExpc3QuaD4KKyNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0QmFja0Zv
cndhcmRMaXN0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246IExpc3Qgb2YgdmlzaXRlZCBwYWdlcwor
ICogQFRpdGxlOiBXZWJLaXRCYWNrRm9yd2FyZExpc3QKKyAqIEBTZWVfYWxzbzogI1dlYktpdFdl
YlZpZXcsICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKgorICogV2ViS2l0QmFja0Zvcndh
cmRMaXN0IG1haW50YWlucyBhIGxpc3Qgb2YgdmlzaXRlZCBwYWdlcyB1c2VkIHRvCisgKiB1c2Vk
IHRvIG5hdmlnYXRlIHRvIHJlY2VudCBwYWdlcy4gSXRlbXMgYXJlIGluc2VydGVkIGluIHRoZSBs
aXN0CisgKiBpbiB0aGUgb3JkZXIgdGhleSBhcmUgdmlzaXRlZC4KKyAqCisgKiBXZWJLaXRCYWNr
Rm9yd2FyZExpc3QgYWxzbyBtYWludGFpbnMgdGhlIG5vdGlvbiBvZiB0aGUgY3VycmVudCBpdGVt
CisgKiAod2hpY2ggaXMgYWx3YXlzIGF0IGluZGV4IDApLCB0aGUgcHJlY2VkaW5nIGl0ZW0gKHdo
aWNoIGlzIGF0IGluZGV4IC0xKSwKKyAqIGFuZCB0aGUgZm9sbG93aW5nIGl0ZW0gKHdoaWNoIGlz
IGF0IGluZGV4IDEpLgorICogTWV0aG9kcyB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjaygpIGFuZCB3
ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZCgpIG1vdmUKKyAqIHRoZSBjdXJyZW50IGl0ZW0gYmFj
a3dhcmQgb3IgZm9yd2FyZCBieSBvbmUuIE1ldGhvZAorICogd2Via2l0X3dlYl92aWV3X2dvX3Rv
X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0oKSBzZXRzIHRoZSBjdXJyZW50IGl0ZW0gdG8gdGhlCisg
KiBzcGVjaWZpZWQgaXRlbS4gQWxsIG90aGVyIG1ldGhvZHMgcmV0dXJuaW5nICNXZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtPCEtLSAtLT5zCisgKiBkbyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0
aGUgY3VycmVudCBpdGVtLCB0aGV5IGp1c3QgcmV0dXJuIHRoZSByZXF1ZXN0ZWQKKyAqIGl0ZW0g
b3IgaXRlbXMuCisgKi8KKworZW51bSB7CisgICAgQ0hBTkdFRCwKKworICAgIExBU1RfU0lHTkFM
Cit9OworCit0eXBlZGVmIEhhc2hNYXA8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmLCBHUmVmUHRy
PFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0+ID4gQmFja0ZvcndhcmRMaXN0SXRlbXNNYXA7CisK
K3N0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSB7CisgICAgV0tCYWNrRm9yd2Fy
ZExpc3RSZWYgd2tMaXN0OworICAgIEJhY2tGb3J3YXJkTGlzdEl0ZW1zTWFwIGl0ZW1zTWFwOwor
fTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RF
RklORV9UWVBFKFdlYktpdEJhY2tGb3J3YXJkTGlzdCwgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
LCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRCYWNrRm9yd2FyZExpc3RGaW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUKG9i
amVjdCktPnByaXYtPn5XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKCk7CisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pbml0
KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCkKK3sKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExp
c3RQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGxpc3QsIFdFQktJ
VF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNULCBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKTsK
KyAgICBsaXN0LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdEJhY2tGb3J3YXJk
TGlzdFByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2NsYXNzX2luaXQoV2ViS2l0QmFja0ZvcndhcmRMaXN0Q2xhc3MqIGxpc3RDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGxpc3RDbGFzcyk7
CisKKyAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0QmFja0ZvcndhcmRMaXN0Rmlu
YWxpemU7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRCYWNrRm9yd2FyZExpc3Q6OmNoYW5nZWQ6
CisgICAgICogQGJhY2tfZm9yd2FyZF9saXN0OiB0aGUgI1dlYktpdEJhY2tGb3J3YXJkTGlzdCBv
biB3aGljaCB0aGUgc2lnbmFsIHdhcyBlbWl0dGVkCisgICAgICogQGl0ZW1fYWRkZWQ6IChhbGxv
dy1ub25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtIGFkZGVkIG9yICVOVUxMCisg
ICAgICogQGl0ZW1zX3JlbW92ZWQ6IGEgI0dMaXN0IG9mICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtPCEtLSAtLT5zCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4g
QGJhY2tfZm9yd2FyZF9saXN0IGNoYW5nZXMuIFRoaXMgaGFwcGVucworICAgICAqIHdoZW4gdGhl
IGN1cnJlbnQgaXRlbSBpcyB1cGRhdGVkLCBhIG5ldyBpdGVtIGlzIGFkZGVkIG9yIG9uZSBvciBt
b3JlCisgICAgICogaXRlbXMgYXJlIHJlbW92ZWQuIE5vdGUgdGhhdCBib3RoIEBpdGVtX2FkZGVk
IGFuZCBAaXRlbXNfcmVtb3ZlZCBjYW4KKyAgICAgKiAlTlVMTCB3aGVuIG9ubHkgdGhlIGN1cnJl
bnQgaXRlbSBpcyB1cGRhdGVkLiBJdGVtcyBhcmUgb25seSByZW1vdmVkCisgICAgICogd2hlbiB0
aGUgbGlzdCBpcyBjbGVhcmVkIG9yIHRoZSBtYXhpbXVtIGl0ZW1zIGxpbWl0IGlzIHJlYWNoZWQu
CisgICAgICovCisgICAgc2lnbmFsc1tDSEFOR0VEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygi
Y2hhbmdlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhsaXN0Q2xh
c3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAg
ICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxf
Vk9JRF9fT0JKRUNUX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwg
MiwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lU
RU0sCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUik7CisKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUobGlzdENsYXNzLCBzaXplb2YoV2ViS2l0QmFja0ZvcndhcmRMaXN0
UHJpdmF0ZSkpOworfQorCitzdGF0aWMgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0
QmFja0ZvcndhcmRMaXN0R2V0T3JDcmVhdGVJdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlz
dCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrTGlzdEl0ZW0pCit7CisgICAgaWYgKCF3a0xp
c3RJdGVtKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdFBy
aXZhdGUqIHByaXYgPSBsaXN0LT5wcml2OworICAgIEdSZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbT4gbGlzdEl0ZW0gPSBwcml2LT5pdGVtc01hcC5nZXQod2tMaXN0SXRlbSk7CisgICAg
aWYgKGxpc3RJdGVtKQorICAgICAgICByZXR1cm4gbGlzdEl0ZW0uZ2V0KCk7CisKKyAgICBsaXN0
SXRlbSA9IHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNyZWF0ZSh3a0xpc3RJdGVtKTsK
KyAgICBwcml2LT5pdGVtc01hcC5zZXQod2tMaXN0SXRlbSwgbGlzdEl0ZW0pOworCisgICAgcmV0
dXJuIGxpc3RJdGVtLmdldCgpOworfQorCitzdGF0aWMgR0xpc3QqIHdlYmtpdEJhY2tGb3J3YXJk
TGlzdENyZWF0ZUxpc3QoV0tBcnJheVJlZiB3a0xpc3QpCit7CisgICAgaWYgKCF3a0xpc3QpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgR0xpc3QqIGxpc3QgPSAwOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgV0tBcnJheUdldFNpemUod2tMaXN0KTsgKytpKSB7CisgICAgICAgIFdLQmFj
a0ZvcndhcmRMaXN0SXRlbVJlZiB3a0l0ZW0gPSBzdGF0aWNfY2FzdDxXS0JhY2tGb3J3YXJkTGlz
dEl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a0xpc3QsIGkpKTsKKyAgICAgICAgV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9IHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1H
ZXRPckNyZWF0ZSh3a0l0ZW0pOworICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBsaXN0ID0gZ19saXN0X3ByZXBlbmQobGlzdCwgaXRlbSk7CisgICAg
fQorCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK1dlYktpdEJhY2tGb3J3YXJkTGlzdCogd2Via2l0
QmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdLQmFja0ZvcndhcmRMaXN0UmVmIHdrTGlzdCkKK3sKKyAg
ICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1Qo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNULCBOVUxMKSk7CisgICAg
bGlzdC0+cHJpdi0+d2tMaXN0ID0gd2tMaXN0OworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK3Zv
aWQgd2Via2l0QmFja0ZvcndhcmRMaXN0Q2hhbmdlZChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJh
Y2tGb3J3YXJkTGlzdCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrQWRkZWRJdGVtLCBXS0Fy
cmF5UmVmIHdrUmVtb3ZlZEl0ZW1zKQoreworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0q
IGFkZGVkSXRlbSA9IHdlYmtpdEJhY2tGb3J3YXJkTGlzdEdldE9yQ3JlYXRlSXRlbShiYWNrRm9y
d2FyZExpc3QsIHdrQWRkZWRJdGVtKTsKKyAgICBHTGlzdCogcmVtb3ZlZEl0ZW1zID0gMDsKKwor
ICAgIHNpemVfdCByZW1vdmVkSXRlbXNTaXplID0gd2tSZW1vdmVkSXRlbXMgPyBXS0FycmF5R2V0
U2l6ZSh3a1JlbW92ZWRJdGVtcykgOiAwOworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZh
dGUqIHByaXYgPSBiYWNrRm9yd2FyZExpc3QtPnByaXY7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByZW1vdmVkSXRlbXNTaXplOyArK2kpIHsKKyAgICAgICAgV0tCYWNrRm9yd2FyZExpc3RJ
dGVtUmVmIHdrSXRlbSA9IHN0YXRpY19jYXN0PFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KHdrUmVtb3ZlZEl0ZW1zLCBpKSk7CisgICAgICAgIHJlbW92ZWRJ
dGVtcyA9IGdfbGlzdF9wcmVwZW5kKHJlbW92ZWRJdGVtcywgZ19vYmplY3RfcmVmKEdfT0JKRUNU
KHByaXYtPml0ZW1zTWFwLmdldCh3a0l0ZW0pLmdldCgpKSkpOworICAgICAgICBwcml2LT5pdGVt
c01hcC5yZW1vdmUod2tJdGVtKTsKKyAgICB9CisKKyAgICBnX3NpZ25hbF9lbWl0KGJhY2tGb3J3
YXJkTGlzdCwgc2lnbmFsc1tDSEFOR0VEXSwgMCwgYWRkZWRJdGVtLCByZW1vdmVkSXRlbXMsIE5V
TEwpOworICAgIGdfbGlzdF9mcmVlX2Z1bGwocmVtb3ZlZEl0ZW1zLCBzdGF0aWNfY2FzdDxHRGVz
dHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpKTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAj
V2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCBpdGVtIGlu
IEBiYWNrX2ZvcndhcmRfbGlzdC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBub25l
KTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqICAgIG9yICVOVUxMIGlmIEBiYWNrX2Zvcndh
cmRfbGlzdCBpcyBlbXB0eS4KKyAqLworV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0
KiBiYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3YXJkTGlzdCksIDApOworCisgICAgcmV0dXJuIHdl
YmtpdEJhY2tGb3J3YXJkTGlzdEdldE9yQ3JlYXRlSXRlbShiYWNrRm9yd2FyZExpc3QsIFdLQmFj
a0ZvcndhcmRMaXN0R2V0Q3VycmVudEl0ZW0oYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3Qp
KTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbToK
KyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgorICog
UmV0dXJucyB0aGUgaXRlbSB0aGF0IHByZWNlZGVzIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0K
KyAqICAgIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtIG9yICVOVUxMLgorICovCitXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRl
bShXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFja0ZvcndhcmRMaXN0
KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0R2V0T3JDcmVhdGVJdGVt
KGJhY2tGb3J3YXJkTGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrSXRlbShiYWNrRm9yd2Fy
ZExpc3QtPnByaXYtPndrTGlzdCkpOworfQorCisvKioKKyAqIHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfZm9yd2FyZF9pdGVtOgorICogQGJhY2tfZm9yd2FyZF9saXN0OiBhICNXZWJLaXRC
YWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBpdGVtIHRoYXQgc3VjY2VlZHMgdGhl
IGN1cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbQorICogICAgZm9sbG93aW5nIHRoZSBjdXJyZW50IGl0ZW0g
b3IgJU5VTEwuCisgKi8KK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0Zv
cndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZP
UldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIHJldHVybiB3ZWJraXRCYWNr
Rm9yd2FyZExpc3RHZXRPckNyZWF0ZUl0ZW0oYmFja0ZvcndhcmRMaXN0LCBXS0JhY2tGb3J3YXJk
TGlzdEdldEZvcndhcmRJdGVtKGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0KSk7Cit9CisK
Ky8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbToKKyAqIEBiYWNr
X2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKiBAaW5kZXg6IHRoZSBp
bmRleCBvZiB0aGUgaXRlbQorICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gYXQgYSBnaXZlbiBpbmRl
eCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKiAgICBsb2NhdGVkIGF0
IHRoZSBzcGVjaWZpZWQgaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgaXRlbS4KKyAqLwor
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9u
dGhfaXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCwgZ2ludCBpbmRl
eCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJ
U1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRM
aXN0R2V0T3JDcmVhdGVJdGVtKGJhY2tGb3J3YXJkTGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRJ
dGVtQXRJbmRleChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCwgaW5kZXgpKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aDoKKyAqIEBiYWNrX2Zv
cndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJuczogdGhl
IGxlbmd0aCBvZiBAYmFja19mb3J3YXJkX2xpc3QuCisgKi8KK2d1aW50IHdlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRM
aXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZPUldBUkRf
TElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdFBy
aXZhdGUqIHByaXYgPSBiYWNrRm9yd2FyZExpc3QtPnByaXY7CisgICAgZ3VpbnQgY3VycmVudEl0
ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShiYWNrRm9yd2Fy
ZExpc3QpID8gMSA6IDA7CisgICAgcmV0dXJuIFdLQmFja0ZvcndhcmRMaXN0R2V0QmFja0xpc3RD
b3VudChwcml2LT53a0xpc3QpICsgV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkTGlzdENvdW50
KHByaXYtPndrTGlzdCkgKyBjdXJyZW50SXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2Vi
S2l0QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXQu
QmFja0ZvcndhcmRMaXN0SXRlbSkgKHRyYW5zZmVyIGNvbnRhaW5lcik6IGEgI0dMaXN0IG9mCisg
KiAgICBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbS4KKyAqLworR0xpc3QqIHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCog
YmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19C
QUNLX0ZPUldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIGd1aW50IGxpbWl0
ID0gV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrTGlzdENvdW50KGJhY2tGb3J3YXJkTGlzdC0+cHJp
di0+d2tMaXN0KTsKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlTGlzdChX
S0JhY2tGb3J3YXJkTGlzdENvcHlCYWNrTGlzdFdpdGhMaW1pdChiYWNrRm9yd2FyZExpc3QtPnBy
aXYtPndrTGlzdCwgbGltaXQpKTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2JhY2tfbGlzdF93aXRoX2xpbWl0OgorICogQGJhY2tfZm9yd2FyZF9saXN0OiBhICNX
ZWJLaXRCYWNrRm9yd2FyZExpc3QKKyAqIEBsaW1pdDogdGhlIG51bWJlciBvZiBpdGVtcyB0byBy
ZXRyaWV2ZQorICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJk
TGlzdEl0ZW0pICh0cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMg
cHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0gbGltaXRlZCBieSBAbGltaXQuCisgKi8KK0dMaXN0
KiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93aXRoX2xpbWl0KFdlYktp
dEJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0LCBndWludCBsaW1pdCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1QoYmFja0Zvcndh
cmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlTGlz
dChXS0JhY2tGb3J3YXJkTGlzdENvcHlCYWNrTGlzdFdpdGhMaW1pdChiYWNrRm9yd2FyZExpc3Qt
PnByaXYtPndrTGlzdCwgbGltaXQpKTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2ZvcndhcmRfbGlzdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0
QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXQuQmFj
a0ZvcndhcmRMaXN0SXRlbSkgKHRyYW5zZmVyIGNvbnRhaW5lcik6IGEgI0dMaXN0IG9mCisgKiAg
ICBpdGVtcyBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgaXRlbS4KKyAqLworR0xpc3QqIHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCog
YmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19C
QUNLX0ZPUldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIGd1aW50IGxpbWl0
ID0gV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkTGlzdENvdW50KGJhY2tGb3J3YXJkTGlzdC0+
cHJpdi0+d2tMaXN0KTsKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlTGlz
dChXS0JhY2tGb3J3YXJkTGlzdENvcHlGb3J3YXJkTGlzdFdpdGhMaW1pdChiYWNrRm9yd2FyZExp
c3QtPnByaXYtPndrTGlzdCwgbGltaXQpKTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0OgorICogQGJhY2tfZm9yd2FyZF9s
aXN0OiBhICNXZWJLaXRCYWNrRm9yd2FyZExpc3QKKyAqIEBsaW1pdDogdGhlIG51bWJlciBvZiBp
dGVtcyB0byByZXRyaWV2ZQorICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJh
Y2tGb3J3YXJkTGlzdEl0ZW0pICh0cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICog
ICAgaXRlbXMgZm9sbG93aW5nIHRoZSBjdXJyZW50IGl0ZW0gbGltaXRlZCBieSBAbGltaXQuCisg
Ki8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRo
X2xpbWl0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0LCBndWludCBsaW1p
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJ
U1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRM
aXN0Q3JlYXRlTGlzdChXS0JhY2tGb3J3YXJkTGlzdENvcHlGb3J3YXJkTGlzdFdpdGhMaW1pdChi
YWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCwgbGltaXQpKTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkYjA4OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJk
TGlzdC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJL
SVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdEJhY2tGb3J3YXJk
TGlzdF9oCisjZGVmaW5lIFdlYktpdEJhY2tGb3J3YXJkTGlzdF9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5o
PgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1QgICAgICAgICAgICAod2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZPUldB
UkRfTElTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0ZvcndhcmRMaXN0KSkK
KyNkZWZpbmUgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNU
LCBXZWJLaXRCYWNrRm9yd2FyZExpc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19CQUNLX0ZP
UldBUkRfTElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCkpCisjZGVmaW5lIFdFQktJVF9JU19CQUNL
X0ZPUldBUkRfTElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCkpCisjZGVmaW5lIFdFQktJVF9CQUNL
X0ZPUldBUkRfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0ZvcndhcmRM
aXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0ICAgICAg
ICBXZWJLaXRCYWNrRm9yd2FyZExpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0Zvcndh
cmRMaXN0Q2xhc3MgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZh
dGU7CisKK3N0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0IHsKKyAgICBHT2JqZWN0IHBhcmVu
dDsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1
Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF90eXBlICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbSAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJl
bnRfaXRlbSAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9yd2FyZF9s
aXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICoKK3dlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtICAgICAgICAgICAgICAgKFdlYktpdEJhY2tG
b3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIFdlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0gKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0
ZW0gICAgICAgICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7
CisKK1dFQktJVF9BUEkgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSAqCit3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtICAgICAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2Fy
ZExpc3QgKmJhY2tfZm9yd2FyZF9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgICAgICBpbmRleCk7CitX
RUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCAgICAg
ICAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9yd2FyZF9saXN0KTsK
KworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tf
bGlzdCAgICAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9yd2FyZF9s
aXN0KTsKKworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfbGlzdF93aXRoX2xpbWl0ICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9y
d2FyZF9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICBsaW1pdCk7CisKK1dFQktJVF9BUEkgR0xp
c3QgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QgICAgICAgICAg
ICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9B
UEkgR0xpc3QgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0
aF9saW1pdCAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAg
ICAgICAgICAgICAgICAgbGltaXQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1
MDY4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmgiCisKKyNpbmNsdWRlICJXZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0JhY2tGb3J3YXJkTGlz
dEl0ZW0uaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdHJ1Y3Qg
X1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlIHsKKyAgICBXS1JldGFpblB0cjxXS0Jh
Y2tGb3J3YXJkTGlzdEl0ZW1SZWY+IHdrTGlzdEl0ZW07CisgICAgQ1N0cmluZyB1cmk7CisgICAg
Q1N0cmluZyB0aXRsZTsKKyAgICBDU3RyaW5nIG9yaWdpbmFsVVJJOworfTsKKworR19ERUZJTkVf
VFlQRShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbSwgR19UWVBFX0lOSVRJQUxMWV9VTk9XTkVEKQorCitzdGF0aWMgdm9pZCB3ZWJraXRCYWNr
Rm9yd2FyZExpc3RJdGVtRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9C
QUNLX0ZPUldBUkRfTElTVF9JVEVNKG9iamVjdCktPnByaXYtPn5XZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2luaXQoV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbSogbGlzdEl0ZW0pCit7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZh
dGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUobGlzdEl0ZW0sIFdFQktJVF9U
WVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0sIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2
YXRlKTsKKyAgICBsaXN0SXRlbS0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfaXRlbV9jbGFzc19pbml0KFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1D
bGFzcyogbGlzdEl0ZW1DbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKGxpc3RJdGVtQ2xhc3MpOworCisgICAgZ09iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1GaW5hbGl6ZTsKKworICAgIGdfdHlwZV9j
bGFzc19hZGRfcHJpdmF0ZShsaXN0SXRlbUNsYXNzLCBzaXplb2YoV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbVByaXZhdGUpKTsKK30KKwordHlwZWRlZiBIYXNoTWFwPFdLQmFja0ZvcndhcmRMaXN0
SXRlbVJlZiwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogPiBIaXN0b3J5SXRlbXNNYXA7CisK
K3N0YXRpYyBIaXN0b3J5SXRlbXNNYXAmIGhpc3RvcnlJdGVtc01hcCgpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChIaXN0b3J5SXRlbXNNYXAsIGl0ZW1zTWFwLCAoKSk7CisgICAgcmV0dXJu
IGl0ZW1zTWFwOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtRmlu
YWxpemVkKGdwb2ludGVyIHdrTGlzdEl0ZW0sIEdPYmplY3QqIGZpbmFsaXplZExpc3RJdGVtKQor
eworICAgIEFTU0VSVChHX09CSkVDVChoaXN0b3J5SXRlbXNNYXAoKS5nZXQoc3RhdGljX2Nhc3Q8
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPih3a0xpc3RJdGVtKSkpID09IGZpbmFsaXplZExpc3RJ
dGVtKTsKKyAgICBoaXN0b3J5SXRlbXNNYXAoKS5yZW1vdmUoc3RhdGljX2Nhc3Q8V0tCYWNrRm9y
d2FyZExpc3RJdGVtUmVmPih3a0xpc3RJdGVtKSk7Cit9CisKK1dlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0qIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRPckNyZWF0ZShXS0JhY2tGb3J3YXJk
TGlzdEl0ZW1SZWYgd2tMaXN0SXRlbSkKK3sKKyAgICBpZiAoIXdrTGlzdEl0ZW0pCisgICAgICAg
IHJldHVybiAwOworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdEl0ZW0gPSBo
aXN0b3J5SXRlbXNNYXAoKS5nZXQod2tMaXN0SXRlbSk7CisgICAgaWYgKGxpc3RJdGVtKQorICAg
ICAgICByZXR1cm4gbGlzdEl0ZW07CisKKyAgICBsaXN0SXRlbSA9IFdFQktJVF9CQUNLX0ZPUldB
UkRfTElTVF9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVF9J
VEVNLCBOVUxMKSk7CisgICAgbGlzdEl0ZW0tPnByaXYtPndrTGlzdEl0ZW0gPSB3a0xpc3RJdGVt
OworCisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QobGlzdEl0ZW0pLCB3ZWJraXRCYWNr
Rm9yd2FyZExpc3RJdGVtRmluYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGdwb2ludGVyPihjb25zdF9jYXN0PE9wYXF1ZVdLQmFja0ZvcndhcmRMaXN0SXRlbSo+KHdr
TGlzdEl0ZW0pKSk7CisgICAgaGlzdG9yeUl0ZW1zTWFwKCkuc2V0KHdrTGlzdEl0ZW0sIGxpc3RJ
dGVtKTsKKworICAgIHJldHVybiBsaXN0SXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJpOgorICogQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW06IGEg
I1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0KKyAqCisgKiBUaGlzIFVSSSBtYXkgZGlmZmVyIGZy
b20gdGhlIG9yaWdpbmFsIFVSSSBpZiB0aGUgcGFnZSB3YXMsCisgKiBmb3IgZXhhbXBsZSwgcmVk
aXJlY3RlZCB0byBhIG5ldyBsb2NhdGlvbi4KKyAqIFNlZSBhbHNvIHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoKS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgVVJJ
IG9mIEBiYWNrX2ZvcndhcmRfbGlzdF9pdGVtLgorICovCitjb25zdCBnY2hhciogd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3VyaShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBs
aXN0SXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JX
QVJEX0xJU1RfSVRFTShsaXN0SXRlbSksIDApOworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbVByaXZhdGUqIHByaXYgPSBsaXN0SXRlbS0+cHJpdjsKKyAgICBXS1JldGFpblB0cjxXS1VS
TFJlZj4gd2tVUkkoQWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTChwcml2LT53
a0xpc3RJdGVtLmdldCgpKSk7CisgICAgaWYgKHRvSW1wbCh3a1VSSS5nZXQoKSktPnN0cmluZygp
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwcml2LT51cmkgPSB0b0ltcGwo
d2tVUkkuZ2V0KCkpLT5zdHJpbmcoKS51dGY4KCk7CisgICAgcmV0dXJuIHByaXYtPnVyaS5kYXRh
KCk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxl
OgorICogQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW06IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0KKyAqCisgKiBSZXR1cm5zOiB0aGUgcGFnZSB0aXRsZSBvZiBAYmFja19mb3J3YXJkX2xpc3Rf
aXRlbS4KKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dl
dF90aXRsZShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0SXRlbSkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShsaXN0SXRl
bSksIDApOworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUqIHByaXYgPSBs
aXN0SXRlbS0+cHJpdjsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZShBZG9w
dFdLLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VGl0bGUocHJpdi0+d2tMaXN0SXRlbS5nZXQo
KSkpOworICAgIGlmICh0b0ltcGwod2tUaXRsZS5nZXQoKSktPnN0cmluZygpLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwcml2LT50aXRsZSA9IHRvSW1wbCh3a1RpdGxlLmdl
dCgpKS0+c3RyaW5nKCkudXRmOCgpOworICAgIHJldHVybiBwcml2LT50aXRsZS5kYXRhKCk7Cit9
CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3Vy
aToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdF9pdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQor
ICoKKyAqIFNlZSBhbHNvIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmkoKS4K
KyAqCisgKiBSZXR1cm5zOiB0aGUgb3JpZ2luYWwgVVJJIG9mIEBiYWNrX2ZvcndhcmRfbGlzdF9p
dGVtLgorICovCitjb25zdCBnY2hhciogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0
X29yaWdpbmFsX3VyaShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0SXRlbSkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShs
aXN0SXRlbSksIDApOworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUqIHBy
aXYgPSBsaXN0SXRlbS0+cHJpdjsKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tPcmlnaW5h
bFVSSShBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5T3JpZ2luYWxVUkwocHJpdi0+
d2tMaXN0SXRlbS5nZXQoKSkpOworICAgIGlmICh0b0ltcGwod2tPcmlnaW5hbFVSSS5nZXQoKSkt
PnN0cmluZygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwcml2LT5vcmln
aW5hbFVSSSA9IHRvSW1wbCh3a09yaWdpbmFsVVJJLmdldCgpKS0+c3RyaW5nKCkudXRmOCgpOwor
ICAgIHJldHVybiBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNmY2M3ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0uaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRl
ZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQy
Lmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtX2gKKyNkZWZpbmUgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbV9o
CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVm
aW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfQkFDS19GT1JX
QVJEX0xJU1RfSVRFTSAgICAgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9C
QUNLX0ZPUldBUkRfTElTVF9JVEVNLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKSkKKyNkZWZp
bmUgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU1fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1Rf
SVRFTSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSkpCisjZGVm
aW5lIFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVF9JVEVNX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNU
X0lURU0pKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRFTV9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9CQUNL
X0ZPUldBUkRfTElTVF9JVEVNLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3MpKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSAgICAgICAgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtQ2xhc3MgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3M7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUgV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSB7CisgICAg
R0luaXRpYWxseVVub3duZWQgcGFyZW50OworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRl
bVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1D
bGFzcyB7CisgICAgR0luaXRpYWxseVVub3duZWRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdHlwZSAg
ICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJpICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtKiBsaXN0X2l0ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX2dldF90aXRsZSAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0qIGxpc3RfaXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbSogbGlzdF9pdGVtKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9y
d2FyZExpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMx
MmE5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaApAQCAtMCwwICsxLDM3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViS2l0
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEJhY2tGb3J3YXJkTGlzdFBy
aXZhdGVfaAorCisjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiV2Vi
S2l0QmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisKK1dl
YktpdEJhY2tGb3J3YXJkTGlzdCogd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdLQmFja0Zv
cndhcmRMaXN0UmVmKTsKK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdEJhY2tGb3J3
YXJkTGlzdEl0ZW1HZXRPckNyZWF0ZShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYpOwordm9pZCB3
ZWJraXRCYWNrRm9yd2FyZExpc3RDaGFuZ2VkKFdlYktpdEJhY2tGb3J3YXJkTGlzdCosIFdLQmFj
a0ZvcndhcmRMaXN0SXRlbVJlZiB3a0FkZGVkSXRlbSwgV0tBcnJheVJlZiB3a1JlbW92ZWRJdGVt
cyk7CisKKyNlbmRpZiAvLyBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJD
bGllbnQuY3BwCmluZGV4IDAzMDJhYjcuLmY4YjNjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmNwcApA
QCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFdl
YkxvYWRlckNsaWVudC5oIgogCisjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0
ZS5oIgogI2luY2x1ZGUgIldlYktpdEVycm9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5o
IgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKQEAgLTEyNSw2ICsxMjYsMTIgQEAgc3RhdGlj
IHZvaWQgZGlkQ2hhbmdlUHJvZ3Jlc3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCiAgICAgd2Via2l0V2ViVmlld1NldEVzdGltYXRlZExvYWRQcm9ncmVzcyh3ZWJWaWV3
LCBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncmVzcyhwYWdlKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGRp
ZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VSZWYgcGFnZSwgV0tCYWNrRm9yd2FyZExpc3RJ
dGVtUmVmIGFkZGVkSXRlbSwgV0tBcnJheVJlZiByZW1vdmVkSXRlbXMsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSk7CisgICAgd2Via2l0QmFja0ZvcndhcmRMaXN0
Q2hhbmdlZCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpLCBh
ZGRlZEl0ZW0sIHJlbW92ZWRJdGVtcyk7Cit9CisKIHZvaWQgd2Via2l0V2ViTG9hZGVyQ2xpZW50
QXR0YWNoTG9hZGVyQ2xpZW50VG9QYWdlKFdlYktpdFdlYkxvYWRlckNsaWVudCogbG9hZGVyQ2xp
ZW50LCBXS1BhZ2VSZWYgd2tQYWdlKQogewogICAgIFdLUGFnZUxvYWRlckNsaWVudCB3a0xvYWRl
ckNsaWVudCA9IHsKQEAgLTE1Miw3ICsxNTksNyBAQCB2b2lkIHdlYmtpdFdlYkxvYWRlckNsaWVu
dEF0dGFjaExvYWRlckNsaWVudFRvUGFnZShXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGxvYWRlcgog
ICAgICAgICAwLCAvLyBkaWRCZWNvbWVVbnJlc3BvbnNpdmUKICAgICAgICAgMCwgLy8gZGlkQmVj
b21lUmVzcG9uc2l2ZQogICAgICAgICAwLCAvLyBwcm9jZXNzRGlkQ3Jhc2gKLSAgICAgICAgMCwg
Ly8gZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0CisgICAgICAgIGRpZENoYW5nZUJhY2tGb3J3YXJk
TGlzdCwKICAgICAgICAgMCwgLy8gc2hvdWxkR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0KICAgICAg
ICAgMCAvLyBkaWRGYWlsVG9Jbml0aWFsaXplUGx1Z2luCiAgICAgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggN2EwOGYx
Mi4uMzFiYmExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3LmgiCiAKKyNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2Fy
ZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJLaXRXZWJMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJMb2Fk
ZXJDbGllbnRQcml2YXRlLmgiCkBAIC01MCwxOSArNTEsMjcgQEAgc3RydWN0IF9XZWJLaXRXZWJW
aWV3UHJpdmF0ZSB7CiAgICAgZG91YmxlIGVzdGltYXRlZExvYWRQcm9ncmVzczsKIAogICAgIEdS
ZWZQdHI8V2ViS2l0V2ViTG9hZGVyQ2xpZW50PiBsb2FkZXJDbGllbnQ7CisgICAgR1JlZlB0cjxX
ZWJLaXRCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsKIH07CiAKIEdfREVGSU5FX1RZ
UEUoV2ViS2l0V2ViVmlldywgd2Via2l0X3dlYl92aWV3LCBXRUJLSVRfVFlQRV9XRUJfVklFV19C
QVNFKQogCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0TG9hZGVyQ2xpZW50KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkxvYWRlckNsaWVudCogbG9hZGVyQ2xpZW50LCBXS1Bh
Z2VSZWYgd2tQYWdlKQoreworICAgIHdlYlZpZXctPnByaXYtPmxvYWRlckNsaWVudCA9IGxvYWRl
ckNsaWVudDsKKyAgICB3ZWJraXRXZWJMb2FkZXJDbGllbnRBdHRhY2hMb2FkZXJDbGllbnRUb1Bh
Z2UobG9hZGVyQ2xpZW50LCB3a1BhZ2UpOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3
Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KTsKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSog
cHJpdiA9IHdlYlZpZXctPnByaXY7Ci0KLSAgICB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBh
Z2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldyksIHdlYmtpdFdlYkNvbnRleHRHZXRXS0Nv
bnRleHQocHJpdi0+Y29udGV4dCksIDApOworICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtp
dFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwg
d2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4dChwcml2LT5jb250ZXh0KSwgMCk7CiAKICAgICBz
dGF0aWMgR1JlZlB0cjxXZWJLaXRXZWJMb2FkZXJDbGllbnQ+IGRlZmF1bHRMb2FkZXJDbGllbnQg
PSBhZG9wdEdSZWYoV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9XRUJfTE9BREVSX0NMSUVOVCwgTlVMTCkpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0
X2xvYWRlcl9jbGllbnQod2ViVmlldywgZGVmYXVsdExvYWRlckNsaWVudC5nZXQoKSk7CisgICAg
d2Via2l0V2ViVmlld1NldExvYWRlckNsaWVudCh3ZWJWaWV3LCBkZWZhdWx0TG9hZGVyQ2xpZW50
LmdldCgpLCB0b0FQSShwYWdlKSk7CisKKyAgICBwcml2LT5iYWNrRm9yd2FyZExpc3QgPSBhZG9w
dEdSZWYod2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdLUGFnZUdldEJhY2tGb3J3YXJkTGlz
dCh0b0FQSShwYWdlKSkpKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1NldFByb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwYXJhbVNwZWMpCkBAIC0yMzUsOCArMjQ0LDcgQEAgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfc2V0X2xvYWRlcl9jbGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2Vi
TG9hZGVyQ2wKICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
a2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKTsKLSAg
ICB3ZWJraXRXZWJMb2FkZXJDbGllbnRBdHRhY2hMb2FkZXJDbGllbnRUb1BhZ2UobG9hZGVyQ2xp
ZW50LCB0b0FQSShwYWdlKSk7Ci0gICAgcHJpdi0+bG9hZGVyQ2xpZW50ID0gbG9hZGVyQ2xpZW50
OworICAgIHdlYmtpdFdlYlZpZXdTZXRMb2FkZXJDbGllbnQod2ViVmlldywgbG9hZGVyQ2xpZW50
LCB0b0FQSShwYWdlKSk7CiB9CiAKIC8qKgpAQCAtNDE2LDcgKzQyNCw3IEBAIHZvaWQgd2Via2l0
X3dlYl92aWV3X3NldF9jdXN0b21fY2hhcnNldChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25z
dCBnY2hhciogY2hhCiAgICAgV0tQYWdlU2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh0b0FQSShw
YWdlKSwgd2tFbmNvZGluZ05hbWUuZ2V0KCkpOwogfQogCi0vKgorLyoqCiAgKiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2VzdGltYXRlZF9sb2FkX3Byb2dyZXNzOgogICogQHdlYl92aWV3OiBhICNXZWJL
aXRXZWJWaWV3CiAgKgpAQCAtNDMyLDMgKzQ0MCwxOSBAQCBnZG91YmxlIHdlYmtpdF93ZWJfdmll
d19nZXRfZXN0aW1hdGVkX2xvYWRfcHJvZ3Jlc3MoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOwog
ICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5lc3RpbWF0ZWRMb2FkUHJvZ3Jlc3M7CiB9CisKKy8q
KgorICogd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdDoKKyAqIEB3ZWJfdmll
dzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIE9idGFpbnMgdGhlICNXZWJLaXRCYWNrRm9yd2Fy
ZExpc3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiAjV2ViS2l0V2ViVmlldy4gVGhlCisgKiAj
V2ViS2l0QmFja0ZvcndhcmRMaXN0IGlzIG93bmVkIGJ5IHRoZSAjV2ViS2l0V2ViVmlldy4KKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0
CisgKi8KK1dlYktpdEJhY2tGb3J3YXJkTGlzdCogd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2Zv
cndhcmRfbGlzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CisKKyAgICByZXR1cm4gd2Vi
Vmlldy0+cHJpdi0+YmFja0ZvcndhcmRMaXN0LmdldCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDA4N2Q5NWIuLmZmNzEx
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYgV2ViS2l0V2ViVmlld19oCiAjZGVmaW5l
IFdlYktpdFdlYlZpZXdfaAogCisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExp
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFdlYkNvbnRleHQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkxvYWRl
ckNsaWVudC5oPgpAQCAtMTAzLDEzICsxMDQsMTYgQEAgV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRf
d2ViX3ZpZXdfZ29fYmFjayAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgKndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X3dlYl92aWV3X2Nh
bl9nb19iYWNrICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOword2Vi
a2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAg
ICAgICAgICp3ZWJfdmlldyk7CiAKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3dlYl92aWV3X2dv
X2ZvcndhcmQgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmll
dyk7CiAKK1dFQktJVF9BUEkgV2ViS2l0QmFja0ZvcndhcmRMaXN0ICoKK3dlYmtpdF93ZWJfdmll
d19nZXRfYmFja19mb3J3YXJkX2xpc3QgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2Vi
X3ZpZXcpOworCiBXRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Zv
cndhcmQgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2dvX2ZvcndhcmQgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
KndlYl92aWV3KTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2N1c3RvbV9jaGFyc2V0ICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92
aWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcAppbmRleCA2ZGRlNjIzLi4wMzNlMWU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBA
IC00MzMsMTIgKzQzMywxMyBAQCBXZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFn
ZShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiAgICAgcmV0dXJuIHdlYmtp
dFdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHkuZ2V0KCk7CiB9CiAKLXZvaWQgd2Via2l0V2Vi
Vmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFz
ZSwgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCkKK1dlYlBh
Z2VQcm94eSogd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJraXRXZWJWaWV3QmFzZSwgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cCkKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJr
aXRXZWJWaWV3QmFzZS0+cHJpdjsKIAogICAgIHByaXYtPnBhZ2VQcm94eSA9IHRvSW1wbChjb250
ZXh0KS0+Y3JlYXRlV2ViUGFnZShwcml2LT5wYWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdy
b3VwKSk7CiAgICAgcHJpdi0+cGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIHJl
dHVybiBwcml2LT5wYWdlUHJveHkuZ2V0KCk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VT
ZXRUb29sdGlwVGV4dChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGNvbnN0IGNoYXIq
IHRvb2x0aXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IDNhOWE0MGIuLjlkODJmMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZS5oCkBAIC00Miw3ICs0Miw3IEBAIEd0a0lNQ29udGV4dCogd2Vi
a2l0V2ViVmlld0Jhc2VHZXRJTUNvbnRleHQoV2ViS2l0V2ViVmlld0Jhc2UqKTsKIAogV2ViUGFn
ZVByb3h5KiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqKTsKIAot
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqLCBX
S0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmKTsKK1dlYlBhZ2VQcm94eSogd2Via2l0V2ViVmll
d0Jhc2VDcmVhdGVXZWJQYWdlKFdlYktpdFdlYlZpZXdCYXNlKiwgV0tDb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZik7CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTZXRUb29sdGlwVGV4dChXZWJL
aXRXZWJWaWV3QmFzZSosIGNvbnN0IGNoYXIqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQppbmRleCAyODU2MGMwLi5k
OTEyYjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAtMiw3ICsyLDggQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJv
Z3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwKIAlQcm9ncmFtcy9X
ZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAogCVByb2dyYW1zL1dlYktpdDJBUElU
ZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50IFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVz
dHMvVGVzdFdlYktpdFNldHRpbmdzCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJL
aXRTZXR0aW5ncyBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExp
c3QKIAogbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9QUk9HUykKIHdlYmtpdDJfdGVzdHNfY3Bw
ZmxhZ3MgPSBcCkBAIC02OCwzICs2OSwxMCBAQCBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dFdlYktpdFNldHRpbmdzX1NPVVJDRVMgPSBcCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dFdlYktpdFNldHRpbmdzX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQogUHJv
Z3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0aW5nc19MREFERCA9ICQod2Via2l0
Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0U2V0dGlu
Z3NfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19XZWJLaXQy
QVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9TT1VSQ0VTID0gXAorICAgICAgICBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcAor
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfQ1BQRkxBR1MgPSAk
KHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJh
Y2tGb3J3YXJkTGlzdF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dl
YktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfbGRmbGFncykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41ZTkzZTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAKQEAg
LTAsMCArMSwyNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1
ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93
ZWJraXQyLmg+CisKKy8vIEJhY2sgZm9yd2FyZCBsaXN0IGxpbWl0IGlzIDEwMCBieSBkZWZhdWx0
Lgorc3RhdGljIGNvbnN0IHNpemVfdCB3a0JhY2tGb3J3YXJkTGlzdExpbWl0ID0gMTAwOworCitz
dGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworc3RhdGljIHZvaWQgc2VydmVyQ2Fs
bGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBw
YXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQsIGdwb2lu
dGVyIGRhdGEpCit7CisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGNoYXIqIGJvZHkgPSBnX3N0cmR1
cF9wcmludGYoIjxodG1sPjx0aXRsZT4lczwvdGl0bGU+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiIs
IHBhdGggKyAxLCBwYXRoICsgMSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgYm9keSwgc3RybGVuKGJvZHkpKTsKKwor
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisK
K2NsYXNzIEJhY2tGb3J3YXJkTGlzdFRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKK3B1
YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEJhY2tGb3J3YXJkTGlzdFRlc3QpOwor
CisgICAgZW51bSB7CisgICAgICAgIEJhY2t3YXJkLAorICAgICAgICBGb3J3YXJkCisgICAgfTsK
KworICAgIGVudW0geworICAgICAgICBDdXJyZW50SXRlbSAgPSAxIDw8IDAsCisgICAgICAgIEFk
ZGVkSXRlbSAgICA9IDEgPDwgMSwKKyAgICAgICAgUmVtb3ZlZEl0ZW1zID0gMSA8PCAyCisgICAg
fTsKKworICAgIHN0YXRpYyB2b2lkIGNoZWNrSXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
KiBpdGVtLCBjb25zdCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiB1cmksIGNvbnN0IGdjaGFy
KiBvcmlnaW5hbFVSSSkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW0pOworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3VyaShpdGVt
KSwgPT0sIHVyaSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfaXRlbV9nZXRfdGl0bGUoaXRlbSksID09ICwgdGl0bGUpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaShp
dGVtKSwgPT0sIG9yaWdpbmFsVVJJKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja0l0
ZW1JbmRleChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QpCisgICAgeworICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIC0xKSA9PSB3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbShsaXN0KSk7CisgICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgMCkgPT0g
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0obGlzdCkpOworICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEp
ID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGxpc3QpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja0xpc3QoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBs
aXN0LCBndWludCB0eXBlLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiogaXRlbXMsIGd1aW50
IG5JdGVtcykKKyAgICB7CisgICAgICAgIEdMaXN0KiBsaXN0SXRlbXMgPSB0eXBlID09IEJhY2tG
b3J3YXJkTGlzdFRlc3Q6OkJhY2t3YXJkID8gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2xpc3QobGlzdCkgOgorICAgICAgICAgICAgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9mb3J3YXJkX2xpc3QobGlzdCk7CisgICAgICAgIGdfYXNzZXJ0KGxpc3RJdGVtcyk7CisKKyAg
ICAgICAgZ3VpbnQgaSA9IDA7CisgICAgICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gbGlzdEl0
ZW1zOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBnX2xpc3RfbmV4dChsaXN0SXRlbSksIGkrKykgewor
ICAgICAgICAgICAgZ19hc3NlcnRfY21wdWludChpLCA8LCBuSXRlbXMpOworICAgICAgICAgICAg
Z19hc3NlcnQobGlzdEl0ZW0tPmRhdGEgPT0gaXRlbXNbaV0pOworICAgICAgICB9CisgICAgICAg
IGdfbGlzdF9mcmVlKGxpc3RJdGVtcyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYmFja0Zv
cndhcmRMaXN0Q2hhbmdlZChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QsIFdlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0qIGFkZGVkSXRlbSwgR0xpc3QqIHJlbW92ZWRJdGVtcywgQmFja0Zvcndh
cmRMaXN0VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1faGFzQ2hhbmdlZCA9IHRy
dWU7CisKKyAgICAgICAgaWYgKHRlc3QtPm1fY2hhbmdlZEZsYWdzICYgQmFja0ZvcndhcmRMaXN0
VGVzdDo6QWRkZWRJdGVtKSB7CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQkFDS19G
T1JXQVJEX0xJU1RfSVRFTShhZGRlZEl0ZW0pKTsKKyAgICAgICAgICAgIHRlc3QtPndhdGNoT2Jq
ZWN0KEdfT0JKRUNUKGFkZGVkSXRlbSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGdf
YXNzZXJ0KCFhZGRlZEl0ZW0pOworCisgICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAm
IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OlJlbW92ZWRJdGVtcykgeworICAgICAgICAgICAgZ19hc3Nl
cnQocmVtb3ZlZEl0ZW1zKTsKKyAgICAgICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSByZW1vdmVk
SXRlbXM7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oaXRlci0+ZGF0YSkpOworICAgICAg
ICAgICAgICAgIGlmICh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKQorICAgICAgICAgICAg
ICAgICAgICBnX2Fzc2VydChnX2xpc3RfZmluZCh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1z
LCBpdGVyLT5kYXRhKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBnX2Fzc2VydCghcmVtb3ZlZEl0ZW1zKTsKKyAgICB9CisKKyAgICBCYWNrRm9yd2FyZExp
c3RUZXN0KCkKKyAgICAgICAgOiBtX2xpc3Qod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2Zvcndh
cmRfbGlzdChtX3dlYlZpZXcpKQorICAgICAgICAsIG1fY2hhbmdlZEZsYWdzKDApCisgICAgICAg
ICwgbV9oYXNDaGFuZ2VkKGZhbHNlKQorICAgICAgICAsIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMo
MCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9saXN0LCAiY2hhbmdlZCIsIEdf
Q0FMTEJBQ0soYmFja0ZvcndhcmRMaXN0Q2hhbmdlZCksIHRoaXMpOworICAgICAgICB3YXRjaE9i
amVjdChHX09CSkVDVChtX2xpc3QpKTsKKyAgICB9CisKKyAgICB+QmFja0ZvcndhcmRMaXN0VGVz
dCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV9saXN0LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisK
KyAgICB2b2lkIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpCisgICAgeworICAgICAgICBtX2hhc0No
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgICAgIGdfYXNzZXJ0KG1faGFzQ2hhbmdlZCk7CisgICAgfQorCisgICAg
dm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWRBbmRDaGVja1JlbW92ZWRJdGVtcyhHTGlzdCogcmVt
b3ZlZEl0ZW1zKQorICAgIHsKKyAgICAgICAgbV9leHBlY3RlZFJlbW92ZWRJdGVtcyA9IHJlbW92
ZWRJdGVtczsKKyAgICAgICAgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgICAgIG1fZXhw
ZWN0ZWRSZW1vdmVkSXRlbXMgPSAwOworICAgIH0KKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlz
dCogbV9saXN0OworICAgIGd1bG9uZyBtX2NoYW5nZWRGbGFnczsKKyAgICBib29sIG1faGFzQ2hh
bmdlZDsKKyAgICBHTGlzdCogbV9leHBlY3RlZFJlbW92ZWRJdGVtczsKK307CisKK3N0YXRpYyB2
b2lkIHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKEJhY2tGb3J3YXJkTGlzdFRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRl
bXNbMV07CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3Qt
Pm1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Zvcndh
cmQodGVzdC0+bV93ZWJWaWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAwKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9s
aXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19p
dGVtKHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9s
aXN0KSk7CisKKyAgICBDU3RyaW5nIHVyaVBhZ2UxID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L1BhZ2UxIik7CisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0
OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkodGVzdC0+bV93ZWJWaWV3LCB1cmlQYWdlMS5kYXRhKCkpOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0
LT5tX2xpc3QpLCA9PSwgMSk7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBh
Z2UxID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9s
aXN0KTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0oaXRlbVBhZ2UxLCAiUGFn
ZTEiLCB1cmlQYWdlMS5kYXRhKCksIHVyaVBhZ2UxLmRhdGEoKSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0
LT5tX2xpc3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0
LT5tX2xpc3QpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7CisKKyAgICBDU3RyaW5nIHVy
aVBhZ2UyID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL1BhZ2UyIik7CisgICAgdGVzdC0+bV9j
aGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodGVz
dC0+bV93ZWJWaWV3LCB1cmlQYWdlMi5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRl
c3QtPm1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Zv
cndhcmQodGVzdC0+bV93ZWJWaWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAyKTsKKyAgICBX
ZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtUGFnZTIgPSB3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpOworICAgIEJhY2tGb3J3YXJkTGlz
dFRlc3Q6OmNoZWNrSXRlbShpdGVtUGFnZTIsICJQYWdlMiIsIHVyaVBhZ2UyLmRhdGEoKSwgdXJp
UGFnZTIuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdlMSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKHRlc3QtPm1fbGlzdCkpOwor
ICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7Cisg
ICAgaXRlbXNbMF0gPSBpdGVtUGFnZTE7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tM
aXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QmFja3dhcmQsIGl0ZW1zLCAx
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xp
c3QodGVzdC0+bV9saXN0KSk7CisKKyAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVtOworICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKHRl
c3QtPm1fd2ViVmlldyk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmlldykp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dl
YlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOworICAgIGdfYXNzZXJ0KGl0ZW1QYWdl
MSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xp
c3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2UxIiwgdXJpUGFn
ZTEuZGF0YSgpLCB1cmlQYWdlMS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpID09
IGl0ZW1QYWdlMik7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVz
dC0+bV9saXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2xpc3QodGVzdC0+bV9saXN0KSk7CisgICAgaXRlbXNbMF0gPSBpdGVtUGFnZTI7CisgICAg
QmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRM
aXN0VGVzdDo6Rm9yd2FyZCwgaXRlbXMsIDEpOworCisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3Mg
PSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
Z29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3Qt
Pm1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Zvcndh
cmQodGVzdC0+bV93ZWJWaWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAyKTsKKyAgICBnX2Fz
c2VydChpdGVtUGFnZTIgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0
ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCksICJQ
YWdlMiIsIHVyaVBhZ2UyLmRhdGEoKSwgdXJpUGFnZTIuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0
ZW1QYWdlMSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNr
SXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7CisgICAgaXRlbXNbMF0gPSBpdGVtUGFnZTE7CisgICAg
QmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRM
aXN0VGVzdDo6QmFja3dhcmQsIGl0ZW1zLCAxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKEJhY2tGb3J3YXJkTGlzdFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3
a0JhY2tGb3J3YXJkTGlzdExpbWl0OyBpKyspIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwYXRo
KGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIsIGkpKTsKKyAgICAgICAgdGVzdC0+bV9jaGFuZ2Vk
RmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlz
dFRlc3Q6OkFkZGVkSXRlbTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHRlc3Qt
Pm1fd2ViVmlldywga1NlcnZlci0+Z2V0VVJJRm9yUGF0aChwYXRoLmdldCgpKS5kYXRhKCkpOwor
ICAgICAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICB9CisKKyAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1f
bGlzdCksID09LCB3a0JhY2tGb3J3YXJkTGlzdExpbWl0KTsKKyAgICBXZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtKiBpdGVtUGFnZUZpcnN0ID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9u
dGhfaXRlbSh0ZXN0LT5tX2xpc3QsIC0od2tCYWNrRm9yd2FyZExpc3RMaW1pdCAtIDEpKTsKKyAg
ICBHT3duUHRyPEdMaXN0PiByZW1vdmVkSXRlbXMoZ19saXN0X3ByZXBlbmQoMCwgaXRlbVBhZ2VG
aXJzdCkpOworCisgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2Ul
ZCIsIHdrQmFja0ZvcndhcmRMaXN0TGltaXQpKTsKKyAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9
IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6
QWRkZWRJdGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6UmVtb3ZlZEl0ZW1zOworICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3VyaSh0ZXN0LT5tX3dlYlZpZXcsIGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgocGF0aC5nZXQoKSkuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWRB
bmRDaGVja1JlbW92ZWRJdGVtcyhyZW1vdmVkSXRlbXMuZ2V0KCkpOworCisgICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3Qp
LCA9PSwgd2tCYWNrRm9yd2FyZExpc3RMaW1pdCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sK
KyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4o
c2VydmVyQ2FsbGJhY2spOworCisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9y
d2FyZExpc3QiLCAibmF2aWdhdGlvbiIsIHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKTsK
KyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjphZGQoIkJhY2tGb3J3YXJkTGlzdCIsICJsaXN0LWxp
bWl0LWFuZC1jYWNoZSIsIHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKTsKK30KKwor
dm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oCmluZGV4IDJhYWMx
OGMuLmIzY2FlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RNYWluLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdE1haW4uaApAQCAtMjAsOCArMjAsOSBAQAogI2lmbmRlZiBUZXN0TWFpbl9oCiAj
ZGVmaW5lIFRlc3RNYWluX2gKIAotI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dPd25QdHIuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9IYXNoU2V0Lmg+CiAKICNkZWZpbmUgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShDbGFzc05hbWUpIFwKICAgICBzdGF0aWMgdm9pZCBzZXRVcChDbGFzc05hbWUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkgXApAQCAtNDIsNiArNDMsMjQgQEAgY2xhc3MgVGVzdAogewog
cHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVGVzdCk7CisKKyAgICB+VGVzdCgp
CisgICAgeworICAgICAgICBnX2Fzc2VydChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgb2JqZWN0RmluYWxpemVkKFRlc3QqIHRlc3QsIEdPYmpl
Y3QqIGZpbmFsaXplZE9iamVjdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fd2F0Y2hlZE9iamVj
dHMucmVtb3ZlKGZpbmFsaXplZE9iamVjdCk7CisgICAgfQorCisgICAgdm9pZCB3YXRjaE9iamVj
dChHT2JqZWN0KiBvYmplY3QpCisgICAgeworICAgICAgICBtX3dhdGNoZWRPYmplY3RzLmFkZChv
YmplY3QpOworICAgICAgICBnX29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJlaW50ZXJwcmV0X2Nh
c3Q8R1dlYWtOb3RpZnk+KG9iamVjdEZpbmFsaXplZCksIHRoaXMpOworICAgIH0KKworICAgIEhh
c2hTZXQ8R09iamVjdCo+IG1fd2F0Y2hlZE9iamVjdHM7CiB9OwogCiAjZW5kaWYgLy8gVGVzdE1h
aW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViVmlld1Rlc3QuY3BwCmluZGV4IGYzODRkM2IuLmJkMGVjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKQEAg
LTI0LDYgKzI0LDcgQEAgV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKICAgICA6IG1fd2ViVmll
dyhXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25ldygp
KSkpCiAgICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKIHsKKyAgICB3
YXRjaE9iamVjdChHX09CSkVDVChtX3dlYlZpZXcpKTsKIH0KIAogV2ViVmlld1Rlc3Q6On5XZWJW
aWV3VGVzdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJWaWV3VGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViVmlld1Rlc3QuaAppbmRleCBjYzMyOGE1Li4xYTE2YjAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKQEAgLTIz
LDcgKzIzLDcgQEAKICNpbmNsdWRlICJUZXN0TWFpbi5oIgogI2luY2x1ZGUgPHdlYmtpdDIvd2Vi
a2l0Mi5oPgogCi1jbGFzcyBXZWJWaWV3VGVzdCB7CitjbGFzcyBXZWJWaWV3VGVzdDogcHVibGlj
IFRlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2ViVmlld1Rlc3Qp
OwogICAgIFdlYlZpZXdUZXN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmgKaW5kZXggNTQwYzZlNi4uZmEzZTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtMjMsNiArMjMsOCBAQAogCiAjZGVmaW5lIF9fV0VC
S0lUMl9IX0lOU0lERV9fCiAKKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlz
dC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
RW51bVR5cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFcnJvci5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKaW5k
ZXggNjI0ODQyNC4uYjcwNjlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CkBAIC0xLDQgKzEsNSBAQAogQk9PTEVBTjpP
QkpFQ1QsU1RSSU5HLFBPSU5URVIKIEJPT0xFQU46T0JKRUNUCiBCT09MRUFOOlZPSUQKK1ZPSUQ6
T0JKRUNULFBPSU5URVIKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111959</attachid>
            <date>2011-10-21 06:34:40 -0700</date>
            <delta_ts>2011-10-24 01:00:13 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-bf-list-8.diff</filename>
            <type>text/plain</type>
            <size>54768</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4ZDA3MzFjLi4wZDg4YTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODYg
QEAKIDIwMTEtMTAtMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYmFjayBmb3J3YXJk
IGxpc3QgZm9yIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21w
aWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplKToK
KyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pbml0KToKKyAgICAgICAgKHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3
YXJkTGlzdEdldE9yQ3JlYXRlSXRlbSk6IEhlbHBlciBmdW5jdGlvbiB0aGF0CisgICAgICAgIGNy
ZWF0ZXMgYSBuZXcgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSBmb3IgdGhlIGdpdmVuCisgICAg
ICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0gb3IgcmV0dXJucyBpdCBmcm9tIHRoZSBjYWNoZSBp
ZiBpdCdzCisgICAgICAgIGFscmVhZHkgY2FjaGVkLgorICAgICAgICAod2Via2l0QmFja0Zvcndh
cmRMaXN0Q3JlYXRlTGlzdCk6IEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEKKyAgICAgICAg
V0tBcnJheSBvZiBXZWJCYWNrRm9yd2FyZExpc3RJdGVtcyBpbnRvIGEgR0xpc3Qgb2YKKyAgICAg
ICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbXMuCisgICAgICAgICh3ZWJraXRCYWNrRm9yd2Fy
ZExpc3RDcmVhdGUpOiBDcmVhdGUgYSBuZXcgV2ViS2l0QmFja0ZvcndhcmRMaXN0LgorICAgICAg
ICAod2Via2l0QmFja0ZvcndhcmRMaXN0Q2hhbmdlZCk6IEVtaXRzIGNoYW5nZWQgc2lnbmFsIHdo
ZW4gdGhlIGJhY2sKKyAgICAgICAgZm9yd2FyZCBsaXN0IGNoYW5nZXMuCisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSk6CisgICAgICAgICh3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X250aF9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfbGVuZ3RoKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFj
a19saXN0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0
X3dpdGhfbGltaXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2xpc3QpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3Rfd2l0aF9saW1pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3
YXJkTGlzdEl0ZW1GaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2NsYXNz
X2luaXQpOgorICAgICAgICAoaGlzdG9yeUl0ZW1zTWFwKTogR2xvYmFsIGNhY2hlIGZvciBXZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtcy4KKyAgICAgICAgKHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0
ZW1GaW5hbGl6ZWQpOgorICAgICAgICAod2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUdldE9yQ3Jl
YXRlKTogSGVscGVyIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgY3JlYXRlcyBhIG5ldyBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtIGZvciB0aGUgZ2l2ZW4KKyAgICAgICAgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSBvciByZXR1cm5zIGl0IGZyb20gdGhlIGdsb2JhbCBjYWNoZSBpZiBpdCdzCisgICAg
ICAgIGFscmVhZHkgY2FjaGVkLgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fZ2V0X3VyaSk6CisgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRf
dGl0bGUpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdp
bmFsX3VyaSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChkaWRDaGFuZ2VCYWNrRm9yd2Fy
ZExpc3QpOiBDYWxsIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENoYW5nZWQoKSB0bworICAgICAgICBu
b3RpZnkgdGhhdCB0aGUgbGlzdCBoYXMgY2hhbmdlZC4KKyAgICAgICAgKHdlYmtpdFdlYkxvYWRl
ckNsaWVudEF0dGFjaExvYWRlckNsaWVudFRvUGFnZSk6IEFkZAorICAgICAgICBpbXBsZW1lbnRh
dGlvbiBmb3IgZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0LgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0NvbnN0cnVj
dGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QpOiBS
ZXR1cm4gdGhlIGJhY2sgZm9yd2FyZAorICAgICAgICBsaXN0IG9mIHRoZSB2aWV3LgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbTogQWRkIG5ldyB0ZXN0LgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHRlc3RCYWNrRm9yd2FyZExpc3RO
YXZpZ2F0aW9uKToKKyAgICAgICAgKHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKToK
KyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaDoKKyAgICAgICAgKFRlc3Q6On5UZXN0KTog
Q2hlY2sgdGhlcmUgYXJlIG5vIG9iamVjdHMgbGVha2VkLgorICAgICAgICAoVGVzdDo6b2JqZWN0
RmluYWxpemVkKTogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gYSBHT2JqZWN0IGlzCisgICAgICAgIGRl
bGV0ZWQsIHVzZWQgdG8gcmVtb3ZlIHRoZSB3YXRjaGVkIG9iamVjdCB0aGUgbGlzdC4KKyAgICAg
ICAgKFRlc3Q6OmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMpOiBBZGQgYW4g
b2JqZWN0IHRvCisgICAgICAgIHRoZSBsaXN0IG9mIHdhdGNoZWQgb2JqZWN0cyBhbmQgYWRkIGEg
d2VhayBwb2ludGVyIHRvIHJlbW92ZSBpdAorICAgICAgICBmcm9tIHRoZSBsaXN0IHdoZW4gdGhl
IG9iamVjdCBpcyBmaW5hbGl6ZWQuIElmIHRoZXJlIGFyZW4ndAorICAgICAgICBvYmplY3RzIGxl
YWtlZCwgdGhlIGxpc3Qgc2hvdWxkIGJlIGVtcHR5IHdoZW4gdGhlIHRlc3QgZmluaXNoZXMuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwOgorICAgICAg
ICAoV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KTogV2F0Y2ggdGhlIHdlYiB2aWV3IHRvIG1ha2Ug
c3VyZSBpdCdzCisgICAgICAgIG5vdCBsZWFrZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViVmlld1Rlc3QuaDogTWFrZSBXZWJWaWV3VGVzdCBpbmhlcml0CisgICAgICAg
IGZyb20gVGVzdCBjbGFzcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6
IEluY2x1ZGUgV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggYW5kCisgICAgICAgIFdlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0uaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFy
c2hhbC5saXN0OgorCisyMDExLTEwLTIxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKwogICAgICAgICBVbnJldmlld2VkLiBGaXggV2ViS2l0MiBHVEsrIGJ1aWxk
IGFmdGVyIHI5ODA4MS4KIAogICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggNTJkZmU3Mi4uMzJiZWU3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUuYW0KQEAgLTcxLDYgKzcxLDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQ
SV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9IRUEKIAog
bGlid2Via2l0Mmd0a2luY2x1ZGVkaXIgPSAkKGxpYndlYmtpdGd0a2luY2x1ZGVkaXIpL3dlYmtp
dDIKIHdlYmtpdDJndGtfaGVhZGVycyA9IFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXREZWZpbmVzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RXJyb3IuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0LmggXApAQCAtNDc0LDYgKzQ3NiwxMSBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJ
X01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL1dLUmV0YWluUHRyLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBcCisJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAgXAorCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0u
aCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbS5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRFcnJvci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRF
cnJvci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0QmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZmFiNTRmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTAsMCArMSwzMDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKKyNp
bmNsdWRlIDxXZWJLaXQyL1dLQmFja0ZvcndhcmRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgorCisvKioKKyAqIFNFQ1RJT046IFdlYktpdEJhY2tGb3J3YXJkTGlzdAor
ICogQFNob3J0X2Rlc2NyaXB0aW9uOiBMaXN0IG9mIHZpc2l0ZWQgcGFnZXMKKyAqIEBUaXRsZTog
V2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3LCAjV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbQorICoKKyAqIFdlYktpdEJhY2tGb3J3YXJkTGlzdCBtYWlu
dGFpbnMgYSBsaXN0IG9mIHZpc2l0ZWQgcGFnZXMgdXNlZCB0bworICogbmF2aWdhdGUgdG8gcmVj
ZW50IHBhZ2VzLiBJdGVtcyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIGxpc3QgaW4gdGhlCisgKiBvcmRl
ciB0aGV5IGFyZSB2aXNpdGVkLgorICoKKyAqIFdlYktpdEJhY2tGb3J3YXJkTGlzdCBhbHNvIG1h
aW50YWlucyB0aGUgbm90aW9uIG9mIHRoZSBjdXJyZW50IGl0ZW0KKyAqICh3aGljaCBpcyBhbHdh
eXMgYXQgaW5kZXggMCksIHRoZSBwcmVjZWRpbmcgaXRlbSAod2hpY2ggaXMgYXQgaW5kZXggLTEp
LAorICogYW5kIHRoZSBmb2xsb3dpbmcgaXRlbSAod2hpY2ggaXMgYXQgaW5kZXggMSkuCisgKiBN
ZXRob2RzIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKCkgYW5kIHdlYmtpdF93ZWJfdmlld19nb19m
b3J3YXJkKCkgbW92ZQorICogdGhlIGN1cnJlbnQgaXRlbSBiYWNrd2FyZCBvciBmb3J3YXJkIGJ5
IG9uZS4gTWV0aG9kCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2xpc3Rf
aXRlbSgpIHNldHMgdGhlIGN1cnJlbnQgaXRlbSB0byB0aGUKKyAqIHNwZWNpZmllZCBpdGVtLiBB
bGwgb3RoZXIgbWV0aG9kcyByZXR1cm5pbmcgI1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW08IS0t
IC0tPnMKKyAqIGRvIG5vdCBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGl0ZW0sIHRo
ZXkganVzdCByZXR1cm4gdGhlIHJlcXVlc3RlZAorICogaXRlbSBvciBpdGVtcy4KKyAqLworCitl
bnVtIHsKKyAgICBDSEFOR0VELAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK3R5cGVkZWYgSGFz
aE1hcDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIEdSZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbT4gPiBCYWNrRm9yd2FyZExpc3RJdGVtc01hcDsKKworc3RydWN0IF9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RQcml2YXRlIHsKKyAgICBXS0JhY2tGb3J3YXJkTGlzdFJlZiB3a0xpc3Q7Cisg
ICAgQmFja0ZvcndhcmRMaXN0SXRlbXNNYXAgaXRlbXNNYXA7Cit9OworCitzdGF0aWMgZ3VpbnQg
c2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0QmFj
a0ZvcndhcmRMaXN0LCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3QsIEdfVFlQRV9PQkpFQ1QpCisK
K3N0YXRpYyB2b2lkIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1Qob2JqZWN0KS0+cHJpdi0+fldlYktp
dEJhY2tGb3J3YXJkTGlzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2luaXQoV2ViS2l0QmFja0ZvcndhcmRM
aXN0KiBsaXN0KQoreworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUqIHByaXYgPSBH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUobGlzdCwgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJE
X0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUpOworICAgIGxpc3QtPnByaXYgPSBw
cml2OworICAgIG5ldyAocHJpdikgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSgpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRC
YWNrRm9yd2FyZExpc3RDbGFzcyogbGlzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MobGlzdENsYXNzKTsKKworICAgIGdPYmplY3RDbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRCYWNrRm9yd2FyZExpc3RGaW5hbGl6ZTsKKworICAgIC8qKgor
ICAgICAqIFdlYktpdEJhY2tGb3J3YXJkTGlzdDo6Y2hhbmdlZDoKKyAgICAgKiBAYmFja19mb3J3
YXJkX2xpc3Q6IHRoZSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0IG9uIHdoaWNoIHRoZSBzaWduYWwg
d2FzIGVtaXR0ZWQKKyAgICAgKiBAaXRlbV9hZGRlZDogKGFsbG93LW5vbmUpOiB0aGUgI1dlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW0gYWRkZWQgb3IgJU5VTEwKKyAgICAgKiBAaXRlbXNfcmVtb3Zl
ZDogYSAjR0xpc3Qgb2YgI1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW08IS0tIC0tPnMKKyAgICAg
KgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBAYmFja19mb3J3YXJkX2xpc3Qg
Y2hhbmdlcy4gVGhpcyBoYXBwZW5zCisgICAgICogd2hlbiB0aGUgY3VycmVudCBpdGVtIGlzIHVw
ZGF0ZWQsIGEgbmV3IGl0ZW0gaXMgYWRkZWQgb3Igb25lIG9yIG1vcmUKKyAgICAgKiBpdGVtcyBh
cmUgcmVtb3ZlZC4gTm90ZSB0aGF0IGJvdGggQGl0ZW1fYWRkZWQgYW5kIEBpdGVtc19yZW1vdmVk
IGNhbgorICAgICAqICVOVUxMIHdoZW4gb25seSB0aGUgY3VycmVudCBpdGVtIGlzIHVwZGF0ZWQu
IEl0ZW1zIGFyZSBvbmx5IHJlbW92ZWQKKyAgICAgKiB3aGVuIHRoZSBsaXN0IGlzIGNsZWFyZWQg
b3IgdGhlIG1heGltdW0gaXRlbXMgbGltaXQgaXMgcmVhY2hlZC4KKyAgICAgKi8KKyAgICBzaWdu
YWxzW0NIQU5HRURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJjaGFuZ2VkIiwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGxpc3RDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfUE9JTlRF
UiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9QT0lOVEVSKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShs
aXN0Q2xhc3MsIHNpemVvZihXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlKSk7Cit9CisKK3N0
YXRpYyBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiB3ZWJraXRCYWNrRm9yd2FyZExpc3RHZXRP
ckNyZWF0ZUl0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0LCBXS0JhY2tGb3J3YXJkTGlz
dEl0ZW1SZWYgd2tMaXN0SXRlbSkKK3sKKyAgICBpZiAoIXdrTGlzdEl0ZW0pCisgICAgICAgIHJl
dHVybiAwOworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSogcHJpdiA9IGxpc3Qt
PnByaXY7CisgICAgR1JlZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtPiBsaXN0SXRlbSA9
IHByaXYtPml0ZW1zTWFwLmdldCh3a0xpc3RJdGVtKTsKKyAgICBpZiAobGlzdEl0ZW0pCisgICAg
ICAgIHJldHVybiBsaXN0SXRlbS5nZXQoKTsKKworICAgIGxpc3RJdGVtID0gd2Via2l0QmFja0Zv
cndhcmRMaXN0SXRlbUdldE9yQ3JlYXRlKHdrTGlzdEl0ZW0pOworICAgIHByaXYtPml0ZW1zTWFw
LnNldCh3a0xpc3RJdGVtLCBsaXN0SXRlbSk7CisKKyAgICByZXR1cm4gbGlzdEl0ZW0uZ2V0KCk7
Cit9CisKK3N0YXRpYyBHTGlzdCogd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlTGlzdChXZWJL
aXRCYWNrRm9yd2FyZExpc3QqIGxpc3QsIFdLQXJyYXlSZWYgd2tMaXN0KQoreworICAgIGlmICgh
d2tMaXN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMaXN0KiByZXR1cm5WYWx1ZSA9IDA7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXS0FycmF5R2V0U2l6ZSh3a0xpc3QpOyArK2kp
IHsKKyAgICAgICAgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrSXRlbSA9IHN0YXRpY19jYXN0
PFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTGlzdCwg
aSkpOworICAgICAgICByZXR1cm5WYWx1ZSA9IGdfbGlzdF9wcmVwZW5kKHJldHVyblZhbHVlLCB3
ZWJraXRCYWNrRm9yd2FyZExpc3RHZXRPckNyZWF0ZUl0ZW0obGlzdCwgd2tJdGVtKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCitXZWJLaXRCYWNrRm9yd2FyZExpc3Qq
IHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZShXS0JhY2tGb3J3YXJkTGlzdFJlZiB3a0xpc3Qp
Cit7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0ID0gV0VCS0lUX0JBQ0tfRk9SV0FS
RF9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgTlVMTCkp
OworICAgIGxpc3QtPnByaXYtPndrTGlzdCA9IHdrTGlzdDsKKworICAgIHJldHVybiBsaXN0Owor
fQorCit2b2lkIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENoYW5nZWQoV2ViS2l0QmFja0ZvcndhcmRM
aXN0KiBiYWNrRm9yd2FyZExpc3QsIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0FkZGVkSXRl
bSwgV0tBcnJheVJlZiB3a1JlbW92ZWRJdGVtcykKK3sKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtKiBhZGRlZEl0ZW0gPSB3ZWJraXRCYWNrRm9yd2FyZExpc3RHZXRPckNyZWF0ZUl0ZW0o
YmFja0ZvcndhcmRMaXN0LCB3a0FkZGVkSXRlbSk7CisgICAgR0xpc3QqIHJlbW92ZWRJdGVtcyA9
IDA7CisKKyAgICBzaXplX3QgcmVtb3ZlZEl0ZW1zU2l6ZSA9IHdrUmVtb3ZlZEl0ZW1zID8gV0tB
cnJheUdldFNpemUod2tSZW1vdmVkSXRlbXMpIDogMDsKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExp
c3RQcml2YXRlKiBwcml2ID0gYmFja0ZvcndhcmRMaXN0LT5wcml2OworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVtb3ZlZEl0ZW1zU2l6ZTsgKytpKSB7CisgICAgICAgIFdLQmFja0Zvcndh
cmRMaXN0SXRlbVJlZiB3a0l0ZW0gPSBzdGF0aWNfY2FzdDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1S
ZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a1JlbW92ZWRJdGVtcywgaSkpOworICAgICAgICBy
ZW1vdmVkSXRlbXMgPSBnX2xpc3RfcHJlcGVuZChyZW1vdmVkSXRlbXMsIGdfb2JqZWN0X3JlZihH
X09CSkVDVChwcml2LT5pdGVtc01hcC5nZXQod2tJdGVtKS5nZXQoKSkpKTsKKyAgICAgICAgcHJp
di0+aXRlbXNNYXAucmVtb3ZlKHdrSXRlbSk7CisgICAgfQorCisgICAgZ19zaWduYWxfZW1pdChi
YWNrRm9yd2FyZExpc3QsIHNpZ25hbHNbQ0hBTkdFRF0sIDAsIGFkZGVkSXRlbSwgcmVtb3ZlZEl0
ZW1zLCBOVUxMKTsKKyAgICBnX2xpc3RfZnJlZV9mdWxsKHJlbW92ZWRJdGVtcywgc3RhdGljX2Nh
c3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Cit9CisKKy8qKgorICogd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW06CisgKiBAYmFja19mb3J3YXJkX2xp
c3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQg
aXRlbSBpbiBAYmFja19mb3J3YXJkX2xpc3QuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBhICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKiAgICBvciAlTlVMTCBpZiBAYmFj
a19mb3J3YXJkX2xpc3QgaXMgZW1wdHkuCisgKi8KK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0q
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKFdlYktpdEJhY2tGb3J3
YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19CQUNLX0ZPUldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIHJl
dHVybiB3ZWJraXRCYWNrRm9yd2FyZExpc3RHZXRPckNyZWF0ZUl0ZW0oYmFja0ZvcndhcmRMaXN0
LCBXS0JhY2tGb3J3YXJkTGlzdEdldEN1cnJlbnRJdGVtKGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+
d2tMaXN0KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2l0ZW06CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAor
ICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhhdCBwcmVjZWRlcyB0aGUgY3VycmVudCBpdGVtLgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtCisgKiAgICBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbSBvciAlTlVMTC4KKyAqLwor
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2l0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKGJhY2tGb3J3
YXJkTGlzdCksIDApOworCisgICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEdldE9yQ3Jl
YXRlSXRlbShiYWNrRm9yd2FyZExpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0QmFja0l0ZW0oYmFj
a0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QpKTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbToKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDogYSAj
V2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IGZvbGxv
d3MgdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRo
ZSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbQorICogICAgZm9sbG93aW5nIHRoZSBjdXJyZW50
IGl0ZW0gb3IgJU5VTEwuCisgKi8KK1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdCog
YmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19C
QUNLX0ZPUldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIHJldHVybiB3ZWJr
aXRCYWNrRm9yd2FyZExpc3RHZXRPckNyZWF0ZUl0ZW0oYmFja0ZvcndhcmRMaXN0LCBXS0JhY2tG
b3J3YXJkTGlzdEdldEZvcndhcmRJdGVtKGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0KSk7
Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbToKKyAq
IEBiYWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKiBAaW5kZXg6
IHRoZSBpbmRleCBvZiB0aGUgaXRlbQorICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gYXQgYSBnaXZl
biBpbmRleCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtCisgKiAgICBsb2Nh
dGVkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgaXRlbS4K
KyAqLworV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9udGhfaXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCwgZ2lu
dCBpbmRleCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JX
QVJEX0xJU1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0Zv
cndhcmRMaXN0R2V0T3JDcmVhdGVJdGVtKGJhY2tGb3J3YXJkTGlzdCwgV0tCYWNrRm9yd2FyZExp
c3RHZXRJdGVtQXRJbmRleChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCwgaW5kZXgpKTsK
K30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aDoKKyAqIEBi
YWNrX2ZvcndhcmRfbGlzdDogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJu
czogdGhlIGxlbmd0aCBvZiBAYmFja19mb3J3YXJkX2xpc3QuCisgKi8KK2d1aW50IHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0Zv
cndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZP
UldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIFdlYktpdEJhY2tGb3J3YXJk
TGlzdFByaXZhdGUqIHByaXYgPSBiYWNrRm9yd2FyZExpc3QtPnByaXY7CisgICAgZ3VpbnQgY3Vy
cmVudEl0ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShiYWNr
Rm9yd2FyZExpc3QpID8gMSA6IDA7CisgICAgcmV0dXJuIFdLQmFja0ZvcndhcmRMaXN0R2V0QmFj
a0xpc3RDb3VudChwcml2LT53a0xpc3QpICsgV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkTGlz
dENvdW50KHByaXYtPndrTGlzdCkgKyBjdXJyZW50SXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdDoKKyAqIEBiYWNrX2ZvcndhcmRfbGlzdDog
YSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBX
ZWJLaXQuQmFja0ZvcndhcmRMaXN0SXRlbSkgKHRyYW5zZmVyIGNvbnRhaW5lcik6IGEgI0dMaXN0
IG9mCisgKiAgICBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbS4KKyAqLworR0xpc3Qq
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KFdlYktpdEJhY2tGb3J3YXJk
TGlzdCogYmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19CQUNLX0ZPUldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIGd1aW50
IGxpbWl0ID0gV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrTGlzdENvdW50KGJhY2tGb3J3YXJkTGlz
dC0+cHJpdi0+d2tMaXN0KTsKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRl
TGlzdChiYWNrRm9yd2FyZExpc3QsIFdLQmFja0ZvcndhcmRMaXN0Q29weUJhY2tMaXN0V2l0aExp
bWl0KGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0LCBsaW1pdCkpOworfQorCisvKioKKyAq
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X3dpdGhfbGltaXQ6CisgKiBA
YmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAorICogQGxpbWl0OiB0
aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHJpZXZlCisgKgorICogUmV0dXJuczogKGVsZW1lbnQt
dHlwZSBXZWJLaXQuQmFja0ZvcndhcmRMaXN0SXRlbSkgKHRyYW5zZmVyIGNvbnRhaW5lcik6IGEg
I0dMaXN0IG9mCisgKiAgICBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbSBsaW1pdGVk
IGJ5IEBsaW1pdC4KKyAqLworR0xpc3QqIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFj
a19saXN0X3dpdGhfbGltaXQoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Qs
IGd1aW50IGxpbWl0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNL
X0ZPUldBUkRfTElTVChiYWNrRm9yd2FyZExpc3QpLCAwKTsKKworICAgIHJldHVybiB3ZWJraXRC
YWNrRm9yd2FyZExpc3RDcmVhdGVMaXN0KGJhY2tGb3J3YXJkTGlzdCwgV0tCYWNrRm9yd2FyZExp
c3RDb3B5QmFja0xpc3RXaXRoTGltaXQoYmFja0ZvcndhcmRMaXN0LT5wcml2LT53a0xpc3QsIGxp
bWl0KSk7Cit9CisKKy8qKgorICogd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3Q6CisgKiBAYmFja19mb3J3YXJkX2xpc3Q6IGEgI1dlYktpdEJhY2tGb3J3YXJkTGlzdAor
ICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJhY2tGb3J3YXJkTGlzdEl0ZW0p
ICh0cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICogICAgaXRlbXMgZm9sbG93aW5n
IHRoZSBjdXJyZW50IGl0ZW0uCisgKi8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2ZvcndhcmRfbGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1Qo
YmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICBndWludCBsaW1pdCA9IFdLQmFja0ZvcndhcmRM
aXN0R2V0Rm9yd2FyZExpc3RDb3VudChiYWNrRm9yd2FyZExpc3QtPnByaXYtPndrTGlzdCk7Cisg
ICAgcmV0dXJuIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZUxpc3QoYmFja0ZvcndhcmRMaXN0
LCBXS0JhY2tGb3J3YXJkTGlzdENvcHlGb3J3YXJkTGlzdFdpdGhMaW1pdChiYWNrRm9yd2FyZExp
c3QtPnByaXYtPndrTGlzdCwgbGltaXQpKTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0OgorICogQGJhY2tfZm9yd2FyZF9s
aXN0OiBhICNXZWJLaXRCYWNrRm9yd2FyZExpc3QKKyAqIEBsaW1pdDogdGhlIG51bWJlciBvZiBp
dGVtcyB0byByZXRyaWV2ZQorICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0LkJh
Y2tGb3J3YXJkTGlzdEl0ZW0pICh0cmFuc2ZlciBjb250YWluZXIpOiBhICNHTGlzdCBvZgorICog
ICAgaXRlbXMgZm9sbG93aW5nIHRoZSBjdXJyZW50IGl0ZW0gbGltaXRlZCBieSBAbGltaXQuCisg
Ki8KK0dMaXN0KiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRo
X2xpbWl0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0LCBndWludCBsaW1p
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJ
U1QoYmFja0ZvcndhcmRMaXN0KSwgMCk7CisKKyAgICByZXR1cm4gd2Via2l0QmFja0ZvcndhcmRM
aXN0Q3JlYXRlTGlzdChiYWNrRm9yd2FyZExpc3QsIFdLQmFja0ZvcndhcmRMaXN0Q29weUZvcndh
cmRMaXN0V2l0aExpbWl0KGJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+d2tMaXN0LCBsaW1pdCkpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRC
YWNrRm9yd2FyZExpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2Ri
MDg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0QmFja0ZvcndhcmRMaXN0LmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18p
ICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIv
d2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYg
V2ViS2l0QmFja0ZvcndhcmRMaXN0X2gKKyNkZWZpbmUgV2ViS2l0QmFja0ZvcndhcmRMaXN0X2gK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCAg
ICAgICAgICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNULCBXZWJLaXRC
YWNrRm9yd2FyZExpc3QpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
QkFDS19GT1JXQVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzKSkKKyNkZWZpbmUg
V0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUKSkKKyNk
ZWZpbmUgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNULCBX
ZWJLaXRCYWNrRm9yd2FyZExpc3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRCYWNr
Rm9yd2FyZExpc3QgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdDsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RDbGFzcyAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNz
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3Qgewor
ICAgIEdPYmplY3QgcGFyZW50OworCisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZSAq
cHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0Q2xhc3MgeworICAgIEdP
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X3R5cGUgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKwor
V0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtICoKK3dlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfY3VycmVudF9pdGVtICAgICAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJkTGlz
dCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIFdlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0gKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0gICAgICAgICAg
ICAgICAoV2ViS2l0QmFja0ZvcndhcmRMaXN0ICpiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJ
VF9BUEkgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2ZvcndhcmRfaXRlbSAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJh
Y2tfZm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
ICoKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0gICAgICAgICAgICAgICAg
KFdlYktpdEJhY2tGb3J3YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAg
ICAgICAgIGluZGV4KTsKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfbGVuZ3RoICAgICAgICAgICAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJkTGlzdCAqYmFj
a19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfYmFja19saXN0ICAgICAgICAgICAgICAgKFdlYktpdEJhY2tGb3J3YXJkTGlz
dCAqYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X3dpdGhfbGltaXQgICAgKFdlYktpdEJhY2tGb3J3
YXJkTGlzdCAqYmFja19mb3J3YXJkX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgIGxpbWl0KTsK
KworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfbGlzdCAgICAgICAgICAgIChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9yd2FyZF9s
aXN0KTsKKworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0IChXZWJLaXRCYWNrRm9yd2FyZExpc3QgKmJhY2tfZm9y
d2FyZF9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICBsaW1pdCk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4xZjg0OTYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKQEAgLTAsMCAr
MSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKKworI2lu
Y2x1ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJLaXQy
L1dLQmFja0ZvcndhcmRMaXN0SXRlbS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CisKK3N0cnVjdCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbVByaXZhdGUgeworICAg
IFdLUmV0YWluUHRyPFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4gd2tMaXN0SXRlbTsKKyAgICBD
U3RyaW5nIHVyaTsKKyAgICBDU3RyaW5nIHRpdGxlOworICAgIENTdHJpbmcgb3JpZ2luYWxVUkk7
Cit9OworCitHX0RFRklORV9UWVBFKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0sIHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9pdGVtLCBHX1RZUEVfSU5JVElBTExZX1VOT1dORUQpCisKK3N0YXRp
YyB2b2lkIHdlYmtpdEJhY2tGb3J3YXJkTGlzdEl0ZW1GaW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0ob2JqZWN0KS0+cHJpdi0+fldl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1faW5pdChX
ZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0SXRlbSkKK3sKKyAgICBXZWJLaXRCYWNrRm9y
d2FyZExpc3RJdGVtUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShs
aXN0SXRlbSwgV0VCS0lUX1RZUEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSwgV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbVByaXZhdGUpOworICAgIGxpc3RJdGVtLT5wcml2ID0gcHJpdjsKKyAgICBu
ZXcgKHByaXYpIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlKCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2NsYXNzX2luaXQoV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbUNsYXNzKiBsaXN0SXRlbUNsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MobGlzdEl0ZW1DbGFzcyk7CisKKyAgICBn
T2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZpbmFsaXpl
OworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGxpc3RJdGVtQ2xhc3MsIHNpemVvZihX
ZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSkpOworfQorCit0eXBlZGVmIEhhc2hNYXA8
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKj4gSGlz
dG9yeUl0ZW1zTWFwOworCitzdGF0aWMgSGlzdG9yeUl0ZW1zTWFwJiBoaXN0b3J5SXRlbXNNYXAo
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGlzdG9yeUl0ZW1zTWFwLCBpdGVtc01hcCwg
KCkpOworICAgIHJldHVybiBpdGVtc01hcDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0QmFja0Zv
cndhcmRMaXN0SXRlbUZpbmFsaXplZChncG9pbnRlciB3a0xpc3RJdGVtLCBHT2JqZWN0KiBmaW5h
bGl6ZWRMaXN0SXRlbSkKK3sKKyAgICBBU1NFUlQoR19PQkpFQ1QoaGlzdG9yeUl0ZW1zTWFwKCku
Z2V0KHN0YXRpY19jYXN0PFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4od2tMaXN0SXRlbSkpKSA9
PSBmaW5hbGl6ZWRMaXN0SXRlbSk7CisgICAgaGlzdG9yeUl0ZW1zTWFwKCkucmVtb3ZlKHN0YXRp
Y19jYXN0PFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4od2tMaXN0SXRlbSkpOworfQorCitXZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtKiB3ZWJraXRCYWNrRm9yd2FyZExpc3RJdGVtR2V0T3JDcmVh
dGUoV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrTGlzdEl0ZW0pCit7CisgICAgaWYgKCF3a0xp
c3RJdGVtKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0qIGxpc3RJdGVtID0gaGlzdG9yeUl0ZW1zTWFwKCkuZ2V0KHdrTGlzdEl0ZW0pOworICAgIGlm
IChsaXN0SXRlbSkKKyAgICAgICAgcmV0dXJuIGxpc3RJdGVtOworCisgICAgbGlzdEl0ZW0gPSBX
RUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQkFD
S19GT1JXQVJEX0xJU1RfSVRFTSwgTlVMTCkpOworICAgIGxpc3RJdGVtLT5wcml2LT53a0xpc3RJ
dGVtID0gd2tMaXN0SXRlbTsKKworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGxpc3RJ
dGVtKSwgd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUZpbmFsaXplZCwKKyAgICAgICAgICAgICAg
ICAgICAgICBjb25zdF9jYXN0PE9wYXF1ZVdLQmFja0ZvcndhcmRMaXN0SXRlbSo+KHdrTGlzdEl0
ZW0pKTsKKyAgICBoaXN0b3J5SXRlbXNNYXAoKS5zZXQod2tMaXN0SXRlbSwgbGlzdEl0ZW0pOwor
CisgICAgcmV0dXJuIGxpc3RJdGVtOworfQorCisvKioKKyAqIHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX2dldF91cmk6CisgKiBAYmFja19mb3J3YXJkX2xpc3RfaXRlbTogYSAjV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbQorICoKKyAqIFRoaXMgVVJJIG1heSBkaWZmZXIgZnJvbSB0aGUg
b3JpZ2luYWwgVVJJIGlmIHRoZSBwYWdlIHdhcywKKyAqIGZvciBleGFtcGxlLCByZWRpcmVjdGVk
IHRvIGEgbmV3IGxvY2F0aW9uLgorICogU2VlIGFsc28gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSgpLgorICoKKyAqIFJldHVybnM6IHRoZSBVUkkgb2YgQGJh
Y2tfZm9yd2FyZF9saXN0X2l0ZW0gb3IgJU5VTEwuCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJpKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0q
IGxpc3RJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZP
UldBUkRfTElTVF9JVEVNKGxpc3RJdGVtKSwgMCk7CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtUHJpdmF0ZSogcHJpdiA9IGxpc3RJdGVtLT5wcml2OworICAgIFdLUmV0YWluUHRyPFdL
VVJMUmVmPiB3a1VSSShBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VVJMKHByaXYt
PndrTGlzdEl0ZW0uZ2V0KCkpKTsKKyAgICBpZiAodG9JbXBsKHdrVVJJLmdldCgpKS0+c3RyaW5n
KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHByaXYtPnVyaSA9IHRvSW1w
bCh3a1VSSS5nZXQoKSktPnN0cmluZygpLnV0ZjgoKTsKKyAgICByZXR1cm4gcHJpdi0+dXJpLmRh
dGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdGl0
bGU6CisgKiBAYmFja19mb3J3YXJkX2xpc3RfaXRlbTogYSAjV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbQorICoKKyAqIFJldHVybnM6IHRoZSBwYWdlIHRpdGxlIG9mIEBiYWNrX2ZvcndhcmRfbGlz
dF9pdGVtIG9yICVOVUxMLgorICovCitjb25zdCBnY2hhciogd2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2l0ZW1fZ2V0X3RpdGxlKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxpc3RJdGVtKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVF9J
VEVNKGxpc3RJdGVtKSwgMCk7CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0
ZSogcHJpdiA9IGxpc3RJdGVtLT5wcml2OworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3
a1RpdGxlKEFkb3B0V0ssIFdLQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlUaXRsZShwcml2LT53a0xp
c3RJdGVtLmdldCgpKSk7CisgICAgaWYgKHRvSW1wbCh3a1RpdGxlLmdldCgpKS0+c3RyaW5nKCku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHByaXYtPnRpdGxlID0gdG9JbXBs
KHdrVGl0bGUuZ2V0KCkpLT5zdHJpbmcoKS51dGY4KCk7CisgICAgcmV0dXJuIHByaXYtPnRpdGxl
LmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRf
b3JpZ2luYWxfdXJpOgorICogQGJhY2tfZm9yd2FyZF9saXN0X2l0ZW06IGEgI1dlYktpdFdlYkhp
c3RvcnlJdGVtCisgKgorICogU2VlIGFsc28gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1f
Z2V0X3VyaSgpLgorICoKKyAqIFJldHVybnM6IHRoZSBvcmlnaW5hbCBVUkkgb2YgQGJhY2tfZm9y
d2FyZF9saXN0X2l0ZW0gb3IgJU5VTEwuCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0qIGxpc3RJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19CQUNL
X0ZPUldBUkRfTElTVF9JVEVNKGxpc3RJdGVtKSwgMCk7CisKKyAgICBXZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtUHJpdmF0ZSogcHJpdiA9IGxpc3RJdGVtLT5wcml2OworICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiB3a09yaWdpbmFsVVJJKEFkb3B0V0ssIFdLQmFja0ZvcndhcmRMaXN0SXRlbUNv
cHlPcmlnaW5hbFVSTChwcml2LT53a0xpc3RJdGVtLmdldCgpKSk7CisgICAgaWYgKHRvSW1wbCh3
a09yaWdpbmFsVVJJLmdldCgpKS0+c3RyaW5nKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHByaXYtPm9yaWdpbmFsVVJJID0gdG9JbXBsKHdrT3JpZ2luYWxVUkkuZ2V0KCkp
LT5zdHJpbmcoKS51dGY4KCk7CisgICAgcmV0dXJuIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdEl0ZW0uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40M2ZjYzdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
Ml9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJP
bmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1faAorI2RlZmluZSBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBX
RUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVF9JVEVNICAgICAgICAgICAgKHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZPUldB
UkRfTElTVF9JVEVNKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qo
KG9iaiksIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0sIFdlYktpdEJhY2tGb3J3
YXJkTGlzdEl0ZW0pKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSVRFTV9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9CQUNLX0ZPUldBUkRfTElTVF9JVEVNLCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtQ2xhc3Mp
KQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldB
UkRfTElTVF9JVEVNKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU1f
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfQkFDS19GT1JXQVJEX0xJU1RfSVRFTSkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZPUldBUkRf
TElTVF9JVEVNX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9UWVBFX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0sIFdlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW1DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1DbGFzcyAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW1D
bGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSBX
ZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRCYWNrRm9y
d2FyZExpc3RJdGVtIHsKKyAgICBHSW5pdGlhbGx5VW5vd25lZCBwYXJlbnQ7CisKKyAgICBXZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbUNsYXNzIHsKKyAgICBHSW5pdGlhbGx5VW5vd25lZENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX2dldF90eXBlICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdj
aGFyICoKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmkgICAgICAgICAgKFdl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGxpc3RfaXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3Qg
Z2NoYXIgKgord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlICAgICAgICAo
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogbGlzdF9pdGVtKTsKKworV0VCS0lUX0FQSSBjb25z
dCBnY2hhciAqCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJp
IChXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBsaXN0X2l0ZW0pOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hMzEyYTlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlX2gKKyNkZWZpbmUgV2Vi
S2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExp
c3QuaCIKKyNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlIDxXZWJL
aXQyL1dlYktpdDIuaD4KKworV2ViS2l0QmFja0ZvcndhcmRMaXN0KiB3ZWJraXRCYWNrRm9yd2Fy
ZExpc3RDcmVhdGUoV0tCYWNrRm9yd2FyZExpc3RSZWYpOworV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbSogd2Via2l0QmFja0ZvcndhcmRMaXN0SXRlbUdldE9yQ3JlYXRlKFdLQmFja0ZvcndhcmRM
aXN0SXRlbVJlZik7Cit2b2lkIHdlYmtpdEJhY2tGb3J3YXJkTGlzdENoYW5nZWQoV2ViS2l0QmFj
a0ZvcndhcmRMaXN0KiwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrQWRkZWRJdGVtLCBXS0Fy
cmF5UmVmIHdrUmVtb3ZlZEl0ZW1zKTsKKworI2VuZGlmIC8vIFdlYktpdEJhY2tGb3J3YXJkTGlz
dFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHAKaW5kZXggMDMwMmFiNy4uZjhiM2M4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVy
Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJMb2FkZXJDbGllbnQuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJXZWJLaXRC
YWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RXJyb3IuaCIKICNpbmNs
dWRlICJXZWJLaXRNYXJzaGFsLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgpAQCAtMTI1
LDYgKzEyNiwxMiBAQCBzdGF0aWMgdm9pZCBkaWRDaGFuZ2VQcm9ncmVzcyhXS1BhZ2VSZWYgcGFn
ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKICAgICB3ZWJraXRXZWJWaWV3U2V0RXN0aW1hdGVk
TG9hZFByb2dyZXNzKHdlYlZpZXcsIFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2UpKTsK
IH0KIAorc3RhdGljIHZvaWQgZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdLUGFnZVJlZiBwYWdl
LCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWRkZWRJdGVtLCBXS0FycmF5UmVmIHJlbW92ZWRJ
dGVtcywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgpKTsKKyAgICB3
ZWJraXRCYWNrRm9yd2FyZExpc3RDaGFuZ2VkKHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3
YXJkX2xpc3Qod2ViVmlldyksIGFkZGVkSXRlbSwgcmVtb3ZlZEl0ZW1zKTsKK30KKwogdm9pZCB3
ZWJraXRXZWJMb2FkZXJDbGllbnRBdHRhY2hMb2FkZXJDbGllbnRUb1BhZ2UoV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50KiBsb2FkZXJDbGllbnQsIFdLUGFnZVJlZiB3a1BhZ2UpCiB7CiAgICAgV0tQYWdl
TG9hZGVyQ2xpZW50IHdrTG9hZGVyQ2xpZW50ID0gewpAQCAtMTUyLDcgKzE1OSw3IEBAIHZvaWQg
d2Via2l0V2ViTG9hZGVyQ2xpZW50QXR0YWNoTG9hZGVyQ2xpZW50VG9QYWdlKFdlYktpdFdlYkxv
YWRlckNsaWVudCogbG9hZGVyCiAgICAgICAgIDAsIC8vIGRpZEJlY29tZVVucmVzcG9uc2l2ZQog
ICAgICAgICAwLCAvLyBkaWRCZWNvbWVSZXNwb25zaXZlCiAgICAgICAgIDAsIC8vIHByb2Nlc3NE
aWRDcmFzaAotICAgICAgICAwLCAvLyBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QKKyAgICAgICAg
ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0LAogICAgICAgICAwLCAvLyBzaG91bGRHb1RvQmFja0Zv
cndhcmRMaXN0SXRlbQogICAgICAgICAwIC8vIGRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4KICAg
ICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmNwcAppbmRleCAyNmM5YjZiLi43NDEyNjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjAsNiArMjAsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXcuaCIKIAorI2luY2x1
ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJD
b250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYkxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIldlYktpdFdlYkxvYWRlckNsaWVudFByaXZhdGUuaCIKQEAgLTUwLDYgKzUxLDcgQEAg
c3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgZG91YmxlIGVzdGltYXRlZExvYWRQ
cm9ncmVzczsKIAogICAgIEdSZWZQdHI8V2ViS2l0V2ViTG9hZGVyQ2xpZW50PiBsb2FkZXJDbGll
bnQ7CisgICAgR1JlZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsK
IH07CiAKIEdfREVGSU5FX1RZUEUoV2ViS2l0V2ViVmlldywgd2Via2l0X3dlYl92aWV3LCBXRUJL
SVRfVFlQRV9XRUJfVklFV19CQVNFKQpAQCAtNjgsNiArNzAsOCBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogCiAgICAgc3RhdGljIEdSZWZQ
dHI8V2ViS2l0V2ViTG9hZGVyQ2xpZW50PiBkZWZhdWx0TG9hZGVyQ2xpZW50ID0gYWRvcHRHUmVm
KFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0xP
QURFUl9DTElFTlQsIE5VTEwpKSk7CiAgICAgd2Via2l0V2ViVmlld1NldExvYWRlckNsaWVudCh3
ZWJWaWV3LCBkZWZhdWx0TG9hZGVyQ2xpZW50LmdldCgpLCB0b0FQSShwYWdlKSk7CisKKyAgICBw
cml2LT5iYWNrRm9yd2FyZExpc3QgPSBhZG9wdEdSZWYod2Via2l0QmFja0ZvcndhcmRMaXN0Q3Jl
YXRlKFdLUGFnZUdldEJhY2tGb3J3YXJkTGlzdCh0b0FQSShwYWdlKSkpKTsKIH0KIAogc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCkBAIC00NTUs
MyArNDU5LDE5IEBAIGdkb3VibGUgd2Via2l0X3dlYl92aWV3X2dldF9lc3RpbWF0ZWRfbG9hZF9w
cm9ncmVzcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CiAgICAgcmV0dXJuIHdlYlZpZXctPnBy
aXYtPmVzdGltYXRlZExvYWRQcm9ncmVzczsKIH0KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2JhY2tfZm9yd2FyZF9saXN0OgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3Cisg
KgorICogT2J0YWlucyB0aGUgI1dlYktpdEJhY2tGb3J3YXJkTGlzdCBhc3NvY2lhdGVkIHdpdGgg
dGhlIGdpdmVuICNXZWJLaXRXZWJWaWV3LiBUaGUKKyAqICNXZWJLaXRCYWNrRm9yd2FyZExpc3Qg
aXMgb3duZWQgYnkgdGhlICNXZWJLaXRXZWJWaWV3LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogdGhlICNXZWJLaXRCYWNrRm9yd2FyZExpc3QKKyAqLworV2ViS2l0QmFja0Zvcndh
cmRMaXN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9W
SUVXKHdlYlZpZXcpLCAwKTsKKworICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5iYWNrRm9yd2Fy
ZExpc3QuZ2V0KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmgKaW5kZXggODM1Yzg4OS4uNTIwZTAwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjcsNiArMjcsNyBA
QAogI2lmbmRlZiBXZWJLaXRXZWJWaWV3X2gKICNkZWZpbmUgV2ViS2l0V2ViVmlld19oCiAKKyNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0RGVmaW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViTG9hZGVyQ2xpZW50Lmg+CkBAIC0xMTEsNiAr
MTEyLDkgQEAgd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF93
ZWJfdmlld19nb19mb3J3YXJkICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAg
ICAqd2ViX3ZpZXcpOwogCitXRUJLSVRfQVBJIFdlYktpdEJhY2tGb3J3YXJkTGlzdCAqCit3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0ICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgKndlYl92aWV3KTsKKwogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Via2l0X3dlYl92aWV3
X2Nhbl9nb19mb3J3YXJkICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJf
dmlldyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvR05VbWFrZWZpbGUuYW0KaW5kZXggMjg1NjBjMC4uZDkxMmI2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAg
LTIsNyArMiw4IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9U
ZXN0V2ViS2l0V2ViQ29udGV4dCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJL
aXRXZWJWaWV3IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRl
ckNsaWVudCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncwor
CVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MgXAorCVByb2dyYW1z
L1dlYktpdDJBUElUZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0CiAKIG5vaW5zdF9QUk9HUkFNUyAr
PSAkKFRFU1RfUFJPR1MpCiB3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzID0gXApAQCAtNjgsMyArNjks
MTAgQEAgUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0aW5nc19TT1VSQ0VT
ID0gXAogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0aW5nc19DUFBGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19U
ZXN0V2ViS2l0U2V0dGluZ3NfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQcm9ncmFt
c19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2Fy
ZExpc3RfU09VUkNFUyA9IFwKKyAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0QmFja0ZvcndhcmRMaXN0X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdz
KQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERBREQgPSAk
KHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tG
b3J3YXJkTGlzdF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9yd2Fy
ZExpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJh
Y2tGb3J3YXJkTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5
ZTQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgi
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1
ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCisvLyBCYWNrIGZv
cndhcmQgbGlzdCBsaW1pdCBpcyAxMDAgYnkgZGVmYXVsdC4KK3N0YXRpYyBjb25zdCBzaXplX3Qg
a0JhY2tGb3J3YXJkTGlzdExpbWl0ID0gMTAwOworCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlciog
a1NlcnZlcjsKKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVy
LCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwg
U291cENsaWVudENvbnRleHQqIGNvbnRleHQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKG1z
Zy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVT
X09LKTsKKworICAgIGNoYXIqIGJvZHkgPSBnX3N0cmR1cF9wcmludGYoIjxodG1sPjx0aXRsZT4l
czwvdGl0bGU+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiIsIHBhdGggKyAxLCBwYXRoICsgMSk7Cisg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfVEFLRSwgYm9keSwgc3RybGVuKGJvZHkpKTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Nv
bXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK2NsYXNzIEJhY2tGb3J3YXJkTGlzdFRl
c3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKEJhY2tGb3J3YXJkTGlzdFRlc3QpOworCisgICAgZW51bSB7CisgICAgICAgIEJh
Y2t3YXJkLAorICAgICAgICBGb3J3YXJkCisgICAgfTsKKworICAgIGVudW0geworICAgICAgICBD
dXJyZW50SXRlbSAgPSAxIDw8IDAsCisgICAgICAgIEFkZGVkSXRlbSAgICA9IDEgPDwgMSwKKyAg
ICAgICAgUmVtb3ZlZEl0ZW1zID0gMSA8PCAyCisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIGNo
ZWNrSXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtLCBjb25zdCBjaGFyKiB0aXRs
ZSwgY29uc3QgY2hhciogdXJpLCBjb25zdCBjaGFyKiBvcmlnaW5hbFVSSSkKKyAgICB7CisgICAg
ICAgIGdfYXNzZXJ0KGl0ZW0pOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3VyaShpdGVtKSwgPT0sIHVyaSk7CisgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdGl0bGUoaXRlbSks
ID09ICwgdGl0bGUpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaShpdGVtKSwgPT0sIG9yaWdpbmFsVVJJKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja0l0ZW1JbmRleChXZWJLaXRCYWNrRm9yd2FyZExp
c3QqIGxpc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X250aF9pdGVtKGxpc3QsIC0xKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfaXRlbShsaXN0KSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgMCkgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9jdXJyZW50X2l0ZW0obGlzdCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEpID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfZm9yd2FyZF9pdGVtKGxpc3QpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjaGVj
a0xpc3QoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0LCB1bnNpZ25lZCB0eXBlLCBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtKiogaXRlbXMsIHVuc2lnbmVkIG5JdGVtcykKKyAgICB7CisgICAg
ICAgIEdMaXN0KiBsaXN0SXRlbXMgPSB0eXBlID09IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkJhY2t3
YXJkID8gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QobGlzdCkgOgorICAg
ICAgICAgICAgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QobGlzdCk7
CisgICAgICAgIGdfYXNzZXJ0KGxpc3RJdGVtcyk7CisKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7
CisgICAgICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gbGlzdEl0ZW1zOyBsaXN0SXRlbTsgbGlz
dEl0ZW0gPSBnX2xpc3RfbmV4dChsaXN0SXRlbSksIGkrKykgeworICAgICAgICAgICAgZ19hc3Nl
cnRfY21wdWludChpLCA8LCBuSXRlbXMpOworICAgICAgICAgICAgZ19hc3NlcnQobGlzdEl0ZW0t
PmRhdGEgPT0gaXRlbXNbaV0pOworICAgICAgICB9CisgICAgICAgIGdfbGlzdF9mcmVlKGxpc3RJ
dGVtcyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYmFja0ZvcndhcmRMaXN0Q2hhbmdlZChX
ZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGFk
ZGVkSXRlbSwgR0xpc3QqIHJlbW92ZWRJdGVtcywgQmFja0ZvcndhcmRMaXN0VGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIHRlc3QtPm1faGFzQ2hhbmdlZCA9IHRydWU7CisKKyAgICAgICAgaWYg
KHRlc3QtPm1fY2hhbmdlZEZsYWdzICYgQmFja0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVtKSB7
CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShh
ZGRlZEl0ZW0pKTsKKyAgICAgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QoYWRkZWRJdGVtKSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZ19hc3NlcnQoIWFkZGVkSXRlbSk7CisKKyAgICAgICAgaWYgKHRlc3QtPm1fY2hhbmdl
ZEZsYWdzICYgQmFja0ZvcndhcmRMaXN0VGVzdDo6UmVtb3ZlZEl0ZW1zKSB7CisgICAgICAgICAg
ICBnX2Fzc2VydChyZW1vdmVkSXRlbXMpOworICAgICAgICAgICAgZm9yIChHTGlzdCogaXRlciA9
IHJlbW92ZWRJdGVtczsgaXRlcjsgaXRlciA9IGl0ZXItPm5leHQpIHsKKyAgICAgICAgICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfSVRFTShpdGVyLT5kYXRhKSk7
CisgICAgICAgICAgICAgICAgaWYgKHRlc3QtPm1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMpCisgICAg
ICAgICAgICAgICAgICAgIGdfYXNzZXJ0KGdfbGlzdF9maW5kKHRlc3QtPm1fZXhwZWN0ZWRSZW1v
dmVkSXRlbXMsIGl0ZXItPmRhdGEpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGdfYXNzZXJ0KCFyZW1vdmVkSXRlbXMpOworICAgIH0KKworICAgIEJhY2tG
b3J3YXJkTGlzdFRlc3QoKQorICAgICAgICA6IG1fbGlzdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Jh
Y2tfZm9yd2FyZF9saXN0KG1fd2ViVmlldykpCisgICAgICAgICwgbV9jaGFuZ2VkRmxhZ3MoMCkK
KyAgICAgICAgLCBtX2hhc0NoYW5nZWQoZmFsc2UpCisgICAgICAgICwgbV9leHBlY3RlZFJlbW92
ZWRJdGVtcygwKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2xpc3QsICJjaGFu
Z2VkIiwgR19DQUxMQkFDSyhiYWNrRm9yd2FyZExpc3RDaGFuZ2VkKSwgdGhpcyk7CisgICAgICAg
IGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9saXN0KSk7
CisgICAgfQorCisgICAgfkJhY2tGb3J3YXJkTGlzdFRlc3QoKQorICAgIHsKKyAgICAgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fbGlzdCwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxMb2Fk
RmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgbV9oYXNDaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
IExvYWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgICAgICBnX2Fz
c2VydChtX2hhc0NoYW5nZWQpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlz
aGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMoR0xpc3QqIHJlbW92ZWRJdGVtcykKKyAgICB7CisgICAg
ICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSByZW1vdmVkSXRlbXM7CisgICAgICAgIHdhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworICAgICAgICBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zID0gMDsK
KyAgICB9CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIG1fbGlzdDsKKyAgICB1bnNpZ25l
ZCBsb25nIG1fY2hhbmdlZEZsYWdzOworICAgIGJvb2wgbV9oYXNDaGFuZ2VkOworICAgIEdMaXN0
KiBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zOworfTsKKworc3RhdGljIHZvaWQgdGVzdEJhY2tGb3J3
YXJkTGlzdE5hdmlnYXRpb24oQmFja0ZvcndhcmRMaXN0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtc1sxXTsKKworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZp
ZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9p
dGVtKHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUlu
ZGV4KHRlc3QtPm1fbGlzdCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19saXN0KHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKworICAgIENT
dHJpbmcgdXJpUGFnZTEgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvUGFnZTEiKTsKKyAgICB0
ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVtIHwg
QmFja0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVtOworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaSh0ZXN0LT5tX3dlYlZpZXcsIHVyaVBhZ2UxLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19iYWNrKHRlc3QtPm1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2dvX2ZvcndhcmQodGVzdC0+bV93ZWJWaWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50
KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAx
KTsKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtUGFnZTEgPSB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpOworICAgIEJhY2tG
b3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbShpdGVtUGFnZTEsICJQYWdlMSIsIHVyaVBhZ2UxLmRh
dGEoKSwgdXJpUGFnZTEuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAg
IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KHRlc3QtPm1f
bGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKworICAgIENTdHJpbmcgdXJpUGFnZTIgPSBrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvUGFnZTIiKTsKKyAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJh
Y2tGb3J3YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QWRk
ZWRJdGVtOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh0ZXN0LT5tX3dlYlZpZXcsIHVy
aVBhZ2UyLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dl
YlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOworICAgIFdlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0qIGl0ZW1QYWdlMiA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVu
dF9pdGVtKHRlc3QtPm1fbGlzdCk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVt
KGl0ZW1QYWdlMiwgIlBhZ2UyIiwgdXJpUGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3Qt
Pm1fbGlzdCkgPT0gaXRlbVBhZ2UxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRM
aXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKKyAgICBpdGVtc1swXSA9IGl0
ZW1QYWdlMTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0
LCBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3Qp
KTsKKworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3Vy
cmVudEl0ZW07CisgICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0
LT5tX2xpc3QpLCA9PSwgMik7CisgICAgZ19hc3NlcnQoaXRlbVBhZ2UxID09IHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tG
b3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbSh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1
cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpLCAiUGFnZTEiLCB1cmlQYWdlMS5kYXRhKCksIHVyaVBh
Z2UxLmRhdGEoKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
YmFja19pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKHRlc3QtPm1fbGlzdCkgPT0gaXRlbVBhZ2UyKTsKKyAg
ICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdCh0ZXN0LT5t
X2xpc3QpKTsKKyAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMjsKKyAgICBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0LCBCYWNrRm9yd2FyZExpc3RUZXN0OjpGb3J3YXJk
LCBpdGVtcywgMSk7CisKKyAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlz
dFRlc3Q6OkN1cnJlbnRJdGVtOworICAgIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkKHRlc3Qt
Pm1fd2ViVmlldyk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZp
ZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOworICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMiA9
PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3Qp
KTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2UyIiwgdXJpUGFnZTIu
ZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkgPT0gaXRlbVBhZ2UxKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+
bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+
bV9saXN0KTsKKyAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKKyAgICBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0LCBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2Fy
ZCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEJhY2tG
b3J3YXJkTGlzdExpbWl0QW5kQ2FjaGUoQmFja0ZvcndhcmRMaXN0VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtCYWNrRm9yd2FyZExpc3RM
aW1pdDsgaSsrKSB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX3N0cmR1cF9wcmludGYo
Ii9QYWdlJWQiLCBpKSk7CisgICAgICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0Zvcndh
cmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07
CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh0ZXN0LT5tX3dlYlZpZXcsIGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgocGF0aC5nZXQoKSkuZGF0YSgpKTsKKyAgICAgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgfQorCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwga0JhY2tG
b3J3YXJkTGlzdExpbWl0KTsKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtUGFn
ZUZpcnN0ID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbSh0ZXN0LT5tX2xp
c3QsIC0oa0JhY2tGb3J3YXJkTGlzdExpbWl0IC0gMSkpOworICAgIEdPd25QdHI8R0xpc3Q+IHJl
bW92ZWRJdGVtcyhnX2xpc3RfcHJlcGVuZCgwLCBpdGVtUGFnZUZpcnN0KSk7CisKKyAgICBHT3du
UHRyPGNoYXI+IHBhdGgoZ19zdHJkdXBfcHJpbnRmKCIvUGFnZSVkIiwga0JhY2tGb3J3YXJkTGlz
dExpbWl0KSk7CisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0
OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbSB8IEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OlJlbW92ZWRJdGVtczsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmko
dGVzdC0+bV93ZWJWaWV3LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMo
cmVtb3ZlZEl0ZW1zLmdldCgpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExp
c3RMaW1pdCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdl
YktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisg
ICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3QiLCAibmF2aWdhdGlv
biIsIHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKTsKKyAgICBCYWNrRm9yd2FyZExpc3RU
ZXN0OjphZGQoIkJhY2tGb3J3YXJkTGlzdCIsICJsaXN0LWxpbWl0LWFuZC1jYWNoZSIsIHRlc3RC
YWNrRm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cisg
ICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oCmluZGV4IDJhYWMxOGMuLjYzMTA5NmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaApAQCAt
MjAsOCArMjAsOSBAQAogI2lmbmRlZiBUZXN0TWFpbl9oCiAjZGVmaW5lIFRlc3RNYWluX2gKIAot
I2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0dPd25QdHIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IYXNoU2V0
Lmg+CiAKICNkZWZpbmUgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDbGFzc05hbWUpIFwKICAgICBz
dGF0aWMgdm9pZCBzZXRVcChDbGFzc05hbWUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkg
XApAQCAtNDIsNiArNDMsMjQgQEAgY2xhc3MgVGVzdAogewogcHVibGljOgogICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoVGVzdCk7CisKKyAgICB+VGVzdCgpCisgICAgeworICAgICAgICBnX2Fz
c2VydChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgb2JqZWN0RmluYWxpemVkKFRlc3QqIHRlc3QsIEdPYmplY3QqIGZpbmFsaXplZE9iamVjdCkK
KyAgICB7CisgICAgICAgIHRlc3QtPm1fd2F0Y2hlZE9iamVjdHMucmVtb3ZlKGZpbmFsaXplZE9i
amVjdCk7CisgICAgfQorCisgICAgdm9pZCBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdPYmplY3QqIG9iamVjdCkKKyAgICB7CisgICAgICAgIG1fd2F0Y2hlZE9iamVjdHMu
YWRkKG9iamVjdCk7CisgICAgICAgIGdfb2JqZWN0X3dlYWtfcmVmKG9iamVjdCwgcmVpbnRlcnBy
ZXRfY2FzdDxHV2Vha05vdGlmeT4ob2JqZWN0RmluYWxpemVkKSwgdGhpcyk7CisgICAgfQorCisg
ICAgSGFzaFNldDxHT2JqZWN0Kj4gbV93YXRjaGVkT2JqZWN0czsKIH07CiAKICNlbmRpZiAvLyBU
ZXN0TWFpbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJWaWV3VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJWaWV3VGVzdC5jcHAKaW5kZXggZjM4NGQzYi4uNTM3OGY1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNw
cApAQCAtMjQsNiArMjQsNyBAQCBXZWJWaWV3VGVzdDo6V2ViVmlld1Rlc3QoKQogICAgIDogbV93
ZWJWaWV3KFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9yZWZfc2luayh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpKSkKICAgICAsIG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQogewor
ICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV93ZWJW
aWV3KSk7CiB9CiAKIFdlYlZpZXdUZXN0Ojp+V2ViVmlld1Rlc3QoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKaW5kZXggY2Mz
MjhhNS4uMWExNmIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViVmlld1Rlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiVGVz
dE1haW4uaCIKICNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KIAotY2xhc3MgV2ViVmlld1Rl
c3QgeworY2xhc3MgV2ViVmlld1Rlc3Q6IHB1YmxpYyBUZXN0IHsKIHB1YmxpYzoKICAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKFdlYlZpZXdUZXN0KTsKICAgICBXZWJWaWV3VGVzdCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IDU0MGM2ZTYuLmZh
M2UzMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAg
LTIzLDYgKzIzLDggQEAKIAogI2RlZmluZSBfX1dFQktJVDJfSF9JTlNJREVfXwogCisjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmlu
ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RXJyb3IuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CmluZGV4IDYyNDg0MjQuLmI3MDY5YTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxp
c3QKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwu
bGlzdApAQCAtMSw0ICsxLDUgQEAKIEJPT0xFQU46T0JKRUNULFNUUklORyxQT0lOVEVSCiBCT09M
RUFOOk9CSkVDVAogQk9PTEVBTjpWT0lECitWT0lEOk9CSkVDVCxQT0lOVEVSCiAK
</data>
<flag name="review"
          id="109912"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>